diff options
Diffstat (limited to 'src/com/android')
3 files changed, 110 insertions, 8 deletions
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java index f56cba70..d4dfca1e 100644 --- a/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java +++ b/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java @@ -53,10 +53,13 @@ import com.android.packageinstaller.permission.ui.OverlayTouchActivity; import com.android.packageinstaller.permission.utils.LocationUtils; import com.android.packageinstaller.permission.utils.SafetyNetLogger; import com.android.packageinstaller.permission.utils.Utils; +import com.android.settingslib.RestrictedLockUtils; import java.util.ArrayList; import java.util.List; +import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; + public final class AppPermissionsFragment extends SettingsWithHeader implements OnPreferenceChangeListener { @@ -216,7 +219,7 @@ public final class AppPermissionsFragment extends SettingsWithHeader boolean isPlatform = group.getDeclaringPackage().equals(Utils.OS_PKG); - SwitchPreference preference = new SwitchPreference(context); + RestrictedSwitchPreference preference = new RestrictedSwitchPreference(context); preference.setOnPreferenceChangeListener(this); preference.setKey(group.getName()); Drawable icon = Utils.loadDrawable(context.getPackageManager(), @@ -226,9 +229,15 @@ public final class AppPermissionsFragment extends SettingsWithHeader preference.setTitle(group.getLabel()); if (group.isPolicyFixed()) { preference.setSummary(getString(R.string.permission_summary_enforced_by_policy)); + EnforcedAdmin admin = + RestrictedLockUtils.getProfileOrDeviceOwnerOnCallingUser(context); + if (admin != null) { + preference.setDisabledByAdmin(admin); + } else { + preference.setEnabled(false); + } } preference.setPersistent(false); - preference.setEnabled(!group.isPolicyFixed()); preference.setChecked(group.areRuntimePermissionsGranted()); if (isPlatform) { diff --git a/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java index eee2f716..550aaa92 100644 --- a/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java +++ b/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java @@ -47,10 +47,13 @@ import com.android.packageinstaller.permission.ui.OverlayTouchActivity; import com.android.packageinstaller.permission.utils.LocationUtils; import com.android.packageinstaller.permission.utils.SafetyNetLogger; import com.android.packageinstaller.permission.utils.Utils; +import com.android.settingslib.RestrictedLockUtils; import java.util.ArrayList; import java.util.List; +import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; + public final class PermissionAppsFragment extends PermissionsFrameFragment implements Callback, Preference.OnPreferenceChangeListener { @@ -83,6 +86,8 @@ public final class PermissionAppsFragment extends PermissionsFrameFragment imple private Callback mOnPermissionsLoadedListener; + private EnforcedAdmin mEnforcedAdmin; + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -97,6 +102,7 @@ public final class PermissionAppsFragment extends PermissionsFrameFragment imple String groupName = getArguments().getString(Intent.EXTRA_PERMISSION_NAME); mPermissionApps = new PermissionApps(getActivity(), groupName, this); mPermissionApps.refresh(true); + mEnforcedAdmin = RestrictedLockUtils.getProfileOrDeviceOwnerOnCallingUser(getActivity()); } @Override @@ -219,12 +225,16 @@ public final class PermissionAppsFragment extends PermissionsFrameFragment imple if (existingPref != null) { // If existing preference - only update its state. - if (app.isPolicyFixed()) { - existingPref.setSummary(getString( - R.string.permission_summary_enforced_by_policy)); + final boolean isPolicyFixed = app.isPolicyFixed(); + if (!isTelevision && (existingPref instanceof RestrictedSwitchPreference)) { + ((RestrictedSwitchPreference) existingPref).setDisabledByAdmin( + isPolicyFixed ? mEnforcedAdmin : null); + } else { + existingPref.setEnabled(!isPolicyFixed); } + existingPref.setSummary(isPolicyFixed ? + getString(R.string.permission_summary_enforced_by_policy) : null); existingPref.setPersistent(false); - existingPref.setEnabled(!app.isPolicyFixed()); if (existingPref instanceof SwitchPreference) { ((SwitchPreference) existingPref) .setChecked(app.areRuntimePermissionsGranted()); @@ -232,16 +242,20 @@ public final class PermissionAppsFragment extends PermissionsFrameFragment imple continue; } - SwitchPreference pref = new SwitchPreference(context); + RestrictedSwitchPreference pref = new RestrictedSwitchPreference(context); pref.setOnPreferenceChangeListener(this); pref.setKey(app.getKey()); pref.setIcon(app.getIcon()); pref.setTitle(app.getLabel()); if (app.isPolicyFixed()) { pref.setSummary(getString(R.string.permission_summary_enforced_by_policy)); + if (!isTelevision && mEnforcedAdmin != null) { + pref.setDisabledByAdmin(mEnforcedAdmin); + } else { + pref.setEnabled(false); + } } pref.setPersistent(false); - pref.setEnabled(!app.isPolicyFixed()); pref.setChecked(app.areRuntimePermissionsGranted()); if (isSystemApp && isTelevision) { diff --git a/src/com/android/packageinstaller/permission/ui/handheld/RestrictedSwitchPreference.java b/src/com/android/packageinstaller/permission/ui/handheld/RestrictedSwitchPreference.java new file mode 100644 index 00000000..8ab04807 --- /dev/null +++ b/src/com/android/packageinstaller/permission/ui/handheld/RestrictedSwitchPreference.java @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2016 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.packageinstaller.permission.ui.handheld; + +import android.content.Context; +import android.preference.PreferenceScreen; +import android.preference.SwitchPreference; +import android.util.AttributeSet; +import android.view.View; +import android.widget.TextView; + +import com.android.packageinstaller.R; +import com.android.settingslib.RestrictedLockUtils; + +import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; + +public class RestrictedSwitchPreference extends SwitchPreference { + private final Context mContext; + private boolean mDisabledByAdmin; + private EnforcedAdmin mEnforcedAdmin; + + public RestrictedSwitchPreference(Context context) { + super(context); + mContext = context; + } + + @Override + public void onBindView(View view) { + super.onBindView(view); + final TextView textView = (TextView) view.findViewById(android.R.id.title); + if (textView != null) { + RestrictedLockUtils.setTextViewPadlock(mContext, textView, mDisabledByAdmin); + if (mDisabledByAdmin) { + view.setEnabled(true); + } + } + } + + @Override + public void setEnabled(boolean enabled) { + if (enabled && mDisabledByAdmin) { + setDisabledByAdmin(null); + } else { + super.setEnabled(enabled); + } + } + + public void setDisabledByAdmin(EnforcedAdmin admin) { + final boolean disabled = (admin != null ? true : false); + mEnforcedAdmin = admin; + if (mDisabledByAdmin != disabled) { + mDisabledByAdmin = disabled; + setEnabled(!disabled); + } + } + + @Override + public void performClick(PreferenceScreen preferenceScreen) { + if (mDisabledByAdmin) { + RestrictedLockUtils.sendShowAdminSupportDetailsIntent(mContext, mEnforcedAdmin); + } else { + super.performClick(preferenceScreen); + } + } +}
\ No newline at end of file |