summaryrefslogtreecommitdiff
path: root/java/com/android/dialer/main
diff options
context:
space:
mode:
authorcalderwoodra <calderwoodra@google.com>2018-01-29 20:48:58 -0800
committerCopybara-Service <copybara-piper@google.com>2018-01-30 17:41:25 -0800
commit2cc8b342ff7ebefb2f97fde8b877452528f03d4e (patch)
tree1b1c5e0e7edc96e172d69119f841fc8728b4b8db /java/com/android/dialer/main
parenta6b96247b1348dd6316fb0b5355c980883765530 (diff)
Update FragUtils to encourage better readability in Activities.
Bug: 72525324 Test: existing PiperOrigin-RevId: 183776841 Change-Id: Ia78002d3da823a228cf5a29f93cd53ad21105f94
Diffstat (limited to 'java/com/android/dialer/main')
-rw-r--r--java/com/android/dialer/main/impl/MainActivity.java176
1 files changed, 131 insertions, 45 deletions
diff --git a/java/com/android/dialer/main/impl/MainActivity.java b/java/com/android/dialer/main/impl/MainActivity.java
index a7a9e6c5a..0308b891b 100644
--- a/java/com/android/dialer/main/impl/MainActivity.java
+++ b/java/com/android/dialer/main/impl/MainActivity.java
@@ -22,14 +22,17 @@ import android.net.Uri;
import android.os.Bundle;
import android.provider.CallLog.Calls;
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.dialer.calllog.ui.NewCallLogFragment;
+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.constants.ActivityRequestCodes;
import com.android.dialer.contactsfragment.ContactsFragment;
@@ -48,23 +51,28 @@ import com.android.dialer.smartdial.util.SmartDialPrefix;
import com.android.dialer.speeddial.SpeedDialFragment;
import com.android.dialer.telecom.TelecomUtil;
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 OnContactSelectedListener,
- OnDialpadQueryChangedListener,
- DialpadListener,
- DialpadFragment.HostInterface,
- SearchFragmentListener {
+public final class MainActivity extends AppCompatActivity implements FragmentUtilListener {
private static final String KEY_SAVED_LANGUAGE_CODE = "saved_language_code";
+ private final MainOnContactSelectedListener onContactSelectedListener =
+ new MainOnContactSelectedListener(this);
+ private final MainDialpadFragmentHost dialpadFragmentHostInterface =
+ new MainDialpadFragmentHost();
+
private MainSearchController searchController;
+ private MainOnDialpadQueryChangedListener onDialpadQueryChangedListener;
+ private MainDialpadListener dialpadListener;
+ private MainSearchFragmentListener searchFragmentListener;
/** Language the device was in last time {@link #onSaveInstanceState(Bundle)} was called. */
private String savedLanguageCode;
private View snackbarContainer;
+ private UiListener<String> getLastOutgoingCallListener;
/**
* @param context Context of the application package implementing MainActivity class.
@@ -81,10 +89,17 @@ public final class MainActivity extends AppCompatActivity
super.onCreate(savedInstanceState);
LogUtil.enterBlock("MainActivity.onCreate");
setContentView(R.layout.main_activity);
+ initUiListeners();
initLayout(savedInstanceState);
SmartDialPrefix.initializeNanpSettings(this);
}
+ private void initUiListeners() {
+ getLastOutgoingCallListener =
+ DialerExecutorComponent.get(this)
+ .createUiListener(getFragmentManager(), "Query last phone number");
+ }
+
private void initLayout(Bundle savedInstanceState) {
snackbarContainer = findViewById(R.id.coordinator_layout);
@@ -100,6 +115,10 @@ public final class MainActivity extends AppCompatActivity
searchController = new MainSearchController(this, bottomNav, fab, toolbar);
toolbar.setSearchBarListener(searchController);
+ onDialpadQueryChangedListener = new MainOnDialpadQueryChangedListener(searchController);
+ dialpadListener = new MainDialpadListener(this, searchController, getLastOutgoingCallListener);
+ searchFragmentListener = new MainSearchFragmentListener(searchController);
+
// Restore our view state if needed, else initialize as if the app opened for the first time
if (savedInstanceState != null) {
savedLanguageCode = savedInstanceState.getString(KEY_SAVED_LANGUAGE_CODE);
@@ -152,60 +171,127 @@ public final class MainActivity extends AppCompatActivity
}
@Override
- public void onContactSelected(ImageView photo, Uri contactUri, long contactId) {
- // TODO(calderwoodra): Add impression logging
- QuickContact.showQuickContact(
- this, photo, contactUri, QuickContact.MODE_LARGE, null /* excludeMimes */);
+ public void onBackPressed() {
+ if (searchController.onBackPressed()) {
+ return;
+ }
+ super.onBackPressed();
}
- @Override // OnDialpadQueryChangedListener
- public void onDialpadQueryChanged(String query) {
- searchController.onDialpadQueryChanged(query);
+ @Nullable
+ @Override
+ @SuppressWarnings("unchecked") // Casts are checked using runtime methods
+ public <T> T getImpl(Class<T> callbackInterface) {
+ if (callbackInterface.isInstance(onContactSelectedListener)) {
+ return (T) onContactSelectedListener;
+ } else if (callbackInterface.isInstance(onDialpadQueryChangedListener)) {
+ return (T) onDialpadQueryChangedListener;
+ } else if (callbackInterface.isInstance(dialpadListener)) {
+ return (T) dialpadListener;
+ } else if (callbackInterface.isInstance(dialpadFragmentHostInterface)) {
+ return (T) dialpadFragmentHostInterface;
+ } else if (callbackInterface.isInstance(searchFragmentListener)) {
+ return (T) searchFragmentListener;
+ } else {
+ return null;
+ }
}
- @Override // DialpadListener
- public void getLastOutgoingCall(LastOutgoingCallCallback callback) {
- DialerExecutorComponent.get(this)
- .dialerExecutorFactory()
- .createUiTaskBuilder(
- getFragmentManager(), "Query last phone number", Calls::getLastOutgoingCall)
- .onSuccess(output -> callback.lastOutgoingCall(output))
- .build()
- .executeParallel(this);
- }
+ /** @see OnContactSelectedListener */
+ private static final class MainOnContactSelectedListener implements OnContactSelectedListener {
- @Override // DialpadListener
- public void onDialpadShown() {
- searchController.onDialpadShown();
- }
+ private final Context context;
+
+ MainOnContactSelectedListener(Context context) {
+ this.context = context;
+ }
- @Override // DialpadListener
- public void onCallPlacedFromDialpad() {
- // TODO(calderwoodra): logging
+ @Override
+ public void onContactSelected(ImageView photo, Uri contactUri, long contactId) {
+ // TODO(calderwoodra): Add impression logging
+ QuickContact.showQuickContact(
+ context, photo, contactUri, QuickContact.MODE_LARGE, null /* excludeMimes */);
+ }
}
- @Override
- public void onBackPressed() {
- if (searchController.onBackPressed()) {
- return;
+ /** @see OnDialpadQueryChangedListener */
+ private static final class MainOnDialpadQueryChangedListener
+ implements OnDialpadQueryChangedListener {
+
+ private final MainSearchController searchController;
+
+ MainOnDialpadQueryChangedListener(MainSearchController searchController) {
+ this.searchController = searchController;
+ }
+
+ @Override
+ public void onDialpadQueryChanged(String query) {
+ searchController.onDialpadQueryChanged(query);
}
- super.onBackPressed();
}
- @Override // DialpadFragment.HostInterface
- public boolean onDialpadSpacerTouchWithEmptyQuery() {
- // No-op, just let the clicks fall through to the search list
- return false;
+ /** @see DialpadListener */
+ private static final class MainDialpadListener implements DialpadListener {
+
+ private final MainSearchController searchController;
+ private final Context context;
+ private final UiListener<String> listener;
+
+ MainDialpadListener(
+ Context context, MainSearchController searchController, UiListener<String> uiListener) {
+ this.context = context;
+ this.searchController = searchController;
+ this.listener = uiListener;
+ }
+
+ @Override
+ public void getLastOutgoingCall(LastOutgoingCallCallback callback) {
+ ListenableFuture<String> listenableFuture =
+ DialerExecutorComponent.get(context)
+ .backgroundExecutor()
+ .submit(() -> Calls.getLastOutgoingCall(context));
+ listener.listen(context, listenableFuture, callback::lastOutgoingCall, throwable -> {});
+ }
+
+ @Override
+ public void onDialpadShown() {
+ searchController.onDialpadShown();
+ }
+
+ @Override
+ public void onCallPlacedFromDialpad() {
+ // TODO(calderwoodra): logging
+ }
}
- @Override // SearchFragmentListener
- public void onSearchListTouch() {
- searchController.onSearchListTouch();
+ /** @see SearchFragmentListener */
+ private static final class MainSearchFragmentListener implements SearchFragmentListener {
+
+ private final MainSearchController searchController;
+
+ MainSearchFragmentListener(MainSearchController searchController) {
+ this.searchController = searchController;
+ }
+
+ @Override
+ public void onSearchListTouch() {
+ searchController.onSearchListTouch();
+ }
+
+ @Override
+ public void onCallPlacedFromSearch() {
+ // TODO(calderwoodra): logging
+ }
}
- @Override // SearchFragmentListener
- public void onCallPlacedFromSearch() {
- // TODO(calderwoodra): logging
+ /** @see DialpadFragment.HostInterface */
+ private static final class MainDialpadFragmentHost implements DialpadFragment.HostInterface {
+
+ @Override
+ public boolean onDialpadSpacerTouchWithEmptyQuery() {
+ // No-op, just let the clicks fall through to the search list
+ return false;
+ }
}
/**