Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit adb05fc0 authored by Daniel Norman's avatar Daniel Norman Committed by Android (Google) Code Review
Browse files

Merge "Uses PMI.PackageListObserver in AMS to listen to new packages."

parents 94d42cc7 e04eb4fa
Loading
Loading
Loading
Loading
+29 −9
Original line number Diff line number Diff line
@@ -612,6 +612,16 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
        }
    }

    private void onSomePackagesChangedLocked() {
        final AccessibilityUserState userState = getCurrentUserStateLocked();
        // Reload the installed services since some services may have different attributes
        // or resolve info (does not support equals), etc. Remove them then to force reload.
        userState.mInstalledServices.clear();
        if (readConfigurationForUserStateLocked(userState)) {
            onUserStateChangedLocked(userState);
        }
    }

    private void registerBroadcastReceivers() {
        PackageMonitor monitor = new PackageMonitor() {
            @Override
@@ -627,15 +637,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
                    if (getChangingUserId() != mCurrentUserId) {
                        return;
                    }
                    // We will update when the automation service dies.
                    final AccessibilityUserState userState = getCurrentUserStateLocked();
                    // We have to reload the installed services since some services may
                    // have different attributes, resolve info (does not support equals),
                    // etc. Remove them then to force reload.
                    userState.mInstalledServices.clear();
                    if (readConfigurationForUserStateLocked(userState)) {
                        onUserStateChangedLocked(userState);
                    }
                    onSomePackagesChangedLocked();
                }
            }

@@ -767,6 +769,24 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
        // package changes
        monitor.register(mContext, null,  UserHandle.ALL, true);

        // Register an additional observer for new packages using PackageManagerInternal, which
        // generally notifies observers much sooner than the BroadcastReceiver-based PackageMonitor.
        final PackageManagerInternal pm = LocalServices.getService(
                PackageManagerInternal.class);
        if (pm != null) {
            pm.getPackageList(new PackageManagerInternal.PackageListObserver() {
                @Override
                public void onPackageAdded(String packageName, int uid) {
                    final int userId = UserHandle.getUserId(uid);
                    synchronized (mLock) {
                        if (userId == mCurrentUserId) {
                            onSomePackagesChangedLocked();
                        }
                    }
                }
            });
        }

        // user change and unlock
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(Intent.ACTION_USER_SWITCHED);