From 46a6c0e8756d10ffd87f9b7e0b485a4dac4b5faf Mon Sep 17 00:00:00 2001 From: frknkrc44 Date: Wed, 27 Aug 2025 02:55:14 +0300 Subject: [PATCH] Remove bottom navigation bar, improve E2E support --- .../ui/fragment/AppSelectFragment.kt | 21 ++++++++++ .../ui/fragment/AppSettingsFragment.kt | 21 ++++++++++ .../hidemyapplist/ui/fragment/LogsFragment.kt | 6 +-- .../ui/fragment/SettingsFragment.kt | 27 +++++++++++- .../ui/fragment/TemplateManageFragment.kt | 21 ++++++++++ .../ui/fragment/TemplateSettingsFragment.kt | 21 ++++++++++ .../hma_oss/ui/activity/MainActivity.kt | 5 --- .../hma_oss/ui/fragment/HomeFragment.kt | 42 +++++++++++++++---- app/src/main/res/layout/activity_main.xml | 12 +----- .../main/res/layout/fragment_app_select.xml | 1 - app/src/main/res/layout/fragment_home.xml | 5 ++- app/src/main/res/layout/fragment_settings.xml | 1 - .../res/layout/fragment_template_manage.xml | 1 - .../res/layout/fragment_template_settings.xml | 1 - app/src/main/res/menu/menu_nav.xml | 11 ----- .../main/res/navigation/home_nav_graph.xml | 5 +++ .../main/res/navigation/main_nav_graph.xml | 11 ----- 17 files changed, 157 insertions(+), 55 deletions(-) delete mode 100644 app/src/main/res/menu/menu_nav.xml delete mode 100644 app/src/main/res/navigation/main_nav_graph.xml diff --git a/app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/AppSelectFragment.kt b/app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/AppSelectFragment.kt index fcb19a1..b446adb 100644 --- a/app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/AppSelectFragment.kt +++ b/app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/AppSelectFragment.kt @@ -1,8 +1,10 @@ package icu.nullptr.hidemyapplist.ui.fragment +import android.os.Build import android.os.Bundle import android.view.MenuItem import android.view.View +import android.view.WindowInsets import androidx.activity.addCallback import androidx.appcompat.widget.SearchView import androidx.fragment.app.Fragment @@ -120,5 +122,24 @@ abstract class AppSelectFragment : Fragment(R.layout.fragment_app_select) { } sortList() + + val insets = binding.root.rootWindowInsets + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + val barInsets = insets.getInsets(WindowInsets.Type.systemBars()) + binding.root.setPadding( + barInsets.left, + barInsets.top, + barInsets.right, + barInsets.bottom, + ) + } else { + @Suppress("deprecation") + binding.root.setPadding( + insets.systemWindowInsetLeft, + insets.systemWindowInsetTop, + insets.systemWindowInsetRight, + insets.systemWindowInsetBottom, + ) + } } } diff --git a/app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/AppSettingsFragment.kt b/app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/AppSettingsFragment.kt index e6ac92f..3ffe575 100644 --- a/app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/AppSettingsFragment.kt +++ b/app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/AppSettingsFragment.kt @@ -1,8 +1,10 @@ package icu.nullptr.hidemyapplist.ui.fragment import android.annotation.SuppressLint +import android.os.Build import android.os.Bundle import android.view.View +import android.view.WindowInsets import androidx.activity.addCallback import androidx.core.graphics.drawable.toDrawable import androidx.fragment.app.Fragment @@ -73,6 +75,25 @@ class AppSettingsFragment : Fragment(R.layout.fragment_settings) { .replace(R.id.settings_container, AppPreferenceFragment()) .commit() } + + val insets = binding.root.rootWindowInsets + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + val barInsets = insets.getInsets(WindowInsets.Type.systemBars()) + binding.root.setPadding( + barInsets.left, + barInsets.top, + barInsets.right, + barInsets.bottom, + ) + } else { + @Suppress("deprecation") + binding.root.setPadding( + insets.systemWindowInsetLeft, + insets.systemWindowInsetTop, + insets.systemWindowInsetRight, + insets.systemWindowInsetBottom, + ) + } } class AppPreferenceDataStore(private val pack: AppSettingsViewModel.Pack) : PreferenceDataStore() { diff --git a/app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/LogsFragment.kt b/app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/LogsFragment.kt index ea2d19c..04e3d97 100644 --- a/app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/LogsFragment.kt +++ b/app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/LogsFragment.kt @@ -125,7 +125,7 @@ class LogsFragment : Fragment(R.layout.fragment_logs) { ) setNavigationIcon(R.drawable.baseline_arrow_back_24) setNavigationOnClickListener { navController.popBackStack() } - isTitleCentered = true + // isTitleCentered = true } with(binding.toolbar.menu) { @@ -150,7 +150,7 @@ class LogsFragment : Fragment(R.layout.fragment_logs) { barInsets.left, barInsets.top, barInsets.right, - 0, + barInsets.bottom, ) } else { @Suppress("deprecation") @@ -158,7 +158,7 @@ class LogsFragment : Fragment(R.layout.fragment_logs) { insets.systemWindowInsetLeft, insets.systemWindowInsetTop, insets.systemWindowInsetRight, - 0, + insets.systemWindowInsetBottom, ) } } diff --git a/app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/SettingsFragment.kt b/app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/SettingsFragment.kt index c92de16..79d504a 100644 --- a/app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/SettingsFragment.kt +++ b/app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/SettingsFragment.kt @@ -5,6 +5,7 @@ import android.os.Build import android.os.Bundle import android.text.TextUtils import android.view.View +import android.view.WindowInsets import androidx.appcompat.app.AppCompatDelegate import androidx.fragment.app.Fragment import androidx.preference.ListPreference @@ -22,6 +23,7 @@ import icu.nullptr.hidemyapplist.service.PrefManager import icu.nullptr.hidemyapplist.service.ServiceClient import icu.nullptr.hidemyapplist.ui.activity.AboutActivity import icu.nullptr.hidemyapplist.ui.util.makeToast +import icu.nullptr.hidemyapplist.ui.util.navController import icu.nullptr.hidemyapplist.ui.util.setupToolbar import icu.nullptr.hidemyapplist.util.ConfigUtils.Companion.getLocale import icu.nullptr.hidemyapplist.util.LangList @@ -42,9 +44,11 @@ class SettingsFragment : Fragment(R.layout.fragment_settings), PreferenceFragmen menuRes = R.menu.menu_about, onMenuOptionSelected = { startActivity(Intent(requireContext(), AboutActivity::class.java)) - } + }, + navigationIcon = R.drawable.baseline_arrow_back_24, + navigationOnClick = { navController.navigateUp() } ) - isTitleCentered = true + // isTitleCentered = true } if (childFragmentManager.findFragmentById(R.id.settings_container) == null) { @@ -52,6 +56,25 @@ class SettingsFragment : Fragment(R.layout.fragment_settings), PreferenceFragmen .replace(R.id.settings_container, SettingsPreferenceFragment()) .commit() } + + val insets = binding.root.rootWindowInsets + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + val barInsets = insets.getInsets(WindowInsets.Type.systemBars()) + binding.root.setPadding( + barInsets.left, + barInsets.top, + barInsets.right, + barInsets.bottom, + ) + } else { + @Suppress("deprecation") + binding.root.setPadding( + insets.systemWindowInsetLeft, + insets.systemWindowInsetTop, + insets.systemWindowInsetRight, + insets.systemWindowInsetBottom, + ) + } } override fun onPreferenceStartFragment(caller: PreferenceFragmentCompat, pref: Preference): Boolean { diff --git a/app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/TemplateManageFragment.kt b/app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/TemplateManageFragment.kt index a6e3a66..d6bab23 100644 --- a/app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/TemplateManageFragment.kt +++ b/app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/TemplateManageFragment.kt @@ -1,8 +1,10 @@ package icu.nullptr.hidemyapplist.ui.fragment import android.graphics.Color +import android.os.Build import android.os.Bundle import android.view.View +import android.view.WindowInsets import androidx.core.view.doOnPreDraw import androidx.fragment.app.Fragment import androidx.fragment.app.clearFragmentResultListener @@ -50,6 +52,25 @@ class TemplateManageFragment : Fragment(R.layout.fragment_template_manage) { } binding.templateList.layoutManager = LinearLayoutManager(context) binding.templateList.adapter = adapter + + val insets = binding.root.rootWindowInsets + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + val barInsets = insets.getInsets(WindowInsets.Type.systemBars()) + binding.root.setPadding( + barInsets.left, + barInsets.top, + barInsets.right, + barInsets.bottom, + ) + } else { + @Suppress("deprecation") + binding.root.setPadding( + insets.systemWindowInsetLeft, + insets.systemWindowInsetTop, + insets.systemWindowInsetRight, + insets.systemWindowInsetBottom, + ) + } } private fun navigateToSettings(info: ConfigManager.TemplateInfo) { diff --git a/app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/TemplateSettingsFragment.kt b/app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/TemplateSettingsFragment.kt index 0aa4fd3..1ae2eec 100644 --- a/app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/TemplateSettingsFragment.kt +++ b/app/src/main/java/icu/nullptr/hidemyapplist/ui/fragment/TemplateSettingsFragment.kt @@ -1,7 +1,9 @@ package icu.nullptr.hidemyapplist.ui.fragment +import android.os.Build import android.os.Bundle import android.view.View +import android.view.WindowInsets import androidx.activity.addCallback import androidx.core.widget.addTextChangedListener import androidx.fragment.app.Fragment @@ -116,5 +118,24 @@ class TemplateSettingsFragment : Fragment(R.layout.fragment_template_settings) { binding.appliedApps.text = String.format(getString(R.string.template_applied_count), it.size) } } + + val insets = binding.root.rootWindowInsets + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + val barInsets = insets.getInsets(WindowInsets.Type.systemBars()) + binding.root.setPadding( + barInsets.left, + barInsets.top, + barInsets.right, + barInsets.bottom, + ) + } else { + @Suppress("deprecation") + binding.root.setPadding( + insets.systemWindowInsetLeft, + insets.systemWindowInsetTop, + insets.systemWindowInsetRight, + insets.systemWindowInsetBottom, + ) + } } } diff --git a/app/src/main/java/org/frknkrc44/hma_oss/ui/activity/MainActivity.kt b/app/src/main/java/org/frknkrc44/hma_oss/ui/activity/MainActivity.kt index d755d52..957e35b 100644 --- a/app/src/main/java/org/frknkrc44/hma_oss/ui/activity/MainActivity.kt +++ b/app/src/main/java/org/frknkrc44/hma_oss/ui/activity/MainActivity.kt @@ -6,8 +6,6 @@ import android.os.Bundle import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AppCompatActivity import androidx.navigation.findNavController -import androidx.navigation.fragment.NavHostFragment -import androidx.navigation.ui.NavigationUI.setupWithNavController import com.google.android.material.color.DynamicColors import icu.nullptr.hidemyapplist.hmaApp import icu.nullptr.hidemyapplist.ui.util.ThemeUtils @@ -25,9 +23,6 @@ class MainActivity : AppCompatActivity() { setContentView(binding.root) DynamicColors.applyToActivityIfAvailable(this) - val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment - val navController = navHostFragment.navController - setupWithNavController(binding.bottomNav, navController) } override fun onApplyThemeResource(theme: Resources.Theme, resid: Int, first: Boolean) { diff --git a/app/src/main/java/org/frknkrc44/hma_oss/ui/fragment/HomeFragment.kt b/app/src/main/java/org/frknkrc44/hma_oss/ui/fragment/HomeFragment.kt index eb495bd..6327c59 100644 --- a/app/src/main/java/org/frknkrc44/hma_oss/ui/fragment/HomeFragment.kt +++ b/app/src/main/java/org/frknkrc44/hma_oss/ui/fragment/HomeFragment.kt @@ -3,9 +3,11 @@ package org.frknkrc44.hma_oss.ui.fragment import android.annotation.SuppressLint import android.graphics.drawable.GradientDrawable import android.graphics.drawable.LayerDrawable +import android.os.Build import android.os.Bundle import android.view.View import android.view.ViewGroup +import android.view.WindowInsets import android.widget.ImageView import android.widget.LinearLayout import android.widget.TextView @@ -82,7 +84,29 @@ class HomeFragment : Fragment(R.layout.fragment_home) { toolbar = binding.toolbar, title = getString(R.string.app_name), ) - isTitleCentered = true + // isTitleCentered = true + } + + binding.root.setOnApplyWindowInsetsListener { v, insets -> + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + val barInsets = insets.getInsets(WindowInsets.Type.systemBars()) + binding.root.setPadding( + barInsets.left, + barInsets.top, + barInsets.right, + barInsets.bottom, + ) + } else { + @Suppress("deprecation") + binding.root.setPadding( + insets.systemWindowInsetLeft, + insets.systemWindowInsetTop, + insets.systemWindowInsetRight, + insets.systemWindowInsetBottom, + ) + } + + insets } } @@ -153,13 +177,7 @@ class HomeFragment : Fragment(R.layout.fragment_home) { } (layoutParams as LinearLayout.LayoutParams).apply { - if (i == 0) { - setMargins(pad, pad, pad, 0) - } else if (i == childCount - 1) { - setMargins(pad, 0, pad, pad) - } else { - setMargins(pad, 0, pad, 0) - } + setMargins(pad, 0, pad, 0) } val backgroundDrawable = GradientDrawable() @@ -258,6 +276,14 @@ class HomeFragment : Fragment(R.layout.fragment_home) { } } + with(binding.navSettings) { + text1.text = getString(R.string.title_settings) + icon.setImageResource(R.drawable.outline_settings_24) + root.setOnClickListener { + navigate(R.id.nav_settings) + } + } + binding.backupConfig.setOnClickListener { backupSAFLauncher.launch("HMA_Config_${System.currentTimeMillis()}.json") } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index c0dd8e9..f5ded80 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -18,16 +18,8 @@ android:layout_width="match_parent" android:layout_height="0dp" app:defaultNavHost="true" - app:layout_constraintBottom_toTopOf="@id/bottom_nav" - app:layout_constraintTop_toTopOf="parent" - app:navGraph="@navigation/main_nav_graph" /> - - + app:layout_constraintTop_toTopOf="parent" + app:navGraph="@navigation/home_nav_graph" /> diff --git a/app/src/main/res/layout/fragment_app_select.xml b/app/src/main/res/layout/fragment_app_select.xml index ce8c52f..75b2aa2 100644 --- a/app/src/main/res/layout/fragment_app_select.xml +++ b/app/src/main/res/layout/fragment_app_select.xml @@ -9,7 +9,6 @@ diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 275dacb..798f570 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -9,7 +9,6 @@ @@ -59,6 +58,10 @@ android:id="@+id/nav_logs" layout="@layout/view_home_item" /> + + diff --git a/app/src/main/res/layout/fragment_template_manage.xml b/app/src/main/res/layout/fragment_template_manage.xml index ae0d416..92784e5 100644 --- a/app/src/main/res/layout/fragment_template_manage.xml +++ b/app/src/main/res/layout/fragment_template_manage.xml @@ -7,7 +7,6 @@ diff --git a/app/src/main/res/layout/fragment_template_settings.xml b/app/src/main/res/layout/fragment_template_settings.xml index 3c85d83..8be7422 100644 --- a/app/src/main/res/layout/fragment_template_settings.xml +++ b/app/src/main/res/layout/fragment_template_settings.xml @@ -8,7 +8,6 @@ diff --git a/app/src/main/res/menu/menu_nav.xml b/app/src/main/res/menu/menu_nav.xml deleted file mode 100644 index 2429e7b..0000000 --- a/app/src/main/res/menu/menu_nav.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/navigation/home_nav_graph.xml b/app/src/main/res/navigation/home_nav_graph.xml index 48d854a..914c535 100644 --- a/app/src/main/res/navigation/home_nav_graph.xml +++ b/app/src/main/res/navigation/home_nav_graph.xml @@ -13,6 +13,11 @@ android:name="icu.nullptr.hidemyapplist.ui.fragment.LogsFragment" android:label="@string/title_logs" /> + + - - - - \ No newline at end of file