Loading src/com/android/server/telecom/CallLogManager.java +17 −5 Original line number Diff line number Diff line Loading @@ -69,12 +69,13 @@ public final class CallLogManager extends CallsManagerListenerBase { * @param creationDate Time when the call was created (milliseconds since epoch). * @param durationInMillis Duration of the call (milliseconds). * @param dataUsage Data usage in bytes, or null if not applicable. * @param isRead Indicates if the entry has been read or not. * @param logCallCompletedListener optional callback called after the call is logged. */ public AddCallArgs(Context context, CallerInfo callerInfo, String number, String postDialDigits, String viaNumber, int presentation, int callType, int features, PhoneAccountHandle accountHandle, long creationDate, long durationInMillis, Long dataUsage, UserHandle initiatingUser, long durationInMillis, Long dataUsage, UserHandle initiatingUser, boolean isRead, @Nullable LogCallCompletedListener logCallCompletedListener) { this.context = context; this.callerInfo = callerInfo; Loading @@ -89,6 +90,7 @@ public final class CallLogManager extends CallsManagerListenerBase { this.durationInSec = (int)(durationInMillis / 1000); this.dataUsage = dataUsage; this.initiatingUser = initiatingUser; this.isRead = isRead; this.logCallCompletedListener = logCallCompletedListener; } // Since the members are accessed directly, we don't use the Loading @@ -106,6 +108,7 @@ public final class CallLogManager extends CallsManagerListenerBase { public final int durationInSec; public final Long dataUsage; public final UserHandle initiatingUser; public final boolean isRead; @Nullable public final LogCallCompletedListener logCallCompletedListener; Loading Loading @@ -235,7 +238,7 @@ public final class CallLogManager extends CallsManagerListenerBase { logCall(call.getCallerInfo(), logNumber, call.getPostDialDigits(), formattedViaNumber, call.getHandlePresentation(), callLogType, callFeatures, accountHandle, creationTime, age, callDataUsage, call.isEmergencyCall(), call.getInitiatingUser(), logCallCompletedListener); call.isSelfManaged(), logCallCompletedListener); } /** Loading @@ -253,6 +256,8 @@ public final class CallLogManager extends CallsManagerListenerBase { * @param dataUsage The data usage for the call, null if not applicable. * @param isEmergency {@code true} if this is an emergency call, {@code false} otherwise. * @param logCallCompletedListener optional callback called after the call is logged. * @param initiatingUser The user the call was initiated under. * @param isSelfManaged {@code true} if this is a self-managed call, {@code false} otherwise. */ private void logCall( CallerInfo callerInfo, Loading @@ -268,6 +273,7 @@ public final class CallLogManager extends CallsManagerListenerBase { Long dataUsage, boolean isEmergency, UserHandle initiatingUser, boolean isSelfManaged, @Nullable LogCallCompletedListener logCallCompletedListener) { // On some devices, to avoid accidental redialing of emergency numbers, we *never* log Loading @@ -292,9 +298,15 @@ public final class CallLogManager extends CallsManagerListenerBase { Log.d(TAG, "Logging Call log entry: " + callerInfo + ", " + Log.pii(number) + "," + presentation + ", " + callType + ", " + start + ", " + duration); boolean isRead = false; if (isSelfManaged) { // Mark self-managed calls are read since they're being handled by their own app. // Their inclusion in the call log is informational only. isRead = true; } AddCallArgs args = new AddCallArgs(mContext, callerInfo, number, postDialDigits, viaNumber, presentation, callType, features, accountHandle, start, duration, dataUsage, initiatingUser, logCallCompletedListener); dataUsage, initiatingUser, isRead, logCallCompletedListener); logCallAsync(args); } else { Log.d(TAG, "Not adding emergency call to call log."); Loading Loading @@ -440,7 +452,7 @@ public final class CallLogManager extends CallsManagerListenerBase { return Calls.addCall(c.callerInfo, c.context, c.number, c.postDialDigits, c.viaNumber, c.presentation, c.callType, c.features, c.accountHandle, c.timestamp, c.durationInSec, c.dataUsage, userToBeInserted == null, userToBeInserted); userToBeInserted, c.isRead); } Loading testapps/res/layout/self_managed_call_list_item.xml +5 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,11 @@ android:layout_height="wrap_content" android:text="Hold" android:id="@+id/setHeldButton" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Missed" android:id="@+id/missedButton" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" Loading testapps/src/com/android/server/telecom/testapps/SelfManagedCallListAdapter.java +19 −3 Original line number Diff line number Diff line Loading @@ -60,8 +60,18 @@ public class SelfManagedCallListAdapter extends BaseAdapter { }; /** * Listener used to handle tap of the "held" button for a connection. * Listener used to handle tap of the "missed" button for a connection. */ private View.OnClickListener mMissedListener = new View.OnClickListener() { @Override public void onClick(View v) { View parent = (View) v.getParent().getParent(); SelfManagedConnection connection = (SelfManagedConnection) parent.getTag(); connection.setConnectionDisconnected(DisconnectCause.MISSED); SelfManagedCallList.getInstance().removeConnection(connection); } }; private View.OnClickListener mHeldListener = new View.OnClickListener() { @Override public void onClick(View v) { Loading Loading @@ -165,7 +175,7 @@ public class SelfManagedCallListAdapter extends BaseAdapter { } setInfoForRow(result, phoneAccountHandle.getId(), connection.getAddress().toString(), android.telecom.Connection.stateToString(connection.getState()), audioRoute, callType); callType, connection.getState() == android.telecom.Connection.STATE_RINGING); result.setTag(connection); return result; } Loading @@ -177,7 +187,8 @@ public class SelfManagedCallListAdapter extends BaseAdapter { } private void setInfoForRow(View view, String accountName, String number, String status, String audioRoute, String callType) { String status, String audioRoute, String callType, boolean isRinging) { TextView numberTextView = (TextView) view.findViewById(R.id.phoneNumber); TextView statusTextView = (TextView) view.findViewById(R.id.callState); Loading @@ -191,6 +202,11 @@ public class SelfManagedCallListAdapter extends BaseAdapter { speakerButton.setOnClickListener(mSpeakerListener); View earpieceButton = view.findViewById(R.id.earpieceButton); earpieceButton.setOnClickListener(mEarpieceListener); View missedButton = view.findViewById(R.id.missedButton); missedButton.setOnClickListener(mMissedListener); missedButton.setVisibility(isRinging ? View.VISIBLE : View.GONE); setHeldButton.setVisibility(!isRinging ? View.VISIBLE : View.GONE); disconnectButton.setVisibility(!isRinging ? View.VISIBLE : View.GONE); numberTextView.setText(accountName + " - " + number + " (" + audioRoute + ")"); statusTextView.setText(callType + " - Status: " + status); } Loading testapps/src/com/android/server/telecom/testapps/SelfManagedConnection.java +3 −0 Original line number Diff line number Diff line Loading @@ -183,6 +183,9 @@ public class SelfManagedConnection extends Connection { } public void setConnectionDisconnected(int cause) { NotificationManager notificationManager = mContext.getSystemService( NotificationManager.class); notificationManager.cancel(CALL_NOTIFICATION, mCallId); mMediaPlayer.stop(); setDisconnected(new DisconnectCause(cause)); destroy(); Loading testapps/src/com/android/server/telecom/testapps/SelfManagedConnectionService.java +1 −0 Original line number Diff line number Diff line Loading @@ -79,6 +79,7 @@ public class SelfManagedConnectionService extends ConnectionService { connection.setExtras(request.getExtras()); if (isIncoming) { connection.setIsIncomingCallUiShowing(request.shouldShowIncomingCallUi()); connection.setRinging(); } Bundle requestExtras = request.getExtras(); if (requestExtras != null) { Loading Loading
src/com/android/server/telecom/CallLogManager.java +17 −5 Original line number Diff line number Diff line Loading @@ -69,12 +69,13 @@ public final class CallLogManager extends CallsManagerListenerBase { * @param creationDate Time when the call was created (milliseconds since epoch). * @param durationInMillis Duration of the call (milliseconds). * @param dataUsage Data usage in bytes, or null if not applicable. * @param isRead Indicates if the entry has been read or not. * @param logCallCompletedListener optional callback called after the call is logged. */ public AddCallArgs(Context context, CallerInfo callerInfo, String number, String postDialDigits, String viaNumber, int presentation, int callType, int features, PhoneAccountHandle accountHandle, long creationDate, long durationInMillis, Long dataUsage, UserHandle initiatingUser, long durationInMillis, Long dataUsage, UserHandle initiatingUser, boolean isRead, @Nullable LogCallCompletedListener logCallCompletedListener) { this.context = context; this.callerInfo = callerInfo; Loading @@ -89,6 +90,7 @@ public final class CallLogManager extends CallsManagerListenerBase { this.durationInSec = (int)(durationInMillis / 1000); this.dataUsage = dataUsage; this.initiatingUser = initiatingUser; this.isRead = isRead; this.logCallCompletedListener = logCallCompletedListener; } // Since the members are accessed directly, we don't use the Loading @@ -106,6 +108,7 @@ public final class CallLogManager extends CallsManagerListenerBase { public final int durationInSec; public final Long dataUsage; public final UserHandle initiatingUser; public final boolean isRead; @Nullable public final LogCallCompletedListener logCallCompletedListener; Loading Loading @@ -235,7 +238,7 @@ public final class CallLogManager extends CallsManagerListenerBase { logCall(call.getCallerInfo(), logNumber, call.getPostDialDigits(), formattedViaNumber, call.getHandlePresentation(), callLogType, callFeatures, accountHandle, creationTime, age, callDataUsage, call.isEmergencyCall(), call.getInitiatingUser(), logCallCompletedListener); call.isSelfManaged(), logCallCompletedListener); } /** Loading @@ -253,6 +256,8 @@ public final class CallLogManager extends CallsManagerListenerBase { * @param dataUsage The data usage for the call, null if not applicable. * @param isEmergency {@code true} if this is an emergency call, {@code false} otherwise. * @param logCallCompletedListener optional callback called after the call is logged. * @param initiatingUser The user the call was initiated under. * @param isSelfManaged {@code true} if this is a self-managed call, {@code false} otherwise. */ private void logCall( CallerInfo callerInfo, Loading @@ -268,6 +273,7 @@ public final class CallLogManager extends CallsManagerListenerBase { Long dataUsage, boolean isEmergency, UserHandle initiatingUser, boolean isSelfManaged, @Nullable LogCallCompletedListener logCallCompletedListener) { // On some devices, to avoid accidental redialing of emergency numbers, we *never* log Loading @@ -292,9 +298,15 @@ public final class CallLogManager extends CallsManagerListenerBase { Log.d(TAG, "Logging Call log entry: " + callerInfo + ", " + Log.pii(number) + "," + presentation + ", " + callType + ", " + start + ", " + duration); boolean isRead = false; if (isSelfManaged) { // Mark self-managed calls are read since they're being handled by their own app. // Their inclusion in the call log is informational only. isRead = true; } AddCallArgs args = new AddCallArgs(mContext, callerInfo, number, postDialDigits, viaNumber, presentation, callType, features, accountHandle, start, duration, dataUsage, initiatingUser, logCallCompletedListener); dataUsage, initiatingUser, isRead, logCallCompletedListener); logCallAsync(args); } else { Log.d(TAG, "Not adding emergency call to call log."); Loading Loading @@ -440,7 +452,7 @@ public final class CallLogManager extends CallsManagerListenerBase { return Calls.addCall(c.callerInfo, c.context, c.number, c.postDialDigits, c.viaNumber, c.presentation, c.callType, c.features, c.accountHandle, c.timestamp, c.durationInSec, c.dataUsage, userToBeInserted == null, userToBeInserted); userToBeInserted, c.isRead); } Loading
testapps/res/layout/self_managed_call_list_item.xml +5 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,11 @@ android:layout_height="wrap_content" android:text="Hold" android:id="@+id/setHeldButton" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Missed" android:id="@+id/missedButton" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" Loading
testapps/src/com/android/server/telecom/testapps/SelfManagedCallListAdapter.java +19 −3 Original line number Diff line number Diff line Loading @@ -60,8 +60,18 @@ public class SelfManagedCallListAdapter extends BaseAdapter { }; /** * Listener used to handle tap of the "held" button for a connection. * Listener used to handle tap of the "missed" button for a connection. */ private View.OnClickListener mMissedListener = new View.OnClickListener() { @Override public void onClick(View v) { View parent = (View) v.getParent().getParent(); SelfManagedConnection connection = (SelfManagedConnection) parent.getTag(); connection.setConnectionDisconnected(DisconnectCause.MISSED); SelfManagedCallList.getInstance().removeConnection(connection); } }; private View.OnClickListener mHeldListener = new View.OnClickListener() { @Override public void onClick(View v) { Loading Loading @@ -165,7 +175,7 @@ public class SelfManagedCallListAdapter extends BaseAdapter { } setInfoForRow(result, phoneAccountHandle.getId(), connection.getAddress().toString(), android.telecom.Connection.stateToString(connection.getState()), audioRoute, callType); callType, connection.getState() == android.telecom.Connection.STATE_RINGING); result.setTag(connection); return result; } Loading @@ -177,7 +187,8 @@ public class SelfManagedCallListAdapter extends BaseAdapter { } private void setInfoForRow(View view, String accountName, String number, String status, String audioRoute, String callType) { String status, String audioRoute, String callType, boolean isRinging) { TextView numberTextView = (TextView) view.findViewById(R.id.phoneNumber); TextView statusTextView = (TextView) view.findViewById(R.id.callState); Loading @@ -191,6 +202,11 @@ public class SelfManagedCallListAdapter extends BaseAdapter { speakerButton.setOnClickListener(mSpeakerListener); View earpieceButton = view.findViewById(R.id.earpieceButton); earpieceButton.setOnClickListener(mEarpieceListener); View missedButton = view.findViewById(R.id.missedButton); missedButton.setOnClickListener(mMissedListener); missedButton.setVisibility(isRinging ? View.VISIBLE : View.GONE); setHeldButton.setVisibility(!isRinging ? View.VISIBLE : View.GONE); disconnectButton.setVisibility(!isRinging ? View.VISIBLE : View.GONE); numberTextView.setText(accountName + " - " + number + " (" + audioRoute + ")"); statusTextView.setText(callType + " - Status: " + status); } Loading
testapps/src/com/android/server/telecom/testapps/SelfManagedConnection.java +3 −0 Original line number Diff line number Diff line Loading @@ -183,6 +183,9 @@ public class SelfManagedConnection extends Connection { } public void setConnectionDisconnected(int cause) { NotificationManager notificationManager = mContext.getSystemService( NotificationManager.class); notificationManager.cancel(CALL_NOTIFICATION, mCallId); mMediaPlayer.stop(); setDisconnected(new DisconnectCause(cause)); destroy(); Loading
testapps/src/com/android/server/telecom/testapps/SelfManagedConnectionService.java +1 −0 Original line number Diff line number Diff line Loading @@ -79,6 +79,7 @@ public class SelfManagedConnectionService extends ConnectionService { connection.setExtras(request.getExtras()); if (isIncoming) { connection.setIsIncomingCallUiShowing(request.shouldShowIncomingCallUi()); connection.setRinging(); } Bundle requestExtras = request.getExtras(); if (requestExtras != null) { Loading