diff --git a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/ReaderActivity.kt b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/ReaderActivity.kt index 55f42ac..35677d2 100644 --- a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/ReaderActivity.kt +++ b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/ReaderActivity.kt @@ -37,22 +37,6 @@ class ReaderActivity : private val repository: Repository by instance() private val appSettingsService: AppSettingsService by instance() - private fun showMenuItem(willAddToFavorite: Boolean) { - if (willAddToFavorite) { - toolbarMenu.findItem(R.id.star).icon?.setTint(Color.WHITE) - } else { - toolbarMenu.findItem(R.id.star).icon?.setTint(Color.RED) - } - } - - private fun canFavorite() { - showMenuItem(true) - } - - private fun canRemoveFromFavorite() { - showMenuItem(false) - } - @Suppress("detekt:SwallowedException") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -73,14 +57,21 @@ class ReaderActivity : finish() } - try { - readItem(allItems[currentItem]) - } catch (e: IndexOutOfBoundsException) { - finish() - } + readItem() binding.pager.adapter = ScreenSlidePagerAdapter(this) binding.pager.setCurrentItem(currentItem, false) + + binding.pager.registerOnPageChangeCallback( + object : ViewPager2.OnPageChangeCallback() { + override fun onPageSelected(position: Int) { + super.onPageSelected(position) + currentItem = position + updateStarIcon() + readItem() + } + }, + ) } override fun onResume() { @@ -89,14 +80,20 @@ class ReaderActivity : binding.indicator.setViewPager(binding.pager) } - private fun readItem(item: SelfossModel.Item) { - if (appSettingsService.isMarkOnScrollEnabled() && !appSettingsService.getPublicAccess()) { + private fun readItem() { + val item = allItems.getOrNull(currentItem) + if (appSettingsService.isMarkOnScrollEnabled() && !appSettingsService.getPublicAccess() && item != null) { CoroutineScope(Dispatchers.IO).launch { repository.markAsRead(item) } } } + private fun updateStarIcon() { + val isStarred = allItems.getOrNull(currentItem)?.starred ?: false + toolbarMenu.findItem(R.id.star)?.icon?.setTint(if (isStarred) Color.RED else Color.WHITE) + } + override fun onSaveInstanceState(oldInstanceState: Bundle) { super.onSaveInstanceState(oldInstanceState) oldInstanceState.clear() @@ -141,8 +138,7 @@ class ReaderActivity : } override fun onCreateOptionsMenu(menu: Menu): Boolean { - val inflater = menuInflater - inflater.inflate(R.menu.reader_menu, menu) + menuInflater.inflate(R.menu.reader_menu, menu) toolbarMenu = menu alignmentMenu() @@ -150,87 +146,50 @@ class ReaderActivity : if (appSettingsService.getPublicAccess()) { menu.removeItem(R.id.star) } else { - if (allItems.isNotEmpty() && allItems[currentItem].starred) { - canRemoveFromFavorite() - } else { - canFavorite() - } - - binding.pager.registerOnPageChangeCallback( - object : ViewPager2.OnPageChangeCallback() { - override fun onPageSelected(position: Int) { - super.onPageSelected(position) - - if (!allItems.isNullOrEmpty() && allItems.size >= position) { - if (allItems[position].starred) { - canRemoveFromFavorite() - } else { - canFavorite() - } - readItem(allItems[position]) - } - } - }, - ) + updateStarIcon() } return true } override fun onOptionsItemSelected(item: MenuItem): Boolean { - fun afterSave() { - allItems[binding.pager.currentItem] = - allItems[binding.pager.currentItem].toggleStar() - canRemoveFromFavorite() - } - - fun afterUnsave() { - allItems[binding.pager.currentItem] = allItems[binding.pager.currentItem].toggleStar() - canFavorite() - } - when (item.itemId) { - android.R.id.home -> { - onBackPressedDispatcher.onBackPressed() - return true - } - - R.id.star -> { - if (allItems[binding.pager.currentItem].starred) { - CoroutineScope(Dispatchers.IO).launch { - repository.unstarr(allItems[binding.pager.currentItem]) - } - afterUnsave() - } else { - CoroutineScope(Dispatchers.IO).launch { - repository.starr(allItems[binding.pager.currentItem]) - } - afterSave() - } - } - - R.id.align_left -> { - switchAlignmentSetting(AppSettingsService.ALIGN_LEFT) - refreshFragment() - } - - R.id.align_justify -> { - switchAlignmentSetting(AppSettingsService.JUSTIFY) - refreshFragment() - } + android.R.id.home -> onBackPressedDispatcher.onBackPressed() + R.id.star -> toggleFavorite() + R.id.align_left -> switchAlignmentSetting(AppSettingsService.ALIGN_LEFT) + R.id.align_justify -> switchAlignmentSetting(AppSettingsService.JUSTIFY) } return super.onOptionsItemSelected(item) } - private fun switchAlignmentSetting(allignment: Int) { - appSettingsService.changeAllignment(allignment) - alignmentMenu() + private fun toggleFavorite() { + val item = allItems.getOrNull(currentItem) ?: return + + val starred = item.starred + + CoroutineScope(Dispatchers.IO).launch { + if (starred) { + repository.unstarr(item) + } else { + repository.starr(item) + } + } + + item.toggleStar() + updateStarIcon() } - private fun refreshFragment() { - finish() - overridePendingTransition(0, 0) - startActivity(intent) - overridePendingTransition(0, 0) + private fun switchAlignmentSetting(alignment: Int) { + appSettingsService.changeAllignment(alignment) + alignmentMenu() + + val fragmentManager = supportFragmentManager + val fragments = fragmentManager.fragments + + for (fragment in fragments) { + if (fragment is ArticleFragment) { + fragment.refreshAlignment() + } + } } } diff --git a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/fragments/ArticleFragment.kt b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/fragments/ArticleFragment.kt index 671c20b..b7e2f95 100644 --- a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/fragments/ArticleFragment.kt +++ b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/fragments/ArticleFragment.kt @@ -263,13 +263,15 @@ class ArticleFragment : ) } - private fun refreshAlignment() { + fun refreshAlignment() { textAlignment = when (appSettingsService.getActiveAllignment()) { 1 -> "justify" 2 -> "left" else -> "justify" } + + htmlToWebview() } @Suppress("detekt:SwallowedException")