Improvements over permission code
This commit is contained in:
parent
5d3a6e57de
commit
ada3401232
8 changed files with 61 additions and 172 deletions
|
@ -1199,37 +1199,20 @@ public class LinphoneActivity extends LinphoneGenericActivity
|
||||||
}
|
}
|
||||||
|
|
||||||
public void checkAndRequestPermissionsToSendImage() {
|
public void checkAndRequestPermissionsToSendImage() {
|
||||||
ArrayList<String> permissionsList = new ArrayList<>();
|
ArrayList<String> permissionsToAskFor = new ArrayList<>();
|
||||||
|
String[] permissionsToHave = {
|
||||||
|
Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.CAMERA
|
||||||
|
};
|
||||||
|
|
||||||
int readExternalStorage =
|
for (String permissionToHave : permissionsToHave) {
|
||||||
getPackageManager()
|
if (!checkPermission(permissionToHave)) {
|
||||||
.checkPermission(
|
permissionsToAskFor.add(permissionToHave);
|
||||||
Manifest.permission.READ_EXTERNAL_STORAGE, getPackageName());
|
}
|
||||||
Log.i(
|
}
|
||||||
"[Permission] Read external storage permission is "
|
|
||||||
+ (readExternalStorage == PackageManager.PERMISSION_GRANTED
|
|
||||||
? "granted"
|
|
||||||
: "denied"));
|
|
||||||
int camera =
|
|
||||||
getPackageManager().checkPermission(Manifest.permission.CAMERA, getPackageName());
|
|
||||||
Log.i(
|
|
||||||
"[Permission] Camera permission is "
|
|
||||||
+ (camera == PackageManager.PERMISSION_GRANTED ? "granted" : "denied"));
|
|
||||||
|
|
||||||
if (readExternalStorage != PackageManager.PERMISSION_GRANTED) {
|
if (permissionsToAskFor.size() > 0) {
|
||||||
ActivityCompat.shouldShowRequestPermissionRationale(
|
String[] permissions = new String[permissionsToAskFor.size()];
|
||||||
this, Manifest.permission.READ_EXTERNAL_STORAGE);
|
permissions = permissionsToAskFor.toArray(permissions);
|
||||||
Log.i("[Permission] Asking for read external storage");
|
|
||||||
permissionsList.add(Manifest.permission.READ_EXTERNAL_STORAGE);
|
|
||||||
}
|
|
||||||
if (camera != PackageManager.PERMISSION_GRANTED) {
|
|
||||||
ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA);
|
|
||||||
Log.i("[Permission] Asking for camera");
|
|
||||||
permissionsList.add(Manifest.permission.CAMERA);
|
|
||||||
}
|
|
||||||
if (permissionsList.size() > 0) {
|
|
||||||
String[] permissions = new String[permissionsList.size()];
|
|
||||||
permissions = permissionsList.toArray(permissions);
|
|
||||||
ActivityCompat.requestPermissions(this, permissions, 0);
|
ActivityCompat.requestPermissions(this, permissions, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1239,6 +1222,16 @@ public class LinphoneActivity extends LinphoneGenericActivity
|
||||||
Manifest.permission.WRITE_SYNC_SETTINGS, PERMISSIONS_REQUEST_SYNC);
|
Manifest.permission.WRITE_SYNC_SETTINGS, PERMISSIONS_REQUEST_SYNC);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean checkPermission(String permission) {
|
||||||
|
int granted = getPackageManager().checkPermission(permission, getPackageName());
|
||||||
|
Log.i(
|
||||||
|
"[Permission] "
|
||||||
|
+ permission
|
||||||
|
+ " permission is "
|
||||||
|
+ (granted == PackageManager.PERMISSION_GRANTED ? "granted" : "denied"));
|
||||||
|
return granted == PackageManager.PERMISSION_GRANTED;
|
||||||
|
}
|
||||||
|
|
||||||
private void checkAndRequestPermission(String permission, int result) {
|
private void checkAndRequestPermission(String permission, int result) {
|
||||||
int permissionGranted = getPackageManager().checkPermission(permission, getPackageName());
|
int permissionGranted = getPackageManager().checkPermission(permission, getPackageName());
|
||||||
Log.i(
|
Log.i(
|
||||||
|
@ -1249,8 +1242,7 @@ public class LinphoneActivity extends LinphoneGenericActivity
|
||||||
? "granted"
|
? "granted"
|
||||||
: "denied"));
|
: "denied"));
|
||||||
|
|
||||||
if (permissionGranted != PackageManager.PERMISSION_GRANTED) {
|
if (!checkPermission(permission)) {
|
||||||
ActivityCompat.shouldShowRequestPermissionRationale(this, permission);
|
|
||||||
Log.i("[Permission] Asking for " + permission);
|
Log.i("[Permission] Asking for " + permission);
|
||||||
ActivityCompat.requestPermissions(this, new String[] {permission}, result);
|
ActivityCompat.requestPermissions(this, new String[] {permission}, result);
|
||||||
}
|
}
|
||||||
|
@ -1306,88 +1298,38 @@ public class LinphoneActivity extends LinphoneGenericActivity
|
||||||
@Override
|
@Override
|
||||||
protected void onStart() {
|
protected void onStart() {
|
||||||
super.onStart();
|
super.onStart();
|
||||||
ArrayList<String> permissionsList = new ArrayList<>();
|
|
||||||
|
ArrayList<String> permissionsToAskFor = new ArrayList<>();
|
||||||
|
String[] permissionsToHave = {
|
||||||
// This one is to allow floating notifications
|
// This one is to allow floating notifications
|
||||||
permissionsList.add(Manifest.permission.SYSTEM_ALERT_WINDOW);
|
Manifest.permission.SYSTEM_ALERT_WINDOW,
|
||||||
// Manifest.permission.FOREGROUND_SERVICE,
|
// Required starting Android 9 to be able to start a foreground service
|
||||||
// required starting Android 9 to be able
|
"android.permission.FOREGROUND_SERVICE",
|
||||||
// to start a foreground service
|
Manifest.permission.READ_EXTERNAL_STORAGE,
|
||||||
permissionsList.add("android.permission.FOREGROUND_SERVICE");
|
Manifest.permission.READ_PHONE_STATE,
|
||||||
|
Manifest.permission.WRITE_CONTACTS,
|
||||||
|
Manifest.permission.READ_CONTACTS
|
||||||
|
};
|
||||||
|
|
||||||
int contacts =
|
for (String permissionToHave : permissionsToHave) {
|
||||||
getPackageManager()
|
if (!checkPermission(permissionToHave)) {
|
||||||
.checkPermission(Manifest.permission.READ_CONTACTS, getPackageName());
|
permissionsToAskFor.add(permissionToHave);
|
||||||
Log.i(
|
|
||||||
"[Permission] Contacts read permission is "
|
|
||||||
+ (contacts == PackageManager.PERMISSION_GRANTED ? "granted" : "denied"));
|
|
||||||
|
|
||||||
int wcontacts =
|
|
||||||
getPackageManager()
|
|
||||||
.checkPermission(Manifest.permission.WRITE_CONTACTS, getPackageName());
|
|
||||||
Log.i(
|
|
||||||
"[Permission] Contacts write permission is "
|
|
||||||
+ (wcontacts == PackageManager.PERMISSION_GRANTED ? "granted" : "denied"));
|
|
||||||
|
|
||||||
int readPhone =
|
|
||||||
getPackageManager()
|
|
||||||
.checkPermission(Manifest.permission.READ_PHONE_STATE, getPackageName());
|
|
||||||
Log.i(
|
|
||||||
"[Permission] Read phone state permission is "
|
|
||||||
+ (readPhone == PackageManager.PERMISSION_GRANTED ? "granted" : "denied"));
|
|
||||||
|
|
||||||
int ringtone =
|
|
||||||
getPackageManager()
|
|
||||||
.checkPermission(
|
|
||||||
Manifest.permission.READ_EXTERNAL_STORAGE, getPackageName());
|
|
||||||
Log.i(
|
|
||||||
"[Permission] Read external storage for ring tone permission is "
|
|
||||||
+ (ringtone == PackageManager.PERMISSION_GRANTED ? "granted" : "denied"));
|
|
||||||
|
|
||||||
if (ringtone != PackageManager.PERMISSION_GRANTED) {
|
|
||||||
if (LinphonePreferences.instance()
|
|
||||||
.firstTimeAskingForPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
|
|
||||||
|| ActivityCompat.shouldShowRequestPermissionRationale(
|
|
||||||
this, Manifest.permission.READ_EXTERNAL_STORAGE)) {
|
|
||||||
Log.i("[Permission] Asking for read external storage for ring tone");
|
|
||||||
permissionsList.add(Manifest.permission.READ_EXTERNAL_STORAGE);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (readPhone != PackageManager.PERMISSION_GRANTED) {
|
|
||||||
if (LinphonePreferences.instance()
|
|
||||||
.firstTimeAskingForPermission(Manifest.permission.READ_PHONE_STATE)
|
|
||||||
|| ActivityCompat.shouldShowRequestPermissionRationale(
|
|
||||||
this, Manifest.permission.READ_PHONE_STATE)) {
|
|
||||||
Log.i("[Permission] Asking for read phone state");
|
|
||||||
permissionsList.add(Manifest.permission.READ_PHONE_STATE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (wcontacts != PackageManager.PERMISSION_GRANTED) {
|
|
||||||
if (LinphonePreferences.instance()
|
|
||||||
.firstTimeAskingForPermission(Manifest.permission.WRITE_CONTACTS)
|
|
||||||
|| ActivityCompat.shouldShowRequestPermissionRationale(
|
|
||||||
this, Manifest.permission.WRITE_CONTACTS)) {
|
|
||||||
Log.i("[Permission] Asking for write contact");
|
|
||||||
permissionsList.add(Manifest.permission.WRITE_CONTACTS);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (contacts != PackageManager.PERMISSION_GRANTED) {
|
|
||||||
if (LinphonePreferences.instance()
|
|
||||||
.firstTimeAskingForPermission(Manifest.permission.READ_CONTACTS)
|
|
||||||
|| ActivityCompat.shouldShowRequestPermissionRationale(
|
|
||||||
this, Manifest.permission.READ_CONTACTS)) {
|
|
||||||
Log.i("[Permission] Asking for read contact");
|
|
||||||
permissionsList.add(Manifest.permission.READ_CONTACTS);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
ContactsManager.getInstance().enableContactsAccess();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (permissionsList.size() > 0) {
|
if (permissionsToAskFor.size() > 0) {
|
||||||
String[] permissions = new String[permissionsList.size()];
|
for (String permission : permissionsToAskFor) {
|
||||||
permissions = permissionsList.toArray(permissions);
|
Log.i("[Permission] Asking for " + permission + " permission");
|
||||||
|
}
|
||||||
|
String[] permissions = new String[permissionsToAskFor.size()];
|
||||||
|
permissions = permissionsToAskFor.toArray(permissions);
|
||||||
ActivityCompat.requestPermissions(
|
ActivityCompat.requestPermissions(
|
||||||
this, permissions, PERMISSIONS_READ_EXTERNAL_STORAGE_DEVICE_RINGTONE);
|
this, permissions, PERMISSIONS_READ_EXTERNAL_STORAGE_DEVICE_RINGTONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (checkPermission(Manifest.permission.READ_CONTACTS)) {
|
||||||
|
ContactsManager.getInstance().enableContactsAccess();
|
||||||
|
}
|
||||||
ContactsManager.getInstance().initializeContactManager(this);
|
ContactsManager.getInstance().initializeContactManager(this);
|
||||||
|
|
||||||
if (DeviceUtils.isAppUserRestricted(this)) {
|
if (DeviceUtils.isAppUserRestricted(this)) {
|
||||||
|
|
|
@ -386,13 +386,10 @@ public class AssistantActivity extends ThemableActivity
|
||||||
: "denied"));
|
: "denied"));
|
||||||
|
|
||||||
if (permissionGranted != PackageManager.PERMISSION_GRANTED) {
|
if (permissionGranted != PackageManager.PERMISSION_GRANTED) {
|
||||||
if (LinphonePreferences.instance().firstTimeAskingForPermission(permission)
|
|
||||||
|| ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) {
|
|
||||||
Log.i("[Permission] Asking for " + permission);
|
Log.i("[Permission] Asking for " + permission);
|
||||||
ActivityCompat.requestPermissions(this, new String[] {permission}, result);
|
ActivityCompat.requestPermissions(this, new String[] {permission}, result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onRequestPermissionsResult(
|
public void onRequestPermissionsResult(
|
||||||
|
|
|
@ -501,13 +501,10 @@ public class CallActivity extends LinphoneGenericActivity
|
||||||
: "denied"));
|
: "denied"));
|
||||||
|
|
||||||
if (permissionGranted != PackageManager.PERMISSION_GRANTED) {
|
if (permissionGranted != PackageManager.PERMISSION_GRANTED) {
|
||||||
if (LinphonePreferences.instance().firstTimeAskingForPermission(permission)
|
|
||||||
|| ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) {
|
|
||||||
Log.i("[Permission] Asking for " + permission);
|
Log.i("[Permission] Asking for " + permission);
|
||||||
ActivityCompat.requestPermissions(this, new String[] {permission}, result);
|
ActivityCompat.requestPermissions(this, new String[] {permission}, result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onRequestPermissionsResult(
|
public void onRequestPermissionsResult(
|
||||||
|
|
|
@ -279,26 +279,16 @@ public class CallIncomingActivity extends LinphoneGenericActivity {
|
||||||
+ (camera == PackageManager.PERMISSION_GRANTED ? "granted" : "denied"));
|
+ (camera == PackageManager.PERMISSION_GRANTED ? "granted" : "denied"));
|
||||||
|
|
||||||
if (recordAudio != PackageManager.PERMISSION_GRANTED) {
|
if (recordAudio != PackageManager.PERMISSION_GRANTED) {
|
||||||
if (LinphonePreferences.instance()
|
|
||||||
.firstTimeAskingForPermission(Manifest.permission.RECORD_AUDIO)
|
|
||||||
|| ActivityCompat.shouldShowRequestPermissionRationale(
|
|
||||||
this, Manifest.permission.RECORD_AUDIO)) {
|
|
||||||
Log.i("[Permission] Asking for record audio");
|
Log.i("[Permission] Asking for record audio");
|
||||||
permissionsList.add(Manifest.permission.RECORD_AUDIO);
|
permissionsList.add(Manifest.permission.RECORD_AUDIO);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (LinphonePreferences.instance().shouldInitiateVideoCall()
|
if (LinphonePreferences.instance().shouldInitiateVideoCall()
|
||||||
|| LinphonePreferences.instance().shouldAutomaticallyAcceptVideoRequests()) {
|
|| LinphonePreferences.instance().shouldAutomaticallyAcceptVideoRequests()) {
|
||||||
if (camera != PackageManager.PERMISSION_GRANTED) {
|
if (camera != PackageManager.PERMISSION_GRANTED) {
|
||||||
if (LinphonePreferences.instance()
|
|
||||||
.firstTimeAskingForPermission(Manifest.permission.CAMERA)
|
|
||||||
|| ActivityCompat.shouldShowRequestPermissionRationale(
|
|
||||||
this, Manifest.permission.CAMERA)) {
|
|
||||||
Log.i("[Permission] Asking for camera");
|
Log.i("[Permission] Asking for camera");
|
||||||
permissionsList.add(Manifest.permission.CAMERA);
|
permissionsList.add(Manifest.permission.CAMERA);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (permissionsList.size() > 0) {
|
if (permissionsList.size() > 0) {
|
||||||
String[] permissions = new String[permissionsList.size()];
|
String[] permissions = new String[permissionsList.size()];
|
||||||
|
|
|
@ -269,26 +269,16 @@ public class CallOutgoingActivity extends LinphoneGenericActivity implements OnC
|
||||||
+ (camera == PackageManager.PERMISSION_GRANTED ? "granted" : "denied"));
|
+ (camera == PackageManager.PERMISSION_GRANTED ? "granted" : "denied"));
|
||||||
|
|
||||||
if (recordAudio != PackageManager.PERMISSION_GRANTED) {
|
if (recordAudio != PackageManager.PERMISSION_GRANTED) {
|
||||||
if (LinphonePreferences.instance()
|
|
||||||
.firstTimeAskingForPermission(Manifest.permission.RECORD_AUDIO)
|
|
||||||
|| ActivityCompat.shouldShowRequestPermissionRationale(
|
|
||||||
this, Manifest.permission.RECORD_AUDIO)) {
|
|
||||||
Log.i("[Permission] Asking for record audio");
|
Log.i("[Permission] Asking for record audio");
|
||||||
permissionsList.add(Manifest.permission.RECORD_AUDIO);
|
permissionsList.add(Manifest.permission.RECORD_AUDIO);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (LinphonePreferences.instance().shouldInitiateVideoCall()
|
if (LinphonePreferences.instance().shouldInitiateVideoCall()
|
||||||
|| LinphonePreferences.instance().shouldAutomaticallyAcceptVideoRequests()) {
|
|| LinphonePreferences.instance().shouldAutomaticallyAcceptVideoRequests()) {
|
||||||
if (camera != PackageManager.PERMISSION_GRANTED) {
|
if (camera != PackageManager.PERMISSION_GRANTED) {
|
||||||
if (LinphonePreferences.instance()
|
|
||||||
.firstTimeAskingForPermission(Manifest.permission.CAMERA)
|
|
||||||
|| ActivityCompat.shouldShowRequestPermissionRationale(
|
|
||||||
this, Manifest.permission.CAMERA)) {
|
|
||||||
Log.i("[Permission] Asking for camera");
|
Log.i("[Permission] Asking for camera");
|
||||||
permissionsList.add(Manifest.permission.CAMERA);
|
permissionsList.add(Manifest.permission.CAMERA);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (permissionsList.size() > 0) {
|
if (permissionsList.size() > 0) {
|
||||||
String[] permissions = new String[permissionsList.size()];
|
String[] permissions = new String[permissionsList.size()];
|
||||||
|
|
|
@ -38,7 +38,6 @@ import org.linphone.core.Config;
|
||||||
import org.linphone.core.Core;
|
import org.linphone.core.Core;
|
||||||
import org.linphone.core.CoreException;
|
import org.linphone.core.CoreException;
|
||||||
import org.linphone.core.Factory;
|
import org.linphone.core.Factory;
|
||||||
import org.linphone.core.LimeState;
|
|
||||||
import org.linphone.core.MediaEncryption;
|
import org.linphone.core.MediaEncryption;
|
||||||
import org.linphone.core.NatPolicy;
|
import org.linphone.core.NatPolicy;
|
||||||
import org.linphone.core.ProxyConfig;
|
import org.linphone.core.ProxyConfig;
|
||||||
|
@ -1334,32 +1333,6 @@ public class LinphonePreferences {
|
||||||
getConfig().setBool("app", "display_overlay", enable);
|
getConfig().setBool("app", "display_overlay", enable);
|
||||||
}
|
}
|
||||||
|
|
||||||
public LimeState limeEnabled() {
|
|
||||||
if (getLc() == null) return LimeState.Disabled;
|
|
||||||
return getLc().limeEnabled();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void enableLime(LimeState lime) {
|
|
||||||
if (getLc() == null) return;
|
|
||||||
getLc().enableLime(lime);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean firstTimeAskingForPermission(String permission) {
|
|
||||||
return firstTimeAskingForPermission(permission, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean firstTimeAskingForPermission(String permission, boolean toggle) {
|
|
||||||
boolean firstTime = getConfig().getBool("app", permission, true);
|
|
||||||
if (toggle) {
|
|
||||||
permissionHasBeenAsked(permission);
|
|
||||||
}
|
|
||||||
return firstTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void permissionHasBeenAsked(String permission) {
|
|
||||||
getConfig().setBool("app", permission, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isDeviceRingtoneEnabled() {
|
public boolean isDeviceRingtoneEnabled() {
|
||||||
int readExternalStorage =
|
int readExternalStorage =
|
||||||
mContext.getPackageManager()
|
mContext.getPackageManager()
|
||||||
|
|
|
@ -385,7 +385,7 @@
|
||||||
android:paddingLeft="10dp"
|
android:paddingLeft="10dp"
|
||||||
android:paddingRight="10dp"
|
android:paddingRight="10dp"
|
||||||
android:text="@string/maybe_later"
|
android:text="@string/maybe_later"
|
||||||
android:textColor="@drawable/assistant_button_text_color"
|
android:textColor="?attr/primaryTextColor"
|
||||||
android:visibility="gone" />
|
android:visibility="gone" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
|
@ -320,7 +320,7 @@
|
||||||
android:id="@+id/assistant_skip"
|
android:id="@+id/assistant_skip"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
android:text="@string/maybe_later"
|
android:text="@string/maybe_later"
|
||||||
android:textColor="@drawable/assistant_button_text_color"
|
android:textColor="?attr/primaryTextColor"
|
||||||
style="@style/font10"
|
style="@style/font10"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
|
Loading…
Reference in a new issue