Add disabled by policy empty views to more screens.
Bug: 27214401 Change-Id: I6cd4292a63610671070bf2134105e9e348c3ab32
This commit is contained in:
@@ -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>
|
@@ -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>
|
||||
|
26
res/layout/admin_support_details_empty_view.xml
Normal file
26
res/layout/admin_support_details_empty_view.xml
Normal 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>
|
@@ -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"
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
@@ -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);
|
||||
|
@@ -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();
|
||||
|
@@ -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);
|
||||
|
@@ -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();
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
@@ -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) {
|
||||
|
@@ -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();
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
@@ -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()) {
|
||||
|
Reference in New Issue
Block a user