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 e38f18103f4..c807e8ab560 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); @@ -134,7 +135,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); }