Przeglądaj źródła

SettingsActivity: completely relaunch activity when dark mode is changed

recreate() is not enough and leaves the activity in a broken state

Signed-off-by: Álvaro Brey <alvaro.brey@nextcloud.com>
Álvaro Brey 2 lat temu
rodzic
commit
b181336c6d

+ 6 - 6
app/src/main/java/com/owncloud/android/ui/activity/SettingsActivity.java

@@ -31,11 +31,11 @@ import android.content.SharedPreferences;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.res.Configuration;
-import android.graphics.drawable.ColorDrawable;
 import android.net.Uri;
 import android.os.Bundle;
 import android.preference.ListPreference;
 import android.preference.Preference;
+import android.preference.PreferenceActivity;
 import android.preference.PreferenceCategory;
 import android.preference.PreferenceManager;
 import android.preference.PreferenceScreen;
@@ -98,7 +98,7 @@ import androidx.core.content.res.ResourcesCompat;
  * <p>
  * It proxies the necessary calls via {@link androidx.appcompat.app.AppCompatDelegate} to be used with AppCompat.
  */
-public class SettingsActivity extends ThemedPreferenceActivity
+public class SettingsActivity extends PreferenceActivity
     implements StorageMigration.StorageMigrationProgressListener, LoadingVersionNumberTask.VersionDevInterface,
     Injectable {
 
@@ -151,10 +151,6 @@ public class SettingsActivity extends ThemedPreferenceActivity
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
-        if (themeUtils.themingEnabled(this)) {
-            setTheme(R.style.FallbackThemingTheme);
-        }
-
         getDelegate().installViewFactory();
         getDelegate().onCreate(savedInstanceState);
         addPreferencesFromResource(R.xml.preferences);
@@ -729,6 +725,10 @@ public class SettingsActivity extends ThemedPreferenceActivity
             DarkMode mode = DarkMode.valueOf((String) newValue);
             preferences.setDarkThemeMode(mode);
             MainApp.setAppTheme(mode);
+            finish();
+            Intent intent = new Intent(this, SettingsActivity.class);
+            intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
+            startActivity(intent);
 
             return true;
         });

+ 0 - 83
app/src/main/java/com/owncloud/android/ui/activity/ThemedPreferenceActivity.java

@@ -1,83 +0,0 @@
-/*
- * Nextcloud Android client application
- *
- * @author Daniel Bailey
- * Copyright (C) 2019 Daniel Bailey
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
- *
- * You should have received a copy of the GNU Affero General Public
- * License along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package com.owncloud.android.ui.activity;
-
-import android.os.Bundle;
-import android.preference.PreferenceActivity;
-
-import com.nextcloud.client.preferences.AppPreferences;
-import com.nextcloud.client.preferences.DarkMode;
-
-import javax.inject.Inject;
-
-import androidx.annotation.Nullable;
-
-public class ThemedPreferenceActivity extends PreferenceActivity {
-
-    /**
-     * Tracks whether the activity should be recreate()'d after a theme change
-     */
-    private boolean themeChangePending;
-    private boolean paused;
-
-    @Inject AppPreferences preferences;
-
-    private AppPreferences.Listener onThemeChangedListener = new AppPreferences.Listener() {
-        @Override
-        public void onDarkThemeModeChanged(DarkMode mode) {
-            preferences.setDarkThemeMode(mode);
-
-            if (paused) {
-                themeChangePending = true;
-                return;
-            }
-            recreate();
-        }
-    };
-
-    @Override
-    protected void onPostCreate(@Nullable Bundle savedInstanceState) {
-        super.onPostCreate(savedInstanceState);
-        preferences.addListener(onThemeChangedListener);
-    }
-
-    @Override
-    protected void onDestroy() {
-        super.onDestroy();
-        preferences.removeListener(onThemeChangedListener);
-    }
-
-    @Override
-    protected void onPause() {
-        super.onPause();
-        paused = true;
-    }
-
-    @Override
-    protected void onResume() {
-        super.onResume();
-        paused = false;
-
-        if (themeChangePending) {
-            recreate();
-        }
-    }
-}