From 99abe3cd1832d6bb6df3a3180a3144dd34f82a29 Mon Sep 17 00:00:00 2001 From: fankesyooni Date: Sun, 20 Apr 2025 05:32:06 +0800 Subject: [PATCH] Bump hikage-core, hikage-extension, hikage-extension-betterandroid, hikage-extension-compose, hikage-compiler, hikage-widget-androidx, hikage-widget-material version to 1.0.0 --- .idea/AndroidProjectSystem.xml | 6 + .idea/icon.png | Bin 4528 -> 0 bytes .idea/icon.svg | 11 + .idea/kotlinc.xml | 2 +- .idea/runConfigurations.xml | 17 + .idea/vcs.xml | 6 + README-zh-CN.md | 193 +- README.md | 199 +- .../res/drawable/ic_launcher_foreground.xml | 31 - app/src/main/res/layout/activity_main.xml | 30 - app/src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 838 -> 0 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 2544 -> 0 bytes app/src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 642 -> 0 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 1626 -> 0 bytes .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin 1164 -> 0 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 3596 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 1836 -> 0 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 5612 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 2416 -> 0 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 7900 -> 0 bytes app/src/main/res/values-night/themes.xml | 8 - .../res/values/ic_launcher_background.xml | 4 - app/src/main/res/values/strings.xml | 3 - app/src/main/res/values/themes.xml | 12 - build.gradle.kts | 73 + docs-source/.gitignore | 4 + docs-source/.vscode/settings.json | 3 + docs-source/build-dokka.sh | 2 + docs-source/package.json | 17 + docs-source/src/.vuepress/config.ts | 64 + docs-source/src/.vuepress/configs/template.ts | 151 ++ docs-source/src/.vuepress/configs/utils.ts | 39 + .../src/.vuepress/public/images/logo.svg | 11 + .../.vuepress/public/images/nagasaki_soyo.png | Bin 0 -> 45194 bytes docs-source/src/.vuepress/styles/index.scss | 179 ++ docs-source/src/en/about/about.md | 27 + docs-source/src/en/about/changelog.md | 59 + docs-source/src/en/about/contacts.md | 16 + docs-source/src/en/about/future.md | 75 + docs-source/src/en/config/r8-proguard.md | 18 + docs-source/src/en/guide/home.md | 120 + docs-source/src/en/guide/quick-start.md | 89 + docs-source/src/en/index.md | 65 + docs-source/src/en/library/hikage-compiler.md | 171 ++ docs-source/src/en/library/hikage-core.md | 524 +++++ .../library/hikage-extension-betterandroid.md | 74 + .../en/library/hikage-extension-compose.md | 89 + .../src/en/library/hikage-extension.md | 210 ++ .../src/en/library/hikage-widget-androidx.md | 64 + .../src/en/library/hikage-widget-material.md | 80 + docs-source/src/index.md | 17 + docs-source/src/zh-cn/about/about.md | 27 + docs-source/src/zh-cn/about/changelog.md | 51 + docs-source/src/zh-cn/about/contacts.md | 15 + docs-source/src/zh-cn/about/future.md | 73 + docs-source/src/zh-cn/config/r8-proguard.md | 17 + docs-source/src/zh-cn/guide/home.md | 109 + docs-source/src/zh-cn/guide/quick-start.md | 85 + docs-source/src/zh-cn/index.md | 65 + .../src/zh-cn/library/hikage-compiler.md | 169 ++ docs-source/src/zh-cn/library/hikage-core.md | 502 +++++ .../library/hikage-extension-betterandroid.md | 74 + .../zh-cn/library/hikage-extension-compose.md | 87 + .../src/zh-cn/library/hikage-extension.md | 208 ++ .../zh-cn/library/hikage-widget-androidx.md | 64 + .../zh-cn/library/hikage-widget-material.md | 80 + docs-source/yarn.lock | 2004 +++++++++++++++++ gradle.properties | 43 +- .../sweet-dependency-config.yaml | 108 +- gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 43705 bytes gradle/wrapper/gradle-wrapper.properties | 6 +- gradlew | 296 ++- gradlew.bat | 37 +- hikage-compiler/build.gradle.kts | 32 + .../hikage/compiler/DeclaredSymbol.kt | 64 + .../hikage/compiler/HikageProcessor.kt | 51 + .../compiler/extension/HikageProcessor.kt | 74 + .../subprocessor/HikageViewGenerator.kt | 393 ++++ .../subprocessor/base/BaseSymbolProcessor.kt | 33 + hikage-core-lint/build.gradle.kts | 46 + .../hikage/core/lint/DeclaredSymbol.kt | 31 + .../hikage/core/lint/HikageIssueRegistry.kt | 52 + .../detector/HikageSafeTypeCastDetector.kt | 111 + .../detector/HikageableBeyondScopeDetector.kt | 133 ++ .../detector/HikageableFunctionsDetector.kt | 99 + .../lint/detector/WidgetsUsageDetector.kt | 207 ++ .../core/lint/detector/entity/ReportDetail.kt | 29 + .../core/lint/detector/extension/Detector.kt | 27 + hikage-core/build.gradle.kts | 54 + hikage-core/consumer-rules.pro | 0 hikage-core/proguard-rules.pro | 21 + .../hikage/ExampleInstrumentedTest.kt | 25 + hikage-core/src/main/AndroidManifest.xml | 2 + .../hikage/annotation/HikageView.kt | 57 + .../annotation/HikageViewDeclaration.kt | 61 + .../hikage/annotation/Hikageable.kt | 45 + .../hikage/bypass/HikageAttrsView.kt | 35 + .../hikage/bypass/XmlBlockBypass.kt | 178 ++ .../com/highcapable/hikage/core/Hikage.kt | 953 ++++++++ .../hikage/core/base/Exceptions.kt | 36 + .../hikage/core/base/HikageFactory.kt | 106 + .../hikage/core/base/Hikageable.kt | 101 + .../hikage/core/builder/HikageBuilder.kt | 106 + .../hikage/core/extension/ResourcesScope.kt | 89 + .../hikage/core/preview/HikagePreview.kt | 53 + .../hikage/widget/android/Widgets.kt | 216 ++ .../res/layout/layout_hikage_attrs_view.xml | 4 + .../com/highcapable/hikage/ExampleUnitTest.kt | 18 + .../build.gradle.kts | 22 +- .../consumer-rules.pro | 0 .../proguard-rules.pro | 21 + .../hikage/ExampleInstrumentedTest.kt | 25 + .../src/main/AndroidManifest.xml | 2 + .../component/adapter/CommonAdapterBuilder.kt | 76 + .../component/adapter/PagerAdapterBuilder.kt | 87 + .../adapter/RecyclerAdapterBuilder.kt | 163 ++ .../viewholder/HikageHolderDelegate.kt | 37 + .../com/highcapable/hikage/ExampleUnitTest.kt | 18 + hikage-extension-compose/build.gradle.kts | 52 + hikage-extension-compose/consumer-rules.pro | 0 hikage-extension-compose/proguard-rules.pro | 21 + .../hikage/ExampleInstrumentedTest.kt | 25 + .../src/main/AndroidManifest.xml | 2 + .../extension/androidx/compose/ComposeView.kt | 62 + .../extension/androidx/compose/HikageView.kt | 99 + .../com/highcapable/hikage/ExampleUnitTest.kt | 18 + hikage-extension/build.gradle.kts | 51 + hikage-extension/consumer-rules.pro | 0 hikage-extension/proguard-rules.pro | 21 + .../hikage/ExampleInstrumentedTest.kt | 25 + hikage-extension/src/main/AndroidManifest.xml | 2 + .../highcapable/hikage/extension/Activity.kt | 56 + .../highcapable/hikage/extension/Dialog.kt | 156 ++ .../hikage/extension/PopupWindow.kt | 71 + .../highcapable/hikage/extension/ViewGroup.kt | 58 + .../highcapable/hikage/extension/Window.kt | 56 + .../extension/widget/ConstraintLayout.kt | 96 + .../hikage/extension/widget/RelativeLayout.kt | 160 ++ .../com/highcapable/hikage/ExampleUnitTest.kt | 18 + hikage-widget-androidx/build.gradle.kts | 56 + hikage-widget-androidx/consumer-rules.pro | 0 hikage-widget-androidx/proguard-rules.pro | 21 + .../hikage/ExampleInstrumentedTest.kt | 25 + .../src/main/AndroidManifest.xml | 2 + .../widget/androidx/appcompat/Widgets.kt | 103 + .../widget/androidx/cardview/CardView.kt | 32 + .../constraintlayout/ConstraintLayout.kt | 31 + .../coordinatorlayout/CoordinatorLayout.kt | 31 + .../hikage/widget/androidx/core/Widgets.kt | 36 + .../androidx/drawerlayout/DrawerLayout.kt | 31 + .../androidx/recyclerview/RecyclerView.kt | 31 + .../slidingpanelayout/SlidingPaneLayout.kt | 31 + .../swiperefreshlayout/SwipeRefreshLayout.kt | 31 + .../widget/androidx/viewpager/ViewPager.kt | 35 + .../com/highcapable/hikage/ExampleUnitTest.kt | 18 + hikage-widget-material/build.gradle.kts | 47 + hikage-widget-material/consumer-rules.pro | 0 hikage-widget-material/proguard-rules.pro | 21 + .../hikage/ExampleInstrumentedTest.kt | 25 + .../src/main/AndroidManifest.xml | 2 + .../google/material/appbar/AppBarLayout.kt | 40 + .../material/bottomappbar/BottomAppBar.kt | 32 + .../bottomnavigation/BottomNavigationView.kt | 32 + .../bottomsheet/BottomSheetDragHandleView.kt | 31 + .../google/material/button/MaterialButton.kt | 36 + .../google/material/card/MaterialCardView.kt | 32 + .../material/checkbox/MaterialCheckBox.kt | 31 + .../widget/google/material/chip/Chip.kt | 35 + .../material/circularreveal/CircularLayout.kt | 56 + .../material/divider/MaterialDivider.kt | 31 + .../FloatingActionButton.kt | 35 + .../material/imageview/ShapeableImageView.kt | 31 + .../material/materialswitch/MaterialSwitch.kt | 31 + .../material/navigation/NavigationView.kt | 32 + .../navigationrail/NavigationRailView.kt | 32 + .../progressindicator/ProgressIndicator.kt | 35 + .../radiobutton/MaterialRadioButton.kt | 31 + .../google/material/search/SearchBar.kt | 37 + .../widget/google/material/slider/Slider.kt | 35 + .../material/switchmaterial/SwitchMaterial.kt | 31 + .../widget/google/material/tabs/TabLayout.kt | 36 + .../material/textfield/TextInputLayout.kt | 40 + .../material/textview/MaterialTextView.kt | 31 + .../com/highcapable/hikage/ExampleUnitTest.kt | 18 + img-src/icon.png | Bin 7190 -> 0 bytes img-src/icon.svg | 11 + img-src/nagasaki_soyo.png | Bin 0 -> 45194 bytes samples/app/build.gradle.kts | 60 + {app => samples/app}/proguard-rules.pro | 16 +- .../hikage/demo/ExampleInstrumentedTest.kt | 0 .../app}/src/main/AndroidManifest.xml | 6 +- .../app/src/main/ic_launcher-playstore.png | Bin 0 -> 13469 bytes .../com/highcapable/hikage/demo/DemoApp.kt | 33 + .../hikage/demo/ui/MainActivity.kt | 177 ++ .../hikage/demo/ui/base/BaseActivity.kt | 13 +- .../hikage/demo/ui/preview/SamplePreview.kt | 59 + .../hikage/demo/ui/widget/CheckableChip.kt | 41 + .../res/drawable/ic_launcher_foreground.xml | 41 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 +- .../mipmap-anydpi-v26/ic_launcher_round.xml | 6 +- .../src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 0 -> 1044 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 0 -> 2870 bytes .../src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 0 -> 766 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 0 -> 1832 bytes .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin 0 -> 1572 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 0 -> 3940 bytes .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 0 -> 2286 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 0 -> 6282 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 0 -> 3088 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 0 -> 8662 bytes .../app/src/main/res/values-night/themes.xml | 4 + .../src/main/res/values-zh-rCN/strings.xml | 15 + .../app}/src/main/res/values/colors.xml | 0 .../res/values/ic_launcher_background.xml | 4 + samples/app/src/main/res/values/strings.xml | 14 + samples/app/src/main/res/values/themes.xml | 6 + .../hikage/demo/ExampleUnitTest.kt | 0 settings.gradle.kts | 27 +- 218 files changed, 13256 insertions(+), 627 deletions(-) create mode 100644 .idea/AndroidProjectSystem.xml delete mode 100644 .idea/icon.png create mode 100644 .idea/icon.svg create mode 100644 .idea/runConfigurations.xml create mode 100644 .idea/vcs.xml delete mode 100644 app/src/main/res/drawable/ic_launcher_foreground.xml delete mode 100644 app/src/main/res/layout/activity_main.xml delete mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.webp delete mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_round.webp delete mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.webp delete mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_round.webp delete mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.webp delete mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp delete mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.webp delete mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp delete mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp delete mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp delete mode 100644 app/src/main/res/values-night/themes.xml delete mode 100644 app/src/main/res/values/ic_launcher_background.xml delete mode 100644 app/src/main/res/values/strings.xml delete mode 100644 app/src/main/res/values/themes.xml create mode 100644 docs-source/.gitignore create mode 100644 docs-source/.vscode/settings.json create mode 100644 docs-source/build-dokka.sh create mode 100644 docs-source/package.json create mode 100644 docs-source/src/.vuepress/config.ts create mode 100644 docs-source/src/.vuepress/configs/template.ts create mode 100644 docs-source/src/.vuepress/configs/utils.ts create mode 100644 docs-source/src/.vuepress/public/images/logo.svg create mode 100644 docs-source/src/.vuepress/public/images/nagasaki_soyo.png create mode 100644 docs-source/src/.vuepress/styles/index.scss create mode 100644 docs-source/src/en/about/about.md create mode 100644 docs-source/src/en/about/changelog.md create mode 100644 docs-source/src/en/about/contacts.md create mode 100644 docs-source/src/en/about/future.md create mode 100644 docs-source/src/en/config/r8-proguard.md create mode 100644 docs-source/src/en/guide/home.md create mode 100644 docs-source/src/en/guide/quick-start.md create mode 100644 docs-source/src/en/index.md create mode 100644 docs-source/src/en/library/hikage-compiler.md create mode 100644 docs-source/src/en/library/hikage-core.md create mode 100644 docs-source/src/en/library/hikage-extension-betterandroid.md create mode 100644 docs-source/src/en/library/hikage-extension-compose.md create mode 100644 docs-source/src/en/library/hikage-extension.md create mode 100644 docs-source/src/en/library/hikage-widget-androidx.md create mode 100644 docs-source/src/en/library/hikage-widget-material.md create mode 100644 docs-source/src/index.md create mode 100644 docs-source/src/zh-cn/about/about.md create mode 100644 docs-source/src/zh-cn/about/changelog.md create mode 100644 docs-source/src/zh-cn/about/contacts.md create mode 100644 docs-source/src/zh-cn/about/future.md create mode 100644 docs-source/src/zh-cn/config/r8-proguard.md create mode 100644 docs-source/src/zh-cn/guide/home.md create mode 100644 docs-source/src/zh-cn/guide/quick-start.md create mode 100644 docs-source/src/zh-cn/index.md create mode 100644 docs-source/src/zh-cn/library/hikage-compiler.md create mode 100644 docs-source/src/zh-cn/library/hikage-core.md create mode 100644 docs-source/src/zh-cn/library/hikage-extension-betterandroid.md create mode 100644 docs-source/src/zh-cn/library/hikage-extension-compose.md create mode 100644 docs-source/src/zh-cn/library/hikage-extension.md create mode 100644 docs-source/src/zh-cn/library/hikage-widget-androidx.md create mode 100644 docs-source/src/zh-cn/library/hikage-widget-material.md create mode 100644 docs-source/yarn.lock mode change 100644 => 100755 gradlew create mode 100644 hikage-compiler/build.gradle.kts create mode 100644 hikage-compiler/src/main/java/com/highcapable/hikage/compiler/DeclaredSymbol.kt create mode 100644 hikage-compiler/src/main/java/com/highcapable/hikage/compiler/HikageProcessor.kt create mode 100644 hikage-compiler/src/main/java/com/highcapable/hikage/compiler/extension/HikageProcessor.kt create mode 100644 hikage-compiler/src/main/java/com/highcapable/hikage/compiler/subprocessor/HikageViewGenerator.kt create mode 100644 hikage-compiler/src/main/java/com/highcapable/hikage/compiler/subprocessor/base/BaseSymbolProcessor.kt create mode 100644 hikage-core-lint/build.gradle.kts create mode 100644 hikage-core-lint/src/main/java/com/highcapable/hikage/core/lint/DeclaredSymbol.kt create mode 100644 hikage-core-lint/src/main/java/com/highcapable/hikage/core/lint/HikageIssueRegistry.kt create mode 100644 hikage-core-lint/src/main/java/com/highcapable/hikage/core/lint/detector/HikageSafeTypeCastDetector.kt create mode 100644 hikage-core-lint/src/main/java/com/highcapable/hikage/core/lint/detector/HikageableBeyondScopeDetector.kt create mode 100644 hikage-core-lint/src/main/java/com/highcapable/hikage/core/lint/detector/HikageableFunctionsDetector.kt create mode 100644 hikage-core-lint/src/main/java/com/highcapable/hikage/core/lint/detector/WidgetsUsageDetector.kt create mode 100644 hikage-core-lint/src/main/java/com/highcapable/hikage/core/lint/detector/entity/ReportDetail.kt create mode 100644 hikage-core-lint/src/main/java/com/highcapable/hikage/core/lint/detector/extension/Detector.kt create mode 100644 hikage-core/build.gradle.kts create mode 100644 hikage-core/consumer-rules.pro create mode 100644 hikage-core/proguard-rules.pro create mode 100644 hikage-core/src/androidTest/java/com/highcapable/hikage/ExampleInstrumentedTest.kt create mode 100644 hikage-core/src/main/AndroidManifest.xml create mode 100644 hikage-core/src/main/java/com/highcapable/hikage/annotation/HikageView.kt create mode 100644 hikage-core/src/main/java/com/highcapable/hikage/annotation/HikageViewDeclaration.kt create mode 100644 hikage-core/src/main/java/com/highcapable/hikage/annotation/Hikageable.kt create mode 100644 hikage-core/src/main/java/com/highcapable/hikage/bypass/HikageAttrsView.kt create mode 100644 hikage-core/src/main/java/com/highcapable/hikage/bypass/XmlBlockBypass.kt create mode 100644 hikage-core/src/main/java/com/highcapable/hikage/core/Hikage.kt create mode 100644 hikage-core/src/main/java/com/highcapable/hikage/core/base/Exceptions.kt create mode 100644 hikage-core/src/main/java/com/highcapable/hikage/core/base/HikageFactory.kt create mode 100644 hikage-core/src/main/java/com/highcapable/hikage/core/base/Hikageable.kt create mode 100644 hikage-core/src/main/java/com/highcapable/hikage/core/builder/HikageBuilder.kt create mode 100644 hikage-core/src/main/java/com/highcapable/hikage/core/extension/ResourcesScope.kt create mode 100644 hikage-core/src/main/java/com/highcapable/hikage/core/preview/HikagePreview.kt create mode 100644 hikage-core/src/main/java/com/highcapable/hikage/widget/android/Widgets.kt create mode 100644 hikage-core/src/main/res/layout/layout_hikage_attrs_view.xml create mode 100644 hikage-core/src/test/java/com/highcapable/hikage/ExampleUnitTest.kt rename {app => hikage-extension-betterandroid}/build.gradle.kts (70%) create mode 100644 hikage-extension-betterandroid/consumer-rules.pro create mode 100644 hikage-extension-betterandroid/proguard-rules.pro create mode 100644 hikage-extension-betterandroid/src/androidTest/java/com/highcapable/hikage/ExampleInstrumentedTest.kt create mode 100644 hikage-extension-betterandroid/src/main/AndroidManifest.xml create mode 100644 hikage-extension-betterandroid/src/main/java/com/highcapable/hikage/extension/betterandroid/ui/component/adapter/CommonAdapterBuilder.kt create mode 100644 hikage-extension-betterandroid/src/main/java/com/highcapable/hikage/extension/betterandroid/ui/component/adapter/PagerAdapterBuilder.kt create mode 100644 hikage-extension-betterandroid/src/main/java/com/highcapable/hikage/extension/betterandroid/ui/component/adapter/RecyclerAdapterBuilder.kt create mode 100644 hikage-extension-betterandroid/src/main/java/com/highcapable/hikage/extension/betterandroid/ui/component/adapter/viewholder/HikageHolderDelegate.kt create mode 100644 hikage-extension-betterandroid/src/test/java/com/highcapable/hikage/ExampleUnitTest.kt create mode 100644 hikage-extension-compose/build.gradle.kts create mode 100644 hikage-extension-compose/consumer-rules.pro create mode 100644 hikage-extension-compose/proguard-rules.pro create mode 100644 hikage-extension-compose/src/androidTest/java/com/highcapable/hikage/ExampleInstrumentedTest.kt create mode 100644 hikage-extension-compose/src/main/AndroidManifest.xml create mode 100644 hikage-extension-compose/src/main/java/com/highcapable/hikage/extension/androidx/compose/ComposeView.kt create mode 100644 hikage-extension-compose/src/main/java/com/highcapable/hikage/extension/androidx/compose/HikageView.kt create mode 100644 hikage-extension-compose/src/test/java/com/highcapable/hikage/ExampleUnitTest.kt create mode 100644 hikage-extension/build.gradle.kts create mode 100644 hikage-extension/consumer-rules.pro create mode 100644 hikage-extension/proguard-rules.pro create mode 100644 hikage-extension/src/androidTest/java/com/highcapable/hikage/ExampleInstrumentedTest.kt create mode 100644 hikage-extension/src/main/AndroidManifest.xml create mode 100644 hikage-extension/src/main/java/com/highcapable/hikage/extension/Activity.kt create mode 100644 hikage-extension/src/main/java/com/highcapable/hikage/extension/Dialog.kt create mode 100644 hikage-extension/src/main/java/com/highcapable/hikage/extension/PopupWindow.kt create mode 100644 hikage-extension/src/main/java/com/highcapable/hikage/extension/ViewGroup.kt create mode 100644 hikage-extension/src/main/java/com/highcapable/hikage/extension/Window.kt create mode 100644 hikage-extension/src/main/java/com/highcapable/hikage/extension/widget/ConstraintLayout.kt create mode 100644 hikage-extension/src/main/java/com/highcapable/hikage/extension/widget/RelativeLayout.kt create mode 100644 hikage-extension/src/test/java/com/highcapable/hikage/ExampleUnitTest.kt create mode 100644 hikage-widget-androidx/build.gradle.kts create mode 100644 hikage-widget-androidx/consumer-rules.pro create mode 100644 hikage-widget-androidx/proguard-rules.pro create mode 100644 hikage-widget-androidx/src/androidTest/java/com/highcapable/hikage/ExampleInstrumentedTest.kt create mode 100644 hikage-widget-androidx/src/main/AndroidManifest.xml create mode 100644 hikage-widget-androidx/src/main/java/com/highcapable/hikage/widget/androidx/appcompat/Widgets.kt create mode 100644 hikage-widget-androidx/src/main/java/com/highcapable/hikage/widget/androidx/cardview/CardView.kt create mode 100644 hikage-widget-androidx/src/main/java/com/highcapable/hikage/widget/androidx/constraintlayout/ConstraintLayout.kt create mode 100644 hikage-widget-androidx/src/main/java/com/highcapable/hikage/widget/androidx/coordinatorlayout/CoordinatorLayout.kt create mode 100644 hikage-widget-androidx/src/main/java/com/highcapable/hikage/widget/androidx/core/Widgets.kt create mode 100644 hikage-widget-androidx/src/main/java/com/highcapable/hikage/widget/androidx/drawerlayout/DrawerLayout.kt create mode 100644 hikage-widget-androidx/src/main/java/com/highcapable/hikage/widget/androidx/recyclerview/RecyclerView.kt create mode 100644 hikage-widget-androidx/src/main/java/com/highcapable/hikage/widget/androidx/slidingpanelayout/SlidingPaneLayout.kt create mode 100644 hikage-widget-androidx/src/main/java/com/highcapable/hikage/widget/androidx/swiperefreshlayout/SwipeRefreshLayout.kt create mode 100644 hikage-widget-androidx/src/main/java/com/highcapable/hikage/widget/androidx/viewpager/ViewPager.kt create mode 100644 hikage-widget-androidx/src/test/java/com/highcapable/hikage/ExampleUnitTest.kt create mode 100644 hikage-widget-material/build.gradle.kts create mode 100644 hikage-widget-material/consumer-rules.pro create mode 100644 hikage-widget-material/proguard-rules.pro create mode 100644 hikage-widget-material/src/androidTest/java/com/highcapable/hikage/ExampleInstrumentedTest.kt create mode 100644 hikage-widget-material/src/main/AndroidManifest.xml create mode 100644 hikage-widget-material/src/main/java/com/highcapable/hikage/widget/google/material/appbar/AppBarLayout.kt create mode 100644 hikage-widget-material/src/main/java/com/highcapable/hikage/widget/google/material/bottomappbar/BottomAppBar.kt create mode 100644 hikage-widget-material/src/main/java/com/highcapable/hikage/widget/google/material/bottomnavigation/BottomNavigationView.kt create mode 100644 hikage-widget-material/src/main/java/com/highcapable/hikage/widget/google/material/bottomsheet/BottomSheetDragHandleView.kt create mode 100644 hikage-widget-material/src/main/java/com/highcapable/hikage/widget/google/material/button/MaterialButton.kt create mode 100644 hikage-widget-material/src/main/java/com/highcapable/hikage/widget/google/material/card/MaterialCardView.kt create mode 100644 hikage-widget-material/src/main/java/com/highcapable/hikage/widget/google/material/checkbox/MaterialCheckBox.kt create mode 100644 hikage-widget-material/src/main/java/com/highcapable/hikage/widget/google/material/chip/Chip.kt create mode 100644 hikage-widget-material/src/main/java/com/highcapable/hikage/widget/google/material/circularreveal/CircularLayout.kt create mode 100644 hikage-widget-material/src/main/java/com/highcapable/hikage/widget/google/material/divider/MaterialDivider.kt create mode 100644 hikage-widget-material/src/main/java/com/highcapable/hikage/widget/google/material/floatingactionbutton/FloatingActionButton.kt create mode 100644 hikage-widget-material/src/main/java/com/highcapable/hikage/widget/google/material/imageview/ShapeableImageView.kt create mode 100644 hikage-widget-material/src/main/java/com/highcapable/hikage/widget/google/material/materialswitch/MaterialSwitch.kt create mode 100644 hikage-widget-material/src/main/java/com/highcapable/hikage/widget/google/material/navigation/NavigationView.kt create mode 100644 hikage-widget-material/src/main/java/com/highcapable/hikage/widget/google/material/navigationrail/NavigationRailView.kt create mode 100644 hikage-widget-material/src/main/java/com/highcapable/hikage/widget/google/material/progressindicator/ProgressIndicator.kt create mode 100644 hikage-widget-material/src/main/java/com/highcapable/hikage/widget/google/material/radiobutton/MaterialRadioButton.kt create mode 100644 hikage-widget-material/src/main/java/com/highcapable/hikage/widget/google/material/search/SearchBar.kt create mode 100644 hikage-widget-material/src/main/java/com/highcapable/hikage/widget/google/material/slider/Slider.kt create mode 100644 hikage-widget-material/src/main/java/com/highcapable/hikage/widget/google/material/switchmaterial/SwitchMaterial.kt create mode 100644 hikage-widget-material/src/main/java/com/highcapable/hikage/widget/google/material/tabs/TabLayout.kt create mode 100644 hikage-widget-material/src/main/java/com/highcapable/hikage/widget/google/material/textfield/TextInputLayout.kt create mode 100644 hikage-widget-material/src/main/java/com/highcapable/hikage/widget/google/material/textview/MaterialTextView.kt create mode 100644 hikage-widget-material/src/test/java/com/highcapable/hikage/ExampleUnitTest.kt delete mode 100644 img-src/icon.png create mode 100644 img-src/icon.svg create mode 100644 img-src/nagasaki_soyo.png create mode 100644 samples/app/build.gradle.kts rename {app => samples/app}/proguard-rules.pro (76%) rename {app => samples/app}/src/androidTest/java/com/highcapable/hikage/demo/ExampleInstrumentedTest.kt (100%) rename {app => samples/app}/src/main/AndroidManifest.xml (79%) create mode 100644 samples/app/src/main/ic_launcher-playstore.png create mode 100644 samples/app/src/main/java/com/highcapable/hikage/demo/DemoApp.kt create mode 100644 samples/app/src/main/java/com/highcapable/hikage/demo/ui/MainActivity.kt rename app/src/main/java/com/highcapable/hikage/demo/MainActivity.kt => samples/app/src/main/java/com/highcapable/hikage/demo/ui/base/BaseActivity.kt (69%) create mode 100644 samples/app/src/main/java/com/highcapable/hikage/demo/ui/preview/SamplePreview.kt create mode 100644 samples/app/src/main/java/com/highcapable/hikage/demo/ui/widget/CheckableChip.kt create mode 100644 samples/app/src/main/res/drawable/ic_launcher_foreground.xml rename {app => samples/app}/src/main/res/mipmap-anydpi-v26/ic_launcher.xml (71%) rename {app => samples/app}/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml (90%) create mode 100644 samples/app/src/main/res/mipmap-hdpi/ic_launcher.webp create mode 100644 samples/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp create mode 100644 samples/app/src/main/res/mipmap-mdpi/ic_launcher.webp create mode 100644 samples/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp create mode 100644 samples/app/src/main/res/mipmap-xhdpi/ic_launcher.webp create mode 100644 samples/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp create mode 100644 samples/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp create mode 100644 samples/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp create mode 100644 samples/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp create mode 100644 samples/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp create mode 100644 samples/app/src/main/res/values-night/themes.xml create mode 100644 samples/app/src/main/res/values-zh-rCN/strings.xml rename {app => samples/app}/src/main/res/values/colors.xml (100%) create mode 100644 samples/app/src/main/res/values/ic_launcher_background.xml create mode 100644 samples/app/src/main/res/values/strings.xml create mode 100644 samples/app/src/main/res/values/themes.xml rename {app => samples/app}/src/test/java/com/highcapable/hikage/demo/ExampleUnitTest.kt (100%) diff --git a/.idea/AndroidProjectSystem.xml b/.idea/AndroidProjectSystem.xml new file mode 100644 index 0000000..4a53bee --- /dev/null +++ b/.idea/AndroidProjectSystem.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/icon.png b/.idea/icon.png deleted file mode 100644 index deda69c1a1d711011670c6f57b59c576df589c7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4528 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 Qx!C|Z8v4+3wWqKD4}C(JmH+?% diff --git a/.idea/icon.svg b/.idea/icon.svg new file mode 100644 index 0000000..df15380 --- /dev/null +++ b/.idea/icon.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml index 6d0ee1c..5815a4a 100644 --- a/.idea/kotlinc.xml +++ b/.idea/kotlinc.xml @@ -1,6 +1,6 @@ - \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..16660f1 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/README-zh-CN.md b/README-zh-CN.md index 76e6164..d511454 100644 --- a/README-zh-CN.md +++ b/README-zh-CN.md @@ -5,7 +5,7 @@ [![Telegram](https://img.shields.io/badge/discussion%20dev-Telegram-blue.svg?logo=telegram)](https://t.me/HighCapable_Dev) [![QQ](https://img.shields.io/badge/discussion%20dev-QQ-blue.svg?logo=tencent-qq&logoColor=red)](https://qm.qq.com/cgi-bin/qm/qr?k=Pnsc5RY6N2mBKFjOLPiYldbAbprAU3V7&jump_from=webapi&authKey=X5EsOVzLXt1dRunge8ryTxDRrh9/IiW1Pua75eDLh9RE3KXE+bwXIYF5cWri/9lf) -LOGO +LOGO 一个 Android 响应式 UI 构建工具。 @@ -18,199 +18,30 @@ ## 这是什么 -这是一个 Android 响应式 UI 构建工具,它的设计聚焦于 **实时代码构建 UI**。 +`Hikage` (发音 /ˈhɪkɑːɡeɪ/),这是一个 Android 响应式 UI 构建工具,它的设计聚焦于 **实时代码构建 UI**。 -名称取自 「BanG Dream It's MyGO!!!!!」 中的原创歌曲《春日影》(Haru**hikage**)。 +项目图标由 [MaiTungTM](https://github.com/Lagrio) 设计,名称取自 「BanG Dream It's MyGO!!!!!」 中的原创歌曲《春日影》(Haru**hikage**)。
为什么要...
- LOGO + LOGO - **なんで春日影レイアウト使いの?** +**なんで春日影レイアウト使いの?**
不同于 Jetpack Compose 的声明式 UI,Hikage 专注于 Android 原生平台,它的设计目标是为了让开发者能够快速构建 UI 并可直接支持 Android 原生组件。 -Hikage 只是一个 UI 构建工具,自身并不提供任何 UI 组件。 +**Hikage 只是一个 UI 构建工具,自身并不提供任何 UI 组件**。 拒绝重复造轮子,我们的方案始终是兼容与高效,现在你可以抛弃 ViewBinding 和 XML 甚至是 `findViewById`,直接来尝试使用代码布局吧。 -Android View 中的属性将配合 Gradle 插件实现自动生成,你可以像在 XML 一样去使用它, -而不需要考虑在代码中如何完成复杂的属性设置,特别是一些第三方库并未对它们的自定义 View 提供代码中的属性动态修改。 +`Hikage` 配合我们的另一个项目 [BetterAndroid](https://github.com/BetterAndroid/BetterAndroid) 使用效果更佳,同时 `Hikage` 自身将自动引用 +`BetterAndroid` 相关依赖作为核心内容。 -## 效果展示 +## 开始使用 -> 原始布局 - -```xml - - - - - - -``` - -> 使用 Hikage - -```kotlin -// 使用 Hikage 构建布局,需要有一个 UI Context -val context: Context -// 确保 Context 为 UI Context -if (!context.isUiContext) return -// 开始构建布局,请注意确保 context 参数已初始化 -// 根据 Android 原生组件特性,布局构建后属性 (`attrs`) 将固定,无法动态修改 -val hikage = Hikageable( - context = context, - // 你还可以自定义每个 View 被创建后的操作 - onViewCreated = { name, view -> - // ... - } -) { - LinearLayout( - attrs = { - android.layout_width = MATCH_PARENT - android.layout_height = MATCH_PARENT - android.orientation = VERTICAL - android.padding = 16.dp - }, - // 你可以手动指定布局参数 - lpparams = { - gravity = Gravity.CENTER - } - ) { - TextView( - // 使用字符串形式设置 ID,可以使用大驼峰、小驼峰或下划线形式,在生成时将被转换为小驼峰形式 - id = "text_view", - // 你可以直接使用 attrs 来设置属性,无需考虑它们属于谁 - attrs = { - android.layout_width = WRAP_CONTENT - android.layout_height = WRAP_CONTENT - android.text = "Hello, World!" - android.textSize = 16.sp - android.textColor = Color.BLACK - android.layout_marginTop = 16.dp - android.layout_marginStart = 16.dp - android.layout_marginEnd = 16.dp - android.layout_marginBottom = 16.dp - android.gravity = Gravity.CENTER - // 或者使用字符串形式设置属性 (注意没有拼写检查) - namespace("android") { - set("id", R.id.text_view) - set("layout_margin", 16.dp) - set("layout_gravity", Gravity.CENTER) - // ... - } - }, - // 你也可以手动指定布局参数 - lpparams = { - gravity = Gravity.CENTER - }, - // 执行初始化后的操作 - // 你也可以手动设置属性 - initialize = { - text = "Hello, World!" - textSize = 16f - setTextColor(Color.BLACK) - // 或者更多操作 - doOnLayout { - // ... - } - } - ) - // 使用第三方 View - View( - id = "button", - attrs = { - android.layout_width = WRAP_CONTENT - android.layout_height = WRAP_CONTENT - android.text = "Click Me!" - android.textSize = 16.sp - android.textColor = Color.WHITE - android.backgroundTint = Color.RED - android.layout_marginTop = 16.dp - android.layout_marginStart = 16.dp - android.layout_marginEnd = 16.dp - android.layout_marginBottom = 16.dp - android.gravity = Gravity.CENTER - } - ) - } -} -// 获取根布局 -val root = hikage.root -// 你还可以将其转换为第一个布局的类型,等价于 hikage.root as LinearLayout -// 得益于 Kotlin 的特性,直接使用 Hikageable(...) { ... }.rootAsType() 可以不需要填写泛型 -val root = hikage.rootAsType() -// 设置到 Activity 上 -setContentView(root) -// 获取构建的布局内部组件 (第一种方案) -val textView = hikage.textView -val button = hikage.button -// 获取构建的布局内部组件 (第二种方案) -val textView = hikage.get("text_view") -val button = hikage.get("button") -``` - -## 使用 Android Studio 预览 - -不同于 XML,Hikage 不支持实时预览,但你可以继承于 Hikage 提供的 `HikagePreview` 在其中传入你的布局,然后在 Android Studio 右侧窗格中查看预览。 - -你还可以在代码中使用 `isInEditMode` 来避免在预览模式中展示无法显示的实际逻辑代码。 - -```kotlin -class MyPreview(context: Context, attrs: AttributeSet?) : HikagePreview(context, attrs) { - - override fun onPreview(): Hikage { - // 返回你的布局 - return Hikageable { - Button( - attrs = { - android.layout_width = WRAP_CONTENT - android.layout_height = WRAP_CONTENT - android.text = "Click Me!" - } - ) - } - } -} -``` - -注意 `HikagePreview` 仅用于预览,不应该在实际代码中使用,否则会抛出异常。 - -Hikage 可能会有计划支持 Java,但依然推荐使用 Kotlin。 - -## WIP - -该项目仍在开发中,如果您有任何建议或反馈,请随时开启 `issue` 或 PR。 +[点击这里](https://betterandroid.github.io/Hikage/zh-cn) 前往文档页面查看更多详细教程和内容。 ## 项目推广 @@ -227,6 +58,10 @@ Hikage 可能会有计划支持 Java,但依然推荐使用 Kotlin。 ![Star History Chart](https://api.star-history.com/svg?repos=BetterAndroid/Hikage&type=Date) +## 第三方开源使用声明 + +- [AndroidHiddenApiBypass](https://github.com/LSPosed/AndroidHiddenApiBypass) + ## 许可证 - [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) diff --git a/README.md b/README.md index f04e66f..bbc26a3 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ [![Telegram](https://img.shields.io/badge/discussion%20dev-Telegram-blue.svg?logo=telegram)](https://t.me/HighCapable_Dev) [![QQ](https://img.shields.io/badge/discussion%20dev-QQ-blue.svg?logo=tencent-qq&logoColor=red)](https://qm.qq.com/cgi-bin/qm/qr?k=Pnsc5RY6N2mBKFjOLPiYldbAbprAU3V7&jump_from=webapi&authKey=X5EsOVzLXt1dRunge8ryTxDRrh9/IiW1Pua75eDLh9RE3KXE+bwXIYF5cWri/9lf) -LOGO +LOGO An Android responsive UI building tool. @@ -18,206 +18,33 @@ This project belongs to the above-mentioned organization, **click the link above ## What's this -This is an Android responsive UI build tool designed to focus on **Real-time code building UI**. +`Hikage` (Pronunciation /ˈhɪkɑːɡeɪ/), this is an Android responsive UI build tool designed to focus on **Real-time code building UI**. -The name is taken from the original song "Haru**hikage**" in "BanG Dream It's MyGO!!!!!". +The project icon was designed by [MaiTungTM](https://github.com/Lagrio), +the name is taken from the original song "Haru**hikage**" in "BanG Dream It's MyGO!!!!!".
Why...
- LOGO + LOGO - **なんで春日影レイアウト使いの?** +**なんで春日影レイアウト使いの?**
Unlike Jetpack Compose's declarative UI, Hikage focuses on Android native platforms, and its design goal is to enable developers to quickly build UIs and directly support Android native components. -Hikage is just a UI build tool and does not provide any UI components themselves. +**Hikage is just a UI build tool and does not provide any UI components themselves**. Rejecting duplicate wheels, our solution is always compatible and efficient. Now you can abandon ViewBinding and XML and even `findViewById` and try to use the code layout directly. -The properties in Android view will be automatically generated with the Gradle plugin, and you can use it like in XML. +`Hikage` works better with another project [BetterAndroid](https://github.com/BetterAndroid/BetterAndroid) and +`Hikage` itself will automatically reference the `BetterAndroid` related dependencies as the core content. -It does not need to consider how to complete complex attribute settings in the code, especially some third-party libraries do not provide dynamic -modifications to their custom views. +## Get Started -## Effects - -> Original layout - -```xml - - - - - - -``` - -> Using Hikage - -```kotlin -// Using Hikage to build a layout requires a UI Context. -val context: Context -// Make sure the Context is UI Context. -if (!context.isUiContext) return -// Start building the layout, be careful to make sure the context parameter is initialized. -// According to the Android native component features, -// the attributes (`attrs`) after layout construction will be fixed and cannot be modified dynamically. -val hikage = Hikageable( - context = context, - // You can also customize the actions after each view is created. - onViewCreated = { name, view -> - // ... - } -) { - LinearLayout( - attrs = { - android.layout_width = MATCH_PARENT - android.layout_height = MATCH_PARENT - android.orientation = VERTICAL - android.padding = 16.dp - }, - // You can manually specify layout parameters. - lpparams = { - gravity = Gravity.CENTER - } - ) { - TextView( - // Set the ID using string form, you can use large camel, small camel, - // or underscore form, which will be converted to small camel form when generated. - id = "text_view", - // You can set properties directly using attrs without considering who they belong to. - attrs = { - android.layout_width = WRAP_CONTENT - android.layout_height = WRAP_CONTENT - android.text = "Hello, World!" - android.textSize = 16.sp - android.textColor = Color.BLACK - android.layout_marginTop = 16.dp - android.layout_marginStart = 16.dp - android.layout_marginEnd = 16.dp - android.layout_marginBottom = 16.dp - android.gravity = Gravity.CENTER - // Or use string form to set properties (note that there is no spelling check). - namespace("android") { - set("id", R.id.text_view) - set("layout_margin", 16.dp) - set("layout_gravity", Gravity.CENTER) - // ... - } - }, - // You can also manually specify layout parameters. - lpparams = { - gravity = Gravity.CENTER - }, - // Perform initialization operations. - // You can also manually set properties. - initialize = { - text = "Hello, World!" - textSize = 16f - setTextColor(Color.BLACK) - // Or more operations. - doOnLayout { - // ... - } - } - ) - // Use third-party views. - View( - id = "button", - attrs = { - android.layout_width = WRAP_CONTENT - android.layout_height = WRAP_CONTENT - android.text = "Click Me!" - android.textSize = 16.sp - android.textColor = Color.WHITE - android.backgroundTint = Color.RED - android.layout_marginTop = 16.dp - android.layout_marginStart = 16.dp - android.layout_marginEnd = 16.dp - android.layout_marginBottom = 16.dp - android.gravity = Gravity.CENTER - } - ) - } -} -// Get the root layout. -val root = hikage.root -// You can also convert it to the type of the first layout, equivalent to hikage.root as LinearLayout. -// Thanks to Kotlin's features, using Hikageable(...) { ... }.rootAsType() directly does not require filling in generics. -val root = hikage.rootAsType() -// Set to Activity. -setContentView(root) -// Get the built layout internal components (first solution). -val textView = hikage.textView -val button = hikage.button -// Get the built layout internal components (second solution). -val textView = hikage.get("text_view") -val button = hikage.get("button") -``` - -## Preview with Android Studio - -Unlike XML, Hikage does not support live previews, but you can inherit the `HikagePreview` provided by Hikage, -and pass in your layout, and then view the preview in the pane on the right of Android Studio. - -You can also use `isInEditMode` in your code to avoid displaying actual logical code that cannot be displayed in preview mode. - -```kotlin -class MyPreview(context: Context, attrs: AttributeSet?) : HikagePreview(context, attrs) { - - override fun onPreview(): Hikage { - // Return to your layout. - return Hikageable { - Button( - attrs = { - android.layout_width = WRAP_CONTENT - android.layout_height = WRAP_CONTENT - android.text = "Click Me!" - } - ) - } - } -} -``` - -Note `HikagePreview` is for preview only and should not be used in actual code, otherwise an exception will be thrown. - -Hikage may have plans to support Java, but Kotlin is still recommended. - -## WIP - -This project is still a work in progress. If you have any suggestions or feedback, feel free to open an issue or a pull request. +[Click here](https://betterandroid.github.io/Hikage/en) go to the documentation page for more detailed tutorials and content. ## Promotion @@ -234,6 +61,10 @@ This project is still a work in progress. If you have any suggestions or feedbac ![Star History Chart](https://api.star-history.com/svg?repos=BetterAndroid/Hikage&type=Date) +## Third-Party Open Source Usage Statement + +- [AndroidHiddenApiBypass](https://github.com/LSPosed/AndroidHiddenApiBypass) + ## License - [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml deleted file mode 100644 index e42c27e..0000000 --- a/app/src/main/res/drawable/ic_launcher_foreground.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml deleted file mode 100644 index 1bed29f..0000000 --- a/app/src/main/res/layout/activity_main.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp deleted file mode 100644 index 78e77cb5b4238da16ae691f4985594281a4304bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 838 zcmV-M1G)TCNk&FK0{{S5MM6+kP&iC60{{RoN5ByfU*$HEBt@#@SDF3S->El%ak|`a z+(?ol<-!@jWc|5!U&g9*97&R+)F}fF4ff+4Z!KoJ;MTUSs+#-a4&8VQG(|>9q#p63 zUkYvk00IOE5aH9n0B8UK0t6^P3#bDDs+Imjh)@a;N~N#?QXy0*D^=1!2oVC621=DQ zmFoBUP+5Txzt7j}dRM<fnTWha|6iNgPel4ly$-uZ_`1R8W#?>p|c2Y|V z^#`MFpnQ`1{rBG8KcCTM;d;H@|K`iJ98Q-X@I9Zei?3E5L!W{B|6fTHpk3(#TuztU zQz32JwzH8k_RKrBmosbIwl!8#u5H^MbNxSq=UsoweK(^26JY#(Pa4q@E{sA`-;od8 zxpDpKHPKfYyJNt2;N#v+lVSPht^3BPtt11t&7hV%6K^Eh8NppM7}nA{@x~aj6?a9K zK=fgpz4)_XO%Qn$Z!htpE`i9iLE5-X#g*388#;vTsZg`K+?b!I z)(YFASh&uGy@iU4g&m!)Sl#KUd#+-|eqmgz$i-%u>^it<17m(ynB1JJxX6^&Hb=4a z@SY_zYRZd?Vt#o|%~iZByB8H9+qwpbf8LkTD4EkEamY`F>4CE%3md=QF-1VWM`gt z{&o@OLM3p4DWSbyLMD*5B{efETYM}t<$IhH;K#(* QZ{jiG8?MG_X#7nD00XL%IRF3v diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp deleted file mode 100644 index 0376402dd0d3562083ff64aae4a327897f715a9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2544 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 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp deleted file mode 100644 index 708443078115e3d41024aede01414ac9634c1613..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1626 zcmV-g2BrB@Nk&Fe1^@t8MM6+kP&iCR1^@srFTe{B6;YP||E&J}*5xhOOSgA`m2KPR z-?oo_c~Dy`w_Dq`ZR_Nhq*w5%jnq5)tZL=d4>Fmoij~_NaKCkT-DOqVPVLOp$ozLT zcAc*5lc&rSVk1e4q>)Fna;%EE4y?37gC|>LBM{T4;OCu6`S~_I)JUxKM z#Q^nUfF{;kyWk9Ssb`n--*!9YrutZ~Z);)u0J53hT(w$aE^?JS2~~yk&$pcA^ZUCW zect_NegnX_Rm%hFOU!bKc$r0m?_31VM0Bq+cF6e<10YYGKt~{vG)YXELByF-LPQkw zi0Gcj0{DRnI>3qHocY8c&J^QD|A!4&m!V9SOjz-8{on{BXmf0C#0ClJ_FRC3j{zyxL`OTX&5?G&*;+Y z2;_W7Jm@sSkTeash?rnf$7&CJnLNY|!=53BG=JhwzKj+>$x#( zz(-wY%Z-qd59=IL57x{y*^#Y+l1b_lW}EIACz~Tf@5EFnA1Af&5dcxuOR{7ps*PFg z)vyM@q@4v^h}c+}j1{hL%-LoKVB2qsWm&Mmo7{2rbCdQPvFh_5 zQ{jT!E7>9lQ8gDHF+dY2_UjB|N`=sf-t)s6uLdQT&$~J?V$vgG)UsC9S#D$ol**(I zF{5upMotA5Sf4RfTwrr$lvF^ZwzF@0Dc7#R5c$l5^Wc+!yXfJLsp`S5Kt%YtkLu7D z7_d}&3FI1Oj`i9XN$fQ5A?M2B&M`&ALY^Tw>|*a zV1QjU=U$Mdoke9+@f8Cc(IKF*9{8zF8;kCnKqovD~8F7~q*o zLp+^gfNLL>dbXB#f9Mx0qby_nLN&en(`$7+cV8+ErFM%2r+rA<{Z(<9D0y*@@r&hn zBA#RYV%$?EBrn?PFG~;EXEP`dIs~*CV8#HyUTWj9iXq60$aNE{VnRfeJ=Jxo=>48+ z<8cP~Gr;V)0IK!`Xr&ln+W-*QU1Qo;Je}RGW%SEECz9d1u4~YVQ5CK)87Fry%zHJZ zL+wCkfF1*E7~s?De4pA=WjHu!t~@Lg;*%=QD{46Rx~B6V{{N?n_lh!6eDXz4mEqtG z4DkK;VZGScpx9|S&bH_zOPb(cjF;J!{#{d8T diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp deleted file mode 100644 index 2538bc914ebfb480c2b682aabe1e1964441b4296..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1164 zcmV;71atdRNk&G51ONb6MM6+kP&iC?1ONapU%(d-hX*;5ZPm>@5Nwr{GEn+nGqa!W z8AB3o+(vRF_3n8WUUb?0|9O6UqfY%vk37U1r#?+Qo~JWw|PK>Py|5I_kCAb?UU3&gAa0@)#`(V=PK z2qgd^1i~Nqh5R(gKnExR2?(JOP!t`q2!WJ=5Ol~uQCbp@B2~?p0M&4A>8_}SZ$YHvR{4tLbIb^t{^b)uYwQPpTCuWH)k-3j z)o-lZJpZ~%#@c4f2 ze2!lItSPt8w`h=~35dDOzrCjX0(rtD5E=da_ez%j&?(8fg`ac0CKUo*b30SBIxk!m9ioAWH^vTob zpE1`8K&gr+k-qr!?)A%8fHeiR(x5jHc~Q}4Z!=|CB$PfZr79jo`uL4BHFp{TK_@NT zLFIgW%$zly5%K@b`RjQoqz~WA@)#i{w(gXP$VE=KO<~!j5Hpt_pmI*8+b5A^*+Elo zW;=;eaLA0C`7Wa5A2$3pXk_|=&1pl_Iccz?_)S^-o~#bdBLIvx@h$u$9CEyba~GfD=g3JsSQ$nr=b$u?a!JmNwhl-w|9#ym32 z78dOhjg(vQ3v1^J6SH%$7jp%=<$Q_z+)PiGI<|31Rwe;ui?<%vol$e67Pm^D+q-$q z%2f<&EnBVGceeCRCFRky$Q5JxI~Px!#N42}t2Z)@nh$DL^xC~LWy@jD1dU$OQhwEz e#cp4{egku*)?l<$oA9nSx3I)sX;7Q|TnYd#Pa7Tp diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp deleted file mode 100644 index 421392787c05cd21b06c585073389b8c93082c26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3596 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 SvMp=q&~!jUhgz1cUJe2GTP&mi diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp deleted file mode 100644 index 9ddd2b5f032e895e8af4973565bb7c8491e0dd27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1836 zcmV+{2h;dcNk&E_2LJ$9MM6+kP&iB&2LJ#skH8}kHHX@^Z5a9g$6K;T#02oK%ou*; zN;&fXDYEiUaCdhycemW#-6e8&w=JUQZ+jjtmn5UMx2B1#PcU47Xt~Eb1G*=8v1S(G zgfGTYy?|zq3y?lepwY7!%eVl<4!0oV1a!1ja{^o%IRRBq3GEC-dyENj*R7XR<&GoU zHm&vZ59K9+bIyI{x9vYNMs6cXQlxtSO*tn{e%#(YW_V_10g|?D$Cl&&e%rQfTh$Wm zMvbf$xKZt;qv1b~L)*>WhkF8~R@=5rPXARfGcz+YGcz-)eV4xP`Stp3Vr}&JNGgET zx@qE66L05RV4*rLC}q(!D4z*#|wxFX1;B|(%@ zA!r3i0_*T_=oA7uM1J`i4@zl}R_JJuAQ~6c>x9{sq;a$p1Wc{Q3DHs?!1; zMdIp$m@`2I#*kT%kg;tx7B;93n~ti@4KZdXhD0V3sc58P2>5IMe1=poi^5T=!xTin zF@{Y4`-q8D|I8|K7?dVGGzg1{HU=(Ioim?(1bwh?XcAr(03kKu2m)YPJ2%N@?IY?e zvp7JnBAMnhajXDft4;fCK4EN}MZY5M0B|Y+8-t10AMd3|b;o{@<(J#QJb5Z|ylc5h zb1NLX)Rh;RzTB>n|$fQhN zR{+M*f{fv12+aiY!#J9kuRq&SnuLQ%{)8cS~qdoLG7+VI@jh z2tS0!x0lNIDrnA$?ICz{xx7IjLP=0Fx%9etNkh}=db09)f^*$cfO9w1Tuus`H-z2Y zM$O+Qh@yMuY^i1@=WY|lON~v(iF)xi1lOd!+JW*%XiO5~g`El$mn4TPucIpBR--fP zvYv81pnL#~5md4o75G(aHUIiGIGv-*y?yPchzP$&=VCGP@M zBl!MjZ3a>_Nr@bN!?F5%-sz|Bj<+^5%gWb&Kv>r_K3(Y77l_r*CCgznFB*$sVtshG zZ#U)RBPM(M-4`Jv2qf{yaudAr+E2XqR)VCp5$GdI$hK;B8iOxH9&us?sf|Gu`L#F; zkG-ahAOK^>p*VclQcgecg)_{v@dFmRuiwL2jxI%sCia&_pWNOQHO7{rMl2wwzn;*T+uOe!rJ0ySoiw zTfHPIp%(~XXsyqj@}HS{Hzk6-|A!XCBIQM(ii@s_qd0Js`jbWcHhBi+@pp;!wxr|& zuI4Iv9$U$Adzx%bk8Z!n^2@DvnY?DWe>_TY-{)u!fJg~K0JVjw3CkG9HwZ?ogH6)86J(EZwd9j{#hBB+o+zv+>2LJ~^ z694nE0QeeC`_=wM0;|ZuVEBc^Fa-Q%FxZ$yk2**7<#KyQ{Ljm31mIwxz6yXk&iCyG z2$$P#=Q_2;%b+}gW#r(-NNDXW2In!_b&J>1o9*)bdy?WyF>=`mV2Jhm1OTG3pjczM z+-cn_PrEePN1rPF8Biot{~{qpepBBv{ps4|A1(X!X|?5YHx`s!A6_!b90&E)11JE@ zApns`kcb4SB;S84&+Xb<=yDj$d%F&be1Y3(FwgbU7ZeH7fdG+^w@>xH6e|Z{D^CGT zQGOp!Oo&8=7(gr%BnTMc^#8QOQ^k?vq1;gckO61`EC9|ZzmGpM1Y`cc5z#*q<@fPz zzPNv*;>am(?g+pG5N(tIbe8~(yBtJ)*RD&R5`f%$rz5BMId_!x077p7vAt2$?d`oU a=w(OFsaA6C>+48BUti9t7IOm9$&~`h$$cRJ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp deleted file mode 100644 index 0fad2960a69a6c239a27ebc49b627ba26765706c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5612 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 G6#xJNYUUvT diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp deleted file mode 100644 index 4927263c1847ca8d3be0c780cd1399b7d362935d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2416 zcmV-$36J(tNk&F!2><|BMM6+kP&iCn2><{uzrZgL^@ifMZ5(O;v9G1wKO!c82@MOlFqiR%C5&VcLF3$+jdya|Nj%V zZQHhOvuh4kbG||M`*v*G**S0QRjTU^RyMz+GOO6yxypegNv8Ggf3CmY=WqZ2Y#YNs zk|aa>|KIU!-}>yE{!aj9Z1eNlf$(YLmgEESN9B>?_*;9JbYr&mAW7`8)uacrm59i0 zCGs@M!*1Ej@iXH@L|Y9y9}x41gm-+J(}3-~YnxtdNn@J~wn^{s|82Wy=M>BsOO%&~ ztOrq=J4f55b=!n*6f&G%e|_3aq8_Mv5LpVHT5H>6vfafbOeP5wCUYcGuC@L+#9c%^ z5akig&^m0pi$$0qjlyKHo%FiwgAj%Q2$YA$$3 z4a1#_iUvS^vR#G!uPxauBlGo3WoEp3J|-7kv+3yk<8csx{&=Sj7m^_)DKD0(@rvb| z>Rou47$^W34|khLdAV%4rmsd3pZH*}jgps3R`(eb&pa(m1S$@|y1(B>%ge><`^^61 z)X$)CGIP=TKCAypmyLyh$MwH=(8Wj$0DCxNIFRAL`Rg1p^-+VwXA^g;JcK8;;(*AO zq*wFHgL@7LBj+RihJ3avh{ysc#}QYx;mUYrWQfQLP!uQ^LQ%6vq@`TRX8Nbws|80) z>rzKH3q6Ti{G+ib$kzD&d&xixarbJyt+DkB&_m2}oson!iFHIoeQun0wFe2q>=d(H zSBT8}A92dmm;E2D0J5Wp|XAfMueFwVJAeC@@iEkuaLMZ zwofqQxO-&+5cQ3>m+;jUW~a*biAI*!R}C072TU9DSw#7s+^Z%BM4F3*#5wdfuTl!&E5`8Y>Z`Gi_6$1}^um0g8 zal)f!^bQS64n7fySr0l0Z9Aw%)VNf_UXFY zU0Gh5(LMi{`{`jtXh>Y0Sg8j%`cjB!czz;JS$*n8=GO{9GtQ&)b5NvgzdQHr4p*{1lR!KlsE26zXkkxx5|BOJu>~nN$~u~zz})r> zr6;ZRMu4_f>l1{GB3}`xg}yTIc}c(~(DBoPyU;A#gp4y`jm1LXKL3PE%B!&`2%hz; zQQ0y$Jp}OJbo)pj5u-dZ1af((4LpL3XmtHx8eQHXBSJ$~$CiMuO02{p#Eg~ogGyQ7 zU@O7m1%X`|8zi>eh3oDq9I}4{0iN|AQLsaJV7wq37%mhd&$(#_$acTOpwN>9`WFP` z$o#-IJiih?e=S@E+p2%?Wqx}CKI1olCo3WY-8u=KBO)dM=uG>60XjFv2>i{^h1n^5 zVRi!DQ}}Wn0bNm`;JXBzQ4tyV*4ZNrn*+ktiG{B^aaUpE0#CyCkb(1({wnCqJ9xYtOXz{_`;mbFfY@#r zQ~Lu*KJwvIN-P;dHh&lb9_crC0IL3N7Zpt*03f%0y>Mr~72;7LqfkoT$P(N+Y8PgD z21RS&&Ae+m6n^3jE!@Q-AHrk_rM3%Pu)D9G*%J5|*tEFbvjD^Zwy)&b$tN-_FGHqm zWKMfKjdAy+y9IDaHoHHv4I=;`0WeyC6u|1L8BcU8oV&ZPnbI6& zt6dZT^akH|K`pQXaJpyIj=WN&@Jp8YnKF?nWb+nZr^I!Oakk*kY!3qg5CNzF+}fZ7 zum|wGci1kzP-ghp8`HLAX39Zk=9X#Ezzy?pX?ovUpc-AIPykT+Cma0!?Ezc>ylSg#i~KjS;xnwo2SFly~FnT;X(cH>lXUdc412C z1}Y>lFnw=r@XKF3W#(wlFkw-~8=VADt}Fm>tsZx;I&t@{4gL-O*MJ89YoNm)`n68n zeYVX7a9TMsIodM{4Y4vq0oVWn0O>yfHUM^u3jmxQzhLpW!~cZm9~f#B6JAy>0Cn}! z`N=SVV&p%LKe9BOoWFE+k*kjA%#;q9l~S$*Dy5hy{jvnoFI@!WudB-d diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp deleted file mode 100644 index 44dfd4d6ec2222358c2c989e71b374ac12dd64b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7900 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 Gk~uLpt4 - - - \ No newline at end of file diff --git a/app/src/main/res/values/ic_launcher_background.xml b/app/src/main/res/values/ic_launcher_background.xml deleted file mode 100644 index 1949563..0000000 --- a/app/src/main/res/values/ic_launcher_background.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - #FF639F70 - \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml deleted file mode 100644 index cdcaf69..0000000 --- a/app/src/main/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - Hikage Demo - \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml deleted file mode 100644 index d4a63ca..0000000 --- a/app/src/main/res/values/themes.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - -