diff --git a/res/drawable/micro_off.xml b/res/drawable/micro_off.xml index eca25c40f..8a260ceaf 100644 --- a/res/drawable/micro_off.xml +++ b/res/drawable/micro_off.xml @@ -2,6 +2,8 @@ + diff --git a/res/drawable/micro_off_disabled.png b/res/drawable/micro_off_disabled.png new file mode 100644 index 000000000..39f55197e Binary files /dev/null and b/res/drawable/micro_off_disabled.png differ diff --git a/res/drawable/micro_on.xml b/res/drawable/micro_on.xml index cd823c397..396c876b4 100644 --- a/res/drawable/micro_on.xml +++ b/res/drawable/micro_on.xml @@ -2,6 +2,8 @@ + diff --git a/res/drawable/micro_on_disabled.png b/res/drawable/micro_on_disabled.png new file mode 100644 index 000000000..87fee6aa1 Binary files /dev/null and b/res/drawable/micro_on_disabled.png differ diff --git a/res/drawable/options_default.png b/res/drawable/options_default.png new file mode 100644 index 000000000..2a2c832e6 Binary files /dev/null and b/res/drawable/options_default.png differ diff --git a/res/drawable/options_disabled.png b/res/drawable/options_disabled.png new file mode 100644 index 000000000..3f5a32482 Binary files /dev/null and b/res/drawable/options_disabled.png differ diff --git a/res/drawable/options_over.png b/res/drawable/options_over.png new file mode 100644 index 000000000..4c33e642b Binary files /dev/null and b/res/drawable/options_over.png differ diff --git a/res/drawable/speaker_off.xml b/res/drawable/speaker_off.xml index cd145c177..125cebfe2 100644 --- a/res/drawable/speaker_off.xml +++ b/res/drawable/speaker_off.xml @@ -2,6 +2,8 @@ + diff --git a/res/drawable/speaker_off_disabled.png b/res/drawable/speaker_off_disabled.png new file mode 100644 index 000000000..cb5a1dcf7 Binary files /dev/null and b/res/drawable/speaker_off_disabled.png differ diff --git a/res/drawable/speaker_on.xml b/res/drawable/speaker_on.xml index 19f98e8d3..b1e7ce119 100644 --- a/res/drawable/speaker_on.xml +++ b/res/drawable/speaker_on.xml @@ -2,6 +2,8 @@ + diff --git a/res/drawable/speaker_on_disabled.png b/res/drawable/speaker_on_disabled.png new file mode 100644 index 000000000..a07dc1f5c Binary files /dev/null and b/res/drawable/speaker_on_disabled.png differ diff --git a/res/drawable/video_off.xml b/res/drawable/video_off.xml index 871dfe38a..ded805ba2 100644 --- a/res/drawable/video_off.xml +++ b/res/drawable/video_off.xml @@ -2,6 +2,8 @@ + diff --git a/res/drawable/video_off_disabled.png b/res/drawable/video_off_disabled.png new file mode 100644 index 000000000..d9806305d Binary files /dev/null and b/res/drawable/video_off_disabled.png differ diff --git a/res/drawable/video_on.xml b/res/drawable/video_on.xml index 9fd258697..851cef5ef 100644 --- a/res/drawable/video_on.xml +++ b/res/drawable/video_on.xml @@ -2,6 +2,8 @@ + diff --git a/res/drawable/video_on_disabled.png b/res/drawable/video_on_disabled.png new file mode 100644 index 000000000..02a1cc236 Binary files /dev/null and b/res/drawable/video_on_disabled.png differ diff --git a/res/layout/incall.xml b/res/layout/incall.xml index 6dfdd11be..0223622f0 100644 --- a/res/layout/incall.xml +++ b/res/layout/incall.xml @@ -56,7 +56,7 @@ android:id="@+id/micro" android:layout_width="match_parent" android:layout_height="match_parent" - android:src="@drawable/micro_off" + android:src="@drawable/micro_on" android:scaleType="fitXY" android:layout_weight="0.25"/> diff --git a/src/org/linphone/InCallActivity.java b/src/org/linphone/InCallActivity.java index 86cad3d85..21e1db2a1 100644 --- a/src/org/linphone/InCallActivity.java +++ b/src/org/linphone/InCallActivity.java @@ -61,7 +61,7 @@ public class InCallActivity extends FragmentActivity implements private StatusFragment status; private AudioCallFragment audioCallFragment; private VideoCallFragment videoCallFragment; - private boolean isSpeakerEnabled, isMicMuted, isVideoEnabled; + private boolean isSpeakerEnabled = false, isMicMuted = false, isVideoEnabled = false; private LinearLayout mControlsLayout; static final boolean isInstanciated() { @@ -82,10 +82,6 @@ public class InCallActivity extends FragmentActivity implements if (savedInstanceState != null) { return; } - - isSpeakerEnabled = LinphoneManager.getInstance().isSpeakerOn(); - isMicMuted = LinphoneManager.getLc().isMicMuted(); - isVideoEnabled = getIntent().getBooleanExtra("VideoEnabled", false); initUI(); Fragment callFragment; @@ -108,33 +104,61 @@ public class InCallActivity extends FragmentActivity implements private void initUI() { video = (ImageView) findViewById(R.id.video); video.setOnClickListener(this); + video.setEnabled(false); micro = (ImageView) findViewById(R.id.micro); micro.setOnClickListener(this); + micro.setEnabled(false); speaker = (ImageView) findViewById(R.id.speaker); speaker.setOnClickListener(this); + speaker.setEnabled(false); addCall = (ImageView) findViewById(R.id.addCall); addCall.setOnClickListener(this); + addCall.setEnabled(false); pause = (ImageView) findViewById(R.id.pause); pause.setOnClickListener(this); + pause.setEnabled(false); hangUp = (ImageView) findViewById(R.id.hangUp); hangUp.setOnClickListener(this); dialer = (ImageView) findViewById(R.id.dialer); dialer.setOnClickListener(this); + dialer.setEnabled(false); switchCamera = (ImageView) findViewById(R.id.switchCamera); switchCamera.setOnClickListener(this); mControlsLayout = (LinearLayout) findViewById(R.id.menu); - - if (isVideoEnabled) { - video.setImageResource(R.drawable.video_off); - } - if (isSpeakerEnabled) { - speaker.setImageResource(R.drawable.speaker_off_over); - } - if (isMicMuted) { - micro.setImageResource(R.drawable.micro_on); - } + } + + private void enableAndRefreshInCallActions() { + mHandler.post(new Runnable() { + @Override + public void run() { + video.setEnabled(true); + micro.setEnabled(true); + speaker.setEnabled(true); + addCall.setEnabled(true); + pause.setEnabled(true); + dialer.setEnabled(true); + + if (isVideoEnabled) { + video.setImageResource(R.drawable.video_on); + } else { + video.setImageResource(R.drawable.video_off); + } + + if (isSpeakerEnabled) { + speaker.setImageResource(R.drawable.speaker_on); + } else { + speaker.setImageResource(R.drawable.speaker_off); + } + + if (isMicMuted) { + micro.setImageResource(R.drawable.micro_off); + } else { + micro.setImageResource(R.drawable.micro_on); + } + } + }); } public void updateStatusFragment(StatusFragment statusFragment) { @@ -216,7 +240,11 @@ public class InCallActivity extends FragmentActivity implements FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.replace(R.id.fragmentContainer, audioCallFragment); - transaction.commit(); + try { + transaction.commitAllowingStateLoss(); + } catch (Exception e) { + transaction.commit(); + } } private void replaceFragmentAudioByVideo() { @@ -225,7 +253,11 @@ public class InCallActivity extends FragmentActivity implements FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.replace(R.id.fragmentContainer, videoCallFragment); - transaction.commitAllowingStateLoss(); + try { + transaction.commitAllowingStateLoss(); + } catch (Exception e) { + transaction.commit(); + } } private void toogleMicro() { @@ -233,9 +265,9 @@ public class InCallActivity extends FragmentActivity implements isMicMuted = !isMicMuted; lc.muteMic(isMicMuted); if (isMicMuted) { - micro.setImageResource(R.drawable.micro_on); - } else { micro.setImageResource(R.drawable.micro_off); + } else { + micro.setImageResource(R.drawable.micro_on); } } @@ -243,10 +275,10 @@ public class InCallActivity extends FragmentActivity implements isSpeakerEnabled = !isSpeakerEnabled; if (isSpeakerEnabled) { LinphoneManager.getInstance().routeAudioToSpeaker(); - speaker.setImageResource(R.drawable.speaker_off); + speaker.setImageResource(R.drawable.speaker_on); } else { LinphoneManager.getInstance().routeAudioToReceiver(); - speaker.setImageResource(R.drawable.speaker_on); + speaker.setImageResource(R.drawable.speaker_off); } } @@ -369,12 +401,16 @@ public class InCallActivity extends FragmentActivity implements finish(); } - if (state == State.StreamsRunning) { + if (state == State.StreamsRunning) { boolean isVideoEnabledInCall = call.getCurrentParamsCopy().getVideoEnabled(); if (isVideoEnabledInCall != isVideoEnabled) { isVideoEnabled = isVideoEnabledInCall; switchVideo(isVideoEnabled); } + + isMicMuted = LinphoneManager.getLc().isMicMuted(); + isSpeakerEnabled = LinphoneManager.getLc().isSpeakerEnabled(); + enableAndRefreshInCallActions(); } }