• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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  */
16 package com.android.dialer.list;
17 
18 import static android.Manifest.permission.CALL_PHONE;
19 
20 import android.app.Activity;
21 import android.content.Loader;
22 import android.database.Cursor;
23 import android.net.Uri;
24 import android.os.Bundle;
25 import android.util.Log;
26 import android.view.View;
27 
28 import com.android.contacts.common.list.ContactEntryListAdapter;
29 import com.android.contacts.common.util.PermissionsUtil;
30 import com.android.dialer.dialpad.SmartDialCursorLoader;
31 import com.android.dialer.R;
32 import com.android.dialer.widget.EmptyContentView;
33 
34 import java.util.ArrayList;
35 
36 /**
37  * Implements a fragment to load and display SmartDial search results.
38  */
39 public class SmartDialSearchFragment extends SearchFragment
40         implements EmptyContentView.OnEmptyViewActionButtonClickedListener {
41     private static final String TAG = SmartDialSearchFragment.class.getSimpleName();
42 
43     private static final int CALL_PHONE_PERMISSION_REQUEST_CODE = 1;
44 
45     /**
46      * Creates a SmartDialListAdapter to display and operate on search results.
47      */
48     @Override
createListAdapter()49     protected ContactEntryListAdapter createListAdapter() {
50         SmartDialNumberListAdapter adapter = new SmartDialNumberListAdapter(getActivity());
51         adapter.setUseCallableUri(super.usesCallableUri());
52         adapter.setQuickContactEnabled(true);
53         // Set adapter's query string to restore previous instance state.
54         adapter.setQueryString(getQueryString());
55         return adapter;
56     }
57 
58     /**
59      * Creates a SmartDialCursorLoader object to load query results.
60      */
61     @Override
onCreateLoader(int id, Bundle args)62     public Loader<Cursor> onCreateLoader(int id, Bundle args) {
63         // Smart dialing does not support Directory Load, falls back to normal search instead.
64         if (id == getDirectoryLoaderId()) {
65             return super.onCreateLoader(id, args);
66         } else {
67             final SmartDialNumberListAdapter adapter = (SmartDialNumberListAdapter) getAdapter();
68             SmartDialCursorLoader loader = new SmartDialCursorLoader(super.getContext());
69             adapter.configureLoader(loader);
70             return loader;
71         }
72     }
73 
74     /**
75      * Gets the Phone Uri of an entry for calling.
76      * @param position Location of the data of interest.
77      * @return Phone Uri to establish a phone call.
78      */
79     @Override
getPhoneUri(int position)80     protected Uri getPhoneUri(int position) {
81         final SmartDialNumberListAdapter adapter = (SmartDialNumberListAdapter) getAdapter();
82         return adapter.getDataUri(position);
83     }
84 
85     @Override
setupEmptyView()86     protected void setupEmptyView() {
87         if (mEmptyView != null && getActivity() != null) {
88             if (!PermissionsUtil.hasPermission(getActivity(), CALL_PHONE)) {
89                 mEmptyView.setImage(R.drawable.empty_contacts);
90                 mEmptyView.setActionLabel(R.string.permission_single_turn_on);
91                 mEmptyView.setDescription(R.string.permission_place_call);
92                 mEmptyView.setActionClickedListener(this);
93             } else {
94                 mEmptyView.setImage(EmptyContentView.NO_IMAGE);
95                 mEmptyView.setActionLabel(EmptyContentView.NO_LABEL);
96                 mEmptyView.setDescription(EmptyContentView.NO_LABEL);
97             }
98         }
99     }
100 
101     @Override
onEmptyViewActionButtonClicked()102     public void onEmptyViewActionButtonClicked() {
103         final Activity activity = getActivity();
104         if (activity == null) {
105             return;
106         }
107 
108         requestPermissions(new String[] {CALL_PHONE}, CALL_PHONE_PERMISSION_REQUEST_CODE);
109     }
110 
111     @Override
onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)112     public void onRequestPermissionsResult(int requestCode, String[] permissions,
113             int[] grantResults) {
114         if (requestCode == CALL_PHONE_PERMISSION_REQUEST_CODE) {
115             setupEmptyView();
116         }
117     }
118 
isShowingPermissionRequest()119     public boolean isShowingPermissionRequest() {
120         return mEmptyView != null && mEmptyView.isShowingContent();
121     }
122 }
123