Merge changes from topic "am-c6def7815cdf4546b81daf23e68818be"

* changes:
  Merge "Restore long press power setting back to gestures" into sc-dev am: 6b1b210bab am: 40b53b4818
  Merge "Update power button gesture menu" into sc-dev am: 5b8cc84c04 am: 7b18f8638b
This commit is contained in:
Automerger Merge Worker
2021-06-29 08:09:36 +00:00
committed by Android (Google) Code Review
9 changed files with 233 additions and 188 deletions

View File

@@ -1,26 +0,0 @@
<!--
Copyright (C) 2021 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?android:attr/colorControlNormal">
<path
android:pathData="M11,2h2v10h-2zM18.37,5.64l-1.41,1.41c2.73,2.73 2.72,7.16 -0.01,9.89 -2.73,2.73 -7.17,2.73 -9.89,0.01 -2.73,-2.73 -2.74,-7.18 -0.01,-9.91l-1.41,-1.4c-3.51,3.51 -3.51,9.21 0.01,12.73 3.51,3.51 9.21,3.51 12.72,-0.01 3.51,-3.51 3.51,-9.2 0,-12.72z"
android:fillColor="@android:color/white"/>
</vector>

View File

@@ -13203,23 +13203,29 @@
<string name="cards_passes_lower">cards &amp; passes</string> <string name="cards_passes_lower">cards &amp; passes</string>
<!-- Power menu setting name [CHAR LIMIT=NONE] --> <!-- Power menu setting name [CHAR LIMIT=NONE] -->
<string name="power_menu_setting_name">Power menu</string> <string name="power_menu_setting_name">Press and hold power button</string>
<!-- Power menu setting title [CHAR LIMIT=NONE] --> <!-- Power menu setting summary to describe press and hold power button for Assistant is enabled. [CHAR LIMIT=NONE] -->
<string name="power_menu_setting_title">Power button menu</string> <string name="power_menu_summary_long_press_for_assist_enabled">Press and hold for the Assistant</string>
<!-- Power menu setting summary to describe press and hold power button for Assistant is disabled and power menu will appear. [CHAR LIMIT=NONE] -->
<!-- Power menu setting option none [CHAR LIMIT=NONE] --> <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu">Press and hold for the power menu</string>
<string name="power_menu_none">Don\u2019t show any content</string> <!-- Power menu setting summary to describe press and hold power button for Assistant is disabled and nothing will happen. [CHAR LIMIT=NONE] -->
<string name="power_menu_summary_long_press_for_assist_disabled_no_action">Press and hold disabled</string>
<!-- Power menu setting privacy no secure screen lock set [CHAR_LIMIT=NONE] --> <!-- Power menu setting privacy no secure screen lock set [CHAR_LIMIT=NONE] -->
<string name="lockscreen_privacy_not_secure">To use, first set a screen lock</string> <string name="lockscreen_privacy_not_secure">To use, first set a screen lock</string>
<!-- Power menu setting use long press power to invoke assistant. [CHAR_LIMIT=NONE] --> <!-- Power menu setting use long press power to invoke assistant. [CHAR LIMIT=NONE] -->
<string name="power_menu_long_press_for_assist">Hold for Assistant</string> <string name="power_menu_long_press_for_assist">Hold for Assistant</string>
<!-- Power menu setting use log press power to invoke assistant summary. [CHAR_LIMIT=NONE] --> <!-- Power menu setting use log press power to invoke assistant summary. [CHAR LIMIT=NONE] -->
<string name="power_menu_long_press_for_assist_summary">Trigger the Assistant by holding the power button</string> <string name="power_menu_long_press_for_assist_summary">Trigger the Assistant by holding the power button</string>
<!-- Power menu explanation to press power and volume up to show power and emergency menu. [CHAR LIMIT=NONE] -->
<string name="power_menu_power_volume_up_hint">Power &amp; Emergency Menu:\nPress Power and Volume up at the same time.</string>
<!-- Power menu explanation where to find prevent ringing option. [CHAR LIMIT=NONE] -->
<string name="power_menu_power_prevent_ringing_hint">Prevent ringing:\nShortcut available in the volume menu.</string>
<!-- Wallet (formerly Cards and passes) toggle name [CHAR LIMIT=60] --> <!-- Wallet (formerly Cards and passes) toggle name [CHAR LIMIT=60] -->
<string name="lockscreen_privacy_wallet_setting_toggle">Show wallet</string> <string name="lockscreen_privacy_wallet_setting_toggle">Show wallet</string>
<!-- Wallet (formerly Cards and passes) summary [CHAR LIMIT=NONE] --> <!-- Wallet (formerly Cards and passes) summary [CHAR LIMIT=NONE] -->

