aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/src/main/java/Account/AccountDao.java7
-rw-r--r--app/src/main/java/Account/AccountRepository.java2
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/MainActivity.java14
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/SwitchAccountAsyncTask.java32
4 files changed, 47 insertions, 8 deletions
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<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);
}
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<Account> 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<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();
+ }
+}