Skip to content

Commit

Permalink
Move Termux app specific logic out of NotificationUtils
Browse files Browse the repository at this point in the history
  • Loading branch information
agnostic-apollo committed Jun 30, 2021
1 parent 553913c commit 1c7f916
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 34 deletions.
3 changes: 2 additions & 1 deletion app/src/main/java/com/termux/app/utils/CrashUtils.java
Expand Up @@ -15,6 +15,7 @@
import com.termux.shared.file.FileUtils;
import com.termux.shared.models.ReportInfo;
import com.termux.app.models.UserAction;
import com.termux.shared.notification.TermuxNotificationUtils;
import com.termux.shared.settings.preferences.TermuxAppSharedPreferences;
import com.termux.shared.settings.preferences.TermuxPreferenceConstants;
import com.termux.shared.data.DataUtils;
Expand Down Expand Up @@ -131,7 +132,7 @@ public static void sendCrashReportNotification(final Context context, String log
if (builder == null) return;

// Send the notification
int nextNotificationId = NotificationUtils.getNextNotificationId(context);
int nextNotificationId = TermuxNotificationUtils.getNextNotificationId(context);
NotificationManager notificationManager = NotificationUtils.getNotificationManager(context);
if (notificationManager != null)
notificationManager.notify(nextNotificationId, builder.build());
Expand Down
3 changes: 2 additions & 1 deletion app/src/main/java/com/termux/app/utils/PluginUtils.java
Expand Up @@ -16,6 +16,7 @@
import com.termux.shared.models.errors.Errno;
import com.termux.shared.models.errors.Error;
import com.termux.shared.notification.NotificationUtils;
import com.termux.shared.notification.TermuxNotificationUtils;
import com.termux.shared.shell.ResultSender;
import com.termux.shared.shell.ShellUtils;
import com.termux.shared.termux.AndroidUtils;
Expand Down Expand Up @@ -233,7 +234,7 @@ public static void sendPluginCommandErrorNotification(Context context, String lo
if (builder == null) return;

// Send the notification
int nextNotificationId = NotificationUtils.getNextNotificationId(context);
int nextNotificationId = TermuxNotificationUtils.getNextNotificationId(context);
NotificationManager notificationManager = NotificationUtils.getNotificationManager(context);
if (notificationManager != null)
notificationManager.notify(nextNotificationId, builder.build());
Expand Down
Expand Up @@ -10,9 +10,6 @@
import androidx.annotation.Nullable;

import com.termux.shared.logger.Logger;
import com.termux.shared.settings.preferences.TermuxAppSharedPreferences;
import com.termux.shared.settings.preferences.TermuxPreferenceConstants;
import com.termux.shared.termux.TermuxConstants;

public class NotificationUtils {

Expand Down Expand Up @@ -49,35 +46,6 @@ public static NotificationManager getNotificationManager(final Context context)
return (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
}

/**
* Try to get the next unique notification id that isn't already being used by the app.
*
* Termux app and its plugin must use unique notification ids from the same pool due to usage of android:sharedUserId.
* https://commonsware.com/blog/2017/06/07/jobscheduler-job-ids-libraries.html
*
* @param context The {@link Context} for operations.
* @return Returns the notification id that should be safe to use.
*/
public synchronized static int getNextNotificationId(final Context context) {
if (context == null) return TermuxPreferenceConstants.TERMUX_APP.DEFAULT_VALUE_KEY_LAST_NOTIFICATION_ID;

TermuxAppSharedPreferences preferences = TermuxAppSharedPreferences.build(context);
if (preferences == null) return TermuxPreferenceConstants.TERMUX_APP.DEFAULT_VALUE_KEY_LAST_NOTIFICATION_ID;

int lastNotificationId = preferences.getLastNotificationId();

int nextNotificationId = lastNotificationId + 1;
while(nextNotificationId == TermuxConstants.TERMUX_APP_NOTIFICATION_ID || nextNotificationId == TermuxConstants.TERMUX_RUN_COMMAND_NOTIFICATION_ID) {
nextNotificationId++;
}

if (nextNotificationId == Integer.MAX_VALUE || nextNotificationId < 0)
nextNotificationId = TermuxPreferenceConstants.TERMUX_APP.DEFAULT_VALUE_KEY_LAST_NOTIFICATION_ID;

preferences.setLastNotificationId(nextNotificationId);
return nextNotificationId;
}

/**
* Get {@link Notification.Builder}.
*
Expand Down
@@ -0,0 +1,38 @@
package com.termux.shared.notification;

import android.content.Context;

import com.termux.shared.settings.preferences.TermuxAppSharedPreferences;
import com.termux.shared.settings.preferences.TermuxPreferenceConstants;
import com.termux.shared.termux.TermuxConstants;

public class TermuxNotificationUtils {
/**
* Try to get the next unique notification id that isn't already being used by the app.
*
* Termux app and its plugin must use unique notification ids from the same pool due to usage of android:sharedUserId.
* https://commonsware.com/blog/2017/06/07/jobscheduler-job-ids-libraries.html
*
* @param context The {@link Context} for operations.
* @return Returns the notification id that should be safe to use.
*/
public synchronized static int getNextNotificationId(final Context context) {
if (context == null) return TermuxPreferenceConstants.TERMUX_APP.DEFAULT_VALUE_KEY_LAST_NOTIFICATION_ID;

TermuxAppSharedPreferences preferences = TermuxAppSharedPreferences.build(context);
if (preferences == null) return TermuxPreferenceConstants.TERMUX_APP.DEFAULT_VALUE_KEY_LAST_NOTIFICATION_ID;

int lastNotificationId = preferences.getLastNotificationId();

int nextNotificationId = lastNotificationId + 1;
while(nextNotificationId == TermuxConstants.TERMUX_APP_NOTIFICATION_ID || nextNotificationId == TermuxConstants.TERMUX_RUN_COMMAND_NOTIFICATION_ID) {
nextNotificationId++;
}

if (nextNotificationId == Integer.MAX_VALUE || nextNotificationId < 0)
nextNotificationId = TermuxPreferenceConstants.TERMUX_APP.DEFAULT_VALUE_KEY_LAST_NOTIFICATION_ID;

preferences.setLastNotificationId(nextNotificationId);
return nextNotificationId;
}
}

0 comments on commit 1c7f916

Please sign in to comment.