Improved permissions management + ask for external storage read permission
This commit is contained in:
parent
6220879ea4
commit
7c48345625
7 changed files with 84 additions and 215 deletions
|
@ -27,6 +27,7 @@
|
|||
<uses-feature android:name="android.hardware.camera" android:required="false" />
|
||||
<uses-permission android:name="android.permission.READ_LOGS" />
|
||||
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
|
||||
<!-- Needed to store received images if the user wants to -->
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
||||
<!-- Needed to use our own Contact editor -->
|
||||
|
|
|
@ -454,13 +454,13 @@ public class CallActivity extends Activity implements OnClickListener, SensorEve
|
|||
}
|
||||
|
||||
@Override
|
||||
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
|
||||
public void onRequestPermissionsResult(int requestCode, String[] permissions, final int[] grantResults) {
|
||||
switch (requestCode) {
|
||||
case PERMISSIONS_REQUEST_CAMERA:
|
||||
UIThreadDispatcher.dispatch(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
acceptCallUpdate(true);
|
||||
acceptCallUpdate(grantResults[0] == PackageManager.PERMISSION_GRANTED);
|
||||
}
|
||||
});
|
||||
break;
|
||||
|
@ -468,12 +468,11 @@ public class CallActivity extends Activity implements OnClickListener, SensorEve
|
|||
UIThreadDispatcher.dispatch(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
enabledOrDisabledVideo(false);
|
||||
disableVideo(grantResults[0] != PackageManager.PERMISSION_GRANTED);
|
||||
}
|
||||
});
|
||||
break;
|
||||
}
|
||||
LinphonePreferences.instance().neverAskCameraPerm();
|
||||
}
|
||||
|
||||
public void createInCallStats() {
|
||||
|
@ -606,7 +605,7 @@ public class CallActivity extends Activity implements OnClickListener, SensorEve
|
|||
|
||||
if (id == R.id.video) {
|
||||
if (getPackageManager().checkPermission(Manifest.permission.CAMERA, getPackageName()) == PackageManager.PERMISSION_GRANTED) {
|
||||
enabledOrDisabledVideo(isVideoEnabled(LinphoneManager.getLc().getCurrentCall()));
|
||||
disableVideo(isVideoEnabled(LinphoneManager.getLc().getCurrentCall()));
|
||||
} else {
|
||||
checkAndRequestPermission(Manifest.permission.CAMERA, PERMISSIONS_ENABLED_CAMERA);
|
||||
}
|
||||
|
@ -719,13 +718,13 @@ public class CallActivity extends Activity implements OnClickListener, SensorEve
|
|||
}
|
||||
}
|
||||
|
||||
private void enabledOrDisabledVideo(final boolean isVideoEnabled) {
|
||||
private void disableVideo(final boolean videoDisabled) {
|
||||
final LinphoneCall call = LinphoneManager.getLc().getCurrentCall();
|
||||
if (call == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (isVideoEnabled) {
|
||||
if (videoDisabled) {
|
||||
LinphoneCallParams params = LinphoneManager.getLc().createCallParams(call);
|
||||
params.setVideoEnabled(false);
|
||||
LinphoneManager.getLc().updateCall(call, params);
|
||||
|
@ -1379,7 +1378,7 @@ public class CallActivity extends Activity implements OnClickListener, SensorEve
|
|||
delete.setOnClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if (getPackageManager().checkPermission(Manifest.permission.CAMERA, getPackageName()) == PackageManager.PERMISSION_GRANTED || LinphonePreferences.instance().cameraPermAsked()) {
|
||||
if (getPackageManager().checkPermission(Manifest.permission.CAMERA, getPackageName()) == PackageManager.PERMISSION_GRANTED || !ActivityCompat.shouldShowRequestPermissionRationale(CallActivity.this, Manifest.permission.CAMERA)) {
|
||||
CallActivity.instance().acceptCallUpdate(true);
|
||||
} else {
|
||||
checkAndRequestPermission(Manifest.permission.CAMERA, PERMISSIONS_REQUEST_CAMERA);
|
||||
|
@ -1389,9 +1388,7 @@ public class CallActivity extends Activity implements OnClickListener, SensorEve
|
|||
}
|
||||
});
|
||||
|
||||
cancel.setOnClickListener(new
|
||||
|
||||
OnClickListener() {
|
||||
cancel.setOnClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick (View view){
|
||||
if (CallActivity.isInstanciated()) {
|
||||
|
|
|
@ -18,6 +18,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
*/
|
||||
package org.linphone;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.linphone.core.LinphoneAddress;
|
||||
|
@ -49,7 +50,6 @@ import android.widget.Toast;
|
|||
|
||||
public class CallIncomingActivity extends Activity implements LinphoneSliderTriggered {
|
||||
private static CallIncomingActivity instance;
|
||||
private static final int PERMISSIONS_REQUEST_CAMERA = 205;
|
||||
|
||||
private TextView name, number;
|
||||
private ImageView contactPicture, accept, decline;
|
||||
|
@ -201,10 +201,8 @@ public class CallIncomingActivity extends Activity implements LinphoneSliderTrig
|
|||
}
|
||||
}
|
||||
};
|
||||
|
||||
if (LinphonePreferences.instance().isVideoEnabled() && LinphonePreferences.instance().shouldAutomaticallyAcceptVideoRequests()) {
|
||||
checkAndRequestCameraPermission();
|
||||
}
|
||||
|
||||
checkAndRequestCallPermissions();
|
||||
|
||||
super.onCreate(savedInstanceState);
|
||||
instance = this;
|
||||
|
@ -324,53 +322,20 @@ public class CallIncomingActivity extends Activity implements LinphoneSliderTrig
|
|||
|
||||
}
|
||||
|
||||
private void checkAndRequestCameraPermission() {
|
||||
if (LinphonePreferences.instance().cameraPermAsked()) {
|
||||
return;
|
||||
private void checkAndRequestCallPermissions() {
|
||||
ArrayList<String> permissionsList = new ArrayList<String>();
|
||||
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.RECORD_AUDIO) && getPackageManager().checkPermission(Manifest.permission.RECORD_AUDIO, getPackageName()) != PackageManager.PERMISSION_GRANTED) {
|
||||
permissionsList.add(Manifest.permission.RECORD_AUDIO);
|
||||
}
|
||||
checkAndRequestPermission(Manifest.permission.CAMERA, PERMISSIONS_REQUEST_CAMERA);
|
||||
}
|
||||
|
||||
private void checkAndRequestPermission(String permission, int result) {
|
||||
if (getPackageManager().checkPermission(permission, getPackageName()) != PackageManager.PERMISSION_GRANTED) {
|
||||
ActivityCompat.requestPermissions(this, new String[]{permission}, result);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
|
||||
if (grantResults.length > 0) {
|
||||
for (int i = 0; i < grantResults.length; i++) {
|
||||
if (grantResults[i] == PackageManager.PERMISSION_DENIED) {
|
||||
if (!ActivityCompat.shouldShowRequestPermissionRationale(this, permissions[i])) {
|
||||
if (permissions[i].equals(Manifest.permission.RECORD_AUDIO)) {
|
||||
LinphonePreferences.instance().neverAskAudioPerm();
|
||||
} else if (permissions[i].equals(Manifest.permission.CAMERA)) {
|
||||
LinphonePreferences.instance().neverAskCameraPerm();
|
||||
} else if (permissions[i].equals(Manifest.permission.READ_CONTACTS)) {
|
||||
LinphonePreferences.instance().neverAskReadContactsPerm();
|
||||
} else if (permissions[i].equals(Manifest.permission.WRITE_CONTACTS)) {
|
||||
LinphonePreferences.instance().neverAskWriteContactsPerm();
|
||||
} else if (permissions[i].equals(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
|
||||
LinphonePreferences.instance().neverAskWriteExternalStoragePerm();
|
||||
}
|
||||
} else {
|
||||
//TODO: show dialog explaining what we need the permission for
|
||||
}
|
||||
} else {
|
||||
if (permissions[i].equals(Manifest.permission.RECORD_AUDIO)) {
|
||||
LinphonePreferences.instance().neverAskAudioPerm();
|
||||
} else if (permissions[i].equals(Manifest.permission.CAMERA)) {
|
||||
LinphonePreferences.instance().neverAskCameraPerm();
|
||||
} else if (permissions[i].equals(Manifest.permission.READ_CONTACTS)) {
|
||||
LinphonePreferences.instance().neverAskReadContactsPerm();
|
||||
} else if (permissions[i].equals(Manifest.permission.WRITE_CONTACTS)) {
|
||||
LinphonePreferences.instance().neverAskWriteContactsPerm();
|
||||
} else if (permissions[i].equals(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
|
||||
LinphonePreferences.instance().neverAskWriteExternalStoragePerm();
|
||||
}
|
||||
}
|
||||
if (LinphonePreferences.instance().shouldInitiateVideoCall() || LinphonePreferences.instance().shouldAutomaticallyAcceptVideoRequests()) {
|
||||
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA) && getPackageManager().checkPermission(Manifest.permission.CAMERA, getPackageName()) != PackageManager.PERMISSION_GRANTED) {
|
||||
permissionsList.add(Manifest.permission.CAMERA);
|
||||
}
|
||||
}
|
||||
if (permissionsList.size() > 0) {
|
||||
String[] permissions = new String[permissionsList.size()];
|
||||
permissions = permissionsList.toArray(permissions);
|
||||
ActivityCompat.requestPermissions(this, permissions, 0);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -18,6 +18,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
*/
|
||||
package org.linphone;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.linphone.core.LinphoneAddress;
|
||||
|
@ -48,7 +49,6 @@ import android.widget.Toast;
|
|||
|
||||
public class CallOutgoingActivity extends Activity implements OnClickListener{
|
||||
private static CallOutgoingActivity instance;
|
||||
private static final int PERMISSIONS_REQUEST_CAMERA = 205;
|
||||
|
||||
private TextView name, number;
|
||||
private ImageView contactPicture, micro, speaker, hangUp;
|
||||
|
@ -129,9 +129,7 @@ public class CallOutgoingActivity extends Activity implements OnClickListener{
|
|||
}
|
||||
};
|
||||
|
||||
if (LinphonePreferences.instance().isVideoEnabled() && LinphonePreferences.instance().shouldInitiateVideoCall()) {
|
||||
checkAndRequestCameraPermission();
|
||||
}
|
||||
checkAndRequestCallPermissions();
|
||||
|
||||
super.onCreate(savedInstanceState);
|
||||
instance = this;
|
||||
|
@ -242,53 +240,20 @@ public class CallOutgoingActivity extends Activity implements OnClickListener{
|
|||
LinphoneManager.getLc().terminateCall(mCall);
|
||||
}
|
||||
|
||||
private void checkAndRequestCameraPermission() {
|
||||
if (LinphonePreferences.instance().cameraPermAsked()) {
|
||||
return;
|
||||
private void checkAndRequestCallPermissions() {
|
||||
ArrayList<String> permissionsList = new ArrayList<String>();
|
||||
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.RECORD_AUDIO) && getPackageManager().checkPermission(Manifest.permission.RECORD_AUDIO, getPackageName()) != PackageManager.PERMISSION_GRANTED) {
|
||||
permissionsList.add(Manifest.permission.RECORD_AUDIO);
|
||||
}
|
||||
checkAndRequestPermission(Manifest.permission.CAMERA, PERMISSIONS_REQUEST_CAMERA);
|
||||
}
|
||||
|
||||
private void checkAndRequestPermission(String permission, int result) {
|
||||
if (getPackageManager().checkPermission(permission, getPackageName()) != PackageManager.PERMISSION_GRANTED) {
|
||||
ActivityCompat.requestPermissions(this, new String[]{permission}, result);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
|
||||
if (grantResults.length > 0) {
|
||||
for (int i = 0; i < grantResults.length; i++) {
|
||||
if (grantResults[i] == PackageManager.PERMISSION_DENIED) {
|
||||
if (!ActivityCompat.shouldShowRequestPermissionRationale(this, permissions[i])) {
|
||||
if (permissions[i].equals(Manifest.permission.RECORD_AUDIO)) {
|
||||
LinphonePreferences.instance().neverAskAudioPerm();
|
||||
} else if (permissions[i].equals(Manifest.permission.CAMERA)) {
|
||||
LinphonePreferences.instance().neverAskCameraPerm();
|
||||
} else if (permissions[i].equals(Manifest.permission.READ_CONTACTS)) {
|
||||
LinphonePreferences.instance().neverAskReadContactsPerm();
|
||||
} else if (permissions[i].equals(Manifest.permission.WRITE_CONTACTS)) {
|
||||
LinphonePreferences.instance().neverAskWriteContactsPerm();
|
||||
} else if (permissions[i].equals(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
|
||||
LinphonePreferences.instance().neverAskWriteExternalStoragePerm();
|
||||
}
|
||||
} else {
|
||||
//TODO: show dialog explaining what we need the permission for
|
||||
}
|
||||
} else {
|
||||
if (permissions[i].equals(Manifest.permission.RECORD_AUDIO)) {
|
||||
LinphonePreferences.instance().neverAskAudioPerm();
|
||||
} else if (permissions[i].equals(Manifest.permission.CAMERA)) {
|
||||
LinphonePreferences.instance().neverAskCameraPerm();
|
||||
} else if (permissions[i].equals(Manifest.permission.READ_CONTACTS)) {
|
||||
LinphonePreferences.instance().neverAskReadContactsPerm();
|
||||
} else if (permissions[i].equals(Manifest.permission.WRITE_CONTACTS)) {
|
||||
LinphonePreferences.instance().neverAskWriteContactsPerm();
|
||||
} else if (permissions[i].equals(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
|
||||
LinphonePreferences.instance().neverAskWriteExternalStoragePerm();
|
||||
}
|
||||
}
|
||||
if (LinphonePreferences.instance().shouldInitiateVideoCall() || LinphonePreferences.instance().shouldAutomaticallyAcceptVideoRequests()) {
|
||||
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA) && getPackageManager().checkPermission(Manifest.permission.CAMERA, getPackageName()) != PackageManager.PERMISSION_GRANTED) {
|
||||
permissionsList.add(Manifest.permission.CAMERA);
|
||||
}
|
||||
}
|
||||
if (permissionsList.size() > 0) {
|
||||
String[] permissions = new String[permissionsList.size()];
|
||||
permissions = permissionsList.toArray(permissions);
|
||||
ActivityCompat.requestPermissions(this, permissions, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -192,7 +192,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
|
|||
@Override
|
||||
public void onClick(View v) {
|
||||
pickImage();
|
||||
LinphoneActivity.instance().checkAndRequestCameraPermission();
|
||||
LinphoneActivity.instance().checkAndRequestPermissionsToSendImage();
|
||||
}
|
||||
});
|
||||
//registerForContextMenu(sendImage);
|
||||
|
|
|
@ -106,9 +106,10 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
|
|||
private static final int PERMISSIONS_REQUEST_CONTACTS = 200;
|
||||
private static final int PERMISSIONS_REQUEST_RECORD_AUDIO = 201;
|
||||
private static final int PERMISSIONS_REQUEST_RECORD_AUDIO_INCOMING_CALL = 203;
|
||||
private static final int PERMISSIONS_REQUEST_EXTERNAL_FILE_STORAGE = 204;
|
||||
private static final int PERMISSIONS_REQUEST_EXTERNAL_FILE_STORAGE_WRITE = 204;
|
||||
private static final int PERMISSIONS_REQUEST_CAMERA = 205;
|
||||
private static final int PERMISSIONS_REQUEST_OVERLAY = 206;
|
||||
private static final int PERMISSIONS_REQUEST_EXTERNAL_FILE_STORAGE_READ = 207;
|
||||
|
||||
private static LinphoneActivity instance;
|
||||
|
||||
|
@ -234,16 +235,16 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
|
|||
@Override
|
||||
public void callState(LinphoneCore lc, LinphoneCall call, LinphoneCall.State state, String message) {
|
||||
if (state == State.IncomingReceived) {
|
||||
if (getPackageManager().checkPermission(Manifest.permission.RECORD_AUDIO, getPackageName()) == PackageManager.PERMISSION_GRANTED || LinphonePreferences.instance().audioPermAsked()) {
|
||||
if (getPackageManager().checkPermission(Manifest.permission.RECORD_AUDIO, getPackageName()) == PackageManager.PERMISSION_GRANTED || !ActivityCompat.shouldShowRequestPermissionRationale(LinphoneActivity.this, Manifest.permission.RECORD_AUDIO)) {
|
||||
startActivity(new Intent(LinphoneActivity.instance(), CallIncomingActivity.class));
|
||||
} else {
|
||||
checkAndRequestAudioPermission(true);
|
||||
checkAndRequestCallPermissions(true);
|
||||
}
|
||||
} else if (state == State.OutgoingInit || state == State.OutgoingProgress) {
|
||||
if (getPackageManager().checkPermission(Manifest.permission.RECORD_AUDIO, getPackageName()) == PackageManager.PERMISSION_GRANTED || LinphonePreferences.instance().audioPermAsked()) {
|
||||
if (getPackageManager().checkPermission(Manifest.permission.RECORD_AUDIO, getPackageName()) == PackageManager.PERMISSION_GRANTED || !ActivityCompat.shouldShowRequestPermissionRationale(LinphoneActivity.this, Manifest.permission.RECORD_AUDIO)) {
|
||||
startActivity(new Intent(LinphoneActivity.instance(), CallOutgoingActivity.class));
|
||||
} else {
|
||||
checkAndRequestAudioPermission(false);
|
||||
checkAndRequestCallPermissions(false);
|
||||
}
|
||||
} else if (state == State.CallEnd || state == State.Error || state == State.CallReleased) {
|
||||
resetClassicMenuLayoutAndGoBackToCallIfStillRunning();
|
||||
|
@ -1164,43 +1165,56 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
|
|||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public void checkAndRequestReadExternalStoragePermission() {
|
||||
checkAndRequestPermission(Manifest.permission.READ_EXTERNAL_STORAGE, PERMISSIONS_REQUEST_EXTERNAL_FILE_STORAGE_READ);
|
||||
}
|
||||
|
||||
public void checkAndRequestExternalStoragePermission() {
|
||||
if (LinphonePreferences.instance().writeExternalStoragePermAsked()) {
|
||||
return;
|
||||
}
|
||||
checkAndRequestPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE, PERMISSIONS_REQUEST_EXTERNAL_FILE_STORAGE);
|
||||
checkAndRequestPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE, PERMISSIONS_REQUEST_EXTERNAL_FILE_STORAGE_WRITE);
|
||||
}
|
||||
|
||||
public void checkAndRequestCameraPermission() {
|
||||
if (LinphonePreferences.instance().cameraPermAsked()) {
|
||||
return;
|
||||
}
|
||||
checkAndRequestPermission(Manifest.permission.CAMERA, PERMISSIONS_REQUEST_CAMERA);
|
||||
}
|
||||
|
||||
public void checkAndRequestReadContactsPermission() {
|
||||
if (LinphonePreferences.instance().readContactsPermAsked()) {
|
||||
return;
|
||||
}
|
||||
checkAndRequestPermission(Manifest.permission.READ_CONTACTS, PERMISSIONS_REQUEST_CONTACTS);
|
||||
}
|
||||
|
||||
public void checkAndRequestWriteContactsPermission() {
|
||||
if (LinphonePreferences.instance().writeContactsPermAsked()) {
|
||||
return;
|
||||
}
|
||||
checkAndRequestPermission(Manifest.permission.WRITE_CONTACTS, PERMISSIONS_REQUEST_CONTACTS);
|
||||
}
|
||||
|
||||
public void checkAndRequestAudioPermission(boolean isIncomingCall) {
|
||||
if (LinphonePreferences.instance().audioPermAsked()) {
|
||||
return;
|
||||
public void checkAndRequestCallPermissions(boolean isIncomingCall) {
|
||||
ArrayList<String> permissionsList = new ArrayList<String>();
|
||||
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.RECORD_AUDIO) && getPackageManager().checkPermission(Manifest.permission.RECORD_AUDIO, getPackageName()) != PackageManager.PERMISSION_GRANTED) {
|
||||
permissionsList.add(Manifest.permission.RECORD_AUDIO);
|
||||
}
|
||||
checkAndRequestPermission(Manifest.permission.RECORD_AUDIO, isIncomingCall ? PERMISSIONS_REQUEST_RECORD_AUDIO_INCOMING_CALL : PERMISSIONS_REQUEST_RECORD_AUDIO);
|
||||
if (LinphonePreferences.instance().shouldInitiateVideoCall() ||
|
||||
LinphonePreferences.instance().shouldAutomaticallyAcceptVideoRequests()) {
|
||||
checkAndRequestCameraPermission();
|
||||
if (LinphonePreferences.instance().shouldInitiateVideoCall() || LinphonePreferences.instance().shouldAutomaticallyAcceptVideoRequests()) {
|
||||
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA) && getPackageManager().checkPermission(Manifest.permission.CAMERA, getPackageName()) != PackageManager.PERMISSION_GRANTED) {
|
||||
permissionsList.add(Manifest.permission.CAMERA);
|
||||
}
|
||||
}
|
||||
if (permissionsList.size() > 0) {
|
||||
String[] permissions = new String[permissionsList.size()];
|
||||
permissions = permissionsList.toArray(permissions);
|
||||
ActivityCompat.requestPermissions(this, permissions, isIncomingCall ? PERMISSIONS_REQUEST_RECORD_AUDIO_INCOMING_CALL : PERMISSIONS_REQUEST_RECORD_AUDIO);
|
||||
}
|
||||
}
|
||||
|
||||
public void checkAndRequestPermissionsToSendImage() {
|
||||
ArrayList<String> permissionsList = new ArrayList<String>();
|
||||
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_EXTERNAL_STORAGE) && getPackageManager().checkPermission(Manifest.permission.READ_EXTERNAL_STORAGE, getPackageName()) != PackageManager.PERMISSION_GRANTED) {
|
||||
permissionsList.add(Manifest.permission.READ_EXTERNAL_STORAGE);
|
||||
}
|
||||
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA) && getPackageManager().checkPermission(Manifest.permission.CAMERA, getPackageName()) != PackageManager.PERMISSION_GRANTED) {
|
||||
permissionsList.add(Manifest.permission.CAMERA);
|
||||
}
|
||||
if (permissionsList.size() > 0) {
|
||||
String[] permissions = new String[permissionsList.size()];
|
||||
permissions = permissionsList.toArray(permissions);
|
||||
ActivityCompat.requestPermissions(this, permissions, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1212,39 +1226,6 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
|
|||
|
||||
@Override
|
||||
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
|
||||
if (grantResults.length > 0) {
|
||||
for (int i = 0; i < grantResults.length; i++) {
|
||||
if (grantResults[i] == PackageManager.PERMISSION_DENIED) {
|
||||
if (!ActivityCompat.shouldShowRequestPermissionRationale(this, permissions[i])) {
|
||||
if (permissions[i].equals(Manifest.permission.RECORD_AUDIO)) {
|
||||
LinphonePreferences.instance().neverAskAudioPerm();
|
||||
} else if (permissions[i].equals(Manifest.permission.CAMERA)) {
|
||||
LinphonePreferences.instance().neverAskCameraPerm();
|
||||
} else if (permissions[i].equals(Manifest.permission.READ_CONTACTS)) {
|
||||
LinphonePreferences.instance().neverAskReadContactsPerm();
|
||||
} else if (permissions[i].equals(Manifest.permission.WRITE_CONTACTS)) {
|
||||
LinphonePreferences.instance().neverAskWriteContactsPerm();
|
||||
} else if (permissions[i].equals(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
|
||||
LinphonePreferences.instance().neverAskWriteExternalStoragePerm();
|
||||
}
|
||||
} else {
|
||||
//TODO: show dialog explaining what we need the permission for
|
||||
}
|
||||
} else {
|
||||
if (permissions[i].equals(Manifest.permission.RECORD_AUDIO)) {
|
||||
LinphonePreferences.instance().neverAskAudioPerm();
|
||||
} else if (permissions[i].equals(Manifest.permission.CAMERA)) {
|
||||
LinphonePreferences.instance().neverAskCameraPerm();
|
||||
} else if (permissions[i].equals(Manifest.permission.READ_CONTACTS)) {
|
||||
LinphonePreferences.instance().neverAskReadContactsPerm();
|
||||
} else if (permissions[i].equals(Manifest.permission.WRITE_CONTACTS)) {
|
||||
LinphonePreferences.instance().neverAskWriteContactsPerm();
|
||||
} else if (permissions[i].equals(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
|
||||
LinphonePreferences.instance().neverAskWriteExternalStoragePerm();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
switch (requestCode) {
|
||||
case PERMISSIONS_REQUEST_RECORD_AUDIO:
|
||||
startActivity(new Intent(this, CallOutgoingActivity.class));
|
||||
|
@ -1292,16 +1273,16 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
|
|||
LinphoneCall call = LinphoneManager.getLc().getCalls()[0];
|
||||
LinphoneCall.State callState = call.getState();
|
||||
if (callState == State.IncomingReceived) {
|
||||
if (getPackageManager().checkPermission(Manifest.permission.RECORD_AUDIO, getPackageName()) == PackageManager.PERMISSION_GRANTED || LinphonePreferences.instance().audioPermAsked()) {
|
||||
if (getPackageManager().checkPermission(Manifest.permission.RECORD_AUDIO, getPackageName()) == PackageManager.PERMISSION_GRANTED || !ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.RECORD_AUDIO)) {
|
||||
startActivity(new Intent(this, CallIncomingActivity.class));
|
||||
} else {
|
||||
checkAndRequestAudioPermission(true);
|
||||
checkAndRequestCallPermissions(true);
|
||||
}
|
||||
} else if (callState == State.OutgoingInit || callState == State.OutgoingProgress || callState == State.OutgoingRinging) {
|
||||
if (getPackageManager().checkPermission(Manifest.permission.RECORD_AUDIO, getPackageName()) == PackageManager.PERMISSION_GRANTED || LinphonePreferences.instance().audioPermAsked()) {
|
||||
if (getPackageManager().checkPermission(Manifest.permission.RECORD_AUDIO, getPackageName()) == PackageManager.PERMISSION_GRANTED || !ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.RECORD_AUDIO)) {
|
||||
startActivity(new Intent(this, CallOutgoingActivity.class));
|
||||
} else {
|
||||
checkAndRequestAudioPermission(false);
|
||||
checkAndRequestCallPermissions(false);
|
||||
}
|
||||
} else {
|
||||
if (call.getCurrentParamsCopy().getVideoEnabled()) {
|
||||
|
@ -1381,10 +1362,10 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
|
|||
if (CallActivity.isInstanciated()) {
|
||||
CallActivity.instance().startIncomingCallActivity();
|
||||
} else {
|
||||
if (getPackageManager().checkPermission(Manifest.permission.RECORD_AUDIO, getPackageName()) == PackageManager.PERMISSION_GRANTED || LinphonePreferences.instance().audioPermAsked()) {
|
||||
if (getPackageManager().checkPermission(Manifest.permission.RECORD_AUDIO, getPackageName()) == PackageManager.PERMISSION_GRANTED || !ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.RECORD_AUDIO)) {
|
||||
startActivity(new Intent(this, CallIncomingActivity.class));
|
||||
} else {
|
||||
checkAndRequestAudioPermission(true);
|
||||
checkAndRequestCallPermissions(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1287,46 +1287,6 @@ public class LinphonePreferences {
|
|||
return getConfig().getString("app", "debug_popup_magic", null);
|
||||
}
|
||||
|
||||
public Boolean audioPermAsked(){
|
||||
return getConfig().getBool("app", "audio_perm", false);
|
||||
}
|
||||
|
||||
public void neverAskAudioPerm(){
|
||||
getConfig().setBool("app", "audio_perm", true);
|
||||
}
|
||||
|
||||
public Boolean cameraPermAsked(){
|
||||
return getConfig().getBool("app", "camera_perm", false);
|
||||
}
|
||||
|
||||
public void neverAskCameraPerm(){
|
||||
getConfig().setBool("app", "camera_perm", true);
|
||||
}
|
||||
|
||||
public Boolean readContactsPermAsked(){
|
||||
return getConfig().getBool("app", "read_contacts_perm", false);
|
||||
}
|
||||
|
||||
public void neverAskReadContactsPerm(){
|
||||
getConfig().setBool("app", "read_contacts_perm", true);
|
||||
}
|
||||
|
||||
public Boolean writeContactsPermAsked(){
|
||||
return getConfig().getBool("app", "write_contacts_perm", false);
|
||||
}
|
||||
|
||||
public void neverAskWriteContactsPerm(){
|
||||
getConfig().setBool("app", "write_contacts_perm", true);
|
||||
}
|
||||
|
||||
public Boolean writeExternalStoragePermAsked(){
|
||||
return getConfig().getBool("app", "write_external_storage_perm", false);
|
||||
}
|
||||
|
||||
public void neverAskWriteExternalStoragePerm(){
|
||||
getConfig().setBool("app", "write_external_storage_perm", true);
|
||||
}
|
||||
|
||||
public String getActivityToLaunchOnIncomingReceived() {
|
||||
return getConfig().getString("app", "incoming_call_activity", "org.linphone.LinphoneActivity");
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue