Home | History | Annotate | Download | only in list
      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.READ_CONTACTS;
     19 
     20 import android.app.Activity;
     21 import android.content.pm.PackageManager;
     22 import android.support.v13.app.FragmentCompat;
     23 import android.view.LayoutInflater;
     24 import android.view.ViewGroup;
     25 
     26 import com.android.contacts.common.list.ContactEntryListAdapter;
     27 import com.android.contacts.common.list.PinnedHeaderListView;
     28 import com.android.contacts.common.util.PermissionsUtil;
     29 import com.android.contacts.commonbind.analytics.AnalyticsUtil;
     30 import com.android.dialerbind.ObjectFactory;
     31 import com.android.incallui.Call.LogState;
     32 
     33 import com.android.dialer.R;
     34 import com.android.dialer.logging.Logger;
     35 import com.android.dialer.logging.ScreenEvent;
     36 import com.android.dialer.service.CachedNumberLookupService;
     37 import com.android.dialer.widget.EmptyContentView;
     38 import com.android.dialer.widget.EmptyContentView.OnEmptyViewActionButtonClickedListener;
     39 
     40 public class RegularSearchFragment extends SearchFragment
     41         implements OnEmptyViewActionButtonClickedListener,
     42         FragmentCompat.OnRequestPermissionsResultCallback {
     43 
     44     public static final int PERMISSION_REQUEST_CODE = 1;
     45 
     46     private static final int SEARCH_DIRECTORY_RESULT_LIMIT = 5;
     47 
     48     private static final CachedNumberLookupService mCachedNumberLookupService =
     49         ObjectFactory.newCachedNumberLookupService();
     50 
     51     public interface CapabilityChecker {
     52         public boolean isNearbyPlacesSearchEnabled();
     53     }
     54 
     55     protected String mPermissionToRequest;
     56 
     57     public RegularSearchFragment() {
     58         configureDirectorySearch();
     59     }
     60 
     61     public void configureDirectorySearch() {
     62         setDirectorySearchEnabled(true);
     63         setDirectoryResultLimit(SEARCH_DIRECTORY_RESULT_LIMIT);
     64     }
     65 
     66     @Override
     67     protected void onCreateView(LayoutInflater inflater, ViewGroup container) {
     68         super.onCreateView(inflater, container);
     69         ((PinnedHeaderListView) getListView()).setScrollToSectionOnHeaderTouch(true);
     70     }
     71 
     72     @Override
     73     protected ContactEntryListAdapter createListAdapter() {
     74         RegularSearchListAdapter adapter = new RegularSearchListAdapter(getActivity());
     75         adapter.setDisplayPhotos(true);
     76         adapter.setUseCallableUri(usesCallableUri());
     77         adapter.setListener(this);
     78         return adapter;
     79     }
     80 
     81     @Override
     82     protected void cacheContactInfo(int position) {
     83         if (mCachedNumberLookupService != null) {
     84             final RegularSearchListAdapter adapter =
     85                 (RegularSearchListAdapter) getAdapter();
     86             mCachedNumberLookupService.addContact(getContext(),
     87                     adapter.getContactInfo(mCachedNumberLookupService, position));
     88         }
     89     }
     90 
     91     @Override
     92     protected void setupEmptyView() {
     93         if (mEmptyView != null && getActivity() != null) {
     94             final int imageResource;
     95             final int actionLabelResource;
     96             final int descriptionResource;
     97             final OnEmptyViewActionButtonClickedListener listener;
     98             if (!PermissionsUtil.hasPermission(getActivity(), READ_CONTACTS)) {
     99                 imageResource = R.drawable.empty_contacts;
    100                 actionLabelResource = R.string.permission_single_turn_on;
    101                 descriptionResource = R.string.permission_no_search;
    102                 listener = this;
    103                 mPermissionToRequest = READ_CONTACTS;
    104             } else {
    105                 imageResource = EmptyContentView.NO_IMAGE;
    106                 actionLabelResource = EmptyContentView.NO_LABEL;
    107                 descriptionResource = EmptyContentView.NO_LABEL;
    108                 listener = null;
    109                 mPermissionToRequest = null;
    110             }
    111 
    112             mEmptyView.setImage(imageResource);
    113             mEmptyView.setActionLabel(actionLabelResource);
    114             mEmptyView.setDescription(descriptionResource);
    115             if (listener != null) {
    116                 mEmptyView.setActionClickedListener(listener);
    117             }
    118         }
    119     }
    120 
    121     @Override
    122     public void onEmptyViewActionButtonClicked() {
    123         final Activity activity = getActivity();
    124         if (activity == null) {
    125             return;
    126         }
    127 
    128         if (READ_CONTACTS.equals(mPermissionToRequest)) {
    129           FragmentCompat.requestPermissions(this, new String[] {mPermissionToRequest},
    130               PERMISSION_REQUEST_CODE);
    131         }
    132     }
    133 
    134     @Override
    135     public void onRequestPermissionsResult(int requestCode, String[] permissions,
    136             int[] grantResults) {
    137         if (requestCode == PERMISSION_REQUEST_CODE) {
    138             setupEmptyView();
    139             if (grantResults != null && grantResults.length == 1
    140                     && PackageManager.PERMISSION_GRANTED == grantResults[0]) {
    141                 PermissionsUtil.notifyPermissionGranted(getActivity(), mPermissionToRequest);
    142             }
    143         }
    144     }
    145 
    146     @Override
    147     protected int getCallInitiationType(boolean isRemoteDirectory) {
    148         return isRemoteDirectory ? LogState.INITIATION_REMOTE_DIRECTORY
    149                 : LogState.INITIATION_REGULAR_SEARCH;
    150     }
    151 }
    152