diff options
author | Zoltan Szatmary-Ban <szatmz@google.com> | 2015-06-23 08:44:35 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-06-23 08:44:45 +0000 |
commit | 9dd754e1f405aa47a6d9c97bf50f23c8f51b7a79 (patch) | |
tree | c89fe70c09bea2e90bb5528814912240fbab4c48 | |
parent | 2bed3a507faaab29569857fd7a92b739faa31ee3 (diff) | |
parent | 5de33f402a9117fbabbde5d04bf1016be5f9f126 (diff) | |
download | packages_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
-rw-r--r-- | src/com/android/settings/wifi/WifiSettings.java | 62 |
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; } + } |