From ac6361fe2ac6a548a3fedf2fc3621cadf2cb6287 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Thu, 20 Sep 2012 15:20:40 +0200 Subject: [PATCH] Fix missing status bar when using back button --- src/org/linphone/DialerFragment.java | 2 +- src/org/linphone/LinphoneActivity.java | 36 ++++++++++++++------------ 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/src/org/linphone/DialerFragment.java b/src/org/linphone/DialerFragment.java index 34beb33e0..f66a32d1c 100644 --- a/src/org/linphone/DialerFragment.java +++ b/src/org/linphone/DialerFragment.java @@ -137,7 +137,7 @@ public class DialerFragment extends Fragment { } @Override - public void onResume() { + public void onResume() { super.onResume(); if (LinphoneActivity.isInstanciated()) { LinphoneActivity.instance().selectMenu(FragmentsAvailable.DIALER); diff --git a/src/org/linphone/LinphoneActivity.java b/src/org/linphone/LinphoneActivity.java index b90b9833d..4de25ac91 100644 --- a/src/org/linphone/LinphoneActivity.java +++ b/src/org/linphone/LinphoneActivity.java @@ -59,6 +59,7 @@ import android.support.v4.app.Fragment; import android.support.v4.app.Fragment.SavedState; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentManager.BackStackEntry; import android.support.v4.app.FragmentTransaction; import android.view.Gravity; import android.view.KeyEvent; @@ -197,20 +198,12 @@ public class LinphoneActivity extends FragmentActivity implements OnClickListene } private void hideStatusBar() { - if (statusFragment == null) { - return; - } - - statusFragment.getView().setVisibility(View.GONE); + findViewById(R.id.status).setVisibility(View.GONE); findViewById(R.id.fragmentContainer).setPadding(0, 0, 0, 0); } private void showStatusBar() { - if (statusFragment == null || statusFragment.isVisible()) { - return; - } - - statusFragment.getView().setVisibility(View.VISIBLE); + findViewById(R.id.status).setVisibility(View.VISIBLE); findViewById(R.id.fragmentContainer).setPadding(0, LinphoneUtils.pixelsToDpi(getResources(), 40), 0, 0); } @@ -226,7 +219,9 @@ public class LinphoneActivity extends FragmentActivity implements OnClickListene nextFragment = newFragmentType; if (currentFragment == FragmentsAvailable.DIALER) { - dialerSavedState = getSupportFragmentManager().saveFragmentInstanceState(dialerFragment); + try { + dialerSavedState = getSupportFragmentManager().saveFragmentInstanceState(dialerFragment); + } catch (Exception e) {} } Fragment newFragment = null; @@ -1072,12 +1067,21 @@ public class LinphoneActivity extends FragmentActivity implements OnClickListene } public boolean onKeyDown(int keyCode, KeyEvent event) { - if (keyCode == KeyEvent.KEYCODE_BACK && currentFragment == FragmentsAvailable.DIALER) { - if (LinphoneUtils.onKeyBackGoHome(this, keyCode, event)) { - return true; + if (keyCode == KeyEvent.KEYCODE_BACK) { + if (currentFragment == FragmentsAvailable.DIALER) { + if (LinphoneUtils.onKeyBackGoHome(this, keyCode, event)) { + return true; + } + } else { + int backStackEntryCount = getSupportFragmentManager().getBackStackEntryCount(); + if (backStackEntryCount == 1) { + showStatusBar(); + } + + if (currentFragment == FragmentsAvailable.SETTINGS) { + reloadConfig(); + } } - } else if (keyCode == KeyEvent.KEYCODE_BACK && currentFragment == FragmentsAvailable.SETTINGS) { - reloadConfig(); } else if (keyCode == KeyEvent.KEYCODE_MENU && statusFragment != null) { statusFragment.openOrCloseStatusBar(); }