summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorYorke Lee <yorkelee@google.com>2013-07-29 09:54:42 -0700
committerYorke Lee <yorkelee@google.com>2013-07-30 09:08:26 -0700
commit936e4436535aa7ee2f7a47ada8914d038c43b295 (patch)
tree6291d7199c5702e93d6a57d35e0ce1b518278e43 /src
parenta5913b3b86ec8850b5a500b2f6681107545ad991 (diff)
Fix fragment-related issues in new Dialer
Fix fragment lifecycle issues that occur when resuming the Dialer from recents after some time. To better reproduce fragment lifecycle issues more easily, remove the attribute android:screenOrientation="nosensor" to simulate activity creation and destruction. Change-Id: I9972121e6e06690d2a4823f9480ff9a993854059
Diffstat (limited to 'src')
-rw-r--r--src/com/android/dialer/NewDialtactsActivity.java73
1 files changed, 46 insertions, 27 deletions
diff --git a/src/com/android/dialer/NewDialtactsActivity.java b/src/com/android/dialer/NewDialtactsActivity.java
index 0229c6bfe..6d2bb3fdb 100644
--- a/src/com/android/dialer/NewDialtactsActivity.java
+++ b/src/com/android/dialer/NewDialtactsActivity.java
@@ -183,7 +183,13 @@ public class NewDialtactsActivity extends TransactionSafeActivity implements Vie
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
- final boolean smartDialSearch = isDialpadShowing();
+ // TODO krelease: populate the search fragments with the correct
+ // search query at the correct point in time of the fragment lifecycle.
+ // The current behavior is to simply return to the favorites screen
+ // (when docked), or returning to the Dialer after it has been
+ // swapped out of memory.
+ if (mDialpadFragment == null) return;
+ final boolean smartDialSearch = isDialpadShowing();
final String newText = s.toString();
// Show search result with non-empty text. Show a bare list otherwise.
if (TextUtils.isEmpty(newText) && mInSearchUi) {
@@ -194,7 +200,7 @@ public class NewDialtactsActivity extends TransactionSafeActivity implements Vie
enterSearchUi(smartDialSearch);
}
- if (isDialpadShowing()) {
+ if (smartDialSearch) {
mSmartDialSearchFragment.setQueryString(newText, false);
} else {
mRegularSearchFragment.setQueryString(newText, false);
@@ -209,7 +215,7 @@ public class NewDialtactsActivity extends TransactionSafeActivity implements Vie
};
private boolean isDialpadShowing() {
- return mDialpadFragment.isVisible();
+ return mDialpadFragment != null && mDialpadFragment.isVisible();
}
@Override
@@ -223,23 +229,24 @@ public class NewDialtactsActivity extends TransactionSafeActivity implements Vie
getActionBar().hide();
- mPhoneFavoriteFragment = new NewPhoneFavoriteFragment();
- mPhoneFavoriteFragment.setListener(mPhoneFavoriteListener);
-
- mRegularSearchFragment = new NewSearchFragment();
- mSmartDialSearchFragment = new SmartDialSearchFragment();
- mDialpadFragment = new NewDialpadFragment();
-
- // TODO krelease: load fragments on demand instead of creating all of them at run time
- final FragmentTransaction ft = getFragmentManager().beginTransaction();
- ft.add(R.id.dialtacts_frame, mPhoneFavoriteFragment, TAG_FAVORITES_FRAGMENT);
- ft.add(R.id.dialtacts_frame, mRegularSearchFragment, TAG_REGULAR_SEARCH_FRAGMENT);
- ft.add(R.id.dialtacts_frame, mSmartDialSearchFragment, TAG_SMARTDIAL_SEARCH_FRAGMENT);
- ft.add(R.id.dialtacts_container, mDialpadFragment, TAG_DIALPAD_FRAGMENT);
- ft.hide(mRegularSearchFragment);
- ft.hide(mDialpadFragment);
- ft.hide(mSmartDialSearchFragment);
- ft.commit();
+ if (savedInstanceState == null) {
+ mPhoneFavoriteFragment = new NewPhoneFavoriteFragment();
+ mPhoneFavoriteFragment.setRetainInstance(true);
+ mPhoneFavoriteFragment.setListener(mPhoneFavoriteListener);
+
+ mRegularSearchFragment = new NewSearchFragment();
+ mSmartDialSearchFragment = new SmartDialSearchFragment();
+ mDialpadFragment = new NewDialpadFragment();
+
+ // TODO krelease: load fragments on demand instead of creating all of them at run time
+ final FragmentTransaction ft = getFragmentManager().beginTransaction();
+ ft.add(R.id.dialtacts_frame, mPhoneFavoriteFragment, TAG_FAVORITES_FRAGMENT);
+ ft.add(R.id.dialtacts_frame, mRegularSearchFragment, TAG_REGULAR_SEARCH_FRAGMENT);
+ ft.add(R.id.dialtacts_frame, mSmartDialSearchFragment, TAG_SMARTDIAL_SEARCH_FRAGMENT);
+ ft.add(R.id.dialtacts_container, mDialpadFragment, TAG_DIALPAD_FRAGMENT);
+ // Fragments will be hidden as necessary in onAttachFragment
+ ft.commit();
+ }
mBottomPaddingView = findViewById(R.id.dialtacts_bottom_padding);
prepareSearchView();
@@ -264,21 +271,23 @@ public class NewDialtactsActivity extends TransactionSafeActivity implements Vie
TAG_REGULAR_SEARCH_FRAGMENT);
mRegularSearchFragment.setOnPhoneNumberPickerActionListener(
mPhoneNumberPickerActionListener);
- if (!mRegularSearchFragment.isHidden()) {
- final FragmentTransaction transaction = getFragmentManager().beginTransaction();
- transaction.hide(mRegularSearchFragment);
- transaction.commit();
- }
mSmartDialSearchFragment = (SmartDialSearchFragment) fm.findFragmentByTag(
TAG_SMARTDIAL_SEARCH_FRAGMENT);
mSmartDialSearchFragment.setOnPhoneNumberPickerActionListener(
mPhoneNumberPickerActionListener);
- if (!mSmartDialSearchFragment.isHidden()) {
+ }
+
+ @Override
+ public void onAttachFragment(Fragment fragment) {
+ if (fragment instanceof NewDialpadFragment || fragment instanceof NewSearchFragment
+ || fragment instanceof SmartDialSearchFragment) {
final FragmentTransaction transaction = getFragmentManager().beginTransaction();
- transaction.hide(mSmartDialSearchFragment);
+ transaction.hide(fragment);
transaction.commit();
}
+ // TODO krelease: Save some kind of state here to show the appropriate fragment
+ // based on the state of the dialer when it was last paused
}
@Override
@@ -397,6 +406,11 @@ public class NewDialtactsActivity extends TransactionSafeActivity implements Vie
};
public void hideSearchBar() {
+ // If the favorites fragment hasn't been fully created before the dialpad fragment
+ // is hidden (i.e. onResume), don't bother animating
+ if (mPhoneFavoriteFragment == null || mPhoneFavoriteFragment.getView() == null) {
+ return;
+ }
mSearchViewContainer.animate().cancel();
mSearchViewContainer.setAlpha(1);
mSearchViewContainer.setTranslationY(0);
@@ -415,6 +429,11 @@ public class NewDialtactsActivity extends TransactionSafeActivity implements Vie
}
public void showSearchBar() {
+ // If the favorites fragment hasn't been fully created before the dialpad fragment
+ // is hidden (i.e. onResume), don't bother animating
+ if (mPhoneFavoriteFragment == null || mPhoneFavoriteFragment.getView() == null) {
+ return;
+ }
mSearchViewContainer.animate().cancel();
mSearchViewContainer.setAlpha(0);
mSearchViewContainer.setTranslationY(-mSearchViewContainer.getHeight());