39 lines
1.8 KiB
Java
39 lines
1.8 KiB
Java
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;
|
|
}
|
|
}
|