DialtactsActivity.java revision c3766338b312f9c8a6bdb2facaf4b0a4bd199de4
194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng/* 2c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee * Copyright (C) 2013 The Android Open Source Project 394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * 494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Licensed under the Apache License, Version 2.0 (the "License"); 594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * you may not use this file except in compliance with the License. 694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * You may obtain a copy of the License at 794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * 894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * http://www.apache.org/licenses/LICENSE-2.0 994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * 1094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Unless required by applicable law or agreed to in writing, software 1194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * distributed under the License is distributed on an "AS IS" BASIS, 1294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * See the License for the specific language governing permissions and 1494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * limitations under the License. 1594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng */ 1694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 1794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengpackage com.android.dialer; 1894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 19c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Leeimport android.animation.Animator; 20c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Leeimport android.animation.Animator.AnimatorListener; 21c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Leeimport android.animation.AnimatorListenerAdapter; 2294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.app.Activity; 239c1e0653addc1fff03601289a9f9a57b1daeaf57Christine Chenimport android.app.backup.BackupManager; 2494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.app.Fragment; 2594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.app.FragmentManager; 2694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.app.FragmentTransaction; 27073b5cf341964796ccf082d30aff63225d3adb28Chiao Chengimport android.content.ActivityNotFoundException; 2894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.content.Context; 2994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.content.Intent; 3094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.content.SharedPreferences; 31c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Leeimport android.content.res.Resources; 3294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.net.Uri; 3394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.os.Bundle; 3494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.os.RemoteException; 3594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.os.ServiceManager; 3694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.provider.CallLog.Calls; 37c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Leeimport android.provider.ContactsContract; 3894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.provider.ContactsContract.Contacts; 3994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.provider.ContactsContract.Intents.UI; 40c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Leeimport android.provider.Settings; 41c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Leeimport android.speech.RecognizerIntent; 42c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Leeimport android.support.v4.app.NavUtils; 43c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Leeimport android.telephony.TelephonyManager; 44c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Leeimport android.text.Editable; 4594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.text.TextUtils; 46c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Leeimport android.text.TextWatcher; 4794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.util.Log; 4894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.view.Menu; 4994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.view.MenuItem; 5094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.view.View; 5194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.view.View.OnFocusChangeListener; 5294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.view.ViewConfiguration; 5394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.view.inputmethod.InputMethodManager; 54c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Leeimport android.widget.AbsListView.OnScrollListener; 55c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Leeimport android.widget.EditText; 56c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Leeimport android.widget.ImageView; 5794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.widget.PopupMenu; 5894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.widget.SearchView; 5994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.widget.SearchView.OnCloseListener; 6094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.widget.SearchView.OnQueryTextListener; 61073b5cf341964796ccf082d30aff63225d3adb28Chiao Chengimport android.widget.Toast; 6294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 639d4f3b20793a007b4489547aa40fc1049d0d8fefChiao Chengimport com.android.contacts.common.CallUtil; 64603ff6858d321e8265b3af6363a63df2827e0334Chiao Chengimport com.android.contacts.common.activity.TransactionSafeActivity; 65c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Leeimport com.android.contacts.common.dialog.ClearFrequentsDialog; 66c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Leeimport com.android.contacts.common.interactions.ImportExportDialogFragment; 671429f1a5c2b993a5013bfda7cfd75a2c43ead2bfChiao Chengimport com.android.contacts.common.list.ContactListItemView; 688efbcf920eeebc826c18b3c474e9c62b77dcd232Chiao Chengimport com.android.contacts.common.list.OnPhoneNumberPickerActionListener; 698efbcf920eeebc826c18b3c474e9c62b77dcd232Chiao Chengimport com.android.contacts.common.list.PhoneNumberPickerFragment; 70c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Leeimport com.android.dialer.calllog.CallLogActivity; 71c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Leeimport com.android.dialer.dialpad.NewDialpadFragment; 72c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Leeimport com.android.dialer.dialpad.SmartDialNameMatcher; 731429f1a5c2b993a5013bfda7cfd75a2c43ead2bfChiao Chengimport com.android.dialer.interactions.PhoneNumberInteraction; 74c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Leeimport com.android.dialer.list.NewPhoneFavoriteFragment; 75c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Leeimport com.android.dialer.list.OnListFragmentScrolledListener; 76c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Leeimport com.android.dialer.list.ShowAllContactsFragment; 77c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Leeimport com.android.dialer.list.SmartDialSearchFragment; 7894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport com.android.internal.telephony.ITelephony; 7994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 80c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Leeimport java.util.ArrayList; 81c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee 8294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng/** 8394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * The dialer tab's title is 'phone', a more common name (see strings.xml). 84c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee * 85c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee * TODO krelease: All classes currently prefixed with New will replace the original classes or 86c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee * be renamed more appropriately before shipping. 8794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng */ 88c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Leepublic class DialtactsActivity extends TransactionSafeActivity implements View.OnClickListener, 89c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee NewDialpadFragment.OnDialpadQueryChangedListener, PopupMenu.OnMenuItemClickListener, 90c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee OnListFragmentScrolledListener, 91c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee NewPhoneFavoriteFragment.OnPhoneFavoriteFragmentStartedListener, 92c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee NewDialpadFragment.OnDialpadFragmentStartedListener { 9394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private static final String TAG = "DialtactsActivity"; 9494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 9594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng public static final boolean DEBUG = false; 9694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 9794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** Used to open Call Setting */ 9894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private static final String PHONE_PACKAGE = "com.android.phone"; 9994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private static final String CALL_SETTINGS_CLASS_NAME = 10094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng "com.android.phone.CallFeaturesSetting"; 10194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** @see #getCallOrigin() */ 10294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private static final String CALL_ORIGIN_DIALTACTS = 10394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng "com.android.dialer.DialtactsActivity"; 10494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 105c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee private static final String TAG_DIALPAD_FRAGMENT = "dialpad"; 106c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee private static final String TAG_REGULAR_SEARCH_FRAGMENT = "search"; 107c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee private static final String TAG_SMARTDIAL_SEARCH_FRAGMENT = "smartdial"; 108c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee private static final String TAG_FAVORITES_FRAGMENT = "favorites"; 109c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee private static final String TAG_SHOW_ALL_CONTACTS_FRAGMENT = "show_all_contacts"; 110c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee 11194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** 11294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Just for backward compatibility. Should behave as same as {@link Intent#ACTION_DIAL}. 11394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng */ 11494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private static final String ACTION_TOUCH_DIALER = "com.android.phone.action.TOUCH_DIALER"; 11594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 11694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private static final int SUBACTIVITY_ACCOUNT_FILTER = 1; 11794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 118c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee private static final int ACTIVITY_REQUEST_CODE_VOICE_SEARCH = 1; 11994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 120c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee private String mFilterText; 12194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 12294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** 123c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee * The main fragment displaying the user's favorites and frequent contacts 12494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng */ 125c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee private NewPhoneFavoriteFragment mPhoneFavoriteFragment; 126c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee 12794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** 128c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee * Fragment containing the dialpad that slides into view 12994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng */ 130c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee private NewDialpadFragment mDialpadFragment; 13194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 132c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee /** 133c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee * Fragment for searching phone numbers using the alphanumeric keyboard. 134c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee */ 135c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee private NewSearchFragment mRegularSearchFragment; 13694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 137c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee /** 138c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee * Fragment for searching phone numbers using the dialpad. 139c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee */ 140c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee private SmartDialSearchFragment mSmartDialSearchFragment; 14194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 142c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee private ShowAllContactsFragment mShowAllContactsFragment; 14394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 14494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private View mMenuButton; 145c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee private View mCallHistoryButton; 146c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee private View mDialpadButton; 14794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 148c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee // Padding view used to shift the fragments up when the dialpad is shown. 149c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee private View mBottomPaddingView; 15094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 15194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** 15294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * True when this Activity is in its search UI (with a {@link SearchView} and 15394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * {@link PhoneNumberPickerFragment}). 15494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng */ 15594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private boolean mInSearchUi; 156c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee private View mSearchViewContainer; 157c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee private View mSearchViewCloseButton; 158c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee private View mVoiceSearchButton; 159c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee private EditText mSearchView; 16094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 16194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** 16294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Listener used when one of phone numbers in search UI is selected. This will initiate a 16394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * phone call using the phone number. 16494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng */ 16594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private final OnPhoneNumberPickerActionListener mPhoneNumberPickerActionListener = 16694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng new OnPhoneNumberPickerActionListener() { 16794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng @Override 16894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng public void onPickPhoneNumberAction(Uri dataUri) { 16994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // Specify call-origin so that users will see the previous tab instead of 17094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // CallLog screen (search UI will be automatically exited). 17194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng PhoneNumberInteraction.startInteractionForPhoneCall( 172c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee DialtactsActivity.this, dataUri, getCallOrigin()); 17394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 17494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 17594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng @Override 17694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng public void onShortcutIntentCreated(Intent intent) { 17794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng Log.w(TAG, "Unsupported intent has come (" + intent + "). Ignoring."); 17894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 17994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 18094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng @Override 18194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng public void onHomeInActionBarSelected() { 18294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng exitSearchUi(); 18394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 18494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng }; 18594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 18694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** 18794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Listener used to send search queries to the phone search fragment. 18894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng */ 189c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee private final TextWatcher mPhoneSearchQueryTextListener = new TextWatcher() { 190c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee @Override 191c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee public void beforeTextChanged(CharSequence s, int start, int count, int after) { 192c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } 19394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 194c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee @Override 195c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee public void onTextChanged(CharSequence s, int start, int before, int count) { 196c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee // TODO krelease: populate the search fragments with the correct 197c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee // search query at the correct point in time of the fragment lifecycle. 198c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee // The current behavior is to simply return to the favorites screen 199c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee // (when docked), or returning to the Dialer after it has been 200c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee // swapped out of memory. 201c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee if (mDialpadFragment == null) return; 202c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee final boolean smartDialSearch = isDialpadShowing(); 203c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee final String newText = s.toString(); 204c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee // Show search result with non-empty text. Show a bare list otherwise. 205c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee if (TextUtils.isEmpty(newText) && mInSearchUi) { 206c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee exitSearchUi(); 207c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mSearchViewCloseButton.setVisibility(View.GONE); 208c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee return; 209c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } else if (!TextUtils.isEmpty(newText) && !mInSearchUi) { 210c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee enterSearchUi(smartDialSearch); 21194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 21294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 213c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee if (smartDialSearch) { 214c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mSmartDialSearchFragment.setQueryString(newText, false); 215c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } else { 216c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mRegularSearchFragment.setQueryString(newText, false); 21794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 218c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mSearchViewCloseButton.setVisibility(View.VISIBLE); 219c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee return; 220c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } 22194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 222c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee @Override 223c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee public void afterTextChanged(Editable s) { 224c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } 22594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng }; 22694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 227c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee private boolean isDialpadShowing() { 228c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee return mDialpadFragment != null && mDialpadFragment.isVisible(); 229c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } 230c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee 23194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng @Override 232c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee protected void onCreate(Bundle savedInstanceState) { 233c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee super.onCreate(savedInstanceState); 23494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 23594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng final Intent intent = getIntent(); 23694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng fixIntent(intent); 23794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 238c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee setContentView(R.layout.new_dialtacts_activity); 23994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 240c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee getActionBar().hide(); 24194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 242c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee if (savedInstanceState == null) { 243c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mPhoneFavoriteFragment = new NewPhoneFavoriteFragment(); 244c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mPhoneFavoriteFragment.setListener(mPhoneFavoriteListener); 24594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 246c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mRegularSearchFragment = new NewSearchFragment(); 247c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mSmartDialSearchFragment = new SmartDialSearchFragment(); 248c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mDialpadFragment = new NewDialpadFragment(); 249c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mShowAllContactsFragment = new ShowAllContactsFragment(); 250c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mShowAllContactsFragment.setOnPhoneNumberPickerActionListener( 251c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mPhoneNumberPickerActionListener); 25294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 253c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee // TODO krelease: load fragments on demand instead of creating all of them at run time 254c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee final FragmentTransaction ft = getFragmentManager().beginTransaction(); 255c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee ft.add(R.id.dialtacts_frame, mPhoneFavoriteFragment, TAG_FAVORITES_FRAGMENT); 256c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee ft.add(R.id.dialtacts_frame, mRegularSearchFragment, TAG_REGULAR_SEARCH_FRAGMENT); 257c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee ft.add(R.id.dialtacts_frame, mSmartDialSearchFragment, TAG_SMARTDIAL_SEARCH_FRAGMENT); 258c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee ft.add(R.id.dialtacts_frame, mShowAllContactsFragment, TAG_SHOW_ALL_CONTACTS_FRAGMENT); 259c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee ft.add(R.id.dialtacts_container, mDialpadFragment, TAG_DIALPAD_FRAGMENT); 260c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee ft.commit(); 26194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 26294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 263c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mBottomPaddingView = findViewById(R.id.dialtacts_bottom_padding); 264c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee prepareSearchView(); 26594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 266c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee displayFragment(intent); 26794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 26894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng if (UI.FILTER_CONTACTS_ACTION.equals(intent.getAction()) 269c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee && savedInstanceState == null) { 27094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng setupFilterText(intent); 27194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 27294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 27394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 27494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng @Override 275c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee protected void onResume() { 276c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee super.onResume(); 277c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee final FragmentManager fm = getFragmentManager(); 278c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mPhoneFavoriteFragment = (NewPhoneFavoriteFragment) fm.findFragmentByTag( 279c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee TAG_FAVORITES_FRAGMENT); 280c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mDialpadFragment = (NewDialpadFragment) fm.findFragmentByTag(TAG_DIALPAD_FRAGMENT); 28194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 282c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mRegularSearchFragment = (NewSearchFragment) fm.findFragmentByTag( 283c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee TAG_REGULAR_SEARCH_FRAGMENT); 284c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mRegularSearchFragment.setOnPhoneNumberPickerActionListener( 285c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mPhoneNumberPickerActionListener); 286c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee 287c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mSmartDialSearchFragment = (SmartDialSearchFragment) fm.findFragmentByTag( 288c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee TAG_SMARTDIAL_SEARCH_FRAGMENT); 289c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mSmartDialSearchFragment.setOnPhoneNumberPickerActionListener( 290c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mPhoneNumberPickerActionListener); 291c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee 292c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mShowAllContactsFragment = (ShowAllContactsFragment) fm.findFragmentByTag( 293c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee TAG_SHOW_ALL_CONTACTS_FRAGMENT); 294c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mShowAllContactsFragment.setOnPhoneNumberPickerActionListener( 295c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mPhoneNumberPickerActionListener); 296c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } 29794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 298c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee @Override 299c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee public void onAttachFragment(Fragment fragment) { 300c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee if (fragment instanceof NewDialpadFragment || fragment instanceof NewSearchFragment 301c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee || fragment instanceof SmartDialSearchFragment 302c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee || fragment instanceof ShowAllContactsFragment) { 303c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee final FragmentTransaction transaction = getFragmentManager().beginTransaction(); 304c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee transaction.hide(fragment); 305c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee transaction.commit(); 30694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 307c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee // TODO krelease: Save some kind of state here to show the appropriate fragment 308c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee // based on the state of the dialer when it was last paused 309c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } 310c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee 311c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee @Override 312c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee public boolean onOptionsItemSelected(MenuItem item) { 313c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee switch (item.getItemId()) { 314c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee // Respond to the action bar's Up/Home button 315c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee case android.R.id.home: 316c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee hideAllContactsFragment(); 31794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 318c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee return super.onOptionsItemSelected(item); 31994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 32094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 32194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng @Override 322c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee public boolean onMenuItemClick(MenuItem item) { 323c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee switch (item.getItemId()) { 324c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee case R.id.menu_import_export: 325c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee // We hard-code the "contactsAreAvailable" argument because doing it properly would 326c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee // involve querying a {@link ProviderStatusLoader}, which we don't want to do right 327c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee // now in Dialtacts for (potential) performance reasons. Compare with how it is 328c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee // done in {@link PeopleActivity}. 329c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee ImportExportDialogFragment.show(getFragmentManager(), true, 330c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee OldDialtactsActivity.class); 331c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee return true; 332c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee case R.id.menu_clear_frequents: 333c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee ClearFrequentsDialog.show(getFragmentManager()); 334c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee return true; 335c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee case R.id.add_contact: 336c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee try { 337c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee startActivity(new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI)); 338c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } catch (ActivityNotFoundException e) { 339c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee Toast toast = Toast.makeText(this, 340c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee R.string.add_contact_not_available, 341c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee Toast.LENGTH_SHORT); 342c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee toast.show(); 343c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } 344c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee return true; 345c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee case R.id.menu_call_settings: 346c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee final Intent settingsIntent = OldDialtactsActivity.getCallSettingsIntent(); 347c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee startActivity(settingsIntent); 348c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } 349c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee return false; 35094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 35194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 35294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng @Override 35394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng public void onClick(View view) { 35494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng switch (view.getId()) { 355c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee case R.id.overflow_menu: { 356c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee final PopupMenu popupMenu = new PopupMenu(DialtactsActivity.this, view); 357c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee final Menu menu = popupMenu.getMenu(); 358c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee popupMenu.inflate(R.menu.dialtacts_options_new); 359c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee popupMenu.setOnMenuItemClickListener(this); 360c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee popupMenu.show(); 36194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng break; 36294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 363c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee case R.id.dialpad_button: 364c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee showDialpadFragment(true); 365c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee break; 366c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee case R.id.call_history_on_dialpad_button: 367c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee case R.id.call_history_button: 368c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee // TODO krelease: This should start an intent with content type 369c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee // CallLog.Calls.CONTENT_TYPE, once the intent filters for the call log activity 370c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee // is enabled 371c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee final Intent intent = new Intent(this, CallLogActivity.class); 372c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee startActivity(intent); 373c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee break; 374c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee case R.id.search_close_button: 375c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee // Clear the search field 376c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee if (!TextUtils.isEmpty(mSearchView.getText())) { 377c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mSearchView.setText(""); 37894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 37994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng break; 380c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee case R.id.voice_search_button: 381c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee final Intent voiceIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 382c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee startActivityForResult(voiceIntent, ACTIVITY_REQUEST_CODE_VOICE_SEARCH); 383c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee break; 38494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng default: { 38594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng Log.wtf(TAG, "Unexpected onClick event from " + view); 38694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng break; 38794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 38894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 38994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 39094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 391c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee @Override 392c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee protected void onActivityResult(int requestCode, int resultCode, Intent data) { 393c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee if (requestCode == ACTIVITY_REQUEST_CODE_VOICE_SEARCH) { 394c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee if (resultCode == RESULT_OK) { 395c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee final ArrayList<String> matches = data.getStringArrayListExtra( 396c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee RecognizerIntent.EXTRA_RESULTS); 397c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee if (matches.size() > 0) { 398c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee final String match = matches.get(0); 399c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mSearchView.setText(match); 400c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } else { 401c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee Log.e(TAG, "Voice search - nothing heard"); 402c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } 403c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } else { 404c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee Log.e(TAG, "Voice search failed"); 405c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } 406c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } 407c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee super.onActivityResult(requestCode, resultCode, data); 408c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } 40994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 410c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee private void showDialpadFragment(boolean animate) { 411c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee final FragmentTransaction ft = getFragmentManager().beginTransaction(); 412c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee if (animate) { 413c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee ft.setCustomAnimations(R.anim.slide_in, 0); 414c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } 415c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee ft.show(mDialpadFragment); 416c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee ft.commit(); 417c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } 418c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee 419c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee private void hideDialpadFragment(boolean animate) { 420c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee final FragmentTransaction ft = getFragmentManager().beginTransaction(); 421c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee if (animate) { 422c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee ft.setCustomAnimations(0, R.anim.slide_out); 423c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } 424c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee ft.hide(mDialpadFragment); 425c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee ft.commit(); 426c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } 42794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 428c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee public void showAllContactsFragment() { 42994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng final FragmentTransaction ft = getFragmentManager().beginTransaction(); 430c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee ft.hide(mPhoneFavoriteFragment); 431c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee ft.show(mShowAllContactsFragment); 432c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee // TODO{klp} Add animation 433c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee ft.commit(); 434c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee hideSearchBar(false); 435c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } 43694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 437c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee private void hideAllContactsFragment() { 438c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee final FragmentTransaction ft = getFragmentManager().beginTransaction(); 439c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee ft.hide(mShowAllContactsFragment); 440c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee ft.show(mPhoneFavoriteFragment); 441c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee ft.commit(); 442c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee showSearchBar(); 44394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 44494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 44594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private void prepareSearchView() { 446c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mSearchViewContainer = findViewById(R.id.search_view_container); 447c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mSearchViewCloseButton = findViewById(R.id.search_close_button); 448c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mSearchViewCloseButton.setOnClickListener(this); 449c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mVoiceSearchButton = findViewById(R.id.voice_search_button); 450c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mVoiceSearchButton.setOnClickListener(this); 451c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mSearchView = (EditText) findViewById(R.id.search_view); 452c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mSearchView.addTextChangedListener(mPhoneSearchQueryTextListener); 453c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mSearchView.setHint(getString(R.string.dialer_hint_find_contact)); 454c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mSearchView.setOnFocusChangeListener(new OnFocusChangeListener() { 45594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng @Override 45694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng public void onFocusChange(View view, boolean hasFocus) { 45794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng if (hasFocus) { 45894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng showInputMethod(view.findFocus()); 45994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 46094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 46194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng }); 462c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } 463c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee 464c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee private void hideDialpadFragmentIfNecessary() { 465c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee if (mDialpadFragment.isVisible()) { 466c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee hideDialpadFragment(true); 467c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } 468c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } 46994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 470c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee final AnimatorListener mHideListener = new AnimatorListenerAdapter() { 471c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee @Override 472c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee public void onAnimationEnd(Animator animation) { 473c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mSearchViewContainer.setVisibility(View.GONE); 47494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 475c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee }; 47694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 477c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee public void hideSearchBar() { 478c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee hideSearchBar(true); 479c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } 480c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee 481c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee public void hideSearchBar(boolean shiftView) { 482c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee if (shiftView) { 483c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mSearchViewContainer.animate().cancel(); 484c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mSearchViewContainer.setAlpha(1); 485c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mSearchViewContainer.setTranslationY(0); 486c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mSearchViewContainer.animate().withLayer().alpha(0).translationY(-mSearchView.getHeight()) 487c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee .setDuration(200).setListener(mHideListener); 488c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee 489c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mPhoneFavoriteFragment.getView().animate().withLayer() 490c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee .translationY(-mSearchViewContainer.getHeight()).setDuration(200).setListener( 491c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee new AnimatorListenerAdapter() { 492c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee @Override 493c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee public void onAnimationEnd(Animator animation) { 494c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mBottomPaddingView.setVisibility(View.VISIBLE); 495c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mPhoneFavoriteFragment.getView().setTranslationY(0); 496c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } 497c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee }); 498c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } else { 499c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mSearchViewContainer.setTranslationY(-mSearchView.getHeight()); 500c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } 50194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 50294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 503c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee public void showSearchBar() { 504c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee // If the favorites fragment hasn't been fully created before the dialpad fragment 505c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee // is hidden (i.e. onResume), don't bother animating 506c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee if (mPhoneFavoriteFragment == null || mPhoneFavoriteFragment.getView() == null) { 507c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee return; 50894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 509c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mSearchViewContainer.animate().cancel(); 510c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mSearchViewContainer.setAlpha(0); 511c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mSearchViewContainer.setTranslationY(-mSearchViewContainer.getHeight()); 512c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mSearchViewContainer.animate().withLayer().alpha(1).translationY(0).setDuration(200) 513c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee .setListener(new AnimatorListenerAdapter() { 514c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee @Override 515c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee public void onAnimationStart(Animator animation) { 516c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mSearchViewContainer.setVisibility(View.VISIBLE); 517c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } 518c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee }); 519c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee 520c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mPhoneFavoriteFragment.getView().setTranslationY(-mSearchViewContainer.getHeight()); 521c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mPhoneFavoriteFragment.getView().animate().withLayer().translationY(0).setDuration(200) 522c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee .setListener( 523c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee new AnimatorListenerAdapter() { 524c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee @Override 525c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee public void onAnimationStart(Animator animation) { 526c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mBottomPaddingView.setVisibility(View.GONE); 527c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } 528c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee }); 52994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 53094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 53194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 532c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee public void setupFakeActionBarItemsForFavoritesFragment() { 533c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mMenuButton = findViewById(R.id.overflow_menu); 534c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee if (mMenuButton != null) { 535c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mMenuButton.setOnClickListener(this); 536c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } 537c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee 538c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mCallHistoryButton = findViewById(R.id.call_history_button); 539c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee // mCallHistoryButton.setMinimumWidth(fakeMenuItemWidth); 540c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mCallHistoryButton.setOnClickListener(this); 541c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee 542c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mDialpadButton = findViewById(R.id.dialpad_button); 543c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee // DialpadButton.setMinimumWidth(fakeMenuItemWidth); 544c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mDialpadButton.setOnClickListener(this); 5459c1e0653addc1fff03601289a9f9a57b1daeaf57Christine Chen } 5469c1e0653addc1fff03601289a9f9a57b1daeaf57Christine Chen 547c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee public void setupFakeActionBarItemsForDialpadFragment() { 548c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee final View callhistoryButton = findViewById(R.id.call_history_on_dialpad_button); 549c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee callhistoryButton.setOnClickListener(this); 55094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 55194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 55294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private void fixIntent(Intent intent) { 55394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // This should be cleaned up: the call key used to send an Intent 55494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // that just said to go to the recent calls list. It now sends this 55594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // abstract action, but this class hasn't been rewritten to deal with it. 55694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng if (Intent.ACTION_CALL_BUTTON.equals(intent.getAction())) { 55794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng intent.setDataAndType(Calls.CONTENT_URI, Calls.CONTENT_TYPE); 55894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng intent.putExtra("call_key", true); 55994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng setIntent(intent); 56094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 56194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 56294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 56394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** 56494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Returns true if the intent is due to hitting the green send key (hardware call button: 56594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * KEYCODE_CALL) while in a call. 56694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * 56794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * @param intent the intent that launched this activity 56894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * @param recentCallsRequest true if the intent is requesting to view recent calls 56994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * @return true if the intent is due to hitting the green send key while in a call 57094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng */ 571c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee private boolean isSendKeyWhileInCall(Intent intent, boolean recentCallsRequest) { 57294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // If there is a call in progress go to the call screen 57394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng if (recentCallsRequest) { 57494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng final boolean callKey = intent.getBooleanExtra("call_key", false); 57594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 57694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng try { 57794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng ITelephony phone = ITelephony.Stub.asInterface(ServiceManager.checkService("phone")); 57894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng if (callKey && phone != null && phone.showCallScreen()) { 57994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng return true; 58094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 58194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } catch (RemoteException e) { 58294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng Log.e(TAG, "Failed to handle send while in call", e); 58394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 58494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 58594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 58694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng return false; 58794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 58894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 58994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** 59094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Sets the current tab based on the intent's request type 59194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * 59294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * @param intent Intent that contains information about which tab should be selected 59394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng */ 594c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee private void displayFragment(Intent intent) { 595c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee // TODO krelease: Make navigation via intent work by displaying the correct fragment 596c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee // as appropriate. 597c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee 59894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // If we got here by hitting send and we're in call forward along to the in-call activity 59994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng boolean recentCallsRequest = Calls.CONTENT_TYPE.equals(intent.resolveType( 60094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng getContentResolver())); 60194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng if (isSendKeyWhileInCall(intent, recentCallsRequest)) { 60294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng finish(); 60394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng return; 60494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 60594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 606c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee if ((mDialpadFragment != null && phoneIsInUse()) 607f78d3444bd50cf3c4ddccff67b1d04422fa65f6dJay Shrauner || isDialIntent(intent)) { 608c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mDialpadFragment.setStartedFromNewIntent(true); 609c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee // TODO krelease: This should use showDialpadFragment(false) to avoid animating 610c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee // the dialpad in. Need to fix the onPreDrawListener in NewDialpadFragment first. 611c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee showDialpadFragment(true); 61294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 61394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 61494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 61594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng @Override 61694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng public void onNewIntent(Intent newIntent) { 61794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng setIntent(newIntent); 61894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng fixIntent(newIntent); 619c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee displayFragment(newIntent); 62094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng final String action = newIntent.getAction(); 621c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee 622c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee if (mInSearchUi || (mRegularSearchFragment != null && mRegularSearchFragment.isVisible())) { 62394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng exitSearchUi(); 62494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 62594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 626c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee // TODO krelease: Handle onNewIntent for all other fragments 627c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee /* 628c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee *if (mViewPager.getCurrentItem() == TAB_INDEX_DIALER) { if (mDialpadFragment != null) { 629c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee * mDialpadFragment.setStartedFromNewIntent(true); } else { Log.e(TAG, 630c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee * "DialpadFragment isn't ready yet when the tab is already selected."); } } else if 631c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee * (mViewPager.getCurrentItem() == TAB_INDEX_CALL_LOG) { if (mCallLogFragment != null) { 632c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee * mCallLogFragment.configureScreenFromIntent(newIntent); } else { Log.e(TAG, 633c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee * "CallLogFragment isn't ready yet when the tab is already selected."); } } 634c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee */ 63594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng invalidateOptionsMenu(); 63694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 63794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 63894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** Returns true if the given intent contains a phone number to populate the dialer with */ 63994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private boolean isDialIntent(Intent intent) { 64094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng final String action = intent.getAction(); 64194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng if (Intent.ACTION_DIAL.equals(action) || ACTION_TOUCH_DIALER.equals(action)) { 64294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng return true; 64394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 64494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng if (Intent.ACTION_VIEW.equals(action)) { 64594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng final Uri data = intent.getData(); 6469d4f3b20793a007b4489547aa40fc1049d0d8fefChiao Cheng if (data != null && CallUtil.SCHEME_TEL.equals(data.getScheme())) { 64794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng return true; 64894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 64994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 65094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng return false; 65194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 65294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 65394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** 65494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Returns an appropriate call origin for this Activity. May return null when no call origin 65594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * should be used (e.g. when some 3rd party application launched the screen. Call origin is 65694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * for remembering the tab in which the user made a phone call, so the external app's DIAL 65794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * request should not be counted.) 65894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng */ 65994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng public String getCallOrigin() { 66094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng return !isDialIntent(getIntent()) ? CALL_ORIGIN_DIALTACTS : null; 66194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 66294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 66394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** 66494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Retrieves the filter text stored in {@link #setupFilterText(Intent)}. 66594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * This text originally came from a FILTER_CONTACTS_ACTION intent received 66694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * by this activity. The stored text will then be cleared after after this 66794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * method returns. 66894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * 66994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * @return The stored filter text 67094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng */ 67194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng public String getAndClearFilterText() { 67294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng String filterText = mFilterText; 67394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mFilterText = null; 67494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng return filterText; 67594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 67694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 67794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** 67894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Stores the filter text associated with a FILTER_CONTACTS_ACTION intent. 67994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * This is so child activities can check if they are supposed to display a filter. 68094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * 68194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * @param intent The intent received in {@link #onNewIntent(Intent)} 68294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng */ 68394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private void setupFilterText(Intent intent) { 68494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // If the intent was relaunched from history, don't apply the filter text. 68594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng if ((intent.getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0) { 68694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng return; 68794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 68894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng String filter = intent.getStringExtra(UI.FILTER_TEXT_EXTRA_KEY); 68994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng if (filter != null && filter.length() > 0) { 69094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mFilterText = filter; 69194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 69294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 69394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 694c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee private final NewPhoneFavoriteFragment.Listener mPhoneFavoriteListener = 695c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee new NewPhoneFavoriteFragment.Listener() { 69694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng @Override 69794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng public void onContactSelected(Uri contactUri) { 69894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng PhoneNumberInteraction.startInteractionForPhoneCall( 699c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee DialtactsActivity.this, contactUri, getCallOrigin()); 70094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 70194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 70294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng @Override 70394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng public void onCallNumberDirectly(String phoneNumber) { 7049d4f3b20793a007b4489547aa40fc1049d0d8fefChiao Cheng Intent intent = CallUtil.getCallIntent(phoneNumber, getCallOrigin()); 70594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng startActivity(intent); 70694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 70794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng }; 70894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 709c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee /* TODO krelease: This is only relevant for phones that have a hard button search key (i.e. 710c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee * Nexus S). Supporting it is a little more tricky because of the dialpad fragment might 711c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee * be showing when the search key is pressed so there is more state management involved. 71294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 71394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng @Override 71494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng public void startSearch(String initialQuery, boolean selectInitialQuery, 71594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng Bundle appSearchData, boolean globalSearch) { 716c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee if (mRegularSearchFragment != null && mRegularSearchFragment.isAdded() && !globalSearch) { 71794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng if (mInSearchUi) { 71894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng if (mSearchView.hasFocus()) { 71994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng showInputMethod(mSearchView.findFocus()); 72094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } else { 72194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mSearchView.requestFocus(); 72294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 72394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } else { 72494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng enterSearchUi(); 72594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 72694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } else { 72794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng super.startSearch(initialQuery, selectInitialQuery, appSearchData, globalSearch); 72894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 729c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee }*/ 73094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 73194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private void showInputMethod(View view) { 732c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee final InputMethodManager imm = (InputMethodManager) getSystemService( 733c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee Context.INPUT_METHOD_SERVICE); 73494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng if (imm != null) { 735c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee imm.showSoftInput(view, 0); 73694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 73794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 73894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 73994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private void hideInputMethod(View view) { 740c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee final InputMethodManager imm = (InputMethodManager) getSystemService( 741c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee Context.INPUT_METHOD_SERVICE); 74294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng if (imm != null && view != null) { 74394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng imm.hideSoftInputFromWindow(view.getWindowToken(), 0); 74494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 74594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 74694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 74794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** 748c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee * Shows the search fragment 74994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng */ 750c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee private void enterSearchUi(boolean smartDialSearch) { 751c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee final FragmentTransaction transaction = getFragmentManager().beginTransaction(); 752c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 753c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee transaction.hide(mPhoneFavoriteFragment); 754c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee if (smartDialSearch) { 755c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee transaction.show(mSmartDialSearchFragment); 756c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } else { 757c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee transaction.show(mRegularSearchFragment); 75894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 759c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee transaction.commit(); 76094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 761c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mInSearchUi = true; 76294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 76394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 76494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** 765c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee * Hides the search fragment 76694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng */ 767c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee private void exitSearchUi() { 768c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee final FragmentTransaction transaction = getFragmentManager().beginTransaction(); 769c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 770c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee transaction.hide(mRegularSearchFragment); 771c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee transaction.hide(mSmartDialSearchFragment); 772c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee transaction.show(mPhoneFavoriteFragment); 773c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee transaction.commit(); 774c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mInSearchUi = false; 77594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 77694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 77794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** Returns an Intent to launch Call Settings screen */ 77894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng public static Intent getCallSettingsIntent() { 77994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng final Intent intent = new Intent(Intent.ACTION_MAIN); 78094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng intent.setClassName(PHONE_PACKAGE, CALL_SETTINGS_CLASS_NAME); 78194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 78294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng return intent; 78394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 78494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 78594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng @Override 786c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee public void onBackPressed() { 787c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee if (mDialpadFragment.isVisible()) { 788c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee hideDialpadFragment(true); 789c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } else if (mInSearchUi) { 790c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mSearchView.setText(null); 791c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } else if (mShowAllContactsFragment.isVisible()) { 792c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee hideAllContactsFragment(); 793c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } else if (isTaskRoot()) { 794c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee // Instead of stopping, simply push this to the back of the stack. 795c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee // This is only done when running at the top of the stack; 796c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee // otherwise, we have been launched by someone else so need to 797c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee // allow the user to go back to the caller. 798c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee moveTaskToBack(false); 799c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } else { 800c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee super.onBackPressed(); 80194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 802c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } 803c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee 804c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee @Override 805c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee public void onDialpadQueryChanged(String query) { 806c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee final String normalizedQuery = SmartDialNameMatcher.normalizeNumber(query, 807c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee SmartDialNameMatcher.LATIN_SMART_DIAL_MAP); 808c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee if (!TextUtils.equals(mSearchView.getText(), normalizedQuery)) { 809c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee mSearchView.setText(normalizedQuery); 81094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 81194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 812c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee 813c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee @Override 814c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee public void onListFragmentScrollStateChange(int scrollState) { 815c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee if (scrollState == OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) { 816c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee hideDialpadFragmentIfNecessary(); 817c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee hideInputMethod(getCurrentFocus()); 818c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } 819c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } 820c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee 821c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee @Override 822c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee public void onPhoneFavoriteFragmentStarted() { 823c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee setupFakeActionBarItemsForFavoritesFragment(); 824c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } 825c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee 826c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee @Override 827c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee public void onDialpadFragmentStarted() { 828c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee setupFakeActionBarItemsForDialpadFragment(); 829c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } 830c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee 831c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee private boolean phoneIsInUse() { 832c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee final TelephonyManager tm = (TelephonyManager) getSystemService( 833c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee Context.TELEPHONY_SERVICE); 834c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee return tm.getCallState() != TelephonyManager.CALL_STATE_IDLE; 835c3766338b312f9c8a6bdb2facaf4b0a4bd199de4Yorke Lee } 83694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng} 837