DynamicIndexableContentMonito should respect lacking software features.

We have software features that are optional and developers should check if
these feature are available before use their APIs which are nop if the feature
is not present. DynamicIndexableContentMonito is observing changes in print
services and IMEs but printing and IMEs are optional features. Now we are
checking before tracking these features.

bug:14653371

Change-Id: I3003c645e637aa7d7118c80b4453a54b8ac8bf9a
This commit is contained in:
Svetoslav
2014-05-08 14:43:18 -07:00
parent 9ed4f1c6ef
commit 149c1361f1

View File

@@ -74,10 +74,15 @@ public final class DynamicIndexableContentMonitor extends PackageMonitor impleme
}
};
private final ContentObserver mContentObserver = new MyContentObserver(mHandler);
private final ContentObserver mUserDictionaryContentObserver =
new UserDictionaryContentObserver(mHandler);
private Context mContext;
private boolean mHasFeturePrinting;
private boolean mHasFetureIme;
private static Intent getAccessibilityServiceIntent(String packageName) {
final Intent intent = new Intent(AccessibilityService.SERVICE_INTERFACE);
intent.setPackage(packageName);
@@ -99,6 +104,11 @@ public final class DynamicIndexableContentMonitor extends PackageMonitor impleme
public void register(Context context) {
mContext = context;
mHasFeturePrinting = mContext.getPackageManager().hasSystemFeature(
PackageManager.FEATURE_PRINTING);
mHasFetureIme = mContext.getPackageManager().hasSystemFeature(
PackageManager.FEATURE_INPUT_METHODS);
// Cache accessibility service packages to know when they go away.
AccessibilityManager accessibilityManager = (AccessibilityManager)
mContext.getSystemService(Context.ACCESSIBILITY_SERVICE);
@@ -114,6 +124,7 @@ public final class DynamicIndexableContentMonitor extends PackageMonitor impleme
mAccessibilityServices.add(resolveInfo.serviceInfo.packageName);
}
if (mHasFeturePrinting) {
// Cache print service packages to know when they go away.
PrintManager printManager = (PrintManager)
mContext.getSystemService(Context.PRINT_SERVICE);
@@ -127,8 +138,10 @@ public final class DynamicIndexableContentMonitor extends PackageMonitor impleme
}
mPrintServices.add(resolveInfo.serviceInfo.packageName);
}
}
// Cache IME service packages to know when they go away.
if (mHasFetureIme) {
InputMethodManager imeManager = (InputMethodManager)
mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
List<InputMethodInfo> inputMethods = imeManager.getInputMethodList();
@@ -142,7 +155,8 @@ public final class DynamicIndexableContentMonitor extends PackageMonitor impleme
// Watch for related content URIs.
mContext.getContentResolver().registerContentObserver(
UserDictionary.Words.CONTENT_URI, true, mContentObserver);
UserDictionary.Words.CONTENT_URI, true, mUserDictionaryContentObserver);
}
// Watch for input device changes.
InputManager inputManager = (InputManager) context.getSystemService(
@@ -160,7 +174,10 @@ public final class DynamicIndexableContentMonitor extends PackageMonitor impleme
Context.INPUT_SERVICE);
inputManager.unregisterInputDeviceListener(this);
mContext.getContentResolver().unregisterContentObserver(mContentObserver);
if (mHasFetureIme) {
mContext.getContentResolver().unregisterContentObserver(
mUserDictionaryContentObserver);
}
mAccessibilityServices.clear();
mPrintServices.clear();
@@ -225,6 +242,7 @@ public final class DynamicIndexableContentMonitor extends PackageMonitor impleme
}
}
if (mHasFeturePrinting) {
if (!mPrintServices.contains(packageName)) {
final Intent intent = getPrintServiceIntent(packageName);
if (!mContext.getPackageManager().queryIntentServices(intent, 0).isEmpty()) {
@@ -233,7 +251,9 @@ public final class DynamicIndexableContentMonitor extends PackageMonitor impleme
PrintSettingsFragment.class.getName(), false, true);
}
}
}
if (mHasFetureIme) {
if (!mImeServices.contains(packageName)) {
Intent intent = getIMEServiceIntent(packageName);
if (!mContext.getPackageManager().queryIntentServices(intent, 0).isEmpty()) {
@@ -243,6 +263,7 @@ public final class DynamicIndexableContentMonitor extends PackageMonitor impleme
}
}
}
}
private void handlePackageUnavailable(String packageName) {
final int accessibilityIndex = mAccessibilityServices.indexOf(packageName);
@@ -252,13 +273,16 @@ public final class DynamicIndexableContentMonitor extends PackageMonitor impleme
AccessibilitySettings.class.getName(), true, true);
}
if (mHasFeturePrinting) {
final int printIndex = mPrintServices.indexOf(packageName);
if (printIndex >= 0) {
mPrintServices.remove(printIndex);
Index.getInstance(mContext).updateFromClassNameResource(
PrintSettingsFragment.class.getName(), true, true);
}
}
if (mHasFetureIme) {
final int imeIndex = mImeServices.indexOf(packageName);
if (imeIndex >= 0) {
mImeServices.remove(imeIndex);
@@ -266,10 +290,11 @@ public final class DynamicIndexableContentMonitor extends PackageMonitor impleme
InputMethodAndLanguageSettings.class.getName(), true, true);
}
}
}
private final class MyContentObserver extends ContentObserver {
private final class UserDictionaryContentObserver extends ContentObserver {
public MyContentObserver(Handler handler) {
public UserDictionaryContentObserver(Handler handler) {
super(handler);
}