View File

@@ -86,4 +86,10 @@
android:title="@string/gesture_prevent_ringing_screen_title" android:title="@string/gesture_prevent_ringing_screen_title"
android:fragment="com.android.settings.gestures.PreventRingingGestureSettings" android:fragment="com.android.settings.gestures.PreventRingingGestureSettings"
settings:controller="com.android.settings.gestures.PreventRingingParentPreferenceController" /> settings:controller="com.android.settings.gestures.PreventRingingParentPreferenceController" />
<Preference
android:key="gesture_power_menu_summary"
android:title="@string/power_menu_setting_name"
android:fragment="com.android.settings.gestures.PowerMenuSettings"
settings:controller="com.android.settings.gestures.PowerMenuPreferenceController" />
</PreferenceScreen> </PreferenceScreen>

View File

@@ -1,19 +1,16 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- <!-- Copyright (C) 2020 The Android Open Source Project
~ Copyright (C) 2020 The Android Open Source Project
~ Licensed under the Apache License, Version 2.0 (the "License");
~ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.
~ you may not use this file except in compliance with the License. You may obtain a copy of the License at
~ 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
~ http://www.apache.org/licenses/LICENSE-2.0 distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ Unless required by applicable law or agreed to in writing, software See the License for the specific language governing permissions and
~ distributed under the License is distributed on an "AS IS" BASIS, limitations under the License.
~ 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.
-->
<PreferenceScreen <PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
@@ -26,4 +23,10 @@
android:summary="@string/power_menu_long_press_for_assist_summary" android:summary="@string/power_menu_long_press_for_assist_summary"
settings:controller="com.android.settings.gestures.LongPressPowerButtonPreferenceController" settings:controller="com.android.settings.gestures.LongPressPowerButtonPreferenceController"
/> />
<com.android.settingslib.widget.FooterPreference
android:key="power_menu_power_volume_up_hint"
android:title="@string/power_menu_power_volume_up_hint"
android:selectable="false"
settings:searchable="false" />
</PreferenceScreen> </PreferenceScreen>

View File

@@ -43,14 +43,6 @@
android:fragment="com.android.settings.datetime.DateTimeSettings" android:fragment="com.android.settings.datetime.DateTimeSettings"
settings:controller="com.android.settings.datetime.DateTimePreferenceController"/> settings:controller="com.android.settings.datetime.DateTimePreferenceController"/>
<Preference
android:key="gesture_power_menu_summary"
android:title="@string/power_menu_setting_name"
android:icon="@drawable/ic_power_settings"
android:order="-220"
android:fragment="com.android.settings.gestures.PowerMenuSettings"
settings:controller="com.android.settings.gestures.PowerMenuPreferenceController" />
<!-- System updates --> <!-- System updates -->
<Preference <Preference
android:key="additional_system_update_settings" android:key="additional_system_update_settings"

View File

