From ada34012322a9455860a763465954a4f4f48fc70 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Wed, 20 Mar 2019 15:10:53 +0100 Subject: [PATCH] Improvements over permission code --- .../java/org/linphone/LinphoneActivity.java | 152 ++++++------------ .../linphone/assistant/AssistantActivity.java | 7 +- .../java/org/linphone/call/CallActivity.java | 7 +- .../linphone/call/CallIncomingActivity.java | 18 +-- .../linphone/call/CallOutgoingActivity.java | 18 +-- .../settings/LinphonePreferences.java | 27 ---- .../assistant_account_creation.xml | 2 +- .../res/layout/assistant_account_creation.xml | 2 +- 8 files changed, 61 insertions(+), 172 deletions(-) diff --git a/app/src/main/java/org/linphone/LinphoneActivity.java b/app/src/main/java/org/linphone/LinphoneActivity.java index 45b0ac03f..3cee94457 100644 --- a/app/src/main/java/org/linphone/LinphoneActivity.java +++ b/app/src/main/java/org/linphone/LinphoneActivity.java @@ -1199,37 +1199,20 @@ public class LinphoneActivity extends LinphoneGenericActivity } public void checkAndRequestPermissionsToSendImage() { - ArrayList permissionsList = new ArrayList<>(); + ArrayList 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 permissionsList = new ArrayList<>(); - // 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"); - int contacts = - getPackageManager() - .checkPermission(Manifest.permission.READ_CONTACTS, getPackageName()); - Log.i( - "[Permission] Contacts read permission is " - + (contacts == PackageManager.PERMISSION_GRANTED ? "granted" : "denied")); + ArrayList permissionsToAskFor = new ArrayList<>(); + String[] permissionsToHave = { + // This one is to allow floating notifications + 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 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)) { diff --git a/app/src/main/java/org/linphone/assistant/AssistantActivity.java b/app/src/main/java/org/linphone/assistant/AssistantActivity.java index 864e4ae58..fc60bf399 100644 --- a/app/src/main/java/org/linphone/assistant/AssistantActivity.java +++ b/app/src/main/java/org/linphone/assistant/AssistantActivity.java @@ -386,11 +386,8 @@ 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); - } + Log.i("[Permission] Asking for " + permission); + ActivityCompat.requestPermissions(this, new String[] {permission}, result); } } diff --git a/app/src/main/java/org/linphone/call/CallActivity.java b/app/src/main/java/org/linphone/call/CallActivity.java index 8c98898f5..b1c0f485a 100644 --- a/app/src/main/java/org/linphone/call/CallActivity.java +++ b/app/src/main/java/org/linphone/call/CallActivity.java @@ -501,11 +501,8 @@ 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); - } + Log.i("[Permission] Asking for " + permission); + ActivityCompat.requestPermissions(this, new String[] {permission}, result); } } diff --git a/app/src/main/java/org/linphone/call/CallIncomingActivity.java b/app/src/main/java/org/linphone/call/CallIncomingActivity.java index ae6f83bc6..1d01b614e 100644 --- a/app/src/main/java/org/linphone/call/CallIncomingActivity.java +++ b/app/src/main/java/org/linphone/call/CallIncomingActivity.java @@ -279,24 +279,14 @@ 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); - } + 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); - } + Log.i("[Permission] Asking for camera"); + permissionsList.add(Manifest.permission.CAMERA); } } diff --git a/app/src/main/java/org/linphone/call/CallOutgoingActivity.java b/app/src/main/java/org/linphone/call/CallOutgoingActivity.java index 398e4bfdb..0941cab18 100644 --- a/app/src/main/java/org/linphone/call/CallOutgoingActivity.java +++ b/app/src/main/java/org/linphone/call/CallOutgoingActivity.java @@ -269,24 +269,14 @@ 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); - } + 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); - } + Log.i("[Permission] Asking for camera"); + permissionsList.add(Manifest.permission.CAMERA); } } diff --git a/app/src/main/java/org/linphone/settings/LinphonePreferences.java b/app/src/main/java/org/linphone/settings/LinphonePreferences.java index 15b73f40e..51c832131 100644 --- a/app/src/main/java/org/linphone/settings/LinphonePreferences.java +++ b/app/src/main/java/org/linphone/settings/LinphonePreferences.java @@ -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() diff --git a/app/src/main/res/layout-sw533dp-land/assistant_account_creation.xml b/app/src/main/res/layout-sw533dp-land/assistant_account_creation.xml index ed811f148..b667e7a1a 100644 --- a/app/src/main/res/layout-sw533dp-land/assistant_account_creation.xml +++ b/app/src/main/res/layout-sw533dp-land/assistant_account_creation.xml @@ -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" /> diff --git a/app/src/main/res/layout/assistant_account_creation.xml b/app/src/main/res/layout/assistant_account_creation.xml index 33c412d23..61f416bc2 100644 --- a/app/src/main/res/layout/assistant_account_creation.xml +++ b/app/src/main/res/layout/assistant_account_creation.xml @@ -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"