diff --git a/.changelog/lang_zh-Hans.json b/.changelog/lang_zh-Hans.json index a84f7d82..3e0c2c99 100644 --- a/.changelog/lang_zh-Hans.json +++ b/.changelog/lang_zh-Hans.json @@ -11,7 +11,8 @@ ], "improvement": [ "脚本项目识别在 project.json 损坏情况下尽可能还原关键信息", - "打包单文件时自动生成的包名后缀支持将简体中文自动转换为拼音" + "打包单文件时自动生成的包名后缀支持将简体中文自动转换为拼音", + "支持更多的包名前缀省略形式 (如 RecyclerView, Snackbar 等)" ] }, "v6.6.0": { diff --git a/app/src/main/java/org/autojs/autojs/core/automator/filter/ClassNameFilter.kt b/app/src/main/java/org/autojs/autojs/core/automator/filter/ClassNameFilter.kt index beeb3e9a..5748e622 100644 --- a/app/src/main/java/org/autojs/autojs/core/automator/filter/ClassNameFilter.kt +++ b/app/src/main/java/org/autojs/autojs/core/automator/filter/ClassNameFilter.kt @@ -16,17 +16,54 @@ object ClassNameFilter { } + val extendedClassNameMap = mapOf( + "CardView" to "androidx.cardview.widget.CardView", + "ConstraintLayout" to "androidx.constraintlayout.widget.ConstraintLayout", + "CoordinatorLayout" to "androidx.coordinatorlayout.widget.CoordinatorLayout", + "NestedScrollView" to "androidx.core.widget.NestedScrollView", + "DrawerLayout" to "androidx.drawerlayout.widget.DrawerLayout", + "FragmentContainerView" to "androidx.fragment.app.FragmentContainerView", + "RecyclerView" to "androidx.recyclerview.widget.RecyclerView", + "SwipeRefreshLayout" to "androidx.swiperefreshlayout.widget.SwipeRefreshLayout", + "ViewPager" to "androidx.viewpager.widget.ViewPager", + "ViewPager2" to "androidx.viewpager2.widget.ViewPager2", + "AppBarLayout" to "com.google.android.material.appbar.AppBarLayout", + "MaterialToolbar" to "com.google.android.material.appbar.MaterialToolbar", + "BottomNavigationView" to "com.google.android.material.bottomnavigation.BottomNavigationView", + "BottomSheetDialog" to "com.google.android.material.bottomsheet.BottomSheetDialog", + "MaterialButton" to "com.google.android.material.button.MaterialButton", + "Chip" to "com.google.android.material.chip.Chip", + "MaterialCalendarGridView" to "com.google.android.material.datepicker.MaterialCalendarGridView", + "FloatingActionButton" to "com.google.android.material.floatingactionbutton.FloatingActionButton", + "BaselineLayout" to "com.google.android.material.internal.BaselineLayout", + "CheckableImageButton" to "com.google.android.material.internal.CheckableImageButton", + "ClippableRoundedCornerLayout" to "com.google.android.material.internal.ClippableRoundedCornerLayout", + "NavigationMenuItemView" to "com.google.android.material.internal.NavigationMenuItemView", + "NavigationMenuView" to "com.google.android.material.internal.NavigationMenuView", + "TouchObserverFrameLayout" to "com.google.android.material.internal.TouchObserverFrameLayout", + "VisibilityAwareImageButton" to "com.google.android.material.internal.VisibilityAwareImageButton", + "NavigationView" to "com.google.android.material.navigation.NavigationView", + "Snackbar" to "com.google.android.material.snackbar.Snackbar", + "TabLayout" to "com.google.android.material.tabs.TabLayout", + "TextInputEditText" to "com.google.android.material.textfield.TextInputEditText", + "TextInputLayout" to "com.google.android.material.textfield.TextInputLayout", + "ChipTextInputComboView" to "com.google.android.material.timepicker.ChipTextInputComboView", + "ClockFaceView" to "com.google.android.material.timepicker.ClockFaceView", + "ClockHandView" to "com.google.android.material.timepicker.ClockHandView", + "TimePickerView" to "com.google.android.material.timepicker.TimePickerView", + ) + @Suppress("CovariantEquals") fun equals(text: String) = when (text.contains(".")) { true -> text - else -> "android.widget.$text" + else -> extendedClassNameMap[text] ?: "android.widget.$text" }.let { StringEqualsFilter(it, CLASS_NAME_GETTER) } fun contains(str: String) = StringContainsFilter(str, CLASS_NAME_GETTER) fun startsWith(prefix: String) = when (prefix.contains(".")) { true -> prefix - else -> "android.widget.$prefix" + else -> extendedClassNameMap[prefix] ?: "android.widget.$prefix" }.let { StringStartsWithFilter(it, CLASS_NAME_GETTER) } fun endsWith(suffix: String) = StringEndsWithFilter(suffix, CLASS_NAME_GETTER) diff --git a/app/src/main/java/org/autojs/autojs/core/ui/inflater/DynamicLayoutInflater.kt b/app/src/main/java/org/autojs/autojs/core/ui/inflater/DynamicLayoutInflater.kt index e6a775fe..ce29adc7 100644 --- a/app/src/main/java/org/autojs/autojs/core/ui/inflater/DynamicLayoutInflater.kt +++ b/app/src/main/java/org/autojs/autojs/core/ui/inflater/DynamicLayoutInflater.kt @@ -12,6 +12,7 @@ import android.view.ViewGroup import android.widget.Space import org.autojs.autojs.annotation.ScriptInterface import org.autojs.autojs.app.GlobalAppContext +import org.autojs.autojs.core.automator.filter.ClassNameFilter import org.autojs.autojs.core.ui.inflater.inflaters.BaseViewInflater import org.autojs.autojs.core.ui.inflater.inflaters.JsActionMenuViewInflater import org.autojs.autojs.core.ui.inflater.inflaters.JsAppBarLayoutInflater @@ -355,7 +356,7 @@ open class DynamicLayoutInflater { return View(context) } if (!niceName.contains(".") && !androidWidgetPrefixBlacklist.contains(niceName)) { - niceName = "android.widget.$niceName" + niceName = ClassNameFilter.extendedClassNameMap[niceName] ?: "android.widget.$niceName" } val creator = mViewCreators[niceName] if (creator != null) { diff --git a/version.properties b/version.properties index b66bcfda..9e9ab03a 100644 --- a/version.properties +++ b/version.properties @@ -1,5 +1,5 @@ -#Thu Dec 05 01:03:06 CST 2024 -BUILD_TIME=1733331786695 +#Thu Dec 05 01:41:07 CST 2024 +BUILD_TIME=1733334067701 COMPILE_SDK_VERSION=34 JAVA_VERSION=23 JAVA_VERSION_MIN_RADICAL=0