Ver Fonte

Add AnonymousAccount for fresh install

Signed-off-by: alperozturk <alper_ozturk@proton.me>
alperozturk há 1 ano atrás
pai
commit
77a34ac481

+ 14 - 5
app/src/main/java/com/nextcloud/client/account/UserAccountManagerImpl.java

@@ -20,6 +20,7 @@ import android.preference.PreferenceManager;
 import android.text.TextUtils;
 
 import com.nextcloud.common.NextcloudClient;
+import com.nextcloud.utils.extensions.AccountExtensionsKt;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.authentication.AuthenticatorActivity;
@@ -154,12 +155,20 @@ public class UserAccountManagerImpl implements UserAccountManager {
         }
 
         if (defaultAccount == null) {
-            defaultAccount = ocAccounts[0];
+            if (ocAccounts.length > 0) {
+                defaultAccount = ocAccounts[0];
+            } else {
+                defaultAccount = getAnonymousAccount();
+            }
         }
 
         return defaultAccount;
     }
 
+    private Account getAnonymousAccount() {
+        return new Account("Anonymous", context.getString(R.string.anonymous_account_type));
+    }
+
     /**
      * Temporary solution to convert platform account to user instance.
      * It takes null and returns null on error to ease error handling
@@ -169,8 +178,8 @@ public class UserAccountManagerImpl implements UserAccountManager {
      * @return User instance or null, if conversion failed
      */
     @Nullable
-    private User createUserFromAccount(@Nullable Account account) {
-        if (account == null) {
+    private User createUserFromAccount(@NonNull Account account) {
+        if (AccountExtensionsKt.isAnonymous(account, context)) {
             return null;
         }
 
@@ -252,7 +261,7 @@ public class UserAccountManagerImpl implements UserAccountManager {
     }
 
     @Override
-    @Nullable
+    @NonNull
     public Account getAccountByName(String name) {
         for (Account account : getAccounts()) {
             if (account.name.equals(name)) {
@@ -260,7 +269,7 @@ public class UserAccountManagerImpl implements UserAccountManager {
             }
         }
 
-        return null;
+        return getAnonymousAccount();
     }
 
     @Override

+ 16 - 3
app/src/main/java/com/nextcloud/client/mixins/SessionMixin.kt

@@ -13,6 +13,7 @@ import android.content.Intent
 import android.os.Bundle
 import com.nextcloud.client.account.User
 import com.nextcloud.client.account.UserAccountManager
+import com.nextcloud.utils.extensions.isAnonymous
 import com.owncloud.android.lib.resources.status.OCCapability
 import com.owncloud.android.utils.theme.CapabilityUtils
 import java.util.Optional
@@ -50,8 +51,12 @@ class SessionMixin(
         setAccount(user.toPlatformAccount())
     }
 
-    fun getUser(): Optional<User> = when (val it = this.currentAccount) {
-        else -> accountManager.getUser(it.name)
+    fun getUser(): Optional<User> {
+        return if (currentAccount.isAnonymous(activity)) {
+            Optional.empty()
+        } else {
+            accountManager.getUser(currentAccount.name)
+        }
     }
 
     /**
@@ -60,7 +65,15 @@ class SessionMixin(
      * If no valid ownCloud [Account] exists, then the user is requested
      * to create a new ownCloud [Account].
      */
-    private fun getDefaultAccount(): Account = accountManager.currentAccount
+    private fun getDefaultAccount(): Account {
+        val defaultAccount = accountManager.currentAccount
+
+        if (defaultAccount.isAnonymous(activity)) {
+            startAccountCreation()
+        }
+
+        return defaultAccount
+    }
 
     /**
      * Launches the account creation activity.

+ 14 - 0
app/src/main/java/com/nextcloud/utils/extensions/AccountExtensions.kt

@@ -0,0 +1,14 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2024 Your Name <your@email.com>
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+package com.nextcloud.utils.extensions
+
+import android.accounts.Account
+import android.content.Context
+import com.owncloud.android.R
+
+fun Account.isAnonymous(context: Context): Boolean = type.equals(context.getString(R.string.anonymous_account_type))

+ 2 - 0
app/src/main/res/values/strings.xml

@@ -30,6 +30,8 @@
     <string name="app_config_proxy_host_title">Proxy Host Name</string>
     <string name="app_config_proxy_port_title">Proxy Port</string>
 
+    <string name="anonymous_account_type" translatable="false">AnonymousAccountType</string>
+
     <string name="assistant_screen_task_types_error_state_message">Unable to fetch task types, please check your internet connection.</string>
     <string name="assistant_screen_task_list_error_state_message">Unable to fetch task list, please check your internet connection.</string>