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

Commit 05ed25c4 authored by Jeff Sharkey's avatar Jeff Sharkey
Browse files

Check if anyone could possibly provide service.

If no service is present that could satisfy a given ServiceWatcher,
then return false.  For example, on devices were there is no Geocoder
service implementation, we need to avoid claiming that the API is
supported.

Test: booted
Bug: 30837973
Change-Id: Ib0834cf1a12623733f8b472dc3da7b3e2adc4515
parent f62aa63c
Loading
Loading
Loading
Loading
+16 −1
Original line number Diff line number Diff line
@@ -141,8 +141,12 @@ public class ServiceWatcher implements ServiceConnection {
     * <p>
     * Note that if there are no matching encryption-aware services, we may not
     * bind to a real service until after the current user is unlocked.
     *
     * @returns {@code true} if a potential service implementation was found.
     */
    public boolean start() {
        if (isServiceMissing()) return false;

        synchronized (mLock) {
            bindBestPackageLocked(mServicePackageName, false);
        }
@@ -173,6 +177,17 @@ public class ServiceWatcher implements ServiceConnection {
        return true;
    }

    /**
     * Check if any instance of this service is present on the device,
     * regardless of it being encryption-aware or not.
     */
    private boolean isServiceMissing() {
        final Intent intent = new Intent(mAction);
        final int flags = PackageManager.MATCH_DIRECT_BOOT_AWARE
                | PackageManager.MATCH_DIRECT_BOOT_UNAWARE;
        return mPm.queryIntentServicesAsUser(intent, flags, mCurrentUserId).isEmpty();
    }

    /**
     * Searches and binds to the best package, or do nothing if the best package
     * is already bound, unless force rebinding is requested.
@@ -181,7 +196,7 @@ public class ServiceWatcher implements ServiceConnection {
     *            packages if it is {@code null}.
     * @param forceRebind Force a rebinding to the best package if it's already
     *            bound.
     * @return {@code true} if a valid package was found to bind to.
     * @returns {@code true} if a valid package was found to bind to.
     */
    private boolean bindBestPackageLocked(String justCheckThisPackage, boolean forceRebind) {
        Intent intent = new Intent(mAction);