Merge "Fix two location bugs" into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
9d1e7a6e8e
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user