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() { 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<>();
// 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 = ArrayList<String> permissionsToAskFor = new ArrayList<>();
getPackageManager() String[] permissionsToHave = {
.checkPermission(Manifest.permission.READ_CONTACTS, getPackageName()); // This one is to allow floating notifications
Log.i( Manifest.permission.SYSTEM_ALERT_WINDOW,
"[Permission] Contacts read permission is " // Required starting Android 9 to be able to start a foreground service
+ (contacts == PackageManager.PERMISSION_GRANTED ? "granted" : "denied")); "android.permission.FOREGROUND_SERVICE",
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.WRITE_CONTACTS,
Manifest.permission.READ_CONTACTS
};
int wcontacts = for (String permissionToHave : permissionsToHave) {
getPackageManager() if (!checkPermission(permissionToHave)) {
.checkPermission(Manifest.permission.WRITE_CONTACTS, getPackageName()); permissionsToAskFor.add(permissionToHave);
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)) {

View file

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

View file

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

View file

@ -279,24 +279,14 @@ 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() Log.i("[Permission] Asking for record audio");
.firstTimeAskingForPermission(Manifest.permission.RECORD_AUDIO) permissionsList.add(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() if (LinphonePreferences.instance().shouldInitiateVideoCall()
|| LinphonePreferences.instance().shouldAutomaticallyAcceptVideoRequests()) { || LinphonePreferences.instance().shouldAutomaticallyAcceptVideoRequests()) {
if (camera != PackageManager.PERMISSION_GRANTED) { if (camera != PackageManager.PERMISSION_GRANTED) {
if (LinphonePreferences.instance() Log.i("[Permission] Asking for camera");
.firstTimeAskingForPermission(Manifest.permission.CAMERA) permissionsList.add(Manifest.permission.CAMERA);
|| ActivityCompat.shouldShowRequestPermissionRationale(
this, Manifest.permission.CAMERA)) {
Log.i("[Permission] Asking for camera");
permissionsList.add(Manifest.permission.CAMERA);
}
} }
} }

View file

@ -269,24 +269,14 @@ 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() Log.i("[Permission] Asking for record audio");
.firstTimeAskingForPermission(Manifest.permission.RECORD_AUDIO) permissionsList.add(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() if (LinphonePreferences.instance().shouldInitiateVideoCall()
|| LinphonePreferences.instance().shouldAutomaticallyAcceptVideoRequests()) { || LinphonePreferences.instance().shouldAutomaticallyAcceptVideoRequests()) {
if (camera != PackageManager.PERMISSION_GRANTED) { if (camera != PackageManager.PERMISSION_GRANTED) {
if (LinphonePreferences.instance() Log.i("[Permission] Asking for camera");
.firstTimeAskingForPermission(Manifest.permission.CAMERA) permissionsList.add(Manifest.permission.CAMERA);
|| ActivityCompat.shouldShowRequestPermissionRationale(
this, Manifest.permission.CAMERA)) {
Log.i("[Permission] Asking for camera");
permissionsList.add(Manifest.permission.CAMERA);
}
} }
} }

View file

@ -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()

View file

@ -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>

View file

@ -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"