1edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng/* 2edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng * Copyright (C) 2010 The Android Open Source Project 3edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng * 4edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng * Licensed under the Apache License, Version 2.0 (the "License"); 5edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng * you may not use this file except in compliance with the License. 6edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng * You may obtain a copy of the License at 7edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng * 8edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng * http://www.apache.org/licenses/LICENSE-2.0 9edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng * 10edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng * Unless required by applicable law or agreed to in writing, software 11edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng * distributed under the License is distributed on an "AS IS" BASIS, 12edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng * See the License for the specific language governing permissions and 14edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng * limitations under the License. 15edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng */ 16edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Chengpackage com.android.contacts.common.list; 17edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 18edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Chengimport android.content.Intent; 19edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Chengimport android.content.Loader; 20edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Chengimport android.database.Cursor; 21edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Chengimport android.net.Uri; 22edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Chengimport android.os.Bundle; 23edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Chengimport android.util.Log; 24edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Chengimport android.view.LayoutInflater; 25edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Chengimport android.view.MenuItem; 26edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Chengimport android.view.View; 27edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Chengimport android.view.View.OnClickListener; 28edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Chengimport android.view.ViewGroup; 29edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 30edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Chengimport com.android.contacts.common.R; 31edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Chengimport com.android.contacts.common.list.ShortcutIntentBuilder.OnShortcutIntentCreatedListener; 32edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Chengimport com.android.contacts.common.util.AccountFilterUtil; 33edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 34edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng/** 35edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng * Fragment containing a phone number list for picking. 36edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng */ 37edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Chengpublic class PhoneNumberPickerFragment extends ContactEntryListFragment<ContactEntryListAdapter> 38edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng implements OnShortcutIntentCreatedListener { 39edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng private static final String TAG = PhoneNumberPickerFragment.class.getSimpleName(); 40edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 41edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng private static final int REQUEST_CODE_ACCOUNT_FILTER = 1; 42edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 43edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng private static final String KEY_SHORTCUT_ACTION = "shortcutAction"; 44edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 45edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng private OnPhoneNumberPickerActionListener mListener; 46edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng private String mShortcutAction; 47edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 48edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng private ContactListFilter mFilter; 49edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 50edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng private View mAccountFilterHeader; 51edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng /** 52edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng * Lives as ListView's header and is shown when {@link #mAccountFilterHeader} is set 53edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng * to View.GONE. 54edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng */ 55edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng private View mPaddingView; 56edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 57edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng private static final String KEY_FILTER = "filter"; 58edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 59edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng /** true if the loader has started at least once. */ 60edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng private boolean mLoaderStarted; 61edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 62edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng private boolean mUseCallableUri; 63edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 64edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng private ContactListItemView.PhotoPosition mPhotoPosition = 659f0c1621718b382531cbebfe38907e6d3db6ceaeFabrice Di Meglio ContactListItemView.getDefaultPhotoPosition(false /* normal/non opposite */); 66edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 67edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng private class FilterHeaderClickListener implements OnClickListener { 68edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng @Override 69edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng public void onClick(View view) { 70edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng AccountFilterUtil.startAccountFilterActivityForResult( 71edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng PhoneNumberPickerFragment.this, 72edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng REQUEST_CODE_ACCOUNT_FILTER, 73edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng mFilter); 74edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 75edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 76edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng private OnClickListener mFilterHeaderClickListener = new FilterHeaderClickListener(); 77edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 78edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng public PhoneNumberPickerFragment() { 79edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng setQuickContactEnabled(false); 80edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng setPhotoLoaderEnabled(true); 81edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng setSectionHeaderDisplayEnabled(true); 82edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_DATA_SHORTCUT); 83edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 84edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng // Show nothing instead of letting caller Activity show something. 85edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng setHasOptionsMenu(true); 86edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 87edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 88edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng public void setOnPhoneNumberPickerActionListener(OnPhoneNumberPickerActionListener listener) { 89edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng this.mListener = listener; 90edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 91edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 92edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng @Override 93edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng protected void onCreateView(LayoutInflater inflater, ViewGroup container) { 94edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng super.onCreateView(inflater, container); 95edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 96edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng View paddingView = inflater.inflate(R.layout.contact_detail_list_padding, null, false); 97edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng mPaddingView = paddingView.findViewById(R.id.contact_detail_list_padding); 98edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng getListView().addHeaderView(paddingView); 99edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 100edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng mAccountFilterHeader = getView().findViewById(R.id.account_filter_header_container); 101edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng mAccountFilterHeader.setOnClickListener(mFilterHeaderClickListener); 102edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng updateFilterHeaderView(); 103edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 104edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng setVisibleScrollbarEnabled(getVisibleScrollbarEnabled()); 105edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 106edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 107edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng protected boolean getVisibleScrollbarEnabled() { 108edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng return true; 109edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 110edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 111edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng @Override 112edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng protected void setSearchMode(boolean flag) { 113edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng super.setSearchMode(flag); 114edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng updateFilterHeaderView(); 115edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 116edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 117edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng private void updateFilterHeaderView() { 118edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng final ContactListFilter filter = getFilter(); 119edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng if (mAccountFilterHeader == null || filter == null) { 120edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng return; 121edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 122edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng final boolean shouldShowHeader = 123edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng !isSearchMode() && 124edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng AccountFilterUtil.updateAccountFilterTitleForPhone( 125edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng mAccountFilterHeader, filter, false); 126edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng if (shouldShowHeader) { 127edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng mPaddingView.setVisibility(View.GONE); 128edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng mAccountFilterHeader.setVisibility(View.VISIBLE); 129edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } else { 130edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng mPaddingView.setVisibility(View.VISIBLE); 131edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng mAccountFilterHeader.setVisibility(View.GONE); 132edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 133edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 134edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 135edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng @Override 136edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng public void restoreSavedState(Bundle savedState) { 137edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng super.restoreSavedState(savedState); 138edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 139edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng if (savedState == null) { 140edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng return; 141edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 142edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 143edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng mFilter = savedState.getParcelable(KEY_FILTER); 144edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng mShortcutAction = savedState.getString(KEY_SHORTCUT_ACTION); 145edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 146edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 147edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng @Override 148edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng public void onSaveInstanceState(Bundle outState) { 149edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng super.onSaveInstanceState(outState); 150edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng outState.putParcelable(KEY_FILTER, mFilter); 151edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng outState.putString(KEY_SHORTCUT_ACTION, mShortcutAction); 152edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 153edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 154edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng @Override 155edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng public boolean onOptionsItemSelected(MenuItem item) { 156edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng final int itemId = item.getItemId(); 157edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng if (itemId == android.R.id.home) { // See ActionBar#setDisplayHomeAsUpEnabled() 158edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng if (mListener != null) { 159edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng mListener.onHomeInActionBarSelected(); 160edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 161edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng return true; 162edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 163edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng return super.onOptionsItemSelected(item); 164edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 165edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 166edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng /** 167edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng * @param shortcutAction either {@link Intent#ACTION_CALL} or 168edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng * {@link Intent#ACTION_SENDTO} or null. 169edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng */ 170edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng public void setShortcutAction(String shortcutAction) { 171edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng this.mShortcutAction = shortcutAction; 172edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 173edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 174edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng @Override 175edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng protected void onItemClick(int position, long id) { 176edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng final Uri phoneUri = getPhoneUri(position); 177edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 178edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng if (phoneUri != null) { 179edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng pickPhoneNumber(phoneUri); 180edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } else { 181edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng Log.w(TAG, "Item at " + position + " was clicked before adapter is ready. Ignoring"); 182edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 183edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 184edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 185edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng protected Uri getPhoneUri(int position) { 186edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng final PhoneNumberListAdapter adapter = (PhoneNumberListAdapter) getAdapter(); 187edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng return adapter.getDataUri(position); 188edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 189edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 190edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng @Override 191edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng protected void startLoading() { 192edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng mLoaderStarted = true; 193edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng super.startLoading(); 194edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 195edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 196edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng @Override 197edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 198edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng super.onLoadFinished(loader, data); 199edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 200edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng // disable scroll bar if there is no data 201edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng setVisibleScrollbarEnabled(data.getCount() > 0); 202edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 203edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 204edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng public void setUseCallableUri(boolean useCallableUri) { 205edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng mUseCallableUri = useCallableUri; 206edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 207edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 208edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng public boolean usesCallableUri() { 209edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng return mUseCallableUri; 210edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 211edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 212edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng @Override 213edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng protected ContactEntryListAdapter createListAdapter() { 214edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng PhoneNumberListAdapter adapter = new PhoneNumberListAdapter(getActivity()); 215edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng adapter.setDisplayPhotos(true); 216edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng adapter.setUseCallableUri(mUseCallableUri); 217edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng return adapter; 218edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 219edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 220edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng @Override 221edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng protected void configureAdapter() { 222edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng super.configureAdapter(); 223edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 224edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng final ContactEntryListAdapter adapter = getAdapter(); 225edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng if (adapter == null) { 226edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng return; 227edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 228edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 229edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng if (!isSearchMode() && mFilter != null) { 230edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng adapter.setFilter(mFilter); 231edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 232edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 233edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng setPhotoPosition(adapter); 234edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 235edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 236edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng protected void setPhotoPosition(ContactEntryListAdapter adapter) { 237edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng ((PhoneNumberListAdapter) adapter).setPhotoPosition(mPhotoPosition); 238edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 239edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 240edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng @Override 241edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng protected View inflateView(LayoutInflater inflater, ViewGroup container) { 242edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng return inflater.inflate(R.layout.contact_list_content, null); 243edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 244edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 245edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng public void pickPhoneNumber(Uri uri) { 246edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng if (mShortcutAction == null) { 247edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng mListener.onPickPhoneNumberAction(uri); 248edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } else { 249edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng startPhoneNumberShortcutIntent(uri); 250edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 251edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 252edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 253edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng protected void startPhoneNumberShortcutIntent(Uri uri) { 254edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng ShortcutIntentBuilder builder = new ShortcutIntentBuilder(getActivity(), this); 255edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng builder.createPhoneNumberShortcutIntent(uri, mShortcutAction); 256edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 257edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 258edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng public void onShortcutIntentCreated(Uri uri, Intent shortcutIntent) { 259edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng mListener.onShortcutIntentCreated(shortcutIntent); 260edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 261edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 262edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng @Override 263edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng public void onPickerResult(Intent data) { 264edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng mListener.onPickPhoneNumberAction(data.getData()); 265edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 266edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 267edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng @Override 268edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng public void onActivityResult(int requestCode, int resultCode, Intent data) { 269edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng if (requestCode == REQUEST_CODE_ACCOUNT_FILTER) { 270edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng if (getActivity() != null) { 271edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng AccountFilterUtil.handleAccountFilterResult( 272edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng ContactListFilterController.getInstance(getActivity()), resultCode, data); 273edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } else { 274edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng Log.e(TAG, "getActivity() returns null during Fragment#onActivityResult()"); 275edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 276edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 277edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 278edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 279edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng public ContactListFilter getFilter() { 280edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng return mFilter; 281edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 282edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 283edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng public void setFilter(ContactListFilter filter) { 284edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng if ((mFilter == null && filter == null) || 285edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng (mFilter != null && mFilter.equals(filter))) { 286edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng return; 287edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 288edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 289edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng mFilter = filter; 290edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng if (mLoaderStarted) { 291edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng reloadData(); 292edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 293edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng updateFilterHeaderView(); 294edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 295edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 296edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng public void setPhotoPosition(ContactListItemView.PhotoPosition photoPosition) { 297edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng mPhotoPosition = photoPosition; 298edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng 299edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng final PhoneNumberListAdapter adapter = (PhoneNumberListAdapter) getAdapter(); 300edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng if (adapter != null) { 301edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng adapter.setPhotoPosition(photoPosition); 302edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 303edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng } 304edc1cd98e3c3e991dcfb5281a008f7d2cfea1495Chiao Cheng} 305