diff --git a/res/layout/dialer.xml b/res/layout/dialer.xml index c19f024cc..b9a3e91fd 100644 --- a/res/layout/dialer.xml +++ b/res/layout/dialer.xml @@ -15,14 +15,25 @@ - - - + + + + + + + - + - diff --git a/src/org/linphone/DialerActivity.java b/src/org/linphone/DialerActivity.java index 17afeaaae..19e639648 100644 --- a/src/org/linphone/DialerActivity.java +++ b/src/org/linphone/DialerActivity.java @@ -18,6 +18,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package org.linphone; +import org.linphone.component.ToggleImageButton; +import org.linphone.component.ToggleImageButton.OnCheckedChangeListener; import org.linphone.core.LinphoneAddress; import org.linphone.core.LinphoneCall; import org.linphone.core.LinphoneChatRoom; @@ -28,7 +30,6 @@ import org.linphone.core.LinphoneFriend; import org.linphone.core.LinphoneProxyConfig; import org.linphone.core.LinphoneCall.State; - import android.app.Activity; import android.app.AlertDialog; import android.content.Context; @@ -45,18 +46,14 @@ import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; -import android.view.View.OnFocusChangeListener; import android.view.View.OnLongClickListener; import android.view.View.OnTouchListener; import android.widget.Button; -import android.widget.CompoundButton; import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.TableRow; import android.widget.TextView; import android.widget.Toast; -import android.widget.ToggleButton; -import android.widget.CompoundButton.OnCheckedChangeListener; public class DialerActivity extends Activity implements LinphoneCoreListener { @@ -82,13 +79,13 @@ public class DialerActivity extends Activity implements LinphoneCoreListener { private Button mStar; private Button mHash; - private ToggleButton mMute; - private ToggleButton mSpeaker; + private ToggleImageButton mMute; + private ToggleImageButton mSpeaker; private LinearLayout mCallControlRow; private TableRow mInCallControlRow; - private LinearLayout mAddressLayout; - private LinearLayout mInCallAddressLayout; + private View mAddressLayout; + private View mInCallAddressLayout; private static DialerActivity theDialer; @@ -193,10 +190,10 @@ public class DialerActivity extends Activity implements LinphoneCoreListener { mCallControlRow = (LinearLayout) findViewById(R.id.CallControlRow); mInCallControlRow = (TableRow) findViewById(R.id.IncallControlRow); - mAddressLayout = (LinearLayout) findViewById(R.id.Addresslayout); - mInCallAddressLayout = (LinearLayout) findViewById(R.id.IncallAddressLayout); - mMute = (ToggleButton)findViewById(R.id.mic_mute_button); - mSpeaker = (ToggleButton)findViewById(R.id.speaker_button); + mAddressLayout = (View) findViewById(R.id.Addresslayout); + mInCallAddressLayout = (View) findViewById(R.id.IncallAddressLayout); + mMute = (ToggleImageButton)findViewById(R.id.mic_mute_button); + mSpeaker = (ToggleImageButton)findViewById(R.id.speaker_button); mInCallControlRow.setVisibility(View.GONE); mInCallAddressLayout.setVisibility(View.GONE); @@ -218,11 +215,6 @@ public class DialerActivity extends Activity implements LinphoneCoreListener { mAddressLayout.setVisibility(View.GONE); mInCallAddressLayout.setVisibility(View.VISIBLE); mMute.setChecked(!lLinphoenCore.isMicMuted()); - mMute.setCompoundDrawablesWithIntrinsicBounds(0 - , mMute.isChecked()?R.drawable.mic_active:R.drawable.mic_muted - , 0 - , 0); - String DisplayName = lLinphoenCore.getRemoteAddress().getDisplayName(); if (DisplayName!=null) { mDisplayNameView.setText(DisplayName); @@ -241,35 +233,25 @@ public class DialerActivity extends Activity implements LinphoneCoreListener { mMute.setOnCheckedChangeListener(new OnCheckedChangeListener() { - - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + public void onCheckedChanged(ToggleImageButton button, boolean isChecked) { LinphoneCore lc = LinphoneService.instance().getLinphoneCore(); if (isChecked) { lc.muteMic(false); - mMute.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.mic_active, 0, 0); } else { lc.muteMic(true); - mMute.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.mic_muted, 0, 0); } - } - }); mSpeaker.setOnCheckedChangeListener(new OnCheckedChangeListener() { - - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + public void onCheckedChanged(ToggleImageButton buttonView, boolean isChecked) { if (isChecked) { routeAudioToSpeaker(); - mSpeaker.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.speaker_32_on, 0, 0); } else { routeAudioToReceiver(); - mSpeaker.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.speaker_32_off, 0, 0); } - } - }); mZero = (Button) findViewById(R.id.Button00) ; diff --git a/src/org/linphone/component/ToggleImageButton.java b/src/org/linphone/component/ToggleImageButton.java new file mode 100644 index 000000000..a5d181b02 --- /dev/null +++ b/src/org/linphone/component/ToggleImageButton.java @@ -0,0 +1,87 @@ +/* +ToggleImageButton.java +Copyright (C) 2010 Belledonne Communications, Grenoble, France + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ +package org.linphone.component; + + +import android.content.Context; +import android.graphics.Color; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.view.View; +import android.view.View.OnClickListener; +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. + * + * @author Guillaume Beraudo + * + */ +public class ToggleImageButton extends ImageButton implements OnClickListener { + private static final String namespace = null; + private boolean checked; + private Drawable on; + private Drawable off; + 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)); + setBackgroundColor(Color.TRANSPARENT); + + setOnClickListener(this); + handleCheckChanged(); + } + + + + public void setChecked(boolean checked) { + this.checked = checked; + handleCheckChanged(); + } + + public boolean isChecked() { + return checked; + } + + + private void handleCheckChanged() { + setImageDrawable(checked?on:off); + requestLayout(); + invalidate(); + if (onCheckedChangeListener != null) onCheckedChangeListener.onCheckedChanged(this, checked); + } + + + public void setOnCheckedChangeListener(OnCheckedChangeListener listener) { + onCheckedChangeListener = listener; + } + + public static interface OnCheckedChangeListener { + void onCheckedChanged(ToggleImageButton button, boolean checked); + } + + public void onClick(View v) { + checked = !checked; + handleCheckChanged(); + } +}