Fix NPE when re-registerNetworkCallbacks

If handleInitialize() has not finished yet, mNetworkConnectivityCallback
would be null.

Bug: 277853506
Test: manual
Change-Id: I7d51429c614b0046c62a84ed274031d722e2fef0
This commit is contained in:
Yu-Han Yang
2023-04-12 17:25:23 +00:00
parent 5f614202f9
commit 609cc387bb
2 changed files with 14 additions and 2 deletions

View File

@@ -271,6 +271,10 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
private long mStartedChangedElapsedRealtime;
private int mFixInterval = 1000;
// True if handleInitialize() has finished;
@GuardedBy("mLock")
private boolean mInitialized;
private ProviderRequest mProviderRequest;
private int mPositionMode;
@@ -569,6 +573,9 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
}
updateEnabled();
synchronized (mLock) {
mInitialized = true;
}
}
private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
@@ -1714,8 +1721,12 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
}
// Re-register network callbacks to get an update of available networks right away.
mNetworkConnectivityHandler.unregisterNetworkCallbacks();
mNetworkConnectivityHandler.registerNetworkCallbacks();
synchronized (mLock) {
if (mInitialized) {
mNetworkConnectivityHandler.unregisterNetworkCallbacks();
mNetworkConnectivityHandler.registerNetworkCallbacks();
}
}
}
@Override

View File

@@ -303,6 +303,7 @@ class GnssNetworkConnectivityHandler {
void unregisterNetworkCallbacks() {
mConnMgr.unregisterNetworkCallback(mNetworkConnectivityCallback);
mNetworkConnectivityCallback = null;
}
/**