/*
* Copyright 2015. Appsi Mobile
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.appsimobile.appsii.module.people;
import android.Manifest;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.database.Cursor;
import android.net.Uri;
import android.provider.ContactsContract;
import android.support.annotation.NonNull;
import com.appsimobile.appsii.PermissionDeniedException;
import com.appsimobile.appsii.module.BaseContactInfo;
import com.appsimobile.appsii.module.PeopleQuery;
import com.appsimobile.appsii.permissions.PermissionUtils;
import com.appsimobile.util.ConvertedCursorLoader;
import java.util.List;
import javax.inject.Inject;
/**
* Created by nick on 22/09/14.
*/
public class PeopleLoader extends ConvertedCursorLoader<PeopleLoaderResult> {
/**
* The default sort order for this table.
*/
private static final String DEFAULT_SORT_ORDER =
ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
PermissionUtils mPermissionUtils;
private BroadcastReceiver mPermissionGrantedReceiver;
@Inject
public PeopleLoader(Context context, PermissionUtils permissionUtils) {
super(context);
mPermissionUtils = permissionUtils;
Uri uri = ContactsContract.Contacts.CONTENT_URI.buildUpon()
.appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY,
String.valueOf(ContactsContract.Directory.DEFAULT)).build();
String select = "((" + ContactsContract.Contacts.DISPLAY_NAME + " NOTNULL) AND ("
+ ContactsContract.Contacts.DISPLAY_NAME + " != '' ))";
setUri(uri);
setProjection(PeopleQuery.CONTACTS_SUMMARY_PROJECTION);
setSelection(select);
setSelectionArgs(null);
setSortOrder(DEFAULT_SORT_ORDER);
}
@Override
protected void checkPermissions() throws PermissionDeniedException {
mPermissionUtils.throwIfNotPermitted(getContext(), Manifest.permission.READ_CONTACTS);
}
@Override
protected PeopleLoaderResult convertPermissionDeniedException(PermissionDeniedException e) {
return new PeopleLoaderResult(e);
}
@Override
protected PeopleLoaderResult convertCursor(@NonNull Cursor c) {
List<? extends BaseContactInfo> contactInfos = PeopleQuery.cursorToContactInfos(c);
return new PeopleLoaderResult(contactInfos);
}
@Override
protected void cleanup(PeopleLoaderResult old) {
}
@Override
protected void onStartLoading() {
super.onStartLoading();
mPermissionGrantedReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
int req = intent.getIntExtra(PermissionUtils.EXTRA_REQUEST_CODE, 0);
if (req == PermissionUtils.REQUEST_CODE_PERMISSION_READ_CONTACTS) {
onContentChanged();
}
}
};
IntentFilter filter2 = new IntentFilter(PermissionUtils.ACTION_PERMISSION_RESULT);
getContext().registerReceiver(mPermissionGrantedReceiver, filter2);
}
@Override
protected void onReset() {
super.onReset();
if (mPermissionGrantedReceiver != null) {
getContext().unregisterReceiver(mPermissionGrantedReceiver);
}
}
}