diff options
author | Sander Alewijnse <salewijnse@google.com> | 2014-07-15 20:23:25 +0100 |
---|---|---|
committer | Sander Alewijnse <salewijnse@google.com> | 2014-08-07 12:48:22 +0100 |
commit | cd40220372e3bac5bd52a8bfa4d4fce0e7d30078 (patch) | |
tree | 9f702b15f3b2f161130f1f0c227b04e859e49436 /src/com | |
parent | 4a45be2ff83e1b3b9bd52be523639d100311bec3 (diff) | |
download | packages_apps_Settings-cd40220372e3bac5bd52a8bfa4d4fce0e7d30078.tar.gz packages_apps_Settings-cd40220372e3bac5bd52a8bfa4d4fce0e7d30078.tar.bz2 packages_apps_Settings-cd40220372e3bac5bd52a8bfa4d4fce0e7d30078.zip |
Prevent launcher switching in Settings app.
User won't be able to switch to launchers that do not support
managed profiles.
Additional explanation is shown in text under the name of the
launcher.
Bug:15099904
Change-Id: I12470bf396d41ef47d463ef42835964aacda9719
Diffstat (limited to 'src/com')
-rw-r--r-- | src/com/android/settings/HomeSettings.java | 54 |
1 files changed, 48 insertions, 6 deletions
diff --git a/src/com/android/settings/HomeSettings.java b/src/com/android/settings/HomeSettings.java index 845fe1e79..817c61acc 100644 --- a/src/com/android/settings/HomeSettings.java +++ b/src/com/android/settings/HomeSettings.java @@ -32,18 +32,22 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.res.Resources; +import android.content.pm.UserInfo; import android.graphics.ColorFilter; import android.graphics.ColorMatrix; import android.graphics.ColorMatrixColorFilter; import android.graphics.drawable.Drawable; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.os.Handler; +import android.os.UserManager; import android.preference.Preference; import android.preference.PreferenceGroup; import android.text.TextUtils; import android.util.Log; import android.view.View; +import android.view.ViewGroup; import android.view.View.OnClickListener; import android.widget.ImageView; import android.widget.RadioButton; @@ -171,6 +175,7 @@ public class HomeSettings extends SettingsPreferenceFragment implements Indexabl mPrefs = new ArrayList<HomeAppPreference>(); mHomeComponentSet = new ComponentName[homeActivities.size()]; int prefIndex = 0; + boolean hasManagedProfile = hasManagedProfile(); for (int i = 0; i < homeActivities.size(); i++) { final ResolveInfo candidate = homeActivities.get(i); final ActivityInfo info = candidate.activityInfo; @@ -179,11 +184,19 @@ public class HomeSettings extends SettingsPreferenceFragment implements Indexabl try { Drawable icon = info.loadIcon(mPm); CharSequence name = info.loadLabel(mPm); - HomeAppPreference pref = new HomeAppPreference(context, activityName, prefIndex, - icon, name, this, info); + HomeAppPreference pref; + + if (hasManagedProfile && !launcherHasManagedProfilesFeature(candidate)) { + pref = new HomeAppPreference(context, activityName, prefIndex, + icon, name, this, info, false /* not enabled */, + getResources().getString(R.string.home_work_profile_not_supported)); + } else { + pref = new HomeAppPreference(context, activityName, prefIndex, + icon, name, this, info, true /* enabled */, null); + } + mPrefs.add(pref); mPrefGroup.addPreference(pref); - pref.setEnabled(true); if (activityName.equals(currentDefaultHome)) { mCurrentHome = pref; } @@ -202,6 +215,31 @@ public class HomeSettings extends SettingsPreferenceFragment implements Indexabl } } + private boolean hasManagedProfile() { + Context context = getActivity(); + UserManager userManager = (UserManager) getSystemService(Context.USER_SERVICE); + List<UserInfo> profiles = userManager.getProfiles(context.getUserId()); + for (UserInfo userInfo : profiles) { + if (userInfo.isManagedProfile()) return true; + } + return false; + } + + private boolean launcherHasManagedProfilesFeature(ResolveInfo resolveInfo) { + try { + ApplicationInfo appInfo = getPackageManager().getApplicationInfo( + resolveInfo.activityInfo.packageName, 0 /* default flags */); + return versionNumberAtLeastL(appInfo.targetSdkVersion); + } catch (PackageManager.NameNotFoundException e) { + return false; + } + } + + private boolean versionNumberAtLeastL(int versionNumber) { + // TODO: remove "|| true" once the build code for L is fixed. + return versionNumber >= Build.VERSION_CODES.L || true; + } + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -245,12 +283,14 @@ public class HomeSettings extends SettingsPreferenceFragment implements Indexabl String uninstallTarget; public HomeAppPreference(Context context, ComponentName activity, - int i, Drawable icon, CharSequence title, - HomeSettings parent, ActivityInfo info) { + int i, Drawable icon, CharSequence title, HomeSettings parent, ActivityInfo info, + boolean enabled, CharSequence summary) { super(context); setLayoutResource(R.layout.preference_home_app); setIcon(icon); setTitle(title); + setEnabled(enabled); + setSummary(summary); activityName = activity; fragment = parent; index = i; @@ -305,13 +345,15 @@ public class HomeSettings extends SettingsPreferenceFragment implements Indexabl icon.setEnabled(false); icon.setColorFilter(grayscaleFilter); } else { + icon.setEnabled(true); icon.setOnClickListener(mDeleteClickListener); icon.setTag(indexObj); } View v = view.findViewById(R.id.home_app_pref); - v.setOnClickListener(mHomeClickListener); v.setTag(indexObj); + + v.setOnClickListener(mHomeClickListener); } void setChecked(boolean state) { |