diff options
Diffstat (limited to 'java/com/android/dialer/app/DialtactsActivity.java')
-rw-r--r-- | java/com/android/dialer/app/DialtactsActivity.java | 246 |
1 files changed, 191 insertions, 55 deletions
diff --git a/java/com/android/dialer/app/DialtactsActivity.java b/java/com/android/dialer/app/DialtactsActivity.java index 6e2c6be7d..01bdfc223 100644 --- a/java/com/android/dialer/app/DialtactsActivity.java +++ b/java/com/android/dialer/app/DialtactsActivity.java @@ -43,6 +43,7 @@ import android.support.v4.app.ActivityCompat; import android.support.v4.view.ViewPager; import android.support.v7.app.ActionBar; import android.telecom.PhoneAccount; +import android.telecom.TelecomManager; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; @@ -71,10 +72,13 @@ import com.android.contacts.common.widget.FloatingActionButtonController; import com.android.dialer.animation.AnimUtils; import com.android.dialer.animation.AnimationListenerAdapter; import com.android.dialer.app.calllog.CallLogActivity; +import com.android.dialer.app.calllog.CallLogAdapter; +import com.android.dialer.app.calllog.CallLogAsync; import com.android.dialer.app.calllog.CallLogFragment; import com.android.dialer.app.calllog.CallLogNotificationsService; -import com.android.dialer.app.dialpad.DialpadFragment; +import com.android.dialer.app.calllog.IntentProvider; import com.android.dialer.app.list.DialtactsPagerAdapter; +import com.android.dialer.app.list.DialtactsPagerAdapter.TabIndex; import com.android.dialer.app.list.DragDropController; import com.android.dialer.app.list.ListsFragment; import com.android.dialer.app.list.OldSpeedDialFragment; @@ -88,31 +92,43 @@ import com.android.dialer.app.settings.DialerSettingsActivity; import com.android.dialer.app.widget.ActionBarController; import com.android.dialer.app.widget.SearchEditTextLayout; import com.android.dialer.callcomposer.CallComposerActivity; +import com.android.dialer.calldetails.CallDetailsActivity; +import com.android.dialer.callintent.CallInitiationType; import com.android.dialer.callintent.CallIntentBuilder; import com.android.dialer.callintent.CallSpecificAppData; import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; +import com.android.dialer.compat.telephony.TelephonyManagerCompat; +import com.android.dialer.configprovider.ConfigProviderBindings; +import com.android.dialer.constants.ActivityRequestCodes; import com.android.dialer.database.Database; import com.android.dialer.database.DialerDatabaseHelper; +import com.android.dialer.dialpadview.DialpadFragment; +import com.android.dialer.dialpadview.DialpadFragment.DialpadListener; +import com.android.dialer.dialpadview.DialpadFragment.LastOutgoingCallCallback; import com.android.dialer.interactions.PhoneNumberInteraction; import com.android.dialer.interactions.PhoneNumberInteraction.InteractionErrorCode; import com.android.dialer.logging.DialerImpression; import com.android.dialer.logging.Logger; import com.android.dialer.logging.ScreenEvent; +import com.android.dialer.logging.UiAction; +import com.android.dialer.main.Main; +import com.android.dialer.main.MainComponent; import com.android.dialer.p13n.inference.P13nRanking; import com.android.dialer.p13n.inference.protocol.P13nRanker; import com.android.dialer.p13n.inference.protocol.P13nRanker.P13nRefreshCompleteListener; import com.android.dialer.p13n.logging.P13nLogger; import com.android.dialer.p13n.logging.P13nLogging; +import com.android.dialer.performancereport.PerformanceReport; import com.android.dialer.postcall.PostCall; import com.android.dialer.proguard.UsedByReflection; +import com.android.dialer.searchfragment.list.NewSearchFragment; import com.android.dialer.simulator.Simulator; import com.android.dialer.simulator.SimulatorComponent; import com.android.dialer.smartdial.SmartDialNameMatcher; import com.android.dialer.smartdial.SmartDialPrefix; import com.android.dialer.telecom.TelecomUtil; import com.android.dialer.util.DialerUtils; -import com.android.dialer.util.IntentUtil; import com.android.dialer.util.PermissionsUtil; import com.android.dialer.util.TouchPointManager; import com.android.dialer.util.TransactionSafeActivity; @@ -130,6 +146,7 @@ public class DialtactsActivity extends TransactionSafeActivity DialpadFragment.OnDialpadQueryChangedListener, OnListFragmentScrolledListener, CallLogFragment.HostInterface, + CallLogAdapter.OnActionModeStateChangedListener, DialpadFragment.HostInterface, OldSpeedDialFragment.HostInterface, SearchFragment.HostInterface, @@ -140,13 +157,15 @@ public class DialtactsActivity extends TransactionSafeActivity ActionBarController.ActivityUi, PhoneNumberInteraction.InteractionErrorListener, PhoneNumberInteraction.DisambigDialogDismissedListener, - ActivityCompat.OnRequestPermissionsResultCallback { + ActivityCompat.OnRequestPermissionsResultCallback, + DialpadListener { public static final boolean DEBUG = false; @VisibleForTesting public static final String TAG_DIALPAD_FRAGMENT = "dialpad"; private static final String ACTION_SHOW_TAB = "ACTION_SHOW_TAB"; @VisibleForTesting public static final String EXTRA_SHOW_TAB = "EXTRA_SHOW_TAB"; public static final String EXTRA_CLEAR_NEW_VOICEMAILS = "EXTRA_CLEAR_NEW_VOICEMAILS"; + private static final String KEY_LAST_TAB = "last_tab"; private static final String TAG = "DialtactsActivity"; private static final String KEY_IN_REGULAR_SEARCH_UI = "in_regular_search_ui"; private static final String KEY_IN_DIALPAD_SEARCH_UI = "in_dialpad_search_ui"; @@ -154,15 +173,13 @@ public class DialtactsActivity extends TransactionSafeActivity private static final String KEY_FIRST_LAUNCH = "first_launch"; private static final String KEY_WAS_CONFIGURATION_CHANGE = "was_configuration_change"; private static final String KEY_IS_DIALPAD_SHOWN = "is_dialpad_shown"; + private static final String TAG_NEW_SEARCH_FRAGMENT = "new_search"; private static final String TAG_REGULAR_SEARCH_FRAGMENT = "search"; private static final String TAG_SMARTDIAL_SEARCH_FRAGMENT = "smartdial"; private static final String TAG_FAVORITES_FRAGMENT = "favorites"; /** Just for backward compatibility. Should behave as same as {@link Intent#ACTION_DIAL}. */ private static final String ACTION_TOUCH_DIALER = "com.android.phone.action.TOUCH_DIALER"; - private static final int ACTIVITY_REQUEST_CODE_VOICE_SEARCH = 1; - public static final int ACTIVITY_REQUEST_CODE_CALL_COMPOSE = 2; - private static final int FAB_SCALE_IN_DELAY_MS = 300; /** @@ -180,6 +197,9 @@ public class DialtactsActivity extends TransactionSafeActivity /** Fragment for searching phone numbers using the dialpad. */ private SmartDialSearchFragment mSmartDialSearchFragment; + /** new Fragment for search phone numbers using the keyboard and the dialpad. */ + private NewSearchFragment mNewSearchFragment; + /** Animation that slides in. */ private Animation mSlideIn; @@ -225,6 +245,9 @@ public class DialtactsActivity extends TransactionSafeActivity private P13nLogger mP13nLogger; private P13nRanker mP13nRanker; + public boolean isMultiSelectModeEnabled; + + private boolean isLastTabEnabled; AnimationListenerAdapter mSlideInListener = new AnimationListenerAdapter() { @@ -256,12 +279,18 @@ public class DialtactsActivity extends TransactionSafeActivity // no need to do anything here. return; } + + if (count != 0) { + PerformanceReport.recordClick(UiAction.Type.TEXT_CHANGE_WITH_INPUT); + } + if (DEBUG) { LogUtil.v("DialtactsActivity.onTextChanged", "called with new query: " + newText); LogUtil.v("DialtactsActivity.onTextChanged", "previous query: " + mSearchQuery); } mSearchQuery = newText; + // TODO(calderwoodra): show p13n when newText is empty. // Show search fragment only when the query string is changed to non-empty text. if (!TextUtils.isEmpty(newText)) { // Call enterSearchUi only if we are switching search modes, or showing a search @@ -277,6 +306,11 @@ public class DialtactsActivity extends TransactionSafeActivity mSmartDialSearchFragment.setQueryString(mSearchQuery); } else if (mRegularSearchFragment != null && mRegularSearchFragment.isVisible()) { mRegularSearchFragment.setQueryString(mSearchQuery); + } else if (mNewSearchFragment != null && mNewSearchFragment.isVisible()) { + mNewSearchFragment.setQuery(mSearchQuery); + // When the user switches between dialpad and the serachbar, we need to reset the + // call initiation type. + mNewSearchFragment.setCallInitiationType(getCallInitiationType()); } } @@ -289,6 +323,7 @@ public class DialtactsActivity extends TransactionSafeActivity @Override public void onClick(View v) { if (!isInSearchUi()) { + PerformanceReport.recordClick(UiAction.Type.OPEN_SEARCH); mActionBarController.onSearchBoxTapped(); enterSearchUi( false /* smartDialSearch */, mSearchView.getText().toString(), true /* animate */); @@ -306,15 +341,20 @@ public class DialtactsActivity extends TransactionSafeActivity if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) { if (TextUtils.isEmpty(mSearchView.getText().toString())) { // If the search term is empty, close the search UI. + PerformanceReport.recordClick(UiAction.Type.CLOSE_SEARCH_WITH_HIDE_BUTTON); maybeExitSearchUi(); } else { // If the search term is not empty, show the dialpad fab. + if (!mFloatingActionButtonController.isVisible()) { + PerformanceReport.recordClick(UiAction.Type.HIDE_KEYBOARD_IN_SEARCH); + } showFabInSearchUi(); } } return false; } }; + /** * The text returned from a voice search query. Set in {@link #onActivityResult} and used in * {@link #onResume()} to populate the search box. @@ -355,6 +395,7 @@ public class DialtactsActivity extends TransactionSafeActivity super.onCreate(savedInstanceState); mFirstLaunch = true; + isLastTabEnabled = ConfigProviderBindings.get(this).getBoolean("last_tab_enabled", false); final Resources resources = getResources(); mActionBarHeight = resources.getDimensionPixelSize(R.dimen.action_bar_height_large); @@ -371,12 +412,12 @@ public class DialtactsActivity extends TransactionSafeActivity actionBar.setBackgroundDrawable(null); SearchEditTextLayout searchEditTextLayout = - (SearchEditTextLayout) actionBar.getCustomView().findViewById(R.id.search_view_container); + actionBar.getCustomView().findViewById(R.id.search_view_container); searchEditTextLayout.setPreImeKeyListener(mSearchEditTextLayoutListener); mActionBarController = new ActionBarController(this, searchEditTextLayout); - mSearchView = (EditText) searchEditTextLayout.findViewById(R.id.search_view); + mSearchView = searchEditTextLayout.findViewById(R.id.search_view); mSearchView.addTextChangedListener(mPhoneSearchQueryTextListener); mVoiceSearchButton = searchEditTextLayout.findViewById(R.id.voice_search_button); searchEditTextLayout @@ -399,14 +440,13 @@ public class DialtactsActivity extends TransactionSafeActivity mIsLandscape = getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE; mPreviouslySelectedTabIndex = DialtactsPagerAdapter.TAB_INDEX_SPEED_DIAL; - FloatingActionButton floatingActionButton = - (FloatingActionButton) findViewById(R.id.floating_action_button); + FloatingActionButton floatingActionButton = findViewById(R.id.floating_action_button); floatingActionButton.setOnClickListener(this); mFloatingActionButtonController = new FloatingActionButtonController(this, floatingActionButton); ImageButton optionsMenuButton = - (ImageButton) searchEditTextLayout.findViewById(R.id.dialtacts_options_menu_button); + searchEditTextLayout.findViewById(R.id.dialtacts_options_menu_button); optionsMenuButton.setOnClickListener(this); mOverflowMenu = buildOptionsMenu(optionsMenuButton); optionsMenuButton.setOnTouchListener(mOverflowMenu.getDragToOpenListener()); @@ -480,6 +520,13 @@ public class DialtactsActivity extends TransactionSafeActivity Trace.beginSection(TAG + " onResume"); super.onResume(); + // Some calls may not be recorded (eg. from quick contact), + // so we should restart recording after these calls. (Recorded call is stopped) + PostCall.restartPerformanceRecordingIfARecentCallExist(this); + if (!PerformanceReport.isRecording()) { + PerformanceReport.startRecording(); + } + mStateSaved = false; if (mFirstLaunch) { displayFragment(getIntent()); @@ -542,7 +589,8 @@ public class DialtactsActivity extends TransactionSafeActivity } if (getIntent().getBooleanExtra(EXTRA_CLEAR_NEW_VOICEMAILS, false)) { - CallLogNotificationsService.markNewVoicemailsAsOld(this, null); + LogUtil.i("DialtactsActivity.onResume", "clearing all new voicemails"); + CallLogNotificationsService.markAllNewVoicemailsAsOld(this); } } @@ -556,7 +604,7 @@ public class DialtactsActivity extends TransactionSafeActivity new P13nRefreshCompleteListener() { @Override public void onP13nRefreshComplete() { - // TODO: make zero-query search results visible + // TODO(strongarm): make zero-query search results visible } }); Trace.endSection(); @@ -593,6 +641,10 @@ public class DialtactsActivity extends TransactionSafeActivity && !getSystemService(KeyguardManager.class).isKeyguardLocked()) { mListsFragment.markMissedCallsAsReadAndRemoveNotifications(); } + DialerUtils.getDefaultSharedPreferenceForDeviceProtectedStorageContext(this) + .edit() + .putInt(KEY_LAST_TAB, mListsFragment.getCurrentTabIndex()) + .apply(); } @Override @@ -630,6 +682,9 @@ public class DialtactsActivity extends TransactionSafeActivity } else if (fragment instanceof ListsFragment) { mListsFragment = (ListsFragment) fragment; mListsFragment.addOnPageChangeListener(this); + } else if (fragment instanceof NewSearchFragment) { + mNewSearchFragment = (NewSearchFragment) fragment; + updateSearchFragmentPosition(); } if (fragment instanceof SearchFragment) { final SearchFragment searchFragment = (SearchFragment) fragment; @@ -664,13 +719,8 @@ public class DialtactsActivity extends TransactionSafeActivity public void onClick(View view) { int resId = view.getId(); if (resId == R.id.floating_action_button) { - if (mListsFragment.getCurrentTabIndex() == DialtactsPagerAdapter.TAB_INDEX_ALL_CONTACTS - && !mInRegularSearch - && !mInDialpadSearch) { - DialerUtils.startActivityWithErrorToast( - this, IntentUtil.getNewContactIntent(), R.string.add_contact_not_available); - Logger.get(this).logImpression(DialerImpression.Type.NEW_CONTACT_FAB); - } else if (!mIsDialpadShown) { + if (!mIsDialpadShown) { + PerformanceReport.recordClick(UiAction.Type.OPEN_DIALPAD); mInCallDialpadUp = false; showDialpadFragment(true); PostCall.closePrompt(); @@ -679,7 +729,7 @@ public class DialtactsActivity extends TransactionSafeActivity try { startActivityForResult( new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), - ACTIVITY_REQUEST_CODE_VOICE_SEARCH); + ActivityRequestCodes.DIALTACTS_VOICE_SEARCH); } catch (ActivityNotFoundException e) { Toast.makeText( DialtactsActivity.this, R.string.voice_search_not_available, Toast.LENGTH_SHORT) @@ -700,6 +750,7 @@ public class DialtactsActivity extends TransactionSafeActivity int resId = item.getItemId(); if (resId == R.id.menu_history) { + PerformanceReport.recordClick(UiAction.Type.OPEN_CALL_HISTORY); final Intent intent = new Intent(this, CallLogActivity.class); startActivity(intent); } else if (resId == R.id.menu_clear_frequents) { @@ -710,6 +761,9 @@ public class DialtactsActivity extends TransactionSafeActivity handleMenuSettings(); Logger.get(this).logScreenView(ScreenEvent.Type.SETTINGS, this); return true; + } else if (resId == R.id.menu_new_ui_launcher_shortcut) { + MainComponent.get(this).getMain().createNewUiLauncherShortcut(this); + return true; } return false; } @@ -721,7 +775,7 @@ public class DialtactsActivity extends TransactionSafeActivity "requestCode:%d, resultCode:%d", requestCode, resultCode); - if (requestCode == ACTIVITY_REQUEST_CODE_VOICE_SEARCH) { + if (requestCode == ActivityRequestCodes.DIALTACTS_VOICE_SEARCH) { if (resultCode == RESULT_OK) { final ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); @@ -733,7 +787,7 @@ public class DialtactsActivity extends TransactionSafeActivity } else { LogUtil.e("DialtactsActivity.onActivityResult", "voice search failed"); } - } else if (requestCode == ACTIVITY_REQUEST_CODE_CALL_COMPOSE) { + } else if (requestCode == ActivityRequestCodes.DIALTACTS_CALL_COMPOSER) { if (resultCode == RESULT_FIRST_USER) { LogUtil.i( "DialtactsActivity.onActivityResult", "returned from call composer, error occurred"); @@ -745,6 +799,19 @@ public class DialtactsActivity extends TransactionSafeActivity } else { LogUtil.i("DialtactsActivity.onActivityResult", "returned from call composer, no error"); } + } else if (requestCode == ActivityRequestCodes.DIALTACTS_CALL_DETAILS) { + if (resultCode == RESULT_OK + && data != null + && data.getBooleanExtra(CallDetailsActivity.EXTRA_HAS_ENRICHED_CALL_DATA, false)) { + String number = data.getStringExtra(CallDetailsActivity.EXTRA_PHONE_NUMBER); + int snackbarDurationMillis = 5_000; + Snackbar.make(mParentLayout, getString(R.string.ec_data_deleted), snackbarDurationMillis) + .setAction( + R.string.view_conversation, + v -> startActivity(IntentProvider.getSendSmsIntentProvider(number).getIntent(this))) + .setActionTextColor(getResources().getColor(R.color.dialer_snackbar_action_text_color)) + .show(); + } } super.onActivityResult(requestCode, resultCode, data); } @@ -785,6 +852,7 @@ public class DialtactsActivity extends TransactionSafeActivity if (animate) { mFloatingActionButtonController.scaleOut(); + maybeEnterSearchUi(); } else { mFloatingActionButtonController.setVisible(false); maybeEnterSearchUi(); @@ -793,11 +861,19 @@ public class DialtactsActivity extends TransactionSafeActivity Assert.isNotNull(mListsFragment.getView()).animate().alpha(0).withLayer(); - //adjust the title, so the user will know where we're at when the activity start/resumes. + // adjust the title, so the user will know where we're at when the activity start/resumes. setTitle(R.string.launcherDialpadActivityLabel); } + @Override + public void getLastOutgoingCall(LastOutgoingCallCallback callback) { + new CallLogAsync() + .getLastOutgoingCall( + new CallLogAsync.GetLastOutgoingCallArgs(this, callback::lastOutgoingCall)); + } + /** Callback from child DialpadFragment when the dialpad is shown. */ + @Override public void onDialpadShown() { LogUtil.d("DialtactsActivity.onDialpadShown", ""); Assert.isNotNull(mDialpadFragment); @@ -816,6 +892,7 @@ public class DialtactsActivity extends TransactionSafeActivity * * @see #commitDialpadFragmentHide */ + @Override public void hideDialpadFragment(boolean animate, boolean clearDialpad) { if (mDialpadFragment == null || mDialpadFragment.getView() == null) { return; @@ -855,7 +932,7 @@ public class DialtactsActivity extends TransactionSafeActivity exitSearchUi(); } } - //reset the title to normal. + // reset the title to normal. setTitle(R.string.launcherActivityLabel); } @@ -890,6 +967,13 @@ public class DialtactsActivity extends TransactionSafeActivity // available immediately which is required to update position. By forcing an animation, // position will be updated after a delay by when the dialpad height would be available. fragment.updatePosition(true /* animate */); + } else if (mNewSearchFragment != null) { + int animationDuration = getResources().getInteger(R.integer.dialpad_slide_in_duration); + int actionbarHeight = getResources().getDimensionPixelSize(R.dimen.action_bar_height_large); + int shadowHeight = getResources().getDrawable(R.drawable.search_shadow).getIntrinsicHeight(); + int start = isDialpadShown() ? actionbarHeight - shadowHeight : 0; + int end = isDialpadShown() ? 0 : actionbarHeight - shadowHeight; + mNewSearchFragment.animatePosition(start, end, animationDuration); } } @@ -1007,6 +1091,19 @@ public class DialtactsActivity extends TransactionSafeActivity if (showDialpadChooser && !mDialpadFragment.isVisible()) { mInCallDialpadUp = true; } + } else if (isLastTabEnabled) { + @TabIndex + int tabIndex = + DialerUtils.getDefaultSharedPreferenceForDeviceProtectedStorageContext(this) + .getInt(KEY_LAST_TAB, DialtactsPagerAdapter.TAB_INDEX_SPEED_DIAL); + // If voicemail tab is saved and its availability changes, we still move to the voicemail tab + // but it is quickly removed and shown the contacts tab. + if (mListsFragment != null) { + mListsFragment.showTab(tabIndex); + PerformanceReport.setStartingTabIndex(tabIndex); + } else { + PerformanceReport.setStartingTabIndex(DialtactsPagerAdapter.TAB_INDEX_SPEED_DIAL); + } } } @@ -1057,7 +1154,11 @@ public class DialtactsActivity extends TransactionSafeActivity } final String tag; - if (smartDialSearch) { + boolean useNewSearch = + ConfigProviderBindings.get(this).getBoolean("enable_new_search_fragment", false); + if (useNewSearch) { + tag = TAG_NEW_SEARCH_FRAGMENT; + } else if (smartDialSearch) { tag = TAG_SMARTDIAL_SEARCH_FRAGMENT; } else { tag = TAG_REGULAR_SEARCH_FRAGMENT; @@ -1067,40 +1168,53 @@ public class DialtactsActivity extends TransactionSafeActivity mFloatingActionButtonController.scaleOut(); - SearchFragment fragment = (SearchFragment) getFragmentManager().findFragmentByTag(tag); if (animate) { transaction.setCustomAnimations(android.R.animator.fade_in, 0); } else { transaction.setTransition(FragmentTransaction.TRANSIT_NONE); } + + Fragment fragment = getFragmentManager().findFragmentByTag(tag); if (fragment == null) { - if (smartDialSearch) { + if (useNewSearch) { + fragment = new NewSearchFragment(); + } else if (smartDialSearch) { fragment = new SmartDialSearchFragment(); } else { fragment = Bindings.getLegacy(this).newRegularSearchFragment(); - fragment.setOnTouchListener( - new View.OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - // Show the FAB when the user touches the lists fragment and the soft - // keyboard is hidden. - hideDialpadFragment(true, false); - showFabInSearchUi(); - v.performClick(); - return false; - } - }); + ((SearchFragment) fragment) + .setOnTouchListener( + (v, event) -> { + // Show the FAB when the user touches the lists fragment and the soft + // keyboard is hidden. + hideDialpadFragment(true, false); + v.performClick(); + return false; + }); } transaction.add(R.id.dialtacts_frame, fragment, tag); } else { + // TODO(calderwoodra): if this is a transition from dialpad to searchbar, animate fragment + // down, and vice versa. Perhaps just add a coordinator behavior with the search bar. transaction.show(fragment); } + // DialtactsActivity will provide the options menu fragment.setHasOptionsMenu(false); + // Will show empty list if P13nRanker is not enabled. Else, re-ranked list by the ranker. - fragment.setShowEmptyListForNullQuery(mP13nRanker.shouldShowEmptyListForNullQuery()); - if (!smartDialSearch) { - fragment.setQueryString(query); + if (!useNewSearch) { + ((SearchFragment) fragment) + .setShowEmptyListForNullQuery(mP13nRanker.shouldShowEmptyListForNullQuery()); + } else { + // TODO(calderwoodra): add p13n ranker to new search. + } + + if (!smartDialSearch && !useNewSearch) { + ((SearchFragment) fragment).setQueryString(query); + } else if (useNewSearch) { + ((NewSearchFragment) fragment).setQuery(query); + ((NewSearchFragment) fragment).setCallInitiationType(getCallInitiationType()); } transaction.commit(); @@ -1146,6 +1260,9 @@ public class DialtactsActivity extends TransactionSafeActivity if (mRegularSearchFragment != null) { transaction.remove(mRegularSearchFragment); } + if (mNewSearchFragment != null) { + transaction.remove(mNewSearchFragment); + } transaction.commit(); Assert.isNotNull(mListsFragment.getView()).animate().alpha(1).withLayer(); @@ -1163,6 +1280,8 @@ public class DialtactsActivity extends TransactionSafeActivity @Override public void onBackPressed() { + PerformanceReport.recordClick(UiAction.Type.PRESS_ANDROID_BACK_BUTTON); + if (mStateSaved) { return; } @@ -1247,6 +1366,7 @@ public class DialtactsActivity extends TransactionSafeActivity if (mInDialpadSearch && mSmartDialSearchFragment != null && !mSmartDialSearchFragment.isShowingPermissionRequest()) { + PerformanceReport.recordClick(UiAction.Type.CLOSE_DIALPAD); hideDialpadFragment(true /* animate */, true /* clearDialpad */); return true; } @@ -1255,6 +1375,7 @@ public class DialtactsActivity extends TransactionSafeActivity @Override public void onListFragmentScrollStateChange(int scrollState) { + PerformanceReport.recordScrollStateChange(scrollState); if (scrollState == OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) { hideDialpadFragment(true, false); DialerUtils.hideInputMethod(mParentLayout); @@ -1349,6 +1470,12 @@ public class DialtactsActivity extends TransactionSafeActivity Intent intent = new CallIntentBuilder(phoneNumber, callSpecificAppData).setIsVideoCall(isVideoCall).build(); + if (callSpecificAppData.getAllowAssistedDialing()) { + Bundle extras = new Bundle(); + extras.putBoolean(TelephonyManagerCompat.ALLOW_ASSISTED_DIAL, true); + intent.putExtra(TelecomManager.EXTRA_OUTGOING_CALL_EXTRAS, extras); + } + DialerUtils.startActivityWithErrorToast(this, intent); mClearSearchOnPause = true; } @@ -1381,18 +1508,6 @@ public class DialtactsActivity extends TransactionSafeActivity int tabIndex = mListsFragment.getCurrentTabIndex(); mPreviouslySelectedTabIndex = tabIndex; mFloatingActionButtonController.setVisible(true); - if (tabIndex == DialtactsPagerAdapter.TAB_INDEX_ALL_CONTACTS - && !mInRegularSearch - && !mInDialpadSearch) { - mFloatingActionButtonController.changeIcon( - getResources().getDrawable(R.drawable.quantum_ic_person_add_white_24, null), - getResources().getString(R.string.search_shortcut_create_new_contact)); - } else { - mFloatingActionButtonController.changeIcon( - getResources().getDrawable(R.drawable.quantum_ic_dialpad_white_24, null), - getResources().getString(R.string.action_menu_dialpad_button)); - } - timeTabSelected = SystemClock.elapsedRealtime(); } @@ -1477,6 +1592,23 @@ public class DialtactsActivity extends TransactionSafeActivity Arrays.toString(grantResults))); } + @Override + public void onActionModeStateChanged(boolean isEnabled) { + isMultiSelectModeEnabled = isEnabled; + } + + @Override + public boolean isActionModeStateEnabled() { + return isMultiSelectModeEnabled; + } + + private CallInitiationType.Type getCallInitiationType() { + return mIsDialpadShown + ? CallInitiationType.Type.DIALPAD + : CallInitiationType.Type.REGULAR_SEARCH; + } + + /** Popup menu accessible from the search bar */ protected class OptionsPopupMenu extends PopupMenu { public OptionsPopupMenu(Context context, View anchor) { @@ -1505,6 +1637,10 @@ public class DialtactsActivity extends TransactionSafeActivity simulatorMenuItem.setVisible(false); } + Main dialtacts = MainComponent.get(context).getMain(); + menu.findItem(R.id.menu_new_ui_launcher_shortcut) + .setVisible(dialtacts.isNewUiEnabled(context)); + super.show(); } } |