@@ -16,45 +16,30 @@
package com.android.settings.gestures; package com.android.settings.gestures;
import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.content.pm.PackageManager;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
import android.provider.Settings; import android.provider.Settings;
import androidx.annotation.Nullable;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.OnLifecycleEvent;
import androidx.preference.Preference; import androidx.preference.Preference;
import androidx.preference.PreferenceScreen; import androidx.preference.PreferenceScreen;
import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.R;
import com.android.settings.core.TogglePreferenceController; import com.android.settings.core.TogglePreferenceController;
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
/** /**
* Configures the behaviour of long press power button action. * Configures the behaviour of long press power button action.
*/ */
public class LongPressPowerButtonPreferenceController extends TogglePreferenceController implements public class LongPressPowerButtonPreferenceController extends TogglePreferenceController {
LifecycleObserver {
private static final String POWER_BUTTON_LONG_PRESS_SETTING = private static final String POWER_BUTTON_LONG_PRESS_SETTING =
Settings.Global.POWER_BUTTON_LONG_PRESS; Settings.Global.POWER_BUTTON_LONG_PRESS;
private static final Uri POWER_BUTTON_LONG_PRESS_SETTING_URI =
Settings.Global.getUriFor(POWER_BUTTON_LONG_PRESS_SETTING);
private static final String KEY_CHORD_POWER_VOLUME_UP_SETTING = private static final String KEY_CHORD_POWER_VOLUME_UP_SETTING =
Settings.Global.KEY_CHORD_POWER_VOLUME_UP; Settings.Global.KEY_CHORD_POWER_VOLUME_UP;
// Used for fallback to global actions if necessary. private static final String FOOTER_HINT_KEY = "power_menu_power_volume_up_hint";
@VisibleForTesting private static final String ASSIST_SWITCH_KEY = "gesture_power_menu_long_press_for_assist";
static final String CARDS_AVAILABLE_KEY =
Settings.Secure.GLOBAL_ACTIONS_PANEL_AVAILABLE;
@VisibleForTesting
static final String CARDS_ENABLED_KEY = Settings.Secure.GLOBAL_ACTIONS_PANEL_ENABLED;
/** /**
* Values used for long press power button behaviour when Assist setting is enabled. * Values used for long press power button behaviour when Assist setting is enabled.
@@ -63,9 +48,9 @@ public class LongPressPowerButtonPreferenceController extends TogglePreferenceCo
* source of the value. * source of the value.
*/ */
@VisibleForTesting @VisibleForTesting
static final int LONG_PRESS_POWER_GLOBAL_ACTIONS = 1; static final int LONG_PRESS_POWER_NO_ACTION = 0;
@VisibleForTesting @VisibleForTesting
static final int LONG_PRESS_POWER_SHUT_OFF = 2; static final int LONG_PRESS_POWER_GLOBAL_ACTIONS = 1;
@VisibleForTesting @VisibleForTesting
static final int LONG_PRESS_POWER_ASSISTANT_VALUE = 5; // Settings.Secure.ASSISTANT static final int LONG_PRESS_POWER_ASSISTANT_VALUE = 5; // Settings.Secure.ASSISTANT
@@ -89,13 +74,18 @@ public class LongPressPowerButtonPreferenceController extends TogglePreferenceCo
* power menu, depending on their respective settings. * power menu, depending on their respective settings.
*/ */
private static final int POWER_BUTTON_LONG_PRESS_DEFAULT_VALUE_RESOURCE = private static final int POWER_BUTTON_LONG_PRESS_DEFAULT_VALUE_RESOURCE =
R.integer.config_longPressOnPowerBehavior; com.android.internal.R.integer.config_longPressOnPowerBehavior;
private static final int KEY_CHORD_POWER_VOLUME_UP_DEFAULT_VALUE_RESOURCE = private static final int KEY_CHORD_POWER_VOLUME_UP_DEFAULT_VALUE_RESOURCE =
R.integer.config_keyChordPowerVolumeUp; com.android.internal.R.integer.config_keyChordPowerVolumeUp;
@Nullable @MonotonicNonNull
private SettingObserver mSettingsObserver; @VisibleForTesting
Preference mFooterHint;
@MonotonicNonNull
@VisibleForTesting
Preference mAssistSwitch;
public LongPressPowerButtonPreferenceController(Context context, String key) { public LongPressPowerButtonPreferenceController(Context context, String key) {
super(context, key); super(context, key);
@@ -104,26 +94,22 @@ public class LongPressPowerButtonPreferenceController extends TogglePreferenceCo
@Override @Override
public void displayPreference(PreferenceScreen screen) { public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen); super.displayPreference(screen);
mSettingsObserver = new SettingObserver(screen.findPreference(getPreferenceKey())); mFooterHint = screen.findPreference(FOOTER_HINT_KEY);
mAssistSwitch = screen.findPreference(ASSIST_SWITCH_KEY);
refreshStateDisplay();
} }
/** @Override
* Called when the settings pages resumes. public CharSequence getSummary() {
*/ final int powerButtonValue = getPowerButtonValue();
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME) if (powerButtonValue == LONG_PRESS_POWER_ASSISTANT_VALUE) {
public void onResume() { return mContext.getString(R.string.power_menu_summary_long_press_for_assist_enabled);
if (mSettingsObserver != null) { } else if (powerButtonValue == LONG_PRESS_POWER_GLOBAL_ACTIONS) {
mSettingsObserver.register(); return mContext.getString(
} R.string.power_menu_summary_long_press_for_assist_disabled_with_power_menu);
} } else {
return mContext.getString(
/** R.string.power_menu_summary_long_press_for_assist_disabled_no_action);
* Called when the settings page pauses.
*/
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void onPause() {
if (mSettingsObserver != null) {
mSettingsObserver.unregister();
} }
} }
@@ -136,10 +122,7 @@ public class LongPressPowerButtonPreferenceController extends TogglePreferenceCo
@Override @Override
public boolean isChecked() { public boolean isChecked() {
final int powerButtonValue = Settings.Global.getInt(mContext.getContentResolver(), return getPowerButtonValue() == LONG_PRESS_POWER_ASSISTANT_VALUE;
POWER_BUTTON_LONG_PRESS_SETTING,
mContext.getResources().getInteger(POWER_BUTTON_LONG_PRESS_DEFAULT_VALUE_RESOURCE));
return powerButtonValue == LONG_PRESS_POWER_ASSISTANT_VALUE;
} }
@Override @Override
@@ -148,12 +131,48 @@ public class LongPressPowerButtonPreferenceController extends TogglePreferenceCo
// The key chord value is dependant on the long press setting and it always // The key chord value is dependant on the long press setting and it always
// toggled in tandem. POWER_BUTTON_LONG_PRESS_SETTING is always the source // toggled in tandem. POWER_BUTTON_LONG_PRESS_SETTING is always the source
// of truth for both. // of truth for both.
return setPowerVolumeChordValue(isChecked); setPowerVolumeChordValue(isChecked);
refreshStateDisplay();
return true;
} }
return false; return false;
} }
private void refreshStateDisplay() {
if (mAssistSwitch != null) {
mAssistSwitch.setSummary(getSummary());
}
if (mFooterHint != null) {
String footerHintText = mContext.getString(R.string.power_menu_power_volume_up_hint);
// If the device supports hush gesture, we need to notify the user where to find
// the setting.
if (mContext.getResources().getBoolean(
com.android.internal.R.bool.config_volumeHushGestureEnabled)) {
footerHintText = footerHintText + "\n\n" + mContext.getString(
R.string.power_menu_power_prevent_ringing_hint);
}
mFooterHint.setSummary(footerHintText);
mFooterHint.setVisible(isPowerMenuKeyChordEnabled(mContext));
}
}
private int getPowerButtonValue() {
return Settings.Global.getInt(mContext.getContentResolver(),
POWER_BUTTON_LONG_PRESS_SETTING,
mContext.getResources().getInteger(POWER_BUTTON_LONG_PRESS_DEFAULT_VALUE_RESOURCE));
}
private static boolean isPowerMenuKeyChordEnabled(Context context) {
return Settings.Global.getInt(context.getContentResolver(),
KEY_CHORD_POWER_VOLUME_UP_SETTING,
context.getResources().getInteger(
com.android.internal.R.integer.config_keyChordPowerVolumeUp))
== KEY_CHORD_POWER_VOLUME_UP_GLOBAL_ACTIONS;
}
private boolean setPowerLongPressValue(boolean isChecked) { private boolean setPowerLongPressValue(boolean isChecked) {
if (isChecked) { if (isChecked) {
return Settings.Global.putInt(mContext.getContentResolver(), return Settings.Global.putInt(mContext.getContentResolver(),
@@ -162,14 +181,12 @@ public class LongPressPowerButtonPreferenceController extends TogglePreferenceCo
// We need to determine the right disabled value - we set it to device default // We need to determine the right disabled value - we set it to device default
// if it's different than Assist, otherwise we fallback to either global actions or power // if it's different than Assist, otherwise we fallback to either global actions or power
//menu. // menu.
final int defaultPowerButtonValue = mContext.getResources().getInteger( final int defaultPowerButtonValue = mContext.getResources().getInteger(
POWER_BUTTON_LONG_PRESS_DEFAULT_VALUE_RESOURCE); POWER_BUTTON_LONG_PRESS_DEFAULT_VALUE_RESOURCE);
if (defaultPowerButtonValue == LONG_PRESS_POWER_ASSISTANT_VALUE) { if (defaultPowerButtonValue == LONG_PRESS_POWER_ASSISTANT_VALUE) {
final int fallbackValue = isCardsOrControlsAvailable() ? LONG_PRESS_POWER_GLOBAL_ACTIONS
: LONG_PRESS_POWER_SHUT_OFF;
return Settings.Global.putInt(mContext.getContentResolver(), return Settings.Global.putInt(mContext.getContentResolver(),
POWER_BUTTON_LONG_PRESS_SETTING, fallbackValue); POWER_BUTTON_LONG_PRESS_SETTING, LONG_PRESS_POWER_NO_ACTION);
} }
return Settings.Global.putInt(mContext.getContentResolver(), return Settings.Global.putInt(mContext.getContentResolver(),
@@ -187,53 +204,11 @@ public class LongPressPowerButtonPreferenceController extends TogglePreferenceCo
KEY_CHORD_POWER_VOLUME_UP_SETTING, KEY_CHORD_POWER_VOLUME_UP_GLOBAL_ACTIONS); KEY_CHORD_POWER_VOLUME_UP_SETTING, KEY_CHORD_POWER_VOLUME_UP_GLOBAL_ACTIONS);
} }
// If the key chord defaults to mute toggle, we restore that setting if LPP option is // We restore key chord to the default value.
// disabled. Otherwise we default to no action. int keyChordDefaultValue = mContext.getResources().getInteger(
boolean isMuteToggleKeyChordDefault = mContext.getResources().getInteger( KEY_CHORD_POWER_VOLUME_UP_DEFAULT_VALUE_RESOURCE);
KEY_CHORD_POWER_VOLUME_UP_DEFAULT_VALUE_RESOURCE)
== KEY_CHORD_POWER_VOLUME_UP_MUTE_TOGGLE;
return Settings.Global.putInt(mContext.getContentResolver(), return Settings.Global.putInt(mContext.getContentResolver(),
KEY_CHORD_POWER_VOLUME_UP_SETTING, isMuteToggleKeyChordDefault KEY_CHORD_POWER_VOLUME_UP_SETTING, keyChordDefaultValue);
? KEY_CHORD_POWER_VOLUME_UP_MUTE_TOGGLE
: KEY_CHORD_POWER_VOLUME_UP_NO_ACTION);
}
/**
* Returns true if the global actions menu on power button click is enabled via any of the
* content options.
*/
private boolean isCardsOrControlsAvailable() {
final ContentResolver resolver = mContext.getContentResolver();
final boolean cardsAvailable = Settings.Secure.getInt(resolver, CARDS_AVAILABLE_KEY, 0)
!= 0;
final boolean controlsAvailable = mContext.getPackageManager().hasSystemFeature(
PackageManager.FEATURE_CONTROLS);
return cardsAvailable || controlsAvailable;
}
private final class SettingObserver extends ContentObserver {
private final Preference mPreference;
SettingObserver(Preference preference) {
super(new Handler(Looper.getMainLooper()));
mPreference = preference;
}
public void register() {
final ContentResolver cr = mContext.getContentResolver();
cr.registerContentObserver(POWER_BUTTON_LONG_PRESS_SETTING_URI, false, this);
}
public void unregister() {
final ContentResolver cr = mContext.getContentResolver();
cr.unregisterContentObserver(this);
}
@Override
public void onChange(boolean selfChange) {
updateState(mPreference);
}
} }
} }

