@bytechain.cn/colamd 1.5.0 → 1.5.1-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.trae/specs/optimize-theme-loading/checklist.md +20 -0
- package/.trae/specs/optimize-theme-loading/spec.md +103 -0
- package/.trae/specs/optimize-theme-loading/tasks.md +40 -0
- package/CHANGELOG.md +323 -0
- package/CLAUDE.md +56 -0
- package/README.md +422 -26
- package/README_CN.md +480 -28
- package/android/app/build/.npmkeep +0 -0
- package/android/app/build.gradle +76 -0
- package/android/app/capacitor.build.gradle +24 -0
- package/android/app/proguard-rules.pro +21 -0
- package/android/app/release.keystore +0 -0
- package/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java +26 -0
- package/android/app/src/main/AndroidManifest.xml +64 -0
- package/android/app/src/main/java/cn/bytechain/colamd/MainActivity.java +180 -0
- package/android/app/src/main/res/drawable/ic_launcher_background.xml +170 -0
- package/android/app/src/main/res/drawable/splash.png +0 -0
- package/android/app/src/main/res/drawable-land-hdpi/splash.png +0 -0
- package/android/app/src/main/res/drawable-land-mdpi/splash.png +0 -0
- package/android/app/src/main/res/drawable-land-xhdpi/splash.png +0 -0
- package/android/app/src/main/res/drawable-land-xxhdpi/splash.png +0 -0
- package/android/app/src/main/res/drawable-land-xxxhdpi/splash.png +0 -0
- package/android/app/src/main/res/drawable-port-hdpi/splash.png +0 -0
- package/android/app/src/main/res/drawable-port-mdpi/splash.png +0 -0
- package/android/app/src/main/res/drawable-port-xhdpi/splash.png +0 -0
- package/android/app/src/main/res/drawable-port-xxhdpi/splash.png +0 -0
- package/android/app/src/main/res/drawable-port-xxxhdpi/splash.png +0 -0
- package/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +34 -0
- package/android/app/src/main/res/layout/activity_main.xml +12 -0
- package/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +5 -0
- package/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +5 -0
- package/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
- package/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png +0 -0
- package/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
- package/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
- package/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png +0 -0
- package/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
- package/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
- package/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png +0 -0
- package/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
- package/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
- package/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png +0 -0
- package/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
- package/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
- package/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png +0 -0
- package/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
- package/android/app/src/main/res/values/ic_launcher_background.xml +4 -0
- package/android/app/src/main/res/values/strings.xml +7 -0
- package/android/app/src/main/res/values/styles.xml +22 -0
- package/android/app/src/main/res/xml/file_paths.xml +5 -0
- package/android/app/src/main/res/xml/network_security_config.xml +8 -0
- package/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java +18 -0
- package/android/build.gradle +29 -0
- package/android/capacitor.settings.gradle +21 -0
- package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/android/gradle/wrapper/gradle-wrapper.properties +7 -0
- package/android/gradle.properties +22 -0
- package/android/gradlew +248 -0
- package/android/gradlew.bat +92 -0
- package/android/settings.gradle +5 -0
- package/android/variables.gradle +16 -0
- package/bytechain.cn-colamd-1.5.1-beta.2.tgz +0 -0
- package/capacitor.config.js +29 -0
- package/capacitor.config.ts +30 -0
- package/demo.md +191 -484
- package/dist/main/index.js +77 -46
- package/dist/renderer/assets/{arc-tTbbM8LO.js → arc-CPdeInCG.js} +1 -1
- package/dist/renderer/assets/{architectureDiagram-3BPJPVTR-CEgYow6c.js → architectureDiagram-3BPJPVTR-BAbnaR9G.js} +4 -3
- package/dist/renderer/assets/{blockDiagram-GPEHLZMM-LHyVtPwW.js → blockDiagram-GPEHLZMM-CYSWjnJg.js} +5 -4
- package/dist/renderer/assets/{c4Diagram-AAUBKEIU-C1P1eJrf.js → c4Diagram-AAUBKEIU-Rb1tstnr.js} +3 -2
- package/dist/renderer/assets/{channel-upve91Tq.js → channel-DpG2A6fE.js} +1 -1
- package/dist/renderer/assets/{chunk-2J33WTMH-lag2vhq9.js → chunk-2J33WTMH-DFc0Jxy_.js} +1 -1
- package/dist/renderer/assets/{chunk-4BX2VUAB-BXJ8Ggh-.js → chunk-4BX2VUAB-BhRxDTNn.js} +1 -1
- package/dist/renderer/assets/{chunk-55IACEB6-CiBpxRa1.js → chunk-55IACEB6-DEgMVBk8.js} +1 -1
- package/dist/renderer/assets/{chunk-727SXJPM-ODeKQFXC.js → chunk-727SXJPM-bjBIfiz8.js} +5 -5
- package/dist/renderer/assets/{chunk-AQP2D5EJ-BK7xJolB.js → chunk-AQP2D5EJ-DwQMzTzD.js} +3 -3
- package/dist/renderer/assets/{chunk-FMBD7UC4-BxpCZPtz.js → chunk-FMBD7UC4-CkphwJzs.js} +1 -1
- package/dist/renderer/assets/{chunk-ND2GUHAM-CqqaU9Ue.js → chunk-ND2GUHAM-oU09z4y4.js} +1 -1
- package/dist/renderer/assets/{chunk-QZHKN3VN-Biq_K124.js → chunk-QZHKN3VN-rCbVuPBn.js} +1 -1
- package/dist/renderer/assets/{classDiagram-v2-Q7XG4LA2-Cq95X99o.js → classDiagram-4FO5ZUOK-DGS2faoM.js} +7 -6
- package/dist/renderer/assets/{classDiagram-4FO5ZUOK-Cq95X99o.js → classDiagram-v2-Q7XG4LA2-DGS2faoM.js} +7 -6
- package/dist/renderer/assets/{cose-bilkent-S5V4N54A-XasiD0bu.js → cose-bilkent-S5V4N54A-iqY6-EwA.js} +2 -1
- package/dist/renderer/assets/{dagre-BM42HDAG-Nq84Gfx4.js → dagre-BM42HDAG-5t3X5sDa.js} +4 -3
- package/dist/renderer/assets/{diagram-2AECGRRQ-DwuB1GWt.js → diagram-2AECGRRQ-DzHiYDPh.js} +4 -3
- package/dist/renderer/assets/{diagram-5GNKFQAL-C2tgeI1h.js → diagram-5GNKFQAL-BiNv6Keq.js} +5 -4
- package/dist/renderer/assets/{diagram-KO2AKTUF-D5KzjNBc.js → diagram-KO2AKTUF-ClzeDG6f.js} +4 -3
- package/dist/renderer/assets/{diagram-LMA3HP47-C12xHS1c.js → diagram-LMA3HP47-CGkw7wII.js} +4 -3
- package/dist/renderer/assets/{diagram-OG6HWLK6-CnxI9oEa.js → diagram-OG6HWLK6-Dl-Hyk1_.js} +5 -4
- package/dist/renderer/assets/{erDiagram-TEJ5UH35-D_uPaKwn.js → erDiagram-TEJ5UH35-BxUN79Qb.js} +5 -4
- package/dist/renderer/assets/{flowDiagram-I6XJVG4X-B6q_1-tE.js → flowDiagram-I6XJVG4X-CzFk-KNI.js} +7 -6
- package/dist/renderer/assets/{ganttDiagram-6RSMTGT7-CFo7ifF9.js → ganttDiagram-6RSMTGT7-C2xl6Igx.js} +3 -2
- package/dist/renderer/assets/{gitGraphDiagram-PVQCEYII-WSexHTnq.js → gitGraphDiagram-PVQCEYII-_fn7XCa7.js} +5 -4
- package/dist/renderer/assets/{graph-DyX_9f6d.js → graph-CDoHYrHm.js} +1 -1
- package/dist/renderer/assets/index-B4uDgADr.js +530 -0
- package/dist/renderer/assets/index-CBcVpA3d.js +30 -0
- package/dist/renderer/assets/index-CGj1spkU.js +27 -0
- package/dist/renderer/assets/{index-dyHEFYvY.css → index-CeFpoCKV.css} +443 -400
- package/dist/renderer/assets/index-D4CPFkph.js +9 -0
- package/dist/renderer/assets/{index-DW7LS8C1.js → index-DAlXyxzt.js} +1183 -346
- package/dist/renderer/assets/index-DxOzbfR-.js +110 -0
- package/dist/renderer/assets/index-Y89U1ptl.js +9 -0
- package/dist/renderer/assets/{infoDiagram-5YYISTIA-DaeJdLRq.js → infoDiagram-5YYISTIA-DL6XIxLz.js} +3 -2
- package/dist/renderer/assets/{ishikawaDiagram-YF4QCWOH-DDCZc35f.js → ishikawaDiagram-YF4QCWOH-BUZLjRo-.js} +2 -1
- package/dist/renderer/assets/{journeyDiagram-JHISSGLW-BEdmpAgl.js → journeyDiagram-JHISSGLW-C4rH_mQM.js} +5 -4
- package/dist/renderer/assets/{kanban-definition-UN3LZRKU-BEFtQcFb.js → kanban-definition-UN3LZRKU-DRbrBcWV.js} +3 -2
- package/dist/renderer/assets/{layout-CAJgQHdw.js → layout-DZl4n4qu.js} +2 -2
- package/dist/renderer/assets/{linear-B2ggJ8Am.js → linear-B0Krxg21.js} +1 -1
- package/dist/renderer/assets/{mindmap-definition-RKZ34NQL-DSxVgHB5.js → mindmap-definition-RKZ34NQL-DdmPsWrn.js} +4 -3
- package/dist/renderer/assets/{pieDiagram-4H26LBE5-CwYoJBuL.js → pieDiagram-4H26LBE5-BPZLqwG0.js} +5 -4
- package/dist/renderer/assets/preload-helper-tXtZnHb0.js +88 -0
- package/dist/renderer/assets/{quadrantDiagram-W4KKPZXB-CST9Fvg9.js → quadrantDiagram-W4KKPZXB-Dr-oWRk9.js} +3 -2
- package/dist/renderer/assets/{requirementDiagram-4Y6WPE33-DtrH52jS.js → requirementDiagram-4Y6WPE33-B6QZd0lo.js} +4 -3
- package/dist/renderer/assets/{sankeyDiagram-5OEKKPKP-ca1tPzJ_.js → sankeyDiagram-5OEKKPKP-Cyl9ojEt.js} +2 -1
- package/dist/renderer/assets/{sequenceDiagram-3UESZ5HK-Dfp1EJZ7.js → sequenceDiagram-3UESZ5HK-D48Yr9T6.js} +4 -3
- package/dist/renderer/assets/{stateDiagram-AJRCARHV-Bha2QoNB.js → stateDiagram-AJRCARHV-qyb8ETsa.js} +7 -6
- package/dist/renderer/assets/{stateDiagram-v2-BHNVJYJU-DWgFUYu1.js → stateDiagram-v2-BHNVJYJU-DmDOyyrJ.js} +5 -4
- package/dist/renderer/assets/{timeline-definition-PNZ67QCA-C3h_-OTj.js → timeline-definition-PNZ67QCA-C-KQxTi1.js} +3 -2
- package/dist/renderer/assets/{vennDiagram-CIIHVFJN-DFzjSrZi.js → vennDiagram-CIIHVFJN-BdaZlnH-.js} +2 -1
- package/dist/renderer/assets/{wardley-L42UT6IY-Cx-VbqoS.js → wardley-L42UT6IY-b-_GPpqL.js} +1 -1
- package/dist/renderer/assets/{wardleyDiagram-YWT4CUSO-S2D9XqX6.js → wardleyDiagram-YWT4CUSO-B2hBE-EE.js} +4 -3
- package/dist/renderer/assets/web-BKE0SH0E.js +36 -0
- package/dist/renderer/assets/web-CBsFp24u.js +564 -0
- package/dist/renderer/assets/web-Dc8YgoHP.js +24 -0
- package/dist/renderer/assets/web-TfDzToU7.js +58 -0
- package/dist/renderer/assets/{xychartDiagram-2RQKCTM6-Cfxigbts.js → xychartDiagram-2RQKCTM6-CSvswDTY.js} +3 -2
- package/dist/renderer/index.html +62 -3
- package/docs/academic-demo.md +566 -0
- package/docs/demo.html +748 -0
- package/docs/demo.md +546 -0
- package/docs/demo.pdf +0 -0
- package/docs/theme-paradigm.md +658 -0
- package/electron-builder.yml +7 -0
- package/electron.vite.config.js +31 -0
- package/electron.vite.config.ts +1 -1
- package/ios/App/App/AppDelegate.swift +49 -0
- package/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png +0 -0
- package/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json +14 -0
- package/ios/App/App/Assets.xcassets/Contents.json +6 -0
- package/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json +23 -0
- package/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png +0 -0
- package/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png +0 -0
- package/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png +0 -0
- package/ios/App/App/Base.lproj/LaunchScreen.storyboard +32 -0
- package/ios/App/App/Base.lproj/Main.storyboard +19 -0
- package/ios/App/App/Info.plist +49 -0
- package/ios/App/App.xcodeproj/project.pbxproj +408 -0
- package/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/ios/App/Podfile +28 -0
- package/package.json +23 -3
- package/resources/templates/slides/template-forest-ink.html +540 -0
- package/scripts/generate-icons.js +102 -0
- package/src/main/index.ts +87 -63
- package/src/preload/index.d.ts +51 -0
- package/src/preload/index.js +70 -0
- package/src/renderer/capacitor-api.ts +713 -0
- package/src/renderer/editor/editor.ts +87 -4
- package/src/renderer/editor/plugins/index.ts +24 -32
- package/src/renderer/editor/plugins/math-plugin.ts +1 -1
- package/src/renderer/editor/plugins/mermaid-plugin-custom.css +13 -398
- package/src/renderer/editor/plugins/mermaid-plugin.ts +62 -71
- package/src/renderer/editor/plugins/themes/base/dark.css +23 -0
- package/src/renderer/editor/plugins/themes/base/elegant.css +32 -0
- package/src/renderer/editor/plugins/themes/base/light.css +20 -0
- package/src/renderer/editor/plugins/themes/base/newsprint.css +27 -0
- package/src/renderer/editor/plugins/themes/components/mermaid/academic.css +43 -0
- package/src/renderer/editor/plugins/themes/components/mermaid/dark.css +20 -0
- package/src/renderer/editor/plugins/themes/components/mermaid/elegant.css +24 -0
- package/src/renderer/editor/plugins/themes/components/mermaid/light.css +21 -0
- package/src/renderer/editor/plugins/themes/components/mermaid/newsprint.css +26 -0
- package/src/renderer/editor/plugins/themes/components/mermaid/variables.css +592 -0
- package/src/renderer/editor/plugins/themes/foundation.css +143 -0
- package/src/renderer/editor/plugins/themes/theme-manager.ts +92 -0
- package/src/renderer/env.d.ts +4 -1
- package/src/renderer/index.html +59 -1
- package/src/renderer/main.ts +432 -57
- package/src/renderer/mobile.css +429 -0
- package/themes/README.md +3 -0
- package/themes/academic-paper.css +1321 -0
- package/themes/elegant.css +14 -7
- package/themes/forest-ink.css +664 -0
- package/themes/pixso-design.css +1261 -0
- package/themes/swiss-design.css +596 -0
- package/themes/template.css +498 -0
- package/tsconfig.main.json +1 -0
- package/tsconfig.main.tsbuildinfo +1 -0
- package/tsconfig.preload.json +1 -0
- package/tsconfig.preload.tsbuildinfo +1 -0
- package/tsconfig.renderer.json +1 -0
- package/tsconfig.renderer.tsbuildinfo +1 -0
- package/tsconfig.tsbuildinfo +1 -0
- package/.trae/documents/fix-mermaid-colors-and-sankey.md +0 -50
- package/src/renderer/themes/theme-manager.ts +0 -40
- /package/src/renderer/{themes → editor/plugins/themes}/base.css +0 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
apply plugin: 'com.android.application'
|
|
2
|
+
|
|
3
|
+
android {
|
|
4
|
+
namespace "cn.bytechain.colamd"
|
|
5
|
+
compileSdk rootProject.ext.compileSdkVersion
|
|
6
|
+
|
|
7
|
+
signingConfigs {
|
|
8
|
+
release {
|
|
9
|
+
storeFile file('release.keystore')
|
|
10
|
+
storePassword 'colamd2026'
|
|
11
|
+
keyAlias 'colamd'
|
|
12
|
+
keyPassword 'colamd2026'
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
defaultConfig {
|
|
17
|
+
applicationId "cn.bytechain.colamd"
|
|
18
|
+
minSdkVersion rootProject.ext.minSdkVersion
|
|
19
|
+
targetSdkVersion rootProject.ext.targetSdkVersion
|
|
20
|
+
// Read version from package.json for single-source versioning
|
|
21
|
+
def packageJson = new groovy.json.JsonSlurper().parse(file('../../package.json'))
|
|
22
|
+
def pkgVersion = packageJson.version
|
|
23
|
+
versionName pkgVersion
|
|
24
|
+
// versionCode: parse major.minor.patch from numeric part of semver
|
|
25
|
+
def numericPart = pkgVersion.split('-')[0]
|
|
26
|
+
def parts = numericPart.split('\\.')
|
|
27
|
+
versionCode parts[0].toInteger() * 10000 + parts[1].toInteger() * 100 + parts[2].toInteger()
|
|
28
|
+
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
|
29
|
+
aaptOptions {
|
|
30
|
+
// Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps.
|
|
31
|
+
// Default: https://android.googlesource.com/platform/frameworks/base/+/282e181b58cf72b6ca770dc7ca5f91f135444502/tools/aapt/AaptAssets.cpp#61
|
|
32
|
+
ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~'
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
buildTypes {
|
|
36
|
+
release {
|
|
37
|
+
minifyEnabled true
|
|
38
|
+
shrinkResources true
|
|
39
|
+
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
|
40
|
+
signingConfig signingConfigs.release
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
compileOptions {
|
|
44
|
+
sourceCompatibility JavaVersion.VERSION_17
|
|
45
|
+
targetCompatibility JavaVersion.VERSION_17
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
repositories {
|
|
50
|
+
flatDir{
|
|
51
|
+
dirs '../capacitor-cordova-android-plugins/src/main/libs', 'libs'
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
dependencies {
|
|
56
|
+
implementation fileTree(include: ['*.jar'], dir: 'libs')
|
|
57
|
+
implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion"
|
|
58
|
+
implementation "androidx.coordinatorlayout:coordinatorlayout:$androidxCoordinatorLayoutVersion"
|
|
59
|
+
implementation "androidx.core:core-splashscreen:$coreSplashScreenVersion"
|
|
60
|
+
implementation project(':capacitor-android')
|
|
61
|
+
testImplementation "junit:junit:$junitVersion"
|
|
62
|
+
androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion"
|
|
63
|
+
androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion"
|
|
64
|
+
implementation project(':capacitor-cordova-android-plugins')
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
apply from: 'capacitor.build.gradle'
|
|
68
|
+
|
|
69
|
+
try {
|
|
70
|
+
def servicesJSON = file('google-services.json')
|
|
71
|
+
if (servicesJSON.text) {
|
|
72
|
+
apply plugin: 'com.google.gms.google-services'
|
|
73
|
+
}
|
|
74
|
+
} catch(Exception e) {
|
|
75
|
+
logger.info("google-services.json not found, google-services plugin not applied. Push Notifications won't work")
|
|
76
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN
|
|
2
|
+
|
|
3
|
+
android {
|
|
4
|
+
compileOptions {
|
|
5
|
+
sourceCompatibility JavaVersion.VERSION_17
|
|
6
|
+
targetCompatibility JavaVersion.VERSION_17
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
apply from: "../capacitor-cordova-android-plugins/cordova.variables.gradle"
|
|
11
|
+
dependencies {
|
|
12
|
+
implementation project(':capacitor-app')
|
|
13
|
+
implementation project(':capacitor-filesystem')
|
|
14
|
+
implementation project(':capacitor-haptics')
|
|
15
|
+
implementation project(':capacitor-share')
|
|
16
|
+
implementation project(':capacitor-status-bar')
|
|
17
|
+
implementation project(':capawesome-capacitor-file-picker')
|
|
18
|
+
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
if (hasProperty('postBuildExtras')) {
|
|
23
|
+
postBuildExtras()
|
|
24
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Add project specific ProGuard rules here.
|
|
2
|
+
# You can control the set of applied configuration files using the
|
|
3
|
+
# proguardFiles setting in build.gradle.
|
|
4
|
+
#
|
|
5
|
+
# For more details, see
|
|
6
|
+
# http://developer.android.com/guide/developing/tools/proguard.html
|
|
7
|
+
|
|
8
|
+
# If your project uses WebView with JS, uncomment the following
|
|
9
|
+
# and specify the fully qualified class name to the JavaScript interface
|
|
10
|
+
# class:
|
|
11
|
+
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
|
12
|
+
# public *;
|
|
13
|
+
#}
|
|
14
|
+
|
|
15
|
+
# Uncomment this to preserve the line number information for
|
|
16
|
+
# debugging stack traces.
|
|
17
|
+
#-keepattributes SourceFile,LineNumberTable
|
|
18
|
+
|
|
19
|
+
# If you keep the line number information, uncomment this to
|
|
20
|
+
# hide the original source file name.
|
|
21
|
+
#-renamesourcefileattribute SourceFile
|
|
Binary file
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
package com.getcapacitor.myapp;
|
|
2
|
+
|
|
3
|
+
import static org.junit.Assert.*;
|
|
4
|
+
|
|
5
|
+
import android.content.Context;
|
|
6
|
+
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
|
7
|
+
import androidx.test.platform.app.InstrumentationRegistry;
|
|
8
|
+
import org.junit.Test;
|
|
9
|
+
import org.junit.runner.RunWith;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Instrumented test, which will execute on an Android device.
|
|
13
|
+
*
|
|
14
|
+
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
|
15
|
+
*/
|
|
16
|
+
@RunWith(AndroidJUnit4.class)
|
|
17
|
+
public class ExampleInstrumentedTest {
|
|
18
|
+
|
|
19
|
+
@Test
|
|
20
|
+
public void useAppContext() throws Exception {
|
|
21
|
+
// Context of the app under test.
|
|
22
|
+
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
|
|
23
|
+
|
|
24
|
+
assertEquals("com.getcapacitor.app", appContext.getPackageName());
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
|
3
|
+
|
|
4
|
+
<application
|
|
5
|
+
android:allowBackup="true"
|
|
6
|
+
android:icon="@mipmap/ic_launcher"
|
|
7
|
+
android:label="@string/app_name"
|
|
8
|
+
android:roundIcon="@mipmap/ic_launcher_round"
|
|
9
|
+
android:supportsRtl="true"
|
|
10
|
+
android:theme="@style/AppTheme"
|
|
11
|
+
android:networkSecurityConfig="@xml/network_security_config">
|
|
12
|
+
|
|
13
|
+
<activity
|
|
14
|
+
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode"
|
|
15
|
+
android:name=".MainActivity"
|
|
16
|
+
android:label="@string/title_activity_main"
|
|
17
|
+
android:theme="@style/AppTheme.NoActionBarLaunch"
|
|
18
|
+
android:launchMode="singleTask"
|
|
19
|
+
android:exported="true"
|
|
20
|
+
android:windowSoftInputMode="adjustResize">
|
|
21
|
+
|
|
22
|
+
<intent-filter>
|
|
23
|
+
<action android:name="android.intent.action.MAIN" />
|
|
24
|
+
<category android:name="android.intent.category.LAUNCHER" />
|
|
25
|
+
</intent-filter>
|
|
26
|
+
|
|
27
|
+
<!-- Handle .md file associations -->
|
|
28
|
+
<intent-filter>
|
|
29
|
+
<action android:name="android.intent.action.VIEW" />
|
|
30
|
+
<category android:name="android.intent.category.DEFAULT" />
|
|
31
|
+
<category android:name="android.intent.category.BROWSABLE" />
|
|
32
|
+
<data android:scheme="content" />
|
|
33
|
+
<data android:mimeType="text/markdown" />
|
|
34
|
+
<data android:mimeType="text/plain" />
|
|
35
|
+
</intent-filter>
|
|
36
|
+
<intent-filter>
|
|
37
|
+
<action android:name="android.intent.action.VIEW" />
|
|
38
|
+
<category android:name="android.intent.category.DEFAULT" />
|
|
39
|
+
<category android:name="android.intent.category.BROWSABLE" />
|
|
40
|
+
<data android:scheme="content" />
|
|
41
|
+
<data android:host="*" />
|
|
42
|
+
<data android:pathPattern=".*\\.md" />
|
|
43
|
+
<data android:pathPattern=".*\\.markdown" />
|
|
44
|
+
</intent-filter>
|
|
45
|
+
|
|
46
|
+
</activity>
|
|
47
|
+
|
|
48
|
+
<provider
|
|
49
|
+
android:name="androidx.core.content.FileProvider"
|
|
50
|
+
android:authorities="${applicationId}.fileprovider"
|
|
51
|
+
android:exported="false"
|
|
52
|
+
android:grantUriPermissions="true">
|
|
53
|
+
<meta-data
|
|
54
|
+
android:name="android.support.FILE_PROVIDER_PATHS"
|
|
55
|
+
android:resource="@xml/file_paths"></meta-data>
|
|
56
|
+
</provider>
|
|
57
|
+
</application>
|
|
58
|
+
|
|
59
|
+
<!-- Permissions -->
|
|
60
|
+
<uses-permission android:name="android.permission.INTERNET" />
|
|
61
|
+
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
|
62
|
+
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
|
63
|
+
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
|
|
64
|
+
</manifest>
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
package cn.bytechain.colamd;
|
|
2
|
+
|
|
3
|
+
import android.content.Context;
|
|
4
|
+
import android.os.Bundle;
|
|
5
|
+
import android.print.PrintAttributes;
|
|
6
|
+
import android.print.PrintDocumentAdapter;
|
|
7
|
+
import android.print.PrintManager;
|
|
8
|
+
import android.view.View;
|
|
9
|
+
import android.webkit.JavascriptInterface;
|
|
10
|
+
import android.webkit.WebView;
|
|
11
|
+
import android.webkit.WebSettings;
|
|
12
|
+
|
|
13
|
+
import com.getcapacitor.BridgeActivity;
|
|
14
|
+
|
|
15
|
+
import java.io.BufferedReader;
|
|
16
|
+
import java.io.InputStream;
|
|
17
|
+
import java.io.InputStreamReader;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* 主活动类,继承自 Capacitor 的 BridgeActivity。
|
|
21
|
+
* 支持 IME 中文输入、文件管理器打开文件、原生 PDF 打印。
|
|
22
|
+
* 使用 JavascriptInterface 替代 Capacitor Plugin 实现更可靠的 JS-原生桥接。
|
|
23
|
+
*/
|
|
24
|
+
public class MainActivity extends BridgeActivity {
|
|
25
|
+
|
|
26
|
+
private String pendingFileName = null;
|
|
27
|
+
private String pendingFileContent = null;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* 活动创建时的初始化方法。
|
|
31
|
+
*
|
|
32
|
+
* @param savedInstanceState 保存的实例状态
|
|
33
|
+
*/
|
|
34
|
+
@Override
|
|
35
|
+
public void onCreate(Bundle savedInstanceState) {
|
|
36
|
+
super.onCreate(savedInstanceState);
|
|
37
|
+
|
|
38
|
+
WebView webView = getBridge().getWebView();
|
|
39
|
+
if (webView != null) {
|
|
40
|
+
WebSettings settings = webView.getSettings();
|
|
41
|
+
settings.setJavaScriptEnabled(true);
|
|
42
|
+
settings.setDomStorageEnabled(true);
|
|
43
|
+
settings.setCacheMode(WebSettings.LOAD_DEFAULT);
|
|
44
|
+
|
|
45
|
+
// ── Critical for Android IME (Chinese/Japanese/Korean input) ──
|
|
46
|
+
// TEXT_AUTOSIZING is deprecated and interferes with text measurement
|
|
47
|
+
// during IME composition, breaking CJK input on contenteditable.
|
|
48
|
+
settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL);
|
|
49
|
+
|
|
50
|
+
// Disable zoom controls — they interfere with touch event handling
|
|
51
|
+
// for contenteditable IME on some Android versions.
|
|
52
|
+
settings.setSupportZoom(false);
|
|
53
|
+
settings.setBuiltInZoomControls(false);
|
|
54
|
+
settings.setDisplayZoomControls(false);
|
|
55
|
+
|
|
56
|
+
// Viewport setup for mobile editor layout
|
|
57
|
+
settings.setUseWideViewPort(true);
|
|
58
|
+
settings.setLoadWithOverviewMode(true);
|
|
59
|
+
|
|
60
|
+
// Let the WebView handle its own IME focus for contenteditable.
|
|
61
|
+
// Explicitly requesting focus ensures the WebView is ready for input.
|
|
62
|
+
webView.setFocusable(true);
|
|
63
|
+
webView.setFocusableInTouchMode(true);
|
|
64
|
+
webView.requestFocus();
|
|
65
|
+
|
|
66
|
+
// 注入 Java 桥接对象,供 JS 调用原生功能
|
|
67
|
+
webView.addJavascriptInterface(new ColaMDNativeBridge(), "ColaMDNative");
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (savedInstanceState == null) {
|
|
71
|
+
handleIntent(getIntent());
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* 处理新 Intent(singleTask 下再次打开文件时触发)。
|
|
77
|
+
*/
|
|
78
|
+
@Override
|
|
79
|
+
protected void onNewIntent(android.content.Intent intent) {
|
|
80
|
+
super.onNewIntent(intent);
|
|
81
|
+
setIntent(intent);
|
|
82
|
+
handleIntent(intent);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* 解析 Intent 中的文件数据并缓存。
|
|
87
|
+
*/
|
|
88
|
+
private void handleIntent(android.content.Intent intent) {
|
|
89
|
+
if (intent == null || !android.content.Intent.ACTION_VIEW.equals(intent.getAction())) return;
|
|
90
|
+
|
|
91
|
+
android.net.Uri uri = intent.getData();
|
|
92
|
+
if (uri == null) return;
|
|
93
|
+
|
|
94
|
+
try {
|
|
95
|
+
String content = readContentFromUri(uri);
|
|
96
|
+
if (content != null && !content.isEmpty()) {
|
|
97
|
+
pendingFileName = getFileName(uri);
|
|
98
|
+
pendingFileContent = content;
|
|
99
|
+
}
|
|
100
|
+
} catch (Exception e) {
|
|
101
|
+
e.printStackTrace();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* 从 content URI 读取文件文本内容(UTF-8)。
|
|
107
|
+
*/
|
|
108
|
+
private String readContentFromUri(android.net.Uri uri) {
|
|
109
|
+
StringBuilder sb = new StringBuilder();
|
|
110
|
+
try (InputStream is = getContentResolver().openInputStream(uri);
|
|
111
|
+
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"))) {
|
|
112
|
+
String line;
|
|
113
|
+
while ((line = reader.readLine()) != null) {
|
|
114
|
+
sb.append(line).append("\n");
|
|
115
|
+
}
|
|
116
|
+
return sb.toString();
|
|
117
|
+
} catch (Exception e) {
|
|
118
|
+
e.printStackTrace();
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* 从 URI 中提取文件名。
|
|
125
|
+
*/
|
|
126
|
+
private String getFileName(android.net.Uri uri) {
|
|
127
|
+
String name = "document.md";
|
|
128
|
+
if ("content".equals(uri.getScheme())) {
|
|
129
|
+
try (android.database.Cursor cursor = getContentResolver().query(
|
|
130
|
+
uri, new String[]{android.provider.OpenableColumns.DISPLAY_NAME}, null, null, null)) {
|
|
131
|
+
if (cursor != null && cursor.moveToFirst()) {
|
|
132
|
+
int idx = cursor.getColumnIndex(android.provider.OpenableColumns.DISPLAY_NAME);
|
|
133
|
+
if (idx >= 0) name = cursor.getString(idx);
|
|
134
|
+
}
|
|
135
|
+
} catch (Exception e) { /* ignore */ }
|
|
136
|
+
}
|
|
137
|
+
return name;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* JS-原生桥接类,暴露给 WebView 的原生能力。
|
|
142
|
+
* JS 通过 window.ColaMDNative.{method}() 调用。
|
|
143
|
+
*/
|
|
144
|
+
public class ColaMDNativeBridge {
|
|
145
|
+
|
|
146
|
+
/** JS 主动调用检查是否有待打开的文件 */
|
|
147
|
+
@JavascriptInterface
|
|
148
|
+
public String checkPendingFile() {
|
|
149
|
+
if (pendingFileName != null && pendingFileContent != null) {
|
|
150
|
+
String name = pendingFileName;
|
|
151
|
+
String content = pendingFileContent;
|
|
152
|
+
pendingFileName = null;
|
|
153
|
+
pendingFileContent = null;
|
|
154
|
+
// 返回 JSON,JS 端解析
|
|
155
|
+
String escapedName = name.replace("\\", "\\\\").replace("\"", "\\\"");
|
|
156
|
+
String escapedContent = content.replace("\\", "\\\\").replace("\"", "\\\"").replace("\n", "\\n");
|
|
157
|
+
return "{\"name\":\"" + escapedName + "\",\"content\":\"" + escapedContent + "\"}";
|
|
158
|
+
}
|
|
159
|
+
return "null";
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/** 调用系统打印对话框(含"保存为PDF"选项) */
|
|
163
|
+
@JavascriptInterface
|
|
164
|
+
public void printDocument(final String jobName) {
|
|
165
|
+
runOnUiThread(() -> {
|
|
166
|
+
try {
|
|
167
|
+
WebView wv = getBridge().getWebView();
|
|
168
|
+
if (wv == null) return;
|
|
169
|
+
|
|
170
|
+
PrintManager pm = (PrintManager) getSystemService(Context.PRINT_SERVICE);
|
|
171
|
+
PrintDocumentAdapter adapter = wv.createPrintDocumentAdapter(
|
|
172
|
+
jobName != null && !jobName.isEmpty() ? jobName : "ColaMD Document");
|
|
173
|
+
pm.print(jobName, adapter, new PrintAttributes.Builder().build());
|
|
174
|
+
} catch (Exception e) {
|
|
175
|
+
e.printStackTrace();
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
3
|
+
android:width="108dp"
|
|
4
|
+
android:height="108dp"
|
|
5
|
+
android:viewportHeight="108"
|
|
6
|
+
android:viewportWidth="108">
|
|
7
|
+
<path
|
|
8
|
+
android:fillColor="#26A69A"
|
|
9
|
+
android:pathData="M0,0h108v108h-108z" />
|
|
10
|
+
<path
|
|
11
|
+
android:fillColor="#00000000"
|
|
12
|
+
android:pathData="M9,0L9,108"
|
|
13
|
+
android:strokeColor="#33FFFFFF"
|
|
14
|
+
android:strokeWidth="0.8" />
|
|
15
|
+
<path
|
|
16
|
+
android:fillColor="#00000000"
|
|
17
|
+
android:pathData="M19,0L19,108"
|
|
18
|
+
android:strokeColor="#33FFFFFF"
|
|
19
|
+
android:strokeWidth="0.8" />
|
|
20
|
+
<path
|
|
21
|
+
android:fillColor="#00000000"
|
|
22
|
+
android:pathData="M29,0L29,108"
|
|
23
|
+
android:strokeColor="#33FFFFFF"
|
|
24
|
+
android:strokeWidth="0.8" />
|
|
25
|
+
<path
|
|
26
|
+
android:fillColor="#00000000"
|
|
27
|
+
android:pathData="M39,0L39,108"
|
|
28
|
+
android:strokeColor="#33FFFFFF"
|
|
29
|
+
android:strokeWidth="0.8" />
|
|
30
|
+
<path
|
|
31
|
+
android:fillColor="#00000000"
|
|
32
|
+
android:pathData="M49,0L49,108"
|
|
33
|
+
android:strokeColor="#33FFFFFF"
|
|
34
|
+
android:strokeWidth="0.8" />
|
|
35
|
+
<path
|
|
36
|
+
android:fillColor="#00000000"
|
|
37
|
+
android:pathData="M59,0L59,108"
|
|
38
|
+
android:strokeColor="#33FFFFFF"
|
|
39
|
+
android:strokeWidth="0.8" />
|
|
40
|
+
<path
|
|
41
|
+
android:fillColor="#00000000"
|
|
42
|
+
android:pathData="M69,0L69,108"
|
|
43
|
+
android:strokeColor="#33FFFFFF"
|
|
44
|
+
android:strokeWidth="0.8" />
|
|
45
|
+
<path
|
|
46
|
+
android:fillColor="#00000000"
|
|
47
|
+
android:pathData="M79,0L79,108"
|
|
48
|
+
android:strokeColor="#33FFFFFF"
|
|
49
|
+
android:strokeWidth="0.8" />
|
|
50
|
+
<path
|
|
51
|
+
android:fillColor="#00000000"
|
|
52
|
+
android:pathData="M89,0L89,108"
|
|
53
|
+
android:strokeColor="#33FFFFFF"
|
|
54
|
+
android:strokeWidth="0.8" />
|
|
55
|
+
<path
|
|
56
|
+
android:fillColor="#00000000"
|
|
57
|
+
android:pathData="M99,0L99,108"
|
|
58
|
+
android:strokeColor="#33FFFFFF"
|
|
59
|
+
android:strokeWidth="0.8" />
|
|
60
|
+
<path
|
|
61
|
+
android:fillColor="#00000000"
|
|
62
|
+
android:pathData="M0,9L108,9"
|
|
63
|
+
android:strokeColor="#33FFFFFF"
|
|
64
|
+
android:strokeWidth="0.8" />
|
|
65
|
+
<path
|
|
66
|
+
android:fillColor="#00000000"
|
|
67
|
+
android:pathData="M0,19L108,19"
|
|
68
|
+
android:strokeColor="#33FFFFFF"
|
|
69
|
+
android:strokeWidth="0.8" />
|
|
70
|
+
<path
|
|
71
|
+
android:fillColor="#00000000"
|
|
72
|
+
android:pathData="M0,29L108,29"
|
|
73
|
+
android:strokeColor="#33FFFFFF"
|
|
74
|
+
android:strokeWidth="0.8" />
|
|
75
|
+
<path
|
|
76
|
+
android:fillColor="#00000000"
|
|
77
|
+
android:pathData="M0,39L108,39"
|
|
78
|
+
android:strokeColor="#33FFFFFF"
|
|
79
|
+
android:strokeWidth="0.8" />
|
|
80
|
+
<path
|
|
81
|
+
android:fillColor="#00000000"
|
|
82
|
+
android:pathData="M0,49L108,49"
|
|
83
|
+
android:strokeColor="#33FFFFFF"
|
|
84
|
+
android:strokeWidth="0.8" />
|
|
85
|
+
<path
|
|
86
|
+
android:fillColor="#00000000"
|
|
87
|
+
android:pathData="M0,59L108,59"
|
|
88
|
+
android:strokeColor="#33FFFFFF"
|
|
89
|
+
android:strokeWidth="0.8" />
|
|
90
|
+
<path
|
|
91
|
+
android:fillColor="#00000000"
|
|
92
|
+
android:pathData="M0,69L108,69"
|
|
93
|
+
android:strokeColor="#33FFFFFF"
|
|
94
|
+
android:strokeWidth="0.8" />
|
|
95
|
+
<path
|
|
96
|
+
android:fillColor="#00000000"
|
|
97
|
+
android:pathData="M0,79L108,79"
|
|
98
|
+
android:strokeColor="#33FFFFFF"
|
|
99
|
+
android:strokeWidth="0.8" />
|
|
100
|
+
<path
|
|
101
|
+
android:fillColor="#00000000"
|
|
102
|
+
android:pathData="M0,89L108,89"
|
|
103
|
+
android:strokeColor="#33FFFFFF"
|
|
104
|
+
android:strokeWidth="0.8" />
|
|
105
|
+
<path
|
|
106
|
+
android:fillColor="#00000000"
|
|
107
|
+
android:pathData="M0,99L108,99"
|
|
108
|
+
android:strokeColor="#33FFFFFF"
|
|
109
|
+
android:strokeWidth="0.8" />
|
|
110
|
+
<path
|
|
111
|
+
android:fillColor="#00000000"
|
|
112
|
+
android:pathData="M19,29L89,29"
|
|
113
|
+
android:strokeColor="#33FFFFFF"
|
|
114
|
+
android:strokeWidth="0.8" />
|
|
115
|
+
<path
|
|
116
|
+
android:fillColor="#00000000"
|
|
117
|
+
android:pathData="M19,39L89,39"
|
|
118
|
+
android:strokeColor="#33FFFFFF"
|
|
119
|
+
android:strokeWidth="0.8" />
|
|
120
|
+
<path
|
|
121
|
+
android:fillColor="#00000000"
|
|
122
|
+
android:pathData="M19,49L89,49"
|
|
123
|
+
android:strokeColor="#33FFFFFF"
|
|
124
|
+
android:strokeWidth="0.8" />
|
|
125
|
+
<path
|
|
126
|
+
android:fillColor="#00000000"
|
|
127
|
+
android:pathData="M19,59L89,59"
|
|
128
|
+
android:strokeColor="#33FFFFFF"
|
|
129
|
+
android:strokeWidth="0.8" />
|
|
130
|
+
<path
|
|
131
|
+
android:fillColor="#00000000"
|
|
132
|
+
android:pathData="M19,69L89,69"
|
|
133
|
+
android:strokeColor="#33FFFFFF"
|
|
134
|
+
android:strokeWidth="0.8" />
|
|
135
|
+
<path
|
|
136
|
+
android:fillColor="#00000000"
|
|
137
|
+
android:pathData="M19,79L89,79"
|
|
138
|
+
android:strokeColor="#33FFFFFF"
|
|
139
|
+
android:strokeWidth="0.8" />
|
|
140
|
+
<path
|
|
141
|
+
android:fillColor="#00000000"
|
|
142
|
+
android:pathData="M29,19L29,89"
|
|
143
|
+
android:strokeColor="#33FFFFFF"
|
|
144
|
+
android:strokeWidth="0.8" />
|
|
145
|
+
<path
|
|
146
|
+
android:fillColor="#00000000"
|
|
147
|
+
android:pathData="M39,19L39,89"
|
|
148
|
+
android:strokeColor="#33FFFFFF"
|
|
149
|
+
android:strokeWidth="0.8" />
|
|
150
|
+
<path
|
|
151
|
+
android:fillColor="#00000000"
|
|
152
|
+
android:pathData="M49,19L49,89"
|
|
153
|
+
android:strokeColor="#33FFFFFF"
|
|
154
|
+
android:strokeWidth="0.8" />
|
|
155
|
+
<path
|
|
156
|
+
android:fillColor="#00000000"
|
|
157
|
+
android:pathData="M59,19L59,89"
|
|
158
|
+
android:strokeColor="#33FFFFFF"
|
|
159
|
+
android:strokeWidth="0.8" />
|
|
160
|
+
<path
|
|
161
|
+
android:fillColor="#00000000"
|
|
162
|
+
android:pathData="M69,19L69,89"
|
|
163
|
+
android:strokeColor="#33FFFFFF"
|
|
164
|
+
android:strokeWidth="0.8" />
|
|
165
|
+
<path
|
|
166
|
+
android:fillColor="#00000000"
|
|
167
|
+
android:pathData="M79,19L79,89"
|
|
168
|
+
android:strokeColor="#33FFFFFF"
|
|
169
|
+
android:strokeWidth="0.8" />
|
|
170
|
+
</vector>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
2
|
+
xmlns:aapt="http://schemas.android.com/aapt"
|
|
3
|
+
android:width="108dp"
|
|
4
|
+
android:height="108dp"
|
|
5
|
+
android:viewportHeight="108"
|
|
6
|
+
android:viewportWidth="108">
|
|
7
|
+
<path
|
|
8
|
+
android:fillType="evenOdd"
|
|
9
|
+
android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z"
|
|
10
|
+
android:strokeColor="#00000000"
|
|
11
|
+
android:strokeWidth="1">
|
|
12
|
+
<aapt:attr name="android:fillColor">
|
|
13
|
+
<gradient
|
|
14
|
+
android:endX="78.5885"
|
|
15
|
+
android:endY="90.9159"
|
|
16
|
+
android:startX="48.7653"
|
|
17
|
+
android:startY="61.0927"
|
|
18
|
+
android:type="linear">
|
|
19
|
+
<item
|
|
20
|
+
android:color="#44000000"
|
|
21
|
+
android:offset="0.0" />
|
|
22
|
+
<item
|
|
23
|
+
android:color="#00000000"
|
|
24
|
+
android:offset="1.0" />
|
|
25
|
+
</gradient>
|
|
26
|
+
</aapt:attr>
|
|
27
|
+
</path>
|
|
28
|
+
<path
|
|
29
|
+
android:fillColor="#FFFFFF"
|
|
30
|
+
android:fillType="nonZero"
|
|
31
|
+
android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z"
|
|
32
|
+
android:strokeColor="#00000000"
|
|
33
|
+
android:strokeWidth="1" />
|
|
34
|
+
</vector>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
3
|
+
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
4
|
+
xmlns:tools="http://schemas.android.com/tools"
|
|
5
|
+
android:layout_width="match_parent"
|
|
6
|
+
android:layout_height="match_parent"
|
|
7
|
+
tools:context=".MainActivity">
|
|
8
|
+
|
|
9
|
+
<WebView
|
|
10
|
+
android:layout_width="match_parent"
|
|
11
|
+
android:layout_height="match_parent" />
|
|
12
|
+
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|