diff --git a/app/src/main/java/io/legato/kazusa/constant/PreferKey.kt b/app/src/main/java/io/legato/kazusa/constant/PreferKey.kt index c117e3120..36e1b23c9 100644 --- a/app/src/main/java/io/legato/kazusa/constant/PreferKey.kt +++ b/app/src/main/java/io/legato/kazusa/constant/PreferKey.kt @@ -184,4 +184,5 @@ object PreferKey { const val themePref = "themePref" const val bookshelfSortOrder = "bookshelfSortOrder" + const val showBottomView = "showBottomView" } diff --git a/app/src/main/java/io/legato/kazusa/help/config/AppConfig.kt b/app/src/main/java/io/legato/kazusa/help/config/AppConfig.kt index 7200342ed..e835073d1 100644 --- a/app/src/main/java/io/legato/kazusa/help/config/AppConfig.kt +++ b/app/src/main/java/io/legato/kazusa/help/config/AppConfig.kt @@ -224,6 +224,9 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener { val showRSS: Boolean get() = appCtx.getPrefBoolean(PreferKey.showRss, true) + val showBottomView: Boolean + get() = appCtx.getPrefBoolean(PreferKey.showBottomView, true) + val autoRefreshBook: Boolean get() = appCtx.getPrefBoolean(PreferKey.autoRefresh) diff --git a/app/src/main/java/io/legato/kazusa/ui/book/read/TextActionMenu.kt b/app/src/main/java/io/legato/kazusa/ui/book/read/TextActionMenu.kt index 72199f20b..18b4b599c 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/read/TextActionMenu.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/read/TextActionMenu.kt @@ -5,15 +5,12 @@ import android.app.SearchManager import android.content.Context import android.content.Intent import android.content.pm.ResolveInfo -import android.net.Uri -import android.os.Build import android.view.Gravity import android.view.LayoutInflater import android.view.Menu import android.view.View import android.view.ViewGroup import android.widget.PopupWindow -import androidx.annotation.RequiresApi import androidx.appcompat.view.SupportMenuInflater import androidx.appcompat.view.menu.MenuBuilder import androidx.appcompat.view.menu.MenuItemImpl @@ -43,6 +40,7 @@ class TextActionMenu(private val context: Context, private val callBack: CallBac private val adapter = Adapter(context).apply { setHasStableIds(true) } + private val menuItems: List private val visibleMenuItems = arrayListOf() private val moreMenuItems = arrayListOf() @@ -55,13 +53,12 @@ class TextActionMenu(private val context: Context, private val callBack: CallBac isTouchable = true isOutsideTouchable = false isFocusable = false + animationStyle = R.style.TextActionMenuAnimation val myMenu = MenuBuilder(context) val otherMenu = MenuBuilder(context) SupportMenuInflater(context).inflate(R.menu.content_select_action, myMenu) - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - onInitializeMenu(otherMenu) - } + onInitializeMenu(otherMenu) menuItems = myMenu.visibleItems + otherMenu.visibleItems visibleMenuItems.addAll(menuItems.subList(0, 5)) moreMenuItems.addAll(menuItems.subList(5, menuItems.size)) @@ -114,10 +111,7 @@ class TextActionMenu(private val context: Context, private val callBack: CallBac when { startTopY > 500 -> { showAtLocation( - view, - Gravity.BOTTOM or Gravity.START, - startX, - windowHeight - startTopY + view, Gravity.BOTTOM or Gravity.START, startX, windowHeight - startTopY ) } @@ -138,28 +132,19 @@ class TextActionMenu(private val context: Context, private val callBack: CallBac when { startBottomY > 500 -> { showAtLocation( - view, - Gravity.TOP or Gravity.START, - startX, - startTopY - popupHeight + view, Gravity.TOP or Gravity.START, startX, startTopY - popupHeight ) } endBottomY - startBottomY > 500 -> { showAtLocation( - view, - Gravity.TOP or Gravity.START, - startX, - startBottomY + view, Gravity.TOP or Gravity.START, startX, startBottomY ) } else -> { showAtLocation( - view, - Gravity.TOP or Gravity.START, - endX, - endBottomY + view, Gravity.TOP or Gravity.START, endX, endBottomY ) } } @@ -233,28 +218,23 @@ class TextActionMenu(private val context: Context, private val callBack: CallBac } else -> item.intent?.let { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - it.putExtra(Intent.EXTRA_PROCESS_TEXT, callBack.selectedText) - context.startActivity(it) - } + it.putExtra(Intent.EXTRA_PROCESS_TEXT, callBack.selectedText) + context.startActivity(it) } } } - @RequiresApi(Build.VERSION_CODES.M) private fun createProcessTextIntent(): Intent { return Intent() .setAction(Intent.ACTION_PROCESS_TEXT) .setType("text/plain") } - @RequiresApi(Build.VERSION_CODES.M) private fun getSupportedActivities(): List { return context.packageManager .queryIntentActivities(createProcessTextIntent(), 0) } - @RequiresApi(Build.VERSION_CODES.M) private fun createProcessTextIntentForResolveInfo(info: ResolveInfo): Intent { return createProcessTextIntent() .putExtra(Intent.EXTRA_PROCESS_TEXT_READONLY, false) @@ -266,7 +246,6 @@ class TextActionMenu(private val context: Context, private val callBack: CallBac * so that your "PROCESS_TEXT" menu items appear after the * standard selection menu items like Cut, Copy, Paste. */ - @RequiresApi(Build.VERSION_CODES.M) private fun onInitializeMenu(menu: Menu) { kotlin.runCatching { var menuItemOrder = 100 diff --git a/app/src/main/java/io/legato/kazusa/ui/book/read/config/TipConfigDialog.kt b/app/src/main/java/io/legato/kazusa/ui/book/read/config/TipConfigDialog.kt index 64642c45f..ce036d681 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/read/config/TipConfigDialog.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/read/config/TipConfigDialog.kt @@ -10,8 +10,6 @@ import io.legato.kazusa.databinding.DialogTipConfigBinding import io.legato.kazusa.help.config.ReadBookConfig import io.legato.kazusa.help.config.ReadTipConfig import io.legato.kazusa.lib.dialogs.selector -import io.legato.kazusa.utils.checkByIndex -import io.legato.kazusa.utils.getIndexById import io.legato.kazusa.utils.hexString import io.legato.kazusa.utils.observeEvent import io.legato.kazusa.utils.postEvent @@ -41,7 +39,14 @@ class TipConfigDialog : BaseBottomSheetDialogFragment(R.layout.dialog_tip_config } private fun initView() { - binding.rgTitleMode.checkByIndex(ReadBookConfig.titleMode) + + when (ReadBookConfig.titleMode) { + 0 -> binding.rgTitleMode.check(R.id.rb_title_mode1) + 1 -> binding.rgTitleMode.check(R.id.rb_title_mode2) + 2 -> binding.rgTitleMode.check(R.id.rb_title_mode3) + else -> { } + } + binding.dsbTitleSize.progress = ReadBookConfig.titleSize binding.dsbTitleTop.progress = ReadBookConfig.titleTopSpacing binding.dsbTitleBottom.progress = ReadBookConfig.titleBottomSpacing @@ -91,9 +96,11 @@ class TipConfigDialog : BaseBottomSheetDialogFragment(R.layout.dialog_tip_config } private fun initEvent() = binding.run { - rgTitleMode.setOnCheckedChangeListener { _, checkedId -> - ReadBookConfig.titleMode = rgTitleMode.getIndexById(checkedId) - postEvent(EventBus.UP_CONFIG, arrayListOf(5)) + binding.rgTitleMode.setOnCheckedStateChangeListener { group, checkedIds -> + if (checkedIds.isNotEmpty()) { + ReadBookConfig.titleMode = group.indexOfChild(group.findViewById(checkedIds.first())) + postEvent(EventBus.UP_CONFIG, arrayListOf(5)) + } } dsbTitleSize.onChanged = { ReadBookConfig.titleSize = it diff --git a/app/src/main/java/io/legato/kazusa/ui/config/OtherConfigFragment.kt b/app/src/main/java/io/legato/kazusa/ui/config/OtherConfigFragment.kt index 7b29788e2..e2c9eb95a 100644 --- a/app/src/main/java/io/legato/kazusa/ui/config/OtherConfigFragment.kt +++ b/app/src/main/java/io/legato/kazusa/ui/config/OtherConfigFragment.kt @@ -194,7 +194,7 @@ class OtherConfigFragment : PreferenceFragment(), setProcessTextEnable(it.getBoolean(key, true)) } - PreferKey.showDiscovery, PreferKey.showRss -> postEvent(EventBus.NOTIFY_MAIN, true) + PreferKey.showDiscovery, PreferKey.showRss, PreferKey.showBottomView -> postEvent(EventBus.NOTIFY_MAIN, true) PreferKey.language -> listView.postDelayed(1000) { appCtx.restart() } diff --git a/app/src/main/java/io/legato/kazusa/ui/main/MainActivity.kt b/app/src/main/java/io/legato/kazusa/ui/main/MainActivity.kt index b422ad15d..4cf16d544 100644 --- a/app/src/main/java/io/legato/kazusa/ui/main/MainActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/main/MainActivity.kt @@ -56,6 +56,8 @@ import kotlin.coroutines.suspendCoroutine import androidx.core.view.get import com.google.android.material.navigation.NavigationBarView import io.legato.kazusa.ui.main.bookshelf.books.BookshelfFragment3 +import io.legato.kazusa.utils.gone +import io.legato.kazusa.utils.visible /** * 主界面 @@ -382,40 +384,46 @@ class MainActivity : VMBaseActivity(), private fun upBottomMenu() { + if (AppConfig.showBottomView) + { + getNavigationBarView().visible() + val showDiscovery = AppConfig.showDiscovery + val showRss = AppConfig.showRSS + val menu = getNavigationBarView().menu + menu.findItem(R.id.menu_discovery).isVisible = showDiscovery + menu.findItem(R.id.menu_rss).isVisible = showRss - val showDiscovery = AppConfig.showDiscovery - val showRss = AppConfig.showRSS - val menu = getNavigationBarView().menu - menu.findItem(R.id.menu_discovery).isVisible = showDiscovery - menu.findItem(R.id.menu_rss).isVisible = showRss - - var index = 0 - if (showDiscovery) { + var index = 0 + if (showDiscovery) { + index++ + realPositions[index] = idExplore + } + if (showRss) { + index++ + realPositions[index] = idRss + } index++ - realPositions[index] = idExplore + realPositions[index] = idMy + bottomMenuCount = index + 1 + adapter.notifyDataSetChanged() } - if (showRss) { - index++ - realPositions[index] = idRss - } - index++ - realPositions[index] = idMy - bottomMenuCount = index + 1 - adapter.notifyDataSetChanged() + else getNavigationBarView().gone() } private fun upHomePage() { when (AppConfig.defaultHomePage) { "bookshelf" -> {} - "explore" -> if (AppConfig.showDiscovery) { + "explore" -> if (AppConfig.showDiscovery && AppConfig.showBottomView) { binding.viewPagerMain.setCurrentItem(realPositions.indexOf(idExplore), false) } - "rss" -> if (AppConfig.showRSS) { + "rss" -> if (AppConfig.showRSS && AppConfig.showBottomView) { binding.viewPagerMain.setCurrentItem(realPositions.indexOf(idRss), false) } - "my" -> binding.viewPagerMain.setCurrentItem(realPositions.indexOf(idMy), false) + "my" -> if (AppConfig.showBottomView) { + binding.viewPagerMain.setCurrentItem(realPositions.indexOf(idMy), false) + } } } diff --git a/app/src/main/java/io/legato/kazusa/ui/main/explore/ExploreAdapter.kt b/app/src/main/java/io/legato/kazusa/ui/main/explore/ExploreAdapter.kt index 1abf1de4b..bf682a636 100644 --- a/app/src/main/java/io/legato/kazusa/ui/main/explore/ExploreAdapter.kt +++ b/app/src/main/java/io/legato/kazusa/ui/main/explore/ExploreAdapter.kt @@ -154,8 +154,8 @@ class ExploreAdapter(context: Context, val callBack: CallBack) : } } - private fun showMenu(view: View, position: Int): Boolean { - val source = getItem(position) ?: return true + private fun showMenu(view: View, position: Int) { + val source = getItem(position) ?: return val popupMenu = PopupMenu(context, view) popupMenu.inflate(R.menu.explore_item) popupMenu.menu.findItem(R.id.menu_login).isVisible = source.hasLoginUrl @@ -180,7 +180,6 @@ class ExploreAdapter(context: Context, val callBack: CallBack) : true } popupMenu.show() - return true } interface CallBack { diff --git a/app/src/main/res/anim/popup_enter.xml b/app/src/main/res/anim/popup_enter.xml new file mode 100644 index 000000000..e9d19c5a0 --- /dev/null +++ b/app/src/main/res/anim/popup_enter.xml @@ -0,0 +1,12 @@ + + + + + diff --git a/app/src/main/res/anim/popup_exit.xml b/app/src/main/res/anim/popup_exit.xml new file mode 100644 index 000000000..67de2a5a2 --- /dev/null +++ b/app/src/main/res/anim/popup_exit.xml @@ -0,0 +1,12 @@ + + + + + diff --git a/app/src/main/res/layout/dialog_tip_config.xml b/app/src/main/res/layout/dialog_tip_config.xml index ccac13b4d..a42c0da40 100644 --- a/app/src/main/res/layout/dialog_tip_config.xml +++ b/app/src/main/res/layout/dialog_tip_config.xml @@ -43,54 +43,67 @@ android:textSize="16sp" android:textStyle="bold" /> - + app:singleLine="true" + app:singleSelection="true" + app:selectionRequired="true"> - - - - - + + - + android:orientation="horizontal"> + + + + + + + - - + android:gravity="center"> + + + + diff --git a/app/src/main/res/layout/fragment_explore.xml b/app/src/main/res/layout/fragment_explore.xml index cef7babfa..0592323ac 100644 --- a/app/src/main/res/layout/fragment_explore.xml +++ b/app/src/main/res/layout/fragment_explore.xml @@ -54,17 +54,29 @@ tools:listitem="@layout/item_find_book" app:layout_behavior="@string/appbar_scrolling_view_behavior"/> - + android:visibility="gone" + android:orientation="vertical" + android:layout_gravity="center" + android:layout_margin="16dp" + android:gravity="center"> + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_find_book.xml b/app/src/main/res/layout/item_find_book.xml index 71827e3c0..022442c9c 100644 --- a/app/src/main/res/layout/item_find_book.xml +++ b/app/src/main/res/layout/item_find_book.xml @@ -39,20 +39,17 @@ - - - - + \ No newline at end of file diff --git a/app/src/main/res/layout/popup_action_menu.xml b/app/src/main/res/layout/popup_action_menu.xml index fbdd16780..8795e3038 100644 --- a/app/src/main/res/layout/popup_action_menu.xml +++ b/app/src/main/res/layout/popup_action_menu.xml @@ -1,47 +1,55 @@ - + app:cardBackgroundColor="?attr/colorSurfaceContainer" + app:strokeWidth="0dp"> + android:animateLayoutChanges="true" + android:layout_margin="8dp" + android:orientation="vertical"> + + + + + + + - - - + android:orientation="vertical" + android:visibility="gone" + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> - - + diff --git a/app/src/main/res/layout/view_detail_seek_bar.xml b/app/src/main/res/layout/view_detail_seek_bar.xml index 863081d51..5373b49f6 100644 --- a/app/src/main/res/layout/view_detail_seek_bar.xml +++ b/app/src/main/res/layout/view_detail_seek_bar.xml @@ -12,8 +12,8 @@ android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center_vertical" - android:paddingTop="16dp" - android:paddingBottom="8dp"> + android:paddingTop="8dp" + android:paddingBottom="4dp"> @@ -43,7 +43,7 @@ android:text="@string/default1" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginTop="4dp" /> + android:layout_marginTop="2dp" /> @@ -53,7 +53,7 @@ android:layout_gravity="center_vertical" android:layout_marginStart="16dp" android:visibility="gone" - android:gravity="right|center_vertical" + android:gravity="end|center_vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" tools:ignore="RtlHardcoded" /> diff --git a/app/src/main/res/layout/view_simple_counter.xml b/app/src/main/res/layout/view_simple_counter.xml index c9c683f65..43c801d8c 100644 --- a/app/src/main/res/layout/view_simple_counter.xml +++ b/app/src/main/res/layout/view_simple_counter.xml @@ -15,7 +15,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" - android:layout_marginEnd="8dp" + android:paddingEnd="8dp" android:text="标题" android:textSize="12sp" android:textStyle="bold" diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 4c98b8da4..34ddda392 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -32,6 +32,11 @@ @layout/m3_alert_dialog + +