mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2024-11-10 04:37:25 +01:00
Prevent loading user and subreddit data after orientation change if they were fetched before. Refresh current fragment in SearchResultActivity instead of all fragments when refreshing.
This commit is contained in:
parent
d408a47dba
commit
a4583f1ecf
@ -268,14 +268,16 @@ public class SearchResultActivity extends AppCompatActivity implements SearchPos
|
||||
}
|
||||
|
||||
public void refresh() {
|
||||
if(postFragment != null) {
|
||||
((FragmentCommunicator) postFragment).refresh();
|
||||
}
|
||||
if(subredditListingFragment != null) {
|
||||
((FragmentCommunicator) subredditListingFragment).refresh();
|
||||
}
|
||||
if (userListingFragment != null) {
|
||||
((FragmentCommunicator) userListingFragment).refresh();
|
||||
switch (viewPager.getCurrentItem()) {
|
||||
case 0:
|
||||
((FragmentCommunicator) postFragment).refresh();
|
||||
break;
|
||||
case 1:
|
||||
((FragmentCommunicator) subredditListingFragment).refresh();
|
||||
break;
|
||||
case 2:
|
||||
((FragmentCommunicator) userListingFragment).refresh();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -42,6 +42,7 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
|
||||
|
||||
public static final String EXTRA_SUBREDDIT_NAME_KEY = "ESN";
|
||||
|
||||
private static final String FETCH_SUBREDDIT_INFO_STATE = "FSIS";
|
||||
private static final String FRAGMENT_OUT_STATE_KEY = "FOSK";
|
||||
private static final String IS_IN_LAZY_MODE_STATE = "IILMS";
|
||||
private static final String NULL_ACCESS_TOKEN_STATE = "NATS";
|
||||
@ -65,6 +66,7 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
|
||||
private String mAccessToken;
|
||||
private String mAccountName;
|
||||
private String subredditName;
|
||||
private boolean mFetchSubredditInfoSuccess = false;
|
||||
private boolean subscriptionReady = false;
|
||||
private boolean isInLazyMode = false;
|
||||
|
||||
@ -97,9 +99,12 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
|
||||
|
||||
((Infinity) getApplication()).getAppComponent().inject(this);
|
||||
|
||||
subredditName = getIntent().getExtras().getString(EXTRA_SUBREDDIT_NAME_KEY);
|
||||
|
||||
if(savedInstanceState == null) {
|
||||
getCurrentAccountAndBindView();
|
||||
} else {
|
||||
mFetchSubredditInfoSuccess = savedInstanceState.getBoolean(FETCH_SUBREDDIT_INFO_STATE);
|
||||
mNullAccessToken = savedInstanceState.getBoolean(NULL_ACCESS_TOKEN_STATE);
|
||||
mAccessToken = savedInstanceState.getString(ACCESS_TOKEN_STATE);
|
||||
mAccountName = savedInstanceState.getString(ACCOUNT_NAME_STATE);
|
||||
@ -114,6 +119,8 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
|
||||
}
|
||||
}
|
||||
|
||||
fetchSubredditData();
|
||||
|
||||
postTypeBottomSheetFragment = new PostTypeBottomSheetFragment();
|
||||
|
||||
sortTypeBottomSheetFragment = new SortTypeBottomSheetFragment();
|
||||
@ -130,7 +137,6 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
|
||||
statusBarHeight = getResources().getDimensionPixelSize(resourceId);
|
||||
}
|
||||
|
||||
subredditName = getIntent().getExtras().getString(EXTRA_SUBREDDIT_NAME_KEY);
|
||||
String title = "r/" + subredditName;
|
||||
subredditNameTextView.setText(title);
|
||||
|
||||
@ -200,21 +206,6 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
|
||||
}
|
||||
});
|
||||
|
||||
FetchSubredditData.fetchSubredditData(mRetrofit, subredditName, new FetchSubredditData.FetchSubredditDataListener() {
|
||||
@Override
|
||||
public void onFetchSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers) {
|
||||
new InsertSubredditDataAsyncTask(mRedditDataRoomDatabase, subredditData)
|
||||
.execute();
|
||||
String nOnlineSubscribers = getString(R.string.online_subscribers_number_detail, nCurrentOnlineSubscribers);
|
||||
nOnlineSubscribersTextView.setText(nOnlineSubscribers);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFetchSubredditDataFail() {
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
fab.setOnClickListener(view -> postTypeBottomSheetFragment.show(getSupportFragmentManager(), postTypeBottomSheetFragment.getTag()));
|
||||
}
|
||||
|
||||
@ -230,6 +221,26 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
|
||||
}).execute();
|
||||
}
|
||||
|
||||
private void fetchSubredditData() {
|
||||
if(!mFetchSubredditInfoSuccess) {
|
||||
FetchSubredditData.fetchSubredditData(mRetrofit, subredditName, new FetchSubredditData.FetchSubredditDataListener() {
|
||||
@Override
|
||||
public void onFetchSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers) {
|
||||
new InsertSubredditDataAsyncTask(mRedditDataRoomDatabase, subredditData, () -> {
|
||||
nOnlineSubscribersTextView.setText(getString(R.string.online_subscribers_number_detail, nCurrentOnlineSubscribers));
|
||||
mFetchSubredditInfoSuccess = true;
|
||||
}).execute();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFetchSubredditDataFail() {
|
||||
makeSnackbar(R.string.cannot_fetch_subreddit_info, true);
|
||||
mFetchSubredditInfoSuccess = false;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void bindView(boolean initializeFragment) {
|
||||
subscribeSubredditChip.setOnClickListener(view -> {
|
||||
if(subscriptionReady) {
|
||||
@ -242,13 +253,13 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
|
||||
public void onSubredditSubscriptionSuccess() {
|
||||
subscribeSubredditChip.setText(R.string.unsubscribe);
|
||||
subscribeSubredditChip.setChipBackgroundColor(getResources().getColorStateList(R.color.colorAccent));
|
||||
makeSnackbar(R.string.subscribed);
|
||||
makeSnackbar(R.string.subscribed, false);
|
||||
subscriptionReady = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSubredditSubscriptionFail() {
|
||||
makeSnackbar(R.string.subscribe_failed);
|
||||
makeSnackbar(R.string.subscribe_failed, false);
|
||||
subscriptionReady = true;
|
||||
}
|
||||
});
|
||||
@ -260,13 +271,13 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
|
||||
public void onSubredditSubscriptionSuccess() {
|
||||
subscribeSubredditChip.setText(R.string.subscribe);
|
||||
subscribeSubredditChip.setChipBackgroundColor(getResources().getColorStateList(R.color.backgroundColorPrimaryDark));
|
||||
makeSnackbar(R.string.unsubscribed);
|
||||
makeSnackbar(R.string.unsubscribed, false);
|
||||
subscriptionReady = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSubredditSubscriptionFail() {
|
||||
makeSnackbar(R.string.unsubscribe_failed);
|
||||
makeSnackbar(R.string.unsubscribe_failed, false);
|
||||
subscriptionReady = true;
|
||||
}
|
||||
});
|
||||
@ -367,6 +378,7 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
|
||||
@Override
|
||||
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
outState.putBoolean(FETCH_SUBREDDIT_INFO_STATE, mFetchSubredditInfoSuccess);
|
||||
outState.putBoolean(IS_IN_LAZY_MODE_STATE, isInLazyMode);
|
||||
outState.putBoolean(NULL_ACCESS_TOKEN_STATE, mNullAccessToken);
|
||||
outState.putString(ACCESS_TOKEN_STATE, mAccessToken);
|
||||
@ -374,8 +386,13 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
|
||||
getSupportFragmentManager().putFragment(outState, FRAGMENT_OUT_STATE_KEY, mFragment);
|
||||
}
|
||||
|
||||
private void makeSnackbar(int resId) {
|
||||
Snackbar.make(coordinatorLayout, resId, Snackbar.LENGTH_SHORT).show();
|
||||
private void makeSnackbar(int resId, boolean retry) {
|
||||
if(retry) {
|
||||
Snackbar.make(coordinatorLayout, resId, Snackbar.LENGTH_SHORT).setAction(R.string.retry,
|
||||
view -> fetchSubredditData()).show();
|
||||
} else {
|
||||
Snackbar.make(coordinatorLayout, resId, Snackbar.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -411,12 +428,19 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
|
||||
|
||||
private static class InsertSubredditDataAsyncTask extends AsyncTask<Void, Void, Void> {
|
||||
|
||||
interface InsertSubredditDataAsyncTaskListener {
|
||||
void insertSuccess();
|
||||
}
|
||||
|
||||
private SubredditDao mSubredditDao;
|
||||
private SubredditData subredditData;
|
||||
private InsertSubredditDataAsyncTaskListener insertSubredditDataAsyncTaskListener;
|
||||
|
||||
InsertSubredditDataAsyncTask(RedditDataRoomDatabase db, SubredditData subredditData) {
|
||||
InsertSubredditDataAsyncTask(RedditDataRoomDatabase db, SubredditData subredditData,
|
||||
InsertSubredditDataAsyncTaskListener insertSubredditDataAsyncTaskListener) {
|
||||
mSubredditDao = db.subredditDao();
|
||||
this.subredditData = subredditData;
|
||||
this.insertSubredditDataAsyncTaskListener = insertSubredditDataAsyncTaskListener;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -424,5 +448,10 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
|
||||
mSubredditDao.insert(subredditData);
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Void aVoid) {
|
||||
insertSubredditDataAsyncTaskListener.insertSuccess();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -45,6 +45,7 @@ public class ViewUserDetailActivity extends AppCompatActivity {
|
||||
|
||||
public static final String EXTRA_USER_NAME_KEY = "EUNK";
|
||||
|
||||
private static final String FETCH_USER_INFO_STATE = "FSIS";
|
||||
private static final String NULL_ACCESS_TOKEN_STATE = "NATS";
|
||||
private static final String ACCESS_TOKEN_STATE = "ATS";
|
||||
private static final String ACCOUNT_NAME_STATE = "ANS";
|
||||
@ -74,6 +75,7 @@ public class ViewUserDetailActivity extends AppCompatActivity {
|
||||
private String mAccountName;
|
||||
private String username;
|
||||
private boolean subscriptionReady = false;
|
||||
private boolean mFetchUserInfoSuccess = false;
|
||||
private boolean isInLazyMode = false;
|
||||
private int expandedTabTextColor;
|
||||
private int expandedTabBackgroundColor;
|
||||
@ -102,9 +104,12 @@ public class ViewUserDetailActivity extends AppCompatActivity {
|
||||
|
||||
((Infinity) getApplication()).getAppComponent().inject(this);
|
||||
|
||||
username = getIntent().getExtras().getString(EXTRA_USER_NAME_KEY);
|
||||
|
||||
if(savedInstanceState == null) {
|
||||
getCurrentAccountAndInitializeViewPager();
|
||||
} else {
|
||||
mFetchUserInfoSuccess = savedInstanceState.getBoolean(FETCH_USER_INFO_STATE);
|
||||
mNullAccessToken = savedInstanceState.getBoolean(NULL_ACCESS_TOKEN_STATE);
|
||||
mAccessToken = savedInstanceState.getString(ACCESS_TOKEN_STATE);
|
||||
mAccountName = savedInstanceState.getString(ACCOUNT_NAME_STATE);
|
||||
@ -117,6 +122,8 @@ public class ViewUserDetailActivity extends AppCompatActivity {
|
||||
}
|
||||
}
|
||||
|
||||
fetchUserInfo();
|
||||
|
||||
params = (AppBarLayout.LayoutParams) collapsingToolbarLayout.getLayoutParams();
|
||||
|
||||
//Get status bar height
|
||||
@ -126,7 +133,6 @@ public class ViewUserDetailActivity extends AppCompatActivity {
|
||||
statusBarHeight = getResources().getDimensionPixelSize(resourceId);
|
||||
}
|
||||
|
||||
username = getIntent().getExtras().getString(EXTRA_USER_NAME_KEY);
|
||||
String title = "u/" + username;
|
||||
userNameTextView.setText(title);
|
||||
|
||||
@ -217,13 +223,13 @@ public class ViewUserDetailActivity extends AppCompatActivity {
|
||||
public void onUserFollowingSuccess() {
|
||||
subscribeUserChip.setText(R.string.unfollow);
|
||||
subscribeUserChip.setChipBackgroundColor(getResources().getColorStateList(R.color.colorAccent));
|
||||
makeSnackbar(R.string.followed);
|
||||
makeSnackbar(R.string.followed, false);
|
||||
subscriptionReady = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUserFollowingFail() {
|
||||
makeSnackbar(R.string.follow_failed);
|
||||
makeSnackbar(R.string.follow_failed, false);
|
||||
subscriptionReady = true;
|
||||
}
|
||||
});
|
||||
@ -234,13 +240,13 @@ public class ViewUserDetailActivity extends AppCompatActivity {
|
||||
public void onUserFollowingSuccess() {
|
||||
subscribeUserChip.setText(R.string.follow);
|
||||
subscribeUserChip.setChipBackgroundColor(getResources().getColorStateList(R.color.backgroundColorPrimaryDark));
|
||||
makeSnackbar(R.string.unfollowed);
|
||||
makeSnackbar(R.string.unfollowed, false);
|
||||
subscriptionReady = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUserFollowingFail() {
|
||||
makeSnackbar(R.string.unfollow_failed);
|
||||
makeSnackbar(R.string.unfollow_failed, false);
|
||||
subscriptionReady = true;
|
||||
}
|
||||
});
|
||||
@ -276,18 +282,6 @@ public class ViewUserDetailActivity extends AppCompatActivity {
|
||||
karmaTextView.setText(karma);
|
||||
}
|
||||
});
|
||||
|
||||
FetchUserData.fetchUserData(mRetrofit, username, new FetchUserData.FetchUserDataListener() {
|
||||
@Override
|
||||
public void onFetchUserDataSuccess(UserData userData) {
|
||||
new InsertUserDataAsyncTask(mRedditDataRoomDatabase.userDao(), userData).execute();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFetchUserDataFailed() {
|
||||
makeSnackbar(R.string.cannot_fetch_user_info);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void getCurrentAccountAndInitializeViewPager() {
|
||||
@ -309,6 +303,24 @@ public class ViewUserDetailActivity extends AppCompatActivity {
|
||||
tabLayout.setupWithViewPager(viewPager);
|
||||
}
|
||||
|
||||
private void fetchUserInfo() {
|
||||
if(!mFetchUserInfoSuccess) {
|
||||
FetchUserData.fetchUserData(mRetrofit, username, new FetchUserData.FetchUserDataListener() {
|
||||
@Override
|
||||
public void onFetchUserDataSuccess(UserData userData) {
|
||||
new InsertUserDataAsyncTask(mRedditDataRoomDatabase.userDao(), userData,
|
||||
() -> mFetchUserInfoSuccess = true).execute();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFetchUserDataFailed() {
|
||||
makeSnackbar(R.string.cannot_fetch_user_info, true);
|
||||
mFetchUserInfoSuccess = false;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
getMenuInflater().inflate(R.menu.view_user_detail_activity, menu);
|
||||
@ -369,14 +381,20 @@ public class ViewUserDetailActivity extends AppCompatActivity {
|
||||
@Override
|
||||
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
outState.putBoolean(FETCH_USER_INFO_STATE, mFetchUserInfoSuccess);
|
||||
outState.putBoolean(IS_IN_LAZY_MODE_STATE, isInLazyMode);
|
||||
outState.putBoolean(NULL_ACCESS_TOKEN_STATE, mNullAccessToken);
|
||||
outState.putString(ACCESS_TOKEN_STATE, mAccessToken);
|
||||
outState.putString(ACCOUNT_NAME_STATE, mAccountName);
|
||||
}
|
||||
|
||||
private void makeSnackbar(int resId) {
|
||||
Snackbar.make(coordinatorLayout, resId, Snackbar.LENGTH_SHORT).show();
|
||||
private void makeSnackbar(int resId, boolean retry) {
|
||||
if(retry) {
|
||||
Snackbar.make(coordinatorLayout, resId, Snackbar.LENGTH_SHORT).setAction(R.string.retry,
|
||||
view -> fetchUserInfo()).show();
|
||||
} else {
|
||||
Snackbar.make(coordinatorLayout, resId, Snackbar.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
|
||||
public abstract static class AppBarStateChangeListener implements AppBarLayout.OnOffsetChangedListener {
|
||||
@ -419,12 +437,19 @@ public class ViewUserDetailActivity extends AppCompatActivity {
|
||||
|
||||
private static class InsertUserDataAsyncTask extends AsyncTask<Void, Void, Void> {
|
||||
|
||||
interface InsertUserDataAsyncTaskListener {
|
||||
void insertSuccess();
|
||||
}
|
||||
|
||||
private UserDao userDao;
|
||||
private UserData subredditData;
|
||||
private InsertUserDataAsyncTaskListener insertUserDataAsyncTaskListener;
|
||||
|
||||
InsertUserDataAsyncTask(UserDao userDao, UserData userData) {
|
||||
InsertUserDataAsyncTask(UserDao userDao, UserData userData,
|
||||
InsertUserDataAsyncTaskListener insertUserDataAsyncTaskListener) {
|
||||
this.userDao = userDao;
|
||||
this.subredditData = userData;
|
||||
this.insertUserDataAsyncTaskListener = insertUserDataAsyncTaskListener;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -432,6 +457,11 @@ public class ViewUserDetailActivity extends AppCompatActivity {
|
||||
userDao.insert(subredditData);
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Void aVoid) {
|
||||
insertUserDataAsyncTaskListener.insertSuccess();
|
||||
}
|
||||
}
|
||||
|
||||
private class SectionsPagerAdapter extends FragmentPagerAdapter {
|
||||
|
Loading…
Reference in New Issue
Block a user