Merge "Create Settings preference for Global Actions Panel." into qt-dev

This commit is contained in:
Aran Ink
2019-05-08 14:16:07 +00:00
committed by Android (Google) Code Review
7 changed files with 276 additions and 0 deletions

View File

View File

@@ -7264,6 +7264,8 @@
<string name="keywords_profile_challenge">work challenge, work, profile</string>
<string name="keywords_unification">work profile, managed profile, unify, unification, work, profile</string>
<string name="keywords_gesture">gestures</string>
<!-- Search keywords for Global Actions Panel. [DO NOT TRANSLATE] -->
<string name="keywords_global_actions_panel" translatable="false">global actions</string>
<string name="keywords_payment_settings">pay, tap, payments</string>
<string name="keywords_backup">backup, back up</string>
<string name="keywords_assist_gesture_launch">gesture</string>
@@ -10148,6 +10150,15 @@
<!-- Summary text for ambient display tap [CHAR LIMIT=NONE]-->
<string name="ambient_display_tap_screen_summary">To check time, notifications, and other info, tap your screen.</string>
<!-- Summary text for global actions panel [CHAR LIMIT=NONE] [DO NOT TRANSLATE]-->
<string name="global_actions_panel_summary" translatable="false">To show the global actions panel, press &amp; hold Power button</string>
<!-- Preference and settings suggestion title text for global actions panel [CHAR LIMIT=60] [DO NOT TRANSLATE]-->
<string name="global_actions_panel_title" translatable="false">Show global actions</string>
<!-- Short title text for global actions panel [CHAR LIMIT=40] [DO NOT TRANSLATE]-->
<string name="global_actions_panel_short_title" translatable="false">Global actions</string>
<!-- Footer text for global actions panel [CHAR LIMIT=NONE] [DO NOT TRANSLATE]-->
<string name="global_actions_panel_footer" translatable="false">The global actions panel can be accessed even when the device is locked.</string>
<!-- Title text for swiping downwards on fingerprint sensor for notifications [CHAR LIMIT=80]-->
<string name="fingerprint_swipe_for_notifications_title">Swipe fingerprint for notifications</string>
<!-- Title text for fingerprint gesture preference screen [CHAR LIMIT=25] -->

View File

@@ -75,4 +75,10 @@
android:fragment="com.android.settings.gestures.PreventRingingGestureSettings"
settings:controller="com.android.settings.gestures.PreventRingingParentPreferenceController" />
<Preference
android:key="gesture_global_actions_panel_summary"
android:title="@string/global_actions_panel_short_title"
android:fragment="com.android.settings.gestures.GlobalActionsPanelSettings"
settings:controller="com.android.settings.gestures.GlobalActionsPanelPreferenceController" />
</PreferenceScreen>

View File

@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2019 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.
-->
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:key="gesture_global_actions_panel"
android:title="@string/global_actions_panel_title">
<com.android.settings.widget.VideoPreference
android:key="global_actions_panel_video"
app:animation="@raw/gesture_global_actions_panel" />
<SwitchPreference
android:key="gesture_global_actions_panel_switch"
android:title="@string/global_actions_panel_title"
android:summary="@string/global_actions_panel_summary"
app:keywords="@string/keywords_global_actions_panel"
app:controller="com.android.settings.gestures.GlobalActionsPanelPreferenceController"
app:allowDividerAbove="true" />
<com.android.settingslib.widget.FooterPreference
android:key="footer_preference"
android:title="@string/global_actions_panel_footer" />
</PreferenceScreen>

View File

