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