optimize imports, remove Android 9 support, replace detection test with how to use and others

This commit is contained in:
frknkrc44 2025-08-17 04:53:09 +03:00
commit a8df39382c
No known key found for this signature in database
GPG key ID: 784AE1CC0DCFD34F
32 changed files with 132 additions and 146 deletions

View file

@ -101,7 +101,6 @@ dependencies {
implementation(libs.me.zhanghai.android.appiconloader)
compileOnly(libs.dev.rikka.hidden.stub)
ksp(libs.com.github.liujingxing.rxhttp.compiler)
implementation(libs.androidx.appcompat.resources)
implementation(libs.material)
}

View file

@ -3,16 +3,16 @@ package icu.nullptr.hidemyapplist
import android.annotation.SuppressLint
import android.app.Application
import androidx.appcompat.app.AppCompatDelegate
import icu.nullptr.hidemyapplist.receiver.AppChangeReceiver
import icu.nullptr.hidemyapplist.service.ConfigManager
import icu.nullptr.hidemyapplist.service.PrefManager
import icu.nullptr.hidemyapplist.ui.receiver.AppChangeReceiver
import icu.nullptr.hidemyapplist.ui.util.makeToast
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import me.zhanghai.android.appiconloader.AppIconLoader
import org.frknkrc44.hma_oss.R
import rikka.material.app.LocaleDelegate
import java.util.*
import java.util.Locale
import kotlin.system.exitProcess
lateinit var hmaApp: MyApp

View file

