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

Commit 589f3099 authored by Jeff Sharkey's avatar Jeff Sharkey
Browse files

Relax missing service check for normal apps.

The new missing-service behavior was mostly added for core system
components, so don't wtf() when normal apps ask for missing services.

Continue to emit one-line log for third-party apps so they know why
getSystemService() might be returning null.

Test: builds, boots
Bug: 33109365
Change-Id: I3a6118a3db570d796a26da5b8d63015b13e53a87
parent 5ba211a6
Loading
Loading
Loading
Loading
+16 −5
Original line number Diff line number Diff line
@@ -514,7 +514,7 @@ final class SystemServiceRegistry {
                new CachedServiceFetcher<WifiAwareManager>() {
            @Override
            public WifiAwareManager createService(ContextImpl ctx) throws ServiceNotFoundException {
                IBinder b = ServiceManager.getService(Context.WIFI_AWARE_SERVICE);
                IBinder b = ServiceManager.getServiceOrThrow(Context.WIFI_AWARE_SERVICE);
                IWifiAwareManager service = IWifiAwareManager.Stub.asInterface(b);
                if (service == null) {
                    return null;
@@ -831,7 +831,7 @@ final class SystemServiceRegistry {
                        service = createService(ctx);
                        cache[mCacheIndex] = service;
                    } catch (ServiceNotFoundException e) {
                        Log.wtf(TAG, e.getMessage(), e);
                        onServiceNotFound(e);
                    }
                }
                return (T)service;
@@ -849,13 +849,13 @@ final class SystemServiceRegistry {
        private T mCachedInstance;

        @Override
        public final T getService(ContextImpl unused) {
        public final T getService(ContextImpl ctx) {
            synchronized (StaticServiceFetcher.this) {
                if (mCachedInstance == null) {
                    try {
                        mCachedInstance = createService();
                    } catch (ServiceNotFoundException e) {
                        Log.wtf(TAG, e.getMessage(), e);
                        onServiceNotFound(e);
                    }
                }
                return mCachedInstance;
@@ -888,7 +888,7 @@ final class SystemServiceRegistry {
                    try {
                        mCachedInstance = createService(appContext != null ? appContext : ctx);
                    } catch (ServiceNotFoundException e) {
                        Log.wtf(TAG, e.getMessage(), e);
                        onServiceNotFound(e);
                    }
                }
                return mCachedInstance;
@@ -897,4 +897,15 @@ final class SystemServiceRegistry {

        public abstract T createService(Context applicationContext) throws ServiceNotFoundException;
    }

    public static void onServiceNotFound(ServiceNotFoundException e) {
        // We're mostly interested in tracking down long-lived core system
        // components that might stumble if they obtain bad references; just
        // emit a tidy log message for normal apps
        if (android.os.Process.myUid() < android.os.Process.FIRST_APPLICATION_UID) {
            Log.wtf(TAG, e.getMessage(), e);
        } else {
            Log.w(TAG, e.getMessage());
        }
    }
}