Merge "Fix two location bugs" into sc-dev

This commit is contained in:
TreeHugger Robot
2021-06-02 18:10:09 +00:00
committed by Android (Google) Code Review
2 changed files with 28 additions and 18 deletions

View File

@@ -35,17 +35,17 @@ public class SystemEmergencyHelper extends EmergencyHelper {
private final Context mContext; private final Context mContext;
private TelephonyManager mTelephonyManager; TelephonyManager mTelephonyManager;
private boolean mIsInEmergencyCall; boolean mIsInEmergencyCall;
private long mEmergencyCallEndRealtimeMs = Long.MIN_VALUE; long mEmergencyCallEndRealtimeMs = Long.MIN_VALUE;
public SystemEmergencyHelper(Context context) { public SystemEmergencyHelper(Context context) {
mContext = context; mContext = context;
} }
/** Called when system is ready. */ /** Called when system is ready. */
public void onSystemReady() { public synchronized void onSystemReady() {
if (mTelephonyManager != null) { if (mTelephonyManager != null) {
return; return;
} }
@@ -64,14 +64,20 @@ public class SystemEmergencyHelper extends EmergencyHelper {
return; return;
} }
mIsInEmergencyCall = mTelephonyManager.isEmergencyNumber( synchronized (SystemEmergencyHelper.this) {
intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER)); mIsInEmergencyCall = mTelephonyManager.isEmergencyNumber(
intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER));
}
} }
}, new IntentFilter(Intent.ACTION_NEW_OUTGOING_CALL)); }, new IntentFilter(Intent.ACTION_NEW_OUTGOING_CALL));
} }
@Override @Override
public boolean isInEmergency(long extensionTimeMs) { public synchronized boolean isInEmergency(long extensionTimeMs) {
if (mTelephonyManager == null) {
return false;
}
boolean isInExtensionTime = mEmergencyCallEndRealtimeMs != Long.MIN_VALUE boolean isInExtensionTime = mEmergencyCallEndRealtimeMs != Long.MIN_VALUE
&& (SystemClock.elapsedRealtime() - mEmergencyCallEndRealtimeMs) < extensionTimeMs; && (SystemClock.elapsedRealtime() - mEmergencyCallEndRealtimeMs) < extensionTimeMs;
@@ -84,12 +90,16 @@ public class SystemEmergencyHelper extends EmergencyHelper {
private class EmergencyCallTelephonyCallback extends TelephonyCallback implements private class EmergencyCallTelephonyCallback extends TelephonyCallback implements
TelephonyCallback.CallStateListener{ TelephonyCallback.CallStateListener{
EmergencyCallTelephonyCallback() {}
@Override @Override
public void onCallStateChanged(int state) { public void onCallStateChanged(int state) {
if (state == TelephonyManager.CALL_STATE_IDLE) { if (state == TelephonyManager.CALL_STATE_IDLE) {
if (mIsInEmergencyCall) { synchronized (SystemEmergencyHelper.this) {
mEmergencyCallEndRealtimeMs = SystemClock.elapsedRealtime(); if (mIsInEmergencyCall) {
mIsInEmergencyCall = false; mEmergencyCallEndRealtimeMs = SystemClock.elapsedRealtime();
mIsInEmergencyCall = false;
}
} }
} }
} }

View File

@@ -1527,16 +1527,16 @@ public class LocationProviderManager extends
throw new IllegalArgumentException(mName + " provider is not a test provider"); throw new IllegalArgumentException(mName + " provider is not a test provider");
} }
String locationProvider = location.getProvider();
if (!TextUtils.isEmpty(locationProvider) && !mName.equals(locationProvider)) {
// The location has an explicit provider that is different from the mock
// provider name. The caller may be trying to fool us via b/33091107.
EventLog.writeEvent(0x534e4554, "33091107", Binder.getCallingUid(),
mName + "!=" + locationProvider);
}
final long identity = Binder.clearCallingIdentity(); final long identity = Binder.clearCallingIdentity();
try { try {
String locationProvider = location.getProvider();
if (!TextUtils.isEmpty(locationProvider) && !mName.equals(locationProvider)) {
// The location has an explicit provider that is different from the mock
// provider name. The caller may be trying to fool us via b/33091107.
EventLog.writeEvent(0x534e4554, "33091107", Binder.getCallingUid(),
mName + "!=" + locationProvider);
}
mProvider.setMockProviderLocation(location); mProvider.setMockProviderLocation(location);
} finally { } finally {
Binder.restoreCallingIdentity(identity); Binder.restoreCallingIdentity(identity);