Improvements over permission code

This commit is contained in:
Sylvain Berfini 2019-03-20 15:10:53 +01:00
parent 5d3a6e57de
commit ada3401232
8 changed files with 61 additions and 172 deletions

View file

@ -1199,37 +1199,20 @@ public class LinphoneActivity extends LinphoneGenericActivity
}
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 =
getPackageManager()
.checkPermission(
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"));
for (String permissionToHave : permissionsToHave) {
if (!checkPermission(permissionToHave)) {
permissionsToAskFor.add(permissionToHave);
}
}
if (readExternalStorage != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.shouldShowRequestPermissionRationale(
this, Manifest.permission.READ_EXTERNAL_STORAGE);
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);
if (permissionsToAskFor.size() > 0) {
String[] permissions = new String[permissionsToAskFor.size()];
permissions = permissionsToAskFor.toArray(permissions);
ActivityCompat.requestPermissions(this, permissions, 0);
}
}
@ -1239,6 +1222,16 @@ public class LinphoneActivity extends LinphoneGenericActivity
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) {
int permissionGranted = getPackageManager().checkPermission(permission, getPackageName());
Log.i(
@ -1249,8 +1242,7 @@ public class LinphoneActivity extends LinphoneGenericActivity
? "granted"
: "denied"));
if (permissionGranted != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.shouldShowRequestPermissionRationale(this, permission);
if (!checkPermission(permission)) {
Log.i("[Permission] Asking for " + permission);
ActivityCompat.requestPermissions(this, new String[] {permission}, result);
}
@ -1306,88 +1298,38 @@ public class LinphoneActivity extends LinphoneGenericActivity
@Override
protected void onStart() {
super.onStart();
ArrayList<String> permissionsList = new ArrayList<>();
ArrayList<String> permissionsToAskFor = new ArrayList<>();
String[] permissionsToHave = {
// This one is to allow floating notifications
permissionsList.add(Manifest.permission.SYSTEM_ALERT_WINDOW);
// Manifest.permission.FOREGROUND_SERVICE,
// required starting Android 9 to be able
// to start a foreground service
permissionsList.add("android.permission.FOREGROUND_SERVICE");
Manifest.permission.SYSTEM_ALERT_WINDOW,
// Required starting Android 9 to be able to start a foreground service
"android.permission.FOREGROUND_SERVICE",
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.WRITE_CONTACTS,
Manifest.permission.READ_CONTACTS
};
int contacts =
getPackageManager()
.checkPermission(Manifest.permission.READ_CONTACTS, getPackageName());
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);
for (String permissionToHave : permissionsToHave) {
if (!checkPermission(permissionToHave)) {
permissionsToAskFor.add(permissionToHave);
}
}
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) {
String[] permissions = new String[permissionsList.size()];
permissions = permissionsList.toArray(permissions);
if (permissionsToAskFor.size() > 0) {
for (String permission : permissionsToAskFor) {
Log.i("[Permission] Asking for " + permission + " permission");
}
String[] permissions = new String[permissionsToAskFor.size()];
permissions = permissionsToAskFor.toArray(permissions);
ActivityCompat.requestPermissions(
this, permissions, PERMISSIONS_READ_EXTERNAL_STORAGE_DEVICE_RINGTONE);
}
if (checkPermission(Manifest.permission.READ_CONTACTS)) {
ContactsManager.getInstance().enableContactsAccess();
}
ContactsManager.getInstance().initializeContactManager(this);
if (DeviceUtils.isAppUserRestricted(this)) {

View file

@ -386,13 +386,10 @@ public class AssistantActivity extends ThemableActivity
: "denied"));
if (permissionGranted != PackageManager.PERMISSION_GRANTED) {
if (LinphonePreferences.instance().firstTimeAskingForPermission(permission)
|| ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) {
Log.i("[Permission] Asking for " + permission);
ActivityCompat.requestPermissions(this, new String[] {permission}, result);
}
}
}
@Override
public void onRequestPermissionsResult(

View file

@ -501,13 +501,10 @@ public class CallActivity extends LinphoneGenericActivity
: "denied"));
if (permissionGranted != PackageManager.PERMISSION_GRANTED) {
if (LinphonePreferences.instance().firstTimeAskingForPermission(permission)
|| ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) {
Log.i("[Permission] Asking for " + permission);
ActivityCompat.requestPermissions(this, new String[] {permission}, result);
}
}
}
@Override
public void onRequestPermissionsResult(

View file

@ -279,26 +279,16 @@ public class CallIncomingActivity extends LinphoneGenericActivity {
+ (camera == PackageManager.PERMISSION_GRANTED ? "granted" : "denied"));
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");
permissionsList.add(Manifest.permission.RECORD_AUDIO);
}
}
if (LinphonePreferences.instance().shouldInitiateVideoCall()
|| LinphonePreferences.instance().shouldAutomaticallyAcceptVideoRequests()) {
if (camera != PackageManager.PERMISSION_GRANTED) {
if (LinphonePreferences.instance()
.firstTimeAskingForPermission(Manifest.permission.CAMERA)
|| 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()];

View file

@ -269,26 +269,16 @@ public class CallOutgoingActivity extends LinphoneGenericActivity implements OnC
+ (camera == PackageManager.PERMISSION_GRANTED ? "granted" : "denied"));
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");
permissionsList.add(Manifest.permission.RECORD_AUDIO);
}
}
if (LinphonePreferences.instance().shouldInitiateVideoCall()
|| LinphonePreferences.instance().shouldAutomaticallyAcceptVideoRequests()) {
if (camera != PackageManager.PERMISSION_GRANTED) {
if (LinphonePreferences.instance()
.firstTimeAskingForPermission(Manifest.permission.CAMERA)
|| 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()];

View file

@ -38,7 +38,6 @@ import org.linphone.core.Config;
import org.linphone.core.Core;
import org.linphone.core.CoreException;
import org.linphone.core.Factory;
import org.linphone.core.LimeState;
import org.linphone.core.MediaEncryption;
import org.linphone.core.NatPolicy;
import org.linphone.core.ProxyConfig;
@ -1334,32 +1333,6 @@ public class LinphonePreferences {
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() {
int readExternalStorage =
mContext.getPackageManager()

View file

@ -385,7 +385,7 @@
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:text="@string/maybe_later"
android:textColor="@drawable/assistant_button_text_color"
android:textColor="?attr/primaryTextColor"
android:visibility="gone" />
</LinearLayout>

View file

@ -320,7 +320,7 @@
android:id="@+id/assistant_skip"
android:visibility="gone"
android:text="@string/maybe_later"
android:textColor="@drawable/assistant_button_text_color"
android:textColor="?attr/primaryTextColor"
style="@style/font10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"