diff options
-rw-r--r-- | Settings/src/com/android/tv/settings/RestrictedPreferenceAdapter.java | 39 | ||||
-rw-r--r-- | Settings/src/com/android/tv/settings/connectivity/NetworkFragment.java | 12 |
2 files changed, 43 insertions, 8 deletions
diff --git a/Settings/src/com/android/tv/settings/RestrictedPreferenceAdapter.java b/Settings/src/com/android/tv/settings/RestrictedPreferenceAdapter.java index 024965d58..a483ec685 100644 --- a/Settings/src/com/android/tv/settings/RestrictedPreferenceAdapter.java +++ b/Settings/src/com/android/tv/settings/RestrictedPreferenceAdapter.java @@ -56,9 +56,10 @@ public class RestrictedPreferenceAdapter<T extends Preference> { private final Context mContext; private final T mOriginalPreference; private final List<String> mUserRestrictions; - private final boolean mRestricted; - private final EnforcedAdmin mEnforcingAdmin; - private final RestrictedPreference mRestrictedPreference; + private boolean mRestricted; + private EnforcedAdmin mEnforcingAdmin; + private RestrictedPreference mRestrictedPreference; + private boolean mIsApSaved; public RestrictedPreferenceAdapter(Context context, T originalPreference, List<String> userRestrictions) { @@ -125,6 +126,15 @@ public class RestrictedPreferenceAdapter<T extends Preference> { return false; } + /** + * Returns {@code true} if given restriction applies to this preference, + * {@code false} otherwise. + */ + public boolean isRestricted(String restriction) { + UserManager userManager = UserManager.get(mContext); + return userManager.hasUserRestriction(restriction); + } + private EnforcedAdmin isRestrictedByAdmin() { if (mUserRestrictions == null) { return null; @@ -156,6 +166,11 @@ public class RestrictedPreferenceAdapter<T extends Preference> { screen.addPreference(mRestrictedPreference); } + /** Set access point saved or not. */ + public void setApSaved(boolean saved) { + mIsApSaved = saved; + } + /** * Returns the preference to be inserted into the preference screen. * @@ -164,7 +179,8 @@ public class RestrictedPreferenceAdapter<T extends Preference> { * the original preference. */ public Preference getPreference() { - if (mRestrictedPreference != null) { + if (mRestrictedPreference != null && (isRestricted(UserManager.DISALLOW_CONFIG_WIFI) + || (isRestricted(UserManager.DISALLOW_ADD_WIFI_CONFIG) && !mIsApSaved))) { return mRestrictedPreference; } @@ -194,8 +210,19 @@ public class RestrictedPreferenceAdapter<T extends Preference> { * Call this after making direct changes to the original preference. */ public void updatePreference() { - if (mRestricted) { + mRestricted = isRestricted(); + mEnforcingAdmin = isRestrictedByAdmin(); + if (mEnforcingAdmin != null) { + if (mRestrictedPreference == null) { + mRestrictedPreference = new RestrictedPreference(mContext); + } + } else { + mRestrictedPreference = null; + } + if (mRestricted && isRestricted(UserManager.DISALLOW_CONFIG_WIFI)) { mOriginalPreference.setEnabled(false); + } else { + mOriginalPreference.setEnabled(true); } updateRestrictedPreference(); } @@ -204,8 +231,8 @@ public class RestrictedPreferenceAdapter<T extends Preference> { if (mRestrictedPreference == null) { return; } - mRestrictedPreference.setKey(mOriginalPreference.getKey()); + mRestrictedPreference.setOrder(mOriginalPreference.getOrder()); mRestrictedPreference.setTitle(mOriginalPreference.getTitle()); mRestrictedPreference.setSummary(mOriginalPreference.getSummary()); mRestrictedPreference.setIcon(mOriginalPreference.getIcon()); diff --git a/Settings/src/com/android/tv/settings/connectivity/NetworkFragment.java b/Settings/src/com/android/tv/settings/connectivity/NetworkFragment.java index 522d4b501..900963789 100644 --- a/Settings/src/com/android/tv/settings/connectivity/NetworkFragment.java +++ b/Settings/src/com/android/tv/settings/connectivity/NetworkFragment.java @@ -58,8 +58,10 @@ import com.android.tv.settings.widget.TvAccessPointPreference; import com.android.tv.twopanelsettings.slices.SlicePreference; import com.android.wifitrackerlib.WifiEntry; +import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; +import java.util.List; import java.util.Set; /** @@ -414,10 +416,15 @@ public class NetworkFragment extends SettingsPreferenceFragment implements if (restrictedPref == null) { pref = new TvAccessPointPreference(accessPoint, themedContext, mUserBadgeCache, false); + List<String> userRestrictions = new ArrayList<>(); + userRestrictions.add(UserManager.DISALLOW_CONFIG_WIFI); + userRestrictions.add(UserManager.DISALLOW_ADD_WIFI_CONFIG); restrictedPref = new RestrictedPreferenceAdapter(themedContext, pref, - UserManager.DISALLOW_CONFIG_WIFI); + userRestrictions); + restrictedPref.setApSaved(accessPoint.isSaved()); accessPoint.setTag(restrictedPref); } else { + restrictedPref.setApSaved(accessPoint.isSaved()); toRemove.remove(restrictedPref.getPreference()); pref = restrictedPref.getOriginalPreference(); } @@ -436,7 +443,8 @@ public class NetworkFragment extends SettingsPreferenceFragment implements return false; }); } - pref.setVisible(!restrictedPref.isRestricted() || accessPoint.isSaved()); + pref.setVisible(!restrictedPref.isRestricted(UserManager.DISALLOW_CONFIG_WIFI) + || accessPoint.isSaved()); pref.setOrder(index++); pref.setSummary(accessPoint.isActive()? R.string.connected : R.string.not_connected); restrictedPref.updatePreference(); |