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

Commit 710fd22f authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Turn on location dialog when using twilight scheduling" into rvc-dev

parents 14c5ea7b 59c03c23
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -2807,6 +2807,12 @@
    <!-- Night display slice screen, subtitle of intensity setting when night light is off. [CHAR LIMIT=30] -->
    <string name="night_display_not_currently_on">Night Light not currently on</string>
    <!-- Twilight Mode -->
    <!-- When location mode is off, twilight scheduling does not function. [CHAR LIMIT=40] -->
    <string name="twilight_mode_location_off_dialog_message">Device location needed to determine you sunset to sunrise</string>
    <!-- When location mode is off, twilight scheduling does not function. [CHAR LIMIT=40] -->
    <string name="twilight_mode_launch_location">Turn on location</string>
    <!--    Dark ui screen-->
    <!-- Display settings screen, activation button action for manual mode. [CHAR LIMIT=40] -->
    <string name="dark_ui_activation_on_manual">Turn on now</string>
+8 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.settings.display;

import android.content.Context;
import android.hardware.display.ColorDisplayManager;
import android.location.LocationManager;

import androidx.preference.DropDownPreference;
import androidx.preference.Preference;
@@ -29,12 +30,14 @@ import com.android.settings.core.BasePreferenceController;
public class NightDisplayAutoModePreferenceController extends BasePreferenceController
        implements Preference.OnPreferenceChangeListener {

    private final LocationManager mLocationManager;
    private DropDownPreference mPreference;
    private ColorDisplayManager mColorDisplayManager;

    public NightDisplayAutoModePreferenceController(Context context, String key) {
        super(context, key);
        mColorDisplayManager = context.getSystemService(ColorDisplayManager.class);
        mLocationManager = context.getSystemService(LocationManager.class);
    }

    @Override
@@ -68,6 +71,11 @@ public class NightDisplayAutoModePreferenceController extends BasePreferenceCont

    @Override
    public final boolean onPreferenceChange(Preference preference, Object newValue) {
        if (String.valueOf(ColorDisplayManager.AUTO_MODE_TWILIGHT).equals(newValue)
                && !mLocationManager.isLocationEnabled()) {
            TwilightLocationDialog.show(mContext);
            return false;
        }
        return mColorDisplayManager.setNightDisplayAutoMode(Integer.parseInt((String) newValue));
    }
}
+47 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.settings.display;

import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

import com.android.settings.R;
import com.android.settings.Settings;

/*
 * This class lauches a dialog when users try to use twilight scheduling without
 * turning on location services
 */
public class TwilightLocationDialog {
    public static String TAG = "TwilightLocationDialog";

    public static void show(Context context) {
        final AlertDialog dialog = new AlertDialog.Builder(context)
                .setPositiveButton(R.string.twilight_mode_launch_location, ((dialog1, which) -> {
                    Log.d(TAG, "clicked forget");
                    final Intent intent = new Intent();
                    intent.setClass(context, Settings.LocationSettingsActivity.class);
                    context.startActivity(intent);
                }))
                .setNegativeButton(R.string.cancel, null /* listener */)
                .setMessage(R.string.twilight_mode_location_off_dialog_message)
                .create();
        dialog.show();
    }
}
+8 −0
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.location.LocationManager;
import android.os.PowerManager;

import androidx.preference.DropDownPreference;
@@ -25,6 +26,7 @@ import androidx.preference.PreferenceScreen;

import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.display.TwilightLocationDialog;

/**
 * Controller for the dark ui option dropdown
@@ -35,12 +37,14 @@ public class DarkModeScheduleSelectorController extends BasePreferenceController
    private final UiModeManager mUiModeManager;
    private PowerManager mPowerManager;
    private DropDownPreference mPreference;
    private LocationManager mLocationManager;
    private int mCurrentMode;

    public DarkModeScheduleSelectorController(Context context, String key) {
        super(context, key);
        mUiModeManager = context.getSystemService(UiModeManager.class);
        mPowerManager = context.getSystemService(PowerManager.class);
        mLocationManager = context.getSystemService(LocationManager.class);
    }

    @Override
@@ -93,6 +97,10 @@ public class DarkModeScheduleSelectorController extends BasePreferenceController
            mUiModeManager.setNightMode(mode);
        } else if (mCurrentMode == mPreference.findIndexOfValue(
                mContext.getString(R.string.dark_ui_auto_mode_auto))) {
            if (!mLocationManager.isLocationEnabled()) {
                TwilightLocationDialog.show(mContext);
                return false;
            }
            mUiModeManager.setNightMode(UiModeManager.MODE_NIGHT_AUTO);
        } else if (mCurrentMode == mPreference.findIndexOfValue(
                mContext.getString(R.string.dark_ui_auto_mode_custom))) {
+14 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import static org.mockito.Mockito.when;

import android.app.UiModeManager;
import android.content.Context;
import android.location.LocationManager;
import android.os.PowerManager;

import androidx.preference.DropDownPreference;
@@ -55,6 +56,8 @@ public class DarkModeScheduleSelectorControllerTest {
    @Mock
    private UiModeManager mUiService;
    @Mock
    private LocationManager mLocationManager;
    @Mock
    private PowerManager mPM;

    @Before
@@ -63,6 +66,7 @@ public class DarkModeScheduleSelectorControllerTest {
        mContext = spy(RuntimeEnvironment.application);
        when(mContext.getSystemService(UiModeManager.class)).thenReturn(mUiService);
        when(mContext.getSystemService(PowerManager.class)).thenReturn(mPM);
        when(mContext.getSystemService(LocationManager.class)).thenReturn(mLocationManager);
        when(mContext.getString(R.string.dark_ui_auto_mode_never)).thenReturn("never");
        when(mContext.getString(R.string.dark_ui_auto_mode_auto)).thenReturn("auto");
        when(mContext.getString(R.string.dark_ui_auto_mode_custom)).thenReturn("custom");
@@ -72,6 +76,7 @@ public class DarkModeScheduleSelectorControllerTest {
                mContext.getString(R.string.dark_ui_auto_mode_auto)
        });
        doNothing().when(mPreference).setValueIndex(anyInt());
        when(mLocationManager.isLocationEnabled()).thenReturn(true);
        when(mScreen.findPreference(anyString())).thenReturn(mPreference);
        when(mUiService.setNightModeActivated(anyBoolean())).thenReturn(true);
        mController = new DarkModeScheduleSelectorController(mContext, mPreferenceKey);
@@ -96,6 +101,15 @@ public class DarkModeScheduleSelectorControllerTest {
        verify(mPreference).setValueIndex(0);
    }

    @Test
    public void nightMode_selectNightMode_locationOff() {
        when(mLocationManager.isLocationEnabled()).thenReturn(false);
        mController.onPreferenceChange(mPreference,
                mContext.getString(R.string.dark_ui_auto_mode_never));
        assertFalse(mController.onPreferenceChange(mPreference,
                mContext.getString(R.string.dark_ui_auto_mode_auto)));
    }

    @Test
    public void nightMode_updateStateNone_dropDownValueChangedToAuto() {
        when(mUiService.getNightMode()).thenReturn(UiModeManager.MODE_NIGHT_AUTO);