From 85597a82d065374955153c0481663fac2b0c3264 Mon Sep 17 00:00:00 2001 From: Alex Ning Date: Thu, 8 Aug 2019 20:19:38 +0800 Subject: Switch between all logged-in reddit accounts is available. --- app/src/main/java/Account/AccountDao.java | 7 +++-- app/src/main/java/Account/AccountRepository.java | 2 +- .../infinityforreddit/MainActivity.java | 14 ++++++---- .../infinityforreddit/SwitchAccountAsyncTask.java | 32 ++++++++++++++++++++++ 4 files changed, 47 insertions(+), 8 deletions(-) create mode 100644 app/src/main/java/ml/docilealligator/infinityforreddit/SwitchAccountAsyncTask.java (limited to 'app') diff --git a/app/src/main/java/Account/AccountDao.java b/app/src/main/java/Account/AccountDao.java index 22eae5d5..b3672bb5 100644 --- a/app/src/main/java/Account/AccountDao.java +++ b/app/src/main/java/Account/AccountDao.java @@ -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> getAccountsExceptCurrentAccountLiveData(String username); + @Query("SELECT * FROM accounts WHERE is_current_user = 0 ORDER BY username COLLATE NOCASE ASC") + LiveData> getAccountsExceptCurrentAccountLiveData(); + + @Query("UPDATE accounts SET is_current_user = 1 WHERE username = :username") + void markAccountCurrent(String username); } diff --git a/app/src/main/java/Account/AccountRepository.java b/app/src/main/java/Account/AccountRepository.java index 33927077..7aa77b51 100644 --- a/app/src/main/java/Account/AccountRepository.java +++ b/app/src/main/java/Account/AccountRepository.java @@ -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 getAccountLiveData() { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/MainActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/MainActivity.java index 2f6c313b..5f5272f7 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/MainActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/MainActivity.java @@ -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); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/SwitchAccountAsyncTask.java b/app/src/main/java/ml/docilealligator/infinityforreddit/SwitchAccountAsyncTask.java new file mode 100644 index 00000000..f5b9c37b --- /dev/null +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/SwitchAccountAsyncTask.java @@ -0,0 +1,32 @@ +package ml.docilealligator.infinityforreddit; + +import android.os.AsyncTask; + +class SwitchAccountAsyncTask extends AsyncTask { + 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(); + } +} -- cgit v1.2.3