Add disabled by policy empty views to more screens.

Bug: 27214401
Change-Id: I6cd4292a63610671070bf2134105e9e348c3ab32
This commit is contained in:
Sudheer Shanka
2016-02-16 14:19:32 +00:00
parent 5d8e963c83
commit 7dbbe13168
16 changed files with 191 additions and 128 deletions

View File

@@ -13,15 +13,7 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
<!-- Layout used for displaying admin support details in empty preference fragments. -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/admin_support_details"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="@*android:dimen/preference_fragment_padding_side"
android:gravity="center_vertical"
android:orientation="vertical"
android:visibility="gone">
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<TextView android:id="@+id/admin_support_msg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -39,4 +31,4 @@
android:textColor="?android:attr/colorAccent"
android:clickable="true"
android:background="?android:attr/selectableItemBackground" />
</LinearLayout>
</merge>

View File

@@ -46,23 +46,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView android:id="@+id/admin_support_msg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@android:style/TextAppearance.Material.Subhead"
android:text="@string/default_admin_support_msg"
android:maxLength="200"
android:autoLink="email|phone"
android:textColor="?android:attr/textColorSecondary" />
<TextView android:id="@+id/admins_policies_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/admin_details_dialog_link_padding_top"
android:text="@string/admin_support_more_info"
android:textAppearance="@android:style/TextAppearance.Material.Subhead"
android:textColor="?android:attr/colorAccent"
android:clickable="true"
android:background="?android:attr/selectableItemBackground" />
<include layout="@layout/admin_support_details_content" />
</LinearLayout>
</ScrollView>
</LinearLayout>

View File

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 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.
-->
<!-- Layout used for displaying admin support details in empty preference fragments. -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/admin_support_details"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="@*android:dimen/preference_fragment_padding_side"
android:gravity="center_vertical"
android:orientation="vertical"
android:visibility="gone">
<include layout="@layout/admin_support_details_content" />
</LinearLayout>

View File

@@ -73,7 +73,7 @@
android:gravity="center"
android:visibility="gone" />
<include layout="@layout/admin_support_details_content" />
<include layout="@layout/admin_support_details_empty_view" />
<RelativeLayout android:id="@+id/button_bar"
android:layout_height="wrap_content"

View File

