Revert "fmapp2: remove audio mute & headphone/speaker toggle"
This reverts commit 0f3b06671e23bd5bde7f496fd18351ab75521017.
With backported changes to hardware/qcom/audio this functionality is
working again.
Change-Id: If3d79eefafeb79256108fd1ed84a60c85140322c
diff --git a/fmapp2/res/layout/action_bar.xml b/fmapp2/res/layout/action_bar.xml
index f22cf95..75c8628 100644
--- a/fmapp2/res/layout/action_bar.xml
+++ b/fmapp2/res/layout/action_bar.xml
@@ -23,4 +23,26 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
+ <Space
+ android:layout_width="0dp"
+ android:layout_height="match_parent"
+ android:layout_weight="1"/>
+
+ <ImageView android:id="@+id/btn_silent"
+ android:src="@drawable/ic_silent_mode_off"
+ android:layout_toLeftOf="@+id/btn_speaker_earphone"
+ android:layout_width="wrap_content"
+ android:layout_marginRight="10dp"
+ android:clickable="true"
+ android:focusable="true"
+ android:layout_height="wrap_content" />
+
+ <ImageView android:id="@+id/btn_speaker_earphone"
+ android:src="@drawable/btn_earphone"
+ android:layout_alignParentRight="true"
+ android:clickable="true"
+ android:focusable="true"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+
</LinearLayout>
diff --git a/fmapp2/src/com/caf/fmradio/FMRadio.java b/fmapp2/src/com/caf/fmradio/FMRadio.java
index 0e626a8..c962b64 100644
--- a/fmapp2/src/com/caf/fmradio/FMRadio.java
+++ b/fmapp2/src/com/caf/fmradio/FMRadio.java
@@ -197,6 +197,8 @@
/* Button Resources */
private ImageView mOnOffButton;
+ private ImageView mMuteButton;
+ private ImageView mSpeakerButton;
/* Button to navigate Preset pages */
private ImageButton mPresetPageButton;
/* 6 Preset Buttons */
@@ -328,6 +330,16 @@
mAnimation = AnimationUtils.loadAnimation(this,
R.anim.preset_select);
+ mMuteButton = (ImageView)findViewById(R.id.btn_silent);
+ if (mMuteButton != null) {
+ mMuteButton.setOnClickListener(mMuteModeClickListener);
+ }
+
+ mSpeakerButton = (ImageView)findViewById(R.id.btn_speaker_earphone);
+ if (mSpeakerButton != null) {
+ mSpeakerButton.setOnClickListener(mSpeakerClickListener);
+ }
+
mOnOffButton = (ImageView)findViewById(R.id.btn_onoff);
if (mOnOffButton != null) {
mOnOffButton.setOnClickListener(mTurnOnOffClickListener);
@@ -796,6 +808,27 @@
return super.onOptionsItemSelected(item);
}
+ private void enableSpeaker() {
+ //This method with toggle Speaker phone based on existing state .
+ boolean bSpeakerPhoneOn = isSpeakerEnabled();
+ if(mService != null) {
+ try {
+ if (bSpeakerPhoneOn) { // as Speaker is already on turn it off.
+ mService.enableSpeaker(false);
+ Log.d(LOGTAG, "Speaker phone is turned off");
+ mSpeakerButton.setImageResource(R.drawable.btn_earphone);
+ }else { // as Speaker is off turn it on.
+ mService.enableSpeaker(true);
+ Log.d(LOGTAG, "Speaker phone is turned on");
+ mSpeakerButton.setImageResource(R.drawable.btn_speaker);
+ }
+ invalidateOptionsMenu();
+ }catch (RemoteException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
private static final int RECORDTIMER_EXPIRED = 0x1003;
private static final int RECORDTIMER_UPDATE = 0x1004;
@@ -1502,6 +1535,54 @@
}
};
+ private View.OnClickListener mSpeakerClickListener =
+ new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mSpeakerButton.setClickable(false);
+ mSpeakerButton.setOnClickListener(null);
+ mHandler.removeCallbacks(mEnableRadioTask);
+ mHandler.postDelayed(mEnableSpeakerTask, 0);
+ }
+ };
+
+ private Runnable mEnableSpeakerTask = new Runnable() {
+ public void run() {
+ enableSpeaker();
+ mSpeakerButton.setClickable(true);
+ mSpeakerButton.setOnClickListener(mSpeakerClickListener);
+ }
+ };
+
+ private View.OnClickListener mMuteModeClickListener =
+ new View.OnClickListener() {
+ public void onClick(View v) {
+ boolean bStatus = false;
+ if (mService != null) {
+ try {
+ if (true == isMuted()) {
+ bStatus = mService.unMute();
+ }else {
+ bStatus = mService.mute();
+ }
+ if (bStatus) {
+ setMuteModeButtonImage(true);
+ v.startAnimation(mAnimation);
+ }else {
+ mCommandFailed = CMD_MUTE;
+ if(isCallActive()) {
+ showDialog(DIALOG_CMD_FAILED_CALL_ON);
+ }else {
+ showDialog(DIALOG_CMD_FAILED);
+ }
+ }
+ }catch (RemoteException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ };
+
private View.OnClickListener mRecordButtonListener =
new View.OnClickListener() {
public void onClick(View v) {
@@ -1559,6 +1640,22 @@
}
}
+ private void setMuteModeButtonImage(boolean notify) {
+ String fmMutedString;
+ if (isMuted() == true) {
+ mMuteButton.setImageResource(R.drawable.ic_silent_mode);
+ fmMutedString = "FM Radio Muted";
+ }else {
+ /* Find a icon for Stations */
+ mMuteButton.setImageResource(R.drawable.ic_silent_mode_off);
+ fmMutedString = "FM Radio Playing";
+ }
+ if (notify) {
+ //Toast.makeText(this, fmMutedString, Toast.LENGTH_SHORT).show();
+ Log.d(LOGTAG, fmMutedString);
+ }
+ }
+
private void enableRadio() {
mIsScaning = false;
mIsSeeking = false;
@@ -1841,6 +1938,10 @@
}
private void enableRadioOnOffUI(boolean bEnable) {
+ if (mMuteButton != null) {
+ mMuteButton.setEnabled(bEnable);
+ setMuteModeButtonImage(false);
+ }
if (bEnable) {
mFmSeeker.setVisibility(View.VISIBLE);
if (mRadioTextScroller != null) {
@@ -1978,6 +2079,18 @@
mPresetPageButton.setEnabled(bEnable &&
(FmSharedPreferences.getListStationCount() >= MAX_PRESETS_PER_PAGE));
}
+ if(mSpeakerButton != null) {
+ mSpeakerButton.setEnabled(bEnable);
+ if (bEnable) {
+ if(isSpeakerEnabled()) {
+ mSpeakerButton.setImageResource(R.drawable.btn_speaker);
+ }else {
+ mSpeakerButton.setImageResource(R.drawable.btn_earphone);
+ }
+ }else{
+ mSpeakerButton.setImageResource(R.drawable.btn_earphone);
+ }
+ }
}
private void resetSearchProgress() {
@@ -2183,8 +2296,10 @@
Log.d(LOGTAG, "A2DPConnectionState with: " + state);
if (state) {
Log.d(LOGTAG, "A2DP connected, set button to speaker");
+ mSpeakerButton.setImageResource(R.drawable.btn_speaker);
} else {
Log.d(LOGTAG, "A2DP dis-connected, set button to earphone");
+ mSpeakerButton.setImageResource(R.drawable.btn_earphone);
}
}
/** Scan related */
@@ -2642,6 +2757,12 @@
}
};
+ Runnable mOnMute = new Runnable() {
+ public void run() {
+ setMuteModeButtonImage(true);
+ }
+ };
+
Runnable mOnStereo = new Runnable() {
public void run() {
if (FMRADIO_UI_STATION_AUDIO_STEREO == mStereo) {
@@ -3105,6 +3226,7 @@
}
public void onMute(boolean bMuted) {
Log.d(LOGTAG, "mServiceCallbacks.onMute :" + bMuted);
+ mHandler.post(mOnMute);
}
public void onAudioUpdate(boolean bStereo) {
if((bStereo) && (FmSharedPreferences.getAudioOutputMode())) {
@@ -3153,9 +3275,13 @@
}
public void onFmAudioPathStarted() {
Log.d(LOGTAG, "mServiceCallbacks.onFmAudioPathStarted:");
+ mSpeakerButton.setClickable(true);
+ mMuteButton.setClickable(true);
}
public void onFmAudioPathStopped() {
Log.d(LOGTAG, "mServiceCallbacks.onFmAudioPathStopped:");
+ mSpeakerButton.setClickable(false);
+ mMuteButton.setClickable(false);
}
/* Not used in FmRadio */
public void getSigThCb(int val, int status) {