Merge "Throw on revoked location permission - telephony"
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index add90ff..dbfb317 100755
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -1928,9 +1928,11 @@
@Override
@SuppressWarnings("unchecked")
- public List<NeighboringCellInfo> getNeighboringCellInfo(String callingPackage) {
- mPhone.getContext().getSystemService(AppOpsManager.class)
- .checkPackage(Binder.getCallingUid(), callingPackage);
+ public List<NeighboringCellInfo>
+ getNeighboringCellInfo(String callingPackage, int targetSdk) {
+ // FIXME: use the P constant when available
+ if (targetSdk > android.os.Build.VERSION_CODES.O_MR1 + 1) return null;
+
if (!LocationAccessPolicy.canAccessCellLocation(mPhone.getContext(),
callingPackage, Binder.getCallingUid(), Binder.getCallingPid(), true)) {
return null;
diff --git a/src/com/android/services/telephony/CdmaConnection.java b/src/com/android/services/telephony/CdmaConnection.java
index 4c869a9..19c750b 100644
--- a/src/com/android/services/telephony/CdmaConnection.java
+++ b/src/com/android/services/telephony/CdmaConnection.java
@@ -40,6 +40,7 @@
private static final int MSG_CALL_WAITING_MISSED = 1;
private static final int MSG_DTMF_SEND_CONFIRMATION = 2;
+ private static final int MSG_CDMA_LINE_CONTROL_INFO_REC = 3;
private static final int TIMEOUT_CALL_WAITING_MILLIS = 20 * 1000;
private final Handler mHandler = new Handler() {
@@ -54,6 +55,9 @@
case MSG_DTMF_SEND_CONFIRMATION:
handleBurstDtmfConfirmation();
break;
+ case MSG_CDMA_LINE_CONTROL_INFO_REC:
+ handleCdmaConnectionTimeReset();
+ break;
default:
break;
}
@@ -72,6 +76,7 @@
// Indicates that the DTMF confirmation from telephony is pending.
private boolean mDtmfBurstConfirmationPending = false;
private boolean mIsCallWaiting;
+ private boolean mIsConnectionTimeReset = false;
CdmaConnection(
Connection connection,
@@ -299,4 +304,33 @@
mAllowMute = true;
super.handleExitedEcmMode();
}
+
+ private void handleCdmaConnectionTimeReset() {
+ boolean isImsCall = getOriginalConnection() instanceof ImsPhoneConnection;
+ if (!isImsCall && !mIsConnectionTimeReset && mIsOutgoing
+ && getOriginalConnection() != null
+ && getOriginalConnection().getState() == Call.State.ACTIVE
+ && getOriginalConnection().getDurationMillis() > 0) {
+ mIsConnectionTimeReset = true;
+ getOriginalConnection().resetConnectionTime();
+ resetConnectionTime();
+ }
+ }
+
+ @Override
+ void setOriginalConnection(com.android.internal.telephony.Connection originalConnection) {
+ super.setOriginalConnection(originalConnection);
+ if (getPhone() != null) {
+ getPhone().registerForLineControlInfo(mHandler, MSG_CDMA_LINE_CONTROL_INFO_REC, null);
+ }
+ }
+
+ @Override
+ protected void close() {
+ mIsConnectionTimeReset = false;
+ if (getPhone() != null) {
+ getPhone().unregisterForLineControlInfo(mHandler);
+ }
+ super.close();
+ }
}
diff --git a/src/com/android/services/telephony/TelephonyConnection.java b/src/com/android/services/telephony/TelephonyConnection.java
index ed5ef55..2b445dc 100644
--- a/src/com/android/services/telephony/TelephonyConnection.java
+++ b/src/com/android/services/telephony/TelephonyConnection.java
@@ -1666,7 +1666,7 @@
setActive();
}
- private void close() {
+ protected void close() {
Log.v(this, "close");
clearOriginalConnection();
destroy();