summaryrefslogtreecommitdiff
path: root/java/com/android/dialer/main/impl
diff options
context:
space:
mode:
authorcalderwoodra <calderwoodra@google.com>2018-01-30 14:50:44 -0800
committerCopybara-Service <copybara-piper@google.com>2018-01-30 17:43:59 -0800
commit37d05a20543e282af3a1d9291297c8feed121231 (patch)
treefe687fbdc64fa60a12c8dad12b459b6d46a6e7a3 /java/com/android/dialer/main/impl
parent5e550aadbb9a99885b2c719501d00a491d2ba9db (diff)
Add old speed dial fragment to NUI.
Bug: 72618868 Test: existing PiperOrigin-RevId: 183896896 Change-Id: I9b90aaa02e1c40f38fbbe636f4e51cfd01c570f6
Diffstat (limited to 'java/com/android/dialer/main/impl')
-rw-r--r--java/com/android/dialer/main/impl/MainActivity.java253
-rw-r--r--java/com/android/dialer/main/impl/res/layout/main_activity.xml14
2 files changed, 239 insertions, 28 deletions
diff --git a/java/com/android/dialer/main/impl/MainActivity.java b/java/com/android/dialer/main/impl/MainActivity.java
index 0308b891b..4bc15da98 100644
--- a/java/com/android/dialer/main/impl/MainActivity.java
+++ b/java/com/android/dialer/main/impl/MainActivity.java
@@ -16,6 +16,8 @@
package com.android.dialer.main.impl;
+import android.app.Fragment;
+import android.app.FragmentManager;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
@@ -25,15 +27,24 @@ import android.provider.ContactsContract.QuickContact;
import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.FragmentTransaction;
-import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;
+import com.android.contacts.common.list.OnPhoneNumberPickerActionListener;
+import com.android.dialer.app.list.DragDropController;
+import com.android.dialer.app.list.OldSpeedDialFragment;
+import com.android.dialer.app.list.OnDragDropListener;
+import com.android.dialer.app.list.OnListFragmentScrolledListener;
+import com.android.dialer.app.list.PhoneFavoriteSquareTileView;
+import com.android.dialer.callintent.CallIntentBuilder;
+import com.android.dialer.callintent.CallSpecificAppData;
import com.android.dialer.calllog.ui.NewCallLogFragment;
+import com.android.dialer.common.Assert;
import com.android.dialer.common.FragmentUtils.FragmentUtilListener;
import com.android.dialer.common.LogUtil;
import com.android.dialer.common.concurrent.DialerExecutorComponent;
import com.android.dialer.common.concurrent.UiListener;
import com.android.dialer.compat.CompatUtils;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.constants.ActivityRequestCodes;
import com.android.dialer.contactsfragment.ContactsFragment;
import com.android.dialer.contactsfragment.ContactsFragment.Header;
@@ -43,18 +54,30 @@ import com.android.dialer.dialpadview.DialpadFragment;
import com.android.dialer.dialpadview.DialpadFragment.DialpadListener;
import com.android.dialer.dialpadview.DialpadFragment.LastOutgoingCallCallback;
import com.android.dialer.dialpadview.DialpadFragment.OnDialpadQueryChangedListener;
+import com.android.dialer.interactions.PhoneNumberInteraction;
+import com.android.dialer.interactions.PhoneNumberInteraction.DisambigDialogDismissedListener;
+import com.android.dialer.interactions.PhoneNumberInteraction.InteractionErrorCode;
+import com.android.dialer.interactions.PhoneNumberInteraction.InteractionErrorListener;
import com.android.dialer.main.impl.BottomNavBar.OnBottomNavTabSelectedListener;
import com.android.dialer.main.impl.toolbar.MainToolbar;
import com.android.dialer.postcall.PostCall;
+import com.android.dialer.precall.PreCall;
import com.android.dialer.searchfragment.list.NewSearchFragment.SearchFragmentListener;
import com.android.dialer.smartdial.util.SmartDialPrefix;
import com.android.dialer.speeddial.SpeedDialFragment;
import com.android.dialer.telecom.TelecomUtil;
+import com.android.dialer.util.DialerUtils;
+import com.android.dialer.util.TransactionSafeActivity;
import com.android.dialer.voicemail.listui.NewVoicemailFragment;
import com.google.common.util.concurrent.ListenableFuture;
/** This is the main activity for dialer. It hosts favorites, call log, search, dialpad, etc... */
-public final class MainActivity extends AppCompatActivity implements FragmentUtilListener {
+// TODO(calderwoodra): Do not extend TransactionSafeActivity after new SpeedDial is launched
+public final class MainActivity extends TransactionSafeActivity
+ implements FragmentUtilListener,
+ // TODO(calderwoodra): remove these 2 interfaces when we migrate to new speed dial fragment
+ InteractionErrorListener,
+ DisambigDialogDismissedListener {
private static final String KEY_SAVED_LANGUAGE_CODE = "saved_language_code";
@@ -67,6 +90,10 @@ public final class MainActivity extends AppCompatActivity implements FragmentUti
private MainOnDialpadQueryChangedListener onDialpadQueryChangedListener;
private MainDialpadListener dialpadListener;
private MainSearchFragmentListener searchFragmentListener;
+ private MainOnListFragmentScrolledListener onListFragmentScrolledListener;
+ private MainOnPhoneNumberPickerActionListener onPhoneNumberPickerActionListener;
+ private MainOldSpeedDialFragmentHostInterface oldSpeedDialFragmentHostInterface;
+ private MainOnDragDropListener onDragDropListener;
/** Language the device was in last time {@link #onSaveInstanceState(Bundle)} was called. */
private String savedLanguageCode;
@@ -110,7 +137,10 @@ public final class MainActivity extends AppCompatActivity implements FragmentUti
setSupportActionBar(findViewById(R.id.toolbar));
BottomNavBar bottomNav = findViewById(R.id.bottom_nav_bar);
- bottomNav.setOnTabSelectedListener(new MainBottomNavBarBottomNavTabListener());
+ MainBottomNavBarBottomNavTabListener bottomNavTabListener =
+ new MainBottomNavBarBottomNavTabListener(
+ this, getFragmentManager(), getSupportFragmentManager());
+ bottomNav.setOnTabSelectedListener(bottomNavTabListener);
searchController = new MainSearchController(this, bottomNav, fab, toolbar);
toolbar.setSearchBarListener(searchController);
@@ -118,6 +148,12 @@ public final class MainActivity extends AppCompatActivity implements FragmentUti
onDialpadQueryChangedListener = new MainOnDialpadQueryChangedListener(searchController);
dialpadListener = new MainDialpadListener(this, searchController, getLastOutgoingCallListener);
searchFragmentListener = new MainSearchFragmentListener(searchController);
+ onListFragmentScrolledListener = new MainOnListFragmentScrolledListener(snackbarContainer);
+ onPhoneNumberPickerActionListener = new MainOnPhoneNumberPickerActionListener(this);
+ oldSpeedDialFragmentHostInterface =
+ new MainOldSpeedDialFragmentHostInterface(
+ bottomNavTabListener, findViewById(R.id.contact_tile_drag_shadow_overlay));
+ onDragDropListener = new MainOnDragDropListener();
// Restore our view state if needed, else initialize as if the app opened for the first time
if (savedInstanceState != null) {
@@ -192,11 +228,41 @@ public final class MainActivity extends AppCompatActivity implements FragmentUti
return (T) dialpadFragmentHostInterface;
} else if (callbackInterface.isInstance(searchFragmentListener)) {
return (T) searchFragmentListener;
+ } else if (callbackInterface.isInstance(onListFragmentScrolledListener)) {
+ return (T) onListFragmentScrolledListener;
+ } else if (callbackInterface.isInstance(onPhoneNumberPickerActionListener)) {
+ return (T) onPhoneNumberPickerActionListener;
+ } else if (callbackInterface.isInstance(oldSpeedDialFragmentHostInterface)) {
+ return (T) oldSpeedDialFragmentHostInterface;
+ } else if (callbackInterface.isInstance(onDragDropListener)) {
+ return (T) onDragDropListener;
} else {
return null;
}
}
+ @Override
+ public void interactionError(@InteractionErrorCode int interactionErrorCode) {
+ switch (interactionErrorCode) {
+ case InteractionErrorCode.USER_LEAVING_ACTIVITY:
+ // This is expected to happen if the user exits the activity before the interaction occurs.
+ return;
+ case InteractionErrorCode.CONTACT_NOT_FOUND:
+ case InteractionErrorCode.CONTACT_HAS_NO_NUMBER:
+ case InteractionErrorCode.OTHER_ERROR:
+ default:
+ // All other error codes are unexpected. For example, it should be impossible to start an
+ // interaction with an invalid contact from this activity.
+ throw Assert.createIllegalStateFailException(
+ "PhoneNumberInteraction error: " + interactionErrorCode);
+ }
+ }
+
+ @Override
+ public void onDisambigDialogDismissed() {
+ // Don't do anything; the app will remain open with favorites tiles displayed.
+ }
+
/** @see OnContactSelectedListener */
private static final class MainOnContactSelectedListener implements OnContactSelectedListener {
@@ -294,11 +360,123 @@ public final class MainActivity extends AppCompatActivity implements FragmentUti
}
}
+ /** @see OnListFragmentScrolledListener */
+ private static final class MainOnListFragmentScrolledListener
+ implements OnListFragmentScrolledListener {
+
+ private final View parentLayout;
+
+ MainOnListFragmentScrolledListener(View parentLayout) {
+ this.parentLayout = parentLayout;
+ }
+
+ @Override
+ public void onListFragmentScrollStateChange(int scrollState) {
+ DialerUtils.hideInputMethod(parentLayout);
+ }
+
+ @Override
+ public void onListFragmentScroll(
+ int firstVisibleItem, int visibleItemCount, int totalItemCount) {
+ // TODO: No-op for now. This should eventually show/hide the actionBar based on
+ // interactions with the ListsFragments.
+ }
+ }
+
+ /** @see OnPhoneNumberPickerActionListener */
+ private static final class MainOnPhoneNumberPickerActionListener
+ implements OnPhoneNumberPickerActionListener {
+
+ private final TransactionSafeActivity activity;
+
+ MainOnPhoneNumberPickerActionListener(TransactionSafeActivity activity) {
+ this.activity = activity;
+ }
+
+ @Override
+ public void onPickDataUri(
+ Uri dataUri, boolean isVideoCall, CallSpecificAppData callSpecificAppData) {
+ PhoneNumberInteraction.startInteractionForPhoneCall(
+ activity, dataUri, isVideoCall, callSpecificAppData);
+ }
+
+ @Override
+ public void onPickPhoneNumber(
+ String phoneNumber, boolean isVideoCall, CallSpecificAppData callSpecificAppData) {
+ if (phoneNumber == null) {
+ // Invalid phone number, but let the call go through so that InCallUI can show
+ // an error message.
+ phoneNumber = "";
+ }
+ PreCall.start(
+ activity,
+ new CallIntentBuilder(phoneNumber, callSpecificAppData)
+ .setIsVideoCall(isVideoCall)
+ .setAllowAssistedDial(callSpecificAppData.getAllowAssistedDialing()));
+ }
+
+ @Override
+ public void onHomeInActionBarSelected() {
+ // TODO(calderwoodra): investigate if we need to exit search here
+ // PhoneNumberPickerFragment#onOptionsItemSelected
+ }
+ }
+
+ /** @see OldSpeedDialFragment.HostInterface */
+ private static final class MainOldSpeedDialFragmentHostInterface
+ implements OldSpeedDialFragment.HostInterface {
+
+ private final MainBottomNavBarBottomNavTabListener listener;
+ private final ImageView dragShadowOverlay;
+
+ // TODO(calderwoodra): Use this for drag and drop
+ @SuppressWarnings("unused")
+ private DragDropController dragDropController;
+
+ MainOldSpeedDialFragmentHostInterface(
+ MainBottomNavBarBottomNavTabListener listener, ImageView dragShadowOverlay) {
+ this.listener = listener;
+ this.dragShadowOverlay = dragShadowOverlay;
+ }
+
+ @Override
+ public void setDragDropController(DragDropController dragDropController) {
+ this.dragDropController = dragDropController;
+ }
+
+ @Override
+ public void showAllContactsTab() {
+ listener.onContactsSelected();
+ }
+
+ @Override
+ public ImageView getDragShadowOverlay() {
+ return dragShadowOverlay;
+ }
+ }
+
+ /** @see com.android.dialer.app.list.OnDragDropListener */
+ // TODO(calderwoodra): implement drag and drop
+ private static final class MainOnDragDropListener implements OnDragDropListener {
+
+ @Override
+ public void onDragStarted(int x, int y, PhoneFavoriteSquareTileView view) {}
+
+ @Override
+ public void onDragHovered(int x, int y, PhoneFavoriteSquareTileView view) {}
+
+ @Override
+ public void onDragFinished(int x, int y) {}
+
+ @Override
+ public void onDroppedOnRemove() {}
+ }
+
/**
* Implementation of {@link OnBottomNavTabSelectedListener} that handles logic for showing each of
* the main tabs.
*/
- private final class MainBottomNavBarBottomNavTabListener
+ private static final class MainBottomNavBarBottomNavTabListener
implements OnBottomNavTabSelectedListener {
private static final String SPEED_DIAL_TAG = "speed_dial";
@@ -306,18 +484,37 @@ public final class MainActivity extends AppCompatActivity implements FragmentUti
private static final String CONTACTS_TAG = "contacts";
private static final String VOICEMAIL_TAG = "voicemail";
+ private final Context context;
+ private final FragmentManager fragmentManager;
+ private final android.support.v4.app.FragmentManager supportFragmentManager;
+
+ private MainBottomNavBarBottomNavTabListener(
+ Context context,
+ FragmentManager fragmentManager,
+ android.support.v4.app.FragmentManager supportFragmentManager) {
+ this.context = context;
+ this.fragmentManager = fragmentManager;
+ this.supportFragmentManager = supportFragmentManager;
+ }
+
@Override
public void onSpeedDialSelected() {
hideAllFragments();
- SpeedDialFragment fragment =
- (SpeedDialFragment) getFragmentManager().findFragmentByTag(SPEED_DIAL_TAG);
+ Fragment fragment = fragmentManager.findFragmentByTag(SPEED_DIAL_TAG);
if (fragment == null) {
- getFragmentManager()
+ if (ConfigProviderComponent.get(context)
+ .getConfigProvider()
+ .getBoolean("enable_new_favorites_tab", false)) {
+ fragment = SpeedDialFragment.newInstance();
+ } else {
+ fragment = new OldSpeedDialFragment();
+ }
+ fragmentManager
.beginTransaction()
- .add(R.id.fragment_container, SpeedDialFragment.newInstance(), SPEED_DIAL_TAG)
+ .add(R.id.fragment_container, fragment, SPEED_DIAL_TAG)
.commit();
} else {
- getFragmentManager().beginTransaction().show(fragment).commit();
+ fragmentManager.beginTransaction().show(fragment).commit();
}
}
@@ -325,14 +522,14 @@ public final class MainActivity extends AppCompatActivity implements FragmentUti
public void onCallLogSelected() {
hideAllFragments();
NewCallLogFragment fragment =
- (NewCallLogFragment) getSupportFragmentManager().findFragmentByTag(CALL_LOG_TAG);
+ (NewCallLogFragment) supportFragmentManager.findFragmentByTag(CALL_LOG_TAG);
if (fragment == null) {
- getSupportFragmentManager()
+ supportFragmentManager
.beginTransaction()
.add(R.id.fragment_container, new NewCallLogFragment(), CALL_LOG_TAG)
.commit();
} else {
- getSupportFragmentManager().beginTransaction().show(fragment).commit();
+ supportFragmentManager.beginTransaction().show(fragment).commit();
}
}
@@ -340,9 +537,9 @@ public final class MainActivity extends AppCompatActivity implements FragmentUti
public void onContactsSelected() {
hideAllFragments();
ContactsFragment fragment =
- (ContactsFragment) getFragmentManager().findFragmentByTag(CONTACTS_TAG);
+ (ContactsFragment) fragmentManager.findFragmentByTag(CONTACTS_TAG);
if (fragment == null) {
- getFragmentManager()
+ fragmentManager
.beginTransaction()
.add(
R.id.fragment_container,
@@ -350,7 +547,7 @@ public final class MainActivity extends AppCompatActivity implements FragmentUti
CONTACTS_TAG)
.commit();
} else {
- getFragmentManager().beginTransaction().show(fragment).commit();
+ fragmentManager.beginTransaction().show(fragment).commit();
}
}
@@ -358,33 +555,33 @@ public final class MainActivity extends AppCompatActivity implements FragmentUti
public void onVoicemailSelected() {
hideAllFragments();
NewVoicemailFragment fragment =
- (NewVoicemailFragment) getSupportFragmentManager().findFragmentByTag(VOICEMAIL_TAG);
+ (NewVoicemailFragment) supportFragmentManager.findFragmentByTag(VOICEMAIL_TAG);
if (fragment == null) {
- getSupportFragmentManager()
+ supportFragmentManager
.beginTransaction()
.add(R.id.fragment_container, new NewVoicemailFragment(), VOICEMAIL_TAG)
.commit();
} else {
- getSupportFragmentManager().beginTransaction().show(fragment).commit();
+ supportFragmentManager.beginTransaction().show(fragment).commit();
}
}
private void hideAllFragments() {
- FragmentTransaction supportTransaction = getSupportFragmentManager().beginTransaction();
- if (getSupportFragmentManager().findFragmentByTag(CALL_LOG_TAG) != null) {
- supportTransaction.hide(getSupportFragmentManager().findFragmentByTag(CALL_LOG_TAG));
+ FragmentTransaction supportTransaction = supportFragmentManager.beginTransaction();
+ if (supportFragmentManager.findFragmentByTag(CALL_LOG_TAG) != null) {
+ supportTransaction.hide(supportFragmentManager.findFragmentByTag(CALL_LOG_TAG));
}
- if (getSupportFragmentManager().findFragmentByTag(VOICEMAIL_TAG) != null) {
- supportTransaction.hide(getSupportFragmentManager().findFragmentByTag(VOICEMAIL_TAG));
+ if (supportFragmentManager.findFragmentByTag(VOICEMAIL_TAG) != null) {
+ supportTransaction.hide(supportFragmentManager.findFragmentByTag(VOICEMAIL_TAG));
}
supportTransaction.commit();
- android.app.FragmentTransaction transaction = getFragmentManager().beginTransaction();
- if (getFragmentManager().findFragmentByTag(SPEED_DIAL_TAG) != null) {
- transaction.hide(getFragmentManager().findFragmentByTag(SPEED_DIAL_TAG));
+ android.app.FragmentTransaction transaction = fragmentManager.beginTransaction();
+ if (fragmentManager.findFragmentByTag(SPEED_DIAL_TAG) != null) {
+ transaction.hide(fragmentManager.findFragmentByTag(SPEED_DIAL_TAG));
}
- if (getFragmentManager().findFragmentByTag(CONTACTS_TAG) != null) {
- transaction.hide(getFragmentManager().findFragmentByTag(CONTACTS_TAG));
+ if (fragmentManager.findFragmentByTag(CONTACTS_TAG) != null) {
+ transaction.hide(fragmentManager.findFragmentByTag(CONTACTS_TAG));
}
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 aaba8da77..2094a7329 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
@@ -66,4 +66,18 @@
<include
android:id="@+id/toolbar"
layout="@layout/toolbar_layout"/>
+
+ <!-- TODO(calderwoodra): investigate what this is for and why we want it. -->
+ <!-- Host container for the contact tile drag shadow -->
+ <FrameLayout
+ android:id="@+id/activity_overlay"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+ <ImageView
+ android:id="@+id/contact_tile_drag_shadow_overlay"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:importantForAccessibility="no"
+ android:visibility="gone"/>
+ </FrameLayout>
</RelativeLayout> \ No newline at end of file