summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/wifi
diff options
context:
space:
mode:
authorZoltan Szatmary-Ban <szatmz@google.com>2015-06-23 08:44:35 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2015-06-23 08:44:45 +0000
commit9dd754e1f405aa47a6d9c97bf50f23c8f51b7a79 (patch)
treec89fe70c09bea2e90bb5528814912240fbab4c48 /src/com/android/settings/wifi
parent2bed3a507faaab29569857fd7a92b739faa31ee3 (diff)
parent5de33f402a9117fbabbde5d04bf1016be5f9f126 (diff)
downloadpackages_apps_Settings-9dd754e1f405aa47a6d9c97bf50f23c8f51b7a79.zip
packages_apps_Settings-9dd754e1f405aa47a6d9c97bf50f23c8f51b7a79.tar.gz
packages_apps_Settings-9dd754e1f405aa47a6d9c97bf50f23c8f51b7a79.tar.bz2
Merge "Reflect effect of all Wifi editability factors in Settings" into mnc-dev
Diffstat (limited to 'src/com/android/settings/wifi')
-rw-r--r--src/com/android/settings/wifi/WifiSettings.java62
1 files changed, 47 insertions, 15 deletions
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index cce1966..0ea7da9 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -23,7 +23,10 @@ import android.app.Activity;
import android.app.AlertDialog;
import android.app.AppGlobals;
import android.app.Dialog;
+import android.app.admin.DeviceAdminInfo;
import android.app.admin.DevicePolicyManager;
+import android.app.admin.DevicePolicyManagerInternal;
+import android.content.ContentResolver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
@@ -48,6 +51,7 @@ import android.os.UserHandle;
import android.os.UserManager;
import android.preference.Preference;
import android.preference.PreferenceScreen;
+import android.provider.Settings;
import android.text.Spannable;
import android.text.style.TextAppearanceSpan;
import android.util.Log;
@@ -65,6 +69,7 @@ import android.widget.TextView.BufferType;
import android.widget.Toast;
import com.android.internal.logging.MetricsLogger;
+import com.android.server.LocalServices;
import com.android.settings.LinkifyUtils;
import com.android.settings.R;
import com.android.settings.RestrictedSettingsFragment;
@@ -933,31 +938,58 @@ public class WifiSettings extends RestrictedSettingsFragment
};
/**
- * Returns true if the config is not editable/removable except by its creating Device Owner.
+ * Returns true if the config is not editable through Settings.
+ * @param context Context of caller
* @param config The WiFi config.
- * @return true if the config is not editable/removable except by its creating Device Owner.
+ * @return true if the config is not editable through Settings.
*/
static boolean isEditabilityLockedDown(Context context, WifiConfiguration config) {
+ return !canModifyNetwork(context, config);
+ }
+
+ /**
+ * This method is a stripped version of WifiConfigStore.canModifyNetwork.
+ * TODO: refactor to have only one method.
+ * @param context Context of caller
+ * @param config The WiFi config.
+ * @return true if Settings can modify the config.
+ */
+ static boolean canModifyNetwork(Context context, WifiConfiguration config) {
if (config == null) {
- return false;
+ return true;
}
+
final DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(
Context.DEVICE_POLICY_SERVICE);
- final String deviceOwnerPackageName = dpm.getDeviceOwner();
- if (deviceOwnerPackageName == null) {
+
+ // Check if device has DPM capability. If it has and dpm is still null, then we
+ // treat this case with suspicion and bail out.
+ final PackageManager pm = context.getPackageManager();
+ if (pm.hasSystemFeature(PackageManager.FEATURE_DEVICE_ADMIN) && dpm == null) {
return false;
}
- UserManager um = UserManager.get(context);
- if (um.hasUserRestriction(UserManager.DISALLOW_CONFIG_WIFI)) {
- return false;
+
+ boolean isConfigEligibleForLockdown = false;
+ if (dpm != null) {
+ final String deviceOwnerPackageName = dpm.getDeviceOwner();
+ if (deviceOwnerPackageName != null) {
+ try {
+ final int deviceOwnerUid = pm.getPackageUid(deviceOwnerPackageName,
+ UserHandle.USER_OWNER);
+ isConfigEligibleForLockdown = deviceOwnerUid == config.creatorUid;
+ } catch (NameNotFoundException e) {
+ // don't care
+ }
+ }
}
- final PackageManager pm = context.getPackageManager();
- try {
- final int deviceOwnerUid = pm.getPackageUid(deviceOwnerPackageName,
- UserHandle.getUserId(config.creatorUid));
- return deviceOwnerUid == config.creatorUid;
- } catch (NameNotFoundException e) {
- return false;
+ if (!isConfigEligibleForLockdown) {
+ return true;
}
+
+ final ContentResolver resolver = context.getContentResolver();
+ final boolean isLockdownFeatureEnabled = Settings.Global.getInt(resolver,
+ Settings.Global.WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN, 0) != 0;
+ return !isLockdownFeatureEnabled;
}
+
}