Switch between all logged-in reddit accounts is available.

This commit is contained in:
Alex Ning 2019-08-08 20:19:38 +08:00
parent e542ac5138
commit 85597a82d0
4 changed files with 47 additions and 8 deletions

View File

@ -35,6 +35,9 @@ public interface AccountDao {
"karma = :karma WHERE username = :username")
void updateAccountInfo(String username, String profileImageUrl, String bannerImageUrl, int karma);
@Query("SELECT * FROM accounts WHERE username != :username")
LiveData<List<Account>> getAccountsExceptCurrentAccountLiveData(String username);
@Query("SELECT * FROM accounts WHERE is_current_user = 0 ORDER BY username COLLATE NOCASE ASC")
LiveData<List<Account>> getAccountsExceptCurrentAccountLiveData();
@Query("UPDATE accounts SET is_current_user = 1 WHERE username = :username")
void markAccountCurrent(String username);
}

View File

@ -16,7 +16,7 @@ public class AccountRepository {
AccountRepository(RedditDataRoomDatabase redditDataRoomDatabase, String username) {
mAccountDao = redditDataRoomDatabase.accountDao();
mAccountLiveData = mAccountDao.getAccountLiveData(username);
mAccountsExceptCurrentAccountLiveData = mAccountDao.getAccountsExceptCurrentAccountLiveData(username);
mAccountsExceptCurrentAccountLiveData = mAccountDao.getAccountsExceptCurrentAccountLiveData();
}
LiveData<Account> getAccountLiveData() {

View File

@ -191,7 +191,7 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
new AccountRecyclerViewAdapter.ItemSelectedListener() {
@Override
public void accountSelected(Account account) {
new SwitchAccountAsyncTask(mRedditDataRoomDatabase, account.getUsername(), () -> relaunchActivity()).execute();
}
@Override
@ -349,13 +349,17 @@ 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) {
Intent intent = getIntent();
finish();
startActivity(intent);
overridePendingTransition(0, 0);
relaunchActivity();
}
super.onActivityResult(requestCode, resultCode, data);

View File

@ -0,0 +1,32 @@
package ml.docilealligator.infinityforreddit;
import android.os.AsyncTask;
class SwitchAccountAsyncTask extends AsyncTask<Void, Void, Void> {
interface SwitchAccountAsyncTaskListener {
void switched();
}
private RedditDataRoomDatabase redditDataRoomDatabase;
private String newAccountName;
private SwitchAccountAsyncTaskListener switchAccountAsyncTaskListener;
SwitchAccountAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase, String newAccountName,
SwitchAccountAsyncTaskListener switchAccountAsyncTaskListener) {
this.redditDataRoomDatabase = redditDataRoomDatabase;
this.newAccountName = newAccountName;
this.switchAccountAsyncTaskListener = switchAccountAsyncTaskListener;
}
@Override
protected Void doInBackground(Void... voids) {
redditDataRoomDatabase.accountDao().markAllAccountsNonCurrent();
redditDataRoomDatabase.accountDao().markAccountCurrent(newAccountName);
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
switchAccountAsyncTaskListener.switched();
}
}