@@ -76,7 +76,6 @@ import android.view.accessibility.AccessibilityManager;
import android.webkit.IWebViewUpdateService;
import android.webkit.WebViewProviderInfo;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;
import com.android.internal.app.LocalePicker;
@@ -95,7 +94,7 @@ import java.util.List;
/*
* Displays preferences for application developers.
*/
public class DevelopmentSettings extends SettingsPreferenceFragment
public class DevelopmentSettings extends RestrictedSettingsFragment
implements DialogInterface.OnClickListener, DialogInterface.OnDismissListener,
OnPreferenceChangeListener, SwitchBar.OnSwitchChangeListener, Indexable {
private static final String TAG = "DevelopmentSettings";
@@ -317,6 +316,10 @@ public class DevelopmentSettings extends SettingsPreferenceFragment
private Dialog mAdbKeysDialog;
private boolean mUnavailable;
public DevelopmentSettings() {
super(UserManager.DISALLOW_DEBUGGING_FEATURES);
}
@Override
protected int getMetricsCategory() {
return MetricsEvent.DEVELOPMENT;
@@ -337,8 +340,8 @@ public class DevelopmentSettings extends SettingsPreferenceFragment
mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
if (!mUm.isAdminUser()
|| mUm.hasUserRestriction(UserManager.DISALLOW_DEBUGGING_FEATURES)
setIfOnlyAvailableForAdmins(true);
if (isUiRestricted()
|| Settings.Global.getInt(getActivity().getContentResolver(),
Settings.Global.DEVICE_PROVISIONED, 0) == 0) {
// Block access to developer options if the user is not the owner, if user policy
@@ -582,11 +585,10 @@ public class DevelopmentSettings extends SettingsPreferenceFragment
if (mUnavailable) {
// Show error message
TextView emptyView = (TextView) getView().findViewById(android.R.id.empty);
setEmptyView(emptyView);
if (emptyView != null) {
emptyView.setText(R.string.development_settings_not_available);
if (!isUiRestrictedByOnlyAdmin()) {
getEmptyTextView().setText(R.string.development_settings_not_available);
}
getPreferenceScreen().removeAll();
return;
}

View File

@@ -41,9 +41,12 @@ import android.widget.LinearLayout;
import android.widget.TextView;
import com.android.internal.logging.MetricsProto.MetricsEvent;
import com.android.settingslib.RestrictedLockUtils;
import java.util.List;
import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
/**
* Confirm and execute a reset of the device to a clean "just out of the box"
* state. Multiple confirmations are required: first, a general "are you sure
@@ -280,10 +283,17 @@ public class MasterClear extends InstrumentedFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final EnforcedAdmin admin = RestrictedLockUtils.checkIfRestrictionEnforced(
getActivity(), UserManager.DISALLOW_FACTORY_RESET, UserHandle.myUserId());
final UserManager um = UserManager.get(getActivity());
if (!um.isAdminUser()
|| um.hasUserRestriction(UserManager.DISALLOW_FACTORY_RESET)) {
if (!um.isAdminUser() || RestrictedLockUtils.hasBaseUserRestriction(getActivity(),
UserManager.DISALLOW_FACTORY_RESET, UserHandle.myUserId())) {
return inflater.inflate(R.layout.master_clear_disallowed_screen, null);
} else if (admin != null) {
View view = inflater.inflate(R.layout.admin_support_details_empty_view, null);
ShowAdminSupportDetailsDialog.setAdminSupportDetails(getActivity(), view, admin, false);
view.setVisibility(View.VISIBLE);
return view;
}
mContentView = inflater.inflate(R.layout.master_clear, null);

View File

@@ -22,6 +22,7 @@ import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
import android.service.persistentdata.PersistentDataBlockManager;
@@ -32,6 +33,9 @@ import android.widget.Button;
import android.widget.TextView;
import com.android.internal.logging.MetricsProto.MetricsEvent;
import com.android.settingslib.RestrictedLockUtils;
import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
/**
* Confirm and execute a reset of the device to a clean "just out of the box"
@@ -136,9 +140,16 @@ public class MasterClearConfirm extends InstrumentedFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (UserManager.get(getActivity()).hasUserRestriction(
UserManager.DISALLOW_FACTORY_RESET)) {
final EnforcedAdmin admin = RestrictedLockUtils.checkIfRestrictionEnforced(
getActivity(), UserManager.DISALLOW_FACTORY_RESET, UserHandle.myUserId());
if (RestrictedLockUtils.hasBaseUserRestriction(getActivity(),
UserManager.DISALLOW_FACTORY_RESET, UserHandle.myUserId())) {
return inflater.inflate(R.layout.master_clear_disallowed_screen, null);
} else if (admin != null) {
View view = inflater.inflate(R.layout.admin_support_details_empty_view, null);
ShowAdminSupportDetailsDialog.setAdminSupportDetails(getActivity(), view, admin, false);
view.setVisibility(View.VISIBLE);
return view;
}
mContentView = inflater.inflate(R.layout.master_clear_confirm, null);
establishFinalConfirmationState();

View File

@@ -20,6 +20,7 @@ import android.app.Activity;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.os.UserHandle;
import android.os.UserManager;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
@@ -33,10 +34,13 @@ import android.widget.Spinner;
import com.android.internal.logging.MetricsProto.MetricsEvent;
import com.android.internal.telephony.PhoneConstants;
import com.android.settingslib.RestrictedLockUtils;
import java.util.ArrayList;
import java.util.List;
import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
/**
* Confirm and execute a reset of the device's network settings to a clean "just out of the box"
* state. Multiple confirmations are required: first, a general "are you sure you want to do this?"
@@ -180,9 +184,16 @@ public class ResetNetwork extends InstrumentedFragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final UserManager um = UserManager.get(getActivity());
if (!um.isAdminUser()
|| um.hasUserRestriction(UserManager.DISALLOW_NETWORK_RESET)) {
final EnforcedAdmin admin = RestrictedLockUtils.checkIfRestrictionEnforced(
getActivity(), UserManager.DISALLOW_NETWORK_RESET, UserHandle.myUserId());
if (!um.isAdminUser() || RestrictedLockUtils.hasBaseUserRestriction(getActivity(),
UserManager.DISALLOW_NETWORK_RESET, UserHandle.myUserId())) {
return inflater.inflate(R.layout.network_reset_disallowed_screen, null);
} else if (admin != null) {
View view = inflater.inflate(R.layout.admin_support_details_empty_view, null);
ShowAdminSupportDetailsDialog.setAdminSupportDetails(getActivity(), view, admin, false);
view.setVisibility(View.VISIBLE);
return view;
}
mContentView = inflater.inflate(R.layout.reset_network, null);

View File

@@ -22,6 +22,7 @@ import android.net.ConnectivityManager;
import android.net.NetworkPolicyManager;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.UserHandle;
import android.os.UserManager;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
@@ -34,6 +35,9 @@ import android.widget.Toast;
import com.android.ims.ImsManager;
import com.android.internal.logging.MetricsProto.MetricsEvent;
import com.android.internal.telephony.PhoneConstants;
import com.android.settingslib.RestrictedLockUtils;
import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
/**
* Confirm and execute a reset of the network settings to a clean "just out of the box"
@@ -113,9 +117,16 @@ public class ResetNetworkConfirm extends InstrumentedFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (UserManager.get(getActivity()).hasUserRestriction(
UserManager.DISALLOW_NETWORK_RESET)) {
final EnforcedAdmin admin = RestrictedLockUtils.checkIfRestrictionEnforced(
getActivity(), UserManager.DISALLOW_NETWORK_RESET, UserHandle.myUserId());
if (RestrictedLockUtils.hasBaseUserRestriction(getActivity(),
UserManager.DISALLOW_NETWORK_RESET, UserHandle.myUserId())) {
return inflater.inflate(R.layout.network_reset_disallowed_screen, null);
} else if (admin != null) {
View view = inflater.inflate(R.layout.admin_support_details_empty_view, null);
ShowAdminSupportDetailsDialog.setAdminSupportDetails(getActivity(), view, admin, false);
view.setVisibility(View.VISIBLE);
return view;
}
mContentView = inflater.inflate(R.layout.reset_network_confirm, null);
establishFinalConfirmationState();

View File

@@ -27,6 +27,7 @@ import android.os.Bundle;
import android.os.PersistableBundle;
import android.os.UserHandle;
import android.os.UserManager;
import android.view.Gravity;
import android.view.View;
import android.widget.TextView;
@@ -69,6 +70,9 @@ public abstract class RestrictedSettingsFragment extends SettingsPreferenceFragm
private EnforcedAdmin mEnforcedAdmin;
private TextView mEmptyTextView;
private boolean mOnlyAvailableForAdmins = false;
private boolean mIsAdminUser;
// Receiver to clear pin status when the screen is turned off.
private BroadcastReceiver mScreenOffReceiver = new BroadcastReceiver() {
@Override
@@ -96,6 +100,7 @@ public abstract class RestrictedSettingsFragment extends SettingsPreferenceFragm
mRestrictionsManager = (RestrictionsManager) getSystemService(Context.RESTRICTIONS_SERVICE);
mUserManager = (UserManager) getSystemService(Context.USER_SERVICE);
mIsAdminUser = mUserManager.isAdminUser();
if (icicle != null) {
mChallengeSucceeded = icicle.getBoolean(KEY_CHALLENGE_SUCCEEDED, false);
@@ -198,26 +203,24 @@ public abstract class RestrictedSettingsFragment extends SettingsPreferenceFragm
return restricted && mRestrictionsManager.hasRestrictionsProvider();
}
protected View initAdminSupportDetailsView() {
return null;
private View initAdminSupportDetailsView() {
return getActivity().findViewById(R.id.admin_support_details);
}
protected TextView initEmptyTextView() {
return null;
TextView emptyView = (TextView) getActivity().findViewById(android.R.id.empty);
emptyView.setGravity(Gravity.START | Gravity.CENTER_VERTICAL);
return emptyView;
}
private void updateAdminSupportDetailsView() {
mEnforcedAdmin = RestrictedLockUtils.checkIfRestrictionEnforced(getActivity(),
mRestrictionKey, UserHandle.myUserId());
if (mEnforcedAdmin != null) {
final EnforcedAdmin admin = getRestrictionEnforcedAdmin();
if (admin != 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);
admin.component, admin.userId);
if (supportMessage != null) {
TextView textView = (TextView) activity.findViewById(R.id.admin_support_msg);
textView.setText(supportMessage);
@@ -226,6 +229,15 @@ public abstract class RestrictedSettingsFragment extends SettingsPreferenceFragm
}
}
public EnforcedAdmin getRestrictionEnforcedAdmin() {
mEnforcedAdmin = RestrictedLockUtils.checkIfRestrictionEnforced(getActivity(),
mRestrictionKey, UserHandle.myUserId());
if (mEnforcedAdmin != null && mEnforcedAdmin.userId == UserHandle.USER_NULL) {
mEnforcedAdmin.userId = UserHandle.myUserId();
}
return mEnforcedAdmin;
}
@Override
public void onClick(View view) {
Intent intent = new Intent();
@@ -252,7 +264,9 @@ public abstract class RestrictedSettingsFragment extends SettingsPreferenceFragm
protected void onDataSetChanged() {
highlightPreferenceIfNeeded();
if (mAdminSupportDetails != null && isUiRestrictedByOnlyAdmin()) {
updateAdminSupportDetailsView();
final EnforcedAdmin admin = getRestrictionEnforcedAdmin();
ShowAdminSupportDetailsDialog.setAdminSupportDetails(getActivity(),
mAdminSupportDetails, admin, false);
setEmptyView(mAdminSupportDetails);
} else if (mEmptyTextView != null) {
setEmptyView(mEmptyTextView);
@@ -260,15 +274,20 @@ public abstract class RestrictedSettingsFragment extends SettingsPreferenceFragm
super.onDataSetChanged();
}
public void setIfOnlyAvailableForAdmins(boolean onlyForAdmins) {
mOnlyAvailableForAdmins = onlyForAdmins;
}
/**
* Returns whether restricted or actionable UI elements should be removed or disabled.
*/
protected boolean isUiRestricted() {
return isRestrictedAndNotProviderProtected() || !hasChallengeSucceeded();
return isRestrictedAndNotProviderProtected() || !hasChallengeSucceeded()
|| (!mIsAdminUser && mOnlyAvailableForAdmins);
}
protected boolean isUiRestrictedByOnlyAdmin() {
return isUiRestricted() && !mUserManager.hasBaseUserRestriction(mRestrictionKey,
UserHandle.of(UserHandle.myUserId()));
UserHandle.of(UserHandle.myUserId())) && (mIsAdminUser || !mOnlyAvailableForAdmins);
}
}

View File

@@ -23,12 +23,14 @@ import android.app.AppGlobals;
import android.app.IActivityManager;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Process;
import android.os.RemoteException;
import android.os.UserHandle;
import android.util.Log;
@@ -58,7 +60,7 @@ public class ShowAdminSupportDetailsDialog extends Activity
mDialogView = LayoutInflater.from(this).inflate(
R.layout.admin_support_details_dialog, null);
setAdminSupportDetails(mDialogView, mEnforcedAdmin.component, mEnforcedAdmin.userId);
setAdminSupportDetails(this, mDialogView, mEnforcedAdmin, true);
new AlertDialog.Builder(this)
.setView(mDialogView)
@@ -73,7 +75,7 @@ public class ShowAdminSupportDetailsDialog extends Activity
EnforcedAdmin admin = getAdminDetailsFromIntent(intent);
if (!mEnforcedAdmin.equals(admin)) {
mEnforcedAdmin = admin;
setAdminSupportDetails(mDialogView, mEnforcedAdmin.component, mEnforcedAdmin.userId);
setAdminSupportDetails(this, mDialogView, mEnforcedAdmin, true);
}
}
@@ -102,14 +104,8 @@ public class ShowAdminSupportDetailsDialog extends Activity
return false;
}
private void setAdminSupportDetails(View root, final ComponentName admin, final int userId) {
private void initializeDialogViews(View root, final ComponentName admin, int userId) {
if (admin != null) {
CharSequence supportMessage = mDpm.getShortSupportMessageForUser(admin, userId);
if (supportMessage != null) {
TextView textView = (TextView) root.findViewById(R.id.admin_support_msg);
textView.setText(supportMessage);
}
ActivityInfo ai = null;
try {
ai = AppGlobals.getPackageManager().getReceiverInfo(admin, 0 /* flags */, userId);
@@ -125,25 +121,52 @@ public class ShowAdminSupportDetailsDialog extends Activity
}
}
setAdminSupportDetails(this, root, new EnforcedAdmin(admin, userId), true);
}
public static void setAdminSupportDetails(final Activity activity, View root,
final EnforcedAdmin enforcedAdmin, final boolean finishActivity) {
if (enforcedAdmin == null) {
return;
}
if (enforcedAdmin.component != null) {
DevicePolicyManager dpm = (DevicePolicyManager) activity.getSystemService(
Context.DEVICE_POLICY_SERVICE);
if (enforcedAdmin.userId == UserHandle.USER_NULL) {
enforcedAdmin.userId = UserHandle.myUserId();
}
CharSequence supportMessage = null;
if (UserHandle.isSameApp(Process.myUid(), Process.SYSTEM_UID)) {
supportMessage = dpm.getShortSupportMessageForUser(
enforcedAdmin.component, enforcedAdmin.userId);
}
if (supportMessage != null) {
TextView textView = (TextView) root.findViewById(R.id.admin_support_msg);
textView.setText(supportMessage);
}
}
root.findViewById(R.id.admins_policies_list).setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
if (admin != null) {
intent.setClass(ShowAdminSupportDetailsDialog.this,
DeviceAdminAdd.class);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, admin);
if (enforcedAdmin.component != null) {
intent.setClass(activity, DeviceAdminAdd.class);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,
enforcedAdmin.component);
// DeviceAdminAdd class may need to run as managed profile.
startActivityAsUser(intent, new UserHandle(userId));
activity.startActivityAsUser(intent,
new UserHandle(enforcedAdmin.userId));
} else {
intent.setClass(ShowAdminSupportDetailsDialog.this,
Settings.DeviceAdminSettingsActivity.class);
intent.setClass(activity, Settings.DeviceAdminSettingsActivity.class);
// Activity merges both managed profile and parent users
// admins so show as same user as this activity.
startActivity(intent);
activity.startActivity(intent);
}
if (finishActivity) {
activity.finish();
}
finish();
}
});
}

