summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/RestrictedSettingsFragment.java
diff options
context:
space:
mode:
authorSudheer Shanka <sudheersai@google.com>2016-01-12 10:36:18 +0000
committerSudheer Shanka <sudheersai@google.com>2016-01-25 14:05:46 +0000
commit95a71e06eb4561c495a569b196750af5368c7525 (patch)
tree500db19157598d39c5fcadb4d728258007bd4607 /src/com/android/settings/RestrictedSettingsFragment.java
parenta16852480f5054923c8181a670bba1c4539b5063 (diff)
downloadpackages_apps_Settings-95a71e06eb4561c495a569b196750af5368c7525.tar.gz
packages_apps_Settings-95a71e06eb4561c495a569b196750af5368c7525.tar.bz2
packages_apps_Settings-95a71e06eb4561c495a569b196750af5368c7525.zip
Add disabled by policy message as empty views in preferencefragment.
Change-Id: I296dc02c8e5cbea74f8415f4c8c5723f85e20b5b
Diffstat (limited to 'src/com/android/settings/RestrictedSettingsFragment.java')
-rw-r--r--src/com/android/settings/RestrictedSettingsFragment.java86
1 files changed, 84 insertions, 2 deletions
diff --git a/src/com/android/settings/RestrictedSettingsFragment.java b/src/com/android/settings/RestrictedSettingsFragment.java
index c78d6e23ee..3642fa62e7 100644
--- a/src/com/android/settings/RestrictedSettingsFragment.java
+++ b/src/com/android/settings/RestrictedSettingsFragment.java
@@ -17,6 +17,7 @@
package com.android.settings;
import android.app.Activity;
+import android.app.admin.DevicePolicyManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -24,10 +25,18 @@ import android.content.IntentFilter;
import android.content.RestrictionsManager;
import android.os.Bundle;
import android.os.PersistableBundle;
+import android.os.UserHandle;
import android.os.UserManager;
+import android.view.View;
+import android.widget.TextView;
+
+import com.android.settingslib.RestrictedLockUtils;
+
+import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
/**
- * Base class for settings screens that should be pin protected when in restricted mode.
+ * Base class for settings screens that should be pin protected when in restricted mode or
+ * that will display an admin support message in case an admin has disabled the options.
* The constructor for this class will take the restriction key that this screen should be
* locked by. If {@link RestrictionsManager.hasRestrictionsProvider()} and
* {@link UserManager.hasUserRestriction()}, then the user will have to enter the restrictions
@@ -37,7 +46,8 @@ import android.os.UserManager;
* {@link RestrictionsManager.hasRestrictionsProvider()} returns true, pass in
* {@link RESTRICT_IF_OVERRIDABLE} to the constructor instead of a restrictions key.
*/
-public abstract class RestrictedSettingsFragment extends SettingsPreferenceFragment {
+public abstract class RestrictedSettingsFragment extends SettingsPreferenceFragment
+ implements View.OnClickListener {
protected static final String RESTRICT_IF_OVERRIDABLE = "restrict_if_overridable";
@@ -55,6 +65,9 @@ public abstract class RestrictedSettingsFragment extends SettingsPreferenceFragm
private RestrictionsManager mRestrictionsManager;
private final String mRestrictionKey;
+ private View mAdminSupportDetails;
+ private EnforcedAdmin mEnforcedAdmin;
+ private TextView mEmptyTextView;
// Receiver to clear pin status when the screen is turned off.
private BroadcastReceiver mScreenOffReceiver = new BroadcastReceiver() {
@@ -95,6 +108,13 @@ public abstract class RestrictedSettingsFragment extends SettingsPreferenceFragm
}
@Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+ mAdminSupportDetails = initAdminSupportDetailsView();
+ mEmptyTextView = initEmptyTextView();
+ }
+
+ @Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
@@ -178,6 +198,68 @@ public abstract class RestrictedSettingsFragment extends SettingsPreferenceFragm
return restricted && mRestrictionsManager.hasRestrictionsProvider();
}
+ protected View initAdminSupportDetailsView() {
+ return null;
+ }
+
+ protected TextView initEmptyTextView() {
+ return null;
+ }
+
+ private void updateAdminSupportDetailsView() {
+ mEnforcedAdmin = RestrictedLockUtils.checkIfRestrictionEnforced(getActivity(),
+ mRestrictionKey, UserHandle.myUserId());
+ if (mEnforcedAdmin != null) {
+ final Activity activity = getActivity();
+ DevicePolicyManager dpm = (DevicePolicyManager) activity.getSystemService(
+ Context.DEVICE_POLICY_SERVICE);
+ if (mEnforcedAdmin.userId == UserHandle.USER_NULL) {
+ mEnforcedAdmin.userId = UserHandle.myUserId();
+ }
+ CharSequence supportMessage = dpm.getShortSupportMessageForUser(
+ mEnforcedAdmin.component, mEnforcedAdmin.userId);
+ if (supportMessage != null) {
+ TextView textView = (TextView) activity.findViewById(R.id.admin_support_msg);
+ textView.setText(supportMessage);
+ }
+ activity.findViewById(R.id.admins_policies_list).setOnClickListener(this);
+ }
+ }
+
+ @Override
+ public void onClick(View view) {
+ Intent intent = new Intent();
+ if (view.getId() == R.id.admins_policies_list && mEnforcedAdmin != null) {
+ if (mEnforcedAdmin.component != null) {
+ intent.setClass(getActivity(), DeviceAdminAdd.class);
+ intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mEnforcedAdmin.component);
+ // DeviceAdminAdd class may need to run as managed profile.
+ getActivity().startActivityAsUser(intent, UserHandle.of(mEnforcedAdmin.userId));
+ } else {
+ intent.setClass(getActivity(), Settings.DeviceAdminSettingsActivity.class);
+ // Activity merges both managed profile and parent users
+ // admins so show as same user as this activity.
+ getActivity().startActivity(intent);
+ }
+ }
+ }
+
+ public TextView getEmptyTextView() {
+ return mEmptyTextView;
+ }
+
+ @Override
+ protected void onDataSetChanged() {
+ highlightPreferenceIfNeeded();
+ if (mAdminSupportDetails != null && isUiRestricted()) {
+ updateAdminSupportDetailsView();
+ setEmptyView(mAdminSupportDetails);
+ } else if (mEmptyTextView != null) {
+ setEmptyView(mEmptyTextView);
+ }
+ super.onDataSetChanged();
+ }
+
/**
* Returns whether restricted or actionable UI elements should be removed or disabled.
*/