summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res/layout/preference_home_app.xml38
-rw-r--r--res/values/strings.xml4
-rw-r--r--src/com/android/settings/HomeSettings.java54
3 files changed, 82 insertions, 14 deletions
diff --git a/res/layout/preference_home_app.xml b/res/layout/preference_home_app.xml
index 0ee154e..9415752 100644
--- a/res/layout/preference_home_app.xml
+++ b/res/layout/preference_home_app.xml
@@ -30,6 +30,7 @@
android:clickable="true"
android:gravity="center_vertical"
android:background="?android:attr/selectableItemBackground" >
+
<RadioButton
android:id="@+id/home_radio"
android:layout_width="wrap_content"
@@ -40,6 +41,7 @@
android:orientation="vertical"
android:clickable="false"
android:focusable="false" />
+
<ImageView
android:id="@+android:id/icon"
android:layout_width="48dp"
@@ -47,17 +49,35 @@
android:layout_gravity="center"
android:minWidth="48dp"
android:scaleType="centerInside"
- android:layout_marginEnd="@*android:dimen/preference_item_padding_inner"
- />
- <TextView
- android:id="@+android:id/title"
+ android:layout_marginEnd="@*android:dimen/preference_item_padding_inner" />
+
+ <LinearLayout
android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
+ android:layout_height="match_parent"
android:layout_weight="1"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:ellipsize="end" />
+ android:focusable="true"
+ android:clickable="true"
+ android:gravity="center_vertical"
+ android:orientation="vertical">
+
+ <TextView
+ android:id="@+android:id/title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:singleLine="true"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:ellipsize="end" />
+
+ <TextView
+ android:id="@+android:id/summary"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceSmall" />
+
+ </LinearLayout>
+
</LinearLayout>
+
<View
android:id="@+id/home_divider"
android:layout_width="2dip"
@@ -65,6 +85,7 @@
android:layout_marginTop="5dip"
android:layout_marginBottom="5dip"
android:background="@android:drawable/divider_horizontal_dark" />
+
<ImageView
android:id="@+id/home_app_uninstall"
android:layout_width="wrap_content"
@@ -77,4 +98,5 @@
android:clickable="true"
android:focusable="true"
android:background="?android:attr/selectableItemBackground" />
+
</LinearLayout>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 413d6fd..5b0950a 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1928,6 +1928,10 @@
<!-- Sound settings screen, the caption of the checkbox for having the notification volume be
the same as the incoming call volume. -->
<string name="checkbox_notification_same_as_incoming_call">Use incoming call volume for notifications</string>
+
+ <!-- Home settings screen, text indicating that a launcer does not support work profiles [CHAR LIMIT=100] -->
+ <string name="home_work_profile_not_supported">Doesn\'t support work profiles</string>
+
<!-- Sound settings screen, setting option title-->
<string name="notification_sound_dialog_title">Default notification sound</string>
<!-- Sound settings screen, setting option name -->
diff --git a/src/com/android/settings/HomeSettings.java b/src/com/android/settings/HomeSettings.java
index 845fe1e..817c61a 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) {