Fix shortcuts icons size
This commit is contained in:
@@ -23,7 +23,7 @@ import javax.inject.Inject
|
|||||||
|
|
||||||
@HiltAndroidTest
|
@HiltAndroidTest
|
||||||
@RunWith(AndroidJUnit4::class)
|
@RunWith(AndroidJUnit4::class)
|
||||||
class ShortcutsUpdaterTest {
|
class AppShortcutManagerTest {
|
||||||
|
|
||||||
@get:Rule
|
@get:Rule
|
||||||
var hiltRule = HiltAndroidRule(this)
|
var hiltRule = HiltAndroidRule(this)
|
||||||
@@ -32,7 +32,7 @@ class ShortcutsUpdaterTest {
|
|||||||
lateinit var historyRepository: HistoryRepository
|
lateinit var historyRepository: HistoryRepository
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var shortcutsUpdater: ShortcutsUpdater
|
lateinit var appShortcutManager: AppShortcutManager
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var database: MangaDatabase
|
lateinit var database: MangaDatabase
|
||||||
@@ -72,6 +72,6 @@ class ShortcutsUpdaterTest {
|
|||||||
private suspend fun awaitUpdate() {
|
private suspend fun awaitUpdate() {
|
||||||
val instrumentation = InstrumentationRegistry.getInstrumentation()
|
val instrumentation = InstrumentationRegistry.getInstrumentation()
|
||||||
instrumentation.awaitForIdle()
|
instrumentation.awaitForIdle()
|
||||||
shortcutsUpdater.await()
|
appShortcutManager.await()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -30,7 +30,7 @@ import org.koitharu.kotatsu.core.cache.StubContentCache
|
|||||||
import org.koitharu.kotatsu.core.db.MangaDatabase
|
import org.koitharu.kotatsu.core.db.MangaDatabase
|
||||||
import org.koitharu.kotatsu.core.network.*
|
import org.koitharu.kotatsu.core.network.*
|
||||||
import org.koitharu.kotatsu.core.os.NetworkState
|
import org.koitharu.kotatsu.core.os.NetworkState
|
||||||
import org.koitharu.kotatsu.core.os.ShortcutsUpdater
|
import org.koitharu.kotatsu.core.os.AppShortcutManager
|
||||||
import org.koitharu.kotatsu.core.parser.MangaLoaderContextImpl
|
import org.koitharu.kotatsu.core.parser.MangaLoaderContextImpl
|
||||||
import org.koitharu.kotatsu.core.parser.MangaRepository
|
import org.koitharu.kotatsu.core.parser.MangaRepository
|
||||||
import org.koitharu.kotatsu.core.parser.favicon.FaviconFetcher
|
import org.koitharu.kotatsu.core.parser.favicon.FaviconFetcher
|
||||||
@@ -125,12 +125,12 @@ interface AppModule {
|
|||||||
@ElementsIntoSet
|
@ElementsIntoSet
|
||||||
fun provideDatabaseObservers(
|
fun provideDatabaseObservers(
|
||||||
widgetUpdater: WidgetUpdater,
|
widgetUpdater: WidgetUpdater,
|
||||||
shortcutsUpdater: ShortcutsUpdater,
|
appShortcutManager: AppShortcutManager,
|
||||||
backupObserver: BackupObserver,
|
backupObserver: BackupObserver,
|
||||||
syncController: SyncController,
|
syncController: SyncController,
|
||||||
): Set<@JvmSuppressWildcards InvalidationTracker.Observer> = arraySetOf(
|
): Set<@JvmSuppressWildcards InvalidationTracker.Observer> = arraySetOf(
|
||||||
widgetUpdater,
|
widgetUpdater,
|
||||||
shortcutsUpdater,
|
appShortcutManager,
|
||||||
backupObserver,
|
backupObserver,
|
||||||
syncController,
|
syncController,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ import androidx.core.graphics.drawable.toBitmap
|
|||||||
import androidx.room.InvalidationTracker
|
import androidx.room.InvalidationTracker
|
||||||
import coil.ImageLoader
|
import coil.ImageLoader
|
||||||
import coil.request.ImageRequest
|
import coil.request.ImageRequest
|
||||||
import coil.size.Precision
|
|
||||||
import coil.size.Scale
|
import coil.size.Scale
|
||||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
@@ -25,6 +24,7 @@ import org.koitharu.kotatsu.R
|
|||||||
import org.koitharu.kotatsu.core.db.TABLE_HISTORY
|
import org.koitharu.kotatsu.core.db.TABLE_HISTORY
|
||||||
import org.koitharu.kotatsu.core.parser.MangaDataRepository
|
import org.koitharu.kotatsu.core.parser.MangaDataRepository
|
||||||
import org.koitharu.kotatsu.core.prefs.AppSettings
|
import org.koitharu.kotatsu.core.prefs.AppSettings
|
||||||
|
import org.koitharu.kotatsu.core.ui.image.ThumbnailTransformation
|
||||||
import org.koitharu.kotatsu.core.util.ext.getDrawableOrThrow
|
import org.koitharu.kotatsu.core.util.ext.getDrawableOrThrow
|
||||||
import org.koitharu.kotatsu.core.util.ext.printStackTraceDebug
|
import org.koitharu.kotatsu.core.util.ext.printStackTraceDebug
|
||||||
import org.koitharu.kotatsu.core.util.ext.processLifecycleScope
|
import org.koitharu.kotatsu.core.util.ext.processLifecycleScope
|
||||||
@@ -36,7 +36,7 @@ import javax.inject.Inject
|
|||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
class ShortcutsUpdater @Inject constructor(
|
class AppShortcutManager @Inject constructor(
|
||||||
@ApplicationContext private val context: Context,
|
@ApplicationContext private val context: Context,
|
||||||
private val coil: ImageLoader,
|
private val coil: ImageLoader,
|
||||||
private val historyRepository: HistoryRepository,
|
private val historyRepository: HistoryRepository,
|
||||||
@@ -128,8 +128,8 @@ class ShortcutsUpdater @Inject constructor(
|
|||||||
.data(manga.coverUrl)
|
.data(manga.coverUrl)
|
||||||
.size(iconSize.width, iconSize.height)
|
.size(iconSize.width, iconSize.height)
|
||||||
.tag(manga.source)
|
.tag(manga.source)
|
||||||
.precision(Precision.EXACT)
|
|
||||||
.scale(Scale.FILL)
|
.scale(Scale.FILL)
|
||||||
|
.transformations(ThumbnailTransformation())
|
||||||
.build(),
|
.build(),
|
||||||
).getDrawableOrThrow().toBitmap()
|
).getDrawableOrThrow().toBitmap()
|
||||||
}.fold(
|
}.fold(
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package org.koitharu.kotatsu.core.ui.image
|
||||||
|
|
||||||
|
import android.graphics.Bitmap
|
||||||
|
import android.media.ThumbnailUtils
|
||||||
|
import coil.size.Size
|
||||||
|
import coil.size.pxOrElse
|
||||||
|
import coil.transform.Transformation
|
||||||
|
|
||||||
|
class ThumbnailTransformation : Transformation {
|
||||||
|
|
||||||
|
override val cacheKey: String = javaClass.name
|
||||||
|
|
||||||
|
override suspend fun transform(input: Bitmap, size: Size): Bitmap {
|
||||||
|
return ThumbnailUtils.extractThumbnail(
|
||||||
|
input,
|
||||||
|
size.width.pxOrElse { input.width },
|
||||||
|
size.height.pxOrElse { input.height },
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun equals(other: Any?) = other is ThumbnailTransformation
|
||||||
|
|
||||||
|
override fun hashCode() = javaClass.hashCode()
|
||||||
|
}
|
||||||
@@ -30,7 +30,7 @@ import kotlinx.coroutines.flow.filterNotNull
|
|||||||
import org.koitharu.kotatsu.R
|
import org.koitharu.kotatsu.R
|
||||||
import org.koitharu.kotatsu.core.exceptions.resolve.SnackbarErrorObserver
|
import org.koitharu.kotatsu.core.exceptions.resolve.SnackbarErrorObserver
|
||||||
import org.koitharu.kotatsu.core.model.parcelable.ParcelableManga
|
import org.koitharu.kotatsu.core.model.parcelable.ParcelableManga
|
||||||
import org.koitharu.kotatsu.core.os.ShortcutsUpdater
|
import org.koitharu.kotatsu.core.os.AppShortcutManager
|
||||||
import org.koitharu.kotatsu.core.parser.MangaIntent
|
import org.koitharu.kotatsu.core.parser.MangaIntent
|
||||||
import org.koitharu.kotatsu.core.ui.BaseActivity
|
import org.koitharu.kotatsu.core.ui.BaseActivity
|
||||||
import org.koitharu.kotatsu.core.ui.dialog.RecyclerViewAlertDialog
|
import org.koitharu.kotatsu.core.ui.dialog.RecyclerViewAlertDialog
|
||||||
@@ -68,7 +68,7 @@ class DetailsActivity :
|
|||||||
PopupMenu.OnMenuItemClickListener {
|
PopupMenu.OnMenuItemClickListener {
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var shortcutsUpdater: ShortcutsUpdater
|
lateinit var appShortcutManager: AppShortcutManager
|
||||||
|
|
||||||
private lateinit var viewBadge: ViewBadge
|
private lateinit var viewBadge: ViewBadge
|
||||||
private var buttonTip: WeakReference<ButtonTip>? = null
|
private var buttonTip: WeakReference<ButtonTip>? = null
|
||||||
@@ -147,7 +147,7 @@ class DetailsActivity :
|
|||||||
activity = this,
|
activity = this,
|
||||||
viewModel = viewModel,
|
viewModel = viewModel,
|
||||||
snackbarHost = viewBinding.containerChapters,
|
snackbarHost = viewBinding.containerChapters,
|
||||||
shortcutsUpdater = shortcutsUpdater,
|
appShortcutManager = appShortcutManager,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import com.google.android.material.snackbar.Snackbar
|
|||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.koitharu.kotatsu.R
|
import org.koitharu.kotatsu.R
|
||||||
import org.koitharu.kotatsu.browser.BrowserActivity
|
import org.koitharu.kotatsu.browser.BrowserActivity
|
||||||
import org.koitharu.kotatsu.core.os.ShortcutsUpdater
|
import org.koitharu.kotatsu.core.os.AppShortcutManager
|
||||||
import org.koitharu.kotatsu.core.util.ShareHelper
|
import org.koitharu.kotatsu.core.util.ShareHelper
|
||||||
import org.koitharu.kotatsu.details.ui.model.MangaBranch
|
import org.koitharu.kotatsu.details.ui.model.MangaBranch
|
||||||
import org.koitharu.kotatsu.favourites.ui.categories.select.FavouriteCategoriesSheet
|
import org.koitharu.kotatsu.favourites.ui.categories.select.FavouriteCategoriesSheet
|
||||||
@@ -29,7 +29,7 @@ class DetailsMenuProvider(
|
|||||||
private val activity: FragmentActivity,
|
private val activity: FragmentActivity,
|
||||||
private val viewModel: DetailsViewModel,
|
private val viewModel: DetailsViewModel,
|
||||||
private val snackbarHost: View,
|
private val snackbarHost: View,
|
||||||
private val shortcutsUpdater: ShortcutsUpdater,
|
private val appShortcutManager: AppShortcutManager,
|
||||||
) : MenuProvider {
|
) : MenuProvider {
|
||||||
|
|
||||||
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
|
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
|
||||||
@@ -112,7 +112,7 @@ class DetailsMenuProvider(
|
|||||||
R.id.action_shortcut -> {
|
R.id.action_shortcut -> {
|
||||||
viewModel.manga.value?.let {
|
viewModel.manga.value?.let {
|
||||||
activity.lifecycleScope.launch {
|
activity.lifecycleScope.launch {
|
||||||
if (!shortcutsUpdater.requestPinShortcut(it)) {
|
if (!appShortcutManager.requestPinShortcut(it)) {
|
||||||
Snackbar.make(snackbarHost, R.string.operation_not_supported, Snackbar.LENGTH_SHORT)
|
Snackbar.make(snackbarHost, R.string.operation_not_supported, Snackbar.LENGTH_SHORT)
|
||||||
.show()
|
.show()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ import kotlinx.coroutines.plus
|
|||||||
import org.koitharu.kotatsu.R
|
import org.koitharu.kotatsu.R
|
||||||
import org.koitharu.kotatsu.bookmarks.domain.Bookmark
|
import org.koitharu.kotatsu.bookmarks.domain.Bookmark
|
||||||
import org.koitharu.kotatsu.bookmarks.domain.BookmarksRepository
|
import org.koitharu.kotatsu.bookmarks.domain.BookmarksRepository
|
||||||
import org.koitharu.kotatsu.core.os.ShortcutsUpdater
|
import org.koitharu.kotatsu.core.os.AppShortcutManager
|
||||||
import org.koitharu.kotatsu.core.parser.MangaDataRepository
|
import org.koitharu.kotatsu.core.parser.MangaDataRepository
|
||||||
import org.koitharu.kotatsu.core.parser.MangaIntent
|
import org.koitharu.kotatsu.core.parser.MangaIntent
|
||||||
import org.koitharu.kotatsu.core.prefs.AppSettings
|
import org.koitharu.kotatsu.core.prefs.AppSettings
|
||||||
@@ -73,7 +73,7 @@ class ReaderViewModel @Inject constructor(
|
|||||||
private val pageSaveHelper: PageSaveHelper,
|
private val pageSaveHelper: PageSaveHelper,
|
||||||
private val pageLoader: PageLoader,
|
private val pageLoader: PageLoader,
|
||||||
private val chaptersLoader: ChaptersLoader,
|
private val chaptersLoader: ChaptersLoader,
|
||||||
private val shortcutsUpdater: ShortcutsUpdater,
|
private val appShortcutManager: AppShortcutManager,
|
||||||
private val doubleMangaLoadUseCase: DoubleMangaLoadUseCase,
|
private val doubleMangaLoadUseCase: DoubleMangaLoadUseCase,
|
||||||
private val historyUpdateUseCase: HistoryUpdateUseCase,
|
private val historyUpdateUseCase: HistoryUpdateUseCase,
|
||||||
private val detectReaderModeUseCase: DetectReaderModeUseCase,
|
private val detectReaderModeUseCase: DetectReaderModeUseCase,
|
||||||
@@ -155,7 +155,7 @@ class ReaderViewModel @Inject constructor(
|
|||||||
}.launchIn(viewModelScope + Dispatchers.Default)
|
}.launchIn(viewModelScope + Dispatchers.Default)
|
||||||
launchJob(Dispatchers.Default) {
|
launchJob(Dispatchers.Default) {
|
||||||
val mangaId = mangaFlow.filterNotNull().first().id
|
val mangaId = mangaFlow.filterNotNull().first().id
|
||||||
shortcutsUpdater.notifyMangaOpened(mangaId)
|
appShortcutManager.notifyMangaOpened(mangaId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ import kotlinx.coroutines.runInterruptible
|
|||||||
import okhttp3.Cache
|
import okhttp3.Cache
|
||||||
import org.koitharu.kotatsu.R
|
import org.koitharu.kotatsu.R
|
||||||
import org.koitharu.kotatsu.core.network.cookies.MutableCookieJar
|
import org.koitharu.kotatsu.core.network.cookies.MutableCookieJar
|
||||||
import org.koitharu.kotatsu.core.os.ShortcutsUpdater
|
import org.koitharu.kotatsu.core.os.AppShortcutManager
|
||||||
import org.koitharu.kotatsu.core.prefs.AppSettings
|
import org.koitharu.kotatsu.core.prefs.AppSettings
|
||||||
import org.koitharu.kotatsu.core.ui.BasePreferenceFragment
|
import org.koitharu.kotatsu.core.ui.BasePreferenceFragment
|
||||||
import org.koitharu.kotatsu.core.util.FileSize
|
import org.koitharu.kotatsu.core.util.FileSize
|
||||||
@@ -59,7 +59,7 @@ class UserDataSettingsFragment : BasePreferenceFragment(R.string.data_and_privac
|
|||||||
lateinit var cache: Cache
|
lateinit var cache: Cache
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var shortcutsUpdater: ShortcutsUpdater
|
lateinit var appShortcutManager: AppShortcutManager
|
||||||
|
|
||||||
private val backupSelectCall = registerForActivityResult(
|
private val backupSelectCall = registerForActivityResult(
|
||||||
ActivityResultContracts.OpenDocument(),
|
ActivityResultContracts.OpenDocument(),
|
||||||
@@ -69,7 +69,7 @@ class UserDataSettingsFragment : BasePreferenceFragment(R.string.data_and_privac
|
|||||||
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
||||||
addPreferencesFromResource(R.xml.pref_user_data)
|
addPreferencesFromResource(R.xml.pref_user_data)
|
||||||
findPreference<Preference>(AppSettings.KEY_SHORTCUTS)?.isVisible =
|
findPreference<Preference>(AppSettings.KEY_SHORTCUTS)?.isVisible =
|
||||||
shortcutsUpdater.isDynamicShortcutsAvailable()
|
appShortcutManager.isDynamicShortcutsAvailable()
|
||||||
findPreference<TwoStatePreference>(AppSettings.KEY_PROTECT_APP)
|
findPreference<TwoStatePreference>(AppSettings.KEY_PROTECT_APP)
|
||||||
?.isChecked = !settings.appPassword.isNullOrEmpty()
|
?.isChecked = !settings.appPassword.isNullOrEmpty()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user