summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFan Zhang <zhfan@google.com>2018-03-07 14:15:28 -0800
committerFan Zhang <zhfan@google.com>2018-03-07 14:48:26 -0800
commit36680b0934d65871ddfbc98448da17ad04d525e6 (patch)
tree05ffb7e5cb1099ad01ad2c4608cb556c1ab6b739
parent9c18ac05545b9cba674a732d6e5effabba971a88 (diff)
downloadpackages_apps_Settings-36680b0934d65871ddfbc98448da17ad04d525e6.tar.gz
packages_apps_Settings-36680b0934d65871ddfbc98448da17ad04d525e6.tar.bz2
packages_apps_Settings-36680b0934d65871ddfbc98448da17ad04d525e6.zip
For vibration settings page, create controllers from xml
This change leverages a new support in settings framework to automatically share preference controllers between full setting page, search, and slice provider. Bug: 73668763 Test: existing robotest and atest Change-Id: Ie96a28f1b503377b3fdf86e28d297c8560d8bf71
-rw-r--r--res/xml/accessibility_vibration_settings.xml14
-rw-r--r--src/com/android/settings/accessibility/VibrationSettings.java30
-rw-r--r--tests/robotests/src/com/android/settings/slices/SliceControllerInXmlTest.java57
3 files changed, 30 insertions, 71 deletions
diff --git a/res/xml/accessibility_vibration_settings.xml b/res/xml/accessibility_vibration_settings.xml
index d24834a57c..2228f29183 100644
--- a/res/xml/accessibility_vibration_settings.xml
+++ b/res/xml/accessibility_vibration_settings.xml
@@ -14,17 +14,21 @@
limitations under the License.
-->
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- android:key="accessibility_settings_vibration_screen"
- android:title="@string/accessibility_vibration_settings_title">
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:key="accessibility_settings_vibration_screen"
+ android:title="@string/accessibility_vibration_settings_title">
<Preference
android:fragment="com.android.settings.accessibility.NotificationVibrationPreferenceFragment"
android:key="notification_vibration_preference_screen"
- android:title="@string/accessibility_notification_vibration_title" />
+ android:title="@string/accessibility_notification_vibration_title"
+ app:controller="com.android.settings.accessibility.NotificationVibrationIntensityPreferenceController" />
<Preference
android:fragment="com.android.settings.accessibility.TouchVibrationPreferenceFragment"
android:key="touch_vibration_preference_screen"
- android:title="@string/accessibility_touch_vibration_title" />
+ android:title="@string/accessibility_touch_vibration_title"
+ app:controller="com.android.settings.accessibility.HapticFeedbackIntensityPreferenceController" />
</PreferenceScreen>
diff --git a/src/com/android/settings/accessibility/VibrationSettings.java b/src/com/android/settings/accessibility/VibrationSettings.java
index 4b19d93359..83a5af6ac8 100644
--- a/src/com/android/settings/accessibility/VibrationSettings.java
+++ b/src/com/android/settings/accessibility/VibrationSettings.java
@@ -23,8 +23,6 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settingslib.core.AbstractPreferenceController;
-import com.android.settingslib.core.lifecycle.Lifecycle;
import java.util.ArrayList;
import java.util.List;
@@ -51,28 +49,6 @@ public class VibrationSettings extends DashboardFragment {
return TAG;
}
- @Override
- protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
- return buildControllers(context, getLifecycle());
- }
-
- public static List<AbstractPreferenceController> buildControllers(Context context,
- Lifecycle lifecycle) {
-
- final List<AbstractPreferenceController> controllers = new ArrayList<>();
- final NotificationVibrationIntensityPreferenceController notifVibPrefController =
- new NotificationVibrationIntensityPreferenceController(context);
- final HapticFeedbackIntensityPreferenceController hapticPreferenceController =
- new HapticFeedbackIntensityPreferenceController(context);
- controllers.add(hapticPreferenceController);
- controllers.add(notifVibPrefController);
- if (lifecycle != null) {
- lifecycle.addObserver(hapticPreferenceController);
- lifecycle.addObserver(notifVibPrefController);
- }
- return controllers;
- }
-
public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider() {
@Override
@@ -84,11 +60,5 @@ public class VibrationSettings extends DashboardFragment {
indexables.add(indexable);
return indexables;
}
-
- @Override
- public List<AbstractPreferenceController> createPreferenceControllers(
- Context context) {
- return buildControllers(context, null /* lifecycle */);
- }
};
}
diff --git a/tests/robotests/src/com/android/settings/slices/SliceControllerInXmlTest.java b/tests/robotests/src/com/android/settings/slices/SliceControllerInXmlTest.java
index bf979c6d9f..7de9c2b229 100644
--- a/tests/robotests/src/com/android/settings/slices/SliceControllerInXmlTest.java
+++ b/tests/robotests/src/com/android/settings/slices/SliceControllerInXmlTest.java
@@ -16,16 +16,17 @@
package com.android.settings.slices;
+import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_CONTROLLER;
+import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;
import static org.mockito.Mockito.spy;
import android.content.Context;
-import android.content.res.XmlResourceParser;
+import android.os.Bundle;
import android.provider.SearchIndexableResource;
import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.util.Xml;
+import com.android.settings.core.PreferenceXmlParserUtils;
import com.android.settings.core.TogglePreferenceController;
import com.android.settings.core.codeinspection.ClassScanner;
import com.android.settings.core.codeinspection.CodeInspector;
@@ -34,7 +35,6 @@ import com.android.settings.search.DatabaseIndexingUtils;
import com.android.settings.search.Indexable;
import com.android.settings.search.SearchFeatureProvider;
import com.android.settings.search.SearchFeatureProviderImpl;
-import com.android.settings.core.PreferenceXmlParserUtils;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
@@ -42,8 +42,9 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RuntimeEnvironment;
-import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -53,7 +54,7 @@ import java.util.List;
public class SliceControllerInXmlTest {
private static final List<Class> mSliceControllerClasses = Collections.singletonList(
- TogglePreferenceController.class
+ TogglePreferenceController.class
);
private final List<String> mXmlDeclaredControllers = new ArrayList<>();
@@ -71,7 +72,7 @@ public class SliceControllerInXmlTest {
private FakeFeatureFactory mFakeFeatureFactory;
@Before
- public void setUp() {
+ public void setUp() throws IOException, XmlPullParserException {
mContext = spy(RuntimeEnvironment.application);
mSearchProvider = new SearchFeatureProviderImpl();
@@ -83,44 +84,28 @@ public class SliceControllerInXmlTest {
initDeclaredControllers();
}
- private void initDeclaredControllers() {
+ private void initDeclaredControllers() throws IOException, XmlPullParserException {
final List<Integer> xmlResources = getIndexableXml();
- XmlResourceParser parser;
-
for (int xmlResId : xmlResources) {
- try {
- parser = mContext.getResources().getXml(xmlResId);
-
- int type;
- while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
- && type != XmlPullParser.START_TAG) {
- // Parse next until start tag is found
- }
-
- final int outerDepth = parser.getDepth();
- final AttributeSet attrs = Xml.asAttributeSet(parser);
- String controllerClassName;
- while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
- && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
- if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
- continue;
- }
- controllerClassName = PreferenceXmlParserUtils.getController(mContext, attrs);
-
- if (!TextUtils.isEmpty(controllerClassName)) {
- mXmlDeclaredControllers.add(controllerClassName);
- }
+ final List<Bundle> metadata = PreferenceXmlParserUtils.extractMetadata(mContext,
+ xmlResId, PreferenceXmlParserUtils.MetadataFlag.FLAG_NEED_PREF_CONTROLLER);
+ for (Bundle bundle : metadata) {
+ final String controllerClassName = bundle.getString(METADATA_CONTROLLER);
+ if (TextUtils.isEmpty(controllerClassName)) {
+ continue;
}
- } catch (Exception e) {
- // Assume an issue with robolectric resources
+ mXmlDeclaredControllers.add(controllerClassName);
}
}
+ // We definitely have some controllers in xml, so assert not-empty here as a proxy to
+ // make sure the parser didn't fail
+ assertThat(mXmlDeclaredControllers).isNotEmpty();
}
@Test
public void testAllControllersDeclaredInXml() throws Exception {
final List<Class<?>> classes =
- new ClassScanner().getClassesForPackage(mContext.getPackageName());
+ new ClassScanner().getClassesForPackage(mContext.getPackageName());
final List<String> missingControllersInXml = new ArrayList<>();
for (Class<?> clazz : classes) {
@@ -139,7 +124,7 @@ public class SliceControllerInXmlTest {
missingControllersInXml.removeAll(mGrandfatheredClasses);
final String missingControllerError =
- buildErrorMessage(ERROR_MISSING_CONTROLLER, missingControllersInXml);
+ buildErrorMessage(ERROR_MISSING_CONTROLLER, missingControllersInXml);
assertWithMessage(missingControllerError).that(missingControllersInXml).isEmpty();
}