diff --git a/src/org/linphone/InCallActivity.java b/src/org/linphone/InCallActivity.java index 74fa772fd..86cad3d85 100644 --- a/src/org/linphone/InCallActivity.java +++ b/src/org/linphone/InCallActivity.java @@ -33,6 +33,7 @@ import android.os.Handler; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentTransaction; +import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.animation.Animation; @@ -402,4 +403,11 @@ public class InCallActivity extends FragmentActivity implements setCallControlsVisibleAndRemoveCallbacks(); } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (LinphoneUtils.onKeyVolumeAdjust(keyCode)) return true; + if (LinphoneUtils.onKeyBackGoHome(this, keyCode, event)) return true; + return super.onKeyDown(keyCode, event); + } } diff --git a/src/org/linphone/LinphoneManager.java b/src/org/linphone/LinphoneManager.java index ff80a9a02..ffad28861 100644 --- a/src/org/linphone/LinphoneManager.java +++ b/src/org/linphone/LinphoneManager.java @@ -93,6 +93,7 @@ import android.media.AudioManager; import android.media.MediaPlayer; import android.net.ConnectivityManager; import android.net.NetworkInfo; +import android.os.Build; import android.os.PowerManager; import android.os.PowerManager.WakeLock; import android.os.Vibrator; @@ -905,8 +906,6 @@ public final class LinphoneManager implements LinphoneCoreListener { public void textReceived(LinphoneCore lc, LinphoneChatRoom cr, LinphoneAddress from, String message) { - //TODO : Remove - Log.e("LinphoneManager, Message received from " + from + ": " + message); for (LinphoneSimpleListener listener : getSimpleListeners(LinphoneActivity.class)) { ((LinphoneActivity) listener).onMessageReceived(from, message); } @@ -998,7 +997,7 @@ public final class LinphoneManager implements LinphoneCoreListener { if (state == State.Connected) { if (Hacks.needSoftvolume() || sLPref.useSoftvolume()) { - adjustSoftwareVolume(0); // Synchronize + adjustVolume(0); // Synchronize } } @@ -1227,15 +1226,19 @@ public final class LinphoneManager implements LinphoneCoreListener { return extractADisplayName(r, linphoneAddress); } - public void adjustSoftwareVolume(int i) { - int oldVolume = mAudioManager.getStreamVolume(LINPHONE_VOLUME_STREAM); - int maxVolume = mAudioManager.getStreamMaxVolume(LINPHONE_VOLUME_STREAM); + public void adjustVolume(int i) { + if (Build.VERSION.SDK_INT<15) { + int oldVolume = mAudioManager.getStreamVolume(LINPHONE_VOLUME_STREAM); + int maxVolume = mAudioManager.getStreamMaxVolume(LINPHONE_VOLUME_STREAM); - int nextVolume = oldVolume +i; - if (nextVolume > maxVolume) nextVolume = maxVolume; - if (nextVolume < 0) nextVolume = 0; + int nextVolume = oldVolume +i; + if (nextVolume > maxVolume) nextVolume = maxVolume; + if (nextVolume < 0) nextVolume = 0; - mLc.adjustSoftwareVolume((nextVolume - maxVolume)* dbStep); + mLc.adjustSoftwareVolume((nextVolume - maxVolume)* dbStep); + } else + // starting from ICS, volume must be adjusted by the application, at least for STREAM_VOICE_CALL volume stream + mAudioManager.adjustStreamVolume(LINPHONE_VOLUME_STREAM, i<0?AudioManager.ADJUST_LOWER:AudioManager.ADJUST_RAISE, 0); } public static Boolean isProximitySensorNearby(final SensorEvent event) { diff --git a/src/org/linphone/LinphoneUtils.java b/src/org/linphone/LinphoneUtils.java index cd9c7d4b2..bb63b5f81 100644 --- a/src/org/linphone/LinphoneUtils.java +++ b/src/org/linphone/LinphoneUtils.java @@ -28,15 +28,13 @@ import java.net.URL; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; -import java.util.Iterator; import java.util.List; -import java.util.Set; import org.linphone.core.LinphoneAddress; import org.linphone.core.LinphoneCall; +import org.linphone.core.LinphoneCall.State; import org.linphone.core.LinphoneCore; import org.linphone.core.Log; -import org.linphone.core.LinphoneCall.State; import org.linphone.mediastream.Version; import org.linphone.mediastream.video.capture.hwconf.Hacks; @@ -47,6 +45,7 @@ import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; +import android.os.Build; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; @@ -74,9 +73,9 @@ public final class LinphoneUtils { return true; } - public static boolean onKeyVolumeSoftAdjust(int keyCode) { + public static boolean onKeyVolumeAdjust(int keyCode) { if (!((keyCode == KeyEvent.KEYCODE_VOLUME_UP || keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) - && Hacks.needSoftvolume())) { + && (Hacks.needSoftvolume())|| Build.VERSION.SDK_INT >= 15)) { return false; // continue } @@ -84,9 +83,9 @@ public final class LinphoneUtils { Log.i("Couldn't change softvolume has service is not running"); return true; } else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) { - LinphoneManager.getInstance().adjustSoftwareVolume(1); + LinphoneManager.getInstance().adjustVolume(1); } else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) { - LinphoneManager.getInstance().adjustSoftwareVolume(-1); + LinphoneManager.getInstance().adjustVolume(-1); } return preventVolumeBarToDisplay; }