Commit 1a98ea7e authored by Benson Huang's avatar Benson Huang Committed by The Android Automerger
Browse files

[FM] Earphone mode incoming call ringtone issue in loudspeaker

Listen to FM -> switch to loudspeaker mode -> now go to music
player to listen to music with earphone connected, Music switches
to loudspeaker mode automatically even when the earphones are connected.

Bug 19729515
from: https://partner-android-review.googlesource.com/#/c/209191/



Change-Id: I17f84a6ceb63783ca7627eab2b8dd6bf59fe151b
Signed-off-by: default avatarBenson Huang <benson.huang@mediatek.com>
parent 71393a01
......@@ -1927,6 +1927,10 @@ public class FmService extends Service implements FmRecorder.OnRecorderStateChan
* @return true, success; false, fail;
*/
public boolean requestAudioFocus() {
if (FmUtils.getIsSpeakerModeOnFocusLost(mContext)) {
setForceUse(true);
FmUtils.setIsSpeakerModeOnFocusLost(mContext, false);
}
if (mIsAudioFocusHeld) {
return true;
}
......@@ -2034,6 +2038,7 @@ public class FmService extends Service implements FmRecorder.OnRecorderStateChan
}
}
handlePowerDown();
forceToHeadsetMode();
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
......@@ -2055,9 +2060,14 @@ public class FmService extends Service implements FmRecorder.OnRecorderStateChan
}
}
handlePowerDown();
forceToHeadsetMode();
break;
case AudioManager.AUDIOFOCUS_GAIN:
if (FmUtils.getIsSpeakerModeOnFocusLost(mContext)) {
setForceUse(true);
FmUtils.setIsSpeakerModeOnFocusLost(mContext, false);
}
if ((mPowerStatus != POWER_UP) && mPausedByTransientLossOfFocus) {
final int bundleSize = 1;
mFmServiceHandler.removeMessages(FmListener.MSGID_POWERUP_FINISHED);
......@@ -2078,6 +2088,14 @@ public class FmService extends Service implements FmRecorder.OnRecorderStateChan
}
}
private void forceToHeadsetMode() {
if (mIsSpeakerUsed && isHeadSetIn()) {
AudioSystem.setForceUse(FOR_PROPRIETARY, AudioSystem.FORCE_NONE);
// save user's option to shared preferences.
FmUtils.setIsSpeakerModeOnFocusLost(mContext, true);
}
}
/**
* FM Radio listener record
*/
......
......@@ -61,6 +61,7 @@ public class FmUtils {
private static final String FM_LOCATION_LATITUDE = "fm_location_latitude";
private static final String FM_LOCATION_LONGITUDE = "fm_location_longitude";
private static final String FM_IS_FIRST_TIME_PLAY = "fm_is_first_time_play";
private static final String FM_IS_SPEAKER_MODE = "fm_is_speaker_mode";
private static final String FM_IS_FIRST_ENTER_STATION_LIST = "fm_is_first_enter_station_list";
// StorageManager For FM record
private static StorageManager sStorageManager = null;
......@@ -298,4 +299,27 @@ public class FmUtils {
iconLayout.destroyDrawingCache();
return largeIcon;
}
/**
* Get whether speaker mode is in use when audio focus lost.
* @param context the Context
* @return true for speaker mode, false for non speaker mode
*/
public static boolean getIsSpeakerModeOnFocusLost(Context context) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
return prefs.getBoolean(FM_IS_SPEAKER_MODE, false);
}
/**
* Set whether speaker mode is in use.
* @param context the Context
* @param isSpeaker speaker state
*/
public static void setIsSpeakerModeOnFocusLost(Context context, boolean isSpeaker) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean(FM_IS_SPEAKER_MODE, isSpeaker);
editor.commit();
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment