Skip to content

Commit

Permalink
Fix notifications in Android 13 (#227)
Browse files Browse the repository at this point in the history
* Add POST_NOTIFICATIONS permission to manifest

* Update to use latest Android 13 notification api

* Update versionCode and versionName
  • Loading branch information
slavick committed Mar 25, 2023
1 parent e8cd1de commit 07a2678
Show file tree
Hide file tree
Showing 6 changed files with 81 additions and 13 deletions.
4 changes: 2 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ android {
multiDexEnabled true
targetSdkVersion 33
vectorDrawables.useSupportLibrary = true
versionCode 82
versionName "22"
versionCode 83
versionName "22.1"
}
buildTypes {
debug {
Expand Down
1 change: 1 addition & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
android:installLocation="auto">

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="29" tools:ignore="ScopedStorage"/>
<uses-permission android:name="com.google.android.gms.permission.AD_ID" tools:node="remove"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,15 @@
import android.view.View;
import android.widget.TimePicker;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;

import org.greenrobot.eventbus.Subscribe;
import org.nutritionfacts.dailydozen.adapter.DailyReminderAdapter;
import org.nutritionfacts.dailydozen.controller.Bus;
import org.nutritionfacts.dailydozen.controller.PermissionController;
import org.nutritionfacts.dailydozen.controller.Prefs;
import org.nutritionfacts.dailydozen.databinding.ActivityNotificationSettingsBinding;
import org.nutritionfacts.dailydozen.event.ReminderRemovedEvent;
Expand Down Expand Up @@ -50,9 +52,24 @@ private void init() {
onDailyReminderSwitchToggled();
onAddReminderClicked();

updateReminderPref = Prefs.getInstance(this).getUpdateReminderPref();
if (PermissionController.canPostNotifications(this)) {
updateReminderPref = Prefs.getInstance(this).getUpdateReminderPref();

if (updateReminderPref != null) {
if (updateReminderPref != null) {
initUpdateReminderPrefConfig();
} else {
disableUpdateReminderPref();
}
} else {
PermissionController.askForPostNotifications(this);
}
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);

if (PermissionController.grantedPostNotifications(requestCode, grantResults)) {
initUpdateReminderPrefConfig();
} else {
disableUpdateReminderPref();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,13 @@
import android.widget.AdapterView;
import android.widget.ArrayAdapter;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import org.nutritionfacts.dailydozen.Common;
import org.nutritionfacts.dailydozen.R;
import org.nutritionfacts.dailydozen.controller.PermissionController;
import org.nutritionfacts.dailydozen.databinding.ActivityDebugBinding;
import org.nutritionfacts.dailydozen.task.GenerateDataTask;
import org.nutritionfacts.dailydozen.task.ProgressListener;
Expand Down Expand Up @@ -116,7 +118,28 @@ public void onNothingSelected(AdapterView<?> parent) {
}

public void onShowNotificationClicked() {
binding.debugShowNotification.setOnClickListener(v -> NotificationUtil.showUpdateReminderNotification(DebugActivity.this, null));
binding.debugShowNotification.setOnClickListener(v -> {
Timber.d("onShowNotificationClicked");
if (PermissionController.canPostNotifications(this)) {
Timber.d("canPostNotifications = [true]");
NotificationUtil.showUpdateReminderNotification(this, null);
} else {
Timber.d("canPostNotifications = [false]");
PermissionController.askForPostNotifications(this);
}
});
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);

if (PermissionController.grantedPostNotifications(requestCode, grantResults)) {
Timber.d("onRequestPermissionsResult = [true]");
NotificationUtil.showUpdateReminderNotification(this, null);
} else {
Timber.d("onRequestPermissionsResult = [false]");
}
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,34 @@

import android.Manifest;
import android.app.Activity;
import android.app.NotificationChannel;
import android.content.pm.PackageManager;
import android.os.Build;

import androidx.core.app.ActivityCompat;
import androidx.core.app.NotificationManagerCompat;
import androidx.core.content.ContextCompat;

import org.nutritionfacts.dailydozen.util.NotificationUtil;

import timber.log.Timber;

public class PermissionController {
private static final int WRITE_EXTERNAL_STORAGE_REQUEST = 1;
private static final int POST_NOTIFICATIONS_REQUEST = 2;

public static boolean canPostNotifications(final Activity activity) {
boolean areNotificationsEnabled = NotificationManagerCompat.from(activity).areNotificationsEnabled();
Timber.d("NotificationManager.areNotificationsEnabled() = %s", areNotificationsEnabled);
if (areNotificationsEnabled) {
NotificationChannel channel = NotificationManagerCompat.from(activity).getNotificationChannel(NotificationUtil.CHANNEL_REMINDERS);
if (channel != null) {
Timber.d("channel.getImportance() = %s", channel.getImportance());
return channel.getImportance() != NotificationManagerCompat.IMPORTANCE_NONE;
}
}
return false;
}

public static boolean canWriteExternalStorage(final Activity activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
Expand All @@ -18,20 +38,27 @@ public static boolean canWriteExternalStorage(final Activity activity) {
return true;
}

public static void askForPostNotifications(final Activity activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
ActivityCompat.requestPermissions(
activity,
new String[]{Manifest.permission.POST_NOTIFICATIONS},
POST_NOTIFICATIONS_REQUEST);
}
}

public static void askForWriteExternalStorage(final Activity activity) {
ActivityCompat.requestPermissions(
activity,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
WRITE_EXTERNAL_STORAGE_REQUEST);
}

public static boolean grantedWriteExternalStorage(int requestCode, int[] grantResults) {
boolean permissionGranted = false;

if (requestCode == WRITE_EXTERNAL_STORAGE_REQUEST) {
permissionGranted = grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED;
}
public static boolean grantedPostNotifications(int requestCode, int[] grantResults) {
return requestCode == POST_NOTIFICATIONS_REQUEST && grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED;
}

return permissionGranted;
public static boolean grantedWriteExternalStorage(int requestCode, int[] grantResults) {
return requestCode == WRITE_EXTERNAL_STORAGE_REQUEST && grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public class NotificationUtil {
private static final int UPDATE_REMINDER_ID = 1;
private static final int NOTIFICATION_SETTINGS_ID = 2;

private static final String CHANNEL_REMINDERS = "DAILY_DOZEN_REMINDERS_CHANNEL";
public static final String CHANNEL_REMINDERS = "DAILY_DOZEN_REMINDERS_CHANNEL";

public static void showUpdateReminderNotification(final Context context, Intent intent) {
final NotificationCompat.Builder builder = new NotificationCompat.Builder(context, CHANNEL_REMINDERS)
Expand Down

0 comments on commit 07a2678

Please sign in to comment.