2 * Copyright (C) 2019 The Android Open Source Project
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
5 * except in compliance with the License. You may obtain a copy of the License at
7 * http://www.apache.org/licenses/LICENSE-2.0
9 * Unless required by applicable law or agreed to in writing, software distributed under the
10 * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
11 * KIND, either express or implied. See the License for the specific language governing
12 * permissions and limitations under the License.
15 package com.android.settings.display.darkmode;
17 import android.app.UiModeManager;
18 import android.content.Context;
19 import android.content.res.Configuration;
20 import android.view.View;
21 import android.widget.Button;
22 import androidx.preference.Preference;
23 import androidx.preference.PreferenceScreen;
24 import com.android.settings.R;
25 import com.android.settings.core.BasePreferenceController;
26 import com.android.settingslib.widget.LayoutPreference;
29 * Controller for activate/deactivate night mode button
31 public class DarkModeActivationPreferenceController extends BasePreferenceController {
32 private final UiModeManager mUiModeManager;
33 private Button mTurnOffButton;
34 private Button mTurnOnButton;
36 public DarkModeActivationPreferenceController(Context context,
37 String preferenceKey) {
38 super(context, preferenceKey);
40 mUiModeManager = context.getSystemService(UiModeManager.class);
44 public final void updateState(Preference preference) {
45 final boolean active = (mContext.getResources().getConfiguration().uiMode
46 & Configuration.UI_MODE_NIGHT_YES) != 0;
47 updateNightMode(active);
50 private void updateNightMode(boolean active) {
51 final int autoMode = mUiModeManager.getNightMode();
54 if (autoMode == UiModeManager.MODE_NIGHT_AUTO) {
55 buttonText = mContext.getString(active
56 ? R.string.dark_ui_activation_off_auto
57 : R.string.dark_ui_activation_on_auto);
59 buttonText = mContext.getString(active
60 ? R.string.dark_ui_activation_off_manual
61 : R.string.dark_ui_activation_on_manual);
64 mTurnOnButton.setVisibility(View.GONE);
65 mTurnOffButton.setVisibility(View.VISIBLE);
66 mTurnOffButton.setText(buttonText);
68 mTurnOnButton.setVisibility(View.VISIBLE);
69 mTurnOffButton.setVisibility(View.GONE);
70 mTurnOnButton.setText(buttonText);
75 public CharSequence getSummary() {
76 final boolean isActivated = (mContext.getResources().getConfiguration().uiMode
77 & Configuration.UI_MODE_NIGHT_YES) != 0;
78 final int autoMode = mUiModeManager.getNightMode();
79 if (autoMode == UiModeManager.MODE_NIGHT_AUTO) {
80 return mContext.getString(isActivated
81 ? R.string.dark_ui_summary_on_auto_mode_auto
82 : R.string.dark_ui_summary_off_auto_mode_auto);
84 return mContext.getString(isActivated
85 ? R.string.dark_ui_summary_on_auto_mode_never
86 : R.string.dark_ui_summary_off_auto_mode_never);
90 private final View.OnClickListener mListener = new View.OnClickListener() {
92 public void onClick(View v) {
93 final boolean active = (mContext.getResources().getConfiguration().uiMode
94 & Configuration.UI_MODE_NIGHT_YES) != 0;
95 mUiModeManager.setNightModeActivated(!active);
96 updateNightMode(!active);
101 public void displayPreference(PreferenceScreen screen) {
102 super.displayPreference(screen);
104 final LayoutPreference preference = screen.findPreference(getPreferenceKey());
105 mTurnOnButton = preference.findViewById(R.id.dark_ui_turn_on_button);
106 mTurnOnButton.setOnClickListener(mListener);
107 mTurnOffButton = preference.findViewById(R.id.dark_ui_turn_off_button);
108 mTurnOffButton.setOnClickListener(mListener);
112 public int getAvailabilityStatus() {