Update showCallScreen to use Telecomm (1/6)
- Add API methods to InCallService and ITelecommService. - Remove old methods from ITelephony. - Route the TelephonyManager methods through ITelecommService instead of ITelephony. - Update Lock screen to use TelephonyManager instead of ITelephony. Bug: 15008165 Change-Id: Ib674e2e48efaa1cc97d1513dc2c2b27fdb343657
This commit is contained in:
@@ -43,7 +43,6 @@ import android.view.View;
|
||||
import android.widget.Button;
|
||||
|
||||
import com.android.internal.R;
|
||||
import com.android.internal.telephony.ITelephony;
|
||||
import com.google.android.collect.Lists;
|
||||
|
||||
import java.security.MessageDigest;
|
||||
@@ -1360,19 +1359,11 @@ public class LockPatternUtils {
|
||||
/**
|
||||
* Resumes a call in progress. Typically launched from the EmergencyCall button
|
||||
* on various lockscreens.
|
||||
*
|
||||
* @return true if we were able to tell InCallScreen to show.
|
||||
*/
|
||||
public boolean resumeCall() {
|
||||
ITelephony phone = ITelephony.Stub.asInterface(ServiceManager.checkService("phone"));
|
||||
try {
|
||||
if (phone != null && phone.showCallScreen()) {
|
||||
return true;
|
||||
}
|
||||
} catch (RemoteException e) {
|
||||
// What can we do?
|
||||
}
|
||||
return false;
|
||||
public void resumeCall() {
|
||||
TelephonyManager telephonyManager =
|
||||
(TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
|
||||
telephonyManager.showCallScreen();
|
||||
}
|
||||
|
||||
private void finishBiometricWeak() {
|
||||
|
||||
@@ -42,6 +42,7 @@ public abstract class InCallService extends Service {
|
||||
private static final int MSG_SET_POST_DIAL = 4;
|
||||
private static final int MSG_SET_POST_DIAL_WAIT = 5;
|
||||
private static final int MSG_ON_AUDIO_STATE_CHANGED = 6;
|
||||
private static final int MSG_BRING_TO_FOREGROUND = 7;
|
||||
|
||||
/** Default Handler used to consolidate binder method calls onto a single thread. */
|
||||
private final Handler mHandler = new Handler(Looper.getMainLooper()) {
|
||||
@@ -83,6 +84,9 @@ public abstract class InCallService extends Service {
|
||||
case MSG_ON_AUDIO_STATE_CHANGED:
|
||||
onAudioStateChanged((CallAudioState) msg.obj);
|
||||
break;
|
||||
case MSG_BRING_TO_FOREGROUND:
|
||||
bringToForeground(msg.arg1 == 1);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -130,6 +134,12 @@ public abstract class InCallService extends Service {
|
||||
public void onAudioStateChanged(CallAudioState audioState) {
|
||||
mHandler.obtainMessage(MSG_ON_AUDIO_STATE_CHANGED, audioState).sendToTarget();
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public void bringToForeground(boolean showDialpad) {
|
||||
mHandler.obtainMessage(MSG_BRING_TO_FOREGROUND, showDialpad ? 1 : 0, 0).sendToTarget();
|
||||
}
|
||||
}
|
||||
|
||||
private final InCallServiceBinder mBinder;
|
||||
@@ -206,4 +216,11 @@ public abstract class InCallService extends Service {
|
||||
* @param audioState The new {@link CallAudioState}.
|
||||
*/
|
||||
protected abstract void onAudioStateChanged(CallAudioState audioState);
|
||||
|
||||
/**
|
||||
* Brings the in-call screen to the foreground.
|
||||
*
|
||||
* @param showDialpad If true, put up the dialpad when the screen is shown.
|
||||
*/
|
||||
protected abstract void bringToForeground(boolean showDialpad);
|
||||
}
|
||||
|
||||
@@ -40,4 +40,6 @@ oneway interface IInCallService {
|
||||
void setPostDialWait(String callId, String remaining);
|
||||
|
||||
void onAudioStateChanged(in CallAudioState audioState);
|
||||
|
||||
void bringToForeground(boolean showDialpad);
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ package com.android.internal.telecomm;
|
||||
* commands that were previously handled by ITelephony.
|
||||
* {@hide}
|
||||
*/
|
||||
oneway interface ITelecommService {
|
||||
interface ITelecommService {
|
||||
|
||||
/**
|
||||
* Silence the ringer if an incoming call is currently ringing.
|
||||
@@ -31,4 +31,11 @@ oneway interface ITelecommService {
|
||||
* even if there's no incoming call. (If so, this method will do nothing.)
|
||||
*/
|
||||
void silenceRinger();
|
||||
|
||||
/**
|
||||
* Brings the in-call screen to the foreground if there is an active call.
|
||||
*
|
||||
* @param showDialpad if true, make the dialpad visible initially.
|
||||
*/
|
||||
void showCallScreen(boolean showDialpad);
|
||||
}
|
||||
|
||||
@@ -1980,9 +1980,10 @@ public class TelephonyManager {
|
||||
@PrivateApi
|
||||
public boolean showCallScreen() {
|
||||
try {
|
||||
return getITelephony().showCallScreen();
|
||||
getTelecommService().showCallScreen(false);
|
||||
return true;
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "Error calling ITelephony#showCallScreen", e);
|
||||
Log.e(TAG, "Error calling ITelecommService#showCallScreen", e);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -1991,9 +1992,10 @@ public class TelephonyManager {
|
||||
@PrivateApi
|
||||
public boolean showCallScreenWithDialpad(boolean showDialpad) {
|
||||
try {
|
||||
return getITelephony().showCallScreenWithDialpad(showDialpad);
|
||||
getTelecommService().showCallScreen(showDialpad);
|
||||
return true;
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "Error calling ITelephony#showCallScreenWithDialpad", e);
|
||||
Log.e(TAG, "Error calling ITelecommService#showCallScreen(" + showDialpad + ")", e);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -48,28 +48,6 @@ interface ITelephony {
|
||||
*/
|
||||
void call(String callingPackage, String number);
|
||||
|
||||
/**
|
||||
* If there is currently a call in progress, show the call screen.
|
||||
* The DTMF dialpad may or may not be visible initially, depending on
|
||||
* whether it was up when the user last exited the InCallScreen.
|
||||
*
|
||||
* @return true if the call screen was shown.
|
||||
*/
|
||||
boolean showCallScreen();
|
||||
|
||||
/**
|
||||
* Variation of showCallScreen() that also specifies whether the
|
||||
* DTMF dialpad should be initially visible when the InCallScreen
|
||||
* comes up.
|
||||
*
|
||||
* @param showDialpad if true, make the dialpad visible initially,
|
||||
* otherwise hide the dialpad initially.
|
||||
* @return true if the call screen was shown.
|
||||
*
|
||||
* @see showCallScreen
|
||||
*/
|
||||
boolean showCallScreenWithDialpad(boolean showDialpad);
|
||||
|
||||
/**
|
||||
* End call if there is a call in progress, otherwise does nothing.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user