From 4db301ca7a5505f7ff4d8634d7c7efef289e0b5a Mon Sep 17 00:00:00 2001 From: Finnley Somdahl <87634197+rebelonion@users.noreply.github.com> Date: Mon, 20 Nov 2023 00:39:14 -0600 Subject: [PATCH] more offline stuff/bugfixes --- app/src/main/AndroidManifest.xml | 1 + app/src/main/java/ani/dantotsu/Functions.kt | 16 +++- .../main/java/ani/dantotsu/MainActivity.kt | 6 +- .../download/DownloadContainerActivity.kt | 23 +++++ .../download/manga/MangaDownloaderService.kt | 4 +- .../download/manga/OfflineMangaAdapter.kt | 2 +- .../ani/dantotsu/home/AnimePageAdapter.kt | 2 +- .../java/ani/dantotsu/home/HomeFragment.kt | 2 +- .../ani/dantotsu/home/MangaPageAdapter.kt | 2 +- .../main/java/ani/dantotsu/home/NoInternet.kt | 91 +++++++++++++++++-- .../media/manga/MangaChapterAdapter.kt | 2 +- .../dantotsu/media/manga/MangaReadAdapter.kt | 4 +- .../manga/mangareader/BaseImageAdapter.kt | 7 +- .../ani/dantotsu/offline/OfflineFragment.kt | 29 ++++++ .../java/ani/dantotsu/others/AppUpdater.kt | 7 +- .../ani/dantotsu/parsers/AniyomiAdapter.kt | 2 +- .../java/ani/dantotsu/parsers/BaseParser.kt | 2 +- .../settings/SettingsDialogFragment.kt | 57 +++++++++--- .../PackageInstallerInstallerAnime.kt | 3 +- .../util/AnimeExtensionInstallReceiver.kt | 3 +- .../anime/util/AnimeExtensionInstaller.kt | 2 +- .../PackageInstallerInstallerManga.kt | 3 +- .../util/MangaExtensionInstallReceiver.kt | 3 +- .../manga/util/MangaExtensionInstaller.kt | 2 +- .../main/res/layout/activity_container.xml | 5 + app/src/main/res/layout/activity_main.xml | 36 +------- .../main/res/layout/activity_no_internet.xml | 54 +++-------- app/src/main/res/layout/fragment_offline.xml | 55 +++++++++++ app/src/main/res/layout/item_navbar.xml | 35 +++++++ 29 files changed, 341 insertions(+), 119 deletions(-) create mode 100644 app/src/main/java/ani/dantotsu/download/DownloadContainerActivity.kt create mode 100644 app/src/main/java/ani/dantotsu/offline/OfflineFragment.kt create mode 100644 app/src/main/res/layout/activity_container.xml create mode 100644 app/src/main/res/layout/fragment_offline.xml create mode 100644 app/src/main/res/layout/item_navbar.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1a751200..991a97c2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -221,6 +221,7 @@ + Unit diff --git a/app/src/main/java/ani/dantotsu/MainActivity.kt b/app/src/main/java/ani/dantotsu/MainActivity.kt index f3fc77f2..4568daac 100644 --- a/app/src/main/java/ani/dantotsu/MainActivity.kt +++ b/app/src/main/java/ani/dantotsu/MainActivity.kt @@ -21,6 +21,7 @@ import android.util.Log import android.view.View import android.view.ViewGroup import android.view.animation.AnticipateInterpolator +import android.widget.FrameLayout import android.widget.TextView import androidx.activity.addCallback import androidx.activity.viewModels @@ -40,6 +41,7 @@ import eu.kanade.tachiyomi.extension.anime.AnimeExtensionManager import ani.dantotsu.connections.anilist.Anilist import ani.dantotsu.connections.anilist.AnilistHomeViewModel import ani.dantotsu.databinding.ActivityMainBinding +import ani.dantotsu.databinding.ItemNavbarBinding import ani.dantotsu.databinding.SplashScreenBinding import ani.dantotsu.download.manga.OfflineMangaFragment import ani.dantotsu.home.AnimeFragment @@ -160,7 +162,7 @@ class MainActivity : AppCompatActivity() { initActivity(this) uiSettings = loadData("ui_settings") ?: uiSettings selectedOption = uiSettings.defaultStartUpTab - binding.navbarContainer.updateLayoutParams { + binding.includedNavbar.navbarContainer.updateLayoutParams { bottomMargin = navBarHeight } } @@ -173,7 +175,7 @@ class MainActivity : AppCompatActivity() { model.genres.observe(this) { if (it != null) { if (it) { - val navbar = binding.navbar + val navbar = binding.includedNavbar.navbar bottomBar = navbar navbar.visibility = View.VISIBLE binding.mainProgressBar.visibility = View.GONE diff --git a/app/src/main/java/ani/dantotsu/download/DownloadContainerActivity.kt b/app/src/main/java/ani/dantotsu/download/DownloadContainerActivity.kt new file mode 100644 index 00000000..2d34145c --- /dev/null +++ b/app/src/main/java/ani/dantotsu/download/DownloadContainerActivity.kt @@ -0,0 +1,23 @@ +package ani.dantotsu.download + +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.fragment.app.Fragment +import ani.dantotsu.R +import ani.dantotsu.themes.ThemeManager + +class DownloadContainerActivity : AppCompatActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + ThemeManager(this).applyTheme() + setContentView(R.layout.activity_container) + + val fragmentClassName = intent.getStringExtra("FRAGMENT_CLASS_NAME") + val fragment = Class.forName(fragmentClassName).newInstance() as Fragment + + supportFragmentManager.beginTransaction() + .replace(R.id.fragment_container, fragment) + .commit() + } +} \ No newline at end of file diff --git a/app/src/main/java/ani/dantotsu/download/manga/MangaDownloaderService.kt b/app/src/main/java/ani/dantotsu/download/manga/MangaDownloaderService.kt index 7266ec53..41a249c2 100644 --- a/app/src/main/java/ani/dantotsu/download/manga/MangaDownloaderService.kt +++ b/app/src/main/java/ani/dantotsu/download/manga/MangaDownloaderService.kt @@ -60,7 +60,7 @@ class MangaDownloaderService : Service() { private val downloadJobs = mutableMapOf() private val mutex = Mutex() - var isCurrentlyProcessing = false + private var isCurrentlyProcessing = false override fun onBind(intent: Intent?): IBinder? { // This is only required for bound services. @@ -78,7 +78,7 @@ class MangaDownloaderService : Service() { setProgress(0, 0, false) } startForeground(NOTIFICATION_ID, builder.build()) - registerReceiver(cancelReceiver, IntentFilter(ACTION_CANCEL_DOWNLOAD)) + ContextCompat.registerReceiver(this, cancelReceiver, IntentFilter(ACTION_CANCEL_DOWNLOAD), ContextCompat.RECEIVER_NOT_EXPORTED) } override fun onDestroy() { diff --git a/app/src/main/java/ani/dantotsu/download/manga/OfflineMangaAdapter.kt b/app/src/main/java/ani/dantotsu/download/manga/OfflineMangaAdapter.kt index fc4240bf..a9933dfa 100644 --- a/app/src/main/java/ani/dantotsu/download/manga/OfflineMangaAdapter.kt +++ b/app/src/main/java/ani/dantotsu/download/manga/OfflineMangaAdapter.kt @@ -17,7 +17,7 @@ class OfflineMangaAdapter(private val context: Context, private val items: List< return items.size } - override fun getItem(position: Int): Any? { + override fun getItem(position: Int): Any { return items[position] } diff --git a/app/src/main/java/ani/dantotsu/home/AnimePageAdapter.kt b/app/src/main/java/ani/dantotsu/home/AnimePageAdapter.kt index 1117cf46..8cda9988 100644 --- a/app/src/main/java/ani/dantotsu/home/AnimePageAdapter.kt +++ b/app/src/main/java/ani/dantotsu/home/AnimePageAdapter.kt @@ -95,7 +95,7 @@ class AnimePageAdapter : RecyclerView.Adapter { diff --git a/app/src/main/java/ani/dantotsu/home/MangaPageAdapter.kt b/app/src/main/java/ani/dantotsu/home/MangaPageAdapter.kt index 7f91aaaf..5103c72b 100644 --- a/app/src/main/java/ani/dantotsu/home/MangaPageAdapter.kt +++ b/app/src/main/java/ani/dantotsu/home/MangaPageAdapter.kt @@ -89,7 +89,7 @@ class MangaPageAdapter : RecyclerView.Adapter { - topMargin = statusBarHeight - bottomMargin = navBarHeight + val _bottomBar = findViewById(R.id.navbar) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + + val backgroundDrawable = _bottomBar.background as GradientDrawable + val currentColor = backgroundDrawable.color?.defaultColor ?: 0 + val semiTransparentColor = (currentColor and 0x00FFFFFF) or 0xE8000000.toInt() + backgroundDrawable.setColor(semiTransparentColor) + _bottomBar.background = backgroundDrawable } - binding.refreshButton.setOnClickListener { - if (isOnline(this)) { - startMainActivity(this) + val colorOverflow = this.getSharedPreferences("Dantotsu", Context.MODE_PRIVATE) + .getBoolean("colorOverflow", false) + if (!colorOverflow) { + _bottomBar.background = ContextCompat.getDrawable(this, R.drawable.bottom_nav_gray) + + } + + binding.root.doOnAttach { + initActivity(this) + uiSettings = loadData("ui_settings") ?: uiSettings + selectedOption = uiSettings.defaultStartUpTab + binding.includedNavbar.navbarContainer.updateLayoutParams { + bottomMargin = navBarHeight } } + val navbar = binding.includedNavbar.navbar + ani.dantotsu.bottomBar = navbar + navbar.visibility = View.VISIBLE + val mainViewPager = binding.viewpager + mainViewPager.isUserInputEnabled = false + mainViewPager.adapter = ViewPagerAdapter(supportFragmentManager, lifecycle) + mainViewPager.setPageTransformer(ZoomOutPageTransformer(uiSettings)) + navbar.setOnTabSelectListener(object : + AnimatedBottomBar.OnTabSelectListener { + override fun onTabSelected( + lastIndex: Int, + lastTab: AnimatedBottomBar.Tab?, + newIndex: Int, + newTab: AnimatedBottomBar.Tab + ) { + navbar.animate().translationZ(12f).setDuration(200).start() + selectedOption = newIndex + mainViewPager.setCurrentItem(newIndex, false) + } + }) + navbar.selectTabAt(selectedOption) + + //supportFragmentManager.beginTransaction().replace(binding.fragmentContainer.id, OfflineFragment()).commit() + + } + + private class ViewPagerAdapter(fragmentManager: FragmentManager, lifecycle: Lifecycle) : + FragmentStateAdapter(fragmentManager, lifecycle) { + + override fun getItemCount(): Int = 3 + + override fun createFragment(position: Int): Fragment { + when (position) { + 0 -> return OfflineFragment() + 1 -> return OfflineFragment() + 2 -> return OfflineMangaFragment() + } + return LoginFragment() + } } } \ No newline at end of file diff --git a/app/src/main/java/ani/dantotsu/media/manga/MangaChapterAdapter.kt b/app/src/main/java/ani/dantotsu/media/manga/MangaChapterAdapter.kt index 60d77b3a..1703336f 100644 --- a/app/src/main/java/ani/dantotsu/media/manga/MangaChapterAdapter.kt +++ b/app/src/main/java/ani/dantotsu/media/manga/MangaChapterAdapter.kt @@ -94,7 +94,7 @@ class MangaChapterAdapter( fun bind(chapterNumber: String) { if (activeDownloads.contains(chapterNumber)) { // Show spinner - binding.itemDownload.setImageResource(R.drawable.spinner_icon_manga) + binding.itemDownload.setImageResource(R.drawable.ic_round_refresh_24) } else if(downloadedChapters.contains(chapterNumber)) { // Show checkmark binding.itemDownload.setImageResource(R.drawable.ic_check) diff --git a/app/src/main/java/ani/dantotsu/media/manga/MangaReadAdapter.kt b/app/src/main/java/ani/dantotsu/media/manga/MangaReadAdapter.kt index 8b64057d..4fd43ba8 100644 --- a/app/src/main/java/ani/dantotsu/media/manga/MangaReadAdapter.kt +++ b/app/src/main/java/ani/dantotsu/media/manga/MangaReadAdapter.kt @@ -74,7 +74,9 @@ class MangaReadAdapter( setLanguageList(0,i) } subscribeButton(false) - fragment.loadChapters(i, false) + //invalidate if it's the last source + val invalidate = i == mangaReadSources.names.size - 1 + fragment.loadChapters(i, invalidate) } binding.animeSourceLanguage.setOnItemClickListener { _, _, i, _ -> diff --git a/app/src/main/java/ani/dantotsu/media/manga/mangareader/BaseImageAdapter.kt b/app/src/main/java/ani/dantotsu/media/manga/mangareader/BaseImageAdapter.kt index a23dc970..bae545bb 100644 --- a/app/src/main/java/ani/dantotsu/media/manga/mangareader/BaseImageAdapter.kt +++ b/app/src/main/java/ani/dantotsu/media/manga/mangareader/BaseImageAdapter.kt @@ -118,7 +118,7 @@ abstract class BaseImageAdapter( abstract suspend fun loadImage(position: Int, parent: View): Boolean companion object { - suspend fun Context.loadBitmap_old(link: FileUrl, transforms: List): Bitmap? { + suspend fun Context.loadBitmap_old(link: FileUrl, transforms: List): Bitmap? { //still used in some places return tryWithSuspend { withContext(Dispatchers.IO) { Glide.with(this@loadBitmap_old) @@ -154,8 +154,9 @@ abstract class BaseImageAdapter( .asBitmap() .let { val fileUri = Uri.fromFile(File(link.url)).toString() - if (fileUri.startsWith("file://")) { - it.load(fileUri) + val localFile = File(link.url) + if (localFile.exists()) { + it.load(localFile.absoluteFile) .skipMemoryCache(true) .diskCacheStrategy(DiskCacheStrategy.NONE) } else { diff --git a/app/src/main/java/ani/dantotsu/offline/OfflineFragment.kt b/app/src/main/java/ani/dantotsu/offline/OfflineFragment.kt new file mode 100644 index 00000000..5a5579b1 --- /dev/null +++ b/app/src/main/java/ani/dantotsu/offline/OfflineFragment.kt @@ -0,0 +1,29 @@ +package ani.dantotsu.offline + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.core.view.updateLayoutParams +import androidx.fragment.app.Fragment +import ani.dantotsu.databinding.FragmentOfflineBinding +import ani.dantotsu.isOnline +import ani.dantotsu.navBarHeight +import ani.dantotsu.startMainActivity +import ani.dantotsu.statusBarHeight + +class OfflineFragment : Fragment() { + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + val binding = FragmentOfflineBinding.inflate(inflater, container, false) + binding.refreshContainer.updateLayoutParams { + topMargin = statusBarHeight + bottomMargin = navBarHeight + } + binding.refreshButton.setOnClickListener { + if (isOnline(requireContext())) { + startMainActivity(requireActivity()) + } + } + return binding.root + } +} \ No newline at end of file diff --git a/app/src/main/java/ani/dantotsu/others/AppUpdater.kt b/app/src/main/java/ani/dantotsu/others/AppUpdater.kt index 12ec54e9..989ec5c5 100644 --- a/app/src/main/java/ani/dantotsu/others/AppUpdater.kt +++ b/app/src/main/java/ani/dantotsu/others/AppUpdater.kt @@ -10,6 +10,7 @@ import android.content.IntentFilter import android.net.Uri import android.os.Environment import android.widget.TextView +import androidx.core.content.ContextCompat import androidx.core.content.FileProvider import androidx.core.content.getSystemService import androidx.fragment.app.FragmentActivity @@ -142,7 +143,8 @@ object AppUpdater { -1 } if (id == -1L) return true - registerReceiver( + ContextCompat.registerReceiver( + this, object : BroadcastReceiver() { @SuppressLint("Range") override fun onReceive(context: Context?, intent: Intent?) { @@ -171,7 +173,8 @@ object AppUpdater { logError(e) } } - }, IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE) + }, IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE), + ContextCompat.RECEIVER_NOT_EXPORTED ) return true } diff --git a/app/src/main/java/ani/dantotsu/parsers/AniyomiAdapter.kt b/app/src/main/java/ani/dantotsu/parsers/AniyomiAdapter.kt index 41288e98..ed5901ae 100644 --- a/app/src/main/java/ani/dantotsu/parsers/AniyomiAdapter.kt +++ b/app/src/main/java/ani/dantotsu/parsers/AniyomiAdapter.kt @@ -150,7 +150,7 @@ class DynamicAnimeParser(extension: AnimeExtension.Installed) : AnimeParser() { } - override suspend fun getVideoExtractor(server: VideoServer): VideoExtractor? { + override suspend fun getVideoExtractor(server: VideoServer): VideoExtractor { return VideoServerPassthrough(server) } diff --git a/app/src/main/java/ani/dantotsu/parsers/BaseParser.kt b/app/src/main/java/ani/dantotsu/parsers/BaseParser.kt index 35b7b98b..f8df772b 100644 --- a/app/src/main/java/ani/dantotsu/parsers/BaseParser.kt +++ b/app/src/main/java/ani/dantotsu/parsers/BaseParser.kt @@ -51,7 +51,7 @@ abstract class BaseParser { * **/ open suspend fun autoSearch(mediaObj: Media): ShowResponse? { var response: ShowResponse? = null//loadSavedShowResponse(mediaObj.id) - if (response != null) { + if (response != null && this !is OfflineMangaParser) { saveShowResponse(mediaObj.id, response, true) } else { setUserText("Searching : ${mediaObj.mainName()}") diff --git a/app/src/main/java/ani/dantotsu/settings/SettingsDialogFragment.kt b/app/src/main/java/ani/dantotsu/settings/SettingsDialogFragment.kt index 5b5c62b0..0b10ca1d 100644 --- a/app/src/main/java/ani/dantotsu/settings/SettingsDialogFragment.kt +++ b/app/src/main/java/ani/dantotsu/settings/SettingsDialogFragment.kt @@ -10,14 +10,17 @@ import android.util.TypedValue import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Switch import androidx.core.content.ContextCompat import ani.dantotsu.* import ani.dantotsu.connections.anilist.Anilist import ani.dantotsu.others.imagesearch.ImageSearchActivity import ani.dantotsu.databinding.BottomSheetSettingsBinding +import ani.dantotsu.download.DownloadContainerActivity +import ani.dantotsu.download.manga.OfflineMangaFragment -class SettingsDialogFragment : BottomSheetDialogFragment() { +class SettingsDialogFragment(val pageType: PageType) : BottomSheetDialogFragment() { private var _binding: BottomSheetSettingsBinding? = null private val binding get() = _binding!! @@ -70,18 +73,42 @@ class SettingsDialogFragment : BottomSheetDialogFragment() { dismiss() } binding.settingsDownloads.setSafeOnClickListener { - try { - val arrayOfFiles = ContextCompat.getExternalFilesDirs(requireContext(), null) - startActivity( - if (loadData("sd_dl") == true && arrayOfFiles.size > 1 && arrayOfFiles[0] != null && arrayOfFiles[1] != null) { - val parentDirectory = arrayOfFiles[1].toString() - val intent = Intent(Intent.ACTION_VIEW) - intent.setDataAndType(Uri.parse(parentDirectory), "resource/folder") - } else Intent(DownloadManager.ACTION_VIEW_DOWNLOADS) - ) - } catch (e: ActivityNotFoundException) { - toast(getString(R.string.file_manager_not_found)) + when(pageType) { + PageType.MANGA -> { + val intent = Intent(activity, DownloadContainerActivity::class.java) + intent.putExtra("FRAGMENT_CLASS_NAME", OfflineMangaFragment::class.java.name) + startActivity(intent) + } + PageType.ANIME -> { + try { + val arrayOfFiles = ContextCompat.getExternalFilesDirs(requireContext(), null) + startActivity( + if (loadData("sd_dl") == true && arrayOfFiles.size > 1 && arrayOfFiles[0] != null && arrayOfFiles[1] != null) { + val parentDirectory = arrayOfFiles[1].toString() + val intent = Intent(Intent.ACTION_VIEW) + intent.setDataAndType(Uri.parse(parentDirectory), "resource/folder") + } else Intent(DownloadManager.ACTION_VIEW_DOWNLOADS) + ) + } catch (e: ActivityNotFoundException) { + toast(getString(R.string.file_manager_not_found)) + } + } + PageType.HOME -> { + try { + val arrayOfFiles = ContextCompat.getExternalFilesDirs(requireContext(), null) + startActivity( + if (loadData("sd_dl") == true && arrayOfFiles.size > 1 && arrayOfFiles[0] != null && arrayOfFiles[1] != null) { + val parentDirectory = arrayOfFiles[1].toString() + val intent = Intent(Intent.ACTION_VIEW) + intent.setDataAndType(Uri.parse(parentDirectory), "resource/folder") + } else Intent(DownloadManager.ACTION_VIEW_DOWNLOADS) + ) + } catch (e: ActivityNotFoundException) { + toast(getString(R.string.file_manager_not_found)) + } + } } + dismiss() } } @@ -90,4 +117,10 @@ class SettingsDialogFragment : BottomSheetDialogFragment() { super.onDestroyView() _binding = null } + + companion object{ + enum class PageType{ + MANGA, ANIME, HOME + } + } } \ No newline at end of file diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/anime/installer/PackageInstallerInstallerAnime.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/anime/installer/PackageInstallerInstallerAnime.kt index fb6bfb11..a3ae1054 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/anime/installer/PackageInstallerInstallerAnime.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/anime/installer/PackageInstallerInstallerAnime.kt @@ -8,6 +8,7 @@ import android.content.Intent import android.content.IntentFilter import android.content.pm.PackageInstaller import android.os.Build +import androidx.core.content.ContextCompat import eu.kanade.tachiyomi.extension.InstallStep import eu.kanade.tachiyomi.util.lang.use import eu.kanade.tachiyomi.util.system.getParcelableExtraCompat @@ -100,7 +101,7 @@ class PackageInstallerInstallerAnime(private val service: Service) : InstallerAn } init { - service.registerReceiver(packageActionReceiver, IntentFilter(INSTALL_ACTION)) + ContextCompat.registerReceiver(service, packageActionReceiver, IntentFilter(INSTALL_ACTION), ContextCompat.RECEIVER_NOT_EXPORTED) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/anime/util/AnimeExtensionInstallReceiver.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/anime/util/AnimeExtensionInstallReceiver.kt index 3f1ef0ea..c4a6de74 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/anime/util/AnimeExtensionInstallReceiver.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/anime/util/AnimeExtensionInstallReceiver.kt @@ -4,6 +4,7 @@ import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.content.IntentFilter +import androidx.core.content.ContextCompat import eu.kanade.tachiyomi.extension.anime.model.AnimeExtension import eu.kanade.tachiyomi.extension.anime.model.AnimeLoadResult import kotlinx.coroutines.CoroutineStart @@ -27,7 +28,7 @@ internal class AnimeExtensionInstallReceiver(private val listener: Listener) : * Registers this broadcast receiver */ fun register(context: Context) { - context.registerReceiver(this, filter) + ContextCompat.registerReceiver(context, this, filter, ContextCompat.RECEIVER_NOT_EXPORTED) } /** diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/anime/util/AnimeExtensionInstaller.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/anime/util/AnimeExtensionInstaller.kt index 3dbdd8e3..96802b5c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/anime/util/AnimeExtensionInstaller.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/anime/util/AnimeExtensionInstaller.kt @@ -216,7 +216,7 @@ internal class AnimeExtensionInstaller(private val context: Context) { isRegistered = true val filter = IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE) - context.registerReceiver(this, filter) + ContextCompat.registerReceiver(context, this, filter, ContextCompat.RECEIVER_EXPORTED) } /** diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/manga/installer/PackageInstallerInstallerManga.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/manga/installer/PackageInstallerInstallerManga.kt index 6eb719ee..c303b49c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/manga/installer/PackageInstallerInstallerManga.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/manga/installer/PackageInstallerInstallerManga.kt @@ -8,6 +8,7 @@ import android.content.Intent import android.content.IntentFilter import android.content.pm.PackageInstaller import android.os.Build +import androidx.core.content.ContextCompat import eu.kanade.tachiyomi.extension.InstallStep import eu.kanade.tachiyomi.util.lang.use import eu.kanade.tachiyomi.util.system.getParcelableExtraCompat @@ -100,7 +101,7 @@ class PackageInstallerInstallerManga(private val service: Service) : InstallerMa } init { - service.registerReceiver(packageActionReceiver, IntentFilter(INSTALL_ACTION)) + ContextCompat.registerReceiver(service, packageActionReceiver, IntentFilter(INSTALL_ACTION), ContextCompat.RECEIVER_NOT_EXPORTED) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/manga/util/MangaExtensionInstallReceiver.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/manga/util/MangaExtensionInstallReceiver.kt index 17dac9b4..3eb90508 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/manga/util/MangaExtensionInstallReceiver.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/manga/util/MangaExtensionInstallReceiver.kt @@ -4,6 +4,7 @@ import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.content.IntentFilter +import androidx.core.content.ContextCompat import eu.kanade.tachiyomi.extension.manga.model.MangaExtension import eu.kanade.tachiyomi.extension.manga.model.MangaLoadResult import kotlinx.coroutines.CoroutineStart @@ -27,7 +28,7 @@ internal class MangaExtensionInstallReceiver(private val listener: Listener) : * Registers this broadcast receiver */ fun register(context: Context) { - context.registerReceiver(this, filter) + ContextCompat.registerReceiver(context, this, filter, ContextCompat.RECEIVER_NOT_EXPORTED) } /** diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/manga/util/MangaExtensionInstaller.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/manga/util/MangaExtensionInstaller.kt index 88b2b422..4109f9f5 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/manga/util/MangaExtensionInstaller.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/manga/util/MangaExtensionInstaller.kt @@ -213,7 +213,7 @@ internal class MangaExtensionInstaller(private val context: Context) { isRegistered = true val filter = IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE) - context.registerReceiver(this, filter) + ContextCompat.registerReceiver(context, this, filter, ContextCompat.RECEIVER_EXPORTED) } /** diff --git a/app/src/main/res/layout/activity_container.xml b/app/src/main/res/layout/activity_container.xml new file mode 100644 index 00000000..1d249e3e --- /dev/null +++ b/app/src/main/res/layout/activity_container.xml @@ -0,0 +1,5 @@ + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index bebdb5b3..b73e562b 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -19,39 +19,9 @@ android:layout_width="match_parent" android:layout_height="match_parent" /> - - - - + + + + + - - - - - - - - - -