diff options
author | Yorke Lee <yorkelee@google.com> | 2013-08-29 18:51:06 -0700 |
---|---|---|
committer | Yorke Lee <yorkelee@google.com> | 2013-09-03 15:30:36 -0700 |
commit | b207f8a073e8b3c001986b31c951f2c951cc631b (patch) | |
tree | df6ab0f743a4bd2be5c09c5326f6492c93dab552 | |
parent | fca0338d3d52f91c0cbcac555a8416cc75770090 (diff) |
Show bottom action bar throughout dialer
* Moved fake action bar to DialtactsActivity from PhoneFavoritesFragment
* Allow transitioning between search fragments
* Removed onPhoneFavoritesFragmentStarted listener now that it is no longer
needed
Bug: 10510200
Change-Id: Ie06a1ec08171f5c424a84d36709ca35100f2148d
-rw-r--r-- | res/layout/dialtacts_activity.xml | 30 | ||||
-rw-r--r-- | res/layout/phone_favorites_fragment.xml | 30 | ||||
-rw-r--r-- | src/com/android/dialer/DialtactsActivity.java | 126 | ||||
-rw-r--r-- | src/com/android/dialer/list/PhoneFavoriteFragment.java | 11 |
4 files changed, 99 insertions, 98 deletions
diff --git a/res/layout/dialtacts_activity.xml b/res/layout/dialtacts_activity.xml index 580e0bf43..e4eb2b3c5 100644 --- a/res/layout/dialtacts_activity.xml +++ b/res/layout/dialtacts_activity.xml @@ -69,6 +69,36 @@ android:id="@+id/dialtacts_frame" android:clipChildren="false"> </FrameLayout> + <FrameLayout + android:layout_height="@dimen/fake_action_bar_height" + android:layout_width="match_parent" + android:id="@+id/fake_action_bar" + android:background="@color/actionbar_background_color"> + <ImageButton + android:id="@+id/call_history_button" + android:layout_width="@dimen/fake_menu_button_min_width" + android:layout_height="match_parent" + android:layout_gravity="bottom|start" + android:background="?android:attr/selectableItemBackground" + android:contentDescription="@string/action_menu_call_history_description" + android:src="@drawable/ic_menu_history_dk"/> + <ImageButton + android:id="@+id/dialpad_button" + android:layout_width="@dimen/fake_menu_button_min_width" + android:layout_height="match_parent" + android:layout_gravity="bottom|center" + android:background="?android:attr/selectableItemBackground" + android:contentDescription="@string/action_menu_dialpad_button" + android:src="@drawable/ic_menu_dialpad_dk"/> + <ImageButton + android:id="@+id/overflow_menu" + android:layout_width="@dimen/fake_menu_button_min_width" + android:layout_height="match_parent" + android:layout_gravity="bottom|end" + android:src="@drawable/ic_menu_overflow_dk" + android:contentDescription="@string/action_menu_overflow_description" + android:background="?android:attr/selectableItemBackground"/> + </FrameLayout> <View android:id="@+id/dialtacts_bottom_padding" android:layout_width="match_parent" diff --git a/res/layout/phone_favorites_fragment.xml b/res/layout/phone_favorites_fragment.xml index cb37e6cb5..3b9e589eb 100644 --- a/res/layout/phone_favorites_fragment.xml +++ b/res/layout/phone_favorites_fragment.xml @@ -46,34 +46,4 @@ android:textColor="?android:attr/textColorSecondary" android:textAppearance="?android:attr/textAppearanceLarge"/> </FrameLayout> - <FrameLayout - android:layout_height="@dimen/fake_action_bar_height" - android:layout_width="match_parent" - android:id="@+id/fake_action_bar" - android:background="@color/actionbar_background_color"> - <ImageButton - android:id="@+id/call_history_button" - android:layout_width="@dimen/fake_menu_button_min_width" - android:layout_height="match_parent" - android:layout_gravity="bottom|start" - android:background="?android:attr/selectableItemBackground" - android:contentDescription="@string/action_menu_call_history_description" - android:src="@drawable/ic_menu_history_dk"/> - <ImageButton - android:id="@+id/dialpad_button" - android:layout_width="@dimen/fake_menu_button_min_width" - android:layout_height="match_parent" - android:layout_gravity="bottom|center" - android:background="?android:attr/selectableItemBackground" - android:contentDescription="@string/action_menu_dialpad_button" - android:src="@drawable/ic_menu_dialpad_dk"/> - <ImageButton - android:id="@+id/overflow_menu" - android:layout_width="@dimen/fake_menu_button_min_width" - android:layout_height="match_parent" - android:layout_gravity="bottom|end" - android:src="@drawable/ic_menu_overflow_dk" - android:contentDescription="@string/action_menu_overflow_description" - android:background="?android:attr/selectableItemBackground"/> - </FrameLayout> </LinearLayout> diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java index 99855f4e0..7ba49979e 100644 --- a/src/com/android/dialer/DialtactsActivity.java +++ b/src/com/android/dialer/DialtactsActivity.java @@ -23,6 +23,7 @@ import android.app.Activity; import android.app.backup.BackupManager; import android.app.Fragment; import android.app.FragmentManager; +import android.app.FragmentManager.BackStackEntry; import android.app.FragmentTransaction; import android.content.ActivityNotFoundException; import android.content.Context; @@ -90,7 +91,6 @@ import java.util.ArrayList; public class DialtactsActivity extends TransactionSafeActivity implements View.OnClickListener, DialpadFragment.OnDialpadQueryChangedListener, PopupMenu.OnMenuItemClickListener, OnListFragmentScrolledListener, - PhoneFavoriteFragment.OnPhoneFavoriteFragmentStartedListener, DialpadFragment.OnDialpadFragmentStartedListener, PhoneFavoriteFragment.OnShowAllContactsListener { private static final String TAG = "DialtactsActivity"; @@ -107,7 +107,8 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O private static final String CALL_ORIGIN_DIALTACTS = "com.android.dialer.DialtactsActivity"; - private static final String KEY_IN_SEARCH_UI = "in_search_ui"; + private static final String KEY_IN_REGULAR_SEARCH_UI = "in_regular_search_ui"; + private static final String KEY_IN_DIALPAD_SEARCH_UI = "in_dialpad_search_ui"; private static final String KEY_SEARCH_QUERY = "search_query"; private static final String KEY_FIRST_LAUNCH = "first_launch"; @@ -153,12 +154,11 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O // Padding view used to shift the fragments up when the dialpad is shown. private View mBottomPaddingView; + private View mFragmentsFrame; + + private boolean mInDialpadSearch; + private boolean mInRegularSearch; - /** - * True when this Activity is in its search UI (with a {@link SearchView} and - * {@link PhoneNumberPickerFragment}). - */ - private boolean mInSearchUi; /** * True when this activity has been launched for the first time. */ @@ -226,24 +226,30 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O if (DEBUG) { Log.d(TAG, "onTextChange for mSearchView called with new query: " + s); } - final boolean smartDialSearch = isDialpadShowing(); + final boolean dialpadSearch = isDialpadShowing(); // Show search result with non-empty text. Show a bare list otherwise. - if (TextUtils.isEmpty(newText) && mInSearchUi) { + if (TextUtils.isEmpty(newText) && getInSearchUi()) { exitSearchUi(); mSearchViewCloseButton.setVisibility(View.GONE); return; - } else if (!TextUtils.isEmpty(newText) && !mInSearchUi) { - enterSearchUi(smartDialSearch, newText); - } + } else if (!TextUtils.isEmpty(newText)) { + final boolean sameSearchMode = (dialpadSearch && mInDialpadSearch) || + (!dialpadSearch && mInRegularSearch); + if (!sameSearchMode) { + // call enterSearchUi only if we are switching search modes, or entering + // search ui for the first time + enterSearchUi(dialpadSearch, newText); + } - if (smartDialSearch && mSmartDialSearchFragment != null) { - mSmartDialSearchFragment.setQueryString(newText, false); - } else if (mRegularSearchFragment != null) { - mRegularSearchFragment.setQueryString(newText, false); + if (dialpadSearch && mSmartDialSearchFragment != null) { + mSmartDialSearchFragment.setQueryString(newText, false); + } else if (mRegularSearchFragment != null) { + mRegularSearchFragment.setQueryString(newText, false); + } + mSearchViewCloseButton.setVisibility(View.VISIBLE); + return; } - mSearchViewCloseButton.setVisibility(View.VISIBLE); - return; } @Override @@ -278,11 +284,13 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O ft.commit(); } else { mSearchQuery = savedInstanceState.getString(KEY_SEARCH_QUERY); - mInSearchUi = savedInstanceState.getBoolean(KEY_IN_SEARCH_UI); + mInRegularSearch = savedInstanceState.getBoolean(KEY_IN_REGULAR_SEARCH_UI); + mInDialpadSearch = savedInstanceState.getBoolean(KEY_IN_DIALPAD_SEARCH_UI); mFirstLaunch = savedInstanceState.getBoolean(KEY_FIRST_LAUNCH); } mBottomPaddingView = findViewById(R.id.dialtacts_bottom_padding); + mFragmentsFrame = findViewById(R.id.dialtacts_frame); prepareSearchView(); if (UI.FILTER_CONTACTS_ACTION.equals(intent.getAction()) @@ -290,6 +298,8 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O setupFilterText(intent); } + setupFakeActionBarItems(); + mDialerDatabaseHelper = DatabaseHelperManager.getDatabaseHelper(this); SmartDialPrefix.initializeNanpSettings(this); } @@ -308,7 +318,8 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString(KEY_SEARCH_QUERY, mSearchQuery); - outState.putBoolean(KEY_IN_SEARCH_UI, mInSearchUi); + outState.putBoolean(KEY_IN_REGULAR_SEARCH_UI, mInRegularSearch); + outState.putBoolean(KEY_IN_DIALPAD_SEARCH_UI, mInDialpadSearch); outState.putBoolean(KEY_FIRST_LAUNCH, mFirstLaunch); } @@ -480,8 +491,17 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O } }; + private boolean getInSearchUi() { + return mInDialpadSearch || mInRegularSearch; + } + + private void setNotInSearchUi() { + mInDialpadSearch = false; + mInRegularSearch = false; + } + private void hideDialpadAndSearchUi() { - if (mInSearchUi) { + if (getInSearchUi()) { exitSearchUi(); } hideDialpadFragment(false, true); @@ -499,20 +519,13 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O mSearchViewContainer.animate().withLayer().alpha(0).translationY(-mSearchView.getHeight()) .setDuration(200).setListener(mHideListener); - if (mPhoneFavoriteFragment == null || mPhoneFavoriteFragment.getView() == null) { - mBottomPaddingView.setVisibility(View.VISIBLE); - return; - } - - mPhoneFavoriteFragment.getView().animate().withLayer() + mFragmentsFrame.animate().withLayer() .translationY(-mSearchViewContainer.getHeight()).setDuration(200).setListener( new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { mBottomPaddingView.setVisibility(View.VISIBLE); - if (mPhoneFavoriteFragment.getView() != null) { - mPhoneFavoriteFragment.getView().setTranslationY(0); - } + mFragmentsFrame.setTranslationY(0); } }); } else { @@ -521,8 +534,6 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O } public void showSearchBar() { - - mSearchViewContainer.animate().cancel(); mSearchViewContainer.setAlpha(0); mSearchViewContainer.setTranslationY(-mSearchViewContainer.getHeight()); @@ -534,14 +545,8 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O } }); - // 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) { - mBottomPaddingView.setVisibility(View.GONE); - return; - } - mPhoneFavoriteFragment.getView().setTranslationY(-mSearchViewContainer.getHeight()); - mPhoneFavoriteFragment.getView().animate().withLayer().translationY(0).setDuration(200) + mFragmentsFrame.setTranslationY(-mSearchViewContainer.getHeight()); + mFragmentsFrame.animate().withLayer().translationY(0).setDuration(200) .setListener( new AnimatorListenerAdapter() { @Override @@ -552,7 +557,7 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O } - public void setupFakeActionBarItemsForFavoritesFragment() { + public void setupFakeActionBarItems() { mMenuButton = findViewById(R.id.overflow_menu); if (mMenuButton != null) { mMenuButton.setOnClickListener(this); @@ -762,15 +767,28 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O if (DEBUG) { Log.d(TAG, "Entering search UI - smart dial " + smartDialSearch); } - final String tag = smartDialSearch ? TAG_SMARTDIAL_SEARCH_FRAGMENT : - TAG_REGULAR_SEARCH_FRAGMENT; final FragmentTransaction transaction = getFragmentManager().beginTransaction(); transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); SearchFragment fragment; + if (mInDialpadSearch) { + transaction.remove(mSmartDialSearchFragment); + } else if (mInRegularSearch) { + transaction.remove(mRegularSearchFragment); + } else { + transaction.remove(mPhoneFavoriteFragment); + } + + final String tag; + if (smartDialSearch) { + tag = TAG_SMARTDIAL_SEARCH_FRAGMENT; + } else { + tag = TAG_REGULAR_SEARCH_FRAGMENT; + } + mInDialpadSearch = smartDialSearch; + mInRegularSearch = !smartDialSearch; - transaction.remove(mPhoneFavoriteFragment); fragment = (SearchFragment) getFragmentManager().findFragmentByTag(tag); if (fragment == null) { if (smartDialSearch) { @@ -778,23 +796,22 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O } else { fragment = new RegularSearchFragment(); } - transaction.replace(R.id.dialtacts_frame, fragment, tag); - } else { - transaction.attach(fragment); } - + transaction.replace(R.id.dialtacts_frame, fragment, tag); transaction.addToBackStack(null); fragment.setQueryString(query, false); transaction.commit(); - mInSearchUi = true; } /** * Hides the search fragment */ private void exitSearchUi() { - getFragmentManager().popBackStack(); - mInSearchUi = false; + // Go all the way back to the favorites fragment, regardless of how many times we + // transitioned between search fragments + final BackStackEntry entry = getFragmentManager().getBackStackEntryAt(0); + getFragmentManager().popBackStack(0, FragmentManager.POP_BACK_STACK_INCLUSIVE); + setNotInSearchUi(); } /** Returns an Intent to launch Call Settings screen */ @@ -809,7 +826,7 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O public void onBackPressed() { if (mDialpadFragment != null && mDialpadFragment.isVisible()) { hideDialpadFragment(true, false); - } else if (mInSearchUi) { + } else if (getInSearchUi()) { mSearchView.setText(null); mDialpadFragment.clearDialpad(); } else if (isTaskRoot()) { @@ -852,11 +869,6 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O } @Override - public void onPhoneFavoriteFragmentStarted() { - setupFakeActionBarItemsForFavoritesFragment(); - } - - @Override public void onDialpadFragmentStarted() { setupFakeActionBarItemsForDialpadFragment(); } diff --git a/src/com/android/dialer/list/PhoneFavoriteFragment.java b/src/com/android/dialer/list/PhoneFavoriteFragment.java index efbee9b63..11889bf8f 100644 --- a/src/com/android/dialer/list/PhoneFavoriteFragment.java +++ b/src/com/android/dialer/list/PhoneFavoriteFragment.java @@ -77,10 +77,6 @@ public class PhoneFavoriteFragment extends Fragment implements OnItemClickListen */ private static int LOADER_ID_CONTACT_TILE = 1; - public interface OnPhoneFavoriteFragmentStartedListener { - public void onPhoneFavoriteFragmentStarted(); - } - public interface OnShowAllContactsListener { public void onShowAllContacts(); } @@ -260,13 +256,6 @@ public class PhoneFavoriteFragment extends Fragment implements OnItemClickListen final Activity activity = getActivity(); try { - ((OnPhoneFavoriteFragmentStartedListener) activity).onPhoneFavoriteFragmentStarted(); - } catch (ClassCastException e) { - throw new ClassCastException(activity.toString() - + " must implement OnPhoneFavoriteFragmentStartedListener"); - } - - try { mActivityScrollListener = (OnListFragmentScrolledListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() |