@@ -0,0 +1,69 @@
/*
* Copyright (C) 2019 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.gestures;
import android.content.Context;
import android.provider.Settings;
import android.text.TextUtils;
import com.android.internal.annotations.VisibleForTesting;
public class GlobalActionsPanelPreferenceController extends GesturePreferenceController {
private static final String PREF_KEY_VIDEO = "global_actions_panel_video";
// TODO (b/132182180) -- Use Secure Settings constants instead of hard-coded strings
@VisibleForTesting
protected static final String ENABLED_SETTING = "global_actions_panel_enabled";
// TODO (b/132182180) -- Use Secure Settings constants instead of hard-coded strings
@VisibleForTesting
protected static final String AVAILABLE_SETTING = "global_actions_panel_available";
@VisibleForTesting
protected static final String TOGGLE_KEY = "gesture_global_actions_panel_switch";
public GlobalActionsPanelPreferenceController(Context context, String key) {
super(context, key);
}
@Override
public int getAvailabilityStatus() {
int enabled = Settings.Secure.getInt(mContext.getContentResolver(), AVAILABLE_SETTING, 0);
return enabled == 1 ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
}
@Override
public boolean setChecked(boolean isChecked) {
return Settings.Secure.putInt(mContext.getContentResolver(), ENABLED_SETTING,
isChecked ? 1 : 0);
}
@Override
protected String getVideoPrefKey() {
return PREF_KEY_VIDEO;
}
@Override
public boolean isSliceable() {
return TextUtils.equals(getPreferenceKey(), TOGGLE_KEY);
}
@Override
public boolean isChecked() {
int enabled = Settings.Secure.getInt(mContext.getContentResolver(), ENABLED_SETTING, 0);
return enabled == 1;
}
}

View File

@@ -0,0 +1,62 @@
/*
* Copyright (C) 2019 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.gestures;
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.provider.SearchIndexableResource;
import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.search.SearchIndexable;
import java.util.Arrays;
import java.util.List;
@SearchIndexable
public class GlobalActionsPanelSettings extends DashboardFragment {
private static final String TAG = "GlobalActionsPanelSettings";
// TODO (132184167): Use correct settings constant
@Override
public int getMetricsCategory() {
return SettingsEnums.SETTINGS_GESTURES;
}
@Override
protected String getLogTag() {
return TAG;
}
@Override
protected int getPreferenceScreenResId() {
return R.xml.global_actions_panel_settings;
}
public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider() {
@Override
public List<SearchIndexableResource> getXmlResourcesToIndex(
Context context, boolean enabled) {
final SearchIndexableResource sir = new SearchIndexableResource(context);
sir.xmlResId = R.xml.global_actions_panel_settings;
return Arrays.asList(sir);
}
};
}

View File

@@ -0,0 +1,88 @@
/*
* Copyright (C) 2019 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.gestures;
import static com.google.common.truth.Truth.assertThat;
import android.content.Context;
import android.provider.Settings;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
@RunWith(RobolectricTestRunner.class)
public class GlobalActionsPanelPreferenceControllerTest {
private Context mContext;
private GlobalActionsPanelPreferenceController mController;
private static final String KEY_GESTURE_PANEL = "gesture_global_actions_panel";
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application;
mController = new GlobalActionsPanelPreferenceController(mContext, KEY_GESTURE_PANEL);
}
@Test
public void testIsChecked_panelEnabled() {
Settings.Secure.putInt(
mContext.getContentResolver(), mController.ENABLED_SETTING, 1);
assertThat(mController.isChecked()).isTrue();
}
@Test
public void testIsChecked_panelDisabled() {
Settings.Secure.putInt(
mContext.getContentResolver(), mController.ENABLED_SETTING, 0);
assertThat(mController.isChecked()).isFalse();
}
@Test
public void getAvailabilityStatus_panelAvailable() {
Settings.Secure.putInt(
mContext.getContentResolver(), mController.AVAILABLE_SETTING, 1);
assertThat(mController.getAvailabilityStatus()).isEqualTo(mController.AVAILABLE);
}
@Test
public void getAvailabilityStatus_panelUnavailable() {
Settings.Secure.putInt(
mContext.getContentResolver(), mController.AVAILABLE_SETTING, 0);
assertThat(mController.getAvailabilityStatus())
.isEqualTo(mController.CONDITIONALLY_UNAVAILABLE);
}
@Test
public void isSliceable_correctKey() {
final GlobalActionsPanelPreferenceController controller =
new GlobalActionsPanelPreferenceController(mContext, mController.TOGGLE_KEY);
assertThat(controller.isSliceable()).isTrue();
}
@Test
public void isSliceable_incorrectKey() {
final GlobalActionsPanelPreferenceController controller =
new GlobalActionsPanelPreferenceController(mContext, "bad_key");
assertThat(controller.isSliceable()).isFalse();
}
}