View File

@@ -42,7 +42,6 @@ import android.os.UserManager;
import android.support.v14.preference.SwitchPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
import android.widget.TextView;
import com.android.internal.logging.MetricsProto.MetricsEvent;
import com.android.settings.wifi.WifiApDialog;
@@ -56,7 +55,7 @@ import java.util.concurrent.atomic.AtomicReference;
/*
* Displays preferences for Tethering.
*/
public class TetherSettings extends SettingsPreferenceFragment
public class TetherSettings extends RestrictedSettingsFragment
implements DialogInterface.OnClickListener, Preference.OnPreferenceChangeListener {
private static final String USB_TETHER_SETTINGS = "usb_tether_settings";
@@ -94,7 +93,6 @@ public class TetherSettings extends SettingsPreferenceFragment
private WifiApDialog mDialog;
private WifiManager mWifiManager;
private WifiConfiguration mWifiConfig = null;
private UserManager mUm;
private ConnectivityManager mCm;
private boolean mUsbConnected;
@@ -113,16 +111,18 @@ public class TetherSettings extends SettingsPreferenceFragment
return MetricsEvent.TETHER;
}
public TetherSettings() {
super(UserManager.DISALLOW_CONFIG_TETHERING);
}
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
addPreferencesFromResource(R.xml.tether_prefs);
mUm = (UserManager) getSystemService(Context.USER_SERVICE);
if (mUm.hasUserRestriction(UserManager.DISALLOW_CONFIG_TETHERING)
|| !mUm.isAdminUser()) {
setIfOnlyAvailableForAdmins(true);
if (isUiRestricted()) {
mUnavailable = true;
setPreferenceScreen(new PreferenceScreen(getPrefContext(), null));
return;
@@ -259,11 +259,10 @@ public class TetherSettings extends SettingsPreferenceFragment
super.onStart();
if (mUnavailable) {
TextView emptyView = (TextView) getView().findViewById(android.R.id.empty);
setEmptyView(emptyView);
if (emptyView != null) {
emptyView.setText(R.string.tethering_settings_not_available);
if (!isUiRestrictedByOnlyAdmin()) {
getEmptyTextView().setText(R.string.tethering_settings_not_available);
}
getPreferenceScreen().removeAll();
return;
}

View File

@@ -34,7 +34,6 @@ import android.support.v7.preference.PreferenceScreen;
import android.text.Spannable;
import android.text.style.TextAppearanceSpan;
import android.util.Log;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
@@ -379,18 +378,6 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment implem
}
}
@Override
protected TextView initEmptyTextView() {
TextView textView = (TextView) getView().findViewById(android.R.id.empty);
textView.setGravity(Gravity.START | Gravity.CENTER_VERTICAL);
return textView;
}
@Override
protected View initAdminSupportDetailsView() {
return getActivity().findViewById(R.id.admin_support_details);
}
private void setOffMessage() {
final TextView emptyView = getEmptyTextView();
if (emptyView == null) {

View File

@@ -28,9 +28,7 @@ import android.provider.Settings;
import android.provider.Settings.Global;
import android.service.notification.ZenModeConfig;
import android.util.Log;
import android.view.View;
import com.android.settings.R;
import com.android.settings.RestrictedSettingsFragment;
import java.util.List;
@@ -78,11 +76,6 @@ abstract public class ZenModeSettingsBase extends RestrictedSettingsFragment {
}
}
@Override
protected View initAdminSupportDetailsView() {
return getActivity().findViewById(R.id.admin_support_details);
}
@Override
public void onPause() {
super.onPause();

View File

@@ -49,7 +49,6 @@ import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import com.android.internal.logging.MetricsProto.MetricsEvent;
import com.android.internal.net.LegacyVpnInfo;
@@ -57,7 +56,8 @@ import com.android.internal.net.VpnConfig;
import com.android.internal.net.VpnProfile;
import com.android.internal.util.ArrayUtils;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.RestrictedSettingsFragment;
import com.android.settingslib.RestrictedLockUtils;
import com.google.android.collect.Lists;
import java.util.ArrayList;
@@ -72,7 +72,7 @@ import static android.app.AppOpsManager.OP_ACTIVATE_VPN;
* Settings screen listing VPNs. Configured VPNs and networks managed by apps
* are shown in the same list.
*/
public class VpnSettings extends SettingsPreferenceFragment implements
public class VpnSettings extends RestrictedSettingsFragment implements
Handler.Callback, Preference.OnPreferenceClickListener {
private static final String LOG_TAG = "VpnSettings";
@@ -101,6 +101,10 @@ public class VpnSettings extends SettingsPreferenceFragment implements
private boolean mUnavailable;
public VpnSettings() {
super(UserManager.DISALLOW_CONFIG_VPN);
}
@Override
protected int getMetricsCategory() {
return MetricsEvent.VPN;
@@ -111,7 +115,7 @@ public class VpnSettings extends SettingsPreferenceFragment implements
super.onCreate(savedState);
mUserManager = (UserManager) getSystemService(Context.USER_SERVICE);
if (mUserManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_VPN)) {
if (isUiRestricted()) {
mUnavailable = true;
setPreferenceScreen(new PreferenceScreen(getPrefContext(), null));
setHasOptionsMenu(false);
@@ -136,7 +140,12 @@ public class VpnSettings extends SettingsPreferenceFragment implements
// Disable all actions if VPN configuration has been disallowed
for (int i = 0; i < menu.size(); i++) {
menu.getItem(i).setEnabled(!mUnavailable);
if (isUiRestrictedByOnlyAdmin()) {
RestrictedLockUtils.setMenuItemAsDisabledByAdmin(getPrefContext(),
menu.getItem(i), getRestrictionEnforcedAdmin());
} else {
menu.getItem(i).setEnabled(!mUnavailable);
}
}
// Hide lockdown VPN on devices that require IMS authentication
@@ -172,11 +181,10 @@ public class VpnSettings extends SettingsPreferenceFragment implements
if (mUnavailable) {
// Show a message to explain that VPN settings have been disabled
TextView emptyView = (TextView) getView().findViewById(android.R.id.empty);
setEmptyView(emptyView);
if (emptyView != null) {
emptyView.setText(R.string.vpn_settings_not_available);
if (!isUiRestrictedByOnlyAdmin()) {
getEmptyTextView().setText(R.string.vpn_settings_not_available);
}
getPreferenceScreen().removeAll();
return;
}

View File

@@ -54,7 +54,6 @@ import android.util.Log;
import android.util.TypedValue;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
@@ -721,18 +720,6 @@ public class WifiSettings extends RestrictedSettingsFragment
}
}
@Override
protected TextView initEmptyTextView() {
TextView emptyView = (TextView) getActivity().findViewById(android.R.id.empty);
emptyView.setGravity(Gravity.START | Gravity.CENTER_VERTICAL);
return emptyView;
}
@Override
protected View initAdminSupportDetailsView() {
return getActivity().findViewById(R.id.admin_support_details);
}
private void setOffMessage() {
if (isUiRestricted()) {
if (!isUiRestrictedByOnlyAdmin()) {