Loading core/java/com/android/internal/content/PackageMonitor.java +16 −2 Original line number Diff line number Diff line Loading @@ -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]; Loading Loading @@ -270,6 +271,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() { } Loading Loading @@ -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)) { Loading Loading @@ -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); Loading services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java +44 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading Loading
core/java/com/android/internal/content/PackageMonitor.java +16 −2 Original line number Diff line number Diff line Loading @@ -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]; Loading Loading @@ -270,6 +271,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() { } Loading Loading @@ -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)) { Loading Loading @@ -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); Loading
services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java +44 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading