Now uses glide for notification
Cette révision appartient à :
Parent
4975787afa
révision
414b8c9f21
10 fichiers modifiés avec 29 ajouts et 89 suppressions
|
@ -47,8 +47,6 @@ class DownloadManager(
|
|||
private val threadsSubject = BehaviorSubject.create<Int>()
|
||||
private var threadsSubscription: Subscription? = null
|
||||
|
||||
private var notificationSubscription: Subscription? = null
|
||||
|
||||
val queue = DownloadQueue()
|
||||
|
||||
val imageFilenameRegex = "[^\\sa-zA-Z0-9.-]".toRegex()
|
||||
|
@ -68,12 +66,6 @@ class DownloadManager(
|
|||
downloadNotifier.multipleDownloadThreads = it > 1
|
||||
}
|
||||
|
||||
notificationSubscription = preferences.showMangaDownloadNotification().asObservable()
|
||||
.subscribe {
|
||||
downloadNotifier.onClear()
|
||||
downloadNotifier.showNotification = it
|
||||
}
|
||||
|
||||
downloadsSubscription = downloadsQueueSubject.flatMap { Observable.from(it) }
|
||||
.lift(DynamicConcurrentMergeOperator<Download, Download>({ downloadChapter(it) }, threadsSubject))
|
||||
.onBackpressureBuffer()
|
||||
|
@ -115,10 +107,6 @@ class DownloadManager(
|
|||
threadsSubscription?.unsubscribe()
|
||||
}
|
||||
|
||||
if (notificationSubscription != null) {
|
||||
notificationSubscription?.unsubscribe()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Create a download object for every chapter and add them to the downloads queue
|
||||
|
|
|
@ -1,10 +1,13 @@
|
|||
package eu.kanade.tachiyomi.data.download
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Bitmap
|
||||
import android.support.v4.app.NotificationCompat
|
||||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.request.animation.GlideAnimation
|
||||
import com.bumptech.glide.request.target.SimpleTarget
|
||||
import eu.kanade.tachiyomi.Constants
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.util.decodeSampledBitmap
|
||||
import eu.kanade.tachiyomi.util.notificationManager
|
||||
import java.io.File
|
||||
|
||||
|
@ -61,8 +64,27 @@ class ImageNotifier(private val context: Context) {
|
|||
}
|
||||
setContentTitle(context.getString(R.string.picture_saved))
|
||||
setSmallIcon(R.drawable.ic_insert_photo_black_24dp)
|
||||
setLargeIcon(file.decodeSampledBitmap(100, 100))
|
||||
setStyle(NotificationCompat.BigPictureStyle().bigPicture(file.decodeSampledBitmap(1024, 1024)))
|
||||
Glide.with(context).load(file).asBitmap().into(object : SimpleTarget<Bitmap>(100, 100) {
|
||||
/**
|
||||
* The method that will be called when the resource load has finished.
|
||||
* @param resource the loaded resource.
|
||||
*/
|
||||
override fun onResourceReady(resource: Bitmap?, glideAnimation: GlideAnimation<in Bitmap>?) {
|
||||
setLargeIcon(resource)
|
||||
context.notificationManager.notify(notificationId, notificationBuilder.build())
|
||||
}
|
||||
})
|
||||
Glide.with(context).load(file).asBitmap().into(object : SimpleTarget<Bitmap>(512, 384) {
|
||||
/**
|
||||
* The method that will be called when the resource load has finished.
|
||||
* @param resource the loaded resource.
|
||||
*/
|
||||
override fun onResourceReady(resource: Bitmap?, glideAnimation: GlideAnimation<in Bitmap>?) {
|
||||
setStyle(NotificationCompat.BigPictureStyle().bigPicture(resource))
|
||||
context.notificationManager.notify(notificationId, notificationBuilder.build())
|
||||
}
|
||||
})
|
||||
|
||||
setAutoCancel(true)
|
||||
|
||||
// Clear old actions if they exist
|
||||
|
|
|
@ -72,10 +72,6 @@ class PreferenceKeys(context: Context) {
|
|||
|
||||
val removeAfterMarkedAsRead = context.getString(R.string.pref_remove_after_marked_as_read_key)
|
||||
|
||||
val showMangaDownloadNotification = context.getString(R.string.pref_notifications_manga_download_key)
|
||||
|
||||
val showSavePageNotification = context.getString(R.string.pref_notifications_single_page_key)
|
||||
|
||||
val libraryUpdateInterval = context.getString(R.string.pref_library_update_interval_key)
|
||||
|
||||
val libraryUpdateRestriction = context.getString(R.string.pref_library_update_restriction_key)
|
||||
|
|
|
@ -122,10 +122,6 @@ class PreferencesHelper(context: Context) {
|
|||
|
||||
fun removeAfterMarkedAsRead() = prefs.getBoolean(keys.removeAfterMarkedAsRead, false)
|
||||
|
||||
fun showMangaDownloadNotification() = rxPrefs.getBoolean(keys.showMangaDownloadNotification, true)
|
||||
|
||||
fun showSavePageNotification() = prefs.getBoolean(keys.showSavePageNotification, false)
|
||||
|
||||
fun libraryUpdateInterval() = rxPrefs.getInteger(keys.libraryUpdateInterval, 0)
|
||||
|
||||
fun libraryUpdateRestriction() = prefs.getStringSet(keys.libraryUpdateRestriction, emptySet())
|
||||
|
|
|
@ -610,10 +610,7 @@ class ReaderPresenter : BasePresenter<ReaderActivity>() {
|
|||
|
||||
//Check if file doesn't already exist
|
||||
if (destFile.exists()) {
|
||||
if (prefs.showSavePageNotification())
|
||||
imageNotifier.onComplete(destFile)
|
||||
else
|
||||
context.toast(context.getString(R.string.page_downloaded, destFile.path))
|
||||
} else {
|
||||
if (inputFile.exists()) {
|
||||
// Copy file
|
||||
|
@ -624,10 +621,7 @@ class ReaderPresenter : BasePresenter<ReaderActivity>() {
|
|||
{ imageNotifier.onComplete(it) },
|
||||
{ error ->
|
||||
Timber.e(error.message)
|
||||
if (prefs.showSavePageNotification())
|
||||
imageNotifier.onError(error.message)
|
||||
else
|
||||
context.toast(error.message)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,40 +0,0 @@
|
|||
package eu.kanade.tachiyomi.util
|
||||
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.BitmapFactory
|
||||
import java.io.File
|
||||
|
||||
fun File.decodeSampledBitmap(reqWidth: Int, reqHeight: Int): Bitmap {
|
||||
// First decode with inJustDecodeBounds=true to check dimensions
|
||||
val options = BitmapFactory.Options()
|
||||
options.inJustDecodeBounds = true
|
||||
BitmapFactory.decodeFile(this.absolutePath, options)
|
||||
|
||||
// Calculate inSampleSize
|
||||
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight)
|
||||
|
||||
// Decode bitmap with inSampleSize set
|
||||
options.inJustDecodeBounds = false;
|
||||
return BitmapFactory.decodeFile(this.absolutePath, options)
|
||||
}
|
||||
|
||||
fun calculateInSampleSize(options: BitmapFactory.Options, reqWidth: Int, reqHeight: Int): Int {
|
||||
// Raw height and width of image
|
||||
val height = options.outHeight
|
||||
val width = options.outWidth
|
||||
var inSampleSize = 1
|
||||
|
||||
if (height > reqHeight || width > reqWidth) {
|
||||
|
||||
val halfHeight = height / 2
|
||||
val halfWidth = width / 2
|
||||
|
||||
// Calculate the largest inSampleSize value that is a power of 2 and keeps both
|
||||
// height and width larger than the requested height and width.
|
||||
while (halfHeight / inSampleSize >= reqHeight && halfWidth / inSampleSize >= reqWidth) {
|
||||
inSampleSize *= 2
|
||||
}
|
||||
}
|
||||
|
||||
return inSampleSize
|
||||
}
|
|
@ -176,8 +176,8 @@
|
|||
|
||||
<string-array name="reader_image_options">
|
||||
<item>@string/set_as_cover</item>
|
||||
<item>@string/share_image</item>
|
||||
<item>@string/save_image</item>
|
||||
<item>@string/action_share</item>
|
||||
<item>@string/action_save</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="reader_image_options_values">
|
||||
|
|
|
@ -59,6 +59,7 @@
|
|||
<string name="action_sort">Sort</string>
|
||||
<string name="action_install">Install</string>
|
||||
<string name="action_share">Share</string>
|
||||
<string name="action_save">Save</string>
|
||||
|
||||
<!-- Operations -->
|
||||
<string name="deleting">Deleting…</string>
|
||||
|
@ -282,8 +283,6 @@
|
|||
<!-- Reader activity -->
|
||||
<string name="custom_filter">Custom filter</string>
|
||||
<string name="set_as_cover">Set as cover</string>
|
||||
<string name="share_image">Share image</string>
|
||||
<string name="save_image">Save image</string>
|
||||
<string name="cover_updated">Cover updated</string>
|
||||
<string name="page_downloaded">Page copied to %1$s</string>
|
||||
<string name="downloading">Downloading…</string>
|
||||
|
|
|
@ -40,21 +40,6 @@
|
|||
android:summary="%s"
|
||||
android:title="@string/pref_remove_after_read" />
|
||||
|
||||
<PreferenceCategory
|
||||
android:persistent="false"
|
||||
android:title="@string/pref_notifications" />
|
||||
|
||||
<SwitchPreference
|
||||
android:defaultValue="true"
|
||||
android:key="@string/pref_notifications_manga_download_key"
|
||||
android:title="@string/pref_notifications_manga_download" />
|
||||
|
||||
<SwitchPreference
|
||||
android:defaultValue="false"
|
||||
android:key="@string/pref_notifications_single_page_key"
|
||||
android:title="@string/pref_notifications_single_page" />
|
||||
|
||||
|
||||
</PreferenceScreen>
|
||||
|
||||
</PreferenceScreen>
|
|
@ -18,4 +18,4 @@ allprojects {
|
|||
jcenter()
|
||||
maven { url "https://jitpack.io" }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Référencer dans un nouveau ticket