Merge "Update VIMS internal state when a packge is modified." into oc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
8dd177c4e8
@@ -65,6 +65,7 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver {
|
||||
int mChangeType;
|
||||
int mChangeUserId = UserHandle.USER_NULL;
|
||||
boolean mSomePackagesChanged;
|
||||
String[] mModifiedComponents;
|
||||
|
||||
String[] mTempArray = new String[1];
|
||||
|
||||
@@ -269,6 +270,18 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean isComponentModified(String className) {
|
||||
if (className == null || mModifiedComponents == null) {
|
||||
return false;
|
||||
}
|
||||
for (int i = mModifiedComponents.length - 1; i >= 0; i--) {
|
||||
if (className.equals(mModifiedComponents[i])) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void onSomePackagesChanged() {
|
||||
}
|
||||
@@ -301,6 +314,7 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver {
|
||||
|
||||
mDisappearingPackages = mAppearingPackages = null;
|
||||
mSomePackagesChanged = false;
|
||||
mModifiedComponents = null;
|
||||
|
||||
String action = intent.getAction();
|
||||
if (Intent.ACTION_PACKAGE_ADDED.equals(action)) {
|
||||
@@ -358,13 +372,13 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver {
|
||||
} else if (Intent.ACTION_PACKAGE_CHANGED.equals(action)) {
|
||||
String pkg = getPackageName(intent);
|
||||
int uid = intent.getIntExtra(Intent.EXTRA_UID, 0);
|
||||
String[] components = intent.getStringArrayExtra(
|
||||
mModifiedComponents = intent.getStringArrayExtra(
|
||||
Intent.EXTRA_CHANGED_COMPONENT_NAME_LIST);
|
||||
if (pkg != null) {
|
||||
mModifiedPackages = mTempArray;
|
||||
mTempArray[0] = pkg;
|
||||
mChangeType = PACKAGE_PERMANENT_CHANGE;
|
||||
if (onPackageChanged(pkg, uid, components)) {
|
||||
if (onPackageChanged(pkg, uid, mModifiedComponents)) {
|
||||
mSomePackagesChanged = true;
|
||||
}
|
||||
onPackageModified(pkg);
|
||||
|
||||
@@ -1202,6 +1202,50 @@ public class VoiceInteractionManagerService extends SystemService {
|
||||
public void onHandleUserStop(Intent intent, int userHandle) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPackageModified(String pkgName) {
|
||||
// If the package modified is not in the current user, then don't bother making
|
||||
// any changes as we are going to do any initialization needed when we switch users.
|
||||
if (mCurUser != getChangingUserId()) {
|
||||
return;
|
||||
}
|
||||
// Package getting updated will be handled by {@link #onSomePackagesChanged}.
|
||||
if (isPackageAppearing(pkgName) != PACKAGE_UNCHANGED) {
|
||||
return;
|
||||
}
|
||||
final ComponentName curInteractor = getCurInteractor(mCurUser);
|
||||
if (curInteractor == null) {
|
||||
final VoiceInteractionServiceInfo availInteractorInfo
|
||||
= findAvailInteractor(mCurUser, pkgName);
|
||||
if (availInteractorInfo != null) {
|
||||
final ComponentName availInteractor = new ComponentName(
|
||||
availInteractorInfo.getServiceInfo().packageName,
|
||||
availInteractorInfo.getServiceInfo().name);
|
||||
setCurInteractor(availInteractor, mCurUser);
|
||||
if (getCurRecognizer(mCurUser) == null &&
|
||||
availInteractorInfo.getRecognitionService() != null) {
|
||||
setCurRecognizer(new ComponentName(
|
||||
availInteractorInfo.getServiceInfo().packageName,
|
||||
availInteractorInfo.getRecognitionService()), mCurUser);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (didSomePackagesChange()) {
|
||||
// Package is changed
|
||||
if (curInteractor != null && pkgName.equals(
|
||||
curInteractor.getPackageName())) {
|
||||
switchImplementationIfNeeded(true);
|
||||
}
|
||||
} else {
|
||||
// Only some components are changed
|
||||
if (curInteractor != null
|
||||
&& isComponentModified(curInteractor.getClassName())) {
|
||||
switchImplementationIfNeeded(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSomePackagesChanged() {
|
||||
int userHandle = getChangingUserId();
|
||||
|
||||
Reference in New Issue
Block a user