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

Commit 7b5ef4bd authored by Yu-Han Yang's avatar Yu-Han Yang Committed by Automerger Merge Worker
Browse files

DO NOT MERGE: Do not hold mLock when calling GNSS HAL am: 5a0a1d95 am: 42403eb0

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11813790

Change-Id: Ifb6a192c3359c16d5ef1706e7d87350caa6879dc
parents af09625e 42403eb0
Loading
Loading
Loading
Loading
+11 −4
Original line number Original line Diff line number Diff line
@@ -231,7 +231,7 @@ public class LocationManagerService extends ILocationManager.Stub {
    private final AppForegroundHelper mAppForegroundHelper;
    private final AppForegroundHelper mAppForegroundHelper;
    private final LocationUsageLogger mLocationUsageLogger;
    private final LocationUsageLogger mLocationUsageLogger;


    @Nullable private GnssManagerService mGnssManagerService = null;
    @Nullable private volatile GnssManagerService mGnssManagerService = null;


    private final PassiveLocationProviderManager mPassiveManager;
    private final PassiveLocationProviderManager mPassiveManager;


@@ -381,6 +381,10 @@ public class LocationManagerService extends ILocationManager.Stub {
            // prepare providers
            // prepare providers
            initializeProvidersLocked();
            initializeProvidersLocked();
        }
        }

        // initialize gnss last because it has no awareness of boot phases and blindly assumes that
        // all other location providers are loaded at initialization
        initializeGnss();
    }
    }


    private void onAppOpChanged(String packageName) {
    private void onAppOpChanged(String packageName) {
@@ -602,16 +606,19 @@ public class LocationManagerService extends ILocationManager.Stub {
            }
            }
            manager.setMockProvider(new MockProvider(properties));
            manager.setMockProvider(new MockProvider(properties));
        }
        }
    }


        // initialize gnss last because it has no awareness of boot phases and blindly assumes that
    private void initializeGnss() {
        // all other location providers are loaded at initialization
        // Do not hold mLock when calling GnssManagerService#isGnssSupported() which calls into HAL.
        if (GnssManagerService.isGnssSupported()) {
        if (GnssManagerService.isGnssSupported()) {
            mGnssManagerService = new GnssManagerService(mContext, mAppOpsHelper, mSettingsHelper,
            mGnssManagerService = new GnssManagerService(mContext, mAppOpsHelper, mSettingsHelper,
                    mAppForegroundHelper, mLocationUsageLogger);
                    mAppForegroundHelper, mLocationUsageLogger);
            mGnssManagerService.onSystemReady();
            mGnssManagerService.onSystemReady();


            LocationProviderManager gnssManager = new LocationProviderManager(GPS_PROVIDER);
            LocationProviderManager gnssManager = new LocationProviderManager(GPS_PROVIDER);
            synchronized (mLock) {
                mProviderManagers.add(gnssManager);
                mProviderManagers.add(gnssManager);
            }
            gnssManager.setRealProvider(mGnssManagerService.getGnssLocationProvider());
            gnssManager.setRealProvider(mGnssManagerService.getGnssLocationProvider());


            // bind to geofence proxy
            // bind to geofence proxy