View File

@@ -17,28 +17,54 @@
package com.android.settings.gestures; package com.android.settings.gestures;
import android.content.Context; import android.content.Context;
import android.provider.Settings;
import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.core.BasePreferenceController; import com.android.settings.core.BasePreferenceController;
public class PowerMenuPreferenceController extends BasePreferenceController { public class PowerMenuPreferenceController extends BasePreferenceController {
private static final String POWER_BUTTON_LONG_PRESS_SETTING =
Settings.Global.POWER_BUTTON_LONG_PRESS;
@VisibleForTesting
static final int LONG_PRESS_POWER_GLOBAL_ACTIONS = 1;
@VisibleForTesting
static final int LONG_PRESS_POWER_ASSISTANT_VALUE = 5;
public PowerMenuPreferenceController(Context context, String key) { public PowerMenuPreferenceController(Context context, String key) {
super(context, key); super(context, key);
} }
@Override @Override
public CharSequence getSummary() { public CharSequence getSummary() {
return mContext.getText(R.string.power_menu_long_press_for_assist); final int powerButtonValue = getPowerButtonLongPressValue(mContext);
if (powerButtonValue == LONG_PRESS_POWER_ASSISTANT_VALUE) {
return mContext.getText(R.string.power_menu_summary_long_press_for_assist_enabled);
} else if (powerButtonValue == LONG_PRESS_POWER_GLOBAL_ACTIONS) {
return mContext.getText(
R.string.power_menu_summary_long_press_for_assist_disabled_with_power_menu);
} else {
return mContext.getText(
R.string.power_menu_summary_long_press_for_assist_disabled_no_action);
}
} }
@Override @Override
public int getAvailabilityStatus() { public int getAvailabilityStatus() {
return isAssistInvocationAvailable() ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; return isAssistInvocationAvailable() ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
} }
private boolean isAssistInvocationAvailable() { private boolean isAssistInvocationAvailable() {
return mContext.getResources().getBoolean( return mContext.getResources().getBoolean(
com.android.internal.R.bool.config_longPressOnPowerForAssistantSettingAvailable); com.android.internal.R.bool.config_longPressOnPowerForAssistantSettingAvailable);
} }
private static int getPowerButtonLongPressValue(Context context) {
return Settings.Global.getInt(context.getContentResolver(),
POWER_BUTTON_LONG_PRESS_SETTING,
context.getResources().getInteger(
com.android.internal.R.integer.config_longPressOnPowerBehavior));
}
} }

