├── .gitignore ├── .idea ├── caches │ └── build_file_checksums.ser ├── encodings.xml ├── gradle.xml ├── misc.xml ├── modules.xml ├── runConfigurations.xml └── vcs.xml ├── README.md ├── WeBase-core ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── jc │ │ └── android │ │ └── baselib │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── me │ │ │ └── splm │ │ │ └── app │ │ │ └── core │ │ │ ├── component │ │ │ ├── http │ │ │ │ ├── ABSHTTPCallback.java │ │ │ │ ├── AsyncHttpsClient.java │ │ │ │ ├── CJsonHttpResponseHandler.java │ │ │ │ ├── HTTPCallback.java │ │ │ │ ├── JsonObjPros.java │ │ │ │ └── RequestServer.java │ │ │ ├── manager │ │ │ │ ├── AbsManager.java │ │ │ │ ├── ActivityCoreManager.java │ │ │ │ ├── AnimationManager.java │ │ │ │ ├── Config.java │ │ │ │ ├── ConfigFilesManager.java │ │ │ │ ├── DatabaseConfig.java │ │ │ │ ├── FragmentCoreManager.java │ │ │ │ ├── GlobalManager.java │ │ │ │ ├── GlobalManagerManual.java │ │ │ │ ├── HttpRequestConfig.java │ │ │ │ ├── IConfigMarker.java │ │ │ │ ├── IManagerMarker.java │ │ │ │ ├── IWorkShop.java │ │ │ │ ├── InformationDesk.java │ │ │ │ ├── RequestRemoteManager.java │ │ │ │ ├── SharePreferenceConfig.java │ │ │ │ └── UILayerManager.java │ │ │ ├── tool │ │ │ │ ├── CommUtils.java │ │ │ │ ├── IUtilsMarker.java │ │ │ │ ├── SPUtils.java │ │ │ │ ├── UtilsFactory.java │ │ │ │ └── ViewUtils.java │ │ │ └── ui │ │ │ │ ├── ToastUtils.java │ │ │ │ └── lv │ │ │ │ ├── AbsAdapter.java │ │ │ │ └── ViewHolder.java │ │ │ └── logic │ │ │ ├── module │ │ │ ├── AbsModel.java │ │ │ └── IModel.java │ │ │ ├── presenter │ │ │ ├── AbsBasePresenter.java │ │ │ └── IBasePresenter.java │ │ │ └── view │ │ │ ├── BaseActivity.java │ │ │ └── IBaseView.java │ └── res │ │ └── values │ │ └── strings.xml │ └── test │ └── java │ └── com │ └── jc │ └── android │ └── baselib │ └── ExampleUnitTest.java ├── WeCodeManual.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── me │ │ └── splm │ │ └── app │ │ └── baselibdemo │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── me │ │ │ └── splm │ │ │ └── app │ │ │ └── baselibdemo │ │ │ ├── BaseActivity.java │ │ │ ├── FourActivity.java │ │ │ ├── MainActivity.java │ │ │ ├── MainApplication.java │ │ │ ├── MainViewModel.java │ │ │ ├── SecondActivity.java │ │ │ ├── TestActivity.java │ │ │ ├── TestModel │ │ │ └── BookModel.java │ │ │ ├── ThirdActivity.java │ │ │ └── manager │ │ │ └── CustomManager.java │ └── res │ │ ├── layout │ │ ├── activity_four.xml │ │ ├── activity_main.xml │ │ ├── activity_second.xml │ │ └── activity_third.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ └── values │ │ ├── colors.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── me │ └── splm │ └── app │ └── baselibdemo │ └── ExampleUnitTest.java ├── build.gradle ├── design.md ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── settings.gradle ├── update-log.md ├── update-plan.md ├── weannotation-processor ├── .gitignore ├── build.gradle └── src │ └── main │ ├── java │ └── me │ │ └── splm │ │ └── app │ │ └── inject │ │ └── processor │ │ ├── code │ │ ├── Test.java │ │ ├── WeArrayVar.java │ │ ├── WeBlock.java │ │ ├── WeBlurVar.java │ │ ├── WeClass.java │ │ ├── WeCodeModel.java │ │ ├── WeMethod.java │ │ ├── WeMethodMarker.java │ │ ├── WeMod.java │ │ ├── WeModifier.java │ │ ├── WeNumericVar.java │ │ ├── WeStringVar.java │ │ ├── WeVar.java │ │ └── WeVarValue.java │ │ ├── component │ │ ├── GenerateActionKit.java │ │ ├── GenerateFieldKit.java │ │ ├── TargetClassComponent.java │ │ ├── Utils │ │ │ ├── PackageUtils.java │ │ │ ├── TextUtils.java │ │ │ ├── TransferCenter.java │ │ │ └── entity │ │ │ │ └── LineInfo.java │ │ ├── elder │ │ │ ├── AbsMember.java │ │ │ ├── AbsProcessor.java │ │ │ ├── Member.java │ │ │ ├── NamePair.java │ │ │ ├── ProxyClass.java │ │ │ └── WeProcessor.java │ │ ├── processor │ │ │ ├── beadle │ │ │ │ ├── BeadleProcessor.java │ │ │ │ ├── GenerateBeadleAction.java │ │ │ │ └── executor │ │ │ │ │ └── BackgroundExecutor.java │ │ │ ├── loadingbridge │ │ │ │ ├── GenerateLoadingBridgeAction.java │ │ │ │ └── LoadingBridgeAssistant.java │ │ │ ├── plumber │ │ │ │ ├── GeneratePlumberAction.java │ │ │ │ ├── PlumberProcessor.java │ │ │ │ └── PlumberProcessor2.java │ │ │ └── porter │ │ │ │ ├── GeneratePorterAction.java │ │ │ │ ├── PorterCodeAssistant.java │ │ │ │ ├── PorterFieldModel.java │ │ │ │ ├── PorterFieldModelProxy.java │ │ │ │ └── PorterProcessor.java │ │ └── proxy │ │ │ ├── AbsGenerateJavaAction.java │ │ │ ├── ActionFactory.java │ │ │ ├── ActionTask.java │ │ │ ├── ActionTaskQueue.java │ │ │ ├── ExecuteActionTask.java │ │ │ ├── FieldModelProxy.java │ │ │ ├── IArborAction.java │ │ │ ├── IWorkersProxy.java │ │ │ ├── TreeBranchesMethods.java │ │ │ ├── TreeLeavesFields.java │ │ │ ├── TreeRoot.java │ │ │ ├── TreeTrunk.java │ │ │ ├── UnExecuteActionTask.java │ │ │ └── WeWorkersProxy.java │ │ ├── core │ │ ├── Config.java │ │ ├── FileGauge.java │ │ └── ForemanProcessor.java │ │ ├── exception │ │ ├── NotDuplicateException.java │ │ └── NotExtendException.java │ │ └── log │ │ ├── Level.java │ │ ├── Logger.java │ │ ├── LoggerContext.java │ │ └── LoggerFactory.java │ └── resources │ └── META-INF │ └── gradle │ └── incremental.annotation.processors └── weannotation ├── .gitignore ├── build.gradle └── src └── main └── java └── me └── splm └── app └── inject └── annotation ├── WeInjectBeadle.java ├── WeInjectFeature.java ├── WeInjectInit.java ├── WeInjectPlumber.java ├── WeInjectPorter.java └── Whether.java /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | .externalNativeBuild 10 | -------------------------------------------------------------------------------- /.idea/caches/build_file_checksums.ser: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/splm/WeBase/c411842944fb3c3fa681f35a863190565628c031/.idea/caches/build_file_checksums.ser -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 20 | 21 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 18 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | `此文件会持续更新` 2 | 3 | ------------------- 4 | 5 | 相关文档: 6 | 7 | - [更新日志](update-log.md) 8 | - [设计思路](design.md) 9 | - [WeCode的使用](WeCodeManual.md) 10 | 11 | 参考资料: 12 | 13 | - [JCodeModel](https://www.ibm.com/developerworks/cn/java/j-lo-codemodel/) 14 | - [AndroidAnnotation](http://www.jianshu.com/p/7179769fec6f) 15 | - [JavaPoet](http://blog.csdn.net/crazy1235/article/details/51876192) 16 | - [Callable&Future](http://blog.csdn.net/ghsau/article/details/7451464) 17 | 18 | ------------------------------- 19 | 20 | 21 | 22 | 23 | 24 | # 功能介绍 25 | 26 | `此项目是`[WeInject2](https://github.com/splm/WeInject2)`的整合与升级,因此WeInject2会放弃维护` 27 | 28 | > WeBase,是一个避免开发者反复编写重复代码的工具,所有常用的代码可以自己根据WeCodeManual编写自己的规则,然后交由`WeAnnotation-processor`生成代码。 29 | 30 | > `注意:使用本项目请结合Goodle Databinding框架使用。如果不想基于这个,那么需要修改Weannotation-processor中的代码` 31 | 32 | > 闲话:主要是以技术探讨交流,也参考了大量开源框架的设计思路和功能实现,真的很佩服这些大佬们的智慧,WeBase的很多功能都参考了他们的智慧结晶,这里再次膜拜大佬,感谢你们对技术做出的贡献。 33 | > 34 | > - 为什么要开发这个东西? 35 | > - 答:之前对注解这个东西并不是很陌生,也一直在用,但当时只停留在运行时,也知道效率是其弱点。直到看到一个大神写的界面路由功能,只需要简单的注解就完美的实现了冗长的跳转代码,十分好奇,可惜当时并没有看到相关实现源码,因为核心的东西并没有公布,所以本着对技术的好奇开始研究这段功能强大但又来历不明的代码。 36 | > - 这个东西能不能作为一种模块集成到项目中? 37 | > - 答:虽然我个人在公司的一些演示Demo中使用了WeBase,用着感觉也算顺手(毕竟自己一笔一划写的),但当中可能还存在很多不合理,不健壮的“坑”,导致这样那样的问题,得不偿失,所以不推荐拿来主义,其次是效率问题,考虑过增量,在编译过程会检查文件的内容变更情况,从而判断是否需要重新创建辅助的Java文件,但经过多次尝试发现一旦Java类不被创建,就意味着其不会被编译器知道,导致类丢失的问题,也看过Gradle关于增量编译的一些资料,但始终没有找到合适的解决方案,这个问题也是一个心病,有了解的朋友,希望可以Fork,一起研究。 38 | > - 这个东西现在有哪些功能? 39 | > - 答:WeBase一直在修改,一是代码混乱,二是不停的抽象,所以功能一直没有向前推进。支持Activity中的控件及其子View的初始化工作;支持简单动画的设定;支持线程创建调用;支持一些核心管理类的管理(App中的各项设定,比如SharePreference字段名称,网络模块的HostUrl等,这些配置好比一份一份的文档,摆在IWorkShop这个接口桌子上,想要拿哪份文档,无论你在哪里,来到这张桌上找就行) 40 | > - 一句话概括这个东西的原理 41 | > - 答:自动创建一个完成了部分功能的代码块,别的类主动去调用。 42 | 43 | 1.**WeVision**:动画效果类,一行代码实现复杂特效;[更多功能可以参考](https://github.com/splm/WeVision) 44 | 45 | > ```java 46 | > WeVisionStatus status=WeVisionEngine.use(Vision.FadeInLeft).playOn(targetView); 47 | > ``` 48 | 49 | 2.**WeInject**: 50 | 51 | ###### 数据传递 52 | 53 | > 这个功能现在废弃,想基于WeAnnotation做一个路由功能 54 | - a)全新的activity之间传递数据模式,避免出现无尽的`new Intent()`; 55 | 56 | > 之前: 57 | > 58 | > ```java 59 | > Intent intent=new Intent(); 60 | > intent.setClass(MainActivity.this,SecActivity.class); 61 | > intent.startActivity(intent); 62 | > ``` 63 | 64 | > 现在: 65 | > 66 | > ```java 67 | > WeSecondActivity_Plumber.getInstance().setName("Hello,nerd").startForResult(this,0x11); 68 | > ``` 69 | 70 | 71 | 72 | ----------------------- 73 | 74 | 75 | 76 | ###### 初始化代码精简 77 | 78 | - b)根除每创建一个Activity都需要添加重复的代码,避免出现无尽的初始化代码; 79 | 80 | > 之前: 81 | > 82 | > ```java 83 | > public class FourActivity extends BaseActivity { 84 | > @Override 85 | > protected void onCreate(Bundle savedInstanceState) { 86 | > super.onCreate(savedInstanceState); 87 | > setContentView(R.layout.activity_four); 88 | > Button btn=findViewById(R.id.btn_from_four); 89 | > } 90 | > } 91 | > ``` 92 | > 93 | > 94 | 95 | > 现在: 96 | > 97 | > ```java 98 | > @WeInjectPorter(R.layout.activity_main) 99 | > public class SecondActivity extends BaseActivity { 100 | > 101 | > @WeInjectPorter(viewID = R.id.open_1_act_btn) 102 | > public Button mButton; 103 | > @WeInjectPorter(viewID = R.id.open_2_act_btn) 104 | > public Button mloadBtn; 105 | > 106 | > @Override 107 | > protected void onCreate(Bundle savedInstanceState) { 108 | > super.onCreate(savedInstanceState); 109 | > } 110 | > } 111 | > ``` 112 | > 113 | 114 | `说明:使用思路基本和ButterKnife一样,都是为了避免大量的重复代码出现,同时也尽量将开发的精力转移到核心业务上。` 115 | 116 | ------------------------ 117 | 118 | 119 | 120 | ###### 线程的简化 121 | 122 | - c)线程的使用 123 | 124 | > 之前: 125 | > 126 | > ```java 127 | > 1.Thread threa=new Thread(); 128 | > 2.实现Runnable接口 129 | > //代码不赘述 130 | > ``` 131 | > 132 | > 现在: 133 | > 134 | > ```java 135 | > @WeInjectBeadle 136 | > public void doSomeThingsBackground(String name){ 137 | > doSomething(); 138 | > } 139 | > ``` 140 | 141 | ###### 动态生成Java类文件的语法简化 142 | 143 | - 如果需要自定义注解插件或者有自动构建Java类的需求可以使用,详细参考[WeCode的使用](WeCodeManual.md) 144 | 145 | -------------------------- 146 | 147 | 148 | 149 | ###详细使用 150 | 151 | 如何开始 152 | 153 | - 1.创建一个BaseActivity继承,并在OnCreate()中加入 154 | 155 | ```java 156 | WeWorkersProxy.bind(this); 157 | ``` 158 | 159 | 或者直接继承`me.splm.app.core.logic.view.BaseActivity` 160 | 161 | - 设置Activity布局 162 | 163 | ```java 164 | @WeInjectPorter(R.layout.activity_main) 165 | public class SecondActivity 166 | ``` 167 | 168 | - 初始化View控件 169 | 170 | ```java 171 | @WeInjectPorter(viewID = R.id.open_1_act_btn) 172 | public Button mButton; 173 | ``` 174 | 175 | - 初始化子View控件 176 | 177 | ```java 178 | @WeInjectPorter(viewID = R.id.layout_1_vs) 179 | public ViewStub mStubView; 180 | @WeInjectPorter(parentView = "mStubView",viewID = R.id.open_2_act_btn) 181 | public Button mButton2; 182 | ``` 183 | 184 | `注意写在子View变量上的注解ParentView一定要与父View的变量名对应,并且一定要在当前OnCreate()加入:` 185 | 186 | ```java 187 | WeMainActivity_Porter.getInstance().initOtherView(); 188 | ``` 189 | 190 | `如果没有WeXXXX_Porter类,请先ReBuild` 191 | 192 | -------------------------------------------------------------------------------- /WeBase-core/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /WeBase-core/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.library' 2 | apply plugin: 'com.github.dcendents.android-maven' 3 | android { 4 | compileSdkVersion 28 5 | defaultConfig { 6 | minSdkVersion 23 7 | targetSdkVersion 28 8 | versionCode 1 9 | versionName "1.0" 10 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 11 | javaCompileOptions.annotationProcessorOptions.includeCompileClasspath = true 12 | } 13 | buildTypes { 14 | release { 15 | minifyEnabled false 16 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 17 | ndk { 18 | abiFilters "armeabi", "armeabi-v7a", "mips", "x86" 19 | } 20 | } 21 | debug { 22 | ndk { 23 | abiFilters "armeabi", "armeabi-v7a", "mips", "x86" 24 | } 25 | } 26 | } 27 | } 28 | 29 | dependencies { 30 | compile fileTree(include: ['*.jar'], dir: 'libs') 31 | androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 32 | exclude group: 'com.android.support', module: 'support-annotations' 33 | }) 34 | compile 'com.android.support:appcompat-v7:28.0.0' 35 | testCompile 'junit:junit:4.12' 36 | compile 'com.nineoldandroids:library:2.4.0' 37 | compile 'com.daimajia.easing:library:1.0.1@aar' 38 | api project(':weannotation-processor') 39 | api 'com.github.splm:WePermission:0.0.2' 40 | api 'com.github.splm:WeVision:1.0.1' 41 | api 'com.github.splm:WeNetJudger:0.0.2' 42 | implementation 'com.loopj.android:android-async-http:1.4.9' 43 | } 44 | -------------------------------------------------------------------------------- /WeBase-core/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in E:\caodi\soft\Android\sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | 19 | # Uncomment this to preserve the line number information for 20 | # debugging stack traces. 21 | #-keepattributes SourceFile,LineNumberTable 22 | 23 | # If you keep the line number information, uncomment this to 24 | # hide the original source file name. 25 | #-renamesourcefileattribute SourceFile 26 | -------------------------------------------------------------------------------- /WeBase-core/src/androidTest/java/com/jc/android/baselib/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package com.jc.android.baselib; 2 | 3 | import android.content.Context; 4 | import android.support.test.InstrumentationRegistry; 5 | import android.support.test.runner.AndroidJUnit4; 6 | 7 | import org.junit.Test; 8 | import org.junit.runner.RunWith; 9 | 10 | import static org.junit.Assert.*; 11 | 12 | /** 13 | * Instrumentation test, which will execute on an Android device. 14 | * 15 | * @see Testing documentation 16 | */ 17 | @RunWith(AndroidJUnit4.class) 18 | public class ExampleInstrumentedTest { 19 | @Test 20 | public void useAppContext() throws Exception { 21 | // Context of the app under test. 22 | Context appContext = InstrumentationRegistry.getTargetContext(); 23 | 24 | assertEquals("com.jc.android.baselib.test", appContext.getPackageName()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /WeBase-core/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /WeBase-core/src/main/java/me/splm/app/core/component/http/ABSHTTPCallback.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.core.component.http; 2 | 3 | 4 | import org.json.JSONArray; 5 | import org.json.JSONException; 6 | import org.json.JSONObject; 7 | 8 | import java.util.ArrayList; 9 | import java.util.List; 10 | 11 | import me.splm.app.core.logic.presenter.AbsBasePresenter; 12 | 13 | 14 | public abstract class ABSHTTPCallback implements HTTPCallback { 15 | 16 | protected T presenter; 17 | 18 | public ABSHTTPCallback(T t) { 19 | this.presenter=t; 20 | } 21 | 22 | @Override 23 | public void onFailure(int statusCode, Throwable e) { 24 | switch (statusCode) { 25 | case 401: 26 | onResponse401(); 27 | break; 28 | case 403: 29 | onResponse403(); 30 | break; 31 | case 404: 32 | onResponse404(); 33 | break; 34 | case 405: 35 | onResponse405(); 36 | break; 37 | case 500: 38 | onResponse500(); 39 | break; 40 | case 503: 41 | onResponse503(); 42 | break; 43 | default: 44 | onResponseFailure("状态码:"+statusCode+",提示:"+e.getMessage()); 45 | } 46 | } 47 | 48 | @Override 49 | public void onSuccess(JSONObject object){ 50 | try{ 51 | onResponse200(object); 52 | }catch (JSONException e){ 53 | onResponseFailure(e.getMessage()); 54 | } 55 | } 56 | 57 | protected void onResponse200(JSONObject object) throws JSONException{ 58 | //TODO 需要对Response的数据进行json的解析 59 | int code=object.getInt(JsonObjPros.Global.CODE); 60 | String message=object.getString(JsonObjPros.Global.MESSAGE); 61 | if(code==0){ 62 | onResponsePackedData(object); 63 | }else{ 64 | onResponseFailure(message); 65 | } 66 | } 67 | protected void onResponse401(){ 68 | onResponseFailure("401"); 69 | } 70 | protected void onResponse403(){ 71 | onResponseFailure("403"); 72 | } 73 | protected void onResponse404(){ 74 | onResponseFailure("404"); 75 | } 76 | protected void onResponse405(){ 77 | onResponseFailure("405"); 78 | } 79 | protected void onResponse500(){ 80 | onResponseFailure("500"); 81 | } 82 | protected void onResponse503(){ 83 | onResponseFailure("503"); 84 | } 85 | protected abstract void onResponsePackedData(JSONObject object) throws JSONException; 86 | protected void onResponseFailure(String emsg){ 87 | presenter.mView.onUIError(emsg); 88 | } 89 | protected List resolveJsonRawListData(JSONObject object,String property) throws JSONException{ 90 | JSONArray jsonArray=object.getJSONArray(property); 91 | List list=new ArrayList<>(); 92 | for(int i=0;i mManagerPool = new HashMap<>(CAPACITY); 12 | 13 | public void registManager(IManagerMarker manager) { 14 | if (manager != null) { 15 | String key = exchange(manager); 16 | boolean isContain = mManagerPool.containsKey(key); 17 | if (isContain) { 18 | remove(key); 19 | } 20 | put(key, manager); 21 | } 22 | } 23 | 24 | public void registConfig(IConfigMarker configMarker) { 25 | registManager(configMarker); 26 | } 27 | 28 | protected String exchange(IManagerMarker manager) { 29 | return exchange(manager.getClass()); 30 | } 31 | 32 | protected String exchange(Class clzz) { 33 | return clzz.getCanonicalName(); 34 | } 35 | 36 | private void put(String key, IManagerMarker manager) { 37 | mManagerPool.put(key, manager); 38 | } 39 | 40 | protected void put(IManagerMarker manager) { 41 | String key = exchange(manager); 42 | put(key, manager); 43 | } 44 | 45 | protected void remove(String key) { 46 | mManagerPool.remove(key); 47 | } 48 | 49 | public void unRegistManager(IManagerMarker manager) { 50 | if (manager != null) { 51 | mManagerPool.remove(manager.getClass().getCanonicalName()); 52 | } 53 | } 54 | 55 | public String[] showAllManagerTags() { 56 | String[] tags = new String[mManagerPool.size()]; 57 | int i = 0; 58 | for (Map.Entry e : mManagerPool.entrySet()) { 59 | tags[i] = (String) e.getKey(); 60 | i++; 61 | } 62 | return tags; 63 | } 64 | 65 | public int showAllManagerCount(){ 66 | return mManagerPool.size(); 67 | } 68 | 69 | public IManagerMarker findManagerByTag(Class tag) { 70 | String key = exchange(tag); 71 | if (!TextUtils.isEmpty(key)) { 72 | return this.mManagerPool.get(key); 73 | } 74 | return null; 75 | } 76 | 77 | public void logAllManagerTags() { 78 | String[] tags = showAllManagerTags(); 79 | for (String tag : tags) { 80 | Log.e("****************", "testManager: " + tag); 81 | } 82 | } 83 | 84 | public IManagerMarker findRecentAddManager() { 85 | return null; 86 | } 87 | 88 | public IManagerMarker findFirstManager() { 89 | return null; 90 | } 91 | 92 | } 93 | -------------------------------------------------------------------------------- /WeBase-core/src/main/java/me/splm/app/core/component/manager/ActivityCoreManager.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.core.component.manager; 2 | 3 | import android.app.Activity; 4 | 5 | import java.util.Stack; 6 | 7 | 8 | public class ActivityCoreManager implements IManagerMarker { 9 | private static Stack activityStack; 10 | /** 11 | * 添加Activity到堆栈 12 | */ 13 | public void addActivity(Activity activity) { 14 | if (activityStack == null) { 15 | activityStack = new Stack(); 16 | } 17 | activityStack.add(activity); 18 | } 19 | 20 | public int getCount(){ 21 | return activityStack.size(); 22 | } 23 | 24 | /** 25 | * 获取当前Activity(堆栈中最后一个压入的) 26 | */ 27 | public Activity currentActivity() { 28 | Activity activity = activityStack.lastElement(); 29 | return activity; 30 | } 31 | 32 | /** 33 | * 结束当前Activity(堆栈中最后一个压入的) 34 | */ 35 | public void finishActivity() { 36 | Activity activity = activityStack.lastElement(); 37 | finishActivity(activity); 38 | } 39 | /** 40 | * 结束指定的Activity 41 | */ 42 | public void finishActivity(Activity activity) { 43 | if (activity != null && !activity.isFinishing()) { 44 | activityStack.remove(activity); 45 | activity.finish(); 46 | activity = null; 47 | } 48 | } 49 | /** 50 | * 结束指定类名的Activity 51 | */ 52 | public void finishActivity(Class cls) { 53 | for (Activity activity : activityStack) { 54 | if (activity.getClass().equals(cls)) { 55 | finishActivity(activity); 56 | break; 57 | } 58 | } 59 | } 60 | /** 61 | * 结束所有Activity 62 | */ 63 | public void finishAllActivity() { 64 | for (int i = 0, size = activityStack.size(); i < size; i++) { 65 | if (null != activityStack.get(i)) { 66 | finishActivity(activityStack.get(i)); 67 | break; 68 | } 69 | } 70 | activityStack.clear(); 71 | } 72 | /** 73 | * 获取指定的Activity 74 | */ 75 | public static Activity getActivity(Class cls) { 76 | if (activityStack != null) 77 | for (Activity activity : activityStack) { 78 | if (activity.getClass().equals(cls)) { 79 | return activity; 80 | } 81 | } 82 | return null; 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /WeBase-core/src/main/java/me/splm/app/core/component/manager/AnimationManager.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.core.component.manager; 2 | 3 | /** 4 | * Created by Administrator on 2017/8/22 0022. 5 | */ 6 | 7 | public class AnimationManager implements IManagerMarker { 8 | } 9 | -------------------------------------------------------------------------------- /WeBase-core/src/main/java/me/splm/app/core/component/manager/Config.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.core.component.manager; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | 7 | public class Config { 8 | private Map configMaps=new HashMap<>(); 9 | public void put(String key,Object value){ 10 | configMaps.put(key,value); 11 | } 12 | public Object get(String key){ 13 | return configMaps.get(key); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /WeBase-core/src/main/java/me/splm/app/core/component/manager/ConfigFilesManager.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.core.component.manager; 2 | 3 | 4 | public class ConfigFilesManager extends AbsManager implements IManagerMarker { 5 | 6 | public SharePreferenceConfig getSharePreferenceConfig() { 7 | return (SharePreferenceConfig) this.findManagerByTag(SharePreferenceConfig.class); 8 | } 9 | 10 | public HttpRequestConfig getHttpRequestConfig() { 11 | return (HttpRequestConfig) this.findManagerByTag(HttpRequestConfig.class); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /WeBase-core/src/main/java/me/splm/app/core/component/manager/DatabaseConfig.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.core.component.manager; 2 | 3 | /** 4 | * Created by Administrator on 2017/8/22 0022. 5 | */ 6 | 7 | public class DatabaseConfig implements IConfigMarker { 8 | } 9 | -------------------------------------------------------------------------------- /WeBase-core/src/main/java/me/splm/app/core/component/manager/GlobalManager.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.core.component.manager; 2 | 3 | public class GlobalManager extends AbsManager { 4 | private static GlobalManager mInstance; 5 | private GlobalManager(){} 6 | public static GlobalManager getInstance(){ 7 | if(mInstance==null){ 8 | synchronized (GlobalManager.class){ 9 | if(mInstance==null){ 10 | mInstance=new GlobalManager(); 11 | } 12 | } 13 | } 14 | return mInstance; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /WeBase-core/src/main/java/me/splm/app/core/component/manager/GlobalManagerManual.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.core.component.manager; 2 | 3 | import android.util.Log; 4 | 5 | /** 6 | * You can use this class to get the Manager which you like. 7 | */ 8 | public enum GlobalManagerManual { 9 | 10 | /*****UIlayerManager******/ 11 | findUIlayerManager() { 12 | @Override 13 | public UILayerManager searchManager() { 14 | return (UILayerManager) GlobalManagerManual.getManager().findManagerByTag(UILayerManager.class); 15 | } 16 | }, 17 | findFragmentCoreManager() { 18 | @Override 19 | public FragmentCoreManager searchManager() { 20 | return (FragmentCoreManager) ((UILayerManager) (findUIlayerManager.searchManager())).findManagerByTag(FragmentCoreManager.class); 21 | } 22 | }, 23 | findActivityCoreManager() { 24 | @Override 25 | public ActivityCoreManager searchManager() { 26 | Log.e("***********", "searchManager: findUIlayerManager.searchManager()"+findUIlayerManager.searchManager()); 27 | return (ActivityCoreManager) ((UILayerManager) (findUIlayerManager.searchManager())).findManagerByTag(ActivityCoreManager.class); 28 | } 29 | }, 30 | 31 | /** 32 | * Get your custom manager 33 | */ 34 | findCustomManager() { 35 | @Override 36 | public T searchManager() { 37 | return null; 38 | } 39 | 40 | public T searchManager(Class clazz) { 41 | return (T) GlobalManagerManual.getManager().findManagerByTag(clazz); 42 | } 43 | }, 44 | 45 | /*****ConfigFilesManager******/ 46 | findConfigFilesManager() { 47 | @Override 48 | public ConfigFilesManager searchManager() { 49 | return (ConfigFilesManager) GlobalManagerManual.getManager().findManagerByTag(ConfigFilesManager.class); 50 | } 51 | }, 52 | 53 | /***FindRequestManager***/ 54 | findRequestRemoteManager() { 55 | @Override 56 | public RequestRemoteManager searchManager() { 57 | return (RequestRemoteManager) GlobalManagerManual.getManager().findManagerByTag(RequestRemoteManager.class); 58 | } 59 | }; 60 | 61 | public abstract T searchManager(); 62 | 63 | protected T searchManager(Class clazz) { 64 | return null; 65 | } 66 | 67 | private static GlobalManager getManager() { 68 | return GlobalManager.getInstance(); 69 | } 70 | 71 | private static UILayerManager exchangeUIlayer() { 72 | return findUIlayerManager.searchManager(); 73 | } 74 | 75 | private static ConfigFilesManager exchangeLocalFiles() { 76 | return findConfigFilesManager.searchManager(); 77 | } 78 | 79 | private static RequestRemoteManager exchangeRequestRemote() { 80 | return findRequestRemoteManager.searchManager(); 81 | } 82 | } -------------------------------------------------------------------------------- /WeBase-core/src/main/java/me/splm/app/core/component/manager/HttpRequestConfig.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.core.component.manager; 2 | 3 | public class HttpRequestConfig implements IConfigMarker { 4 | 5 | private int port; 6 | private int ports; 7 | private boolean isFixWhenException; 8 | private String hostUrl; 9 | 10 | public HttpRequestConfig(Builder builder) { 11 | this.port = builder.port; 12 | this.ports = builder.ports; 13 | this.isFixWhenException = builder.isFixWhenException; 14 | this.hostUrl=builder.hostUrl; 15 | } 16 | 17 | public int getPort() { 18 | return port; 19 | } 20 | 21 | public void setPort(int port) { 22 | this.port = port; 23 | } 24 | 25 | public void setPorts(int ports) { 26 | this.ports = ports; 27 | } 28 | 29 | public void setFixWhenException(boolean fixWhenException) { 30 | isFixWhenException = fixWhenException; 31 | } 32 | 33 | public void setHostUrl(String hostUrl) { 34 | this.hostUrl = hostUrl; 35 | } 36 | 37 | public int getPorts() { 38 | return ports; 39 | } 40 | 41 | public boolean isFixWhenException() { 42 | return isFixWhenException; 43 | } 44 | 45 | public String getHostUrl(){ 46 | return hostUrl; 47 | } 48 | 49 | public static class Builder { 50 | int port; 51 | int ports; 52 | boolean isFixWhenException; 53 | String hostUrl; 54 | 55 | public Builder httpPort(int port) { 56 | this.port = port; 57 | return this; 58 | } 59 | 60 | public Builder httpsPort(int port) { 61 | this.ports = port; 62 | return this; 63 | } 64 | 65 | public Builder hostUrl(String url){ 66 | this.hostUrl=url; 67 | return this; 68 | } 69 | 70 | public Builder isFixWhenException(boolean isFixWhenException) { 71 | this.isFixWhenException = isFixWhenException; 72 | return this; 73 | } 74 | 75 | public HttpRequestConfig build() { 76 | return new HttpRequestConfig(this); 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /WeBase-core/src/main/java/me/splm/app/core/component/manager/IConfigMarker.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.core.component.manager; 2 | 3 | public interface IConfigMarker extends IManagerMarker { 4 | } 5 | -------------------------------------------------------------------------------- /WeBase-core/src/main/java/me/splm/app/core/component/manager/IManagerMarker.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.core.component.manager; 2 | 3 | /** 4 | * Created by Administrator on 2017/8/15 0015. 5 | */ 6 | 7 | public interface IManagerMarker { 8 | } 9 | -------------------------------------------------------------------------------- /WeBase-core/src/main/java/me/splm/app/core/component/manager/IWorkShop.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.core.component.manager; 2 | 3 | 4 | public interface IWorkShop { 5 | ActivityCoreManager catchManagerOfActivity(); 6 | 7 | FragmentCoreManager catchManagerOfFragment(); 8 | 9 | RequestRemoteManager catchManagerOfRequestRemote(); 10 | 11 | ConfigFilesManager catchManagerOfConfigFile(); 12 | } 13 | -------------------------------------------------------------------------------- /WeBase-core/src/main/java/me/splm/app/core/component/manager/InformationDesk.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.core.component.manager; 2 | 3 | public class InformationDesk implements IWorkShop { 4 | @Override 5 | public ConfigFilesManager catchManagerOfConfigFile() { 6 | return GlobalManagerManual.findConfigFilesManager.searchManager(); 7 | } 8 | 9 | @Override 10 | public ActivityCoreManager catchManagerOfActivity() { 11 | return GlobalManagerManual.findActivityCoreManager.searchManager(); 12 | } 13 | 14 | public UILayerManager catchManagerOfUI() { 15 | return GlobalManagerManual.findUIlayerManager.searchManager(); 16 | } 17 | 18 | @Override 19 | public RequestRemoteManager catchManagerOfRequestRemote() { 20 | return GlobalManagerManual.findRequestRemoteManager.searchManager(); 21 | } 22 | 23 | public IManagerMarker catchManagerOfCustom(Class clazz) { 24 | return GlobalManagerManual.findCustomManager.searchManager(clazz); 25 | } 26 | 27 | @Override 28 | public FragmentCoreManager catchManagerOfFragment() { 29 | return GlobalManagerManual.findFragmentCoreManager.searchManager(); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /WeBase-core/src/main/java/me/splm/app/core/component/manager/RequestRemoteManager.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.core.component.manager; 2 | 3 | public class RequestRemoteManager extends AbsManager implements IManagerMarker { 4 | } 5 | -------------------------------------------------------------------------------- /WeBase-core/src/main/java/me/splm/app/core/component/manager/SharePreferenceConfig.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.core.component.manager; 2 | 3 | import android.content.Context; 4 | import android.support.annotation.NonNull; 5 | 6 | import java.util.HashMap; 7 | import java.util.Map; 8 | 9 | import me.splm.app.core.component.tool.SPUtils; 10 | import me.splm.app.core.component.tool.UtilsFactory; 11 | 12 | 13 | public class SharePreferenceConfig implements IConfigMarker { 14 | 15 | private static final Map mConfigMap = new HashMap<>(10); 16 | 17 | private SPUtils mUtils; 18 | 19 | private SharePreferenceConfig(Builder builder) { 20 | inject(builder.context, builder.fileName); 21 | } 22 | 23 | private void inject(Context context, String fileName) { 24 | mUtils = UtilsFactory.getInstance().getCommUtils(UtilsFactory.UtilsMarker.SharePreference); 25 | mUtils.init(context, fileName); 26 | for (Map.Entry entry : mConfigMap.entrySet()) { 27 | String k = entry.getKey(); 28 | Object v = entry.getValue(); 29 | mUtils.put(k, v); 30 | } 31 | } 32 | 33 | public static class Builder { 34 | String fileName; 35 | String key; 36 | Object value; 37 | Context context; 38 | 39 | public Builder init(Context context, String fileName) { 40 | this.context = context; 41 | this.fileName = fileName; 42 | return this; 43 | } 44 | 45 | public Builder join(String key, Object value) { 46 | this.key = key; 47 | this.value = value; 48 | mConfigMap.put(key, value); 49 | return this; 50 | } 51 | 52 | public SharePreferenceConfig build() { 53 | return new SharePreferenceConfig(this); 54 | } 55 | } 56 | 57 | public E getValue(String key, @NonNull E defaultValue) { 58 | return mUtils.get(key, defaultValue); 59 | } 60 | 61 | public void putValueWhenNew(String key, @NonNull E defaultValue) { 62 | boolean isExist = mUtils.isContains(key); 63 | if (!isExist) { 64 | putValue(key, defaultValue); 65 | } 66 | } 67 | 68 | public void putValue(String key, @NonNull E defaultValue) { 69 | mUtils.put(key, defaultValue); 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /WeBase-core/src/main/java/me/splm/app/core/component/manager/UILayerManager.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.core.component.manager; 2 | 3 | 4 | 5 | public class UILayerManager extends AbsManager implements IManagerMarker { 6 | @Override 7 | public void registManager(IManagerMarker manager) { 8 | if(manager instanceof FragmentCoreManager){ 9 | super.put(manager); 10 | }else{ 11 | super.registManager(manager); 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /WeBase-core/src/main/java/me/splm/app/core/component/tool/CommUtils.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.core.component.tool; 2 | 3 | import android.content.Context; 4 | import android.content.pm.PackageInfo; 5 | import android.content.pm.PackageManager; 6 | import android.os.Build; 7 | import android.text.TextUtils; 8 | 9 | import java.util.Random; 10 | import java.util.UUID; 11 | 12 | public class CommUtils implements IUtilsMarker { 13 | private CommUtils() { 14 | } 15 | 16 | public String getUniquePsuedoID() { 17 | String serial = null; 18 | //根据设备相关信息形成一条uuid 19 | String m_szDevIDShort = "35" + 20 | Build.BOARD.length() % 10 + Build.BRAND.length() % 10 + 21 | Build.CPU_ABI.length() % 10 + Build.DEVICE.length() % 10 + 22 | Build.DISPLAY.length() % 10 + Build.HOST.length() % 10 + 23 | Build.ID.length() % 10 + Build.MANUFACTURER.length() % 10 + 24 | Build.MODEL.length() % 10 + Build.PRODUCT.length() % 10 + 25 | Build.TAGS.length() % 10 + Build.TYPE.length() % 10 + 26 | Build.USER.length() % 10; //13 位 27 | try { 28 | serial = Build.class.getField("SERIAL").get(null).toString(); 29 | //API>=9 使用serial号 30 | return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString(); 31 | } catch (Exception exception) { 32 | //serial需要一个初始化 33 | serial = "serial"; // 随便一个初始化 34 | } 35 | //使用硬件信息拼凑出来的15位号码 36 | return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString(); 37 | } 38 | 39 | public String getAppID(Context context){ 40 | try{ 41 | PackageManager packageManager = context.getPackageManager(); 42 | PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0); 43 | return packageInfo.packageName; 44 | }catch (PackageManager.NameNotFoundException e){ 45 | return null; 46 | } 47 | } 48 | 49 | public String genRandomUserName(int count) { 50 | StringBuffer sb = new StringBuffer(); 51 | String str = "0123456789"; 52 | Random r = new Random(); 53 | for (int i = 0; i < count; i++) { 54 | int num = r.nextInt(str.length()); 55 | sb.append(str.charAt(num)); 56 | str = str.replace((str.charAt(num) + ""), ""); 57 | } 58 | return sb.toString(); 59 | } 60 | 61 | public String getSimpleAppID(Context context){ 62 | String fullAPPID=getAppID(context); 63 | if(TextUtils.isEmpty(fullAPPID)){ 64 | return genRandomUserName(6); 65 | }else{ 66 | int index=fullAPPID.lastIndexOf("."); 67 | return fullAPPID.substring(index+1); 68 | } 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /WeBase-core/src/main/java/me/splm/app/core/component/tool/IUtilsMarker.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.core.component.tool; 2 | 3 | public interface IUtilsMarker { 4 | } 5 | -------------------------------------------------------------------------------- /WeBase-core/src/main/java/me/splm/app/core/component/tool/SPUtils.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.core.component.tool; 2 | 3 | import android.content.Context; 4 | import android.content.SharedPreferences; 5 | import android.support.annotation.NonNull; 6 | import android.text.TextUtils; 7 | 8 | import java.lang.reflect.InvocationTargetException; 9 | import java.lang.reflect.Method; 10 | import java.util.Map; 11 | 12 | public class SPUtils implements IUtilsMarker { 13 | 14 | private SharedPreferences mPreference; 15 | 16 | private SPUtils() { 17 | } 18 | 19 | public void init(Context context,String fileName) { 20 | if (mPreference == null) { 21 | mPreference = context.getSharedPreferences(fileName, Context.MODE_PRIVATE); 22 | } 23 | } 24 | 25 | public void put(String key, @NonNull E defaultValue) { 26 | SharedPreferences.Editor editor = mPreference.edit(); 27 | if (defaultValue instanceof Integer 28 | || defaultValue instanceof Long 29 | || defaultValue instanceof Float 30 | || defaultValue instanceof Double 31 | || defaultValue instanceof String) { 32 | editor.putString(key, String.valueOf(defaultValue)); 33 | } else { 34 | //TODO 是否需要将对象序列后的值存储在这个地方 35 | //editor.putString(key, new JSONObject(defaultValue)); 36 | } 37 | new SPCompat().apply(editor); 38 | } 39 | 40 | public E get(String key, E defaultValue) { 41 | String value = mPreference.getString(key, String.valueOf(defaultValue)); 42 | if(TextUtils.isEmpty(value)){ 43 | return defaultValue; 44 | } 45 | if (defaultValue instanceof Integer) { 46 | return (E) (Integer.valueOf(value)); 47 | } else if (defaultValue instanceof Long) { 48 | return (E) Long.valueOf(value); 49 | } else if (defaultValue instanceof Double) { 50 | return (E) Double.valueOf(value); 51 | } else if (defaultValue instanceof Float) { 52 | return (E) Float.valueOf(value); 53 | } else if (defaultValue instanceof String) { 54 | return (E) value; 55 | } else { 56 | return null;//TODO 参照put方法,是否需要将对象序列后的值存储在这个地方 57 | } 58 | } 59 | 60 | public boolean isContains(String key) { 61 | return mPreference.contains(key); 62 | } 63 | 64 | public void remove(String key) { 65 | SharedPreferences.Editor editor = mPreference.edit(); 66 | editor.remove(key); 67 | new SPCompat().apply(editor); 68 | } 69 | 70 | public Map getAll() { 71 | return mPreference.getAll(); 72 | } 73 | 74 | public void clearAll() { 75 | SharedPreferences.Editor editor = mPreference.edit(); 76 | editor.clear(); 77 | new SPCompat().apply(editor); 78 | } 79 | 80 | private class SPCompat { 81 | private Method sApplyMethod = findApplyMethod(); 82 | 83 | private Method findApplyMethod() { 84 | try { 85 | Class cls = SharedPreferences.Editor.class; 86 | return cls.getMethod("apply"); 87 | } catch (NoSuchMethodException unused) { 88 | // fall through 89 | } 90 | return null; 91 | } 92 | 93 | public void apply(SharedPreferences.Editor editor) { 94 | if (sApplyMethod != null) { 95 | try { 96 | sApplyMethod.invoke(editor); 97 | return; 98 | } catch (InvocationTargetException unused) { 99 | // fall through 100 | } catch (IllegalAccessException unused) { 101 | // fall through 102 | } 103 | } 104 | editor.commit(); 105 | } 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /WeBase-core/src/main/java/me/splm/app/core/component/tool/UtilsFactory.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.core.component.tool; 2 | 3 | import java.lang.reflect.Constructor; 4 | import java.lang.reflect.InvocationTargetException; 5 | 6 | public class UtilsFactory { 7 | 8 | public enum UtilsMarker { 9 | COMMON, TXT, WS,SharePreference 10 | } 11 | 12 | private static UtilsFactory instance; 13 | 14 | private UtilsFactory() { 15 | } 16 | 17 | public static UtilsFactory getInstance() { 18 | if (instance == null) { 19 | synchronized (UtilsFactory.class) { 20 | if (instance == null) { 21 | instance = new UtilsFactory(); 22 | } 23 | } 24 | } 25 | return instance; 26 | } 27 | 28 | public T getCommUtils(UtilsMarker marker) { 29 | if (marker == UtilsMarker.COMMON) { 30 | return createNewInstance(CommUtils.class); 31 | } else if (marker == UtilsMarker.TXT) { 32 | 33 | } else if(marker == UtilsMarker.SharePreference){ 34 | return createNewInstance(SPUtils.class); 35 | } 36 | return null; 37 | } 38 | 39 | public T getCommUtils(Class clzz){ 40 | return createNewInstance(clzz); 41 | } 42 | 43 | private T createNewInstance(Class utils) { 44 | try { 45 | Constructor constructor = utils.getDeclaredConstructor(); 46 | constructor.setAccessible(true); 47 | return (T) constructor.newInstance(); 48 | } catch (InstantiationException e) { 49 | e.printStackTrace(); 50 | } catch (IllegalAccessException e) { 51 | e.printStackTrace(); 52 | } catch (NoSuchMethodException e) { 53 | e.printStackTrace(); 54 | } catch (InvocationTargetException e) { 55 | e.printStackTrace(); 56 | } 57 | return null; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /WeBase-core/src/main/java/me/splm/app/core/component/tool/ViewUtils.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.core.component.tool; 2 | 3 | import android.graphics.Rect; 4 | import android.view.View; 5 | 6 | public class ViewUtils { 7 | public static boolean isCover(View view){ 8 | boolean isCover=false; 9 | Rect rect=new Rect(); 10 | isCover=view.getGlobalVisibleRect(rect); 11 | if (isCover) { 12 | if (rect.width() >= view.getMeasuredWidth() && rect.height() >= view.getMeasuredHeight()) { 13 | return !isCover; 14 | } 15 | } 16 | return true; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /WeBase-core/src/main/java/me/splm/app/core/component/ui/ToastUtils.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.core.component.ui; 2 | 3 | import android.content.Context; 4 | import android.widget.Toast; 5 | 6 | public class ToastUtils { 7 | private static Toast toast; 8 | public static void show(Context context,String msg){ 9 | if(toast!=null){ 10 | toast.cancel(); 11 | } 12 | toast=Toast.makeText(context.getApplicationContext(), msg, Toast.LENGTH_LONG); 13 | toast.show(); 14 | } 15 | 16 | /*public static void showSN(Activity activity, String message){ 17 | View view=activity.getWindow().getDecorView(); 18 | Snackbar.make(view, message, Snackbar.LENGTH_LONG).setAction("关闭", null).show(); 19 | }*/ 20 | } 21 | -------------------------------------------------------------------------------- /WeBase-core/src/main/java/me/splm/app/core/component/ui/lv/AbsAdapter.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.core.component.ui.lv; 2 | 3 | import android.content.Context; 4 | import android.view.View; 5 | import android.view.ViewGroup; 6 | import android.widget.BaseAdapter; 7 | 8 | import java.util.List; 9 | 10 | public abstract class AbsAdapter extends BaseAdapter { 11 | 12 | protected Context mContext; 13 | private List mDatas; 14 | private int itemLayoutId; 15 | public AbsAdapter(Context context, List mDatas, int itemLayoutId) { 16 | this.mContext = context; 17 | this.mDatas = mDatas; 18 | this.itemLayoutId = itemLayoutId; 19 | } 20 | 21 | @Override 22 | public int getCount() { 23 | 24 | return mDatas.size(); 25 | 26 | } 27 | 28 | @Override 29 | public T getItem(int position) { 30 | 31 | return mDatas.get(position); 32 | 33 | } 34 | 35 | @Override 36 | public long getItemId(int position) { 37 | 38 | return position; 39 | 40 | } 41 | 42 | @Override 43 | public View getView(int position, View convertView, ViewGroup parent) { 44 | 45 | ViewHolder viewHolder = getViewHolder(position, convertView, parent); 46 | 47 | convert(viewHolder, getItem(position), position); 48 | 49 | return viewHolder.getmConvertView(); 50 | 51 | } 52 | 53 | protected abstract void convert(ViewHolder viewHolder, T item, int position); 54 | 55 | private ViewHolder getViewHolder(int position, View convertView, ViewGroup parent) { 56 | 57 | return ViewHolder.get(mContext, convertView, parent, itemLayoutId,position); 58 | 59 | } 60 | 61 | public void insert(T t,int index){ 62 | 63 | if(mDatas!=null){ 64 | 65 | mDatas.add(index, t); 66 | 67 | } 68 | 69 | notifyDataSetChanged(); 70 | 71 | } 72 | 73 | public void remove(T t){ 74 | 75 | if(mDatas!=null){ 76 | 77 | mDatas.remove(t); 78 | 79 | } 80 | 81 | notifyDataSetChanged(); 82 | 83 | } 84 | 85 | public List getList(){ 86 | 87 | return mDatas; 88 | 89 | } 90 | 91 | } 92 | -------------------------------------------------------------------------------- /WeBase-core/src/main/java/me/splm/app/core/component/ui/lv/ViewHolder.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.core.component.ui.lv; 2 | 3 | import android.content.Context; 4 | import android.util.SparseArray; 5 | import android.view.LayoutInflater; 6 | import android.view.View; 7 | import android.view.ViewGroup; 8 | 9 | public class ViewHolder { 10 | private SparseArray mViews; 11 | 12 | private View mConvertView; 13 | 14 | public ViewHolder(Context context, ViewGroup parent, int layoutId, int position){ 15 | 16 | mViews=new SparseArray(); 17 | 18 | mConvertView= LayoutInflater.from(context).inflate(layoutId, parent, false); 19 | 20 | mConvertView.setTag(this); 21 | 22 | } 23 | 24 | public static ViewHolder get(Context context, View convertView, ViewGroup parent, int layoutId, int position){ 25 | 26 | if(convertView==null){ 27 | 28 | return new ViewHolder(context, parent, layoutId, position); 29 | 30 | } 31 | 32 | return (ViewHolder)convertView.getTag(); 33 | 34 | } 35 | 36 | public T getView(int viewId){ 37 | 38 | View view=mViews.get(viewId); 39 | 40 | if(view==null){ 41 | 42 | view=mConvertView.findViewById(viewId); 43 | 44 | mViews.put(viewId, view); 45 | 46 | } 47 | 48 | return (T)view; 49 | 50 | } 51 | 52 | public View getmConvertView() { 53 | 54 | return mConvertView; 55 | 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /WeBase-core/src/main/java/me/splm/app/core/logic/module/AbsModel.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.core.logic.module; 2 | 3 | 4 | import android.support.annotation.NonNull; 5 | 6 | import me.splm.app.core.component.manager.ConfigFilesManager; 7 | import me.splm.app.core.component.manager.IWorkShop; 8 | import me.splm.app.core.component.manager.InformationDesk; 9 | import me.splm.app.core.component.manager.SharePreferenceConfig; 10 | 11 | import me.splm.app.core.component.tool.UtilsFactory; 12 | 13 | public abstract class AbsModel implements IModel { 14 | 15 | private SharePreferenceConfig mSharePreferenceConfig; 16 | 17 | public AbsModel() { 18 | IWorkShop workshop = new InformationDesk(); 19 | ConfigFilesManager configFilesManager = workshop.catchManagerOfConfigFile(); 20 | mSharePreferenceConfig = configFilesManager.getSharePreferenceConfig(); 21 | } 22 | 23 | @Override 24 | public UtilsFactory getUtilsFactory() { 25 | return UtilsFactory.getInstance(); 26 | } 27 | 28 | @Override 29 | public void writeValueToSP(String key, E value) { 30 | mSharePreferenceConfig.putValue(key, value); 31 | } 32 | 33 | @Override 34 | public E getValueFromSP(String key, @NonNull E defaultValue) { 35 | return mSharePreferenceConfig.getValue(key, defaultValue); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /WeBase-core/src/main/java/me/splm/app/core/logic/module/IModel.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.core.logic.module; 2 | 3 | 4 | import android.support.annotation.NonNull; 5 | 6 | import me.splm.app.core.component.tool.UtilsFactory; 7 | 8 | public interface IModel { 9 | UtilsFactory getUtilsFactory(); 10 | 11 | void writeValueToSP(String key, E value); 12 | 13 | E getValueFromSP(String key, @NonNull E defaultValue); 14 | } 15 | -------------------------------------------------------------------------------- /WeBase-core/src/main/java/me/splm/app/core/logic/presenter/AbsBasePresenter.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.core.logic.presenter; 2 | 3 | import me.splm.app.core.component.tool.CommUtils; 4 | import me.splm.app.core.component.tool.UtilsFactory; 5 | import me.splm.app.core.logic.module.IModel; 6 | import me.splm.app.core.logic.view.IBaseView; 7 | 8 | public abstract class AbsBasePresenter { 9 | public V mView; 10 | public M mModel; 11 | 12 | public AbsBasePresenter(V baseView) { 13 | this.mView=baseView; 14 | } 15 | public void setModel(M model){ 16 | this.mModel=model; 17 | } 18 | public CommUtils getUtils(UtilsFactory.UtilsMarker marker){ 19 | return mModel.getUtilsFactory().getCommUtils(marker); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /WeBase-core/src/main/java/me/splm/app/core/logic/presenter/IBasePresenter.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.core.logic.presenter; 2 | 3 | /**仅作为标记接口*/ 4 | public interface IBasePresenter { 5 | } 6 | -------------------------------------------------------------------------------- /WeBase-core/src/main/java/me/splm/app/core/logic/view/BaseActivity.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.core.logic.view; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | import android.content.pm.ActivityInfo; 6 | import android.os.Bundle; 7 | import android.support.annotation.NonNull; 8 | import android.support.annotation.Nullable; 9 | import android.support.v4.app.ActivityCompat; 10 | import android.support.v4.app.ActivityOptionsCompat; 11 | import android.support.v4.util.Pair; 12 | import android.support.v7.app.AppCompatActivity; 13 | import android.util.Log; 14 | import android.view.View; 15 | 16 | import me.splm.app.core.component.ui.ToastUtils; 17 | import me.splm.app.core.logic.presenter.IBasePresenter; 18 | import me.splm.app.inject.processor.component.proxy.WeWorkersProxy; 19 | import me.splm.app.wepermission.WePermissionCallback; 20 | import me.splm.app.wepermission.WePermissions; 21 | 22 | 23 | public abstract class BaseActivity

extends AppCompatActivity implements IBaseView, WePermissionCallback { 24 | 25 | public P mPresenter; 26 | 27 | @Override 28 | protected void onCreate(@Nullable Bundle savedInstanceState) { 29 | super.onCreate(savedInstanceState); 30 | //NetManager.getDefault().registerObserver(getApplicationContext());//注册网络监听器 31 | setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 32 | WeWorkersProxy.bind(this); 33 | } 34 | 35 | public void setPresenter(P presenter) { 36 | this.mPresenter = presenter; 37 | } 38 | 39 | @Override 40 | public Context getCurrentContext() { 41 | return this.getApplicationContext(); 42 | } 43 | 44 | @Override 45 | public void onUIReflect(String message) { 46 | //ToastUtils.showSN(this, message); 47 | } 48 | 49 | @Override 50 | public void onUISuccess(String message) { 51 | onNormalTip(message); 52 | } 53 | 54 | @Override 55 | public void onUIError(String message) { 56 | onNormalTip(message); 57 | } 58 | 59 | @Override 60 | public void onNormalTip(String message) { 61 | ToastUtils.show(this, message); 62 | } 63 | 64 | @Override 65 | public Intent getTransferData() { 66 | return this.getIntent(); 67 | } 68 | 69 | @Override 70 | public String getStringFromIntent(String key) { 71 | return getTransferData().getStringExtra(key); 72 | } 73 | 74 | @Override 75 | public Bundle makeShareEle(View view, String key) { 76 | ActivityOptionsCompat optionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation(this, new Pair<>(view, key)); 77 | return optionsCompat.toBundle(); 78 | } 79 | 80 | @Override 81 | protected void onDestroy() { 82 | super.onDestroy(); 83 | //解除网络监听框架的监听 84 | /*NetManager.getDefault().unRegisterObserver(getApplicationContext()); 85 | NetManager.getDefault().unRegisterAllObserver();*/ 86 | } 87 | 88 | protected void onNetIsMissed() { 89 | Log.e("************", "onNetStateChanged: 网络不可用"); 90 | } 91 | 92 | /*@WeNetJudger(NetType.NONE) 93 | public void onNetStateChanged(@NetType String type) { 94 | Log.e("********", "onNetStateChanged: 网络发生变化"); 95 | switch (type) { 96 | case NetType.AUTO: 97 | Log.e("**********", "onNetStateChanged: 连接到网络"); 98 | break; 99 | case NetType.CMWAP: 100 | Log.e("**********", "onNetStateChanged: 连接到手机蜂窝网络"); 101 | break; 102 | case NetType.WIFI: 103 | Log.e("********", "onNetStateChanged: 连接到WiFi网络"); 104 | break; 105 | case NetType.NONE: 106 | onNetIsMissed(); 107 | break; 108 | } 109 | }*/ 110 | 111 | private Intent generateIntent(Class clzz, Bundle data, String key) { 112 | Intent intent = new Intent(this, clzz); 113 | intent.putExtra(key, data); 114 | return intent; 115 | } 116 | 117 | private Intent generateSimpleIntent(Class clzz, Bundle data) { 118 | return generateIntent(clzz, data, "data"); 119 | } 120 | 121 | @Override 122 | public void jump(Class clzz, Bundle bundle) { 123 | jump(clzz, bundle, null); 124 | } 125 | 126 | @Override 127 | public void jump(Class clzz, Bundle data, Bundle options) { 128 | Intent intent = generateSimpleIntent(clzz, data); 129 | ActivityCompat.startActivity(this, intent, options); 130 | } 131 | 132 | @Override 133 | public void jump(Class clzz, Bundle data, int requestCode) { 134 | jump(clzz, data, requestCode, null); 135 | } 136 | 137 | @Override 138 | public void jump(Class clzz, Bundle data, int requestCode, Bundle options) { 139 | Intent intent = generateSimpleIntent(clzz, data); 140 | ActivityCompat.startActivityForResult(this, intent, requestCode, options); 141 | } 142 | 143 | @Override 144 | public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 145 | // super.onRequestPermissionsResult(requestCode, permissions, grantResults); 146 | WePermissions.onRequestPermissionResult(this, requestCode, grantResults, permissions); 147 | } 148 | 149 | @Override 150 | public void onRequestPermissionGranted(int requestCode, @NonNull String[] permissions, boolean isAllGranted) { 151 | 152 | } 153 | } 154 | -------------------------------------------------------------------------------- /WeBase-core/src/main/java/me/splm/app/core/logic/view/IBaseView.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.core.logic.view; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | import android.os.Bundle; 6 | import android.view.View; 7 | 8 | public interface IBaseView extends View.OnClickListener { 9 | Context getCurrentContext(); 10 | void onUIError(String message); 11 | void onUISuccess(String message); 12 | void onUIReflect(String message); 13 | void onNormalTip(String message); 14 | Intent getTransferData(); 15 | String getStringFromIntent(String key); 16 | Bundle makeShareEle(View view, String key); 17 | void jump(Class clzz, Bundle bundle); 18 | void jump(Class clzz, Bundle data, Bundle options); 19 | void jump(Class clzz, Bundle bundle,int requestCode); 20 | void jump(Class clzz, Bundle bundle,int requestCode,Bundle options); 21 | } 22 | -------------------------------------------------------------------------------- /WeBase-core/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | BaseLib 3 | 4 | -------------------------------------------------------------------------------- /WeBase-core/src/test/java/com/jc/android/baselib/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | package com.jc.android.baselib; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.junit.Assert.*; 6 | 7 | /** 8 | * Example local unit test, which will execute on the development machine (host). 9 | * 10 | * @see Testing documentation 11 | */ 12 | public class ExampleUnitTest { 13 | @Test 14 | public void addition_isCorrect() throws Exception { 15 | assertEquals(4, 2 + 2); 16 | } 17 | } -------------------------------------------------------------------------------- /WeCodeManual.md: -------------------------------------------------------------------------------- 1 | `参考资料` 2 | 3 | [JavaPoet基础](http://www.jianshu.com/p/95f12f72f69a) 4 | 5 | 6 | 7 | # WeCodeManual的设计思路 8 | 9 | > WeBase框架中,当你使用其注解来完成开发工作时,APT会根据注解解释器自动按照一定规则自动生成代码,所指的一定规则,就是利用JavaPoet工具要求的语法,编写相应的功能。 10 | > 但是这里为什么又要重新制造轮子,主要是个人觉得JavaPoet生成代码的规则 11 | 12 | **下面展示一下JavaPoet的语法及实际用法:** 13 | 14 | - MethodSpec 代表一个构造函数或方法声明。 15 | - TypeSpec 代表一个类,接口,或者枚举声明。 16 | - FieldSpec 代表一个成员变量,一个字段声明。 17 | - JavaFile包含一个顶级类的Java文件。 18 | 19 | 比如我们想用JavaPoet自动生成以下代码,该怎么办? 20 | 21 | ![code1](http://img.blog.csdn.net/20160519234032780) 22 | 23 | JavaPoet的语法就该如下: 24 | 25 | ```java 26 | private void generateHelloworld() throws IOException{ 27 | MethodSpec main = MethodSpec.methodBuilder("main") //main代表方法名 28 | .addModifiers(Modifier.PUBLIC,Modifier.STATIC)//Modifier 修饰的关键字 29 | .addParameter(String[].class, "args") //添加string[]类型的名为args的参数 30 | .addStatement("$T.out.println($S)", System.class,"Hello World")//添加代码,这里$T和$S后面会讲,这里其实就是添加了System,out.println("Hello World"); 31 | .build(); 32 | TypeSpec typeSpec = TypeSpec.classBuilder("HelloWorld")//HelloWorld是类名 33 | .addModifiers(Modifier.FINAL,Modifier.PUBLIC) 34 | .addMethod(main) //在类中添加方法 35 | .build(); 36 | JavaFile javaFile = JavaFile.builder("com.example.helloworld", typeSpec) 37 | .build(); 38 | javaFile.writeTo(System.out); 39 | 40 | ``` 41 | 42 | 这里不详细解释语法的含义,只是简单说明一下JavaPoet的过程: 43 | 44 | - 1.定义全局变量(如果没有可以忽略); 45 | - 2.定义方法1,方法2,直至方法n; 46 | - 3.定义类对象,并将步骤1,2元素打包在一起; 47 | - 4.统一将前者写入文件。 48 | 49 | 从上面的几个步骤,我们可以大致明白,Javapoet的流程,基本就是从类的最小单元写起,由小及大,最后将它们打包,统一写入文件。我在没有引入WeCodeManual之前,也一直使用JavaPoet这种写法,但在做优化的时候,觉得这种功能写法虽然原生态,但觉得不符合我们日常编程习惯,因为我们在写代码的时候,都是先创建Java文件,写变量,写方法,也就是将上面步骤反过来,所以我基于Javapoet封装了一套我个人用着很习惯也很喜欢的功能,WeCodeManual。其主要作用就是之前提到的,更贴合日常开发习惯。 50 | 51 | ```java 52 | //先创建WeCodeModel模型对象 53 | WeCodeModel weCodeModel =renewCodeModel();//new WeCodeModel();也可以 54 | //创建一个名字叫做"HelloWorld"的Java类; 55 | WeClass weClass = weCodeModel.createClass("HelloWorld"); 56 | //创建名字为main的方法,修饰符为public,static,有多个修饰符可以+ 57 | WeMethod main = weClass.declareMethod(WeMod.PUBLIC+WeMod.STATIC, "main"); 58 | //创建代码块,方法体中的内容 59 | CodeBlock block=CodeBlock.builder().add("System.out.println("+params+");").build(); 60 | //为main方法指定方法内容 61 | main.addBody(block); 62 | //创建 63 | weCodeModel.build(); 64 | ``` 65 | 66 | 从代码行数来看,没有比JavaPoet原生的简单多少,但主要是创建流程有了变化,而且这种变化我觉得很友好,都是按部就班,容错率也会增加。 67 | 68 | ## 关于WeCodeManual其他用法 69 | 70 | - Java类绑定接口 71 | 72 | ```java 73 | weClass.addInterface(IWorkersProxy.class); 74 | ``` 75 | 76 | - 继承 77 | 78 | ```java 79 | weClass.addExtends(WorkersProxy.class); 80 | ``` 81 | 82 | - 该类为单例模式 83 | 84 | ```java 85 | weClass.canBeSingleton(); 86 | ``` 87 | 88 | - 创建全局变量 89 | 90 | - 方法1: 91 | 92 | ```java 93 | //参数:修饰符,变量包名,类名,变量名,比如想要创建me.splm.app.kook.CityCrackpot类型的变量 94 | //那么变量包名就是me.splm.app.kook,类名:CityCrackpot,变量名:随意 95 | WeVar mActivity=weClass.declareVar(WeMod.PUBLIC, pName, cName, MACTIVITYNAME); 96 | ``` 97 | 98 | - 方法2: 99 | 100 | ```java 101 | WeVar weVar=new WeVar(WeMod.PRIVIATE,pName, cName,MACTIVITYNAME); 102 | weClass.declareVar(weVar); 103 | ``` 104 | 105 | 同样,访问修饰符可以通过“+”来一次绑定多个。 106 | 107 | 关于WeVar这个类的另外一个用法就是: 108 | 109 | ```java 110 | WeVar layoutIdOfIllusion=new WeVar(id); 111 | ``` 112 | 113 | 这种用法其实对于代码生成来讲,没有太多的实际意义,主要是用来进行传值作用 114 | 115 | ```java 116 | PorterFieldModelProxy porterFieldModelProxy=new PorterFieldModelProxy(); 117 | porterFieldModelProxy.setValueOfLayoutIdValueModel(new PorterFieldModel(layoutIdOfIllusion)); 118 | PorterCodeAssistant assistant=new PorterCodeAssistant(porterFieldModelProxy); 119 | ``` 120 | 121 | 这就是一个Wevar传递值得一个应用,主要体现在`GeneratePorterAction`中,为了将Processor从注解中获取到的值传递给`PorterCodeAssistant`,当你想自定义注解功能的时候,可以使用,普通情况下不要关注这个问题。 122 | 123 | - 创建方法 124 | 125 | ```java 126 | WeVar object = new WeVar("java.lang", "Object", "object"); 127 | WeMethod assist = weClass.declareMethod(WeMod.PUBLIC, "assist"); 128 | assist.addParameters(object);//多个方法参数,后面继续追加即可,obj1,obj2,obj3 129 | assist.addAnnotation(Override.class);//为方法加入注解 130 | assist.addBody(codeblock); 131 | assist.reference(initView, object);//assist调用别的方法,第二个为前者方法参数 132 | ``` 133 | 134 | ​ 如果一次想引用多个方法,可以参考`public void references(WeMethodMarker weMethodMarker)`引用顺序即为添加顺序 135 | 136 | - 创建全局变量 137 | 138 | ```java 139 | //生成整型变量,并赋值 140 | WeVar weIntVar=LoadingBridgeAssistant.declareNumber(WeBlurVar.INT,"int_name","256"); 141 | //生成浮点型变量,并赋值 142 | WeVar weFloatVar=LoadingBridgeAssistant.declareNumber(WeBlurVar.FLOAT,"float_name","16.0f"); 143 | //生成字符串,并赋值 144 | WeVar weStringVar=LoadingBridgeAssistant.declareString("string_name","111111"); 145 | WeVar weShortVar=LoadingBridgeAssistant.declareNumber(WeBlurVar.SHORT,"short_name","1"); 146 | WeVar weLongVar=LoadingBridgeAssistant.declareNumber(WeBlurVar.LONG,"long_name","1024L"); 147 | WeVar weDoubleVar=LoadingBridgeAssistant.declareNumber(WeBlurVar.DOUBLE,"double_name","1e16d"); 148 | WeVar weBoolVar=LoadingBridgeAssistant.declareNumber(WeBlurVar.BOOLEAN,"boolean_name","true"); 149 | //生成数组,并初始化数值,参数1为数组类型 150 | WeVar weVar=LoadingBridgeAssistant.declareArray(String.class,"VALUES",array); 151 | ``` 152 | 153 | 声明完成这些变量以后,需要添加到类中 154 | 155 | ```java 156 | weClass.declareVar(weVar); 157 | ``` 158 | 159 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 28 5 | defaultConfig { 6 | applicationId "me.splm.app.baselibdemo" 7 | minSdkVersion 23 8 | targetSdkVersion 28 9 | versionCode 1 10 | versionName "1.0" 11 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 12 | javaCompileOptions.annotationProcessorOptions.includeCompileClasspath = true 13 | } 14 | 15 | lintOptions { 16 | abortOnError false 17 | } 18 | 19 | dataBinding { 20 | enabled true 21 | } 22 | buildTypes { 23 | release { 24 | minifyEnabled false 25 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 26 | } 27 | 28 | } 29 | } 30 | 31 | dependencies { 32 | compile fileTree(include: ['*.jar'], dir: 'libs') 33 | androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 34 | exclude group: 'com.android.support', module: 'support-annotations' 35 | }) 36 | api project(':WeBase-core') 37 | // compile project(':weannotation-processor') 38 | /*compile 'com.qt:andjump-api:0.2' 39 | apt 'com.qt:andjump-compiler:0.2'*/ 40 | compile 'com.android.support:appcompat-v7:25.3.1' 41 | compile 'com.android.support.constraint:constraint-layout:1.0.2' 42 | testCompile 'junit:junit:4.12' 43 | /* compile 'com.jakewharton:butterknife:8.8.1' 44 | annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'*/ 45 | /* apt "org.androidannotations:androidannotations:3.3.2" 46 | compile "org.androidannotations:androidannotations-api:3.3.2"*/ 47 | } 48 | 49 | 50 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in E:\caodi\soft\Android\sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | 19 | # Uncomment this to preserve the line number information for 20 | # debugging stack traces. 21 | #-keepattributes SourceFile,LineNumberTable 22 | 23 | # If you keep the line number information, uncomment this to 24 | # hide the original source file name. 25 | #-renamesourcefileattribute SourceFile 26 | -------------------------------------------------------------------------------- /app/src/androidTest/java/me/splm/app/baselibdemo/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.baselibdemo; 2 | 3 | import android.content.Context; 4 | import android.support.test.InstrumentationRegistry; 5 | import android.support.test.runner.AndroidJUnit4; 6 | 7 | import org.junit.Test; 8 | import org.junit.runner.RunWith; 9 | 10 | import static org.junit.Assert.*; 11 | 12 | /** 13 | * Instrumentation test, which will execute on an Android device. 14 | * 15 | * @see Testing documentation 16 | */ 17 | @RunWith(AndroidJUnit4.class) 18 | public class ExampleInstrumentedTest { 19 | @Test 20 | public void useAppContext() throws Exception { 21 | // Context of the app under test. 22 | Context appContext = InstrumentationRegistry.getTargetContext(); 23 | 24 | assertEquals("me.splm.app.baselibdemo", appContext.getPackageName()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/java/me/splm/app/baselibdemo/BaseActivity.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.baselibdemo; 2 | 3 | import android.os.Bundle; 4 | import android.support.v7.app.AppCompatActivity; 5 | 6 | import me.splm.app.core.component.manager.ActivityCoreManager; 7 | import me.splm.app.core.component.manager.IWorkShop; 8 | import me.splm.app.core.component.manager.InformationDesk; 9 | import me.splm.app.inject.processor.component.proxy.WeWorkersProxy; 10 | 11 | 12 | public abstract class BaseActivity extends AppCompatActivity { 13 | @Override 14 | protected void onCreate(Bundle savedInstanceState) { 15 | super.onCreate(savedInstanceState); 16 | WeWorkersProxy.bind(this); 17 | IWorkShop workshop=new InformationDesk(); 18 | ActivityCoreManager activityCoreManager=workshop.catchManagerOfActivity(); 19 | activityCoreManager.addActivity(this); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/me/splm/app/baselibdemo/FourActivity.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.baselibdemo; 2 | 3 | import android.os.Bundle; 4 | import android.support.annotation.NonNull; 5 | import android.support.v7.app.AppCompatActivity; 6 | import android.util.Log; 7 | 8 | 9 | public class FourActivity extends AppCompatActivity { 10 | 11 | @Override 12 | protected void onCreate(Bundle savedInstanceState) { 13 | super.onCreate(savedInstanceState); 14 | setContentView(R.layout.activity_four); 15 | } 16 | 17 | public void sayHello(){ 18 | Log.e("*************", "sayHello: "); 19 | } 20 | 21 | public String initView(@NonNull String name){ 22 | return null; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/me/splm/app/baselibdemo/MainActivity.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.baselibdemo; 2 | 3 | import android.os.Bundle; 4 | import android.util.Log; 5 | import android.view.View; 6 | import android.view.ViewStub; 7 | import android.widget.Button; 8 | import android.widget.Toast; 9 | 10 | import me.splm.app.auto.WeMainActivity_Beadle; 11 | import me.splm.app.auto.WeMainActivity_Porter; 12 | import me.splm.app.core.component.http.RequestServer; 13 | import me.splm.app.core.component.manager.ConfigFilesManager; 14 | import me.splm.app.core.component.manager.HttpRequestConfig; 15 | import me.splm.app.core.component.manager.IWorkShop; 16 | import me.splm.app.core.component.manager.InformationDesk; 17 | import me.splm.app.core.component.manager.SharePreferenceConfig; 18 | import me.splm.app.inject.annotation.WeInjectBeadle; 19 | import me.splm.app.inject.annotation.WeInjectPorter; 20 | import me.splm.app.wenetjudger.processor.NetManager; 21 | 22 | 23 | @WeInjectPorter(R.layout.activity_main) 24 | public class MainActivity extends BaseActivity { 25 | 26 | @WeInjectPorter(viewID = R.id.open_1_act_btn) 27 | public Button mButton; 28 | @WeInjectPorter(viewID = R.id.open_2_act_btn) 29 | public Button mloadBtn; 30 | //@WeInjectPorter(viewID = R.id.layout_1_vs) 31 | public ViewStub mViewStub; 32 | 33 | public View mStubView; 34 | 35 | //@WeInjectPorter(parentView = "mStubView",viewID = R.id.open_2_act_btn) 36 | public Button mButton2; 37 | 38 | @Override 39 | protected void onCreate(Bundle savedInstanceState) { 40 | super.onCreate(savedInstanceState); 41 | init(); 42 | WeMainActivity_Porter.getInstance().initOtherView(); 43 | } 44 | 45 | @Override 46 | protected void onDestroy() { 47 | super.onDestroy(); 48 | NetManager.getDefault().unRegisterObserver(this); 49 | NetManager.getDefault().unRegisterAllObserver(); 50 | 51 | } 52 | 53 | @WeInjectBeadle(taskID = "id2", serial = "serial1", delay = 3000L) 54 | public void doSomeThingsBackground(String name) { 55 | Log.e("**********", "doSomeThingsBackground: " + Thread.currentThread().getId()); 56 | } 57 | 58 | public void test() { 59 | WeMainActivity_Beadle.getInstance().doSomeThingsBackground("haha"); 60 | Toast.makeText(MainActivity.this, "hello", Toast.LENGTH_SHORT).show(); 61 | } 62 | 63 | private void init() { 64 | //mStubView=mViewStub.inflate(); 65 | IWorkShop workshop = new InformationDesk(); 66 | final ConfigFilesManager localFilesManager = workshop.catchManagerOfConfigFile(); 67 | final SharePreferenceConfig config = localFilesManager.getSharePreferenceConfig(); 68 | final HttpRequestConfig httpRequestConfig = localFilesManager.getHttpRequestConfig(); 69 | config.putValueWhenNew("key_3", httpRequestConfig.getHostUrl()); 70 | RequestServer.init(httpRequestConfig); 71 | mButton.setOnClickListener(new View.OnClickListener() { 72 | @Override 73 | public void onClick(View v) { 74 | config.putValue("key_3", "http://www.baidu.com/api"); 75 | } 76 | }); 77 | mloadBtn.setOnClickListener(new View.OnClickListener() { 78 | @Override 79 | public void onClick(View v) { 80 | Log.e("**********", "onClick: " + config.getValue("key_3", "tmp")); 81 | } 82 | }); 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /app/src/main/java/me/splm/app/baselibdemo/MainApplication.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.baselibdemo; 2 | 3 | import android.app.Application; 4 | import android.util.Log; 5 | 6 | import me.splm.app.core.component.manager.ActivityCoreManager; 7 | import me.splm.app.core.component.manager.ConfigFilesManager; 8 | import me.splm.app.core.component.manager.FragmentCoreManager; 9 | import me.splm.app.core.component.manager.GlobalManager; 10 | import me.splm.app.core.component.manager.HttpRequestConfig; 11 | import me.splm.app.core.component.manager.SharePreferenceConfig; 12 | import me.splm.app.core.component.manager.UILayerManager; 13 | import me.splm.app.inject.annotation.WeInjectInit; 14 | import me.splm.app.wenetjudger.processor.NetManager; 15 | 16 | @WeInjectInit 17 | public class MainApplication extends Application { 18 | @Override 19 | public void onCreate() { 20 | super.onCreate(); 21 | testManager(); 22 | } 23 | 24 | private void testManager(){ 25 | 26 | NetManager.getDefault().init(this); 27 | 28 | UILayerManager uiLayerManager=new UILayerManager(); 29 | uiLayerManager.registManager(new FragmentCoreManager());//TODO Caution:Some problems will appear here. 30 | uiLayerManager.registManager(new ActivityCoreManager()); 31 | 32 | ConfigFilesManager localFilesManager=new ConfigFilesManager(); 33 | SharePreferenceConfig sharePreferenceConfig= new SharePreferenceConfig.Builder() 34 | .init(this,"cache") 35 | .join("key_1",1000) 36 | .join("key_2",2000) 37 | .build(); 38 | HttpRequestConfig httpRequestConfig=new HttpRequestConfig.Builder() 39 | .httpPort(80) 40 | .httpsPort(443) 41 | .hostUrl("http://www.app.splm.me/api") 42 | .isFixWhenException(true).build(); 43 | localFilesManager.registConfig(sharePreferenceConfig); 44 | localFilesManager.registConfig(httpRequestConfig); 45 | 46 | GlobalManager.getInstance().registManager(localFilesManager); 47 | GlobalManager.getInstance().registManager(uiLayerManager); 48 | 49 | GlobalManager.getInstance().logAllManagerTags();//读取所有配置管理器 50 | Log.e("******", "testManager: The Initial procedure has been Successful."); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /app/src/main/java/me/splm/app/baselibdemo/MainViewModel.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.baselibdemo; 2 | 3 | /** 4 | * Created by Administrator on 2017/9/13 0013. 5 | */ 6 | 7 | public class MainViewModel { 8 | public MainViewModel(BaseActivity activity) { 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/me/splm/app/baselibdemo/SecondActivity.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.baselibdemo; 2 | 3 | import android.os.Bundle; 4 | 5 | import me.splm.app.baselibdemo.TestModel.BookModel; 6 | 7 | 8 | //@WeInjectPlumber 9 | //@WeInjectPorter(R.layout.activity_second) 10 | public class SecondActivity extends BaseActivity { 11 | 12 | //@WeInjectPlumber 13 | public String name; 14 | //@WeInjectPlumber 15 | public int value; 16 | //@WeInjectPlumber 17 | public BookModel bookModel; 18 | 19 | @Override 20 | protected void onCreate(Bundle savedInstanceState) { 21 | super.onCreate(savedInstanceState); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/me/splm/app/baselibdemo/TestActivity.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.baselibdemo; 2 | 3 | import android.os.Bundle; 4 | import android.support.annotation.Nullable; 5 | import android.support.v7.app.AppCompatActivity; 6 | import android.util.Log; 7 | 8 | public class TestActivity extends AppCompatActivity { 9 | @Override 10 | protected void onCreate(@Nullable Bundle savedInstanceState) { 11 | super.onCreate(savedInstanceState); 12 | Log.e("**********", "onCreate: "+this.getClass().getCanonicalName()); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/me/splm/app/baselibdemo/TestModel/BookModel.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.baselibdemo.TestModel; 2 | 3 | 4 | import java.io.Serializable; 5 | 6 | /** 7 | * Guarantee your Object could be Serializabled. 8 | */ 9 | public class BookModel implements Serializable { 10 | private String name; 11 | private int price; 12 | private int tag; 13 | 14 | public String getName() { 15 | return name; 16 | } 17 | 18 | public void setName(String name) { 19 | this.name = name; 20 | } 21 | 22 | public int getPrice() { 23 | return price; 24 | } 25 | 26 | public void setPrice(int price) { 27 | this.price = price; 28 | } 29 | 30 | public int getTag() { 31 | return tag; 32 | } 33 | 34 | public void setTag(int tag) { 35 | this.tag = tag; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/me/splm/app/baselibdemo/ThirdActivity.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.baselibdemo; 2 | 3 | import android.content.Intent; 4 | import android.os.Bundle; 5 | import android.support.annotation.Nullable; 6 | import android.support.v7.app.AppCompatActivity; 7 | import android.util.Log; 8 | import android.view.View; 9 | import android.view.WindowManager; 10 | import android.widget.Button; 11 | 12 | 13 | public class ThirdActivity extends AppCompatActivity { 14 | private Button open_3_act_btn; 15 | @Override 16 | protected void onCreate(@Nullable Bundle savedInstanceState) { 17 | long begin=System.currentTimeMillis(); 18 | super.onCreate(savedInstanceState); 19 | getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 20 | WindowManager.LayoutParams.FLAG_FULLSCREEN); 21 | getSupportActionBar().hide(); 22 | setContentView(R.layout.activity_third); 23 | initView(); 24 | long end=System.currentTimeMillis(); 25 | Log.e("---------", "third==="+(end-begin)+"s"); 26 | } 27 | private void initView(){ 28 | open_3_act_btn=(Button) findViewById(R.id.open_3_act_btn); 29 | open_3_act_btn.setOnClickListener(new View.OnClickListener() { 30 | @Override 31 | public void onClick(View v) { 32 | Intent intent=new Intent(); 33 | intent.setClass(ThirdActivity.this,FourActivity.class); 34 | startActivity(intent); 35 | } 36 | }); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /app/src/main/java/me/splm/app/baselibdemo/manager/CustomManager.java: -------------------------------------------------------------------------------- 1 | package me.splm.app.baselibdemo.manager; 2 | 3 | import me.splm.app.core.component.manager.IManagerMarker; 4 | 5 | public class CustomManager implements IManagerMarker { 6 | } 7 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_four.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 |