Skip to content

Commit 9a4f162

Browse files
Suresh KoletiSteve Kondik
authored andcommitted
IMS: Add support of notifyPreciseCallState for multi sim
Extend notifyPreciseCallState for multi SIM. Change-Id: I52adcd55462d6ceae5defacbbe2cb057f4484099 CRs-Fixed: 957251
1 parent 5a9abe4 commit 9a4f162

2 files changed

Lines changed: 43 additions & 3 deletions

File tree

services/core/java/com/android/server/TelephonyRegistry.java

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1248,7 +1248,41 @@ public void notifyPreciseCallState(int ringingCallState, int foregroundCallState
12481248
}
12491249
broadcastPreciseCallStateChanged(ringingCallState, foregroundCallState, backgroundCallState,
12501250
DisconnectCause.NOT_VALID,
1251-
PreciseDisconnectCause.NOT_VALID);
1251+
PreciseDisconnectCause.NOT_VALID, SubscriptionManager.INVALID_SUBSCRIPTION_ID);
1252+
}
1253+
1254+
public void notifyPreciseCallStateForSubscriber(int subId, int ringingCallState,
1255+
int foregroundCallState, int backgroundCallState) {
1256+
if (!checkNotifyPermission("notifyPreciseCallStateForSubscriber()")) {
1257+
return;
1258+
}
1259+
synchronized (mRecords) {
1260+
int phoneId = SubscriptionManager.getPhoneId(subId);
1261+
if (validatePhoneId(phoneId)) {
1262+
mRingingCallState = ringingCallState;
1263+
mForegroundCallState = foregroundCallState;
1264+
mBackgroundCallState = backgroundCallState;
1265+
mPreciseCallState = new PreciseCallState(ringingCallState, foregroundCallState,
1266+
backgroundCallState,
1267+
DisconnectCause.NOT_VALID,
1268+
PreciseDisconnectCause.NOT_VALID);
1269+
for (Record r : mRecords) {
1270+
if (r.matchPhoneStateListenerEvent(PhoneStateListener.LISTEN_PRECISE_CALL_STATE)
1271+
&& ((r.subId == subId) ||
1272+
(r.subId == SubscriptionManager.DEFAULT_SUBSCRIPTION_ID))) {
1273+
try {
1274+
r.callback.onPreciseCallStateChanged(mPreciseCallState);
1275+
} catch (RemoteException ex) {
1276+
mRemoveList.add(r.binder);
1277+
}
1278+
}
1279+
}
1280+
}
1281+
handleRemoveListLocked();
1282+
}
1283+
broadcastPreciseCallStateChanged(ringingCallState, foregroundCallState, backgroundCallState,
1284+
DisconnectCause.NOT_VALID,
1285+
PreciseDisconnectCause.NOT_VALID, subId);
12521286
}
12531287

12541288
public void notifyDisconnectCause(int disconnectCause, int preciseDisconnectCause) {
@@ -1270,7 +1304,8 @@ public void notifyDisconnectCause(int disconnectCause, int preciseDisconnectCaus
12701304
handleRemoveListLocked();
12711305
}
12721306
broadcastPreciseCallStateChanged(mRingingCallState, mForegroundCallState,
1273-
mBackgroundCallState, disconnectCause, preciseDisconnectCause);
1307+
mBackgroundCallState, disconnectCause, preciseDisconnectCause,
1308+
SubscriptionManager.INVALID_SUBSCRIPTION_ID);
12741309
}
12751310

12761311
public void notifyPreciseDataConnectionFailed(String reason, String apnType,
@@ -1510,13 +1545,16 @@ private void broadcastDataConnectionFailed(String reason, String apnType,
15101545
}
15111546

15121547
private void broadcastPreciseCallStateChanged(int ringingCallState, int foregroundCallState,
1513-
int backgroundCallState, int disconnectCause, int preciseDisconnectCause) {
1548+
int backgroundCallState, int disconnectCause, int preciseDisconnectCause, int subId) {
15141549
Intent intent = new Intent(TelephonyManager.ACTION_PRECISE_CALL_STATE_CHANGED);
15151550
intent.putExtra(TelephonyManager.EXTRA_RINGING_CALL_STATE, ringingCallState);
15161551
intent.putExtra(TelephonyManager.EXTRA_FOREGROUND_CALL_STATE, foregroundCallState);
15171552
intent.putExtra(TelephonyManager.EXTRA_BACKGROUND_CALL_STATE, backgroundCallState);
15181553
intent.putExtra(TelephonyManager.EXTRA_DISCONNECT_CAUSE, disconnectCause);
15191554
intent.putExtra(TelephonyManager.EXTRA_PRECISE_DISCONNECT_CAUSE, preciseDisconnectCause);
1555+
if (subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
1556+
intent.putExtra(PhoneConstants.SUBSCRIPTION_KEY, subId);
1557+
}
15201558
mContext.sendBroadcastAsUser(intent, UserHandle.ALL,
15211559
android.Manifest.permission.READ_PRECISE_PHONE_STATE);
15221560
}

telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ interface ITelephonyRegistry {
6161
void notifyCellInfo(in List<CellInfo> cellInfo);
6262
void notifyPreciseCallState(int ringingCallState, int foregroundCallState,
6363
int backgroundCallState);
64+
void notifyPreciseCallStateForSubscriber(int subId, int ringingCallState,
65+
int foregroundCallState, int backgroundCallState);
6466
void notifyDisconnectCause(int disconnectCause, int preciseDisconnectCause);
6567
void notifyPreciseDataConnectionFailed(String reason, String apnType, String apn,
6668
String failCause);

0 commit comments

Comments
 (0)