Skip to content

Commit

Permalink
Add runtime permission checks for contact writing
Browse files Browse the repository at this point in the history
  • Loading branch information
sealor committed Sep 22, 2023
1 parent 7bd4842 commit a69decd
Showing 1 changed file with 45 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,14 @@
import java.util.LinkedHashMap;
import java.util.Map;

import android.Manifest;
import android.accounts.AccountManager;
import android.accounts.AuthenticatorDescription;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
Expand All @@ -19,6 +22,10 @@
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;

import de.ubuntix.android.birthdayreminder.database.Database;
import de.ubuntix.android.birthdayreminder.model.Contact;
import de.ubuntix.android.birthdayreminder.model.DateOfBirth;
Expand All @@ -28,6 +35,9 @@
import de.ubuntix.android.birthdayreminder.view.adapter.MultiListAdapter;

public class BirthdayEditor extends Activity implements OnItemClickListener {

private static final int PERMISSIONS_REQUEST_WRITE_CONTACTS = 2;

private static final int CREATE_BIRTHDAY = 0;
private static final int EDIT_BIRTHDAY = 1;
private static final int DELETE_BIRTHDAY = 2;
Expand Down Expand Up @@ -72,8 +82,40 @@ protected void onCreate(Bundle savedInstanceState) {
this.list.setOnItemClickListener(this);
this.list.setOnCreateContextMenuListener(this);

// create the GUI
updateView();
// request runtime permission
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!isContactsPermissionGranted()) {
requestPermissions(new String[]{Manifest.permission.WRITE_CONTACTS}, PERMISSIONS_REQUEST_WRITE_CONTACTS);
}
}
}

private boolean isContactsPermissionGranted() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
return true;
}

return checkSelfPermission(Manifest.permission.WRITE_CONTACTS) == PackageManager.PERMISSION_GRANTED;
}

@Override
protected void onResume() {
super.onResume();

if (isContactsPermissionGranted()) {
updateView();
}
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == PERMISSIONS_REQUEST_WRITE_CONTACTS) {
if (isContactsPermissionGranted()) {
updateView();
} else {
Toast.makeText(this, R.string.no_contacts_permission, Toast.LENGTH_LONG).show();
}
}
}

private void updateView() {
Expand All @@ -91,7 +133,7 @@ private void updateView() {

accountIcon = accountRes.getDrawable(authDesc.iconId);
accountType = accountRes.getString(authDesc.labelId);
} catch (Exception e) {
} catch (Exception ignored) {
}

AccountDatesOfBirthAdapter accountAdapter = new AccountDatesOfBirthAdapter(this, new NewDateOfBirthAction(
Expand Down

0 comments on commit a69decd

Please sign in to comment.