109 lines
3.7 KiB
Kotlin
109 lines
3.7 KiB
Kotlin
package exh.eh
|
|
|
|
import android.content.Context
|
|
import android.graphics.BitmapFactory
|
|
import android.net.Uri
|
|
import androidx.core.app.NotificationCompat
|
|
import eu.kanade.tachiyomi.R
|
|
import eu.kanade.tachiyomi.core.security.SecurityPreferences
|
|
import eu.kanade.tachiyomi.data.notification.NotificationReceiver
|
|
import eu.kanade.tachiyomi.data.notification.Notifications
|
|
import eu.kanade.tachiyomi.util.lang.chop
|
|
import eu.kanade.tachiyomi.util.system.cancelNotification
|
|
import eu.kanade.tachiyomi.util.system.notificationBuilder
|
|
import eu.kanade.tachiyomi.util.system.notify
|
|
import tachiyomi.core.common.i18n.stringResource
|
|
import tachiyomi.domain.manga.model.Manga
|
|
import tachiyomi.i18n.MR
|
|
import uy.kohesive.injekt.injectLazy
|
|
import java.math.RoundingMode
|
|
import java.text.NumberFormat
|
|
|
|
class EHentaiUpdateNotifier(private val context: Context) {
|
|
|
|
private val securityPreferences: SecurityPreferences by injectLazy()
|
|
|
|
private val percentFormatter = NumberFormat.getPercentInstance().apply {
|
|
roundingMode = RoundingMode.DOWN
|
|
maximumFractionDigits = 0
|
|
}
|
|
|
|
/**
|
|
* Bitmap of the app for notifications.
|
|
*/
|
|
private val notificationBitmap by lazy {
|
|
BitmapFactory.decodeResource(context.resources, R.mipmap.ic_launcher)
|
|
}
|
|
|
|
/**
|
|
* Cached progress notification to avoid creating a lot.
|
|
*/
|
|
val progressNotificationBuilder by lazy {
|
|
context.notificationBuilder(Notifications.CHANNEL_LIBRARY_EHENTAI) {
|
|
setContentTitle(context.stringResource(MR.strings.app_name))
|
|
setSmallIcon(R.drawable.ic_refresh_24dp)
|
|
setLargeIcon(notificationBitmap)
|
|
setOngoing(true)
|
|
setOnlyAlertOnce(true)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Shows the notification containing the currently updating manga and the progress.
|
|
*
|
|
* @param manga the manga that are being updated.
|
|
* @param current the current progress.
|
|
* @param total the total progress.
|
|
*/
|
|
fun showProgressNotification(manga: Manga, current: Int, total: Int) {
|
|
progressNotificationBuilder
|
|
.setContentTitle(
|
|
context.stringResource(
|
|
MR.strings.notification_updating_progress,
|
|
percentFormatter.format(current.toFloat() / total),
|
|
),
|
|
)
|
|
|
|
if (!securityPreferences.hideNotificationContent().get()) {
|
|
val updatingText = manga.title.chop(40)
|
|
progressNotificationBuilder.setStyle(NotificationCompat.BigTextStyle().bigText(updatingText))
|
|
}
|
|
|
|
context.notify(
|
|
Notifications.ID_EHENTAI_PROGRESS,
|
|
progressNotificationBuilder
|
|
.setProgress(total, current, false)
|
|
.build(),
|
|
)
|
|
}
|
|
|
|
/**
|
|
* Shows notification containing update entries that failed with action to open full log.
|
|
*
|
|
* @param failed Number of entries that failed to update.
|
|
* @param uri Uri for error log file containing all titles that failed.
|
|
*/
|
|
fun showUpdateErrorNotification(failed: Int, uri: Uri) {
|
|
if (failed == 0) {
|
|
return
|
|
}
|
|
|
|
context.notify(
|
|
Notifications.ID_EHENTAI_ERROR,
|
|
Notifications.CHANNEL_LIBRARY_EHENTAI,
|
|
) {
|
|
setContentTitle(context.stringResource(MR.strings.notification_update_error, failed))
|
|
setContentText(context.stringResource(MR.strings.action_show_errors))
|
|
setSmallIcon(R.drawable.ic_tachi)
|
|
|
|
setContentIntent(NotificationReceiver.openErrorLogPendingActivity(context, uri))
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Cancels the progress notification.
|
|
*/
|
|
fun cancelProgressNotification() {
|
|
context.cancelNotification(Notifications.ID_EHENTAI_PROGRESS)
|
|
}
|
|
}
|