Fix crash with android permission for Contacts and Echo canceller in the assistant

This commit is contained in:
Margaux Clerc 2016-03-07 17:19:56 +01:00 committed by Jehan Monnier
parent acb734823c
commit 55311ac4c6
3 changed files with 55 additions and 36 deletions

View file

@ -47,7 +47,7 @@ public class ContactsManager {
private List<Contact> contactList, sipContactList; private List<Contact> contactList, sipContactList;
private Cursor contactCursor, sipContactCursor; private Cursor contactCursor, sipContactCursor;
private Account mAccount; private Account mAccount;
private boolean preferLinphoneContacts = false, isContactPresenceDisabled = true; private boolean preferLinphoneContacts = false, isContactPresenceDisabled = true, hasContactAccess = false;
private ContentResolver contentResolver; private ContentResolver contentResolver;
private Context context; private Context context;
@ -74,6 +74,10 @@ public class ContactsManager {
return sipContactCursor; return sipContactCursor;
} }
public void enabledContactsAccess(){
hasContactAccess = true;
}
public void setLinphoneContactsPrefered(boolean isPrefered) { public void setLinphoneContactsPrefered(boolean isPrefered) {
preferLinphoneContacts = isPrefered; preferLinphoneContacts = isPrefered;
} }
@ -399,8 +403,9 @@ public class ContactsManager {
} }
//Find Sip address //Find Sip address
if(hasContactAccess) {
Contact contact; Contact contact;
String [] projection = new String[] {ContactsContract.Data.CONTACT_ID, ContactsContract.Data.DISPLAY_NAME}; String[] projection = new String[]{ContactsContract.Data.CONTACT_ID, ContactsContract.Data.DISPLAY_NAME};
String selection = new StringBuilder() String selection = new StringBuilder()
.append(ContactsContract.CommonDataKinds.SipAddress.SIP_ADDRESS) .append(ContactsContract.CommonDataKinds.SipAddress.SIP_ADDRESS)
.append(" = ?").toString(); .append(" = ?").toString();
@ -421,13 +426,14 @@ public class ContactsManager {
//Find number //Find number
Uri lookupUri = Uri.withAppendedPath(android.provider.ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(address.getUserName())); Uri lookupUri = Uri.withAppendedPath(android.provider.ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(address.getUserName()));
projection = new String[] {ContactsContract.PhoneLookup._ID,ContactsContract.PhoneLookup.NUMBER,ContactsContract.PhoneLookup.DISPLAY_NAME }; projection = new String[]{ContactsContract.PhoneLookup._ID, ContactsContract.PhoneLookup.NUMBER, ContactsContract.PhoneLookup.DISPLAY_NAME};
Cursor c = contentResolver.query(lookupUri, projection, null, null, null); Cursor c = contentResolver.query(lookupUri, projection, null, null, null);
contact = checkPhoneQueryResult(contentResolver, c, ContactsContract.PhoneLookup.NUMBER, ContactsContract.PhoneLookup._ID, address.getUserName()); contact = checkPhoneQueryResult(contentResolver, c, ContactsContract.PhoneLookup.NUMBER, ContactsContract.PhoneLookup._ID, address.getUserName());
if (contact != null) { if (contact != null) {
return contact; return contact;
} }
}
return null; return null;
} }

View file

@ -47,6 +47,7 @@ import org.linphone.mediastream.Log;
import org.linphone.assistant.RemoteProvisioningLoginActivity; import org.linphone.assistant.RemoteProvisioningLoginActivity;
import org.linphone.ui.AddressText; import org.linphone.ui.AddressText;
import android.Manifest;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.Activity; import android.app.Activity;
import android.app.Dialog; import android.app.Dialog;
@ -56,6 +57,7 @@ import android.app.FragmentTransaction;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.ActivityInfo; import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
@ -161,7 +163,7 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
} }
//TODO rework //TODO rework
if (getResources().getBoolean(R.bool.use_linphone_tag)) { if (getResources().getBoolean(R.bool.use_linphone_tag) && getPackageManager().checkPermission(Manifest.permission.WRITE_SYNC_SETTINGS, getPackageName()) == PackageManager.PERMISSION_GRANTED) {
ContactsManager.getInstance().initializeSyncAccount(getApplicationContext(), getContentResolver()); ContactsManager.getInstance().initializeSyncAccount(getApplicationContext(), getContentResolver());
} else { } else {
ContactsManager.getInstance().initializeContactManager(getApplicationContext(), getContentResolver()); ContactsManager.getInstance().initializeContactManager(getApplicationContext(), getContentResolver());
@ -1196,7 +1198,10 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
startService(new Intent(Intent.ACTION_MAIN).setClass(this, LinphoneService.class)); startService(new Intent(Intent.ACTION_MAIN).setClass(this, LinphoneService.class));
} }
if (getPackageManager().checkPermission(Manifest.permission.READ_CONTACTS, getPackageName()) == PackageManager.PERMISSION_GRANTED){
ContactsManager.getInstance().enabledContactsAccess();
ContactsManager.getInstance().prepareContactsInBackground(); ContactsManager.getInstance().prepareContactsInBackground();
}
updateMissedChatCount(); updateMissedChatCount();
@ -1453,8 +1458,10 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
accountsList.setOnItemClickListener(new AdapterView.OnItemClickListener() { accountsList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override @Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
if(view != null) {
int position = Integer.parseInt(view.getTag().toString()); int position = Integer.parseInt(view.getTag().toString());
LinphoneActivity.instance().displayAccountSettings(position); LinphoneActivity.instance().displayAccountSettings(position);
}
openOrCloseSideMenu(false); openOrCloseSideMenu(false);
} }
}); });

View file

@ -32,6 +32,7 @@ import org.linphone.core.LinphoneCoreFactory;
import org.linphone.core.LinphoneCoreListenerBase; import org.linphone.core.LinphoneCoreListenerBase;
import org.linphone.core.LinphoneProxyConfig; import org.linphone.core.LinphoneProxyConfig;
import android.Manifest;
import android.app.Activity; import android.app.Activity;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.app.Dialog; import android.app.Dialog;
@ -41,6 +42,7 @@ import android.app.ProgressDialog;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.pm.ActivityInfo; import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Bundle; import android.os.Bundle;
@ -220,6 +222,7 @@ public class AssistantActivity extends Activity implements OnClickListener {
} }
private void launchEchoCancellerCalibration(boolean sendEcCalibrationResult) { private void launchEchoCancellerCalibration(boolean sendEcCalibrationResult) {
if (getPackageManager().checkPermission(Manifest.permission.RECORD_AUDIO, getPackageName()) == PackageManager.PERMISSION_GRANTED) {
boolean needsEchoCalibration = LinphoneManager.getLc().needsEchoCalibration(); boolean needsEchoCalibration = LinphoneManager.getLc().needsEchoCalibration();
if (needsEchoCalibration && mPrefs.isFirstLaunch()) { if (needsEchoCalibration && mPrefs.isFirstLaunch()) {
EchoCancellerCalibrationFragment fragment = new EchoCancellerCalibrationFragment(); EchoCancellerCalibrationFragment fragment = new EchoCancellerCalibrationFragment();
@ -231,6 +234,9 @@ public class AssistantActivity extends Activity implements OnClickListener {
} else { } else {
success(); success();
} }
} else {
success();
}
} }
private void logIn(String username, String password, String displayName, String domain, TransportType transport, boolean sendEcCalibrationResult) { private void logIn(String username, String password, String displayName, String domain, TransportType transport, boolean sendEcCalibrationResult) {