summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcalderwoodra <calderwoodra@google.com>2017-09-08 09:20:08 -0700
committerEric Erfanian <erfanian@google.com>2017-09-11 13:48:47 -0700
commit50715261119b30e6e23aaf58fcf3e28f16430f3d (patch)
treeff70d3252b4b25337cc0ad18933e8fab02adc8a0
parentc18ca0fba4375134107c6e71dab9bd0f85a2c968 (diff)
This is a rollforward of cl/167332236
Improved behavior of back button in search ui. Pressing the back button in the search UI now functions as follows: - If the keyboard is opened, the keyboard is minimized - If the dialpad is opened, the dialpad is closed - If the keyboard and dialpad is closed, the search ui is closed Our existing behavior was dependent on whether a query had been built yet. basically, if the user pressed back with no query selected, the search ui was closed. From the bugbash: 7. No scroll bar in the search results if the results do not fill the entire view. The keyboard overlaps the results and there is no way to get to the enter list without dismissing the keyboard. 10. Dismiss the keyboard on tapping the down arrow on the keyboard. Arrow points down but works like back button Bug: 62685859,63691995,63939331,64137632,64902476 Test: manual PiperOrigin-RevId: 168004913 Change-Id: Ia566fce6d90454a3eae6ecccfa81ce7e909e878f
-rw-r--r--java/com/android/dialer/app/DialtactsActivity.java113
-rw-r--r--java/com/android/dialer/app/widget/ActionBarController.java28
-rw-r--r--java/com/android/dialer/dialpadview/DialpadFragment.java12
3 files changed, 53 insertions, 100 deletions
diff --git a/java/com/android/dialer/app/DialtactsActivity.java b/java/com/android/dialer/app/DialtactsActivity.java
index 13b6eb92c..7f5a9b94a 100644
--- a/java/com/android/dialer/app/DialtactsActivity.java
+++ b/java/com/android/dialer/app/DialtactsActivity.java
@@ -49,7 +49,6 @@ import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.DragEvent;
import android.view.Gravity;
-import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
@@ -169,6 +168,7 @@ public class DialtactsActivity extends TransactionSafeActivity
private static final String TAG = "DialtactsActivity";
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_IN_NEW_SEARCH_UI = "in_new_search_ui";
private static final String KEY_SEARCH_QUERY = "search_query";
private static final String KEY_FIRST_LAUNCH = "first_launch";
private static final String KEY_WAS_CONFIGURATION_CHANGE = "was_configuration_change";
@@ -213,6 +213,8 @@ public class DialtactsActivity extends TransactionSafeActivity
*/
private boolean mStateSaved;
+ private boolean mIsKeyboardOpen;
+ private boolean mInNewSearch;
private boolean mIsRestarting;
private boolean mInDialpadSearch;
private boolean mInRegularSearch;
@@ -330,27 +332,6 @@ public class DialtactsActivity extends TransactionSafeActivity
private int mActionBarHeight;
private int mPreviouslySelectedTabIndex;
- /** 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) {
- if (TextUtils.isEmpty(mSearchView.getText().toString())) {
- // If the search term is empty, close the search UI.
- PerformanceReport.recordClick(UiAction.Type.CLOSE_SEARCH_WITH_HIDE_BUTTON);
- maybeExitSearchUi();
- } else {
- // If the search term is not empty, show the dialpad fab.
- if (!mFloatingActionButtonController.isVisible()) {
- PerformanceReport.recordClick(UiAction.Type.HIDE_KEYBOARD_IN_SEARCH);
- }
- showFabInSearchUi();
- }
- }
- return false;
- }
- };
/**
* The text returned from a voice search query. Set in {@link #onActivityResult} and used in
@@ -410,30 +391,20 @@ public class DialtactsActivity extends TransactionSafeActivity
SearchEditTextLayout searchEditTextLayout =
actionBar.getCustomView().findViewById(R.id.search_view_container);
- searchEditTextLayout.setPreImeKeyListener(mSearchEditTextLayoutListener);
mActionBarController = new ActionBarController(this, searchEditTextLayout);
mSearchView = searchEditTextLayout.findViewById(R.id.search_view);
mSearchView.addTextChangedListener(mPhoneSearchQueryTextListener);
mSearchView.setHint(getSearchBoxHint());
+
mVoiceSearchButton = searchEditTextLayout.findViewById(R.id.voice_search_button);
searchEditTextLayout
.findViewById(R.id.search_box_collapsed)
.setOnClickListener(mSearchViewOnClickListener);
- searchEditTextLayout.setCallback(
- new SearchEditTextLayout.Callback() {
- @Override
- public void onBackButtonClicked() {
- onBackPressed();
- }
-
- @Override
- public void onSearchViewClicked() {
- // Hide FAB, as the keyboard is shown.
- mFloatingActionButtonController.scaleOut();
- }
- });
+ searchEditTextLayout
+ .findViewById(R.id.search_back_button)
+ .setOnClickListener(v -> exitSearchUi());
mIsLandscape =
getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
@@ -460,6 +431,7 @@ public class DialtactsActivity extends TransactionSafeActivity
mSearchQuery = savedInstanceState.getString(KEY_SEARCH_QUERY);
mInRegularSearch = savedInstanceState.getBoolean(KEY_IN_REGULAR_SEARCH_UI);
mInDialpadSearch = savedInstanceState.getBoolean(KEY_IN_DIALPAD_SEARCH_UI);
+ mInNewSearch = savedInstanceState.getBoolean(KEY_IN_NEW_SEARCH_UI);
mFirstLaunch = savedInstanceState.getBoolean(KEY_FIRST_LAUNCH);
mWasConfigurationChange = savedInstanceState.getBoolean(KEY_WAS_CONFIGURATION_CHANGE);
mShowDialpadOnResume = savedInstanceState.getBoolean(KEY_IS_DIALPAD_SHOWN);
@@ -654,6 +626,7 @@ public class DialtactsActivity extends TransactionSafeActivity
outState.putString(KEY_SEARCH_QUERY, mSearchQuery);
outState.putBoolean(KEY_IN_REGULAR_SEARCH_UI, mInRegularSearch);
outState.putBoolean(KEY_IN_DIALPAD_SEARCH_UI, mInDialpadSearch);
+ outState.putBoolean(KEY_IN_NEW_SEARCH_UI, mInNewSearch);
outState.putBoolean(KEY_FIRST_LAUNCH, mFirstLaunch);
outState.putBoolean(KEY_IS_DIALPAD_SHOWN, mIsDialpadShown);
outState.putBoolean(KEY_WAS_CONFIGURATION_CHANGE, isChangingConfigurations());
@@ -893,14 +866,19 @@ public class DialtactsActivity extends TransactionSafeActivity
updateSearchFragmentPosition();
}
+ @Override
+ public void onCallPlacedFromDialpad() {
+ hideDialpadFragment(false /* animate */, true /*clearDialpad */);
+ exitSearchUi();
+ }
+
/**
* Initiates animations and other visual updates to hide the dialpad. The fragment is hidden in a
* callback after the hide animation ends.
*
* @see #commitDialpadFragmentHide
*/
- @Override
- public void hideDialpadFragment(boolean animate, boolean clearDialpad) {
+ private void hideDialpadFragment(boolean animate, boolean clearDialpad) {
LogUtil.enterBlock("DialtactsActivity.hideDialpadFragment");
if (mDialpadFragment == null || mDialpadFragment.getView() == null) {
return;
@@ -935,11 +913,6 @@ public class DialtactsActivity extends TransactionSafeActivity
mActionBarController.onDialpadDown();
- if (isInSearchUi()) {
- if (TextUtils.isEmpty(mSearchQuery)) {
- exitSearchUi();
- }
- }
// reset the title to normal.
setTitle(R.string.launcherActivityLabel);
}
@@ -987,7 +960,7 @@ public class DialtactsActivity extends TransactionSafeActivity
@Override
public boolean isInSearchUi() {
- return mInDialpadSearch || mInRegularSearch;
+ return mInDialpadSearch || mInRegularSearch || mInNewSearch;
}
@Override
@@ -998,6 +971,7 @@ public class DialtactsActivity extends TransactionSafeActivity
private void setNotInSearchUi() {
mInDialpadSearch = false;
mInRegularSearch = false;
+ mInNewSearch = false;
}
private void hideDialpadAndSearchUi() {
@@ -1171,17 +1145,21 @@ public class DialtactsActivity extends TransactionSafeActivity
}
final String tag;
+ mInDialpadSearch = false;
+ mInRegularSearch = false;
+ mInNewSearch = false;
boolean useNewSearch =
ConfigProviderBindings.get(this).getBoolean("enable_new_search_fragment", false);
if (useNewSearch) {
tag = TAG_NEW_SEARCH_FRAGMENT;
+ mInNewSearch = true;
} else if (smartDialSearch) {
tag = TAG_SMARTDIAL_SEARCH_FRAGMENT;
+ mInDialpadSearch = true;
} else {
tag = TAG_REGULAR_SEARCH_FRAGMENT;
+ mInRegularSearch = true;
}
- mInDialpadSearch = smartDialSearch;
- mInRegularSearch = !smartDialSearch;
mFloatingActionButtonController.scaleOut();
@@ -1304,43 +1282,34 @@ public class DialtactsActivity extends TransactionSafeActivity
return;
}
if (mIsDialpadShown) {
- if (TextUtils.isEmpty(mSearchQuery)
- || (mSmartDialSearchFragment != null
- && mSmartDialSearchFragment.isVisible()
- && mSmartDialSearchFragment.getAdapter().getCount() == 0)) {
- exitSearchUi();
- }
hideDialpadFragment(true, false);
} else if (isInSearchUi()) {
- exitSearchUi();
- DialerUtils.hideInputMethod(mParentLayout);
+ if (mIsKeyboardOpen) {
+ DialerUtils.hideInputMethod(mParentLayout);
+ PerformanceReport.recordClick(UiAction.Type.HIDE_KEYBOARD_IN_SEARCH);
+ } else {
+ exitSearchUi();
+ }
} else {
super.onBackPressed();
}
}
- private void maybeEnterSearchUi() {
- if (!isInSearchUi()) {
- enterSearchUi(true /* isSmartDial */, mSearchQuery, false);
+ @Override
+ public void onConfigurationChanged(Configuration configuration) {
+ super.onConfigurationChanged(configuration);
+ // Checks whether a hardware keyboard is available
+ if (configuration.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) {
+ mIsKeyboardOpen = true;
+ } else if (configuration.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES) {
+ mIsKeyboardOpen = false;
}
}
- /** @return True if the search UI was exited, false otherwise */
- private boolean maybeExitSearchUi() {
- if (isInSearchUi() && TextUtils.isEmpty(mSearchQuery)) {
- exitSearchUi();
- DialerUtils.hideInputMethod(mParentLayout);
- return true;
+ private void maybeEnterSearchUi() {
+ if (!isInSearchUi()) {
+ enterSearchUi(true /* isSmartDial */, mSearchQuery, false);
}
- return false;
- }
-
- private void showFabInSearchUi() {
- mFloatingActionButtonController.changeIcon(
- getResources().getDrawable(R.drawable.quantum_ic_dialpad_white_24, null),
- getResources().getString(R.string.action_menu_dialpad_button));
- mFloatingActionButtonController.align(getFabAlignment(), false /* animate */);
- mFloatingActionButtonController.scaleIn(FAB_SCALE_IN_DELAY_MS);
}
@Override
diff --git a/java/com/android/dialer/app/widget/ActionBarController.java b/java/com/android/dialer/app/widget/ActionBarController.java
index c1b4cc2b4..3daa0e2d4 100644
--- a/java/com/android/dialer/app/widget/ActionBarController.java
+++ b/java/com/android/dialer/app/widget/ActionBarController.java
@@ -49,18 +49,6 @@ public class ActionBarController {
}
};
- private final AnimationCallback mFadeInCallback =
- new AnimationCallback() {
- @Override
- public void onAnimationEnd() {
- slideActionBar(false /* slideUp */, false /* animate */);
- }
-
- @Override
- public void onAnimationCancel() {
- slideActionBar(false /* slideUp */, false /* animate */);
- }
- };
private ValueAnimator mAnimator;
public ActionBarController(ActivityUi activityUi, SearchEditTextLayout searchBox) {
@@ -112,17 +100,13 @@ public class ActionBarController {
mSearchBox.isFadedOut(),
mSearchBox.isExpanded());
if (mActivityUi.isInSearchUi()) {
- if (mActivityUi.hasSearchQuery()) {
- if (mSearchBox.isFadedOut()) {
- mSearchBox.setVisible(true);
- }
- if (!mSearchBox.isExpanded()) {
- mSearchBox.expand(false /* animate */, false /* requestFocus */);
- }
- slideActionBar(false /* slideUp */, true /* animate */);
- } else {
- mSearchBox.fadeIn(mFadeInCallback);
+ if (mSearchBox.isFadedOut()) {
+ mSearchBox.setVisible(true);
+ }
+ if (!mSearchBox.isExpanded()) {
+ mSearchBox.expand(false /* animate */, false /* requestFocus */);
}
+ slideActionBar(false /* slideUp */, true /* animate */);
}
}
diff --git a/java/com/android/dialer/dialpadview/DialpadFragment.java b/java/com/android/dialer/dialpadview/DialpadFragment.java
index 86a83796e..837c3af90 100644
--- a/java/com/android/dialer/dialpadview/DialpadFragment.java
+++ b/java/com/android/dialer/dialpadview/DialpadFragment.java
@@ -1001,12 +1001,12 @@ public class DialpadFragment extends Fragment
DialerUtils.startActivityWithErrorToast(
getActivity(),
new CallIntentBuilder(CallUtil.getVoicemailUri(), CallInitiationType.Type.DIALPAD).build());
- hideAndClearDialpad(false);
+ hideAndClearDialpad();
}
- private void hideAndClearDialpad(boolean animate) {
+ private void hideAndClearDialpad() {
LogUtil.enterBlock("DialpadFragment.hideAndClearDialpad");
- FragmentUtils.getParentUnsafe(this, DialpadListener.class).hideDialpadFragment(animate, true);
+ FragmentUtils.getParentUnsafe(this, DialpadListener.class).onCallPlacedFromDialpad();
}
/**
@@ -1053,7 +1053,7 @@ public class DialpadFragment extends Fragment
final Intent intent =
new CallIntentBuilder(number, CallInitiationType.Type.DIALPAD).build();
DialerUtils.startActivityWithErrorToast(getActivity(), intent);
- hideAndClearDialpad(false);
+ hideAndClearDialpad();
}
}
}
@@ -1297,7 +1297,7 @@ public class DialpadFragment extends Fragment
return true;
} else if (resId == R.id.menu_call_with_note) {
CallSubjectDialog.start(getActivity(), mDigits.getText().toString());
- hideAndClearDialpad(false);
+ hideAndClearDialpad();
return true;
} else {
return false;
@@ -1710,7 +1710,7 @@ public class DialpadFragment extends Fragment
void onDialpadShown();
- void hideDialpadFragment(boolean animate, boolean value);
+ void onCallPlacedFromDialpad();
}
/** Callback for async lookup of the last number dialed. */