ソースを参照

AuthenticatorActivity: after login, immediately cache color in OCCapability

Needed to draw the next screen correctly

Signed-off-by: Álvaro Brey <alvaro.brey@nextcloud.com>
Álvaro Brey 2 年 前
コミット
2bf3cbe473

+ 1 - 1
app/build.gradle

@@ -354,7 +354,7 @@ dependencies {
     gplayImplementation "com.google.firebase:firebase-messaging:23.0.7"
 
     // TODO change back to tag before merging
-    implementation 'com.github.nextcloud.android-common:ui:802c404'
+    implementation 'com.github.nextcloud.android-common:ui:8e65fb0'
 }
 
 configurations.all {

+ 2 - 2
app/src/main/java/com/nextcloud/client/di/ThemeModule.kt

@@ -21,10 +21,10 @@
 package com.nextcloud.client.di
 
 import com.nextcloud.android.common.ui.theme.MaterialSchemes
-import com.owncloud.android.utils.theme.ThemeColorUtils
-import com.owncloud.android.utils.theme.ThemeUtils
 import com.owncloud.android.utils.theme.MaterialSchemesProvider
 import com.owncloud.android.utils.theme.MaterialSchemesProviderImpl
+import com.owncloud.android.utils.theme.ThemeColorUtils
+import com.owncloud.android.utils.theme.ThemeUtils
 import dagger.Binds
 import dagger.Module
 import dagger.Provides

+ 15 - 0
app/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java

@@ -75,6 +75,7 @@ import android.widget.Toast;
 
 import com.blikoon.qrcodescanner.QrCodeActivity;
 import com.google.android.material.snackbar.Snackbar;
+import com.nextcloud.android.common.ui.color.ColorUtil;
 import com.nextcloud.client.account.User;
 import com.nextcloud.client.account.UserAccountManager;
 import com.nextcloud.client.device.DeviceInfo;
@@ -118,6 +119,7 @@ import com.owncloud.android.ui.dialog.SslUntrustedCertDialog.OnSslUntrustedCertL
 import com.owncloud.android.utils.DisplayUtils;
 import com.owncloud.android.utils.ErrorMessageAdapter;
 import com.owncloud.android.utils.PermissionUtil;
+import com.owncloud.android.utils.theme.CapabilityUtils;
 import com.owncloud.android.utils.theme.ViewThemeUtils;
 
 import java.io.InputStream;
@@ -233,6 +235,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
     @Inject DeviceInfo deviceInfo;
     @Inject PassCodeManager passCodeManager;
     @Inject ViewThemeUtils viewThemeUtils;
+    @Inject ColorUtil colorUtil;
 
     private boolean onlyAdd = false;
     @SuppressLint("ResourceAsColor") @ColorInt
@@ -1129,6 +1132,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
 
             if (success) {
                 accountManager.setCurrentOwnCloudAccount(mAccount.name);
+                setupColorCapability();
                 if (onlyAdd) {
                     finish();
                 } else {
@@ -1188,6 +1192,17 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
         }
     }
 
+    /**
+     * Caches a fake OCCapability with only the server color, so that it is immediately available for drawing the next
+     * screens
+     */
+    private void setupColorCapability() {
+        final OCCapability colorCapability = new OCCapability();
+        colorCapability.setServerColor(colorUtil.colorToHexString(primaryColor));
+        colorCapability.setAccountName(mAccount.name);
+        CapabilityUtils.updateCapability(colorCapability);
+    }
+
     /**
      * Updates the authentication token.
      * <p>

+ 3 - 3
app/src/main/java/com/owncloud/android/utils/theme/FilesSpecificViewThemeUtils.kt

@@ -38,6 +38,7 @@ import androidx.annotation.StringRes
 import androidx.appcompat.app.ActionBar
 import androidx.core.content.res.ResourcesCompat
 import com.google.android.material.card.MaterialCardView
+import com.nextcloud.android.common.ui.color.ColorUtil
 import com.nextcloud.android.common.ui.theme.MaterialSchemes
 import com.nextcloud.android.common.ui.theme.ViewThemeUtilsBase
 import com.nextcloud.android.common.ui.theme.utils.AndroidViewThemeUtils
@@ -52,6 +53,7 @@ import javax.inject.Inject
 
 class FilesSpecificViewThemeUtils @Inject constructor(
     schemes: MaterialSchemes,
+    private val colorUtil: ColorUtil,
     private val androidViewThemeUtils: AndroidViewThemeUtils,
     private val androidXViewThemeUtils: AndroidXViewThemeUtils
 ) : ViewThemeUtilsBase(schemes) {
@@ -230,7 +232,7 @@ class FilesSpecificViewThemeUtils @Inject constructor(
 
     fun primaryColorToHexString(context: Context): String {
         return withScheme(context) { scheme ->
-            String.format("#%06X", HEX_WHITE and scheme.primary)
+            colorUtil.colorToHexString(scheme.primary)
         }
     }
 
@@ -243,8 +245,6 @@ class FilesSpecificViewThemeUtils @Inject constructor(
     companion object {
         private val TAG = FilesSpecificViewThemeUtils::class.simpleName
 
-        private const val HEX_WHITE = 0xFFFFFF
-
         private object AvatarPadding {
             @Px
             const val SMALL = 4

+ 1 - 1
app/src/main/java/com/owncloud/android/utils/theme/ViewThemeUtils.kt

@@ -51,5 +51,5 @@ class ViewThemeUtils @Inject constructor(
     val dialog = DialogViewThemeUtils(schemes)
 
     @JvmField
-    val files = FilesSpecificViewThemeUtils(schemes, platform, androidx)
+    val files = FilesSpecificViewThemeUtils(schemes, colorUtil, platform, androidx)
 }