Corrected speaker and mute buttons not correctly handling state.

This commit is contained in:
Guillaume Beraudo 2010-11-29 14:08:58 +01:00
parent 03568062a5
commit c2ced898a6
4 changed files with 30 additions and 22 deletions

View file

@ -25,13 +25,13 @@
android:layout_width="fill_parent"></EditText>
<org.linphone.component.ToggleImageButton
android:id="@+id/mic_mute_button" android:layout_height="wrap_content"
android:layout_width="wrap_content" toggled="@drawable/mic_muted"
untoggled="@drawable/mic_active" android:layout_weight="0.5"
android:layout_width="wrap_content" android:layout_weight="0.5"
checked="@drawable/mic_muted" unchecked="@drawable/mic_active"
android:layout_gravity="left|center_vertical" />
<org.linphone.component.ToggleImageButton
android:id="@+id/speaker_button" android:layout_height="wrap_content"
android:layout_width="wrap_content" toggled="@drawable/speaker_32_on"
untoggled="@drawable/speaker_32_off" android:layout_weight="0.5"
android:layout_width="wrap_content" android:layout_weight="0.5"
checked="@drawable/speaker_32_on" unchecked="@drawable/speaker_32_off"
android:layout_gravity="right|center_vertical" />
</FrameLayout>
</LinearLayout>

View file

@ -26,11 +26,11 @@
></EditText>
<org.linphone.component.ToggleImageButton android:id="@+id/mic_mute_button"
android:layout_height="wrap_content" android:layout_width="wrap_content"
toggled="@drawable/mic_muted" untoggled="@drawable/mic_active"
checked="@drawable/mic_muted" unchecked="@drawable/mic_active"
android:layout_gravity="left|center_vertical"/>
<org.linphone.component.ToggleImageButton android:id="@+id/speaker_button"
android:layout_height="wrap_content" android:layout_width="wrap_content"
toggled="@drawable/speaker_32_on" untoggled="@drawable/speaker_32_off"
checked="@drawable/speaker_32_on" unchecked="@drawable/speaker_32_off"
android:layout_gravity="right|center_vertical"/>
</FrameLayout>

View file

@ -249,17 +249,14 @@ public class DialerActivity extends Activity implements LinphoneCoreListener {
mInCallControlRow.setVisibility(View.VISIBLE);
mAddressLayout.setVisibility(View.GONE);
mInCallAddressLayout.setVisibility(View.VISIBLE);
mMute.setChecked(!lLinphoneCore.isMicMuted());
String DisplayName = lLinphoneCore.getRemoteAddress().getDisplayName();
if (DisplayName!=null) {
mDisplayNameView.setText(DisplayName);
} else {
mDisplayNameView.setText(lLinphoneCore.getRemoteAddress().getUserName());
}
if ((Integer.parseInt(Build.VERSION.SDK) <=4 && mAudioManager.getMode() == AudioManager.MODE_NORMAL)
|| Integer.parseInt(Build.VERSION.SDK) >4 &&mAudioManager.isSpeakerphoneOn()) {
mSpeaker.setChecked(true);
}
configureMuteButtons();
mWakeLock.acquire();
}
}
@ -271,9 +268,9 @@ public class DialerActivity extends Activity implements LinphoneCoreListener {
public void onCheckedChanged(ToggleImageButton button, boolean isChecked) {
LinphoneCore lc = LinphoneService.instance().getLinphoneCore();
if (isChecked) {
lc.muteMic(false);
} else {
lc.muteMic(true);
} else {
lc.muteMic(false);
}
}
});
@ -497,6 +494,8 @@ public class DialerActivity extends Activity implements LinphoneCoreListener {
mDisplayNameView.setText(lc.getRemoteAddress().toString());
}
}
configureMuteButtons();
if (mSpeaker.isChecked()) {
routeAudioToSpeaker();
} else {
@ -504,6 +503,15 @@ public class DialerActivity extends Activity implements LinphoneCoreListener {
}
setVolumeControlStream(AudioManager.STREAM_VOICE_CALL);
}
private void configureMuteButtons() {
mMute.setChecked(LinphoneService.instance().getLinphoneCore().isMicMuted());
if ((Integer.parseInt(Build.VERSION.SDK) <=4 && mAudioManager.getMode() == AudioManager.MODE_NORMAL)
|| Integer.parseInt(Build.VERSION.SDK) >4 &&mAudioManager.isSpeakerphoneOn()) {
mSpeaker.setChecked(true);
} else {
mSpeaker.setChecked(false);
}
}
private void exitCallMode() {
mCallControlRow.setVisibility(View.VISIBLE);
mInCallControlRow.setVisibility(View.GONE);
@ -512,13 +520,13 @@ public class DialerActivity extends Activity implements LinphoneCoreListener {
mCall.setEnabled(true);
mHangup.setEnabled(false);
setVolumeControlStream(AudioManager.USE_DEFAULT_STREAM_TYPE);
mMute.setChecked(true);
mSpeaker.setChecked(false);
mDecline.setEnabled(false);
if (LinphoneService.instance().getLinphoneCore().isVideoEnabled()) {
finishActivity(VIDEO_VIEW_ACTIVITY);
}
if (mWakeLock.isHeld())mWakeLock.release();
mSpeaker.setChecked(false);
routeAudioToReceiver();
}
private void routeAudioToSpeaker() {
if (Integer.parseInt(Build.VERSION.SDK) <= 4 /*<donut*/) {

View file

@ -29,8 +29,8 @@ import android.widget.ImageButton;
/**
* Image button storing a checked state to display alternating drawables.
* The "toggled" drawable is displayed when button is down / checked.
* The "untoggled" drawable is displayed when button is up / unchecked.
* The "checked" drawable is displayed when button is down / checked.
* The "unchecked" drawable is displayed when button is up / unchecked.
*
* @author Guillaume Beraudo
*
@ -38,14 +38,14 @@ import android.widget.ImageButton;
public class ToggleImageButton extends ImageButton implements OnClickListener {
private static final String namespace = null;
private boolean checked;
private Drawable on;
private Drawable off;
private Drawable stateChecked;
private Drawable stateUnChecked;
private OnCheckedChangeListener onCheckedChangeListener;
public ToggleImageButton(Context context, AttributeSet attrs) {
super(context, attrs);
on = getResources().getDrawable(attrs.getAttributeResourceValue(namespace, "toggled", -1));
off = getResources().getDrawable(attrs.getAttributeResourceValue(namespace, "untoggled", -1));
stateChecked = getResources().getDrawable(attrs.getAttributeResourceValue(namespace, "checked", -1));
stateUnChecked = getResources().getDrawable(attrs.getAttributeResourceValue(namespace, "unchecked", -1));
setBackgroundColor(Color.TRANSPARENT);
setOnClickListener(this);
@ -65,7 +65,7 @@ public class ToggleImageButton extends ImageButton implements OnClickListener {
private void handleCheckChanged() {
setImageDrawable(checked?on:off);
setImageDrawable(checked?stateChecked:stateUnChecked);
requestLayout();
invalidate();
if (onCheckedChangeListener != null) onCheckedChangeListener.onCheckedChanged(this, checked);