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

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

Merge "For vibration settings page, create controllers from xml" into pi-dev

parents 12a8fced 36680b09
Loading
Loading
Loading
Loading
+9 −5
Original line number Diff line number Diff line
@@ -14,17 +14,21 @@
     limitations under the License.
-->

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
<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>
+0 −30
Original line number Diff line number Diff line
@@ -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 */);
                }
            };
}
+21 −36
Original line number Diff line number Diff line
@@ -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;
@@ -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,38 +84,22 @@ 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) {
            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;
                }
                    controllerClassName = PreferenceXmlParserUtils.getController(mContext, attrs);

                    if (!TextUtils.isEmpty(controllerClassName)) {
                mXmlDeclaredControllers.add(controllerClassName);
            }
        }
            } catch (Exception e) {
                // Assume an issue with robolectric resources
            }
        }
        // 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