Fix crash with android permission for Contacts and Echo canceller in the assistant
This commit is contained in:
parent
acb734823c
commit
55311ac4c6
3 changed files with 55 additions and 36 deletions
|
@ -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,34 +403,36 @@ public class ContactsManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
//Find Sip address
|
//Find Sip address
|
||||||
Contact contact;
|
if(hasContactAccess) {
|
||||||
String [] projection = new String[] {ContactsContract.Data.CONTACT_ID, ContactsContract.Data.DISPLAY_NAME};
|
Contact contact;
|
||||||
String selection = new StringBuilder()
|
String[] projection = new String[]{ContactsContract.Data.CONTACT_ID, ContactsContract.Data.DISPLAY_NAME};
|
||||||
.append(ContactsContract.CommonDataKinds.SipAddress.SIP_ADDRESS)
|
String selection = new StringBuilder()
|
||||||
.append(" = ?").toString();
|
.append(ContactsContract.CommonDataKinds.SipAddress.SIP_ADDRESS)
|
||||||
|
.append(" = ?").toString();
|
||||||
|
|
||||||
Cursor cur = contentResolver.query(ContactsContract.Data.CONTENT_URI, projection, selection,
|
Cursor cur = contentResolver.query(ContactsContract.Data.CONTENT_URI, projection, selection,
|
||||||
new String[]{sipUri}, null);
|
new String[]{sipUri}, null);
|
||||||
if (cur != null) {
|
if (cur != null) {
|
||||||
if (cur.moveToFirst()) {
|
if (cur.moveToFirst()) {
|
||||||
contact = Compatibility.getContact(contentResolver, cur, cur.getPosition());
|
contact = Compatibility.getContact(contentResolver, cur, cur.getPosition());
|
||||||
cur.close();
|
cur.close();
|
||||||
|
|
||||||
if (contact != null) {
|
if (contact != null) {
|
||||||
return contact;
|
return contact;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
cur.close();
|
||||||
}
|
}
|
||||||
cur.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
//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;
|
||||||
|
|
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
||||||
ContactsManager.getInstance().prepareContactsInBackground();
|
if (getPackageManager().checkPermission(Manifest.permission.READ_CONTACTS, getPackageName()) == PackageManager.PERMISSION_GRANTED){
|
||||||
|
ContactsManager.getInstance().enabledContactsAccess();
|
||||||
|
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) {
|
||||||
int position = Integer.parseInt(view.getTag().toString());
|
if(view != null) {
|
||||||
LinphoneActivity.instance().displayAccountSettings(position);
|
int position = Integer.parseInt(view.getTag().toString());
|
||||||
|
LinphoneActivity.instance().displayAccountSettings(position);
|
||||||
|
}
|
||||||
openOrCloseSideMenu(false);
|
openOrCloseSideMenu(false);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -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,14 +222,18 @@ public class AssistantActivity extends Activity implements OnClickListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void launchEchoCancellerCalibration(boolean sendEcCalibrationResult) {
|
private void launchEchoCancellerCalibration(boolean sendEcCalibrationResult) {
|
||||||
boolean needsEchoCalibration = LinphoneManager.getLc().needsEchoCalibration();
|
if (getPackageManager().checkPermission(Manifest.permission.RECORD_AUDIO, getPackageName()) == PackageManager.PERMISSION_GRANTED) {
|
||||||
if (needsEchoCalibration && mPrefs.isFirstLaunch()) {
|
boolean needsEchoCalibration = LinphoneManager.getLc().needsEchoCalibration();
|
||||||
EchoCancellerCalibrationFragment fragment = new EchoCancellerCalibrationFragment();
|
if (needsEchoCalibration && mPrefs.isFirstLaunch()) {
|
||||||
fragment.enableEcCalibrationResultSending(sendEcCalibrationResult);
|
EchoCancellerCalibrationFragment fragment = new EchoCancellerCalibrationFragment();
|
||||||
changeFragment(fragment);
|
fragment.enableEcCalibrationResultSending(sendEcCalibrationResult);
|
||||||
currentFragment = AssistantFragmentsEnum.ECHO_CANCELLER_CALIBRATION;
|
changeFragment(fragment);
|
||||||
back.setVisibility(View.VISIBLE);
|
currentFragment = AssistantFragmentsEnum.ECHO_CANCELLER_CALIBRATION;
|
||||||
cancel.setEnabled(false);
|
back.setVisibility(View.VISIBLE);
|
||||||
|
cancel.setEnabled(false);
|
||||||
|
} else {
|
||||||
|
success();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
success();
|
success();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue