mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2024-11-10 04:37:25 +01:00
Anonymous mode is available but it is not useable.
This commit is contained in:
parent
a4583f1ecf
commit
17fc426ecb
@ -19,6 +19,9 @@ public interface AccountDao {
|
||||
@Query("UPDATE accounts SET is_current_user = 0 WHERE is_current_user = 1")
|
||||
void markAllAccountsNonCurrent();
|
||||
|
||||
@Query("DELETE FROM accounts WHERE is_current_user = 1")
|
||||
void deleteCurrentAccount();
|
||||
|
||||
@Query("DELETE FROM accounts")
|
||||
void deleteAllAccounts();
|
||||
|
||||
|
@ -37,6 +37,9 @@ class AccessTokenAuthenticator implements Authenticator {
|
||||
String accessToken = response.request().header(RedditUtils.AUTHORIZATION_KEY).substring(RedditUtils.AUTHORIZATION_BASE.length());
|
||||
synchronized (this) {
|
||||
Account account = mRedditDataRoomDatabase.accountDao().getCurrentAccount();
|
||||
if(account == null) {
|
||||
return null;
|
||||
}
|
||||
String accessTokenFromDatabase = account.getAccessToken();
|
||||
if (accessToken.equals(accessTokenFromDatabase)) {
|
||||
String newAccessToken = refreshAccessToken(account);
|
||||
|
@ -152,39 +152,46 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
|
||||
mKarma = savedInstanceState.getInt(ACCOUNT_KARMA_STATE);
|
||||
|
||||
if(!mNullAccessToken && mAccessToken == null) {
|
||||
getCurrentAccountAndBindView();
|
||||
getCurrentAccountAndBindView(false);
|
||||
} else {
|
||||
bindView();
|
||||
bindView(false);
|
||||
}
|
||||
} else {
|
||||
getCurrentAccountAndBindView();
|
||||
getCurrentAccountAndBindView(false);
|
||||
}
|
||||
|
||||
fab.setOnClickListener(view -> postTypeBottomSheetFragment.show(getSupportFragmentManager(), postTypeBottomSheetFragment.getTag()));
|
||||
}
|
||||
|
||||
private void getCurrentAccountAndBindView() {
|
||||
private void getCurrentAccountAndBindView(boolean afterAccountSwitch) {
|
||||
mNullAccessToken = true;
|
||||
new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> {
|
||||
if(account == null) {
|
||||
mNullAccessToken = true;
|
||||
Intent loginIntent = new Intent(this, LoginActivity.class);
|
||||
startActivityForResult(loginIntent, LOGIN_ACTIVITY_REQUEST_CODE);
|
||||
mAccessToken = null;
|
||||
mAccountName = null;
|
||||
mProfileImageUrl = null;
|
||||
mBannerImageUrl = null;
|
||||
mKarma = 0;
|
||||
} else {
|
||||
mNullAccessToken = false;
|
||||
mAccessToken = account.getAccessToken();
|
||||
mAccountName = account.getUsername();
|
||||
mProfileImageUrl = account.getProfileImageUrl();
|
||||
mBannerImageUrl = account.getBannerImageUrl();
|
||||
mKarma = account.getKarma();
|
||||
bindView();
|
||||
}
|
||||
bindView(afterAccountSwitch);
|
||||
}).execute();
|
||||
}
|
||||
|
||||
private void bindView() {
|
||||
sectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
|
||||
viewPager.setAdapter(sectionsPagerAdapter);
|
||||
viewPager.setOffscreenPageLimit(2);
|
||||
tabLayout.setupWithViewPager(viewPager);
|
||||
private void bindView(boolean afterAccountSwitch) {
|
||||
if(!afterAccountSwitch) {
|
||||
sectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
|
||||
viewPager.setAdapter(sectionsPagerAdapter);
|
||||
viewPager.setOffscreenPageLimit(2);
|
||||
tabLayout.setupWithViewPager(viewPager);
|
||||
}
|
||||
|
||||
glide = Glide.with(this);
|
||||
|
||||
@ -192,7 +199,21 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
|
||||
new AccountRecyclerViewAdapter.ItemSelectedListener() {
|
||||
@Override
|
||||
public void accountSelected(Account account) {
|
||||
new SwitchAccountAsyncTask(mRedditDataRoomDatabase, account.getUsername(), () -> relaunchActivity()).execute();
|
||||
new SwitchAccountAsyncTask(mRedditDataRoomDatabase, account.getUsername(), () -> {
|
||||
if(mAccessToken == null) {
|
||||
Intent intent = new Intent(MainActivity.this, MainActivity.class);
|
||||
startActivity(intent);
|
||||
finish();
|
||||
} else {
|
||||
getCurrentAccountAndBindView(true);
|
||||
sectionsPagerAdapter.changeAccessToken(account.getAccessToken());
|
||||
drawer.closeDrawers();
|
||||
mDrawerOnAccountSwitch = false;
|
||||
mDropIconImageView.setImageDrawable(getResources().getDrawable(R.drawable.ic_baseline_arrow_drop_down_24px));
|
||||
accountRecyclerView.setVisibility(View.GONE);
|
||||
allDrawerItemsLinearLayout.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}).execute();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -203,12 +224,22 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
|
||||
|
||||
@Override
|
||||
public void anonymousSelected() {
|
||||
|
||||
new SwitchToAnonymousAccountAsyncTask(mRedditDataRoomDatabase, false,
|
||||
() -> {
|
||||
Intent intent = new Intent(MainActivity.this, MainActivity.class);
|
||||
startActivity(intent);
|
||||
finish();
|
||||
}).execute();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void logoutSelected() {
|
||||
|
||||
new SwitchToAnonymousAccountAsyncTask(mRedditDataRoomDatabase, true,
|
||||
() -> {
|
||||
Intent intent = new Intent(MainActivity.this, MainActivity.class);
|
||||
startActivity(intent);
|
||||
finish();
|
||||
}).execute();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -289,15 +320,17 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
|
||||
Intent intent = new Intent(this, ViewUserDetailActivity.class);
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, mAccountName);
|
||||
startActivity(intent);
|
||||
drawer.closeDrawers();
|
||||
});
|
||||
|
||||
subscriptionLinearLayout.setOnClickListener(view -> {
|
||||
Intent intent = new Intent(this, SubscribedThingListingActivity.class);
|
||||
startActivity(intent);
|
||||
drawer.closeDrawers();
|
||||
});
|
||||
|
||||
settingsLinearLayout.setOnClickListener(view -> {
|
||||
|
||||
drawer.closeDrawers();
|
||||
});
|
||||
}
|
||||
|
||||
@ -350,17 +383,13 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
|
||||
}
|
||||
}
|
||||
|
||||
private void relaunchActivity() {
|
||||
Intent intent = getIntent();
|
||||
finish();
|
||||
startActivity(intent);
|
||||
overridePendingTransition(0, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
if(requestCode == LOGIN_ACTIVITY_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
|
||||
relaunchActivity();
|
||||
Intent intent = getIntent();
|
||||
finish();
|
||||
startActivity(intent);
|
||||
overridePendingTransition(0, 0);
|
||||
}
|
||||
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
@ -400,7 +429,7 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
|
||||
startActivity(intent);
|
||||
return true;
|
||||
case R.id.action_refresh_main_activity:
|
||||
sectionsPagerAdapter.refresh(viewPager.getCurrentItem());
|
||||
sectionsPagerAdapter.refresh();
|
||||
mFetchUserInfoSuccess = false;
|
||||
loadUserData();
|
||||
return true;
|
||||
@ -450,7 +479,7 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
|
||||
|
||||
@Override
|
||||
public void sortTypeSelected(String sortType) {
|
||||
sectionsPagerAdapter.changeSortType(sortType, viewPager.getCurrentItem());
|
||||
sectionsPagerAdapter.changeSortType(sortType);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -520,19 +549,32 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
public int getCount()
|
||||
{
|
||||
if(mAccessToken == null) {
|
||||
return 2;
|
||||
}
|
||||
return 3;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CharSequence getPageTitle(int position) {
|
||||
switch (position) {
|
||||
case 0:
|
||||
return "Best";
|
||||
case 1:
|
||||
return "Popular";
|
||||
case 2:
|
||||
return "All";
|
||||
if(mAccessToken == null) {
|
||||
switch (position) {
|
||||
case 0:
|
||||
return "Popular";
|
||||
case 1:
|
||||
return "All";
|
||||
}
|
||||
} else {
|
||||
switch (position) {
|
||||
case 0:
|
||||
return "Best";
|
||||
case 1:
|
||||
return "Popular";
|
||||
case 2:
|
||||
return "All";
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@ -541,21 +583,43 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
|
||||
@Override
|
||||
public Object instantiateItem(@NonNull ViewGroup container, int position) {
|
||||
Fragment fragment = (Fragment) super.instantiateItem(container, position);
|
||||
switch (position) {
|
||||
case 0:
|
||||
frontPagePostFragment = (PostFragment) fragment;
|
||||
break;
|
||||
case 1:
|
||||
popularPostFragment = (PostFragment) fragment;
|
||||
break;
|
||||
case 2:
|
||||
allPostFragment = (PostFragment) fragment;
|
||||
if(mAccessToken == null) {
|
||||
switch (position) {
|
||||
case 0:
|
||||
popularPostFragment = (PostFragment) fragment;
|
||||
break;
|
||||
case 1:
|
||||
allPostFragment = (PostFragment) fragment;
|
||||
}
|
||||
} else {
|
||||
switch (position) {
|
||||
case 0:
|
||||
frontPagePostFragment = (PostFragment) fragment;
|
||||
break;
|
||||
case 1:
|
||||
popularPostFragment = (PostFragment) fragment;
|
||||
break;
|
||||
case 2:
|
||||
allPostFragment = (PostFragment) fragment;
|
||||
}
|
||||
}
|
||||
return fragment;
|
||||
}
|
||||
|
||||
void changeSortType(String sortType, int fragmentPosition) {
|
||||
switch (fragmentPosition) {
|
||||
void changeAccessToken(String accessToken) {
|
||||
if(frontPagePostFragment != null) {
|
||||
frontPagePostFragment.changeAccessToken(accessToken);
|
||||
}
|
||||
if(popularPostFragment != null) {
|
||||
popularPostFragment.changeAccessToken(accessToken);
|
||||
}
|
||||
if(allPostFragment != null) {
|
||||
allPostFragment.changeAccessToken(accessToken);
|
||||
}
|
||||
}
|
||||
|
||||
void changeSortType(String sortType) {
|
||||
switch (viewPager.getCurrentItem()) {
|
||||
case 0:
|
||||
frontPagePostFragment.changeSortType(sortType);
|
||||
break;
|
||||
@ -567,19 +631,22 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
|
||||
}
|
||||
}
|
||||
|
||||
public void refresh(int fragmentPosition) {
|
||||
if(fragmentPosition == 0) {
|
||||
if(frontPagePostFragment != null) {
|
||||
((FragmentCommunicator) frontPagePostFragment).refresh();
|
||||
}
|
||||
} else if(fragmentPosition == 1) {
|
||||
if(popularPostFragment != null) {
|
||||
((FragmentCommunicator) popularPostFragment).refresh();
|
||||
}
|
||||
} else {
|
||||
if(allPostFragment != null) {
|
||||
((FragmentCommunicator) allPostFragment).refresh();
|
||||
}
|
||||
public void refresh() {
|
||||
switch (viewPager.getCurrentItem()) {
|
||||
case 0:
|
||||
if(frontPagePostFragment != null) {
|
||||
((FragmentCommunicator) frontPagePostFragment).refresh();
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if(popularPostFragment != null) {
|
||||
((FragmentCommunicator) popularPostFragment).refresh();
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if(allPostFragment != null) {
|
||||
((FragmentCommunicator) allPostFragment).refresh();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -95,7 +95,16 @@ class PostDataSourceFactory extends DataSource.Factory {
|
||||
return postDataSource;
|
||||
}
|
||||
|
||||
void changeAccessToken(String accessToken) {
|
||||
this.accessToken = accessToken;
|
||||
}
|
||||
|
||||
void changeSortType(String sortType) {
|
||||
this.sortType = sortType;
|
||||
}
|
||||
|
||||
void changeAccessTokenAndSortType(String accessToken, String sortType) {
|
||||
this.accessToken = accessToken;
|
||||
this.sortType = sortType;
|
||||
}
|
||||
}
|
||||
|
@ -308,6 +308,10 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
|
||||
return rootView;
|
||||
}
|
||||
|
||||
void changeAccessToken(String accessToken) {
|
||||
mPostViewModel.changeAccessToken(accessToken);
|
||||
}
|
||||
|
||||
void changeSortType(String sortType) {
|
||||
mPostViewModel.changeSortType(sortType);
|
||||
}
|
||||
|
@ -1,7 +1,9 @@
|
||||
package ml.docilealligator.infinityforreddit;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.core.util.Pair;
|
||||
import androidx.lifecycle.LiveData;
|
||||
import androidx.lifecycle.MediatorLiveData;
|
||||
import androidx.lifecycle.MutableLiveData;
|
||||
import androidx.lifecycle.Transformations;
|
||||
import androidx.lifecycle.ViewModel;
|
||||
@ -19,7 +21,9 @@ public class PostViewModel extends ViewModel {
|
||||
private LiveData<NetworkState> initialLoadingState;
|
||||
private LiveData<Boolean> hasPostLiveData;
|
||||
private LiveData<PagedList<Post>> posts;
|
||||
private MutableLiveData<String> accessTokenLiveData;
|
||||
private MutableLiveData<String> sortTypeLiveData;
|
||||
private AccessTokenAndSortTypeLiveData accessTokenAndSortTypeLiveData;
|
||||
|
||||
public PostViewModel(Retrofit retrofit, String accessToken, Locale locale, int postType, String sortType,
|
||||
int filter) {
|
||||
@ -32,17 +36,21 @@ public class PostViewModel extends ViewModel {
|
||||
hasPostLiveData = Transformations.switchMap(postDataSourceFactory.getPostDataSourceLiveData(),
|
||||
PostDataSource::hasPostLiveData);
|
||||
|
||||
accessTokenLiveData = new MutableLiveData<>();
|
||||
accessTokenLiveData.postValue(accessToken);
|
||||
sortTypeLiveData = new MutableLiveData<>();
|
||||
sortTypeLiveData.postValue(sortType);
|
||||
|
||||
accessTokenAndSortTypeLiveData = new AccessTokenAndSortTypeLiveData(accessTokenLiveData, sortTypeLiveData);
|
||||
|
||||
PagedList.Config pagedListConfig =
|
||||
(new PagedList.Config.Builder())
|
||||
.setEnablePlaceholders(false)
|
||||
.setPageSize(25)
|
||||
.build();
|
||||
|
||||
posts = Transformations.switchMap(sortTypeLiveData, sort -> {
|
||||
postDataSourceFactory.changeSortType(sortTypeLiveData.getValue());
|
||||
posts = Transformations.switchMap(accessTokenAndSortTypeLiveData, sort -> {
|
||||
postDataSourceFactory.changeAccessTokenAndSortType(accessTokenLiveData.getValue(), sortTypeLiveData.getValue());
|
||||
return (new LivePagedListBuilder(postDataSourceFactory, pagedListConfig)).build();
|
||||
});
|
||||
}
|
||||
@ -59,17 +67,21 @@ public class PostViewModel extends ViewModel {
|
||||
hasPostLiveData = Transformations.switchMap(postDataSourceFactory.getPostDataSourceLiveData(),
|
||||
PostDataSource::hasPostLiveData);
|
||||
|
||||
accessTokenLiveData = new MutableLiveData<>();
|
||||
accessTokenLiveData.postValue(accessToken);
|
||||
sortTypeLiveData = new MutableLiveData<>();
|
||||
sortTypeLiveData.postValue(sortType);
|
||||
|
||||
accessTokenAndSortTypeLiveData = new AccessTokenAndSortTypeLiveData(accessTokenLiveData, sortTypeLiveData);
|
||||
|
||||
PagedList.Config pagedListConfig =
|
||||
(new PagedList.Config.Builder())
|
||||
.setEnablePlaceholders(false)
|
||||
.setPageSize(25)
|
||||
.build();
|
||||
|
||||
posts = Transformations.switchMap(sortTypeLiveData, sort -> {
|
||||
postDataSourceFactory.changeSortType(sortTypeLiveData.getValue());
|
||||
posts = Transformations.switchMap(accessTokenAndSortTypeLiveData, sort -> {
|
||||
postDataSourceFactory.changeAccessTokenAndSortType(accessTokenLiveData.getValue(), sortTypeLiveData.getValue());
|
||||
return (new LivePagedListBuilder(postDataSourceFactory, pagedListConfig)).build();
|
||||
});
|
||||
}
|
||||
@ -86,6 +98,9 @@ public class PostViewModel extends ViewModel {
|
||||
hasPostLiveData = Transformations.switchMap(postDataSourceFactory.getPostDataSourceLiveData(),
|
||||
PostDataSource::hasPostLiveData);
|
||||
|
||||
accessTokenLiveData = new MutableLiveData<>();
|
||||
accessTokenLiveData.postValue(accessToken);
|
||||
|
||||
PagedList.Config pagedListConfig =
|
||||
(new PagedList.Config.Builder())
|
||||
.setEnablePlaceholders(false)
|
||||
@ -93,6 +108,11 @@ public class PostViewModel extends ViewModel {
|
||||
.build();
|
||||
|
||||
posts = (new LivePagedListBuilder(postDataSourceFactory, pagedListConfig)).build();
|
||||
|
||||
posts = Transformations.switchMap(accessTokenLiveData, newAccessToken -> {
|
||||
postDataSourceFactory.changeAccessToken(accessTokenLiveData.getValue());
|
||||
return (new LivePagedListBuilder(postDataSourceFactory, pagedListConfig)).build();
|
||||
});
|
||||
}
|
||||
|
||||
public PostViewModel(Retrofit retrofit, String accessToken, Locale locale, String subredditName, String query,
|
||||
@ -107,9 +127,13 @@ public class PostViewModel extends ViewModel {
|
||||
hasPostLiveData = Transformations.switchMap(postDataSourceFactory.getPostDataSourceLiveData(),
|
||||
PostDataSource::hasPostLiveData);
|
||||
|
||||
accessTokenLiveData = new MutableLiveData<>();
|
||||
accessTokenLiveData.postValue(accessToken);
|
||||
sortTypeLiveData = new MutableLiveData<>();
|
||||
sortTypeLiveData.postValue(sortType);
|
||||
|
||||
accessTokenAndSortTypeLiveData = new AccessTokenAndSortTypeLiveData(accessTokenLiveData, sortTypeLiveData);
|
||||
|
||||
PagedList.Config pagedListConfig =
|
||||
(new PagedList.Config.Builder())
|
||||
.setEnablePlaceholders(false)
|
||||
@ -117,7 +141,7 @@ public class PostViewModel extends ViewModel {
|
||||
.build();
|
||||
|
||||
posts = Transformations.switchMap(sortTypeLiveData, sort -> {
|
||||
postDataSourceFactory.changeSortType(sortTypeLiveData.getValue());
|
||||
postDataSourceFactory.changeAccessTokenAndSortType(accessTokenLiveData.getValue(), sortTypeLiveData.getValue());
|
||||
return (new LivePagedListBuilder(postDataSourceFactory, pagedListConfig)).build();
|
||||
});
|
||||
}
|
||||
@ -154,6 +178,10 @@ public class PostViewModel extends ViewModel {
|
||||
sortTypeLiveData.postValue(sortType);
|
||||
}
|
||||
|
||||
void changeAccessToken(String accessToken) {
|
||||
accessTokenLiveData.postValue(accessToken);
|
||||
}
|
||||
|
||||
public static class Factory extends ViewModelProvider.NewInstanceFactory {
|
||||
private Retrofit retrofit;
|
||||
private String accessToken;
|
||||
@ -221,4 +249,11 @@ public class PostViewModel extends ViewModel {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static class AccessTokenAndSortTypeLiveData extends MediatorLiveData<Pair<String, String>> {
|
||||
public AccessTokenAndSortTypeLiveData(LiveData<String> accessToken, LiveData<String> sortType) {
|
||||
addSource(accessToken, accessToken1 -> setValue(Pair.create(accessToken1, sortType.getValue())));
|
||||
addSource(sortType, sortType1 -> setValue(Pair.create(accessToken.getValue(), sortType1)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,37 @@
|
||||
package ml.docilealligator.infinityforreddit;
|
||||
|
||||
import android.os.AsyncTask;
|
||||
|
||||
import Account.AccountDao;
|
||||
|
||||
class SwitchToAnonymousAccountAsyncTask extends AsyncTask<Void, Void, Void> {
|
||||
interface SwitchToAnonymousAccountAsyncTaskListener {
|
||||
void logoutSuccess();
|
||||
}
|
||||
|
||||
private RedditDataRoomDatabase redditDataRoomDatabase;
|
||||
private boolean removeCurrentAccount;
|
||||
private SwitchToAnonymousAccountAsyncTaskListener switchToAnonymousAccountAsyncTaskListener;
|
||||
|
||||
SwitchToAnonymousAccountAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase, boolean removeCurrentAccount,
|
||||
SwitchToAnonymousAccountAsyncTaskListener switchToAnonymousAccountAsyncTaskListener) {
|
||||
this.redditDataRoomDatabase = redditDataRoomDatabase;
|
||||
this.removeCurrentAccount = removeCurrentAccount;
|
||||
this.switchToAnonymousAccountAsyncTaskListener = switchToAnonymousAccountAsyncTaskListener;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Void doInBackground(Void... voids) {
|
||||
AccountDao accountDao = redditDataRoomDatabase.accountDao();
|
||||
if(removeCurrentAccount) {
|
||||
accountDao.deleteCurrentAccount();
|
||||
}
|
||||
accountDao.markAllAccountsNonCurrent();
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Void aVoid) {
|
||||
switchToAnonymousAccountAsyncTaskListener.logoutSuccess();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user