From e684416beaa0576c3374703a477366944ca4790a Mon Sep 17 00:00:00 2001 From: Guillaume Beraudo Date: Thu, 27 Oct 2011 11:36:36 +0200 Subject: [PATCH] Fix proximity sensor on call terminated when nearby Bug was: Call callee1, callee1 accepts call. Keep proximity sensor nearby. During this interval, callee1 terminates call. Activity was destroyed but screen kept beeing all black. --- src/org/linphone/LinphoneManager.java | 28 ++++++++++++--------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/src/org/linphone/LinphoneManager.java b/src/org/linphone/LinphoneManager.java index f6ff0be5e..5f47a1530 100644 --- a/src/org/linphone/LinphoneManager.java +++ b/src/org/linphone/LinphoneManager.java @@ -1055,29 +1055,24 @@ public final class LinphoneManager implements LinphoneCoreListener { }; - private static void hideActivityViewAsIfProximitySensorNearby(Activity activity) { + private static void simulateProximitySensorNearby(Activity activity, boolean nearby) { final Window window = activity.getWindow(); - View view = ((ViewGroup) window.getDecorView().findViewById(android.R.id.content)).getChildAt(0); WindowManager.LayoutParams lAttrs = activity.getWindow().getAttributes(); - lAttrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN; - view.setVisibility(View.INVISIBLE); + View view = ((ViewGroup) window.getDecorView().findViewById(android.R.id.content)).getChildAt(0); + if (nearby) { + lAttrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN; + view.setVisibility(View.INVISIBLE); + } else { + lAttrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN); + view.setVisibility(View.VISIBLE); + } window.setAttributes(lAttrs); } private static void proximityNearbyChanged() { boolean nearby = sLastProximitySensorValueNearby; for (Activity activity : sProximityDependentActivities) { - final Window window = activity.getWindow(); - WindowManager.LayoutParams lAttrs = activity.getWindow().getAttributes(); - View view = ((ViewGroup) window.getDecorView().findViewById(android.R.id.content)).getChildAt(0); - if (nearby) { - lAttrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN; - view.setVisibility(View.INVISIBLE); - } else { - lAttrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN); - view.setVisibility(View.VISIBLE); - } - window.setAttributes(lAttrs); + simulateProximitySensorNearby(activity, nearby); } } @@ -1095,7 +1090,7 @@ public final class LinphoneManager implements LinphoneCoreListener { Log.i("Proximity sensor detected, registering"); } } else if (sLastProximitySensorValueNearby){ - hideActivityViewAsIfProximitySensorNearby(activity); + simulateProximitySensorNearby(activity, true); } sProximityDependentActivities.add(activity); @@ -1103,6 +1098,7 @@ public final class LinphoneManager implements LinphoneCoreListener { public static synchronized void stopProximitySensorForActivity(Activity activity) { sProximityDependentActivities.remove(activity); + simulateProximitySensorNearby(activity, false); if (sProximityDependentActivities.isEmpty()) { SensorManager sm = (SensorManager) activity.getSystemService(Context.SENSOR_SERVICE); sm.unregisterListener(sProximitySensorListener);