X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fcom%2Fandroid%2Fsettings%2Fdisplay%2FDarkUIPreferenceController.java;h=7e550d7420af320f3e1fd45dbd9ff54dc3454dee;hb=53ad4fedc6bf00a48c8164b28d21fba394f056b4;hp=7d8fd56ae1316633c3d6fe7d55ba45231c4f7b7e;hpb=70da69b0acf2b0ce5de26f46a3b5ff539c2830e8;p=android-x86%2Fpackages-apps-Settings.git diff --git a/src/com/android/settings/display/DarkUIPreferenceController.java b/src/com/android/settings/display/DarkUIPreferenceController.java index 7d8fd56ae1..7e550d7420 100644 --- a/src/com/android/settings/display/DarkUIPreferenceController.java +++ b/src/com/android/settings/display/DarkUIPreferenceController.java @@ -17,38 +17,131 @@ package com.android.settings.display; import android.app.UiModeManager; +import android.content.BroadcastReceiver; import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.res.Configuration; +import android.os.PowerManager; +import android.provider.Settings; import androidx.annotation.VisibleForTesting; -import androidx.preference.ListPreference; +import androidx.fragment.app.Fragment; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import com.android.settings.R; -import com.android.settings.core.BasePreferenceController; +import com.android.settings.core.TogglePreferenceController; +import com.android.settings.display.darkmode.DarkModePreference; +import com.android.settingslib.core.lifecycle.LifecycleObserver; +import com.android.settingslib.core.lifecycle.events.OnStart; +import com.android.settingslib.core.lifecycle.events.OnStop; -public class DarkUIPreferenceController extends BasePreferenceController { +public class DarkUIPreferenceController extends TogglePreferenceController implements + LifecycleObserver, OnStart, OnStop { + + public static final String DARK_MODE_PREFS = "dark_mode_prefs"; + public static final String PREF_DARK_MODE_DIALOG_SEEN = "dark_mode_dialog_seen"; + public static final int DIALOG_SEEN = 1; + + @VisibleForTesting + Preference mPreference; private UiModeManager mUiModeManager; + private PowerManager mPowerManager; + private Context mContext; + + private Fragment mFragment; + + private BroadcastReceiver mReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + updateEnabledStateIfNeeded(); + } + }; public DarkUIPreferenceController(Context context, String key) { super(context, key); + mContext = context; mUiModeManager = context.getSystemService(UiModeManager.class); + mPowerManager = context.getSystemService(PowerManager.class); + } + + @Override + public boolean isChecked() { + return (mContext.getResources().getConfiguration().uiMode + & Configuration.UI_MODE_NIGHT_YES) != 0; + } + + @Override + public void displayPreference(PreferenceScreen screen) { + super.displayPreference(screen); + mPreference = screen.findPreference(getPreferenceKey()); + } + + @Override + public void updateState(Preference preference) { + super.updateState(preference); + updateEnabledStateIfNeeded(); + } + + @Override + public boolean setChecked(boolean isChecked) { + final boolean dialogSeen = + Settings.Secure.getInt(mContext.getContentResolver(), + Settings.Secure.DARK_MODE_DIALOG_SEEN, 0) == DIALOG_SEEN; + if (!dialogSeen && isChecked) { + showDarkModeDialog(); + return false; + } + return mUiModeManager.setNightModeActivated(isChecked); + } + + private void showDarkModeDialog() { + final DarkUIInfoDialogFragment frag = new DarkUIInfoDialogFragment(); + if (mFragment != null && mFragment.getFragmentManager() != null) { + frag.show(mFragment.getFragmentManager(), getClass().getName()); + } + } + + @VisibleForTesting + void updateEnabledStateIfNeeded() { + if (mPreference == null) { + return; + } + boolean isBatterySaver = isPowerSaveMode(); + mPreference.setEnabled(!isBatterySaver); + if (isBatterySaver) { + int stringId = isChecked() + ? R.string.dark_ui_mode_disabled_summary_dark_theme_on + : R.string.dark_ui_mode_disabled_summary_dark_theme_off; + mPreference.setSummary(mContext.getString(stringId)); + } } @VisibleForTesting - void setUiModeManager(UiModeManager uiModeManager) { - mUiModeManager = uiModeManager; + boolean isPowerSaveMode() { + return mPowerManager.isPowerSaveMode(); } @Override - public int getAvailabilityStatus() { - return AVAILABLE; + public void onStart() { + mContext.registerReceiver(mReceiver, + new IntentFilter(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED)); + } + + // used by AccessibilitySettings + public void setParentFragment(Fragment fragment) { + mFragment = fragment; } @Override - public CharSequence getSummary() { - return DarkUISettingsRadioButtonsController.modeToDescription( - mContext, mUiModeManager.getNightMode()); + public void onStop() { + mContext.unregisterReceiver(mReceiver); + } + + @Override + public int getAvailabilityStatus() { + return AVAILABLE; } }