diff options
Diffstat (limited to 'java/com/android/dialer/main')
4 files changed, 91 insertions, 3 deletions
diff --git a/java/com/android/dialer/main/impl/BottomNavBar.java b/java/com/android/dialer/main/impl/BottomNavBar.java index 6d43ee29d..97f526251 100644 --- a/java/com/android/dialer/main/impl/BottomNavBar.java +++ b/java/com/android/dialer/main/impl/BottomNavBar.java @@ -29,7 +29,7 @@ import java.util.ArrayList; import java.util.List; /** Dialer Bottom Nav Bar for {@link MainActivity}. */ -final class BottomNavBar extends LinearLayout { +public final class BottomNavBar extends LinearLayout { /** Index for each tab in the bottom nav. */ @Retention(RetentionPolicy.SOURCE) diff --git a/java/com/android/dialer/main/impl/MainActivity.java b/java/com/android/dialer/main/impl/MainActivity.java index 1a79fbab3..24c3df575 100644 --- a/java/com/android/dialer/main/impl/MainActivity.java +++ b/java/com/android/dialer/main/impl/MainActivity.java @@ -26,6 +26,7 @@ import com.android.dialer.interactions.PhoneNumberInteraction.DisambigDialogDism import com.android.dialer.interactions.PhoneNumberInteraction.InteractionErrorCode; import com.android.dialer.interactions.PhoneNumberInteraction.InteractionErrorListener; import com.android.dialer.main.MainActivityPeer; +import com.android.dialer.main.impl.BottomNavBar.TabIndex; import com.android.dialer.util.TransactionSafeActivity; /** This is the main activity for dialer. It hosts favorites, call log, search, dialpad, etc... */ @@ -38,6 +39,21 @@ public final class MainActivity extends TransactionSafeActivity private MainActivityPeer activePeer; + public static Intent getShowCallLogIntent(Context context) { + return getShowTabIntent(context, TabIndex.CALL_LOG); + } + + /** Returns intent that will open MainActivity to the specified tab. */ + public static Intent getShowTabIntent(Context context, @TabIndex int tabIndex) { + if (ConfigProviderComponent.get(context) + .getConfigProvider() + .getBoolean("nui_peer_enabled", false)) { + // TODO(calderwoodra): implement this in NewMainActivityPeer + return null; + } + return OldMainActivityPeer.getShowTabIntent(context, tabIndex); + } + /** * @param context Context of the application package implementing MainActivity class. * @return intent for MainActivity.class diff --git a/java/com/android/dialer/main/impl/MainSearchController.java b/java/com/android/dialer/main/impl/MainSearchController.java index 1defdf578..62ecc5389 100644 --- a/java/com/android/dialer/main/impl/MainSearchController.java +++ b/java/com/android/dialer/main/impl/MainSearchController.java @@ -84,8 +84,17 @@ final class MainSearchController implements SearchBarListener { this.toolbar = toolbar; } + /** Should be called if we're showing the dialpad because of a new ACTION_DIAL intent. */ + public void showDialpadFromNewIntent(boolean animate) { + showDialpad(animate, true); + } + /** Shows the dialpad, hides the FAB and slides the toolbar off screen. */ public void showDialpad(boolean animate) { + showDialpad(animate, false); + } + + private void showDialpad(boolean animate, boolean fromNewIntent) { Assert.checkArgument(!isDialpadVisible()); fab.hide(); @@ -106,9 +115,11 @@ final class MainSearchController implements SearchBarListener { // Show Dialpad if (getDialpadFragment() == null) { DialpadFragment dialpadFragment = new DialpadFragment(); + dialpadFragment.setStartedFromNewIntent(fromNewIntent); transaction.add(R.id.dialpad_fragment_container, dialpadFragment, DIALPAD_FRAGMENT_TAG); } else { DialpadFragment dialpadFragment = getDialpadFragment(); + dialpadFragment.setStartedFromNewIntent(fromNewIntent); transaction.show(dialpadFragment); } transaction.commit(); diff --git a/java/com/android/dialer/main/impl/OldMainActivityPeer.java b/java/com/android/dialer/main/impl/OldMainActivityPeer.java index 16b74d5ff..dd766d087 100644 --- a/java/com/android/dialer/main/impl/OldMainActivityPeer.java +++ b/java/com/android/dialer/main/impl/OldMainActivityPeer.java @@ -31,6 +31,7 @@ import android.provider.ContactsContract.QuickContact; import android.support.annotation.Nullable; import android.support.design.widget.FloatingActionButton; import android.support.v7.widget.Toolbar; +import android.telecom.PhoneAccount; import android.view.View; import android.widget.ImageView; import com.android.contacts.common.list.OnPhoneNumberPickerActionListener; @@ -91,6 +92,11 @@ public class OldMainActivityPeer implements MainActivityPeer, FragmentUtilListen private static final String KEY_CURRENT_TAB = "current_tab"; private static final String KEY_LAST_TAB = "last_tab"; + /** Action and extra to let the activity know which tab to open up to. */ + private static final String ACTION_SHOW_TAB = "ACTION_SHOW_TAB"; + + private static final String EXTRA_SHOW_TAB = "EXTRA_SHOW_TAB"; + private final MainActivity mainActivity; // Contacts @@ -125,6 +131,22 @@ public class OldMainActivityPeer implements MainActivityPeer, FragmentUtilListen private View snackbarContainer; private UiListener<String> getLastOutgoingCallListener; + public static Intent getShowTabIntent(Context context, @TabIndex int tabIndex) { + Intent intent = new Intent(context, MainActivity.class); + intent.setAction(ACTION_SHOW_TAB); + intent.putExtra(EXTRA_SHOW_TAB, tabIndex); + // TODO(calderwoodra): Do we need to set some URI data here + return intent; + } + + static boolean isShowTabIntent(Intent intent) { + return ACTION_SHOW_TAB.equals(intent.getAction()) && intent.hasExtra(EXTRA_SHOW_TAB); + } + + static @TabIndex int getTabFromIntent(Intent intent) { + return intent.getIntExtra(EXTRA_SHOW_TAB, -1); + } + public OldMainActivityPeer(MainActivity mainActivity) { this.mainActivity = mainActivity; } @@ -193,13 +215,52 @@ public class OldMainActivityPeer implements MainActivityPeer, FragmentUtilListen searchController.onRestoreInstanceState(savedInstanceState); bottomNav.selectTab(savedInstanceState.getInt(KEY_CURRENT_TAB)); } else { - lastTabController.selectLastTab(); + showTabOnIntent(mainActivity.getIntent()); } } @Override public void onNewIntent(Intent intent) { - lastTabController.selectLastTab(); + showTabOnIntent(intent); + } + + private void showTabOnIntent(Intent intent) { + if (isShowTabIntent(intent)) { + bottomNav.selectTab(getTabFromIntent(intent)); + return; + } + + if (isDialIntent(intent)) { + searchController.showDialpadFromNewIntent(false); + // Dialpad will grab the intent and populate the number + return; + } + + if (lastTabController.isEnabled) { + lastTabController.selectLastTab(); + return; + } + + bottomNav.selectTab(TabIndex.SPEED_DIAL); + } + + /** Returns true if the given intent contains a phone number to populate the dialer with */ + private boolean isDialIntent(Intent intent) { + if (intent == null || intent.getData() == null) { + return false; + } + + if (Intent.ACTION_DIAL.equals(intent.getAction())) { + return true; + } + + if (Intent.ACTION_VIEW.equals(intent.getAction())) { + Uri data = intent.getData(); + if (data != null && PhoneAccount.SCHEME_TEL.equals(data.getScheme())) { + return true; + } + } + return false; } @Override |