From 0ee6613d09eff218211c2624774b12981699bfd2 Mon Sep 17 00:00:00 2001 From: satok Date: Wed, 26 Jan 2011 16:57:50 +0900 Subject: [PATCH] Update input method panel when packages are changed. Change-Id: I1edad2a11fd40c8f1f7fbb42f37e0538b1e245eb --- .../statusbar/tablet/InputMethodsPanel.java | 49 +++++++++++++++++-- 1 file changed, 46 insertions(+), 3 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/InputMethodsPanel.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/InputMethodsPanel.java index 06c789c7a4e08..a1cc274ef99cb 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/InputMethodsPanel.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/InputMethodsPanel.java @@ -16,8 +16,10 @@ package com.android.systemui.statusbar.tablet; +import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.content.IntentFilter; import android.content.pm.PackageManager; import android.graphics.drawable.Drawable; import android.os.IBinder; @@ -49,14 +51,24 @@ public class InputMethodsPanel extends LinearLayout implements StatusBarPanel, O private static final boolean DEBUG = TabletStatusBar.DEBUG; private static final String TAG = "InputMethodsPanel"; + private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + onPackageChanged(); + } + }; + private final InputMethodManager mImm; + private final IntentFilter mIntentFilter = new IntentFilter(); + private final HashMap> mRadioViewAndImiMap = + new HashMap>(); private final TreeMap> mEnabledInputMethodAndSubtypesCache = new TreeMap>( new InputMethodComparator()); - private final HashMap> mRadioViewAndImiMap = - new HashMap>(); + private boolean mAttached = false; + private boolean mPackageChanged = false; private Context mContext; private IBinder mToken; private InputMethodButton mInputMethodSwitchButton; @@ -88,6 +100,28 @@ public class InputMethodsPanel extends LinearLayout implements StatusBarPanel, O super(context, attrs, defStyle); mContext = context; mImm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); + mIntentFilter.addAction(Intent.ACTION_PACKAGE_REPLACED); + mIntentFilter.addAction(Intent.ACTION_PACKAGE_ADDED); + mIntentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED); + mIntentFilter.addDataScheme("package"); + } + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + if (mAttached) { + getContext().unregisterReceiver(mBroadcastReceiver); + mAttached = false; + } + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + if (!mAttached) { + getContext().registerReceiver(mBroadcastReceiver, mIntentFilter); + mAttached = true; + } } @Override @@ -302,7 +336,8 @@ public class InputMethodsPanel extends LinearLayout implements StatusBarPanel, O String newEnabledIMIs = Settings.Secure.getString( mContext.getContentResolver(), Settings.Secure.ENABLED_INPUT_METHODS); if (mEnabledInputMethodAndSubtypesCacheStr == null - || !mEnabledInputMethodAndSubtypesCacheStr.equals(newEnabledIMIs)) { + || !mEnabledInputMethodAndSubtypesCacheStr.equals(newEnabledIMIs) + || mPackageChanged) { mEnabledInputMethodAndSubtypesCache.clear(); final List imis = mImm.getEnabledInputMethodList(); for (InputMethodInfo imi: imis) { @@ -310,6 +345,7 @@ public class InputMethodsPanel extends LinearLayout implements StatusBarPanel, O mImm.getEnabledInputMethodSubtypeList(imi, true)); } mEnabledInputMethodAndSubtypesCacheStr = newEnabledIMIs; + mPackageChanged = false; } return mEnabledInputMethodAndSubtypesCache; } @@ -376,4 +412,11 @@ public class InputMethodsPanel extends LinearLayout implements StatusBarPanel, O } return null; } + + private void onPackageChanged() { + if (DEBUG) { + Log.d(TAG, "onPackageChanged."); + } + mPackageChanged = true; + } }