Procházet zdrojové kódy

Use non nullable account in session mix

Signed-off-by: alperozturk <alper_ozturk@proton.me>
alperozturk před 1 rokem
rodič
revize
b53f9f6093

+ 1 - 1
app/src/main/java/com/nextcloud/client/account/CurrentAccountProvider.java

@@ -24,7 +24,7 @@ public interface CurrentAccountProvider {
      * @return Currently selected {@link Account} or first valid {@link Account} registered in OS or null, if not available at all.
      */
     @Deprecated
-    @Nullable
+    @NonNull
     Account getCurrentAccount();
 
     /**

+ 17 - 23
app/src/main/java/com/nextcloud/client/account/UserAccountManagerImpl.java

@@ -39,8 +39,10 @@ import com.owncloud.android.lib.resources.users.GetUserInfoRemoteOperation;
 import java.io.IOException;
 import java.net.URI;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Optional;
+import java.util.stream.Stream;
 
 import javax.inject.Inject;
 
@@ -51,6 +53,7 @@ public class UserAccountManagerImpl implements UserAccountManager {
 
     private static final String TAG = UserAccountManagerImpl.class.getSimpleName();
     private static final String PREF_SELECT_OC_ACCOUNT = "select_oc_account";
+    @Inject ArbitraryDataProvider arbitraryDataProvider;
 
     private Context context;
     private final AccountManager accountManager;
@@ -132,37 +135,28 @@ public class UserAccountManagerImpl implements UserAccountManager {
     }
 
     @Override
-    @Nullable
+    @NonNull
     public Account getCurrentAccount() {
         Account[] ocAccounts = getAccounts();
-        Account defaultAccount = null;
-
-        ArbitraryDataProvider arbitraryDataProvider = new ArbitraryDataProviderImpl(context);
 
         SharedPreferences appPreferences = PreferenceManager.getDefaultSharedPreferences(context);
         String accountName = appPreferences.getString(PREF_SELECT_OC_ACCOUNT, null);
 
-        // account validation: the saved account MUST be in the list of ownCloud Accounts known by the AccountManager
-        if (accountName != null) {
-            for (Account account : ocAccounts) {
-                if (account.name.equals(accountName)) {
-                    defaultAccount = account;
-                    break;
-                }
-            }
+        Account defaultAccount = Arrays.stream(ocAccounts)
+            .filter(account -> account.name.equals(accountName))
+            .findFirst()
+            .orElse(null);
+
+        // take first which is not pending for removal account as fallback
+        if (defaultAccount == null) {
+            defaultAccount = Arrays.stream(ocAccounts)
+                .filter(account -> !arbitraryDataProvider.getBooleanValue(account.name, PENDING_FOR_REMOVAL))
+                .findFirst()
+                .orElse(null);
         }
 
-        if (defaultAccount == null && ocAccounts.length > 0) {
-            // take first which is not pending for removal account as fallback
-            for (Account account: ocAccounts) {
-                boolean pendingForRemoval = arbitraryDataProvider.getBooleanValue(account.name,
-                                                                                  PENDING_FOR_REMOVAL);
-
-                if (!pendingForRemoval) {
-                    defaultAccount = account;
-                    break;
-                }
-            }
+        if (defaultAccount == null) {
+            defaultAccount = ocAccounts[0];
         }
 
         return defaultAccount;

+ 7 - 21
app/src/main/java/com/nextcloud/client/mixins/SessionMixin.kt

@@ -28,7 +28,7 @@ class SessionMixin(
     private val activity: Activity,
     private val accountManager: UserAccountManager
 ) : ActivityMixin {
-    var currentAccount: Account? = null
+    lateinit var currentAccount: Account
         private set
 
     val capabilities: OCCapability?
@@ -36,8 +36,8 @@ class SessionMixin(
             .map { CapabilityUtils.getCapability(it, activity) }
             .orElse(null)
 
-    fun setAccount(account: Account?) {
-        val validAccount = (account != null && accountManager.setCurrentOwnCloudAccount(account.name))
+    fun setAccount(account: Account) {
+        val validAccount = (accountManager.setCurrentOwnCloudAccount(account.name))
 
         currentAccount = if (validAccount) {
             account
@@ -51,7 +51,6 @@ class SessionMixin(
     }
 
     fun getUser(): Optional<User> = when (val it = this.currentAccount) {
-        null -> Optional.empty()
         else -> accountManager.getUser(it.name)
     }
 
@@ -61,15 +60,9 @@ class SessionMixin(
      * If no valid ownCloud [Account] exists, then the user is requested
      * to create a new ownCloud [Account].
      */
-    private fun getDefaultAccount(): Account? {
+    private fun getDefaultAccount(): Account {
         // default to the most recently used account
-        val newAccount = accountManager.currentAccount
-        if (newAccount == null) {
-            // no account available: force account creation
-            startAccountCreation()
-        }
-
-        return newAccount
+        return accountManager.currentAccount
     }
 
     /**
@@ -83,7 +76,7 @@ class SessionMixin(
         super.onNewIntent(intent)
         val current = accountManager.currentAccount
         val currentAccount = this.currentAccount
-        if (current != null && currentAccount != null && !currentAccount.name.equals(current.name)) {
+        if (!currentAccount.name.equals(current.name)) {
             this.currentAccount = current
         }
     }
@@ -94,7 +87,7 @@ class SessionMixin(
      */
     override fun onRestart() {
         super.onRestart()
-        val validAccount = currentAccount != null && accountManager.exists(currentAccount)
+        val validAccount = accountManager.exists(currentAccount)
         if (!validAccount) {
             getDefaultAccount()
         }
@@ -105,11 +98,4 @@ class SessionMixin(
         val account = accountManager.currentAccount
         setAccount(account)
     }
-
-    override fun onResume() {
-        super.onResume()
-        if (currentAccount == null) {
-            getDefaultAccount()
-        }
-    }
 }