Merge "[Settings] Support master switch of inline toggle of Settings Injection v2"
This commit is contained in:
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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 {
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
|
Reference in New Issue
Block a user