From 7cc53bbf32d2863643f073ce6de739ab519b493a Mon Sep 17 00:00:00 2001
From: Kr328 <39107975+Kr328@users.noreply.github.com>
Date: Tue, 10 Dec 2019 11:14:13 +0800
Subject: [PATCH] add clash://install-config handler
---
app/src/main/AndroidManifest.xml | 52 +++--
.../github/kr328/clash/ImportUrlActivity.kt | 7 +
core/build.gradle | 190 +++++++++---------
3 files changed, 132 insertions(+), 117 deletions(-)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 2a14901..d606f7c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -18,81 +18,89 @@
+ android:launchMode="singleTop"
+ android:screenOrientation="portrait">
-
+
+
+
+
+
+
+
+
+
-
-
+
@@ -101,8 +109,8 @@
+ android:enabled="false"
+ android:exported="true">
diff --git a/app/src/main/java/com/github/kr328/clash/ImportUrlActivity.kt b/app/src/main/java/com/github/kr328/clash/ImportUrlActivity.kt
index e8aac0b..bafb711 100644
--- a/app/src/main/java/com/github/kr328/clash/ImportUrlActivity.kt
+++ b/app/src/main/java/com/github/kr328/clash/ImportUrlActivity.kt
@@ -51,6 +51,13 @@ class ImportUrlActivity : BaseActivity() {
activity_import_url_save.setOnClickListener {
checkAndInsert()
}
+
+ if ( intent.action == Intent.ACTION_VIEW
+ && intent.data?.scheme == "clash"
+ && intent.data?.host == "install-config") {
+ (elements[1] as FormAdapter.TextType).content =
+ intent.data?.getQueryParameter("url") ?: ""
+ }
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
diff --git a/core/build.gradle b/core/build.gradle
index f93f497..1740143 100644
--- a/core/build.gradle
+++ b/core/build.gradle
@@ -1,96 +1,96 @@
-apply plugin: 'com.android.library'
-apply plugin: 'kotlin-android-extensions'
-apply plugin: 'kotlin-android'
-apply plugin: 'kotlinx-serialization'
-
-android {
- compileSdkVersion 29
- buildToolsVersion "29.0.2"
-
- defaultConfig {
- minSdkVersion 24
- targetSdkVersion 29
- versionCode 1
- versionName "1.0"
-
- consumerProguardFiles 'consumer-rules.pro'
- }
-
- buildTypes {
- release {
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
- }
- }
-
- sourceSets {
- main {
- assets.srcDirs += ["$buildDir/intermediates/dynamic_assets"]
- jniLibs.srcDirs += ["$buildDir/intermediates/native_output"]
- }
- }
- compileOptions {
- sourceCompatibility = 1.8
- targetCompatibility = 1.8
- }
-}
-
-dependencies {
- implementation "androidx.core:core-ktx:1.1.0"
- implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
- implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.14.0"
-}
-
-afterEvaluate {
- def compileArch = ["arm64-v8a", "x86_64"]
- def options = new GolangBuildOptions(file("src/main/golang"), file("$buildDir/intermediates/native_output"), "23")
-
- def ts = compileArch.stream().map { abi ->
- tasks.register("golangBuildFor" + abi.replace("-", "").replace("_", ""), GolangBuildTask.class) {
- setOptions options, abi
- }
- }.toArray()
-
- for ( task in tasks ) {
- if ( task.name.contains("JniLib") )
- task.dependsOn(ts)
- }
-
- def ds = tasks.register("downloadMMDB", MMDBDowloadTask.class) {
- onlyIf {
- System.currentTimeMillis() - file("$buildDir/intermediates/cache/Country.tar.gz").lastModified() > 24 * 3600 * 1000L
- }
-
- output = "$buildDir/intermediates/cache/Country.tar.gz"
- }
-
- def es = tasks.register("extractMMDB", Copy.class) {
- onlyIf {
- file("$buildDir/intermediates/cache/Country.tar.gz").lastModified() > file("$buildDir/intermediates/dynamic_assets/Country.mmdb").lastModified()
- }
-
- from(tarTree("$buildDir/intermediates/cache/Country.tar.gz")) {
- include "**/*.mmdb"
- }
- into "$buildDir/intermediates/cache/mmdb"
-
- doLast {
- file("$buildDir/intermediates/dynamic_assets").mkdirs()
- fileTree("$buildDir/intermediates/cache/mmdb").visit { FileVisitDetails details ->
- if ( details.path.endsWith("Country.mmdb") )
- details.file.renameTo(file("$buildDir/intermediates/dynamic_assets/Country.mmdb"))
- }
- }
-
- dependsOn ds
- }
-
- for ( task in tasks ) {
- if ( task.name.contains("generate") && task.name.contains("Assets") )
- task.dependsOn(es)
- }
-}
-
-repositories {
- mavenCentral()
+apply plugin: 'com.android.library'
+apply plugin: 'kotlin-android'
+apply plugin: 'kotlin-android-extensions'
+apply plugin: 'kotlinx-serialization'
+
+android {
+ compileSdkVersion 29
+ buildToolsVersion "29.0.2"
+
+ defaultConfig {
+ minSdkVersion 24
+ targetSdkVersion 29
+ versionCode 1
+ versionName "1.0"
+
+ consumerProguardFiles 'consumer-rules.pro'
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+
+ sourceSets {
+ main {
+ assets.srcDirs += ["$buildDir/intermediates/dynamic_assets"]
+ jniLibs.srcDirs += ["$buildDir/intermediates/native_output"]
+ }
+ }
+ compileOptions {
+ sourceCompatibility = 1.8
+ targetCompatibility = 1.8
+ }
+}
+
+dependencies {
+ implementation "androidx.core:core-ktx:1.1.0"
+ implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
+ implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.14.0"
+}
+
+afterEvaluate {
+ def compileArch = ["arm64-v8a", "x86_64"]
+ def options = new GolangBuildOptions(file("src/main/golang"), file("$buildDir/intermediates/native_output"), "23")
+
+ def ts = compileArch.stream().map { abi ->
+ tasks.register("golangBuildFor" + abi.replace("-", "").replace("_", ""), GolangBuildTask.class) {
+ setOptions options, abi
+ }
+ }.toArray()
+
+ for ( task in tasks ) {
+ if ( task.name.contains("JniLib") )
+ task.dependsOn(ts)
+ }
+
+ def ds = tasks.register("downloadMMDB", MMDBDowloadTask.class) {
+ onlyIf {
+ System.currentTimeMillis() - file("$buildDir/intermediates/cache/Country.tar.gz").lastModified() > 24 * 3600 * 1000L
+ }
+
+ output = "$buildDir/intermediates/cache/Country.tar.gz"
+ }
+
+ def es = tasks.register("extractMMDB", Copy.class) {
+ onlyIf {
+ file("$buildDir/intermediates/cache/Country.tar.gz").lastModified() > file("$buildDir/intermediates/dynamic_assets/Country.mmdb").lastModified()
+ }
+
+ from(tarTree("$buildDir/intermediates/cache/Country.tar.gz")) {
+ include "**/*.mmdb"
+ }
+ into "$buildDir/intermediates/cache/mmdb"
+
+ doLast {
+ file("$buildDir/intermediates/dynamic_assets").mkdirs()
+ fileTree("$buildDir/intermediates/cache/mmdb").visit { FileVisitDetails details ->
+ if ( details.path.endsWith("Country.mmdb") )
+ details.file.renameTo(file("$buildDir/intermediates/dynamic_assets/Country.mmdb"))
+ }
+ }
+
+ dependsOn ds
+ }
+
+ for ( task in tasks ) {
+ if ( task.name.contains("generate") && task.name.contains("Assets") )
+ task.dependsOn(es)
+ }
+}
+
+repositories {
+ mavenCentral()
}
\ No newline at end of file