From f53ba7be0531904a25c15f69c8e1bfdea88be869 Mon Sep 17 00:00:00 2001 From: calderwoodra Date: Mon, 12 Mar 2018 18:30:32 -0700 Subject: Keyboard and search now close when appropriate. Keyboard should close when: - requeting permission - placing a call - leaving the app Search should close when: - placing a call - leaving the app Bug: 74235853 Test: search closing onPause tests already exist (MainActivityOldPeerSearchIntegrationTest#placingCallFromSearchClosesSearch) PiperOrigin-RevId: 188812026 Change-Id: Iaee084c59b4c514d10375deff5d73d5a456ef9df --- .../dialer/main/impl/MainSearchController.java | 32 ++++++++++++++++++++-- .../dialer/main/impl/OldMainActivityPeer.java | 9 +++++- .../main/impl/toolbar/SearchBarListener.java | 7 +++++ 3 files changed, 45 insertions(+), 3 deletions(-) (limited to 'java/com/android/dialer/main') diff --git a/java/com/android/dialer/main/impl/MainSearchController.java b/java/com/android/dialer/main/impl/MainSearchController.java index 7d57f9867..92e5651f8 100644 --- a/java/com/android/dialer/main/impl/MainSearchController.java +++ b/java/com/android/dialer/main/impl/MainSearchController.java @@ -86,6 +86,14 @@ public class MainSearchController implements SearchBarListener { private final List onSearchShowListenerList = new ArrayList<>(); + /** + * True when an action happens that closes search (like leaving the app or placing a call). We + * want to wait until onPause is called otherwise the transition will look extremely janky. + */ + private boolean closeSearchOnPause; + + private boolean requestingPermission; + public MainSearchController( MainActivity mainActivity, BottomNavBar bottomNav, @@ -443,16 +451,36 @@ public class MainSearchController implements SearchBarListener { return false; } + @Override + public void onActivityPause() { + if (closeSearchOnPause) { + closeSearchOnPause = false; + if (isInSearch()) { + closeSearch(false); + } + } + } + @Override public void onUserLeaveHint() { if (isInSearch()) { - closeSearch(false); + // Requesting a permission causes this to be called and we want search to remain open when + // that happens. Otherwise, close search. + closeSearchOnPause = !requestingPermission; + + // Always hide the keyboard when the user leaves dialer (including permission requests) + toolbar.hideKeyboard(); } } @Override public void onCallPlacedFromSearch() { - closeSearch(false); + closeSearchOnPause = true; + } + + @Override + public void requestingPermission() { + requestingPermission = true; } public void onVoiceResults(int resultCode, Intent data) { diff --git a/java/com/android/dialer/main/impl/OldMainActivityPeer.java b/java/com/android/dialer/main/impl/OldMainActivityPeer.java index 3c335b380..b6176464b 100644 --- a/java/com/android/dialer/main/impl/OldMainActivityPeer.java +++ b/java/com/android/dialer/main/impl/OldMainActivityPeer.java @@ -447,7 +447,9 @@ public class OldMainActivityPeer implements MainActivityPeer, FragmentUtilListen } @Override - public void onActivityPause() {} + public void onActivityPause() { + searchController.onActivityPause(); + } @Override public void onActivityStop() { @@ -676,6 +678,11 @@ public class OldMainActivityPeer implements MainActivityPeer, FragmentUtilListen // TODO(calderwoodra): logging searchController.onCallPlacedFromSearch(); } + + @Override + public void requestingPermission() { + searchController.requestingPermission(); + } } /** @see DialpadFragment.HostInterface */ diff --git a/java/com/android/dialer/main/impl/toolbar/SearchBarListener.java b/java/com/android/dialer/main/impl/toolbar/SearchBarListener.java index 857c4b9c9..d01fe3a39 100644 --- a/java/com/android/dialer/main/impl/toolbar/SearchBarListener.java +++ b/java/com/android/dialer/main/impl/toolbar/SearchBarListener.java @@ -16,6 +16,7 @@ package com.android.dialer.main.impl.toolbar; +import android.app.Activity; import android.support.v7.app.AppCompatActivity; import android.view.MenuItem; @@ -37,12 +38,18 @@ public interface SearchBarListener { /** Called when a toolbar menu item is clicked. */ boolean onMenuItemClicked(MenuItem menuItem); + /** Called when {@link Activity#onPause()} is called. */ + void onActivityPause(); + /** Called when {@link AppCompatActivity#onUserLeaveHint()} is called. */ void onUserLeaveHint(); /** Called when the user places a call from search (regular or dialpad). */ void onCallPlacedFromSearch(); + /** Called when a permission is about to be requested. */ + void requestingPermission(); + /** Interface for returning voice results to the search bar. */ interface VoiceSearchResultCallback { -- cgit v1.2.3