/** * Change the audio route, for example from earpiece to speakerphone. * * @param route The new audio route to use. See {@link CallAudioState}. */ void setAudioRoute(int route) { Log.v(TAG, "setAudioRoute, route: " + CallAudioState.audioRouteToString(route)); // Change ROUTE_WIRED_OR_EARPIECE to a single entry. int newRoute = selectWiredOrEarpiece(route, mCallAudioState.getSupportedRouteMask()); // If route is unsupported, do nothing. if ((mCallAudioState.getSupportedRouteMask() | newRoute) == 0) { Log.w(TAG, "Asking to set to a route that is unsupported: " + newRoute); return; } if (mCallAudioState.getRoute() != newRoute) { // Remember the new speaker state so it can be restored when the user plugs and unplugs // a headset. mWasSpeakerOn = newRoute == CallAudioState.ROUTE_SPEAKER; setSystemAudioState(new CallAudioState(false /* muted */, newRoute, mCallAudioState.getSupportedRouteMask())); } }
@Override public void onWiredHeadsetPluggedInChanged(boolean oldIsPluggedIn, boolean newIsPluggedIn) { Log.i(TAG, "wired headset was plugged in changed: " + oldIsPluggedIn + " -> "+ newIsPluggedIn); if (oldIsPluggedIn == newIsPluggedIn) { return; } int newRoute = mCallAudioState.getRoute(); // start out with existing route if (newIsPluggedIn) { newRoute = CallAudioState.ROUTE_WIRED_HEADSET; } else { if (mWasSpeakerOn) { newRoute = CallAudioState.ROUTE_SPEAKER; } else { newRoute = CallAudioState.ROUTE_EARPIECE; } } mVoicemailPlaybackPresenter.setSpeakerphoneOn(newRoute == CallAudioState.ROUTE_SPEAKER); // We need to call this every time even if we do not change the route because the supported // routes changed either to include or not include WIRED_HEADSET. setSystemAudioState( new CallAudioState(false /* muted */, newRoute, calculateSupportedRoutes())); }
private void setSystemAudioState(CallAudioState callAudioState) { CallAudioState oldAudioState = mCallAudioState; mCallAudioState = callAudioState; Log.i(TAG, "setSystemAudioState: changing from " + oldAudioState + " to " + mCallAudioState); // Audio route. if (mCallAudioState.getRoute() == CallAudioState.ROUTE_SPEAKER) { turnOnSpeaker(true); } else if (mCallAudioState.getRoute() == CallAudioState.ROUTE_EARPIECE || mCallAudioState.getRoute() == CallAudioState.ROUTE_WIRED_HEADSET) { // Just handle turning off the speaker, the system will handle switching between wired // headset and earpiece. turnOnSpeaker(false); } }
private CallAudioState getInitialAudioState() { int supportedRouteMask = calculateSupportedRoutes(); int route = selectWiredOrEarpiece(CallAudioState.ROUTE_WIRED_OR_EARPIECE, supportedRouteMask); return new CallAudioState(false /* muted */, route, supportedRouteMask); }