Skip to content

Commit

Permalink
Ensure package info validation in apps props dialog. (#790)
Browse files Browse the repository at this point in the history
  • Loading branch information
zhaobozhen committed Jun 1, 2023
1 parent 8be68be commit cd30b0e
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ import com.absinthe.libchecker.ui.base.BaseAlertDialogBuilder
import com.absinthe.libchecker.ui.fragment.detail.AppBundleBottomSheetDialogFragment
import com.absinthe.libchecker.ui.fragment.detail.AppInstallSourceBSDFragment
import com.absinthe.libchecker.ui.fragment.detail.AppPropBottomSheetDialogFragment
import com.absinthe.libchecker.ui.fragment.detail.EXTRA_PACKAGE_INFO
import com.absinthe.libchecker.utils.PackageUtils

object FeaturesDialog {

Expand Down Expand Up @@ -111,9 +113,13 @@ object FeaturesDialog {
}

fun showAppPropDialog(activity: FragmentActivity, packageName: String) {
val pi = runCatching {
PackageUtils.getPackageInfo(packageName)
}.getOrNull() ?: return

AppPropBottomSheetDialogFragment().apply {
arguments = bundleOf(
EXTRA_PACKAGE_NAME to packageName
EXTRA_PACKAGE_INFO to pi
)
show(activity.supportFragmentManager, AppPropBottomSheetDialogFragment::class.java.name)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,46 +1,48 @@
package com.absinthe.libchecker.ui.fragment.detail

import android.content.pm.PackageInfo
import com.absinthe.libchecker.compat.BundleCompat
import com.absinthe.libchecker.model.AppPropItem
import com.absinthe.libchecker.ui.detail.EXTRA_PACKAGE_NAME
import com.absinthe.libchecker.utils.PackageUtils
import com.absinthe.libchecker.utils.manifest.ApplicationReader
import com.absinthe.libchecker.view.detail.AppPropsBottomSheetView
import com.absinthe.libraries.utils.base.BaseBottomSheetViewDialogFragment
import com.absinthe.libraries.utils.view.BottomSheetHeaderView
import java.io.File
import pxb.android.axml.ValueWrapper

const val EXTRA_PACKAGE_INFO = "EXTRA_PACKAGE_INFO"

class AppPropBottomSheetDialogFragment :
BaseBottomSheetViewDialogFragment<AppPropsBottomSheetView>() {

private val packageName by lazy { arguments?.getString(EXTRA_PACKAGE_NAME) }
private val packageInfo by lazy {
BundleCompat.getParcelable<PackageInfo>(requireArguments(), EXTRA_PACKAGE_INFO)!!
}

override fun initRootView(): AppPropsBottomSheetView =
AppPropsBottomSheetView(requireContext(), PackageUtils.getPackageInfo(packageName!!))
AppPropsBottomSheetView(requireContext(), packageInfo)

override fun getHeaderView(): BottomSheetHeaderView = root.getHeaderView()

override fun init() {
root.post {
maxPeekSize = ((dialog?.window?.decorView?.height ?: 0) * 0.67).toInt()
}
packageName?.let {
val packageInfo = PackageUtils.getPackageInfo(it)
val propsMap =
ApplicationReader.getManifestProperties(File(packageInfo.applicationInfo.sourceDir))
val bundleList = if (propsMap.isNullOrEmpty()) {
emptyList()
} else {
propsMap.map { prop ->
AppPropItem(
key = prop.key,
value = when (val value = prop.value) {
is pxb.android.axml.ValueWrapper -> value.ref.toString()
else -> value?.toString().orEmpty()
}
)
}.sortedBy { item -> item.key }
}
root.adapter.setList(bundleList)
val propsMap =
ApplicationReader.getManifestProperties(File(packageInfo.applicationInfo.sourceDir))
val bundleList = if (propsMap.isNullOrEmpty()) {
emptyList()
} else {
propsMap.map { prop ->
AppPropItem(
key = prop.key,
value = when (val value = prop.value) {
is ValueWrapper -> value.ref.toString()
else -> value?.toString().orEmpty()
}
)
}.sortedBy { item -> item.key }
}
root.adapter.setList(bundleList)
}
}

0 comments on commit cd30b0e

Please sign in to comment.