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

This commit is contained in:
Jason Chiu
2019-11-25 02:36:09 +00:00
committed by Android (Google) Code Review
5 changed files with 34 additions and 8 deletions

View File

@@ -60,6 +60,7 @@ import com.android.settings.R;
import com.android.settings.SettingsActivity; import com.android.settings.SettingsActivity;
import com.android.settings.dashboard.profileselector.ProfileSelectDialog; import com.android.settings.dashboard.profileselector.ProfileSelectDialog;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settings.widget.MasterSwitchPreference;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.drawer.ActivityTile; import com.android.settingslib.drawer.ActivityTile;
import com.android.settingslib.drawer.DashboardCategory; import com.android.settingslib.drawer.DashboardCategory;
@@ -303,7 +304,7 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
setSwitchEnabled(pref, false); setSwitchEnabled(pref, false);
ThreadUtils.postOnBackgroundThread(() -> { ThreadUtils.postOnBackgroundThread(() -> {
final Map<String, IContentProvider> providerMap = new ArrayMap<>(); 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); EXTRA_SWITCH_CHECKED_STATE, checked);
ThreadUtils.postOnMainThread(() -> { ThreadUtils.postOnMainThread(() -> {
@@ -335,13 +336,19 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
} }
private void setSwitchChecked(Preference pref, boolean checked) { 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); ((SwitchPreference) pref).setChecked(checked);
} }
} }
private void setSwitchEnabled(Preference pref, boolean enabled) { private void setSwitchEnabled(Preference pref, boolean enabled) {
pref.setEnabled(enabled); if (pref instanceof MasterSwitchPreference) {
((MasterSwitchPreference) pref).setSwitchEnabled(enabled);
} else {
pref.setEnabled(enabled);
}
} }
@VisibleForTesting @VisibleForTesting

View File

@@ -38,6 +38,7 @@ import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.PreferenceControllerListHelper; import com.android.settings.core.PreferenceControllerListHelper;
import com.android.settings.core.SettingsBaseActivity; import com.android.settings.core.SettingsBaseActivity;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settings.widget.MasterSwitchPreference;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.LifecycleObserver;
@@ -453,7 +454,9 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
Preference createPreference(Tile tile) { Preference createPreference(Tile tile) {
return tile instanceof ProviderTile return tile instanceof ProviderTile
? new SwitchPreference(getPrefContext()) ? new SwitchPreference(getPrefContext())
: new Preference(getPrefContext()); : tile.hasSwitch()
? new MasterSwitchPreference(getPrefContext())
: new Preference(getPrefContext());
} }
@VisibleForTesting @VisibleForTesting

View File

@@ -36,6 +36,7 @@ public class MasterSwitchPreference extends TwoTargetPreference {
private Switch mSwitch; private Switch mSwitch;
private boolean mChecked; private boolean mChecked;
private boolean mCheckedSet;
private boolean mEnableSwitch = true; private boolean mEnableSwitch = true;
public MasterSwitchPreference(Context context, AttributeSet attrs, public MasterSwitchPreference(Context context, AttributeSet attrs,
@@ -94,9 +95,14 @@ public class MasterSwitchPreference extends TwoTargetPreference {
} }
public void setChecked(boolean checked) { public void setChecked(boolean checked) {
mChecked = checked; // Always set checked the first time; don't assume the field's default of false.
if (mSwitch != null) { final boolean changed = mChecked != checked;
mSwitch.setChecked(checked); if (changed || !mCheckedSet) {
mChecked = checked;
mCheckedSet = true;
if (mSwitch != null) {
mSwitch.setChecked(checked);
}
} }
} }

View File

@@ -48,6 +48,7 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.slices.BlockingSlicePrefController; import com.android.settings.slices.BlockingSlicePrefController;
import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.widget.MasterSwitchPreference;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.core.instrumentation.VisibilityLoggerMixin; import com.android.settingslib.core.instrumentation.VisibilityLoggerMixin;
@@ -323,6 +324,15 @@ public class DashboardFragmentTest {
assertThat(pref).isInstanceOf(SwitchPreference.class); 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 private static class TestPreferenceController extends AbstractPreferenceController
implements PreferenceControllerMixin { implements PreferenceControllerMixin {

View File

@@ -58,7 +58,7 @@ public class ShadowTileUtils {
} }
@Implementation @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) { Map<String, IContentProvider> providerMap, String key, boolean value) {
sChecked = value; sChecked = value;
return sResult; return sResult;