Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f4bc80c4 authored by Jay Aliomer's avatar Jay Aliomer
Browse files

Battery saver mode should disable dark mode modification

disable toggle options and disable the dark theme drop down selection

Test: make -j64 RunSettingsRoboTests ROBOTEST_FILTER="com.android.settings.display.DarkUIPreferenceControllerTest" && \
make -j64 RunSettingsRoboTests ROBOTEST_FILTER="com.android.settings.display.darkmode.DarkModeActivationPreferenceControllerTest" && \
make -j64 RunSettingsRoboTests ROBOTEST_FILTER="com.android.settings.display.darkmode.DarkModeObserverTest" && \
make -j64 RunSettingsRoboTests ROBOTEST_FILTER="com.android.settings.display.darkmode.DarkModeScheduleSelectorControllerTest"

Fixes: 	145098277
Fixes: 145297188
Fixes: 	145254016
Change-Id: I5c81a295810cc2d9a45657978104647e9c15da46
parent 5dd4272e
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -24,7 +24,7 @@
    <DropDownPreference
        android:key="dark_ui_auto_mode"
        android:title="@string/dark_ui_auto_mode_title"
        android:summary="%s"
        android:summary="@string/summary_placeholder"
        android:entries="@array/dark_ui_scheduler_preference_titles"
        android:entryValues="@array/dark_ui_scheduler_preference_titles"
        settings:controller="com.android.settings.display.darkmode.DarkModeScheduleSelectorController"
+0 −2
Original line number Diff line number Diff line
@@ -32,7 +32,6 @@ import androidx.preference.PreferenceScreen;

import com.android.settings.R;
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;
@@ -92,7 +91,6 @@ public class DarkUIPreferenceController extends TogglePreferenceController imple
                        Settings.Secure.DARK_MODE_DIALOG_SEEN, 0) == DIALOG_SEEN;
        if (!dialogSeen && isChecked) {
            showDarkModeDialog();
            return false;
        }
        return mUiModeManager.setNightModeActivated(isChecked);
    }
+11 −1
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@ package com.android.settings.display.darkmode;
import android.app.UiModeManager;
import android.content.Context;
import android.content.res.Configuration;
import android.os.PowerManager;
import android.view.View;
import android.widget.Button;
import androidx.preference.Preference;
@@ -30,18 +31,27 @@ import com.android.settingslib.widget.LayoutPreference;
 */
public class DarkModeActivationPreferenceController extends BasePreferenceController {
    private final UiModeManager mUiModeManager;
    private PowerManager mPowerManager;
    private Button mTurnOffButton;
    private Button mTurnOnButton;

    public DarkModeActivationPreferenceController(Context context,
            String preferenceKey) {
        super(context, preferenceKey);

        mPowerManager = context.getSystemService(PowerManager.class);
        mUiModeManager = context.getSystemService(UiModeManager.class);
    }

    @Override
    public final void updateState(Preference preference) {

        final boolean batterySaver = mPowerManager.isPowerSaveMode();
        if (batterySaver) {
            mTurnOnButton.setVisibility(View.GONE);
            mTurnOffButton.setVisibility(View.GONE);
            return;
        }

        final boolean active = (mContext.getResources().getConfiguration().uiMode
                & Configuration.UI_MODE_NIGHT_YES) != 0;
        updateNightMode(active);
+23 −0
Original line number Diff line number Diff line
@@ -14,18 +14,30 @@

package com.android.settings.display.darkmode;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
import android.os.PowerManager;
import android.provider.Settings;
import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;

/**
 * Observes changes for dark night settings*/
public class DarkModeObserver {
    private static final String TAG = "DarkModeObserver";
    private ContentObserver mContentObserver;
    private final BroadcastReceiver mBatterySaverReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            mCallback.run();
        }
    };
    private Runnable mCallback;
    private Context mContext;

@@ -58,6 +70,10 @@ public class DarkModeObserver {
        mCallback = callback;
        final Uri uri = Settings.Secure.getUriFor(Settings.Secure.UI_NIGHT_MODE);
        mContext.getContentResolver().registerContentObserver(uri, false, mContentObserver);
        final IntentFilter batteryFilter = new IntentFilter();
        batteryFilter.addAction(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED);
        mContext.registerReceiver(
                mBatterySaverReceiver, batteryFilter);
    }

    /**
@@ -65,6 +81,13 @@ public class DarkModeObserver {
     */
    public void unsubscribe() {
        mContext.getContentResolver().unregisterContentObserver(mContentObserver);
        try {
            mContext.unregisterReceiver(mBatterySaverReceiver);
        } catch (IllegalArgumentException e) {
            /* Ignore: unregistering an unregistered receiver */
            Log.w(TAG, e.getMessage());
        }
        // NO-OP
        mCallback = null;
    }

+15 −4
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@ package com.android.settings.display.darkmode;
import android.app.UiModeManager;
import android.content.Context;
import android.content.res.Configuration;
import android.os.PowerManager;
import android.util.AttributeSet;
import com.android.settings.R;
import com.android.settings.widget.MasterSwitchPreference;
@@ -27,14 +28,20 @@ public class DarkModePreference extends MasterSwitchPreference {

    private UiModeManager mUiModeManager;
    private DarkModeObserver mDarkModeObserver;
    private PowerManager mPowerManager;
    private Runnable mCallback;

    public DarkModePreference(Context context, AttributeSet attrs) {
        super(context, attrs);
        mDarkModeObserver = new DarkModeObserver(context);
        mUiModeManager = context.getSystemService(UiModeManager.class);
        mPowerManager = context.getSystemService(PowerManager.class);
        mCallback = () -> {
            updateSummary();
            final boolean batterySaver = mPowerManager.isPowerSaveMode();
            final boolean active = (getContext().getResources().getConfiguration().uiMode
                    & Configuration.UI_MODE_NIGHT_YES) != 0;
            setSwitchEnabled(!batterySaver);
            updateSummary(batterySaver, active);
        };
        mDarkModeObserver.subscribe(mCallback);
    }
@@ -51,9 +58,13 @@ public class DarkModePreference extends MasterSwitchPreference {
        mDarkModeObserver.unsubscribe();
    }

    private void updateSummary() {
        final boolean active = (getContext().getResources().getConfiguration().uiMode
                & Configuration.UI_MODE_NIGHT_YES) != 0;
    private void updateSummary(boolean batterySaver, boolean active) {
        if (batterySaver) {
            final int stringId = active ? R.string.dark_ui_mode_disabled_summary_dark_theme_on
                    : R.string.dark_ui_mode_disabled_summary_dark_theme_off;
            setSummary(getContext().getString(stringId));
            return;
        }
        final boolean auto = mUiModeManager.getNightMode() == UiModeManager.MODE_NIGHT_AUTO;

        String detail;
Loading