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

Commit bfbb0181 authored by Jason Chiu's avatar Jason Chiu Committed by Android (Google) Code Review
Browse files

Merge "[Settings] Support master switch of inline toggle of Settings Injection v2"

parents a6e7aa12 10e675d6
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -60,6 +60,7 @@ import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.dashboard.profileselector.ProfileSelectDialog;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.widget.MasterSwitchPreference;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.drawer.ActivityTile;
import com.android.settingslib.drawer.DashboardCategory;
@@ -303,7 +304,7 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
        setSwitchEnabled(pref, false);
        ThreadUtils.postOnBackgroundThread(() -> {
            final Map<String, IContentProvider> providerMap = new ArrayMap<>();
            final Bundle result = TileUtils.putBooleanToUri(mContext, uri, providerMap,
            final Bundle result = TileUtils.putBooleanToUriAndGetResult(mContext, uri, providerMap,
                    EXTRA_SWITCH_CHECKED_STATE, checked);

            ThreadUtils.postOnMainThread(() -> {
@@ -335,14 +336,20 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
    }

    private void setSwitchChecked(Preference pref, boolean checked) {
        if (pref instanceof SwitchPreference) {
        if (pref instanceof MasterSwitchPreference) {
            ((MasterSwitchPreference) pref).setChecked(checked);
        } else if (pref instanceof SwitchPreference) {
            ((SwitchPreference) pref).setChecked(checked);
        }
    }

    private void setSwitchEnabled(Preference pref, boolean enabled) {
        if (pref instanceof MasterSwitchPreference) {
            ((MasterSwitchPreference) pref).setSwitchEnabled(enabled);
        } else {
            pref.setEnabled(enabled);
        }
    }

    @VisibleForTesting
    void bindIcon(Preference preference, Tile tile, boolean forceRoundedIcon) {
+4 −1
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.PreferenceControllerListHelper;
import com.android.settings.core.SettingsBaseActivity;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.widget.MasterSwitchPreference;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
@@ -453,6 +454,8 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
    Preference createPreference(Tile tile) {
        return tile instanceof ProviderTile
                ? new SwitchPreference(getPrefContext())
                : tile.hasSwitch()
                        ? new MasterSwitchPreference(getPrefContext())
                        : new Preference(getPrefContext());
    }

+9 −3
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ public class MasterSwitchPreference extends TwoTargetPreference {

    private Switch mSwitch;
    private boolean mChecked;
    private boolean mCheckedSet;
    private boolean mEnableSwitch = true;

    public MasterSwitchPreference(Context context, AttributeSet attrs,
@@ -94,11 +95,16 @@ public class MasterSwitchPreference extends TwoTargetPreference {
    }

    public void setChecked(boolean checked) {
        // Always set checked the first time; don't assume the field's default of false.
        final boolean changed = mChecked != checked;
        if (changed || !mCheckedSet) {
            mChecked = checked;
            mCheckedSet = true;
            if (mSwitch != null) {
                mSwitch.setChecked(checked);
            }
        }
    }

    public void setSwitchEnabled(boolean enabled) {
        mEnableSwitch = enabled;
+10 −0
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.slices.BlockingSlicePrefController;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.widget.MasterSwitchPreference;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.core.instrumentation.VisibilityLoggerMixin;
@@ -323,6 +324,15 @@ public class DashboardFragmentTest {
        assertThat(pref).isInstanceOf(SwitchPreference.class);
    }

    @Test
    public void createPreference_isActivityTileAndHasSwitch_returnMasterSwitchPreference() {
        mActivityTile.getMetaData().putString(META_DATA_PREFERENCE_SWITCH_URI, "uri");

        final Preference pref = mTestFragment.createPreference(mActivityTile);

        assertThat(pref).isInstanceOf(MasterSwitchPreference.class);
    }

    private static class TestPreferenceController extends AbstractPreferenceController
            implements PreferenceControllerMixin {

+1 −1
Original line number Diff line number Diff line
@@ -58,7 +58,7 @@ public class ShadowTileUtils {
    }

    @Implementation
    public static Bundle putBooleanToUri(Context context, Uri uri,
    public static Bundle putBooleanToUriAndGetResult(Context context, Uri uri,
            Map<String, IContentProvider> providerMap, String key, boolean value) {
        sChecked = value;
        return sResult;