diff options
11 files changed, 86 insertions, 118 deletions
diff --git a/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBinding.kt b/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBinding.kt index 72cf40387a25..49acc1d44144 100644 --- a/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBinding.kt +++ b/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBinding.kt @@ -115,7 +115,7 @@ interface PreferenceScreenCreator : PreferenceScreenMetadata, PreferenceScreenPr fun isFlagEnabled(context: Context): Boolean = true val preferenceBindingFactory: PreferenceBindingFactory - get() = DefaultPreferenceBindingFactory + get() = PreferenceBindingFactory.defaultFactory override fun createPreferenceScreen(factory: PreferenceScreenFactory) = factory.getOrCreatePreferenceScreen().apply { diff --git a/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBindingFactory.kt b/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBindingFactory.kt index 87c289f48ff0..51b9aac029a5 100644 --- a/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBindingFactory.kt +++ b/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBindingFactory.kt @@ -45,10 +45,15 @@ interface PreferenceBindingFactory { /** Returns the [PreferenceBinding] associated with the [PreferenceMetadata]. */ fun getPreferenceBinding(metadata: PreferenceMetadata): PreferenceBinding? + + companion object { + /** Default preference binding factory. */ + @JvmStatic var defaultFactory: PreferenceBindingFactory = DefaultPreferenceBindingFactory() + } } /** Default [PreferenceBindingFactory]. */ -object DefaultPreferenceBindingFactory : PreferenceBindingFactory { +open class DefaultPreferenceBindingFactory : PreferenceBindingFactory { override fun getPreferenceBinding(metadata: PreferenceMetadata) = metadata as? PreferenceBinding @@ -66,5 +71,6 @@ class KeyedPreferenceBindingFactory(private val bindings: Map<String, Preference PreferenceBindingFactory { override fun getPreferenceBinding(metadata: PreferenceMetadata) = - bindings[metadata.key] ?: DefaultPreferenceBindingFactory.getPreferenceBinding(metadata) + bindings[metadata.key] + ?: PreferenceBindingFactory.defaultFactory.getPreferenceBinding(metadata) } diff --git a/packages/SettingsLib/Preference/testutils/com/android/settingslib/preference/PreferenceBindingTestUtils.kt b/packages/SettingsLib/Preference/testutils/com/android/settingslib/preference/PreferenceBindingTestUtils.kt index f3142d031aa9..00bad5203f07 100644 --- a/packages/SettingsLib/Preference/testutils/com/android/settingslib/preference/PreferenceBindingTestUtils.kt +++ b/packages/SettingsLib/Preference/testutils/com/android/settingslib/preference/PreferenceBindingTestUtils.kt @@ -25,7 +25,7 @@ import com.android.settingslib.metadata.PreferenceMetadata /** Creates [Preference] widget and binds with metadata. */ @VisibleForTesting fun <P : Preference> PreferenceMetadata.createAndBindWidget(context: Context): P { - val binding = DefaultPreferenceBindingFactory.getPreferenceBinding(this) + val binding = PreferenceBindingFactory.defaultFactory.getPreferenceBinding(this)!! return (binding.createWidget(context) as P).also { if (this is PersistentPreference<*>) { storage(context)?.let { keyValueStore -> diff --git a/packages/SettingsLib/src/com/android/settingslib/RestrictedDropDownPreference.java b/packages/SettingsLib/src/com/android/settingslib/RestrictedDropDownPreference.java index 6578eb7d50a6..c36ade979d47 100644 --- a/packages/SettingsLib/src/com/android/settingslib/RestrictedDropDownPreference.java +++ b/packages/SettingsLib/src/com/android/settingslib/RestrictedDropDownPreference.java @@ -22,14 +22,20 @@ import androidx.annotation.NonNull; import androidx.preference.DropDownPreference; import androidx.preference.PreferenceViewHolder; -public class RestrictedDropDownPreference extends DropDownPreference { - RestrictedPreferenceHelper mHelper; +public class RestrictedDropDownPreference extends DropDownPreference implements + RestrictedPreferenceHelperProvider { + private final RestrictedPreferenceHelper mHelper; public RestrictedDropDownPreference(@NonNull Context context) { super(context); mHelper = new RestrictedPreferenceHelper(context, this, null); } + @Override + public @NonNull RestrictedPreferenceHelper getRestrictedPreferenceHelper() { + return mHelper; + } + /** * Checks if the given setting is subject to Enhanced Confirmation Mode restrictions for this * package. Marks the preference as disabled if so. diff --git a/packages/SettingsLib/src/com/android/settingslib/RestrictedInterface.kt b/packages/SettingsLib/src/com/android/settingslib/RestrictedInterface.kt deleted file mode 100644 index 14f9a19ee753..000000000000 --- a/packages/SettingsLib/src/com/android/settingslib/RestrictedInterface.kt +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2024 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.settingslib - -import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin - -interface RestrictedInterface { - fun useAdminDisabledSummary(useSummary: Boolean) - - fun checkRestrictionAndSetDisabled(userRestriction: String) - - fun checkRestrictionAndSetDisabled(userRestriction: String, userId: Int) - - /** - * Checks if the given setting is subject to Enhanced Confirmation Mode restrictions for this - * package. Marks the preference as disabled if so. - * - * @param settingIdentifier The key identifying the setting - * @param packageName the package to check the settingIdentifier for - */ - fun checkEcmRestrictionAndSetDisabled( - settingIdentifier: String, - packageName: String - ) - - val isDisabledByAdmin: Boolean - - fun setDisabledByAdmin(admin: EnforcedAdmin?) - - val isDisabledByEcm: Boolean - - val uid: Int - - val packageName: String? -} diff --git a/packages/SettingsLib/src/com/android/settingslib/RestrictedPreference.java b/packages/SettingsLib/src/com/android/settingslib/RestrictedPreference.java index 495410b0a8ae..332042a5c4f9 100644 --- a/packages/SettingsLib/src/com/android/settingslib/RestrictedPreference.java +++ b/packages/SettingsLib/src/com/android/settingslib/RestrictedPreference.java @@ -34,7 +34,9 @@ import com.android.settingslib.widget.TwoTargetPreference; * Preference class that supports being disabled by a user restriction * set by a device admin. */ -public class RestrictedPreference extends TwoTargetPreference { +public class RestrictedPreference extends TwoTargetPreference implements + RestrictedPreferenceHelperProvider { + RestrictedPreferenceHelper mHelper; public RestrictedPreference(Context context, AttributeSet attrs, @@ -67,6 +69,11 @@ public class RestrictedPreference extends TwoTargetPreference { } @Override + public @NonNull RestrictedPreferenceHelper getRestrictedPreferenceHelper() { + return mHelper; + } + + @Override public void onBindViewHolder(PreferenceViewHolder holder) { super.onBindViewHolder(holder); mHelper.onBindViewHolder(holder); diff --git a/packages/SettingsLib/src/com/android/settingslib/RestrictedPreferenceHelperProvider.kt b/packages/SettingsLib/src/com/android/settingslib/RestrictedPreferenceHelperProvider.kt new file mode 100644 index 000000000000..f2860845e3d3 --- /dev/null +++ b/packages/SettingsLib/src/com/android/settingslib/RestrictedPreferenceHelperProvider.kt @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settingslib + +/** Provider of [RestrictedPreferenceHelper]. */ +interface RestrictedPreferenceHelperProvider { + + /** Returns the [RestrictedPreferenceHelper] applied to the preference. */ + fun getRestrictedPreferenceHelper(): RestrictedPreferenceHelper +} diff --git a/packages/SettingsLib/src/com/android/settingslib/RestrictedSelectorWithWidgetPreference.java b/packages/SettingsLib/src/com/android/settingslib/RestrictedSelectorWithWidgetPreference.java index c52c7ea7328b..573869db5073 100644 --- a/packages/SettingsLib/src/com/android/settingslib/RestrictedSelectorWithWidgetPreference.java +++ b/packages/SettingsLib/src/com/android/settingslib/RestrictedSelectorWithWidgetPreference.java @@ -32,8 +32,9 @@ import com.android.settingslib.widget.SelectorWithWidgetPreference; /** * Selector with widget preference that can be disabled by a device admin using a user restriction. */ -public class RestrictedSelectorWithWidgetPreference extends SelectorWithWidgetPreference { - private RestrictedPreferenceHelper mHelper; +public class RestrictedSelectorWithWidgetPreference extends SelectorWithWidgetPreference implements + RestrictedPreferenceHelperProvider { + private final RestrictedPreferenceHelper mHelper; /** * Perform inflation from XML and apply a class-specific base style. @@ -82,8 +83,11 @@ public class RestrictedSelectorWithWidgetPreference extends SelectorWithWidgetPr */ public RestrictedSelectorWithWidgetPreference(@NonNull Context context) { this(context, null); - mHelper = - new RestrictedPreferenceHelper(context, /* preference= */ this, /* attrs= */ null); + } + + @Override + public @NonNull RestrictedPreferenceHelper getRestrictedPreferenceHelper() { + return mHelper; } @Override diff --git a/packages/SettingsLib/src/com/android/settingslib/RestrictedSliderPreference.java b/packages/SettingsLib/src/com/android/settingslib/RestrictedSliderPreference.java index 1dc5281c266c..b690816a6fb6 100644 --- a/packages/SettingsLib/src/com/android/settingslib/RestrictedSliderPreference.java +++ b/packages/SettingsLib/src/com/android/settingslib/RestrictedSliderPreference.java @@ -19,7 +19,6 @@ package com.android.settingslib; import android.annotation.SuppressLint; import android.content.Context; import android.os.Process; -import android.os.UserHandle; import android.util.AttributeSet; import androidx.annotation.NonNull; @@ -34,8 +33,10 @@ import com.android.settingslib.widget.SliderPreference; * Slide Preference that supports being disabled by a user restriction * set by a device admin. */ -public class RestrictedSliderPreference extends SliderPreference implements RestrictedInterface { - RestrictedPreferenceHelper mHelper; +public class RestrictedSliderPreference extends SliderPreference implements + RestrictedPreferenceHelperProvider { + + private final RestrictedPreferenceHelper mHelper; public RestrictedSliderPreference(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, @Nullable String packageName, int uid) { @@ -66,6 +67,11 @@ public class RestrictedSliderPreference extends SliderPreference implements Rest } @Override + public @NonNull RestrictedPreferenceHelper getRestrictedPreferenceHelper() { + return mHelper; + } + + @Override public void onBindViewHolder(@NonNull PreferenceViewHolder holder) { super.onBindViewHolder(holder); mHelper.onBindViewHolder(holder); @@ -81,12 +87,12 @@ public class RestrictedSliderPreference extends SliderPreference implements Rest @Override public void setEnabled(boolean enabled) { - if (enabled && isDisabledByAdmin()) { + if (enabled && mHelper.isDisabledByAdmin()) { mHelper.setDisabledByAdmin(null); return; } - if (enabled && isDisabledByEcm()) { + if (enabled && mHelper.isDisabledByEcm()) { mHelper.setDisabledByEcm(null); return; } @@ -95,55 +101,6 @@ public class RestrictedSliderPreference extends SliderPreference implements Rest } @Override - public void useAdminDisabledSummary(boolean useSummary) { - mHelper.useAdminDisabledSummary(useSummary); - } - - @Override - public void checkRestrictionAndSetDisabled(@NonNull String userRestriction) { - mHelper.checkRestrictionAndSetDisabled(userRestriction, UserHandle.myUserId()); - } - - @Override - public void checkRestrictionAndSetDisabled(@NonNull String userRestriction, int userId) { - mHelper.checkRestrictionAndSetDisabled(userRestriction, userId); - } - - @Override - public void checkEcmRestrictionAndSetDisabled(@NonNull String settingIdentifier, - @NonNull String packageName) { - mHelper.checkEcmRestrictionAndSetDisabled(settingIdentifier, packageName); - } - - @Override - public void setDisabledByAdmin(@Nullable RestrictedLockUtils.EnforcedAdmin admin) { - if (mHelper.setDisabledByAdmin(admin)) { - notifyChanged(); - } - } - - @Override - public boolean isDisabledByAdmin() { - return mHelper.isDisabledByAdmin(); - } - - @Override - public boolean isDisabledByEcm() { - return mHelper.isDisabledByEcm(); - } - - @Override - public int getUid() { - return mHelper != null ? mHelper.uid : Process.INVALID_UID; - } - - @Override - @Nullable - public String getPackageName() { - return mHelper != null ? mHelper.packageName : null; - } - - @Override protected void onAttachedToHierarchy(@NonNull PreferenceManager preferenceManager) { mHelper.onAttachedToHierarchy(); super.onAttachedToHierarchy(preferenceManager); diff --git a/packages/SettingsLib/src/com/android/settingslib/RestrictedSwitchPreference.java b/packages/SettingsLib/src/com/android/settingslib/RestrictedSwitchPreference.java index fffbb547c662..727dbe1019ae 100644 --- a/packages/SettingsLib/src/com/android/settingslib/RestrictedSwitchPreference.java +++ b/packages/SettingsLib/src/com/android/settingslib/RestrictedSwitchPreference.java @@ -45,8 +45,9 @@ import androidx.preference.SwitchPreferenceCompat; * Version of SwitchPreferenceCompat that can be disabled by a device admin * using a user restriction. */ -public class RestrictedSwitchPreference extends SwitchPreferenceCompat { - RestrictedPreferenceHelper mHelper; +public class RestrictedSwitchPreference extends SwitchPreferenceCompat implements + RestrictedPreferenceHelperProvider { + private final RestrictedPreferenceHelper mHelper; AppOpsManager mAppOpsManager; boolean mUseAdditionalSummary = false; CharSequence mRestrictedSwitchSummary; @@ -98,6 +99,11 @@ public class RestrictedSwitchPreference extends SwitchPreferenceCompat { this(context, null); } + @Override + public @NonNull RestrictedPreferenceHelper getRestrictedPreferenceHelper() { + return mHelper; + } + @VisibleForTesting public void setAppOps(AppOpsManager appOps) { mAppOpsManager = appOps; diff --git a/packages/SettingsLib/src/com/android/settingslib/RestrictedTopLevelPreference.java b/packages/SettingsLib/src/com/android/settingslib/RestrictedTopLevelPreference.java index 0096015aa875..34e4d8f7346f 100644 --- a/packages/SettingsLib/src/com/android/settingslib/RestrictedTopLevelPreference.java +++ b/packages/SettingsLib/src/com/android/settingslib/RestrictedTopLevelPreference.java @@ -22,14 +22,16 @@ import android.content.Context; import android.os.UserHandle; import android.util.AttributeSet; +import androidx.annotation.NonNull; import androidx.core.content.res.TypedArrayUtils; import androidx.preference.Preference; import androidx.preference.PreferenceManager; import androidx.preference.PreferenceViewHolder; /** Top level preference that can be disabled by a device admin using a user restriction. */ -public class RestrictedTopLevelPreference extends Preference { - private RestrictedPreferenceHelper mHelper; +public class RestrictedTopLevelPreference extends Preference implements + RestrictedPreferenceHelperProvider { + private final RestrictedPreferenceHelper mHelper; public RestrictedTopLevelPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { @@ -51,6 +53,11 @@ public class RestrictedTopLevelPreference extends Preference { } @Override + public @NonNull RestrictedPreferenceHelper getRestrictedPreferenceHelper() { + return mHelper; + } + + @Override public void onBindViewHolder(PreferenceViewHolder holder) { super.onBindViewHolder(holder); mHelper.onBindViewHolder(holder); |