@ -1,11 +1,6 @@
package icu.nullptr.hidemyapplist.data
import icu.nullptr.hidemyapplist.common.Constants
import icu.nullptr.hidemyapplist.service.PrefManager
import kotlinx.serialization.Serializable
import rxhttp.*
import rxhttp.wrapper.param.RxHttp
import java.util.*
class UpdateInfo(
val versionName: String,

View file

@ -0,0 +1,36 @@
package icu.nullptr.hidemyapplist.receiver
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.util.Log
import icu.nullptr.hidemyapplist.util.PackageHelper
class AppChangeReceiver : BroadcastReceiver() {
companion object {
private const val TAG = "AppChangeReceiver"
private val actions = setOf(
Intent.ACTION_PACKAGE_ADDED,
Intent.ACTION_PACKAGE_REMOVED,
Intent.ACTION_PACKAGE_REPLACED
)
fun register(context: Context) {
val filter = IntentFilter().apply {
actions.forEach(::addAction)
addDataScheme("package")
}
context.registerReceiver(AppChangeReceiver(), filter)
}
}
override fun onReceive(context: Context, intent: Intent) {
if (intent.action in actions) {
Log.i(TAG, "Received intent: $intent")
PackageHelper.invalidateCache()
}
}
}

View file

@ -1,8 +1,6 @@
package icu.nullptr.hidemyapplist.service
import android.content.ComponentName
import android.content.Context.MODE_PRIVATE
import android.content.pm.PackageManager
import androidx.appcompat.app.AppCompatDelegate
import icu.nullptr.hidemyapplist.hmaApp

View file

@ -1,21 +1,29 @@
package icu.nullptr.hidemyapplist.ui.activity
import android.annotation.SuppressLint
import android.graphics.drawable.ColorDrawable
import android.widget.ImageView
import android.widget.TextView
import com.drakeet.about.*
import com.drakeet.about.AbsAboutActivity
import com.drakeet.about.Card
import com.drakeet.about.Category
import com.drakeet.about.Contributor
import com.drakeet.about.License
import com.drakeet.about.Line
import icu.nullptr.hidemyapplist.ui.util.ThemeUtils.themeColor
import org.frknkrc44.hma_oss.BuildConfig
import org.frknkrc44.hma_oss.R
import androidx.core.graphics.drawable.toDrawable
class AboutActivity : AbsAboutActivity() {
@SuppressLint("SetTextI18n")
override fun onCreateHeader(icon: ImageView, slogan: TextView, version: TextView) {
icon.setImageResource(R.mipmap.ic_launcher)
slogan.text = applicationInfo.loadLabel(packageManager)
version.text = "V" + BuildConfig.VERSION_NAME
version.text = BuildConfig.VERSION_NAME
}
@Suppress("deprecation")
override fun onItemsCreated(items: MutableList<Any>) {
items.add(Category(getString(R.string.title_about_fork)))
items.add(Card(getString(R.string.about_fork_description)))

View file

@ -7,9 +7,9 @@ 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.ui.util.ThemeUtils
import org.frknkrc44.hma_oss.R
import org.frknkrc44.hma_oss.databinding.ActivityMainBinding
import icu.nullptr.hidemyapplist.ui.util.ThemeUtils
import rikka.material.app.MaterialActivity
class MainActivity : MaterialActivity() {

View file

@ -2,15 +2,13 @@ package icu.nullptr.hidemyapplist.ui.adapter
import android.annotation.SuppressLint
import android.content.Context
import android.graphics.Color
import android.os.Build
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import org.frknkrc44.hma_oss.R
import org.frknkrc44.hma_oss.databinding.LogItemViewBinding
import icu.nullptr.hidemyapplist.service.PrefManager
import icu.nullptr.hidemyapplist.ui.util.ThemeUtils.themeColor
import org.frknkrc44.hma_oss.R
import org.frknkrc44.hma_oss.databinding.LogItemViewBinding
import java.util.regex.Pattern
class LogAdapter(context: Context) : RecyclerView.Adapter<LogAdapter.ViewHolder>() {
@ -44,8 +42,7 @@ class LogAdapter(context: Context) : RecyclerView.Adapter<LogAdapter.ViewHolder>
private val colorInfo = context.getColor(R.color.info)
private val colorWarn = context.getColor(R.color.warn)
private val colorError =
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) Color.RED
else context.themeColor(android.R.attr.colorError)
context.themeColor(android.R.attr.colorError)
var logs = listOf<LogItem>()
@SuppressLint("NotifyDataSetChanged")

View file

@ -1,12 +1,13 @@
package icu.nullptr.hidemyapplist.ui.adapter
import android.annotation.SuppressLint
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import org.frknkrc44.hma_oss.R
import icu.nullptr.hidemyapplist.service.ConfigManager
import icu.nullptr.hidemyapplist.ui.view.ListItemView
import org.frknkrc44.hma_oss.R
import java.text.Collator
import java.util.*
import java.util.Locale
class TemplateAdapter(
private val onClickListener: ((ConfigManager.TemplateInfo) -> Unit)?
@ -51,6 +52,7 @@ class TemplateAdapter(
override fun onBindViewHolder(holder: ViewHolder, position: Int) = holder.bind(list[position])
@SuppressLint("NotifyDataSetChanged")
fun updateList() {
list = ConfigManager.getTemplateList().apply {
sortWith { o1, o2 ->

View file

@ -2,10 +2,10 @@ package icu.nullptr.hidemyapplist.ui.fragment
import android.os.Bundle
import com.google.android.material.transition.MaterialSharedAxis
import org.frknkrc44.hma_oss.R
import icu.nullptr.hidemyapplist.service.ConfigManager
import icu.nullptr.hidemyapplist.ui.adapter.AppManageAdapter
import icu.nullptr.hidemyapplist.ui.util.navController
import org.frknkrc44.hma_oss.R
class AppManageFragment : AppSelectFragment() {

View file

@ -10,14 +10,14 @@ import androidx.lifecycle.flowWithLifecycle
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import by.kirich1409.viewbindingdelegate.viewBinding
import org.frknkrc44.hma_oss.R
import org.frknkrc44.hma_oss.databinding.FragmentAppSelectBinding
import icu.nullptr.hidemyapplist.service.PrefManager
import icu.nullptr.hidemyapplist.ui.adapter.AppSelectAdapter
import icu.nullptr.hidemyapplist.ui.util.navController
import icu.nullptr.hidemyapplist.ui.util.setupToolbar
import icu.nullptr.hidemyapplist.util.PackageHelper
import kotlinx.coroutines.launch
import org.frknkrc44.hma_oss.R
import org.frknkrc44.hma_oss.databinding.FragmentAppSelectBinding
abstract class AppSelectFragment : Fragment(R.layout.fragment_app_select) {

View file

@ -9,17 +9,20 @@ import androidx.fragment.app.clearFragmentResultListener
import androidx.fragment.app.setFragmentResultListener
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.navArgs
import androidx.preference.*
import androidx.preference.Preference
import androidx.preference.PreferenceDataStore
import androidx.preference.PreferenceFragmentCompat
import androidx.preference.SwitchPreference
import by.kirich1409.viewbindingdelegate.viewBinding
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import org.frknkrc44.hma_oss.R
import org.frknkrc44.hma_oss.databinding.FragmentSettingsBinding
import icu.nullptr.hidemyapplist.common.JsonConfig
import icu.nullptr.hidemyapplist.service.ConfigManager
import icu.nullptr.hidemyapplist.ui.util.navController
import icu.nullptr.hidemyapplist.ui.util.setupToolbar
import icu.nullptr.hidemyapplist.ui.viewmodel.AppSettingsViewModel
import icu.nullptr.hidemyapplist.util.PackageHelper
import org.frknkrc44.hma_oss.R
import org.frknkrc44.hma_oss.databinding.FragmentSettingsBinding
class AppSettingsFragment : Fragment(R.layout.fragment_settings) {

View file

@ -2,8 +2,7 @@ package icu.nullptr.hidemyapplist.ui.fragment
import android.annotation.SuppressLint
import android.content.Intent
import android.net.Uri
import android.os.Build
import android.icu.util.Calendar
import android.os.Bundle
import android.view.View
import androidx.activity.result.contract.ActivityResultContracts
@ -13,9 +12,6 @@ import androidx.navigation.fragment.FragmentNavigatorExtras
import by.kirich1409.viewbindingdelegate.viewBinding
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.transition.MaterialElevationScale
import org.frknkrc44.hma_oss.BuildConfig
import org.frknkrc44.hma_oss.R
import org.frknkrc44.hma_oss.databinding.FragmentHomeBinding
import icu.nullptr.hidemyapplist.hmaApp
import icu.nullptr.hidemyapplist.service.ConfigManager
import icu.nullptr.hidemyapplist.service.ServiceClient
@ -25,6 +21,9 @@ import icu.nullptr.hidemyapplist.ui.util.ThemeUtils.themeColor
import icu.nullptr.hidemyapplist.ui.util.makeToast
import icu.nullptr.hidemyapplist.ui.util.navController
import icu.nullptr.hidemyapplist.ui.util.setupToolbar
import org.frknkrc44.hma_oss.BuildConfig
import org.frknkrc44.hma_oss.R
import org.frknkrc44.hma_oss.databinding.FragmentHomeBinding
import java.io.IOException
class HomeFragment : Fragment(R.layout.fragment_home) {
@ -94,21 +93,18 @@ class HomeFragment : Fragment(R.layout.fragment_home) {
binding.appManage.setOnClickListener {
navController.navigate(R.id.nav_app_manage)
}
binding.detectionTest.setOnClickListener {
val intent = hmaApp.packageManager.getLaunchIntentForPackage("icu.nullptr.applistdetector")
if (intent == null) {
MaterialAlertDialogBuilder(requireContext())
.setTitle(R.string.home_download_test_app_title)
.setMessage(R.string.home_download_test_app_message)
.setNegativeButton(android.R.string.cancel, null)
.setPositiveButton(android.R.string.ok) { _, _ ->
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/frknkrc44/HMA-OSS")))
}
.show()
} else startActivity(intent)
binding.howToUse.setOnClickListener {
MaterialAlertDialogBuilder(requireContext())
.setTitle(R.string.about_how_to_use_title)
.setMessage(
getString(R.string.about_how_to_use_description_1) +
"\n\n" +
getString(R.string.about_how_to_use_description_2))
.setNegativeButton(android.R.string.ok, null)
.show()
}
binding.backupConfig.setOnClickListener {
backupSAFLauncher.launch("HMA_Config.json")
backupSAFLauncher.launch("HMA_Config_${Calendar.getInstance().timeInMillis}.json")
}
binding.restoreConfig.setOnClickListener {
restoreSAFLauncher.launch("application/json")
@ -131,10 +127,8 @@ class HomeFragment : Fragment(R.layout.fragment_home) {
else -> themeColor(android.R.attr.colorPrimary)
}
binding.statusCard.setCardBackgroundColor(color)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
binding.statusCard.outlineAmbientShadowColor = color
binding.statusCard.outlineSpotShadowColor = color
}
binding.statusCard.outlineAmbientShadowColor = color
binding.statusCard.outlineSpotShadowColor = color
if (hmaApp.isHooked) {
binding.moduleStatusIcon.setImageResource(R.drawable.outline_done_all_24)
val versionNameSimple = BuildConfig.VERSION_NAME.substringBefore(".r")

View file

@ -9,8 +9,6 @@ import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import by.kirich1409.viewbindingdelegate.viewBinding
import org.frknkrc44.hma_oss.R
import org.frknkrc44.hma_oss.databinding.FragmentLogsBinding
import icu.nullptr.hidemyapplist.hmaApp
import icu.nullptr.hidemyapplist.service.PrefManager
import icu.nullptr.hidemyapplist.service.ServiceClient
@ -18,8 +16,11 @@ import icu.nullptr.hidemyapplist.ui.adapter.LogAdapter
import icu.nullptr.hidemyapplist.ui.util.makeToast
import icu.nullptr.hidemyapplist.ui.util.setupToolbar
import kotlinx.coroutines.launch
import org.frknkrc44.hma_oss.R
import org.frknkrc44.hma_oss.databinding.FragmentLogsBinding
import java.text.SimpleDateFormat
import java.util.*
import java.util.Date
import java.util.Locale
class LogsFragment : Fragment(R.layout.fragment_logs) {

View file

@ -15,8 +15,6 @@ import androidx.preference.PreferenceFragmentCompat
import androidx.preference.SwitchPreference
import by.kirich1409.viewbindingdelegate.viewBinding
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import org.frknkrc44.hma_oss.R
import org.frknkrc44.hma_oss.databinding.FragmentSettingsBinding
import icu.nullptr.hidemyapplist.common.CommonUtils
import icu.nullptr.hidemyapplist.common.Constants
import icu.nullptr.hidemyapplist.hmaApp
@ -27,9 +25,11 @@ import icu.nullptr.hidemyapplist.ui.util.makeToast
import icu.nullptr.hidemyapplist.ui.util.setupToolbar
import icu.nullptr.hidemyapplist.util.LangList
import icu.nullptr.hidemyapplist.util.SuUtils
import org.frknkrc44.hma_oss.R
import org.frknkrc44.hma_oss.databinding.FragmentSettingsBinding
import rikka.material.app.LocaleDelegate
import rikka.preference.SimpleMenuPreference
import java.util.*
import java.util.Locale
class SettingsFragment : Fragment(R.layout.fragment_settings), PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {

View file

@ -11,13 +11,13 @@ import androidx.navigation.fragment.FragmentNavigatorExtras
import androidx.recyclerview.widget.LinearLayoutManager
import by.kirich1409.viewbindingdelegate.viewBinding
import com.google.android.material.transition.MaterialContainerTransform
import org.frknkrc44.hma_oss.R
import org.frknkrc44.hma_oss.databinding.FragmentTemplateManageBinding
import icu.nullptr.hidemyapplist.common.JsonConfig
import icu.nullptr.hidemyapplist.service.ConfigManager
import icu.nullptr.hidemyapplist.ui.adapter.TemplateAdapter
import icu.nullptr.hidemyapplist.ui.util.navController
import icu.nullptr.hidemyapplist.ui.util.setupToolbar
import org.frknkrc44.hma_oss.R
import org.frknkrc44.hma_oss.databinding.FragmentTemplateManageBinding
class TemplateManageFragment : Fragment(R.layout.fragment_template_manage) {

View file

@ -5,19 +5,23 @@ import android.os.Bundle
import android.view.View
import androidx.activity.addCallback
import androidx.core.widget.addTextChangedListener
import androidx.fragment.app.*
import androidx.fragment.app.Fragment
import androidx.fragment.app.clearFragmentResultListener
import androidx.fragment.app.setFragmentResult
import androidx.fragment.app.setFragmentResultListener
import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.navArgs
import by.kirich1409.viewbindingdelegate.viewBinding
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.transition.MaterialContainerTransform
import org.frknkrc44.hma_oss.R
import org.frknkrc44.hma_oss.databinding.FragmentTemplateSettingsBinding
import icu.nullptr.hidemyapplist.service.ConfigManager
import icu.nullptr.hidemyapplist.ui.util.navController
import icu.nullptr.hidemyapplist.ui.util.setupToolbar
import icu.nullptr.hidemyapplist.ui.viewmodel.TemplateSettingsViewModel
import kotlinx.coroutines.launch
import org.frknkrc44.hma_oss.R
import org.frknkrc44.hma_oss.databinding.FragmentTemplateSettingsBinding
class TemplateSettingsFragment : Fragment(R.layout.fragment_template_settings) {

View file

@ -1,6 +1,5 @@
package icu.nullptr.hidemyapplist.ui.util
import android.os.Build
import android.view.Menu
import android.view.MenuInflater
import android.view.MenuItem
@ -25,7 +24,7 @@ fun Fragment.setupToolbar(
navigationOnClick?.let { toolbar.setNavigationOnClickListener(it) }
navigationIcon?.let { toolbar.setNavigationIcon(navigationIcon) }
toolbar.title = title
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) toolbar.tooltipText = title
toolbar.tooltipText = title
if (menuRes != null) {
val menuProvider = object : MenuProvider {
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {

View file

@ -8,8 +8,8 @@ import androidx.annotation.ColorRes
import androidx.annotation.StyleRes
import androidx.fragment.app.Fragment
import com.google.android.material.color.DynamicColors
import org.frknkrc44.hma_oss.R
import icu.nullptr.hidemyapplist.service.PrefManager
import org.frknkrc44.hma_oss.R
import rikka.core.util.ResourceUtils
object ThemeUtils {

View file

@ -5,8 +5,8 @@ import android.util.AttributeSet
import android.widget.LinearLayout
import by.kirich1409.viewbindingdelegate.CreateMethod
import by.kirich1409.viewbindingdelegate.viewBinding
import org.frknkrc44.hma_oss.databinding.AppItemViewBinding
import icu.nullptr.hidemyapplist.util.PackageHelper
import org.frknkrc44.hma_oss.databinding.AppItemViewBinding
class AppItemView @JvmOverloads constructor(
context: Context,

Some files were not shown because too many files have changed in this diff Show more