Merge "Update VIMS internal state when a packge is modified." into oc-dev

This commit is contained in:
Sudheer Shanka
2017-04-27 20:31:04 +00:00
committed by Android (Google) Code Review
2 changed files with 60 additions and 2 deletions

View File

@@ -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);

View File

@@ -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();