Merge "If the Speed Dial contact only has one channel, place the call immediately."
diff --git a/java/com/android/dialer/databasepopulator/ContactsPopulator.java b/java/com/android/dialer/databasepopulator/ContactsPopulator.java
index f22552d..f21e325 100644
--- a/java/com/android/dialer/databasepopulator/ContactsPopulator.java
+++ b/java/com/android/dialer/databasepopulator/ContactsPopulator.java
@@ -152,6 +152,7 @@
Assert.isWorkerThread();
ArrayList<ContentProviderOperation> operations = new ArrayList<>();
addContact(SIMPLE_CONTACTS[0], operations);
+ addContact(SIMPLE_CONTACTS[3], operations);
addContact(SIMPLE_CONTACTS[5], operations);
try {
context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, operations);
diff --git a/java/com/android/dialer/speeddial/SpeedDialFragment.java b/java/com/android/dialer/speeddial/SpeedDialFragment.java
index c45ec58..793169a 100644
--- a/java/com/android/dialer/speeddial/SpeedDialFragment.java
+++ b/java/com/android/dialer/speeddial/SpeedDialFragment.java
@@ -21,6 +21,8 @@
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentActivity;
+import android.support.v4.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;
@@ -62,16 +64,12 @@
public class SpeedDialFragment extends Fragment {
private final SpeedDialHeaderListener headerListener = new SpeedDialFragmentHeaderListener();
- private final FavoriteContactsListener favoritesListener = new SpeedDialFavoritesListener();
private final SuggestedContactsListener suggestedListener = new SpeedDialSuggestedListener();
- private View rootLayout;
private ContextMenu contextMenu;
private FrameLayout contextMenuBackground;
- private ContextMenuItemListener contextMenuItemListener;
private SpeedDialAdapter adapter;
- private SpeedDialLayoutManager layoutManager;
private SupportUiListener<ImmutableList<SpeedDialUiItem>> speedDialLoaderListener;
/**
@@ -80,6 +78,8 @@
*/
private boolean updateSpeedDialItemsOnResume = true;
+ private FavoriteContactsListener favoritesListener;
+
public static SpeedDialFragment newInstance() {
return new SpeedDialFragment();
}
@@ -89,22 +89,7 @@
public View onCreateView(
LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
LogUtil.enterBlock("SpeedDialFragment.onCreateView");
- rootLayout = inflater.inflate(R.layout.fragment_speed_dial, container, false);
-
- // Setup our RecyclerView
- RecyclerView recyclerView = rootLayout.findViewById(R.id.speed_dial_recycler_view);
- adapter =
- new SpeedDialAdapter(getContext(), favoritesListener, suggestedListener, headerListener);
- layoutManager = new SpeedDialLayoutManager(getContext(), 3 /* spanCount */);
- layoutManager.setSpanSizeLookup(adapter.getSpanSizeLookup());
- recyclerView.setLayoutManager(layoutManager);
- recyclerView.setAdapter(adapter);
-
- // Setup drag and drop touch helper
- ItemTouchHelper.Callback callback = new SpeedDialItemTouchHelperCallback(adapter);
- ItemTouchHelper touchHelper = new ItemTouchHelper(callback);
- touchHelper.attachToRecyclerView(recyclerView);
- adapter.setItemTouchHelper(touchHelper);
+ View rootLayout = inflater.inflate(R.layout.fragment_speed_dial, container, false);
// Setup favorite contact context menu
contextMenu = rootLayout.findViewById(R.id.favorite_contact_context_menu);
@@ -114,7 +99,31 @@
contextMenu.hideMenu();
contextMenuBackground.setVisibility(View.GONE);
});
- contextMenuItemListener = new SpeedDialContextMenuItemListener();
+
+ // Setup our RecyclerView
+ SpeedDialLayoutManager layoutManager =
+ new SpeedDialLayoutManager(getContext(), 3 /* spanCount */);
+ favoritesListener =
+ new SpeedDialFavoritesListener(
+ getActivity(),
+ getChildFragmentManager(),
+ rootLayout,
+ contextMenu,
+ contextMenuBackground,
+ new SpeedDialContextMenuItemListener(),
+ layoutManager);
+ adapter =
+ new SpeedDialAdapter(getContext(), favoritesListener, suggestedListener, headerListener);
+ layoutManager.setSpanSizeLookup(adapter.getSpanSizeLookup());
+ RecyclerView recyclerView = rootLayout.findViewById(R.id.speed_dial_recycler_view);
+ recyclerView.setLayoutManager(layoutManager);
+ recyclerView.setAdapter(adapter);
+
+ // Setup drag and drop touch helper
+ ItemTouchHelper.Callback callback = new SpeedDialItemTouchHelperCallback(adapter);
+ ItemTouchHelper touchHelper = new ItemTouchHelper(callback);
+ touchHelper.attachToRecyclerView(recyclerView);
+ adapter.setItemTouchHelper(touchHelper);
speedDialLoaderListener =
DialerExecutorComponent.get(getContext())
@@ -181,26 +190,56 @@
}
}
- private final class SpeedDialFavoritesListener implements FavoriteContactsListener {
+ private static final class SpeedDialFavoritesListener implements FavoriteContactsListener {
+
+ private final FragmentActivity activity;
+ private final FragmentManager childFragmentManager;
+ private final View rootLayout;
+ private final ContextMenu contextMenu;
+ private final View contextMenuBackground;
+ private final ContextMenuItemListener contextMenuListener;
+ private final SpeedDialLayoutManager layoutManager;
+
+ SpeedDialFavoritesListener(
+ FragmentActivity activity,
+ FragmentManager childFragmentManager,
+ View rootLayout,
+ ContextMenu contextMenu,
+ View contextMenuBackground,
+ ContextMenuItemListener contextMenuListener,
+ SpeedDialLayoutManager layoutManager) {
+ this.activity = activity;
+ this.childFragmentManager = childFragmentManager;
+ this.rootLayout = rootLayout;
+ this.contextMenu = contextMenu;
+ this.contextMenuBackground = contextMenuBackground;
+ this.contextMenuListener = contextMenuListener;
+ this.layoutManager = layoutManager;
+ }
@Override
public void onAmbiguousContactClicked(SpeedDialUiItem speedDialUiItem) {
- DisambigDialog.show(speedDialUiItem, getChildFragmentManager());
+ // If there is only one channel, skip the menu and place a call directly
+ if (speedDialUiItem.channels().size() == 1) {
+ onClick(speedDialUiItem.channels().get(0));
+ return;
+ }
+
+ DisambigDialog.show(speedDialUiItem, childFragmentManager);
}
@Override
public void onClick(Channel channel) {
if (channel.technology() == Channel.DUO) {
- Logger.get(getContext())
+ Logger.get(activity)
.logImpression(DialerImpression.Type.LIGHTBRINGER_VIDEO_REQUESTED_FOR_FAVORITE_CONTACT);
- Intent intent =
- DuoComponent.get(getContext()).getDuo().getIntent(getContext(), channel.number());
- getActivity().startActivityForResult(intent, ActivityRequestCodes.DIALTACTS_DUO);
+ Intent intent = DuoComponent.get(activity).getDuo().getIntent(activity, channel.number());
+ activity.startActivityForResult(intent, ActivityRequestCodes.DIALTACTS_DUO);
return;
}
PreCall.start(
- getContext(),
+ activity,
new CallIntentBuilder(channel.number(), CallInitiationType.Type.SPEED_DIAL)
.setIsVideoCall(channel.isVideoTechnology()));
}
@@ -208,7 +247,7 @@
@Override
public void showContextMenu(View view, SpeedDialUiItem speedDialUiItem) {
layoutManager.setScrollEnabled(false);
- contextMenu.showMenu(rootLayout, view, speedDialUiItem, contextMenuItemListener);
+ contextMenu.showMenu(rootLayout, view, speedDialUiItem, contextMenuListener);
}
@Override