View File

@@ -18,20 +18,28 @@ package com.android.settings.gestures;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.app.Application; import android.app.Application;
import android.content.res.Resources; import android.content.res.Resources;
import android.provider.Settings; import android.provider.Settings;
import androidx.annotation.StringRes;
import androidx.preference.Preference;
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.R;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.mockito.stubbing.Answer;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class LongPressPowerButtonPreferenceControllerTest { public class LongPressPowerButtonPreferenceControllerTest {
@@ -46,14 +54,20 @@ public class LongPressPowerButtonPreferenceControllerTest {
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application); mContext = spy(ApplicationProvider.getApplicationContext());
mResources = mock(Resources.class); mResources = mock(Resources.class);
when(mContext.getResources()).thenReturn(mResources); when(mContext.getResources()).thenReturn(mResources);
when(mResources.getString(anyInt())).thenAnswer((Answer<String>) invocation -> {
int id = invocation.getArgument(0);
return getString(id);
});
when(mResources.getBoolean( when(mResources.getBoolean(
com.android.internal.R.bool.config_longPressOnPowerForAssistantSettingAvailable)) com.android.internal.R.bool.config_longPressOnPowerForAssistantSettingAvailable))
.thenReturn(true); .thenReturn(true);
mController = new LongPressPowerButtonPreferenceController(mContext, mController = new LongPressPowerButtonPreferenceController(mContext,
KEY_LONG_PRESS_POWER_BUTTON); KEY_LONG_PRESS_POWER_BUTTON);
mController.mAssistSwitch = mock(Preference.class);
mController.mFooterHint = mock(Preference.class);
} }
@Test @Test
@@ -74,6 +88,60 @@ public class LongPressPowerButtonPreferenceControllerTest {
assertThat(mController.isAvailable()).isFalse(); assertThat(mController.isAvailable()).isFalse();
} }
@Test
public void preferenceChecked_powerMenuHintTextShown() {
mController.onPreferenceChange(null, true);
verify(mController.mFooterHint).setSummary(
getString(
R.string.power_menu_power_volume_up_hint));
verify(mController.mFooterHint).setVisible(true);
}
@Test
public void preferenceUnchecked_keyChordEnabled_powerMenuHintTextShown() {
when(mResources.getInteger(
com.android.internal.R.integer.config_keyChordPowerVolumeUp))
.thenReturn(
LongPressPowerButtonPreferenceController.KEY_CHORD_POWER_VOLUME_UP_GLOBAL_ACTIONS);
mController.onPreferenceChange(null, false);
verify(mController.mFooterHint).setSummary(
getString(
R.string.power_menu_power_volume_up_hint));
verify(mController.mFooterHint).setVisible(true);
}
@Test
public void preferenceChecked_hushGestureEnabled_powerMenuHintTextIncludesHushHint() {
when(mResources.getBoolean(
com.android.internal.R.bool.config_volumeHushGestureEnabled))
.thenReturn(true);
mController.onPreferenceChange(null, true);
verify(mController.mFooterHint).setSummary(
getString(
R.string.power_menu_power_volume_up_hint) + "\n\n"
+ getString(
R.string.power_menu_power_prevent_ringing_hint));
verify(mController.mFooterHint).setVisible(true);
}
@Test
public void preferenceUnchecked_keyChordDisabled_powerMenuHintTextHidden() {
mController.onPreferenceChange(null, false);
when(mResources.getInteger(
com.android.internal.R.integer.config_keyChordPowerVolumeUp))
.thenReturn(
LongPressPowerButtonPreferenceController.KEY_CHORD_POWER_VOLUME_UP_NO_ACTION);
verify(mController.mFooterHint).setVisible(false);
}
@Test @Test
public void preferenceChecked_longPressPowerSettingSetToAssistant() { public void preferenceChecked_longPressPowerSettingSetToAssistant() {
mController.onPreferenceChange(null, true); mController.onPreferenceChange(null, true);
@@ -84,21 +152,29 @@ public class LongPressPowerButtonPreferenceControllerTest {
assertThat(Settings.Global.getInt(mContext.getContentResolver(), assertThat(Settings.Global.getInt(mContext.getContentResolver(),
Settings.Global.KEY_CHORD_POWER_VOLUME_UP, -1)).isEqualTo( Settings.Global.KEY_CHORD_POWER_VOLUME_UP, -1)).isEqualTo(
LongPressPowerButtonPreferenceController.KEY_CHORD_POWER_VOLUME_UP_GLOBAL_ACTIONS); LongPressPowerButtonPreferenceController.KEY_CHORD_POWER_VOLUME_UP_GLOBAL_ACTIONS);
verify(mController.mAssistSwitch).setSummary(
getString(
R.string.power_menu_summary_long_press_for_assist_enabled));
} }
@Test @Test
public void preferenceUnchecked_longPressPowerSettingSetToDefaultValue() { public void preferenceUnchecked_longPressPowerSettingSetToDefaultValue() {
// Value out of range chosen deliberately.
when(mResources.getInteger( when(mResources.getInteger(
com.android.internal.R.integer.config_longPressOnPowerBehavior)) com.android.internal.R.integer.config_longPressOnPowerBehavior))
.thenReturn(8); .thenReturn(
LongPressPowerButtonPreferenceController.LONG_PRESS_POWER_GLOBAL_ACTIONS);
mController.onPreferenceChange(null, false); mController.onPreferenceChange(null, false);
assertThat(Settings.Global.getInt(mContext.getContentResolver(), assertThat(Settings.Global.getInt(mContext.getContentResolver(),
Settings.Global.POWER_BUTTON_LONG_PRESS, -1)).isEqualTo(8); Settings.Global.POWER_BUTTON_LONG_PRESS, -1)).isEqualTo(
LongPressPowerButtonPreferenceController.LONG_PRESS_POWER_GLOBAL_ACTIONS);
assertThat(Settings.Global.getInt(mContext.getContentResolver(), assertThat(Settings.Global.getInt(mContext.getContentResolver(),
Settings.Global.KEY_CHORD_POWER_VOLUME_UP, -1)).isEqualTo( Settings.Global.KEY_CHORD_POWER_VOLUME_UP, -1)).isEqualTo(
LongPressPowerButtonPreferenceController.KEY_CHORD_POWER_VOLUME_UP_NO_ACTION); LongPressPowerButtonPreferenceController.KEY_CHORD_POWER_VOLUME_UP_NO_ACTION);
verify(mController.mAssistSwitch).setSummary(
getString(
R.string.power_menu_summary_long_press_for_assist_disabled_with_power_menu));
} }
@Test @Test
@@ -110,9 +186,10 @@ public class LongPressPowerButtonPreferenceControllerTest {
when(mResources.getInteger( when(mResources.getInteger(
com.android.internal.R.integer.config_keyChordPowerVolumeUp)) com.android.internal.R.integer.config_keyChordPowerVolumeUp))
.thenReturn( .thenReturn(
LongPressPowerButtonPreferenceController.KEY_CHORD_POWER_VOLUME_UP_MUTE_TOGGLE); LongPressPowerButtonPreferenceController.KEY_CHORD_POWER_VOLUME_UP_MUTE_TOGGLE);
mController.onPreferenceChange(null, false); mController.onPreferenceChange(null, false);
assertThat(Settings.Global.getInt(mContext.getContentResolver(), assertThat(Settings.Global.getInt(mContext.getContentResolver(),
Settings.Global.POWER_BUTTON_LONG_PRESS, -1)).isEqualTo(8); Settings.Global.POWER_BUTTON_LONG_PRESS, -1)).isEqualTo(8);
assertThat(Settings.Global.getInt(mContext.getContentResolver(), assertThat(Settings.Global.getInt(mContext.getContentResolver(),
@@ -121,7 +198,7 @@ public class LongPressPowerButtonPreferenceControllerTest {
} }
@Test @Test
public void preferenceUnchecked_assistDefault_setShutOff() { public void preferenceUnchecked_assistDefault_setNoAction() {
// Value out of range chosen deliberately. // Value out of range chosen deliberately.
when(mResources.getInteger( when(mResources.getInteger(
com.android.internal.R.integer.config_longPressOnPowerBehavior)) com.android.internal.R.integer.config_longPressOnPowerBehavior))
@@ -129,33 +206,19 @@ public class LongPressPowerButtonPreferenceControllerTest {
LongPressPowerButtonPreferenceController.LONG_PRESS_POWER_ASSISTANT_VALUE); LongPressPowerButtonPreferenceController.LONG_PRESS_POWER_ASSISTANT_VALUE);
mController.onPreferenceChange(null, false); mController.onPreferenceChange(null, false);
assertThat(Settings.Global.getInt(mContext.getContentResolver(), assertThat(Settings.Global.getInt(mContext.getContentResolver(),
Settings.Global.POWER_BUTTON_LONG_PRESS, -1)).isEqualTo( Settings.Global.POWER_BUTTON_LONG_PRESS, -1)).isEqualTo(
LongPressPowerButtonPreferenceController.LONG_PRESS_POWER_SHUT_OFF); LongPressPowerButtonPreferenceController.LONG_PRESS_POWER_NO_ACTION);
assertThat(Settings.Global.getInt(mContext.getContentResolver(), assertThat(Settings.Global.getInt(mContext.getContentResolver(),
Settings.Global.KEY_CHORD_POWER_VOLUME_UP, -1)).isEqualTo( Settings.Global.KEY_CHORD_POWER_VOLUME_UP, -1)).isEqualTo(
LongPressPowerButtonPreferenceController.KEY_CHORD_POWER_VOLUME_UP_NO_ACTION); LongPressPowerButtonPreferenceController.KEY_CHORD_POWER_VOLUME_UP_NO_ACTION);
verify(mController.mAssistSwitch).setSummary(
getString(
R.string.power_menu_summary_long_press_for_assist_disabled_no_action));
} }
private String getString(@StringRes int id) {
@Test return ApplicationProvider.getApplicationContext().getString(id);
public void preferenceUnchecked_assistDefaultGlobalActionsEnabled_setGlobalActions() {
// Value out of range chosen deliberately.
when(mResources.getInteger(
com.android.internal.R.integer.config_longPressOnPowerBehavior))
.thenReturn(
LongPressPowerButtonPreferenceController.LONG_PRESS_POWER_ASSISTANT_VALUE);
Settings.Secure.putInt(mContext.getContentResolver(),
LongPressPowerButtonPreferenceController.CARDS_AVAILABLE_KEY, 1);
Settings.Secure.putInt(mContext.getContentResolver(),
LongPressPowerButtonPreferenceController.CARDS_ENABLED_KEY, 1);
mController.onPreferenceChange(null, false);
assertThat(Settings.Global.getInt(mContext.getContentResolver(),
Settings.Global.POWER_BUTTON_LONG_PRESS, -1)).isEqualTo(
LongPressPowerButtonPreferenceController.LONG_PRESS_POWER_GLOBAL_ACTIONS);
assertThat(Settings.Global.getInt(mContext.getContentResolver(),
Settings.Global.KEY_CHORD_POWER_VOLUME_UP, -1)).isEqualTo(
LongPressPowerButtonPreferenceController.KEY_CHORD_POWER_VOLUME_UP_NO_ACTION);
} }
} }

View File

@@ -70,6 +70,6 @@ public class PowerMenuPreferenceControllerTest {
.thenReturn(false); .thenReturn(false);
assertThat(mController.getAvailabilityStatus()).isEqualTo( assertThat(mController.getAvailabilityStatus()).isEqualTo(
BasePreferenceController.CONDITIONALLY_UNAVAILABLE); BasePreferenceController.UNSUPPORTED_ON_DEVICE);
} }
} }