From 1415bc6f4e279405291e6a48556edbbebff87be2 Mon Sep 17 00:00:00 2001 From: it90msart <36246172@qq.com> Date: Sun, 21 Nov 2021 22:15:59 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E6=AC=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 15 ++ .idea/.gitignore | 3 + .idea/compiler.xml | 6 + .idea/gradle.xml | 20 ++ .idea/jarRepositories.xml | 35 ++++ .idea/misc.xml | 9 + .idea/runConfigurations.xml | 10 + .idea/vcs.xml | 7 + app/.gitignore | 1 + app/build.gradle | 38 ++++ app/proguard-rules.pro | 21 +++ .../action/ExampleInstrumentedTest.java | 26 +++ app/src/main/AndroidManifest.xml | 28 +++ .../com/wiik/lubanroute/action/MyAPP.java | 15 ++ .../wiik/lubanroute/action/TestActivity.java | 93 ++++++++++ .../wiik/lubanroute/action/TestActivity1.java | 47 +++++ .../action/data/LBBaseRouteModule.java | 12 ++ .../action/data/LBDefineRouteModule.java | 30 +++ .../action/data/MyDefineModule.java | 24 +++ .../action/data/RouteActivityBean.java | 43 +++++ .../rourte/LBBaseRouteModuleDefault.java | 16 ++ .../action/rourte/LBRouteMethod.java | 18 ++ .../action/rourte/LBRouteModuleConfig.java | 4 + .../lubanroute/action/rourte/LBRouteView.java | 15 ++ .../lubanroute/action/util/LBRouteModule.java | 170 +++++++++++++++++ .../action/util/LBRouterDataManager.java | 160 ++++++++++++++++ .../drawable-v24/ic_launcher_foreground.xml | 30 +++ .../res/drawable/ic_launcher_background.xml | 170 +++++++++++++++++ app/src/main/res/layout/activity_1.xml | 44 +++++ .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3593 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 5339 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2636 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 3388 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4926 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 7472 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7909 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 11873 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10652 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 16570 bytes app/src/main/res/values-night/themes.xml | 16 ++ app/src/main/res/values/colors.xml | 10 + app/src/main/res/values/strings.xml | 3 + app/src/main/res/values/themes.xml | 16 ++ .../lubanroute/action/ExampleUnitTest.java | 17 ++ build.gradle | 27 +++ gradle.properties | 17 ++ gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 54329 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 172 ++++++++++++++++++ gradlew.bat | 84 +++++++++ settings.gradle | 2 + 53 files changed, 1490 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/.gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/gradle.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/runConfigurations.xml create mode 100644 .idea/vcs.xml create mode 100644 app/.gitignore create mode 100644 app/build.gradle create mode 100644 app/proguard-rules.pro create mode 100644 app/src/androidTest/java/com/wiik/lubanroute/action/ExampleInstrumentedTest.java create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/java/com/wiik/lubanroute/action/MyAPP.java create mode 100644 app/src/main/java/com/wiik/lubanroute/action/TestActivity.java create mode 100644 app/src/main/java/com/wiik/lubanroute/action/TestActivity1.java create mode 100644 app/src/main/java/com/wiik/lubanroute/action/data/LBBaseRouteModule.java create mode 100644 app/src/main/java/com/wiik/lubanroute/action/data/LBDefineRouteModule.java create mode 100644 app/src/main/java/com/wiik/lubanroute/action/data/MyDefineModule.java create mode 100644 app/src/main/java/com/wiik/lubanroute/action/data/RouteActivityBean.java create mode 100644 app/src/main/java/com/wiik/lubanroute/action/rourte/LBBaseRouteModuleDefault.java create mode 100644 app/src/main/java/com/wiik/lubanroute/action/rourte/LBRouteMethod.java create mode 100644 app/src/main/java/com/wiik/lubanroute/action/rourte/LBRouteModuleConfig.java create mode 100644 app/src/main/java/com/wiik/lubanroute/action/rourte/LBRouteView.java create mode 100644 app/src/main/java/com/wiik/lubanroute/action/util/LBRouteModule.java create mode 100644 app/src/main/java/com/wiik/lubanroute/action/util/LBRouterDataManager.java create mode 100644 app/src/main/res/drawable-v24/ic_launcher_foreground.xml create mode 100644 app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 app/src/main/res/layout/activity_1.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/values-night/themes.xml create mode 100644 app/src/main/res/values/colors.xml create mode 100644 app/src/main/res/values/strings.xml create mode 100644 app/src/main/res/values/themes.xml create mode 100644 app/src/test/java/com/wiik/lubanroute/action/ExampleUnitTest.java create mode 100644 build.gradle 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 settings.gradle diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aa724b7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..fb7f4a8 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..5cd135a --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..958a5be --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..860da66 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..797acea --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9c38112 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..b59cc00 --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,38 @@ +plugins { + id 'com.android.library' +} + +android { + compileSdkVersion 30 + buildToolsVersion "30.0.3" + + defaultConfig { + minSdkVersion 19 + targetSdkVersion 30 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +dependencies { + + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'com.google.android.material:material:1.2.1' + testImplementation 'junit:junit:4.+' + androidTestImplementation 'androidx.test.ext:junit:1.1.2' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' + implementation 'com.github.vcredit-zj:commons-langa:v3.5-1' +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/app/src/androidTest/java/com/wiik/lubanroute/action/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/wiik/lubanroute/action/ExampleInstrumentedTest.java new file mode 100644 index 0000000..d0d03d4 --- /dev/null +++ b/app/src/androidTest/java/com/wiik/lubanroute/action/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.wiik.lubanroute.action; + +import android.content.Context; + +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + assertEquals("com.wiik.lubanroute.action", appContext.getPackageName()); + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..65bac75 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/wiik/lubanroute/action/MyAPP.java b/app/src/main/java/com/wiik/lubanroute/action/MyAPP.java new file mode 100644 index 0000000..f83a6f4 --- /dev/null +++ b/app/src/main/java/com/wiik/lubanroute/action/MyAPP.java @@ -0,0 +1,15 @@ +package com.wiik.lubanroute.action; + +import android.app.Application; + +import com.wiik.lubanroute.action.util.LBRouterDataManager; + +public class MyAPP extends Application { + + @Override + public void onCreate() { + super.onCreate(); + LBRouterDataManager manager=new LBRouterDataManager(getBaseContext(),"routeCode"); + manager.initRoute(); + } +} diff --git a/app/src/main/java/com/wiik/lubanroute/action/TestActivity.java b/app/src/main/java/com/wiik/lubanroute/action/TestActivity.java new file mode 100644 index 0000000..1a91aa8 --- /dev/null +++ b/app/src/main/java/com/wiik/lubanroute/action/TestActivity.java @@ -0,0 +1,93 @@ +package com.wiik.lubanroute.action; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; + +import com.wiik.lubanroute.action.rourte.LBRouteMethod; +import com.wiik.lubanroute.action.rourte.LBRouteView; +import com.wiik.lubanroute.action.util.LBRouteModule; + +@LBRouteView(routeCode = "123",className = "com.wiik.lubanroute.action.TestActivity") +public class TestActivity extends AppCompatActivity { + + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_1); + findViewById(R.id.click_1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + LBRouteModule.routeCodeActivity(TestActivity.this.getClass(),"123","getRouteData"); + } + }); + + findViewById(R.id.click_2).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Bundle bundle=new Bundle(); + bundle.putString("key","bundle手动传值"); + LBRouteModule.routeCodeActivity("123",bundle); + } + }); + findViewById(R.id.click_3).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String url="www.aaa.com?routeCode=123&key=routeCodevalue"; + LBRouteModule.routeUrlActivity(url); + } + }); + findViewById(R.id.click_4).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Bundle bundle=new Bundle(); + bundle.putString("key","bundle 自定义手动传值"); + LBRouteModule.routeDefineActivity("123",bundle); + } + }); + + + findViewById(R.id.click_5).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String url="www.aaa.com?routeCode=123&key=routeCodevaluedefine"; + LBRouteModule.routeDefineUrlActivity(url); + } + }); + + TextView text = findViewById(R.id.text_result); + Intent intent = getIntent(); + if (intent != null&&intent.getExtras()!=null) { + Bundle bundle = intent.getExtras(); + if (bundle.containsKey("key")) { + text.setText(bundle.getString("key")); + } else { + text.setText("暂无数据"); + } + } + } + + + + @LBRouteMethod(cls = TestActivity.class,routeMethodName = "getRouteData") + public Bundle getRouteData() { + Bundle bun=new Bundle(); + bun.putString("key","注解传值"); + return bun; + } + @LBRouteMethod(cls = TestActivity1.class, routeMethodName = "getRouteData1") + public Bundle getRouteData1() { + Bundle bun = new Bundle(); + bun.putString("key1", "value1"); + return bun; + } + + + +} diff --git a/app/src/main/java/com/wiik/lubanroute/action/TestActivity1.java b/app/src/main/java/com/wiik/lubanroute/action/TestActivity1.java new file mode 100644 index 0000000..6b38ae5 --- /dev/null +++ b/app/src/main/java/com/wiik/lubanroute/action/TestActivity1.java @@ -0,0 +1,47 @@ +package com.wiik.lubanroute.action; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; + +import com.wiik.lubanroute.action.rourte.LBRouteMethod; +import com.wiik.lubanroute.action.rourte.LBRouteView; +import com.wiik.lubanroute.action.util.LBRouteModule; + +@LBRouteView(routeCode = "1001", className = "com.wiik.lubanroute.action.TestActivity1") +public class TestActivity1 extends AppCompatActivity { + + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_1); + TextView text = findViewById(R.id.text_result); + Intent intent = getIntent(); + if (intent != null) { + Bundle bundle = intent.getExtras(); + if (bundle.containsKey("key")) { + text.setText(bundle.getString("key")); + } else { + text.setText("暂无数据"); + } + } + + + } + + + @LBRouteMethod(cls = TestActivity1.class, routeMethodName = "getRouteData") + public Bundle getRouteData() { + Bundle bun = new Bundle(); + bun.putString("key", "value"); + return bun; + } + + + +} diff --git a/app/src/main/java/com/wiik/lubanroute/action/data/LBBaseRouteModule.java b/app/src/main/java/com/wiik/lubanroute/action/data/LBBaseRouteModule.java new file mode 100644 index 0000000..a81dd1d --- /dev/null +++ b/app/src/main/java/com/wiik/lubanroute/action/data/LBBaseRouteModule.java @@ -0,0 +1,12 @@ +package com.wiik.lubanroute.action.data; + +import android.content.Context; +import android.content.Intent; + +public abstract class LBBaseRouteModule { + + public Context mContext; + public abstract void route(String code, Intent intent); + + +} diff --git a/app/src/main/java/com/wiik/lubanroute/action/data/LBDefineRouteModule.java b/app/src/main/java/com/wiik/lubanroute/action/data/LBDefineRouteModule.java new file mode 100644 index 0000000..a345e05 --- /dev/null +++ b/app/src/main/java/com/wiik/lubanroute/action/data/LBDefineRouteModule.java @@ -0,0 +1,30 @@ +package com.wiik.lubanroute.action.data; + +import com.wiik.lubanroute.action.rourte.LBBaseRouteModuleDefault; +import com.wiik.lubanroute.action.util.LBRouterDataManager; + +public class LBDefineRouteModule extends LBBaseRouteModuleDefault { + + private static volatile LBDefineRouteModule module; + + + public LBDefineRouteModule() { + module = this; + + } + + public static synchronized LBDefineRouteModule getInstance() { + synchronized (LBDefineRouteModule.class) { + return module; + } + } + + @Override + public void regist(String modId, LBBaseRouteModule module) { + if (!map.containsKey(modId)) { + module.mContext = LBRouterDataManager.getIstance().getContext(); + map.put(modId, module); + } + } + +} diff --git a/app/src/main/java/com/wiik/lubanroute/action/data/MyDefineModule.java b/app/src/main/java/com/wiik/lubanroute/action/data/MyDefineModule.java new file mode 100644 index 0000000..4e3b2bb --- /dev/null +++ b/app/src/main/java/com/wiik/lubanroute/action/data/MyDefineModule.java @@ -0,0 +1,24 @@ +package com.wiik.lubanroute.action.data; + +import android.content.Intent; +import android.text.TextUtils; + +import com.wiik.lubanroute.action.TestActivity; + +import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; + +public class MyDefineModule extends LBBaseRouteModule { + @Override + public void route(String code, Intent intent) { + + switch (Integer.parseInt(code)) { + case 123: + intent.setClass(mContext, TestActivity.class); + intent.setFlags(FLAG_ACTIVITY_NEW_TASK); + mContext.startActivity(intent); + break; + } + + + } +} diff --git a/app/src/main/java/com/wiik/lubanroute/action/data/RouteActivityBean.java b/app/src/main/java/com/wiik/lubanroute/action/data/RouteActivityBean.java new file mode 100644 index 0000000..fbfdb8b --- /dev/null +++ b/app/src/main/java/com/wiik/lubanroute/action/data/RouteActivityBean.java @@ -0,0 +1,43 @@ +package com.wiik.lubanroute.action.data; + +import android.app.Activity; +import android.content.Intent; + +public class RouteActivityBean { + private String routeCode; + private String activityName; + private int flags=-1; + + + public RouteActivityBean(String routeCode, String activityName, int flags) { + this.routeCode = routeCode; + this.activityName = activityName; + this.flags = flags; + } + + + public int getFlags() { + return flags; + } + + public void setFlags(int flags) { + this.flags = flags; + } + + public String getRouteCode() { + return routeCode; + } + + public void setRouteCode(String routeCode) { + this.routeCode = routeCode; + } + + public String getActivityName() { + return activityName; + } + + public void setActivityName(String activityName) { + this.activityName = activityName; + } + +} diff --git a/app/src/main/java/com/wiik/lubanroute/action/rourte/LBBaseRouteModuleDefault.java b/app/src/main/java/com/wiik/lubanroute/action/rourte/LBBaseRouteModuleDefault.java new file mode 100644 index 0000000..6a5f353 --- /dev/null +++ b/app/src/main/java/com/wiik/lubanroute/action/rourte/LBBaseRouteModuleDefault.java @@ -0,0 +1,16 @@ +package com.wiik.lubanroute.action.rourte; + +import com.wiik.lubanroute.action.data.LBBaseRouteModule; + +import java.util.HashMap; +import java.util.Map; + +public abstract class LBBaseRouteModuleDefault { + + + public Map map=new HashMap<>(); + + public abstract void regist(String modId,LBBaseRouteModule module); + + +} diff --git a/app/src/main/java/com/wiik/lubanroute/action/rourte/LBRouteMethod.java b/app/src/main/java/com/wiik/lubanroute/action/rourte/LBRouteMethod.java new file mode 100644 index 0000000..286d25e --- /dev/null +++ b/app/src/main/java/com/wiik/lubanroute/action/rourte/LBRouteMethod.java @@ -0,0 +1,18 @@ +package com.wiik.lubanroute.action.rourte; + +import android.os.Bundle; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target({ElementType.METHOD}) + +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface LBRouteMethod { + Class cls(); + String routeMethodName(); +} diff --git a/app/src/main/java/com/wiik/lubanroute/action/rourte/LBRouteModuleConfig.java b/app/src/main/java/com/wiik/lubanroute/action/rourte/LBRouteModuleConfig.java new file mode 100644 index 0000000..c7d3819 --- /dev/null +++ b/app/src/main/java/com/wiik/lubanroute/action/rourte/LBRouteModuleConfig.java @@ -0,0 +1,4 @@ +package com.wiik.lubanroute.action.rourte; + +public class LBRouteModuleConfig { +} diff --git a/app/src/main/java/com/wiik/lubanroute/action/rourte/LBRouteView.java b/app/src/main/java/com/wiik/lubanroute/action/rourte/LBRouteView.java new file mode 100644 index 0000000..4447d8a --- /dev/null +++ b/app/src/main/java/com/wiik/lubanroute/action/rourte/LBRouteView.java @@ -0,0 +1,15 @@ +package com.wiik.lubanroute.action.rourte; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.TYPE; + + +@Target(TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface LBRouteView { + String routeCode() default ""; + String className() default ""; +} diff --git a/app/src/main/java/com/wiik/lubanroute/action/util/LBRouteModule.java b/app/src/main/java/com/wiik/lubanroute/action/util/LBRouteModule.java new file mode 100644 index 0000000..8fc0f56 --- /dev/null +++ b/app/src/main/java/com/wiik/lubanroute/action/util/LBRouteModule.java @@ -0,0 +1,170 @@ +package com.wiik.lubanroute.action.util; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.text.TextUtils; +import android.util.Log; + +import androidx.annotation.NonNull; + +import com.wiik.lubanroute.action.data.LBBaseRouteModule; +import com.wiik.lubanroute.action.data.LBDefineRouteModule; +import com.wiik.lubanroute.action.data.RouteActivityBean; + +import java.util.List; + +import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; + +public class LBRouteModule { + + + public static void routeDefineActivity(String code, Bundle bundle) { + if (LBDefineRouteModule.getInstance() == null || LBDefineRouteModule.getInstance().map.isEmpty()) { + new IllegalAccessException("手动维护模块没有注册,暂不支持该业务"); + return; + } + for (String modid : LBDefineRouteModule.getInstance().map.keySet()) { + LBBaseRouteModule module = LBDefineRouteModule.getInstance().map.get(modid); + if (module != null) { + Intent intent = new Intent(); + intent.putExtras(bundle); + module.route(code, intent); + } + } + + } + + /** + * 通过自定义模块跳转 + */ + public static void routeDefineUrlActivity(String routeUrl) { + routeUrl(routeUrl, true); + + } + + @SuppressLint("LongLogTag") + public static void routeCodeActivity(String code, Bundle bundle) { + if (LBRouterDataManager.getIstance().getContext() == null || LBRouterDataManager.getIstance().dataIsEmpty()) { + Log.e("LBRouteModule--routeDetail", "context is null or routedata list is empty"); + return; + } + + List routeActivityBeans = LBRouterDataManager.getIstance().getRouteActivityData(); + Context contex = LBRouterDataManager.getIstance().getContext(); + + for (RouteActivityBean bean : routeActivityBeans) { + if (TextUtils.equals(code, bean.getRouteCode())) { + //找到路由key,进行跳转 + Intent intent = new Intent(); + intent.setClassName(contex.getPackageName(), bean.getActivityName()); + intent.putExtras(bundle); + if (bean.getFlags() != -1) { + intent.setFlags(FLAG_ACTIVITY_NEW_TASK | bean.getFlags()); + } else { + intent.setFlags(FLAG_ACTIVITY_NEW_TASK); + } + contex.startActivity(intent); + break; + } + } + } + + /** + * @param mimeClzz :当前页面 + * @param routeMethodName 需要通过路由传递过去的数据的方法名 + * @param tagCode 目标页路由,只支持activity + */ + @SuppressLint("LongLogTag") + public static void routeCodeActivity(Class mimeClzz, String tagCode, @NonNull String routeMethodName) { + if (LBRouterDataManager.getIstance().getContext() == null || LBRouterDataManager.getIstance().dataIsEmpty()) { + Log.e("LBRouteModule--routeDetail", "context is null or routedata list is empty"); + return; + } + + List routeActivityBeans = LBRouterDataManager.getIstance().getRouteActivityData(); + Context contex = LBRouterDataManager.getIstance().getContext(); + + for (RouteActivityBean bean : routeActivityBeans) { + if (TextUtils.equals(tagCode, bean.getRouteCode())) { + //找到路由key,进行跳转 + Bundle bundle = null; + try { + bundle = LBRouterDataManager.getIstance().annotationMethod(mimeClzz, routeMethodName); + } catch (Exception e) { + + } + Intent intent = new Intent(); + intent.setClassName(contex.getPackageName(), bean.getActivityName()); + intent.putExtras(bundle); + if (bean.getFlags() != -1) { + intent.setFlags(FLAG_ACTIVITY_NEW_TASK | bean.getFlags()); + } else { + intent.setFlags(FLAG_ACTIVITY_NEW_TASK); + } + contex.startActivity(intent); + break; + } + } + } + + public static void routeUrlActivity(String routeUrl) { + routeUrl(routeUrl, false); + + } + + private static void routeUrl(String routeUrl, boolean isMaster) { + //routeCode是html中routeKye的key + + String routeKey = LBRouterDataManager.getIstance().getRouteKey(); + if (routeUrl.contains(routeKey) && routeUrl.contains("?")) { + + String[] text = routeUrl.split("\\?"); + String[] keyValue = text[1].split("&"); + Bundle bundle = new Bundle(); + String routeCode = "";//获取路由编号 + for (String value : keyValue) { + if (TextUtils.isEmpty(value)) { + continue; + } + String[] kv = value.split("="); + String key = ""; + String keyByValue = ""; + if (kv.length == 1) { + key = kv[0]; + + } else if (kv.length == 2) { + key = kv[0]; + keyByValue = kv[1]; + } + if (TextUtils.isEmpty(key)) { + continue; + } + if (TextUtils.equals(routeKey, key)) { + //key + routeCode = keyByValue; + } else { + bundle.putString(key, keyByValue); + } + } + if (!isMaster) { + routeCodeActivity(routeCode, bundle);//转换成原生,访问原生页面 + } else { + routeDefineActivity(routeCode, bundle); + } + + + } else { + //默认走内置h5,的页面,自己配置,如果没有路由标识,业务自行处理 + Intent intent = new Intent(); + Context context = LBRouterDataManager.getIstance().getContext(); + intent.setClass(context, LBRouterDataManager.getIstance().getWebActivity().getClass()); + intent.setFlags(FLAG_ACTIVITY_NEW_TASK); + context.startActivity(intent); + } + + } + + +} diff --git a/app/src/main/java/com/wiik/lubanroute/action/util/LBRouterDataManager.java b/app/src/main/java/com/wiik/lubanroute/action/util/LBRouterDataManager.java new file mode 100644 index 0000000..28b6487 --- /dev/null +++ b/app/src/main/java/com/wiik/lubanroute/action/util/LBRouterDataManager.java @@ -0,0 +1,160 @@ +package com.wiik.lubanroute.action.util; + +import android.app.Activity; +import android.app.ActivityManager; +import android.content.Context; +import android.content.pm.ActivityInfo; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.os.Bundle; +import android.text.TextUtils; + +import androidx.annotation.NonNull; + +import com.wiik.lubanroute.action.data.LBDefineRouteModule; +import com.wiik.lubanroute.action.data.RouteActivityBean; +import com.wiik.lubanroute.action.rourte.LBRouteMethod; +import com.wiik.lubanroute.action.rourte.LBRouteView; + +import org.apache.commons.lang3a.reflect.MethodUtils; + +import java.lang.annotation.Annotation; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +public class LBRouterDataManager { + private List routeActivityBeans = new ArrayList<>(); + + private static LBRouterDataManager manager; + private Context mContext; + private String routeKey = ""; + + private Activity webActivity; + + + public Activity getWebActivity() { + return webActivity; + } + + /** + * @webActivity if url routecode unsupport,next will jump to webviewActivity + * @webviewActivity + */ + public void setWebActivity(Activity webActivity) { + this.webActivity = webActivity; + + } + + /** + * @routeKey 路由的关键字key + */ + public LBRouterDataManager(Context mContext, String routeKey) { + this.mContext = mContext; + this.routeKey = routeKey; + manager = this; + LBDefineRouteModule defineRouteModule=new LBDefineRouteModule(); + } + + public Context getContext() { + return mContext; + } + + + public static synchronized LBRouterDataManager getIstance() { + + synchronized (LBRouterDataManager.class) { + return manager; + } + } + + + public void initRoute() { + + initData(); + } + + + private void initData() { + + routeActivityBeans.clear(); + + PackageManager manager = mContext.getPackageManager(); + try { + PackageInfo packageInfo = manager.getPackageInfo( + mContext.getPackageName(), PackageManager.GET_ACTIVITIES); + + if (packageInfo != null) { + for (ActivityInfo info : packageInfo.activities) { + String className = info.name; + Class cls = Class.forName(className); + LBRouteView route = cls.getAnnotation(LBRouteView.class); + if (route != null && !TextUtils.isEmpty(route.className())) { + RouteActivityBean bean = new RouteActivityBean(route.routeCode(), route.className(),info.flags); + routeActivityBeans.add(bean); + + } + + + } + } + + } catch (Exception e) { + + } + + } + + + public List getRouteActivityData() { + return routeActivityBeans; + + } + + public boolean dataIsEmpty() { + if (routeActivityBeans == null || routeActivityBeans.isEmpty()) + return true; + return false; + } + + + public String getRouteKey() { + return routeKey; + } + + + public Bundle annotationMethod(Class clazz, @NonNull String routeMethodName) { + + Bundle bundle = null; +// Class clazz = Class.forName("com.zbz.annotation.pattern1.WorkService"); + List methods = MethodUtils.getMethodsListWithAnnotation(clazz, LBRouteMethod.class); + for (Method method : methods) { + for (Annotation annotation : method.getDeclaredAnnotations()) { + if (annotation instanceof LBRouteMethod) { + Class cls = ((LBRouteMethod) annotation).cls(); + String methodName = ((LBRouteMethod) annotation).routeMethodName(); + if (cls.getName().equals(clazz.getName()) && TextUtils.equals(routeMethodName, methodName)) { + try { + Object obj = method.invoke(clazz.newInstance()); + if (obj instanceof Bundle) { + bundle = (Bundle) obj; + } + } catch (Exception e) { + + } + break; + } + } + } + } + return bundle; + + } + + + + + +} diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..07d5da9 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_1.xml b/app/src/main/res/layout/activity_1.xml new file mode 100644 index 0000000..e0f0af8 --- /dev/null +++ b/app/src/main/res/layout/activity_1.xml @@ -0,0 +1,44 @@ + + +