mirror of
https://github.com/nextcloud/android.git
synced 2024-11-23 05:35:39 +03:00
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>
This commit is contained in:
parent
131bd9e62c
commit
b181336c6d
2 changed files with 6 additions and 89 deletions
|
@ -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;
|
||||
});
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue