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:
Santos Cordon
2014-05-29 13:07:10 -07:00
parent eec8f0cbbb
commit 3534ede572
6 changed files with 37 additions and 40 deletions

View File

@@ -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() {

View File

@@ -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);
}

View File

@@ -40,4 +40,6 @@ oneway interface IInCallService {
void setPostDialWait(String callId, String remaining);
void onAudioStateChanged(in CallAudioState audioState);
void bringToForeground(boolean showDialpad);
}

View File

@@ -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);
}

View File

@@ -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;
}

View File

@@ -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.
*