From 567ebd68e1e0c1621d51e252f8456411f9daa656 Mon Sep 17 00:00:00 2001 From: Abodunrinwa Toki Date: Sat, 23 Jan 2016 16:37:37 +0000 Subject: [PATCH] Settings app: Include package icons in list of virtual keyboards Bug: 25752812 Change-Id: I2070de953c92cce90dbf178c9ffdbe300d4c2646 --- .../preference_settings_icon_widget.xml | 23 +++++++++++++++++++ .../AvailableVirtualKeyboardFragment.java | 12 ++++++++++ .../inputmethod/InputMethodPreference.java | 7 +++--- .../inputmethod/VirtualKeyboardFragment.java | 14 +++++++++++ 4 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 res/layout/preference_settings_icon_widget.xml diff --git a/res/layout/preference_settings_icon_widget.xml b/res/layout/preference_settings_icon_widget.xml new file mode 100644 index 00000000000..7160ca71503 --- /dev/null +++ b/res/layout/preference_settings_icon_widget.xml @@ -0,0 +1,23 @@ + + + + diff --git a/src/com/android/settings/inputmethod/AvailableVirtualKeyboardFragment.java b/src/com/android/settings/inputmethod/AvailableVirtualKeyboardFragment.java index 2e4242aec65..a8a708678fb 100644 --- a/src/com/android/settings/inputmethod/AvailableVirtualKeyboardFragment.java +++ b/src/com/android/settings/inputmethod/AvailableVirtualKeyboardFragment.java @@ -20,6 +20,9 @@ import android.app.Activity; import android.app.admin.DevicePolicyManager; import android.content.Context; import android.content.res.Configuration; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.v7.preference.PreferenceScreen; import android.view.inputmethod.InputMethodInfo; @@ -38,6 +41,8 @@ import java.util.List; public final class AvailableVirtualKeyboardFragment extends SettingsPreferenceFragment implements InputMethodPreference.OnSavePreferenceListener { + private static final Drawable NO_ICON = new ColorDrawable(Color.TRANSPARENT); + private final ArrayList mInputMethodPreferenceList = new ArrayList<>(); private InputMethodSettingValuesWrapper mInputMethodSettingValues; private InputMethodManager mImm; @@ -93,8 +98,15 @@ public final class AvailableVirtualKeyboardFragment extends SettingsPreferenceFr final InputMethodInfo imi = imis.get(i); final boolean isAllowedByOrganization = permittedList == null || permittedList.contains(imi.getPackageName()); + Drawable icon; + try { + icon = getActivity().getPackageManager().getApplicationIcon(imi.getPackageName()); + } catch (Exception e) { + icon = NO_ICON; + } final InputMethodPreference pref = new InputMethodPreference( context, imi, true, isAllowedByOrganization, this); + pref.setIcon(icon); mInputMethodPreferenceList.add(pref); } final Collator collator = Collator.getInstance(); diff --git a/src/com/android/settings/inputmethod/InputMethodPreference.java b/src/com/android/settings/inputmethod/InputMethodPreference.java index 8c870800398..e456af846db 100755 --- a/src/com/android/settings/inputmethod/InputMethodPreference.java +++ b/src/com/android/settings/inputmethod/InputMethodPreference.java @@ -54,6 +54,7 @@ class InputMethodPreference extends RestrictedSwitchPreference implements OnPref OnPreferenceChangeListener { private static final String TAG = InputMethodPreference.class.getSimpleName(); private static final String EMPTY_TEXT = ""; + private static final int SETTINGS_ICON_LAYOUT = R.layout.preference_settings_icon_widget; interface OnSavePreferenceListener { /** @@ -97,8 +98,8 @@ class InputMethodPreference extends RestrictedSwitchPreference implements OnPref mIsAllowedByOrganization = isAllowedByOrganization; mOnSaveListener = onSaveListener; if (!isImeEnabler) { - // Hide switch widget. - setWidgetLayoutResource(0 /* widgetLayoutResId */); + // Replace switch widget with settings icon. + setWidgetLayoutResource(SETTINGS_ICON_LAYOUT); } // Disable on/off switch texts. setSwitchTextOn(EMPTY_TEXT); @@ -133,7 +134,7 @@ class InputMethodPreference extends RestrictedSwitchPreference implements OnPref private boolean isImeEnabler() { // If this {@link SwitchPreference} doesn't have a widget layout, we explicitly hide the // switch widget at constructor. - return getWidgetLayoutResource() != 0; + return getWidgetLayoutResource() != SETTINGS_ICON_LAYOUT; } @Override diff --git a/src/com/android/settings/inputmethod/VirtualKeyboardFragment.java b/src/com/android/settings/inputmethod/VirtualKeyboardFragment.java index 541c68655e9..b6ca9f20d23 100644 --- a/src/com/android/settings/inputmethod/VirtualKeyboardFragment.java +++ b/src/com/android/settings/inputmethod/VirtualKeyboardFragment.java @@ -19,6 +19,9 @@ package com.android.settings.inputmethod; import android.app.Activity; import android.app.admin.DevicePolicyManager; import android.content.Context; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.v7.preference.Preference; import android.view.inputmethod.InputMethodInfo; @@ -38,6 +41,7 @@ import java.util.List; public final class VirtualKeyboardFragment extends SettingsPreferenceFragment { private static final String ADD_VIRTUAL_KEYBOARD_SCREEN = "add_virtual_keyboard_screen"; + private static final Drawable NO_ICON = new ColorDrawable(Color.TRANSPARENT); private final ArrayList mInputMethodPreferenceList = new ArrayList<>(); private InputMethodManager mImm; @@ -78,12 +82,21 @@ public final class VirtualKeyboardFragment extends SettingsPreferenceFragment { final InputMethodInfo imi = imis.get(i); final boolean isAllowedByOrganization = permittedList == null || permittedList.contains(imi.getPackageName()); + Drawable icon; + try { + // TODO: Consider other ways to retrieve an icon to show here. + icon = getActivity().getPackageManager().getApplicationIcon(imi.getPackageName()); + } catch (Exception e) { + // TODO: Consider handling the error differently perhaps by showing default icons. + icon = NO_ICON; + } final InputMethodPreference pref = new InputMethodPreference( context, imi, false, /* isImeEnabler */ isAllowedByOrganization, null /* this can be null since isImeEnabler is false */); + pref.setIcon(icon); mInputMethodPreferenceList.add(pref); } final Collator collator = Collator.getInstance(); @@ -101,6 +114,7 @@ public final class VirtualKeyboardFragment extends SettingsPreferenceFragment { InputMethodAndSubtypeUtil.removeUnnecessaryNonPersistentPreference(pref); pref.updatePreferenceViews(); } + mAddVirtualKeyboardScreen.setIcon(R.drawable.ic_add); mAddVirtualKeyboardScreen.setOrder(N); getPreferenceScreen().addPreference(mAddVirtualKeyboardScreen); }