From 4a4f2fb5d42b915270aff40ca3e291c21bd3c614 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 7 May 2013 12:23:20 +0200 Subject: [PATCH] Hide navigation bar (if exists) when phone is close to ear while in call on Android ICS+ device --- src/org/linphone/LinphoneManager.java | 3 +++ .../linphone/compatibility/ApiFourteenPlus.java | 10 ++++++++++ .../linphone/compatibility/Compatibility.java | 16 +++++++++++++++- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/org/linphone/LinphoneManager.java b/src/org/linphone/LinphoneManager.java index 4b9a037e2..27f6f6197 100644 --- a/src/org/linphone/LinphoneManager.java +++ b/src/org/linphone/LinphoneManager.java @@ -49,6 +49,7 @@ import org.linphone.LinphoneSimpleListener.LinphoneOnAudioChangedListener.AudioS import org.linphone.LinphoneSimpleListener.LinphoneOnDTMFReceivedListener; import org.linphone.LinphoneSimpleListener.LinphoneOnMessageReceivedListener; import org.linphone.LinphoneSimpleListener.LinphoneServiceListener; +import org.linphone.compatibility.Compatibility; import org.linphone.core.CallDirection; import org.linphone.core.LinphoneAddress; import org.linphone.core.LinphoneAuthInfo; @@ -1507,9 +1508,11 @@ public final class LinphoneManager implements LinphoneCoreListener { if (nearby) { params.screenBrightness = 0.1f; view.setVisibility(View.INVISIBLE); + Compatibility.hideNavigationBar(activity); } else { params.screenBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE; view.setVisibility(View.VISIBLE); + Compatibility.showNavigationBar(activity); } window.setAttributes(params); } diff --git a/src/org/linphone/compatibility/ApiFourteenPlus.java b/src/org/linphone/compatibility/ApiFourteenPlus.java index 04cd075d2..1c65fc8f2 100644 --- a/src/org/linphone/compatibility/ApiFourteenPlus.java +++ b/src/org/linphone/compatibility/ApiFourteenPlus.java @@ -1,8 +1,10 @@ package org.linphone.compatibility; import android.annotation.TargetApi; +import android.app.Activity; import android.preference.Preference; import android.preference.TwoStatePreference; +import android.view.View; /* ApiFourteenPlus.java @@ -35,4 +37,12 @@ public class ApiFourteenPlus { public static boolean isPreferenceChecked(Preference preference) { return ((TwoStatePreference) preference).isChecked(); } + + public static void hideNavigationBar(Activity activity) { + activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); + } + + public static void showNavigationBar(Activity activity) { + activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE); + } } diff --git a/src/org/linphone/compatibility/Compatibility.java b/src/org/linphone/compatibility/Compatibility.java index 9d5f4f416..35f015b76 100644 --- a/src/org/linphone/compatibility/Compatibility.java +++ b/src/org/linphone/compatibility/Compatibility.java @@ -248,10 +248,24 @@ public class Compatibility { public static void removeGlobalLayoutListener(ViewTreeObserver viewTreeObserver, OnGlobalLayoutListener keyboardListener) { - if (Version.sdkAboveOrEqual(16)) { + if (Version.sdkAboveOrEqual(Version.API16_JELLY_BEAN_41)) { ApiSixteenPlus.removeGlobalLayoutListener(viewTreeObserver, keyboardListener); } else { ApiFivePlus.removeGlobalLayoutListener(viewTreeObserver, keyboardListener); } } + + public static void hideNavigationBar(Activity activity) + { + if (Version.sdkAboveOrEqual(Version.API14_ICE_CREAM_SANDWICH_40)) { + ApiFourteenPlus.hideNavigationBar(activity); + } + } + + public static void showNavigationBar(Activity activity) + { + if (Version.sdkAboveOrEqual(Version.API14_ICE_CREAM_SANDWICH_40)) { + ApiFourteenPlus.showNavigationBar(activity); + } + } }