diff options
Diffstat (limited to 'java/com/android/dialer/main')
4 files changed, 96 insertions, 15 deletions
diff --git a/java/com/android/dialer/main/impl/MainSearchController.java b/java/com/android/dialer/main/impl/MainSearchController.java index 33e0981dd..7d380d75d 100644 --- a/java/com/android/dialer/main/impl/MainSearchController.java +++ b/java/com/android/dialer/main/impl/MainSearchController.java @@ -52,6 +52,7 @@ import com.android.dialer.searchfragment.list.NewSearchFragment.SearchFragmentLi import com.android.dialer.smartdial.util.SmartDialNameMatcher; import com.google.common.base.Optional; import java.util.ArrayList; +import java.util.List; /** * Search controller for handling all the logic related to entering and exiting the search UI. @@ -83,6 +84,8 @@ public class MainSearchController implements SearchBarListener { private final MainToolbar toolbar; private final View toolbarShadow; + private final List<OnSearchShowListener> onSearchShowListenerList = new ArrayList<>(); + public MainSearchController( MainActivity mainActivity, BottomNavBar bottomNav, @@ -125,7 +128,9 @@ public class MainSearchController implements SearchBarListener { // TODO(a bug): zero suggest results aren't actually shown but this enabled the nearby // places promo to be shown. searchFragment = NewSearchFragment.newInstance(/* showZeroSuggest=*/ true); - transaction.add(R.id.fragment_container, searchFragment, SEARCH_FRAGMENT_TAG); + transaction.replace(R.id.fragment_container, searchFragment, SEARCH_FRAGMENT_TAG); + transaction.addToBackStack(null); + transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); } else if (!isSearchVisible()) { transaction.show(searchFragment); } @@ -142,6 +147,8 @@ public class MainSearchController implements SearchBarListener { transaction.show(dialpadFragment); } transaction.commit(); + + notifyListenersOnSearchOpen(); } /** @@ -282,12 +289,23 @@ public class MainSearchController implements SearchBarListener { showBottomNav(); toolbar.collapse(animate); toolbarShadow.setVisibility(View.GONE); - mainActivity.getFragmentManager().beginTransaction().remove(getSearchFragment()).commit(); + mainActivity.getFragmentManager().popBackStack(); // Clear the dialpad so the phone number isn't persisted between search sessions. - if (getDialpadFragment() != null) { - getDialpadFragment().clearDialpad(); + DialpadFragment dialpadFragment = getDialpadFragment(); + if (dialpadFragment != null) { + // Temporarily disable accessibility when we clear the dialpad, since it should be + // invisible and should not announce anything. + dialpadFragment + .getDigitsWidget() + .setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO); + dialpadFragment.clearDialpad(); + dialpadFragment + .getDigitsWidget() + .setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_AUTO); } + + notifyListenersOnSearchClose(); } @Nullable @@ -348,7 +366,9 @@ public class MainSearchController implements SearchBarListener { // TODO(a bug): zero suggest results aren't actually shown but this enabled the nearby // places promo to be shown. searchFragment = NewSearchFragment.newInstance(true); - transaction.add(R.id.fragment_container, searchFragment, SEARCH_FRAGMENT_TAG); + transaction.replace(R.id.fragment_container, searchFragment, SEARCH_FRAGMENT_TAG); + transaction.addToBackStack(null); + transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); } else if (!isSearchVisible()) { transaction.show(getSearchFragment()); } @@ -356,6 +376,8 @@ public class MainSearchController implements SearchBarListener { searchFragment.setQuery( query.isPresent() ? query.get() : "", CallInitiationType.Type.REGULAR_SEARCH); transaction.commit(); + + notifyListenersOnSearchOpen(); } @Override @@ -455,4 +477,31 @@ public class MainSearchController implements SearchBarListener { toolbar.slideUp(false); } } + + public void addOnSearchShowListener(OnSearchShowListener listener) { + onSearchShowListenerList.add(listener); + } + + public void removeOnSearchShowListener(OnSearchShowListener listener) { + onSearchShowListenerList.remove(listener); + } + + private void notifyListenersOnSearchOpen() { + for (OnSearchShowListener listener : onSearchShowListenerList) { + listener.onSearchOpen(); + } + } + + private void notifyListenersOnSearchClose() { + for (OnSearchShowListener listener : onSearchShowListenerList) { + listener.onSearchClose(); + } + } + + /** Listener for search fragment show states change */ + public interface OnSearchShowListener { + void onSearchOpen(); + + void onSearchClose(); + } } diff --git a/java/com/android/dialer/main/impl/OldMainActivityPeer.java b/java/com/android/dialer/main/impl/OldMainActivityPeer.java index 9ceea28bf..a05ef6d16 100644 --- a/java/com/android/dialer/main/impl/OldMainActivityPeer.java +++ b/java/com/android/dialer/main/impl/OldMainActivityPeer.java @@ -201,7 +201,8 @@ public class OldMainActivityPeer implements MainActivityPeer, FragmentUtilListen bottomNav = mainActivity.findViewById(R.id.bottom_nav_bar); MainBottomNavBarBottomNavTabListener bottomNavTabListener = - new MainBottomNavBarBottomNavTabListener(mainActivity, mainActivity.getFragmentManager()); + new MainBottomNavBarBottomNavTabListener( + mainActivity, mainActivity.getFragmentManager(), fab); bottomNav.addOnTabSelectedListener(bottomNavTabListener); // TODO(uabdullah): Handle case of when a sim is inserted/removed while the activity is open. boolean showVoicemailTab = canVoicemailTabBeShown(mainActivity); @@ -251,7 +252,7 @@ public class OldMainActivityPeer implements MainActivityPeer, FragmentUtilListen * Check and return whether the voicemail tab should be shown or not. This includes the following * criteria under which we show the voicemail tab: * <li>The voicemail number exists (e.g we are able to dial into listen to voicemail or press and - * hold 1) + * hold 1) (TODO (uabdullah): Handle this case properly) * <li>Visual voicemail is enabled from the settings tab * <li>Visual voicemail carrier is supported by dialer * <li>There is no voicemail carrier app installed. @@ -264,14 +265,18 @@ public class OldMainActivityPeer implements MainActivityPeer, FragmentUtilListen PhoneAccountHandle defaultUserSelectedAccount = TelecomUtil.getDefaultOutgoingPhoneAccount(context, PhoneAccount.SCHEME_VOICEMAIL); - if (isVoicemailAvailable(context, defaultUserSelectedAccount)) { - return true; + if (!isVoicemailAvailable(context, defaultUserSelectedAccount)) { + LogUtil.i("OldMainActivityPeer.canVoicemailTabBeShown", "Voicemail is not available"); + return false; } + if (VoicemailComponent.get(context) .getVoicemailClient() .isVoicemailEnabled(context, defaultUserSelectedAccount)) { + LogUtil.i("OldMainActivityPeer.canVoicemailTabBeShown", "Voicemail is not enabled"); return true; } + LogUtil.i("OldMainActivityPeer.canVoicemailTabBeShown", "returning false"); return false; } @@ -674,6 +679,7 @@ public class OldMainActivityPeer implements MainActivityPeer, FragmentUtilListen @Override public void enableFloatingButton(boolean enabled) { + LogUtil.i("MainCallLogHost.enableFloatingButton", "enabled: " + enabled); if (enabled) { fab.show(); } else { @@ -972,7 +978,10 @@ public class OldMainActivityPeer implements MainActivityPeer, FragmentUtilListen /** * Implementation of {@link OnBottomNavTabSelectedListener} that handles logic for showing each of - * the main tabs. + * the main tabs and FAB. + * + * <p>TODO(calderwoodra, uabdullah): Rethink the logic for showing/hiding the FAB when new + * voicemail is ready. */ private static final class MainBottomNavBarBottomNavTabListener implements OnBottomNavTabSelectedListener { @@ -982,17 +991,22 @@ public class OldMainActivityPeer implements MainActivityPeer, FragmentUtilListen private static final String CONTACTS_TAG = "contacts"; private static final String VOICEMAIL_TAG = "voicemail"; - private final FragmentManager fragmentManager; private final Context context; + private final FragmentManager fragmentManager; + private final FloatingActionButton fab; + @TabIndex private int selectedTab = -1; - private MainBottomNavBarBottomNavTabListener(Context context, FragmentManager fragmentManager) { - this.fragmentManager = fragmentManager; + private MainBottomNavBarBottomNavTabListener( + Context context, FragmentManager fragmentManager, FloatingActionButton fab) { this.context = context; + this.fragmentManager = fragmentManager; + this.fab = fab; } @Override public void onSpeedDialSelected() { + LogUtil.enterBlock("MainBottomNavBarBottomNavTabListener.onSpeedDialSelected"); if (selectedTab != TabIndex.SPEED_DIAL) { Logger.get(context).logImpression(DialerImpression.Type.NUI_SWITCH_TAB_TO_FAVORITE); selectedTab = TabIndex.SPEED_DIAL; @@ -1007,10 +1021,12 @@ public class OldMainActivityPeer implements MainActivityPeer, FragmentUtilListen } else { fragmentManager.beginTransaction().show(fragment).commit(); } + fab.show(); } @Override public void onCallLogSelected() { + LogUtil.enterBlock("MainBottomNavBarBottomNavTabListener.onCallLogSelected"); if (selectedTab != TabIndex.CALL_LOG) { Logger.get(context).logImpression(DialerImpression.Type.NUI_SWITCH_TAB_TO_CALL_LOG); selectedTab = TabIndex.CALL_LOG; @@ -1025,10 +1041,12 @@ public class OldMainActivityPeer implements MainActivityPeer, FragmentUtilListen } else { fragmentManager.beginTransaction().show(fragment).commit(); } + fab.show(); } @Override public void onContactsSelected() { + LogUtil.enterBlock("MainBottomNavBarBottomNavTabListener.onContactsSelected"); if (selectedTab != TabIndex.CONTACTS) { Logger.get(context).logImpression(DialerImpression.Type.NUI_SWITCH_TAB_TO_CONTACTS); selectedTab = TabIndex.CONTACTS; @@ -1047,10 +1065,12 @@ public class OldMainActivityPeer implements MainActivityPeer, FragmentUtilListen } else { fragmentManager.beginTransaction().show(fragment).commit(); } + fab.show(); } @Override public void onVoicemailSelected() { + LogUtil.enterBlock("MainBottomNavBarBottomNavTabListener.onVoicemailSelected"); if (selectedTab != TabIndex.VOICEMAIL) { Logger.get(context).logImpression(DialerImpression.Type.NUI_SWITCH_TAB_TO_VOICEMAIL); selectedTab = TabIndex.VOICEMAIL; @@ -1059,13 +1079,16 @@ public class OldMainActivityPeer implements MainActivityPeer, FragmentUtilListen VisualVoicemailCallLogFragment fragment = (VisualVoicemailCallLogFragment) fragmentManager.findFragmentByTag(VOICEMAIL_TAG); if (fragment == null) { + fragment = new VisualVoicemailCallLogFragment(); fragmentManager .beginTransaction() - .add(R.id.fragment_container, new VisualVoicemailCallLogFragment(), VOICEMAIL_TAG) + .add(R.id.fragment_container, fragment, VOICEMAIL_TAG) .commit(); } else { fragmentManager.beginTransaction().show(fragment).commit(); } + fragment.setUserVisibleHint(true); + fragment.onVisible(); } private void hideAllFragments() { @@ -1082,7 +1105,11 @@ public class OldMainActivityPeer implements MainActivityPeer, FragmentUtilListen } if (fragmentManager.findFragmentByTag(VOICEMAIL_TAG) != null) { // Old VisualVoicemailFragment - transaction.hide(fragmentManager.findFragmentByTag(VOICEMAIL_TAG)); + VisualVoicemailCallLogFragment fragment = + (VisualVoicemailCallLogFragment) fragmentManager.findFragmentByTag(VOICEMAIL_TAG); + fragment.setUserVisibleHint(false); + fragment.onNotVisible(); + transaction.hide(fragment); } transaction.commit(); } diff --git a/java/com/android/dialer/main/impl/res/layout/main_activity.xml b/java/com/android/dialer/main/impl/res/layout/main_activity.xml index 4f0284126..b69625e63 100644 --- a/java/com/android/dialer/main/impl/res/layout/main_activity.xml +++ b/java/com/android/dialer/main/impl/res/layout/main_activity.xml @@ -44,6 +44,7 @@ android:layout_margin="16dp" android:layout_gravity="end|bottom" android:src="@drawable/quantum_ic_dialpad_white_24" + android:contentDescription="@string/dialpad_button_content_description" app:backgroundTint="?android:attr/colorAccent"/> </android.support.design.widget.CoordinatorLayout> diff --git a/java/com/android/dialer/main/impl/res/values/strings.xml b/java/com/android/dialer/main/impl/res/values/strings.xml index c842beeff..4e65432e5 100644 --- a/java/com/android/dialer/main/impl/res/values/strings.xml +++ b/java/com/android/dialer/main/impl/res/values/strings.xml @@ -40,4 +40,8 @@ <!-- Message displayed when there is no application available to handle voice search. [CHAR LIMIT=NONE] --> <string name="voice_search_not_available">Voice search not available</string> + + <!-- Content description for the button that displays the dialpad + [CHAR LIMIT=NONE] --> + <string name="dialpad_button_content_description">key pad</string> </resources> |