SearchFragment.java revision 37a53ad46134f9eaf3647c12f130c55652bbd624
1/*
2 * Copyright (C) 2013 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package com.android.dialer.list;
17
18import android.app.Activity;
19import android.content.Intent;
20import android.text.TextUtils;
21import android.view.View;
22import android.widget.AbsListView;
23import android.widget.AbsListView.OnScrollListener;
24import android.widget.ListView;
25
26import com.android.contacts.common.list.ContactEntryListAdapter;
27import com.android.contacts.common.list.ContactListItemView;
28import com.android.contacts.common.list.OnPhoneNumberPickerActionListener;
29import com.android.contacts.common.list.PhoneNumberPickerFragment;
30import com.android.dialer.DialtactsActivity;
31import com.android.dialer.R;
32import com.android.dialer.list.OnListFragmentScrolledListener;
33import com.android.dialer.util.DialerUtils;
34
35public class SearchFragment extends PhoneNumberPickerFragment {
36
37    private OnListFragmentScrolledListener mActivityScrollListener;
38
39    /*
40     * Stores the untouched user-entered string that is used to populate the add to contacts
41     * intent.
42     */
43    private String mAddToContactNumber;
44    private int mActionBarHeight;
45
46    @Override
47    public void onAttach(Activity activity) {
48        super.onAttach(activity);
49
50        setQuickContactEnabled(true);
51        setDarkTheme(false);
52        setPhotoPosition(ContactListItemView.getDefaultPhotoPosition(false /* opposite */));
53        setUseCallableUri(true);
54
55        try {
56            mActivityScrollListener = (OnListFragmentScrolledListener) activity;
57        } catch (ClassCastException e) {
58            throw new ClassCastException(activity.toString()
59                    + " must implement OnListFragmentScrolledListener");
60        }
61    }
62
63    @Override
64    public void onStart() {
65        super.onStart();
66        if (isSearchMode()) {
67            getAdapter().setHasHeader(0, false);
68        }
69
70        mActionBarHeight = ((DialtactsActivity) getActivity()).getActionBarHeight();
71
72        final View parentView = getView();
73        parentView.setPaddingRelative(
74                parentView.getPaddingStart(),
75                mActionBarHeight,
76                parentView.getPaddingEnd(),
77                parentView.getPaddingBottom());
78
79        final ListView listView = getListView();
80
81        listView.setOnScrollListener(new OnScrollListener() {
82            @Override
83            public void onScrollStateChanged(AbsListView view, int scrollState) {
84                mActivityScrollListener.onListFragmentScrollStateChange(scrollState);
85            }
86
87            @Override
88            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
89                    int totalItemCount) {
90            }
91        });
92
93        if (!getActivity().getActionBar().isShowing()) {
94            parentView.setTranslationY(-mActionBarHeight);
95        }
96    }
97
98    @Override
99    protected void setSearchMode(boolean flag) {
100        super.setSearchMode(flag);
101        // This hides the "All contacts with phone numbers" header in the search fragment
102        final ContactEntryListAdapter adapter = getAdapter();
103        if (adapter != null) {
104            adapter.setHasHeader(0, false);
105        }
106    }
107
108    public void setAddToContactNumber(String addToContactNumber) {
109        mAddToContactNumber = addToContactNumber;
110    }
111
112    @Override
113    protected ContactEntryListAdapter createListAdapter() {
114        DialerPhoneNumberListAdapter adapter = new DialerPhoneNumberListAdapter(getActivity());
115        adapter.setDisplayPhotos(true);
116        adapter.setUseCallableUri(super.usesCallableUri());
117        return adapter;
118    }
119
120    @Override
121    protected void onItemClick(int position, long id) {
122        final DialerPhoneNumberListAdapter adapter = (DialerPhoneNumberListAdapter) getAdapter();
123        final int shortcutType = adapter.getShortcutTypeFromPosition(position);
124
125        if (shortcutType == DialerPhoneNumberListAdapter.SHORTCUT_INVALID) {
126            super.onItemClick(position, id);
127        } else if (shortcutType == DialerPhoneNumberListAdapter.SHORTCUT_DIRECT_CALL) {
128            final OnPhoneNumberPickerActionListener listener =
129                    getOnPhoneNumberPickerListener();
130            if (listener != null) {
131                listener.onCallNumberDirectly(getQueryString());
132            }
133        } else if (shortcutType == DialerPhoneNumberListAdapter.SHORTCUT_ADD_NUMBER_TO_CONTACTS) {
134            final String number = TextUtils.isEmpty(mAddToContactNumber) ?
135                    adapter.getFormattedQueryString() : mAddToContactNumber;
136            final Intent intent = DialtactsActivity.getAddNumberToContactIntent(number);
137            DialerUtils.startActivityWithErrorToast(getActivity(), intent,
138                    R.string.add_contact_not_available);
139        }
140    }
141}
142