From bd880de720c193a4d1c44686692b0ec1dcf1b430 Mon Sep 17 00:00:00 2001 From: Y7000p Date: Tue, 17 May 2022 13:08:10 +0800 Subject: [PATCH] update .gitignore Signed-off-by: Y7000p --- .gitignore | 17 + README.md | 319 +++++ build.gradle | 40 + entry/build.gradle | 36 + entry/proguard-rules.pro | 76 ++ entry/src/main/config.json | 69 ++ .../java/com/xcl/search/test/MainAbility.java | 34 + .../com/xcl/search/test/MyApplication.java | 25 + .../xcl/search/test/SearchDemoAbility.java | 34 + .../search/test/slice/MainAbilitySlice.java | 74 ++ .../test/slice/SearchDemoAbilitySlice.java | 198 ++++ .../main/resources/base/element/string.json | 64 ++ .../base/graphic/background_ability_main.xml | 8 + .../background_ability_search_demo.xml | 8 + .../resources/base/graphic/ic_arrow_left.xml | 12 + .../main/resources/base/graphic/ic_close.xml | 12 + .../resources/base/graphic/ic_filters.xml | 12 + .../base/graphic/ic_history_black.xml | 33 + .../resources/base/layout/ability_main.xml | 52 + .../base/layout/ability_search_demo.xml | 84 ++ .../base/layout/ability_search_demow.xml | 85 ++ .../base/media/ic_close_black_24dp.png | Bin 0 -> 630 bytes .../base/media/ic_history_black_24dp.png | Bin 0 -> 1534 bytes entry/src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../src/main/resources/zh/element/string.json | 64 ++ .../com/xcl/search/test/ExampleOhosTest.java | 14 + .../java/com/xcl/search/test/ExampleTest.java | 49 + gradle.properties | 13 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 58694 bytes gradle/wrapper/gradle-wrapper.properties | 5 + gradlew | 183 +++ gradlew.bat | 103 ++ libs/ImageTracer.jar | Bin 0 -> 15563 bytes package.json | 1 + settings.gradle | 1 + supersearch/build.gradle | 28 + supersearch/consumer-rules.pro | 1 + supersearch/src/main/config.json | 35 + .../BackgroundLoadingAnimation.java | 146 +++ .../xcl/supersearch/ContactProviderSR.java | 180 +++ .../com/xcl/supersearch/RoundProgressBar.java | 131 +++ .../xcl/supersearch/SHistoryContactor.java | 59 + .../java/com/xcl/supersearch/SRContactor.java | 99 ++ .../java/com/xcl/supersearch/SearchView.java | 1024 +++++++++++++++++ .../main/java/com/xcl/supersearch/Utils.java | 158 +++ .../main/resources/base/element/string.json | 40 + .../base/graphic/background_list_item.xml | 14 + .../base/graphic/background_search_view.xml | 14 + .../main/resources/base/graphic/ic_search.xml | 12 + ...ent_search_view_suggestion_item_layout.xml | 53 + ...nt_search_view_suggestion_item_layoutw.xml | 53 + .../resources/base/layout/search_view.xml | 124 ++ .../resources/base/layout/search_vieww.xml | 125 ++ .../main/resources/base/layout/searchres.xml | 109 ++ .../main/resources/base/layout/searchresw.xml | 109 ++ .../base/media/ic_arrow_left_black_18dp.png | Bin 0 -> 528 bytes .../base/media/ic_arrow_left_black_24dp.png | Bin 0 -> 539 bytes .../base/media/ic_arrow_left_black_36dp.png | Bin 0 -> 680 bytes .../base/media/ic_arrow_left_black_48dp.png | Bin 0 -> 752 bytes .../base/media/ic_close_black_18dp.png | Bin 0 -> 589 bytes .../base/media/ic_close_black_24dp.png | Bin 0 -> 630 bytes .../base/media/ic_close_black_36dp.png | Bin 0 -> 903 bytes .../base/media/ic_close_black_48dp.png | Bin 0 -> 1008 bytes .../media/ic_filter_variant_black_18dp.png | Bin 0 -> 451 bytes .../media/ic_filter_variant_black_24dp.png | Bin 0 -> 429 bytes .../media/ic_filter_variant_black_36dp.png | Bin 0 -> 490 bytes .../media/ic_filter_variant_black_48dp.png | Bin 0 -> 532 bytes .../base/media/ic_history_black_18dp.png | Bin 0 -> 1264 bytes .../base/media/ic_history_black_24dp.png | Bin 0 -> 1534 bytes .../base/media/ic_history_black_36dp.png | Bin 0 -> 2242 bytes .../base/media/ic_history_black_48dp.png | Bin 0 -> 2956 bytes .../base/media/ic_magnify_black_18dp.png | Bin 0 -> 1030 bytes .../base/media/ic_magnify_black_24dp.png | Bin 0 -> 1160 bytes .../base/media/ic_magnify_black_36dp.png | Bin 0 -> 1752 bytes .../base/media/ic_magnify_black_48dp.png | Bin 0 -> 2186 bytes .../base/media/ic_magnify_grey600_18dp.png | Bin 0 -> 1444 bytes .../base/media/ic_magnify_grey600_24dp.png | Bin 0 -> 1825 bytes .../base/media/ic_magnify_grey600_36dp.png | Bin 0 -> 2646 bytes .../base/media/ic_magnify_grey600_48dp.png | Bin 0 -> 3386 bytes .../base/media/ic_magnify_white_18dp.png | Bin 0 -> 1059 bytes .../base/media/ic_magnify_white_24dp.png | Bin 0 -> 1255 bytes .../base/media/ic_magnify_white_36dp.png | Bin 0 -> 1883 bytes .../base/media/ic_magnify_white_48dp.png | Bin 0 -> 2393 bytes .../src/main/resources/en/element/string.json | 40 + .../src/main/resources/zh/element/string.json | 40 + .../java/com/xcl/supersearch/ExampleTest.java | 9 + 86 files changed, 4328 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 build.gradle create mode 100644 entry/build.gradle create mode 100644 entry/proguard-rules.pro create mode 100644 entry/src/main/config.json create mode 100644 entry/src/main/java/com/xcl/search/test/MainAbility.java create mode 100644 entry/src/main/java/com/xcl/search/test/MyApplication.java create mode 100644 entry/src/main/java/com/xcl/search/test/SearchDemoAbility.java create mode 100644 entry/src/main/java/com/xcl/search/test/slice/MainAbilitySlice.java create mode 100644 entry/src/main/java/com/xcl/search/test/slice/SearchDemoAbilitySlice.java create mode 100644 entry/src/main/resources/base/element/string.json create mode 100644 entry/src/main/resources/base/graphic/background_ability_main.xml create mode 100644 entry/src/main/resources/base/graphic/background_ability_search_demo.xml create mode 100644 entry/src/main/resources/base/graphic/ic_arrow_left.xml create mode 100644 entry/src/main/resources/base/graphic/ic_close.xml create mode 100644 entry/src/main/resources/base/graphic/ic_filters.xml create mode 100644 entry/src/main/resources/base/graphic/ic_history_black.xml create mode 100644 entry/src/main/resources/base/layout/ability_main.xml create mode 100644 entry/src/main/resources/base/layout/ability_search_demo.xml create mode 100644 entry/src/main/resources/base/layout/ability_search_demow.xml create mode 100644 entry/src/main/resources/base/media/ic_close_black_24dp.png create mode 100644 entry/src/main/resources/base/media/ic_history_black_24dp.png create mode 100644 entry/src/main/resources/base/media/icon.png create mode 100644 entry/src/main/resources/zh/element/string.json create mode 100644 entry/src/ohosTest/java/com/xcl/search/test/ExampleOhosTest.java create mode 100644 entry/src/test/java/com/xcl/search/test/ExampleTest.java create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 libs/ImageTracer.jar create mode 100644 package.json create mode 100644 settings.gradle create mode 100644 supersearch/build.gradle create mode 100644 supersearch/consumer-rules.pro create mode 100644 supersearch/src/main/config.json create mode 100644 supersearch/src/main/java/com/xcl/supersearch/BackgroundLoadingAnimation.java create mode 100644 supersearch/src/main/java/com/xcl/supersearch/ContactProviderSR.java create mode 100644 supersearch/src/main/java/com/xcl/supersearch/RoundProgressBar.java create mode 100644 supersearch/src/main/java/com/xcl/supersearch/SHistoryContactor.java create mode 100644 supersearch/src/main/java/com/xcl/supersearch/SRContactor.java create mode 100644 supersearch/src/main/java/com/xcl/supersearch/SearchView.java create mode 100644 supersearch/src/main/java/com/xcl/supersearch/Utils.java create mode 100644 supersearch/src/main/resources/base/element/string.json create mode 100644 supersearch/src/main/resources/base/graphic/background_list_item.xml create mode 100644 supersearch/src/main/resources/base/graphic/background_search_view.xml create mode 100644 supersearch/src/main/resources/base/graphic/ic_search.xml create mode 100644 supersearch/src/main/resources/base/layout/persistent_search_view_suggestion_item_layout.xml create mode 100644 supersearch/src/main/resources/base/layout/persistent_search_view_suggestion_item_layoutw.xml create mode 100644 supersearch/src/main/resources/base/layout/search_view.xml create mode 100644 supersearch/src/main/resources/base/layout/search_vieww.xml create mode 100644 supersearch/src/main/resources/base/layout/searchres.xml create mode 100644 supersearch/src/main/resources/base/layout/searchresw.xml create mode 100644 supersearch/src/main/resources/base/media/ic_arrow_left_black_18dp.png create mode 100644 supersearch/src/main/resources/base/media/ic_arrow_left_black_24dp.png create mode 100644 supersearch/src/main/resources/base/media/ic_arrow_left_black_36dp.png create mode 100644 supersearch/src/main/resources/base/media/ic_arrow_left_black_48dp.png create mode 100644 supersearch/src/main/resources/base/media/ic_close_black_18dp.png create mode 100644 supersearch/src/main/resources/base/media/ic_close_black_24dp.png create mode 100644 supersearch/src/main/resources/base/media/ic_close_black_36dp.png create mode 100644 supersearch/src/main/resources/base/media/ic_close_black_48dp.png create mode 100644 supersearch/src/main/resources/base/media/ic_filter_variant_black_18dp.png create mode 100644 supersearch/src/main/resources/base/media/ic_filter_variant_black_24dp.png create mode 100644 supersearch/src/main/resources/base/media/ic_filter_variant_black_36dp.png create mode 100644 supersearch/src/main/resources/base/media/ic_filter_variant_black_48dp.png create mode 100644 supersearch/src/main/resources/base/media/ic_history_black_18dp.png create mode 100644 supersearch/src/main/resources/base/media/ic_history_black_24dp.png create mode 100644 supersearch/src/main/resources/base/media/ic_history_black_36dp.png create mode 100644 supersearch/src/main/resources/base/media/ic_history_black_48dp.png create mode 100644 supersearch/src/main/resources/base/media/ic_magnify_black_18dp.png create mode 100644 supersearch/src/main/resources/base/media/ic_magnify_black_24dp.png create mode 100644 supersearch/src/main/resources/base/media/ic_magnify_black_36dp.png create mode 100644 supersearch/src/main/resources/base/media/ic_magnify_black_48dp.png create mode 100644 supersearch/src/main/resources/base/media/ic_magnify_grey600_18dp.png create mode 100644 supersearch/src/main/resources/base/media/ic_magnify_grey600_24dp.png create mode 100644 supersearch/src/main/resources/base/media/ic_magnify_grey600_36dp.png create mode 100644 supersearch/src/main/resources/base/media/ic_magnify_grey600_48dp.png create mode 100644 supersearch/src/main/resources/base/media/ic_magnify_white_18dp.png create mode 100644 supersearch/src/main/resources/base/media/ic_magnify_white_24dp.png create mode 100644 supersearch/src/main/resources/base/media/ic_magnify_white_36dp.png create mode 100644 supersearch/src/main/resources/base/media/ic_magnify_white_48dp.png create mode 100644 supersearch/src/main/resources/en/element/string.json create mode 100644 supersearch/src/main/resources/zh/element/string.json create mode 100644 supersearch/src/test/java/com/xcl/supersearch/ExampleTest.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0b0670e --- /dev/null +++ b/.gitignore @@ -0,0 +1,17 @@ +*.iml +/.gradle +/local.properties +/.idea +/key +/material +/supersearch/build +/entry/build +/supersearch/upload.gradle +/supersearch/gradle.properties +.DS_Store +/build +/captures +.externalNativeBuild +/entry/.preview +.cxx +/node_modules diff --git a/README.md b/README.md new file mode 100644 index 0000000..7ba1250 --- /dev/null +++ b/README.md @@ -0,0 +1,319 @@ +## SuperSearch + +### 项目介绍 + +一个开源的ohos Java 库,旨在简化多终端搜索相关功能的实现。 + +### 功能列表 + +1. 支持模糊匹配以及精确匹配 +2. 支持开启、关闭搜索记录 +3. 自带搜索算法 +4. 支持超多功能自定义 +5. 代码高可扩展性 +6. 支持多设备使用 +7. 支持开箱即用 + +### 安装教程 + +- 方法一: + +使用前需先导入SuperSearch依赖,并在所对应的模块build.gradle中添加依赖 + +```groovy +allprojects { + repositories { + mavenCentral() + } +} +... +dependencies { + ... + implementation 'top.xuegao-tzx:SuperSearch:1.2.3.517' + ... +} +``` + +- 方式二: + +1. 下载模块代码添加到自己的工程 +2. 关联使用 + +``` +dependencies { + implementation project(":supersearch") + …… +} +``` + + +### 使用说明 + +#### - 添加SuperSearch + +##### 1. 加载动画(一个加载中的圆圈) + +```xml + + + + app:round_progress_color="#FF82F8EF" + + app:round_progress_with="5f" +``` + +##### 2. 搜索框 + +###### 通过 XML 进行定制 + +```xml + + + + app:isDebugEnabled="true" + + app:isWearable="true" + + + app:background_mask_degree="0.3f" + + app:background_mask_color="#FFADEA6C" + + app:queryRadius="5vp" + + app:suggestion_count="6" + + app:search_history="$graphic:ic_history_black" + + app:delete_search_history="$graphic:ic_close" + + app:queryInput_cursor_color="#FF8377FF" + + app:queryInput_hint_color="#FFFF0000" + + app:queryInput_hint_text="$string:search_hint_text" + + app:queryInput_text_color="#FF000000" + + app:queryInput_background_color="#FFF8F3EC" + + app:queryInput_buttom_color="#A18770B1" + + app:rightButton="$graphic:ic_filters" + + app:rightButton_Clear="$graphic:ic_close" + + app:isrightButton_ClearEnabled="true" + + app:leftButton_Loadding_color="#FF1300FF" + + app:leftButton_Back="$graphic:ic_arrow_left" + + + app:nullWarnByMySelf="true" + + app:null_warn_text="$string:search_input_null" + + app:null_warn_text_color="#FFFF006E" + + + app:noneWarnByMySelf="true" + + app:none_warn_text="$string:search_answer_none" + + app:none_warn_text_color="#FFFF003B" +``` + +###### 通过 Java 代码进行辅助定制 + +```java + 1. 定义方式1 + private void initView() { + SearchView sv; + sv = (SearchView) findComponentById(ResourceTable.Id_searchView);//根据id获取控件 + sv.Onsearch(getContext(),//获取所在能力的context + (ListContainer) findComponentById(ResourceTable.Id_ListContainer),//根据id获取并绑定结果列表展示控件 + sv,//根据id绑定控件 + findComponentById(ResourceTable.Id_emptyView),//根据id获取并绑定背景展示控件 + (com.xcl.supersearch.RoundProgressBar) findComponentById(ResourceTable.Id_progressBar),//根据id获取并绑定背景Loading加载动画控件 + getSearch(),//传入搜索的数据 + getSuggection(),//传入搜索建议的数据,如果不配置这个,则不会自带搜索建议 + true);//是否开启搜索建议 + } + //注意:搜索建议如果无需开启,可以不配置最后2项;如开启搜索建议,倒数第2项也可有可无 + private List getSearch(){ + List list = new ArrayList<>(); + list.add(new SRContactor("zhtzx5", "clsths2"));//支持只传标题、信息,此时后面4个按钮默认不显示 + list.add(new SRContactor("zhng", "cl1", null, ",2u", "3g", "7n7"));//支持传null,此时传null的将不会显示 + list.add(new SRContactor("zhxcl5", null));//支持只传标题,同时传null,此时后面4个按钮和信息不显示 + //TODO:注意:第一个不可为null + list.add(new SRContactor("zhags", "clhhs1", "1操", "2", "3码", "47"));//支持传入全部信息 + return list; + } + private List getSuggection() { + List list = new ArrayList<>(); + list.add(new SHistoryContactor("小草林", ResourceTable.Media_ic_history_black_24dp, -3));//这里-3代表根据默认图标或xml中配置的图标显示 + list.add(new SHistoryContactor("TEST", ResourceTable.Media_ic_history_black_24dp, -1));//这里-1代表根据不显示图标 + list.add(new SHistoryContactor("测试", -1, ResourceTable.Media_ic_close_black_24dp)); + list.add(new SHistoryContactor("test"));//可以只配置建议信息,会自动根据默认图标或xml中配置的图标显示 + return list; + } + + 2. 定义方式2 + sv.setContext(getContext())//设置所在能力的context + .setRoundProgressBar((com.xcl.supersearch.RoundProgressBar) findComponentById(ResourceTable.Id_progressBar))//设置背景Loading加载动画控件 + .setSearchView(sv)//设置搜索控件 + .setSRListContainer(getSearch())//传入搜索的数据 + .setSuggestionisShow(true)//设置是否开启搜索建议 + .setSuggestionList(getSuggection())//设置搜索建议的数据 + .setBackComponent(findComponentById(ResourceTable.Id_emptyView))//设置背景展示控件 + .setListContainer((ListContainer) findComponentById(ResourceTable.Id_ListContainer))//设置结果列表展示控件 + .Builder();//执行构造 + + -----------------------------一下方法2种构造均一样----------------------------------- + sv.setCustomListener(new SearchView.CustomListener() { + @Override + public void onFilter(String filter) { + //TODO:右上角的按钮事件 + } + }); + sv.setBt1Listener(new SearchView.Bt1Listener() { + @Override + public void onbT1(int position) { + Utils.error(label,"点击了按钮1,其的行号为:"+position+1); + //TODO:一行列表第一个的按钮事件 + } + }); + //依次类推,此处省略其他3个按钮事件 + sv.setBackClickListener(new SearchView.BackClickListener() { + @Override + public void onBackClick() { + terminate(); + //TODO:左上角的按钮事件 + } + }); + sv.setNullWarnListener(new SearchView.NullWarnListener(){ + @Override + public void onNullError() { + Utils.error(label, "空搜索警告1"); + //TODO:支持自定义空搜索警告 + } + }); + sv.setNoneWarnListener(new SearchView.NoneWarnListener(){ + @Override + public void onNullWarn() { + Utils.error(label, "空结果警告1"); + //TODO:支持自定义空结果警告 + } + }); +``` + +#### - 使用ImageTracerJava工具 + +> 参考项目地址: 我的另一个开源项目[ImageTracerJava](https://gitee.com/xuegao-tzx/ImageTracerJava) + +1. 在entry/src/test目录下的java文件中含有ImageTracerJava工具的使用示例,可以将图片转换成svg图片,再通过DevEco Studio自带的svg转xml即可将图片资源从media转到graphic中 +2. 使用前需先导入ImageTracerJava工具,并在build.gradle中添加依赖 + +```groovy +allprojects { + repositories { + mavenCentral() + } +} +... +dependencies { + ... + implementation 'top.xuegao-tzx:ImageTracerJava:1.1.4.516' + ... +} +``` + +3. 使用示例如下 + +```java + // Options + HashMap options = new HashMap(); + // Tracing + options.put("ltres",1f); + options.put("qtres",1f); + options.put("pathomit",8f); + // Color quantization + options.put("colorsampling",1f); // 1f means true ; 0f means false: starting with generated palette + options.put("numberofcolors",16f); + options.put("mincolorratio",0.02f); + options.put("colorquantcycles",3f); + // SVG rendering + options.put("scale",1f); + options.put("roundcoords",1f); // 1f means rounded to 1 decimal places, like 7.3 ; 3f means rounded to 3 places, like 7.356 ; etc. + options.put("lcpr",0f); + options.put("qcpr",0f); + options.put("desc",1f); // 1f means true ; 0f means false: SVG descriptions deactivated + options.put("viewbox",0f); // 1f means true ; 0f means false: fixed width and height + // Selective Gauss Blur + options.put("blurradius",0f); // 0f means deactivated; 1f .. 5f : blur with this radius + options.put("blurdelta",20f); // smaller than this RGB difference will be blurred + // Palette + // This is an example of a grayscale palette + // please note that signed byte values [ -128 .. 127 ] will be converted to [ 0 .. 255 ] in the getsvgstring function + //下方的两个数字16请参照实际图片动态调整以实现最佳效果 + byte[][] palette = new byte[16][4]; + for(int colorcnt=0; colorcnt < 16; colorcnt++){ + palette[colorcnt][0] = (byte)( -128 + colorcnt * 32); // R + palette[colorcnt][1] = (byte)( -128 + colorcnt * 32); // G + palette[colorcnt][2] = (byte)( -128 + colorcnt * 32); // B + palette[colorcnt][3] = (byte)127; // A + } + + ImageTracer.saveString( + "src\\main\\resources\\base\\media\\ic_close_black_24dp.svg" , + ImageTracer.imageToSVG("src\\main\\resources\\base\\media\\ic_close_black_24dp.png",options,palette) + ); +``` + +### 版本迭代 + +- v1.2.3.517 + +## License(许可证) + +作者:田梓萱 SuperSearch 在 [AGPL V3.0 License](https://www.gnu.org/licenses/agpl-3.0.txt) 下获得许可 + diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..fe4c010 --- /dev/null +++ b/build.gradle @@ -0,0 +1,40 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. +apply plugin: 'com.huawei.ohos.app' + +//For instructions on signature configuration, see https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ide_debug_device-0000001053822404#section1112183053510 +ohos { + //签名信息 + compileSdkVersion 6 +} + +buildscript { + repositories { + maven { + url 'https://repo.huaweicloud.com/repository/maven/' + allowInsecureProtocol = true + } + maven { + url 'https://developer.huawei.com/repo/' + allowInsecureProtocol = true + } + mavenCentral() + } + dependencies { + classpath 'com.huawei.ohos:hap:3.0.5.2' + classpath 'com.huawei.ohos:decctest:1.2.7.2' + } +} + +allprojects { + repositories { + maven { + url 'https://repo.huaweicloud.com/repository/maven/' + allowInsecureProtocol = true + } + maven { + url 'https://developer.huawei.com/repo/' + allowInsecureProtocol = true + } + mavenCentral() + } +} diff --git a/entry/build.gradle b/entry/build.gradle new file mode 100644 index 0000000..b4f4a89 --- /dev/null +++ b/entry/build.gradle @@ -0,0 +1,36 @@ +apply plugin: 'com.huawei.ohos.hap' +apply plugin: 'com.huawei.ohos.decctest' +//For instructions on signature configuration, see https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ide_debug_device-0000001053822404#section1112183053510 +ohos { + compileSdkVersion 6 + defaultConfig { + compatibleSdkVersion 5 + } + buildTypes { + release { + proguardOpt { + proguardEnabled false + rulesFiles 'proguard-rules.pro' + } + } + debug { + proguardOpt { + proguardEnabled true + rulesFiles 'proguard-rules.pro' + } + } + } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar', '*.har']) + //testImplementation files('../libs/ImageTracer.jar') + testImplementation 'top.xuegao-tzx:ImageTracerJava:1.1.4.516' + testImplementation 'junit:junit:4.13.1' + ohosTestImplementation 'com.huawei.ohos.testkit:runner:2.0.0.200' + //implementation project(":supersearch") + implementation 'top.xuegao-tzx:SuperSearch:1.2.3.517' +} +decc { + supportType = ['html', 'xml'] +} diff --git a/entry/proguard-rules.pro b/entry/proguard-rules.pro new file mode 100644 index 0000000..9ead980 --- /dev/null +++ b/entry/proguard-rules.pro @@ -0,0 +1,76 @@ +# config module specific ProGuard rules here. +-dontwarn +# 代码混淆压缩比,在0~7之间 +-optimizationpasses 15 +# 混合时不使用大小写混合,混合后的类名为小写 +-dontusemixedcaseclassnames +# 在读取依赖的库文件时,不要略过那些非public类成员 +-dontskipnonpubliclibraryclassmembers +# 指定不去忽略非公共库的类 +-dontskipnonpubliclibraryclasses +# 不做预校验,preverify是proguard的四个步骤之一,去掉这一步能够加快混淆速度。 +-dontpreverify +-verbose +# google推荐算法 +-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/* +#-dontoptimize#注意在上传时配置,本地无需配置 +# 保留注解、内部类、泛型、匿名类 +-keepattributes *Annotation*,Exceptions,InnerClasses,Signature,EnclosingMethod +# 重命名抛出异常时的文件名称 +-renamesourcefileattribute SourceFile +# 抛出异常时保留代码行号 +-keepattributes SourceFile,LineNumberTable +-dontwarn javax.annotation.** +# 保留本地native方法不被混淆 +-keepclasseswithmembernames,allowshrinking class * { +native ; +} +# 保留枚举类不被混淆 +-keepclassmembers enum * { +public static **[] values(); +public static ** valueOf(java.lang.String); +} +# 保留自定义类 +-keep enum com.xcl.supersearch.** +-keep class com.xcl.supersearch.**{*;} +-keep class com.xcl.supersearch.** +-keepclassmembers enum com.xcl.supersearch.**{*;} +-keep interface com.xcl.supersearch.** +# 忽略继承 +-keepclassmembers class * implements java.io.Serializable { + static final long serialVersionUID; + private static final java.io.ObjectStreamField[] serialPersistentFields; + private void writeObject(java.io.ObjectOutputStream); + private void readObject(java.io.ObjectInputStream); + java.lang.Object writeReplace(); + java.lang.Object readResolve(); +} +# 保留HMS相关接入[AnalyticsKit SDK和依赖SDK的混淆配置] +-ignorewarnings +-repackageclasses +-keep class com.huawei.agconnect.**{*;} +-keep class com.huawei.hms.analytics.**{*;} +-keep class com.huawei.hms.push.**{*;} +-keep class com.huawei.hms.**{*;} +# HMS接口服务 +-keepattributes Exceptions +-keep interface com.huawei.hms.analytics.type.HAEventType{*;} +-keep interface com.huawei.hms.analytics.type.HAParamType{*;} +-keep class com.huawei.hms.analytics.HiAnalyticsInstance{*;} +-keep class com.huawei.hms.analytics.HiAnalytics{*;} +-keep class com.huawei.hianalytics.**{*;} +-keep class com.huawei.updatesdk.**{*;} +-keep class com.huawei.harmony.**{*;} +-keep class com.huawei.mylibrary.**{*;} +# 保留HarmonyOS应用/服务入口类 +-keep public class * extends *.aafwk.ability.Ability +-keep public class * extends *.ace.ability.AceAbility +-keep public class * extends *.aafwk.ability.AbilitySlice +-keep public class * extends *.aafwk.ability.AbilityPackage +-dontwarn java.lang.invoke.** +-dontwarn javax.naming.** +-dontwarn ohos.utils.PacMap.** +-keep class **.ResourceTable$* {*;} +-keepattributes Signature, InnerClasses, EnclosingMethod, Exceptions +# 保留配置文件 +-printmapping mapping.txt \ No newline at end of file diff --git a/entry/src/main/config.json b/entry/src/main/config.json new file mode 100644 index 0000000..a452e08 --- /dev/null +++ b/entry/src/main/config.json @@ -0,0 +1,69 @@ +{ + "app": { + "bundleName": "com.xcl.studyt", + "vendor": "tzx", + "version": { + "code": 1000000, + "name": "1.0.0" + } + }, + "deviceConfig": {}, + "module": { + "package": "com.xcl.search.test", + "name": ".MyApplication", + "mainAbility": "com.xcl.search.test.MainAbility", + "deviceType": [ + "phone", + "tablet", + "tv", + "wearable", + "car" + ], + "distro": { + "deliveryWithInstall": true, + "moduleName": "entry", + "moduleType": "entry", + "installationFree": false + }, + "metaData": { + "customizeData": [ + { + "name": "hwc-theme", + "extra": "", + "value": "androidhwext:style/Theme.Emui.Wallpaper.NoTitleBar" + } + ] + }, + "abilities": [ + { + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ], + "orientation": "unspecified", + "visible": true, + "name": "com.xcl.search.test.MainAbility", + "icon": "$media:icon", + "description": "$string:mainability_description", + "label": "$string:entry_MainAbility", + "type": "page", + "launchType": "standard" + }, + { + "orientation": "unspecified", + "name": "com.xcl.search.test.SearchDemoAbility", + "icon": "$media:icon", + "description": "$string:searchdemoability_description", + "label": "$string:entry_SearchDemoAbility", + "type": "page", + "launchType": "standard" + } + ] + } +} \ No newline at end of file diff --git a/entry/src/main/java/com/xcl/search/test/MainAbility.java b/entry/src/main/java/com/xcl/search/test/MainAbility.java new file mode 100644 index 0000000..0d633fc --- /dev/null +++ b/entry/src/main/java/com/xcl/search/test/MainAbility.java @@ -0,0 +1,34 @@ +/* + * Copyright 2022 田梓萱, xcl@xuegao-tzx.top + * + * Licensed under the GNU Affero General Public License, Version 3.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.gnu.org/licenses/agpl-3.0.txt + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.xcl.search.test; + +import com.xcl.search.test.slice.MainAbilitySlice; +import ohos.aafwk.ability.Ability; +import ohos.aafwk.content.Intent; +import ohos.agp.window.service.WindowManager; + +public class MainAbility extends Ability { + @Override + public void onStart(Intent intent) { + super.onStart(intent); + super.setAbilitySliceAnimator(null); + super.setTransitionAnimation(0, 0); + this.getWindow().addFlags(WindowManager.LayoutConfig.MARK_ALLOW_EXTEND_LAYOUT); + super.setMainRoute(MainAbilitySlice.class.getName()); + super.setTransitionAnimation(0, 0); + super.setAbilitySliceAnimator(null); + } +} diff --git a/entry/src/main/java/com/xcl/search/test/MyApplication.java b/entry/src/main/java/com/xcl/search/test/MyApplication.java new file mode 100644 index 0000000..49cda35 --- /dev/null +++ b/entry/src/main/java/com/xcl/search/test/MyApplication.java @@ -0,0 +1,25 @@ +/* + * Copyright 2022 田梓萱, xcl@xuegao-tzx.top + * + * Licensed under the GNU Affero General Public License, Version 3.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.gnu.org/licenses/agpl-3.0.txt + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.xcl.search.test; + +import ohos.aafwk.ability.AbilityPackage; + +public class MyApplication extends AbilityPackage { + @Override + public void onInitialize() { + super.onInitialize(); + } +} diff --git a/entry/src/main/java/com/xcl/search/test/SearchDemoAbility.java b/entry/src/main/java/com/xcl/search/test/SearchDemoAbility.java new file mode 100644 index 0000000..94212e5 --- /dev/null +++ b/entry/src/main/java/com/xcl/search/test/SearchDemoAbility.java @@ -0,0 +1,34 @@ +/* + * Copyright 2022 田梓萱, xcl@xuegao-tzx.top + * + * Licensed under the GNU Affero General Public License, Version 3.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.gnu.org/licenses/agpl-3.0.txt + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.xcl.search.test; + +import com.xcl.search.test.slice.SearchDemoAbilitySlice; +import ohos.aafwk.ability.Ability; +import ohos.aafwk.content.Intent; +import ohos.agp.window.service.WindowManager; + +public class SearchDemoAbility extends Ability { + @Override + public void onStart(Intent intent) { + super.onStart(intent); + super.setAbilitySliceAnimator(null); + super.setTransitionAnimation(0, 0); + this.getWindow().addFlags(WindowManager.LayoutConfig.MARK_ALLOW_EXTEND_LAYOUT); + super.setMainRoute(SearchDemoAbilitySlice.class.getName()); + super.setTransitionAnimation(0, 0); + super.setAbilitySliceAnimator(null); + } +} diff --git a/entry/src/main/java/com/xcl/search/test/slice/MainAbilitySlice.java b/entry/src/main/java/com/xcl/search/test/slice/MainAbilitySlice.java new file mode 100644 index 0000000..19a1789 --- /dev/null +++ b/entry/src/main/java/com/xcl/search/test/slice/MainAbilitySlice.java @@ -0,0 +1,74 @@ +/* + * Copyright 2022 田梓萱, xcl@xuegao-tzx.top + * + * Licensed under the GNU Affero General Public License, Version 3.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.gnu.org/licenses/agpl-3.0.txt + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.xcl.search.test.slice; + +import com.xcl.search.test.ResourceTable; +import ohos.aafwk.ability.AbilitySlice; +import ohos.aafwk.content.Intent; +import ohos.aafwk.content.Operation; +import ohos.agp.components.Component; +import ohos.agp.window.service.WindowManager; +import ohos.utils.net.Uri; + +public class MainAbilitySlice extends AbilitySlice { + + @Override + public void onStart(Intent intent) { + super.onStart(intent); + super.setUIContent(ResourceTable.Layout_ability_main); + this.getWindow().addFlags(WindowManager.LayoutConfig.MARK_ALLOW_EXTEND_LAYOUT); + this.findComponentById(ResourceTable.Id_withoutSug).setClickedListener(new Component.ClickedListener() { + @Override + public void onClick(Component v) { + Route("withoutSug"); + } + }); + this.findComponentById(ResourceTable.Id_recentSug).setClickedListener(new Component.ClickedListener() { + @Override + public void onClick(Component v) { + Route("recentSug"); + } + }); + this.findComponentById(ResourceTable.Id_hasknownSug).setClickedListener(new Component.ClickedListener() { + @Override + public void onClick(Component v) { + Route("hasknownSug"); + } + }); + } + + public void Route(String route) { + Intent intent1 = new Intent(); + intent1.setParam("SEARCH_PD", route); + Operation operation = new Intent.OperationBuilder() + .withDeviceId("") + .withBundleName(MainAbilitySlice.this.getBundleName()) + .withAbilityName("com.xcl.search.test.SearchDemoAbility") + .build(); + intent1.setOperation(operation); + MainAbilitySlice.this.startAbility(intent1); + } + + @Override + public void onActive() { + super.onActive(); + } + + @Override + public void onForeground(Intent intent) { + super.onForeground(intent); + } +} diff --git a/entry/src/main/java/com/xcl/search/test/slice/SearchDemoAbilitySlice.java b/entry/src/main/java/com/xcl/search/test/slice/SearchDemoAbilitySlice.java new file mode 100644 index 0000000..8c9ab65 --- /dev/null +++ b/entry/src/main/java/com/xcl/search/test/slice/SearchDemoAbilitySlice.java @@ -0,0 +1,198 @@ +/* + * Copyright 2022 田梓萱, xcl@xuegao-tzx.top + * + * Licensed under the GNU Affero General Public License, Version 3.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.gnu.org/licenses/agpl-3.0.txt + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.xcl.search.test.slice; + +import com.xcl.search.test.ResourceTable; +import com.xcl.supersearch.SHistoryContactor; +import com.xcl.supersearch.SRContactor; +import com.xcl.supersearch.SearchView; +import com.xcl.supersearch.Utils; +import ohos.aafwk.ability.AbilitySlice; +import ohos.aafwk.content.Intent; +import ohos.agp.components.ListContainer; +import ohos.agp.window.service.WindowManager; +import ohos.data.distributed.common.KvManagerConfig; +import ohos.data.distributed.common.KvManagerFactory; +import ohos.distributedhardware.devicemanager.DeviceInfo; +import ohos.hiviewdfx.HiLog; +import ohos.hiviewdfx.HiLogLabel; + +import java.util.ArrayList; +import java.util.List; + +public class SearchDemoAbilitySlice extends AbilitySlice { + private static final HiLogLabel label = new HiLogLabel(HiLog.LOG_APP, 0x00234, "SearchDemoAbilitySlice"); + private int PDD = -2; + private SearchView sV; + + private static List getSearch() { + List list = new ArrayList<>(); + for (int i = 0; i < 15; i++) { + list.add(new SRContactor("zhangsan", "class1", "1", "2你", "3", "4.7")); + } + list.add(new SRContactor("zhtzx5", "clsths2"));//支持只传标题、信息,此时后面4个按钮默认不显示 + list.add(new SRContactor("zhng", "cl1", null, ",2u", "3g", "7n7"));//支持传null,此时传null的将不会显示 + list.add(new SRContactor("zhxcl5", null));//支持只传标题,同时传null,此时后面4个按钮和信息不显示 + //TODO:注意:第一个不可为null + list.add(new SRContactor("zhags", "clhhs1", "1操", "2", "3码", "47"));//支持传入全部信息 + return list; + } + + private static List getSuggection() { + List list = new ArrayList<>(); + list.add(new SHistoryContactor("小草林", ResourceTable.Media_ic_history_black_24dp, -3));//这里-3代表根据默认图标或xml中配置的图标显示 + list.add(new SHistoryContactor("TEST", ResourceTable.Media_ic_history_black_24dp, -1));//这里-1代表根据不显示图标 + list.add(new SHistoryContactor("测试", -1, ResourceTable.Media_ic_close_black_24dp)); + list.add(new SHistoryContactor("...", ResourceTable.Media_ic_history_black_24dp, ResourceTable.Media_ic_close_black_24dp)); + list.add(new SHistoryContactor("test"));//可以只配置建议信息,会自动根据默认图标或xml中配置的图标显示 + return list; + } + + @Override + public void onStart(Intent intent) { + super.onStart(intent); + getWindow().addFlags(WindowManager.LayoutConfig.MARK_ALLOW_EXTEND_LAYOUT); + ohos.data.distributed.device.DeviceInfo localDeviceInfo = KvManagerFactory.getInstance() + .createKvManager(new KvManagerConfig((getContext()))).getLocalDeviceInfo(); + int localDeviceType = Integer.parseInt(localDeviceInfo.getType()); + if (localDeviceType == DeviceInfo.DeviceType.WEARABLE.value()) { + super.setUIContent(ResourceTable.Layout_ability_search_demow); + } else { + super.setUIContent(ResourceTable.Layout_ability_search_demo); + } + Utils.pd_pd = true; + sV = (SearchView) findComponentById(ResourceTable.Id_searchview); + if (sV == null) { + Utils.info(SearchDemoAbilitySlice.label, "null"); + } else { + Utils.info(SearchDemoAbilitySlice.label, "not null"); + } + if (intent != null) { + String action = intent.getStringParam("SEARCH_PD"); + if ("withoutSug".equals(action)) { + PDD = -1; + } else if ("recentSug".equals(action)) { + PDD = 0; + } else if ("hasknownSug".equals(action)) { + PDD = 1; + } + } else { + terminate(); + } + + initView(); + } + + private void initView() { + + + if (PDD == 0) { + /*sv.Onsearch(getContext(), + (ListContainer) findComponentById(ResourceTable.Id_ListContainer), + sv, + findComponentById(ResourceTable.Id_emptyView), + (com.xcl.supersearch.RoundProgressBar) findComponentById(ResourceTable.Id_progressBar), + getSearch(), + true);*///TODO:方法一,无需建议列表只需配置true即可 + sV.setContext(getContext()) + .setRoundProgressBar((com.xcl.supersearch.RoundProgressBar) findComponentById(ResourceTable.Id_progressBar)) + .setSearchView(sV) + .setSRListContainer(SearchDemoAbilitySlice.getSearch()) + .setSuggestionisShow(true) + .setBackComponent(findComponentById(ResourceTable.Id_emptyView)) + .setListContainer((ListContainer) findComponentById(ResourceTable.Id_ListContainer)) + .Builder();//TODO:方法二 + } else if (PDD == 1) { + /*sv.Onsearch(getContext(),//获取所在能力的context + (ListContainer) findComponentById(ResourceTable.Id_ListContainer),//根据id获取并绑定结果列表展示控件 + sv,//根据id绑定控件 + findComponentById(ResourceTable.Id_emptyView),//根据id获取并绑定背景展示控件 + (com.xcl.supersearch.RoundProgressBar) findComponentById(ResourceTable.Id_progressBar),//根据id获取并绑定背景Loading加载动画控件 + getSearch(),//传入搜索的数据 + getSuggection(),//传入搜索建议的数据,如果不配置这个,则不会自带搜索建议 + true);//是否开启搜索建议 + *///TODO:方法一 + sV.setContext(getContext())//设置所在能力的context + .setRoundProgressBar((com.xcl.supersearch.RoundProgressBar) findComponentById(ResourceTable.Id_progressBar))//设置背景Loading加载动画控件 + .setSearchView(sV)//设置搜索控件 + .setSRListContainer(SearchDemoAbilitySlice.getSearch())//传入搜索的数据 + .setSuggestionisShow(true)//设置是否开启搜索建议 + .setSuggestionList(SearchDemoAbilitySlice.getSuggection())//设置搜索建议的数据 + .setBackComponent(findComponentById(ResourceTable.Id_emptyView))//设置背景展示控件 + .setListContainer((ListContainer) findComponentById(ResourceTable.Id_ListContainer))//设置结果列表展示控件 + .Builder();//执行构造 + //TODO:方法二 + } else if (PDD == -1) { + sV.setContext(getContext()) + .setRoundProgressBar((com.xcl.supersearch.RoundProgressBar) findComponentById(ResourceTable.Id_progressBar)) + .setSearchView(sV) + .setSRListContainer(SearchDemoAbilitySlice.getSearch()) + .setBackComponent(findComponentById(ResourceTable.Id_emptyView)) + .setListContainer((ListContainer) findComponentById(ResourceTable.Id_ListContainer)) + .Builder();//TODO:方法二 + /*sv.Onsearch(getContext(), + (ListContainer) findComponentById(ResourceTable.Id_ListContainer), + sv, + findComponentById(ResourceTable.Id_emptyView), + (com.xcl.supersearch.RoundProgressBar) findComponentById(ResourceTable.Id_progressBar), + getSearch());*///TODO:方法一,不配置默认不开启搜索建议 + } + sV.setCustomListener(new SearchView.CustomListener() { + @Override + public void onFilter(String filter) { + //TODO:右上角的按钮事件 + } + }); + sV.setBt1Listener(new SearchView.Bt1Listener() { + @Override + public void onbT1(int position) { + HiLog.error(SearchDemoAbilitySlice.label, "点击了按钮1,其的行号为:" + position + 1); + //TODO:一行列表第一个的按钮事件 + } + }); + sV.setBackClickListener(new SearchView.BackClickListener() { + @Override + public void onBackClick() { + terminate(); + //TODO:左上角的按钮事件 + } + }); + sV.setNullWarnListener(new SearchView.NullWarnListener() { + @Override + public void onNullError() { + HiLog.error(SearchDemoAbilitySlice.label, "空搜索警告1"); + //TODO:支持自定义空搜索警告 + } + }); + sV.setNoneWarnListener(new SearchView.NoneWarnListener() { + @Override + public void onNullWarn() { + HiLog.error(SearchDemoAbilitySlice.label, "空结果警告1"); + //TODO:支持自定义空结果警告 + } + }); + } + + @Override + public void onActive() { + super.onActive(); + } + + @Override + public void onForeground(Intent intent) { + super.onForeground(intent); + } +} diff --git a/entry/src/main/resources/base/element/string.json b/entry/src/main/resources/base/element/string.json new file mode 100644 index 0000000..e450c0d --- /dev/null +++ b/entry/src/main/resources/base/element/string.json @@ -0,0 +1,64 @@ +{ + "string": [ + { + "name": "entry_MainAbility", + "value": "entry_MainAbility" + }, + { + "name": "mainability_description", + "value": "Java_Empty Ability" + }, + { + "name": "mainability_HelloWorld", + "value": "Hello World" + }, + { + "name": "searchmr", + "value": "搜索默认页面" + }, + { + "name": "withoutSug", + "value": "无建议搜索" + }, + { + "name": "recentSug", + "value": "有最近建议搜索" + }, + { + "name": "hasknownSug", + "value": "有已知建议搜索" + }, + { + "name": "suggestion_text", + "value": "建议文本" + }, + { + "name": "search_hint_text", + "value": "搜索..." + }, + { + "name": "search_hint_text_", + "value": "搜索." + }, + { + "name": "search_input_null", + "value": "搜索值为空" + }, + { + "name": "search_answer_none", + "value": "搜索结果为空" + }, + { + "name": "searchdemoability_description", + "value": "Java_Empty Ability" + }, + { + "name": "searchdemoability_HelloWorld", + "value": "Hello World" + }, + { + "name": "entry_SearchDemoAbility", + "value": "entry_SearchDemoAbility" + } + ] +} \ No newline at end of file diff --git a/entry/src/main/resources/base/graphic/background_ability_main.xml b/entry/src/main/resources/base/graphic/background_ability_main.xml new file mode 100644 index 0000000..a002c23 --- /dev/null +++ b/entry/src/main/resources/base/graphic/background_ability_main.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/graphic/background_ability_search_demo.xml b/entry/src/main/resources/base/graphic/background_ability_search_demo.xml new file mode 100644 index 0000000..9ed8e67 --- /dev/null +++ b/entry/src/main/resources/base/graphic/background_ability_search_demo.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/graphic/ic_arrow_left.xml b/entry/src/main/resources/base/graphic/ic_arrow_left.xml new file mode 100644 index 0000000..dac8775 --- /dev/null +++ b/entry/src/main/resources/base/graphic/ic_arrow_left.xml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/graphic/ic_close.xml b/entry/src/main/resources/base/graphic/ic_close.xml new file mode 100644 index 0000000..8940e56 --- /dev/null +++ b/entry/src/main/resources/base/graphic/ic_close.xml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/graphic/ic_filters.xml b/entry/src/main/resources/base/graphic/ic_filters.xml new file mode 100644 index 0000000..fe9534c --- /dev/null +++ b/entry/src/main/resources/base/graphic/ic_filters.xml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/graphic/ic_history_black.xml b/entry/src/main/resources/base/graphic/ic_history_black.xml new file mode 100644 index 0000000..2151e9e --- /dev/null +++ b/entry/src/main/resources/base/graphic/ic_history_black.xml @@ -0,0 +1,33 @@ + + + + + + + + + + diff --git a/entry/src/main/resources/base/layout/ability_main.xml b/entry/src/main/resources/base/layout/ability_main.xml new file mode 100644 index 0000000..77db19f --- /dev/null +++ b/entry/src/main/resources/base/layout/ability_main.xml @@ -0,0 +1,52 @@ + + + + + +