Refactor sendMessage() to using Handler#post()
Bug: 124451539 Test: build and flash on device Change-Id: I312a72aa2c2004953c11e28ff5e1ec5ddb3701dc
This commit is contained in:
@@ -68,8 +68,6 @@ import android.os.AsyncTask;
|
||||
import android.os.BatteryStats;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.os.Message;
|
||||
import android.os.PersistableBundle;
|
||||
import android.os.PowerManager;
|
||||
import android.os.RemoteException;
|
||||
@@ -138,13 +136,6 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
|
||||
private static final int AGPS_SUPL_MODE_MSA = 0x02;
|
||||
private static final int AGPS_SUPL_MODE_MSB = 0x01;
|
||||
|
||||
// handler messages
|
||||
private static final int INJECT_NTP_TIME = 5;
|
||||
private static final int DOWNLOAD_PSDS_DATA = 6;
|
||||
private static final int REQUEST_LOCATION = 16;
|
||||
private static final int REPORT_LOCATION = 17; // HAL reports location
|
||||
private static final int REPORT_SV_STATUS = 18; // HAL reports SV status
|
||||
|
||||
// TCP/IP constants.
|
||||
// Valid TCP/UDP port range is (0, 65535].
|
||||
private static final int TCP_MIN_PORT = 0;
|
||||
@@ -402,7 +393,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
|
||||
BatteryStats.SERVICE_NAME));
|
||||
|
||||
// Construct internal handler
|
||||
mHandler = new ProviderHandler(FgThread.getHandler().getLooper());
|
||||
mHandler = FgThread.getHandler();
|
||||
|
||||
// Load GPS configuration and register listeners in the background:
|
||||
// some operations, such as opening files and registering broadcast receivers, can take a
|
||||
@@ -530,7 +521,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
|
||||
if (mSupportsPsds) {
|
||||
synchronized (mLock) {
|
||||
for (int psdsType : mPendingDownloadPsdsTypes) {
|
||||
sendMessage(DOWNLOAD_PSDS_DATA, psdsType, null);
|
||||
postWithWakeLockHeld(() -> handleDownloadPsdsData(psdsType));
|
||||
}
|
||||
mPendingDownloadPsdsTypes.clear();
|
||||
}
|
||||
@@ -654,9 +645,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
|
||||
synchronized (mLock) {
|
||||
backoffMillis = mPsdsBackOff.nextBackoffMillis();
|
||||
}
|
||||
mHandler.sendMessageDelayed(
|
||||
mHandler.obtainMessage(DOWNLOAD_PSDS_DATA, psdsType, 0, null),
|
||||
backoffMillis);
|
||||
mHandler.postDelayed(() -> handleDownloadPsdsData(psdsType), backoffMillis);
|
||||
}
|
||||
|
||||
// Release wake lock held by task, synchronize on mLock in case multiple
|
||||
@@ -976,8 +965,8 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
|
||||
requestUtcTime();
|
||||
} else if ("force_psds_injection".equals(command)) {
|
||||
if (mSupportsPsds) {
|
||||
sendMessage(DOWNLOAD_PSDS_DATA, GnssPsdsDownloader.LONG_TERM_PSDS_SERVER_INDEX,
|
||||
null);
|
||||
postWithWakeLockHeld(() -> handleDownloadPsdsData(
|
||||
GnssPsdsDownloader.LONG_TERM_PSDS_SERVER_INDEX));
|
||||
}
|
||||
} else if ("request_power_stats".equals(command)) {
|
||||
mGnssNative.requestPowerStats();
|
||||
@@ -1314,7 +1303,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
|
||||
|
||||
private void requestUtcTime() {
|
||||
if (DEBUG) Log.d(TAG, "utcTimeRequest");
|
||||
sendMessage(INJECT_NTP_TIME, 0, null);
|
||||
postWithWakeLockHeld(mNtpTimeHelper::retrieveAndInjectNtpTime);
|
||||
}
|
||||
|
||||
private void requestRefLocation() {
|
||||
@@ -1348,75 +1337,17 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
|
||||
}
|
||||
}
|
||||
|
||||
boolean isInEmergencySession() {
|
||||
return mNIHandler.getInEmergency();
|
||||
}
|
||||
|
||||
private void sendMessage(int message, int arg, Object obj) {
|
||||
private void postWithWakeLockHeld(Runnable runnable) {
|
||||
// hold a wake lock until this message is delivered
|
||||
// note that this assumes the message will not be removed from the queue before
|
||||
// it is handled (otherwise the wake lock would be leaked).
|
||||
mWakeLock.acquire(WAKELOCK_TIMEOUT_MILLIS);
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, "WakeLock acquired by sendMessage(" + messageIdAsString(message) + ", " + arg
|
||||
+ ", " + obj + ")");
|
||||
}
|
||||
mHandler.obtainMessage(message, arg, 1, obj).sendToTarget();
|
||||
}
|
||||
|
||||
private final class ProviderHandler extends Handler {
|
||||
ProviderHandler(Looper looper) {
|
||||
super(looper, null, true /*async*/);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleMessage(Message msg) {
|
||||
int message = msg.what;
|
||||
switch (message) {
|
||||
case INJECT_NTP_TIME:
|
||||
mNtpTimeHelper.retrieveAndInjectNtpTime();
|
||||
break;
|
||||
case REQUEST_LOCATION:
|
||||
handleRequestLocation(msg.arg1 == 1, (boolean) msg.obj);
|
||||
break;
|
||||
case DOWNLOAD_PSDS_DATA:
|
||||
handleDownloadPsdsData(msg.arg1);
|
||||
break;
|
||||
case REPORT_LOCATION:
|
||||
handleReportLocation(msg.arg1 == 1, (Location) msg.obj);
|
||||
break;
|
||||
case REPORT_SV_STATUS:
|
||||
handleReportSvStatus((GnssStatus) msg.obj);
|
||||
break;
|
||||
}
|
||||
if (msg.arg2 == 1) {
|
||||
// wakelock was taken for this message, release it
|
||||
mWakeLock.release();
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, "WakeLock released by handleMessage(" + messageIdAsString(message)
|
||||
+ ", " + msg.arg1 + ", " + msg.obj + ")");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return A string representing the given message ID.
|
||||
*/
|
||||
private String messageIdAsString(int message) {
|
||||
switch (message) {
|
||||
case INJECT_NTP_TIME:
|
||||
return "INJECT_NTP_TIME";
|
||||
case REQUEST_LOCATION:
|
||||
return "REQUEST_LOCATION";
|
||||
case DOWNLOAD_PSDS_DATA:
|
||||
return "DOWNLOAD_PSDS_DATA";
|
||||
case REPORT_LOCATION:
|
||||
return "REPORT_LOCATION";
|
||||
case REPORT_SV_STATUS:
|
||||
return "REPORT_SV_STATUS";
|
||||
default:
|
||||
return "<Unknown>";
|
||||
boolean success = mHandler.post(() -> {
|
||||
runnable.run();
|
||||
mWakeLock.release();
|
||||
});
|
||||
if (!success) {
|
||||
mWakeLock.release();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1476,7 +1407,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
|
||||
|
||||
@Override
|
||||
public void onReportLocation(boolean hasLatLong, Location location) {
|
||||
sendMessage(REPORT_LOCATION, hasLatLong ? 1 : 0, location);
|
||||
postWithWakeLockHeld(() -> handleReportLocation(hasLatLong, location));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1502,7 +1433,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
|
||||
|
||||
@Override
|
||||
public void onReportSvStatus(GnssStatus gnssStatus) {
|
||||
sendMessage(REPORT_SV_STATUS, 0, gnssStatus);
|
||||
postWithWakeLockHeld(() -> handleReportSvStatus(gnssStatus));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1512,7 +1443,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
|
||||
|
||||
@Override
|
||||
public void onRequestPsdsDownload(int psdsType) {
|
||||
sendMessage(DOWNLOAD_PSDS_DATA, psdsType, null);
|
||||
postWithWakeLockHeld(() -> handleDownloadPsdsData(psdsType));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1558,7 +1489,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
|
||||
+ ", isUserEmergency: "
|
||||
+ isUserEmergency);
|
||||
}
|
||||
sendMessage(REQUEST_LOCATION, independentFromGnss ? 1 : 0, isUserEmergency);
|
||||
postWithWakeLockHeld(() -> handleRequestLocation(independentFromGnss, isUserEmergency));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user