summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrew Lee <anwlee@google.com>2015-06-17 23:06:48 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2015-06-17 23:06:49 +0000
commite76e55547246f00563c865fe566e86f60fd4af54 (patch)
tree2b6352c767d377acc94056fc0a6fe612398b7515 /src
parent8a4d0c51fb90e91d758288835792fb03fe8b26eb (diff)
parent6324f707bc35d9d3336f58f6004d1f3b1e6de1a3 (diff)
Merge "Fix FAB state and transitions." into mnc-dev
Diffstat (limited to 'src')
-rw-r--r--src/com/android/dialer/DialtactsActivity.java77
-rw-r--r--src/com/android/dialer/list/SearchFragment.java8
-rw-r--r--src/com/android/dialer/widget/SearchEditTextLayout.java22
3 files changed, 81 insertions, 26 deletions
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index 47e52342a..fc0f1fb24 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -84,7 +84,7 @@ import com.android.dialer.util.IntentUtil;
import com.android.dialer.util.DialerUtils;
import com.android.dialer.widget.ActionBarController;
import com.android.dialer.widget.SearchEditTextLayout;
-import com.android.dialer.widget.SearchEditTextLayout.OnBackButtonClickedListener;
+import com.android.dialer.widget.SearchEditTextLayout.Callback;
import com.android.dialerbind.DatabaseHelperManager;
import com.android.phone.common.animation.AnimUtils;
import com.android.phone.common.animation.AnimationListenerAdapter;
@@ -136,6 +136,8 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
private static final int ACTIVITY_REQUEST_CODE_VOICE_SEARCH = 1;
+ private static final int FAB_SCALE_IN_DELAY_MS = 300;
+
private FrameLayout mParentLayout;
/**
@@ -338,14 +340,19 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
};
/**
- * If the search term is empty and the user closes the soft keyboard, close the search UI.
+ * Handles the user closing the soft keyboard.
*/
private final View.OnKeyListener mSearchEditTextLayoutListener = new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
- if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN &&
- TextUtils.isEmpty(mSearchView.getText().toString())) {
- maybeExitSearchUi();
+ if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
+ if (TextUtils.isEmpty(mSearchView.getText().toString())) {
+ // If the search term is empty, close the search UI.
+ maybeExitSearchUi();
+ } else {
+ // If the search term is not empty, show the dialpad fab.
+ showFabInSearchUi();
+ }
}
return false;
}
@@ -394,11 +401,17 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
.setOnClickListener(mSearchViewOnClickListener);
searchEditTextLayout.findViewById(R.id.search_box_start_search)
.setOnClickListener(mSearchViewOnClickListener);
- searchEditTextLayout.setOnBackButtonClickedListener(new OnBackButtonClickedListener() {
+ searchEditTextLayout.setCallback(new SearchEditTextLayout.Callback() {
@Override
public void onBackButtonClicked() {
onBackPressed();
}
+
+ @Override
+ public void onSearchViewClicked() {
+ // Hide FAB, as the keyboard is shown.
+ mFloatingActionButtonController.scaleOut();
+ }
});
mIsLandscape = getResources().getConfiguration().orientation
@@ -463,7 +476,8 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
observer.removeOnGlobalLayoutListener(this);
int screenWidth = mParentLayout.getWidth();
mFloatingActionButtonController.setScreenWidth(screenWidth);
- updateFloatingActionButtonControllerAlignment(false /* animate */);
+ mFloatingActionButtonController.align(
+ getFabAlignment(), false /* animate */);
}
});
@@ -527,7 +541,7 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
}
prepareVoiceSearchButton();
mDialerDatabaseHelper.startSmartDialUpdateThread();
- updateFloatingActionButtonControllerAlignment(false /* animate */);
+ mFloatingActionButtonController.align(getFabAlignment(), false /* animate */);
Trace.endSection();
}
@@ -744,7 +758,7 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
updateSearchFragmentPosition();
- updateFloatingActionButtonControllerAlignment(animate);
+ mFloatingActionButtonController.align(getFabAlignment(), animate);
if (animate) {
mDialpadFragment.getView().startAnimation(mSlideOut);
} else {
@@ -948,6 +962,8 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
mInDialpadSearch = smartDialSearch;
mInRegularSearch = !smartDialSearch;
+ mFloatingActionButtonController.scaleOut();
+
SearchFragment fragment = (SearchFragment) getFragmentManager().findFragmentByTag(tag);
if (animate) {
transaction.setCustomAnimations(android.R.animator.fade_in, 0);
@@ -959,6 +975,15 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
fragment = new SmartDialSearchFragment();
} else {
fragment = new RegularSearchFragment();
+ fragment.setOnTouchListener(new View.OnTouchListener() {
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ // Show the FAB when the user touches the lists fragment and the soft
+ // keyboard is hidden.
+ showFabInSearchUi();
+ return false;
+ }
+ });
}
transaction.add(R.id.dialtacts_frame, fragment, tag);
} else {
@@ -995,6 +1020,14 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
setNotInSearchUi();
+ // Restore the FAB for the lists fragment.
+ if (getFabAlignment() != FloatingActionButtonController.ALIGN_END) {
+ mFloatingActionButtonController.setVisible(false);
+ }
+ mFloatingActionButtonController.scaleIn(FAB_SCALE_IN_DELAY_MS);
+ onPageScrolled(mListsFragment.getCurrentTabIndex(), 0 /* offset */, 0 /* pixelOffset */);
+ onPageSelected(mListsFragment.getCurrentTabIndex());
+
final FragmentTransaction transaction = getFragmentManager().beginTransaction();
if (mSmartDialSearchFragment != null) {
transaction.remove(mSmartDialSearchFragment);
@@ -1055,6 +1088,14 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
return false;
}
+ private void showFabInSearchUi() {
+ mFloatingActionButtonController.changeIcon(
+ getResources().getDrawable(R.drawable.fab_ic_dial),
+ getResources().getString(R.string.action_menu_dialpad_button));
+ mFloatingActionButtonController.align(getFabAlignment(), false /* animate */);
+ mFloatingActionButtonController.scaleIn(FAB_SCALE_IN_DELAY_MS);
+ }
+
@Override
public void onDialpadQueryChanged(String query) {
if (mSmartDialSearchFragment != null) {
@@ -1251,16 +1292,12 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
return mActionBarHeight;
}
- /**
- * Updates controller based on currently known information.
- *
- * @param animate Whether or not to animate the transition.
- */
- private void updateFloatingActionButtonControllerAlignment(boolean animate) {
- int align = (!mIsLandscape &&
- mListsFragment.getCurrentTabIndex() == ListsFragment.TAB_INDEX_SPEED_DIAL) ?
- FloatingActionButtonController.ALIGN_MIDDLE :
- FloatingActionButtonController.ALIGN_END;
- mFloatingActionButtonController.align(align, 0 /* offsetX */, 0 /* offsetY */, animate);
+
+ private int getFabAlignment() {
+ if (!mIsLandscape && !isInSearchUi() &&
+ mListsFragment.getCurrentTabIndex() == ListsFragment.TAB_INDEX_SPEED_DIAL) {
+ return FloatingActionButtonController.ALIGN_MIDDLE;
+ }
+ return FloatingActionButtonController.ALIGN_END;
}
}
diff --git a/src/com/android/dialer/list/SearchFragment.java b/src/com/android/dialer/list/SearchFragment.java
index f86c0e5cf..78c3ad3c1 100644
--- a/src/com/android/dialer/list/SearchFragment.java
+++ b/src/com/android/dialer/list/SearchFragment.java
@@ -50,6 +50,7 @@ public class SearchFragment extends PhoneNumberPickerFragment {
private static final String TAG = SearchFragment.class.getSimpleName();
private OnListFragmentScrolledListener mActivityScrollListener;
+ private View.OnTouchListener mActivityOnTouchListener;
/*
* Stores the untouched user-entered string that is used to populate the add to contacts
@@ -123,6 +124,9 @@ public class SearchFragment extends PhoneNumberPickerFragment {
int totalItemCount) {
}
});
+ if (mActivityOnTouchListener != null) {
+ listView.setOnTouchListener(mActivityOnTouchListener);
+ }
updatePosition(false /* animate */);
}
@@ -298,4 +302,8 @@ public class SearchFragment extends PhoneNumberPickerFragment {
getAdapter().setQueryString(null);
}
}
+
+ public void setOnTouchListener(View.OnTouchListener onTouchListener) {
+ mActivityOnTouchListener = onTouchListener;
+ }
}
diff --git a/src/com/android/dialer/widget/SearchEditTextLayout.java b/src/com/android/dialer/widget/SearchEditTextLayout.java
index f1fa9868a..544749f33 100644
--- a/src/com/android/dialer/widget/SearchEditTextLayout.java
+++ b/src/com/android/dialer/widget/SearchEditTextLayout.java
@@ -61,13 +61,14 @@ public class SearchEditTextLayout extends FrameLayout {
private ValueAnimator mAnimator;
- private OnBackButtonClickedListener mOnBackButtonClickedListener;
+ private Callback mCallback;
/**
* Listener for the back button next to the search view being pressed
*/
- public interface OnBackButtonClickedListener {
+ public interface Callback {
public void onBackButtonClicked();
+ public void onSearchViewClicked();
}
public SearchEditTextLayout(Context context, AttributeSet attrs) {
@@ -78,8 +79,8 @@ public class SearchEditTextLayout extends FrameLayout {
mPreImeKeyListener = listener;
}
- public void setOnBackButtonClickedListener(OnBackButtonClickedListener listener) {
- mOnBackButtonClickedListener = listener;
+ public void setCallback(Callback listener) {
+ mCallback = listener;
}
@Override
@@ -126,6 +127,15 @@ public class SearchEditTextLayout extends FrameLayout {
}
});
+ mSearchView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (mCallback != null) {
+ mCallback.onSearchViewClicked();
+ }
+ }
+ });
+
mSearchView.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
@@ -151,8 +161,8 @@ public class SearchEditTextLayout extends FrameLayout {
findViewById(R.id.search_back_button).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
- if (mOnBackButtonClickedListener != null) {
- mOnBackButtonClickedListener.onBackButtonClicked();
+ if (mCallback != null) {
+ mCallback.onBackButtonClicked();
}
}
});