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

Commit 4eb34add authored by Wei Wang's avatar Wei Wang Committed by android-build-merger
Browse files

Merge "Merge "Fix Wakelock underlock in GnssLocationProvider." into oc-dev am:...

Merge "Merge "Fix Wakelock underlock in GnssLocationProvider." into oc-dev am: 34ab1f6a" into oc-dev-plus-aosp
am: 444724c8

Change-Id: I6ed4d7216604c8bf71d31a9bcff826b2d05a0d16
parents b587692d 444724c8
Loading
Loading
Loading
Loading
+18 −7
Original line number Diff line number Diff line
@@ -384,6 +384,8 @@ public class GnssLocationProvider implements LocationProviderInterface {
    // Wakelocks
    private final static String WAKELOCK_KEY = "GnssLocationProvider";
    private final PowerManager.WakeLock mWakeLock;
    private static final String DOWNLOAD_EXTRA_WAKELOCK_KEY = "GnssLocationProviderXtraDownload";
    private final PowerManager.WakeLock mDownloadXtraWakeLock;

    // Alarms
    private final static String ALARM_WAKEUP = "com.android.internal.location.ALARM_WAKEUP";
@@ -691,6 +693,11 @@ public class GnssLocationProvider implements LocationProviderInterface {
        mWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, WAKELOCK_KEY);
        mWakeLock.setReferenceCounted(true);

        // Create a separate wake lock for xtra downloader as it may be released due to timeout.
        mDownloadXtraWakeLock = mPowerManager.newWakeLock(
                PowerManager.PARTIAL_WAKE_LOCK, DOWNLOAD_EXTRA_WAKELOCK_KEY);
        mDownloadXtraWakeLock.setReferenceCounted(true);

        mAlarmManager = (AlarmManager)mContext.getSystemService(Context.ALARM_SERVICE);
        mWakeupIntent = PendingIntent.getBroadcast(mContext, 0, new Intent(ALARM_WAKEUP), 0);
        mTimeoutIntent = PendingIntent.getBroadcast(mContext, 0, new Intent(ALARM_TIMEOUT), 0);
@@ -995,7 +1002,7 @@ public class GnssLocationProvider implements LocationProviderInterface {
        mDownloadXtraDataPending = STATE_DOWNLOADING;

        // hold wake lock while task runs
        mWakeLock.acquire(DOWNLOAD_XTRA_DATA_TIMEOUT_MS);
        mDownloadXtraWakeLock.acquire(DOWNLOAD_XTRA_DATA_TIMEOUT_MS);
        Log.i(TAG, "WakeLock acquired by handleDownloadXtraData()");
        AsyncTask.THREAD_POOL_EXECUTOR.execute(new Runnable() {
            @Override
@@ -1017,13 +1024,17 @@ public class GnssLocationProvider implements LocationProviderInterface {
                            mXtraBackOff.nextBackoffMillis());
                }

                // release wake lock held by task
                if (mWakeLock.isHeld()) {
                    mWakeLock.release();
                // Release wake lock held by task, synchronize on mLock in case multiple
                // download tasks overrun.
                synchronized (mLock) {
                    if (mDownloadXtraWakeLock.isHeld()) {
                        mDownloadXtraWakeLock.release();
                        if (DEBUG) Log.d(TAG, "WakeLock released by handleDownloadXtraData()");
                    } else {
                    Log.e(TAG, "WakeLock expired before release in handleDownloadXtraData()");
                        Log.e(TAG, "WakeLock expired before release in "
                                + "handleDownloadXtraData()");
                    }
                }
                Log.i(TAG, "WakeLock released by handleDownloadXtraData()");
            }
        });
    }