Showing
71 changed files
with
3497 additions
and
0 deletions
.gitignore
0 → 100644
.idea/eclipseCodeFormatter.xml
0 → 100644
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | +<project version="4"> | ||
| 3 | + <component name="EclipseCodeFormatterProjectSettings"> | ||
| 4 | + <option name="projectSpecificProfile"> | ||
| 5 | + <ProjectSpecificProfile> | ||
| 6 | + <option name="formatter" value="ECLIPSE" /> | ||
| 7 | + <option name="importOrder" value="java;javax;org;android;androidx;com;" /> | ||
| 8 | + <option name="pathToConfigFileJava" value="$PROJECT_DIR$/config/CodeQuality/WonderTek_CodeFormatter_Convention_v1.0.xml" /> | ||
| 9 | + <option name="selectedJavaProfile" value="WonderTek_CodeFormatter_Convention_v1.0" /> | ||
| 10 | + </ProjectSpecificProfile> | ||
| 11 | + </option> | ||
| 12 | + </component> | ||
| 13 | +</project> |
.idea/vcs.xml
0 → 100644
app/.gitignore
0 → 100644
| 1 | +/build |
app/build.gradle
0 → 100644
| 1 | +plugins { | ||
| 2 | + id 'com.android.application' | ||
| 3 | + id 'kotlin-android' | ||
| 4 | + id 'kotlin-android-extensions' | ||
| 5 | +} | ||
| 6 | + | ||
| 7 | +android { | ||
| 8 | + compileSdkVersion var.compileSdkVersion | ||
| 9 | + buildToolsVersion var.buildToolsVersion | ||
| 10 | + | ||
| 11 | + defaultConfig { | ||
| 12 | + applicationId "com.example.myapplication" | ||
| 13 | + minSdkVersion var.minSdkVersion | ||
| 14 | + targetSdkVersion var.targetSdkVersion | ||
| 15 | + versionCode 1 | ||
| 16 | + versionName "1.0" | ||
| 17 | + | ||
| 18 | + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" | ||
| 19 | + multiDexEnabled true | ||
| 20 | + ndk { | ||
| 21 | + // noinspection ChromeOsAbiSupport | ||
| 22 | + abiFilters "armeabi-v7a", "arm64-v8a", "x86" | ||
| 23 | + } | ||
| 24 | + | ||
| 25 | + javaCompileOptions { | ||
| 26 | + annotationProcessorOptions { | ||
| 27 | + arguments = [AROUTER_MODULE_NAME: project.getName()] | ||
| 28 | + } | ||
| 29 | + } | ||
| 30 | + } | ||
| 31 | + | ||
| 32 | + buildTypes { | ||
| 33 | + release { | ||
| 34 | + minifyEnabled false | ||
| 35 | + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' | ||
| 36 | + } | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | + lintOptions { | ||
| 40 | + abortOnError false | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | + compileOptions { | ||
| 44 | + // Java兼容性设置为Java 8 | ||
| 45 | + sourceCompatibility JavaVersion.VERSION_1_8 | ||
| 46 | + targetCompatibility JavaVersion.VERSION_1_8 | ||
| 47 | + } | ||
| 48 | +} | ||
| 49 | + | ||
| 50 | +repositories { | ||
| 51 | + flatDir { | ||
| 52 | + dirs 'libs' | ||
| 53 | + } | ||
| 54 | +} | ||
| 55 | + | ||
| 56 | +dependencies { | ||
| 57 | +// implementation 'androidx.appcompat:appcompat:1.6.1' | ||
| 58 | + implementation "com.google.android.material:material:1.4.0" | ||
| 59 | + implementation 'com.wd:wdkit:1.0.0' | ||
| 60 | +} |
app/proguard-rules.pro
0 → 100644
| 1 | +# Add project specific ProGuard rules here. | ||
| 2 | +# You can control the set of applied configuration files using the | ||
| 3 | +# proguardFiles setting in build.gradle. | ||
| 4 | +# | ||
| 5 | +# For more details, see | ||
| 6 | +# http://developer.android.com/guide/developing/tools/proguard.html | ||
| 7 | + | ||
| 8 | +# If your project uses WebView with JS, uncomment the following | ||
| 9 | +# and specify the fully qualified class name to the JavaScript interface | ||
| 10 | +# class: | ||
| 11 | +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { | ||
| 12 | +# public *; | ||
| 13 | +#} | ||
| 14 | + | ||
| 15 | +# Uncomment this to preserve the line number information for | ||
| 16 | +# debugging stack traces. | ||
| 17 | +#-keepattributes SourceFile,LineNumberTable | ||
| 18 | + | ||
| 19 | +# If you keep the line number information, uncomment this to | ||
| 20 | +# hide the original source file name. | ||
| 21 | +#-renamesourcefileattribute SourceFile |
app/src/main/AndroidManifest.xml
0 → 100644
| 1 | +<?xml version="1.0" encoding="utf-8"?> | ||
| 2 | +<manifest xmlns:android="http://schemas.android.com/apk/res/android" | ||
| 3 | + xmlns:tools="http://schemas.android.com/tools" | ||
| 4 | + package="com.example.myapplication"> | ||
| 5 | + <!-- 请求网络 --> | ||
| 6 | + <uses-permission android:name="android.permission.INTERNET" /> | ||
| 7 | + <uses-feature | ||
| 8 | + android:name="android.software.leanback" | ||
| 9 | + android:required="false" /> | ||
| 10 | + <application | ||
| 11 | + android:name=".MyApplication" | ||
| 12 | + android:allowBackup="true" | ||
| 13 | + android:fullBackupContent="@xml/backup_rules" | ||
| 14 | + android:icon="@mipmap/ic_launcher" | ||
| 15 | + android:label="@string/app_name" | ||
| 16 | + android:roundIcon="@mipmap/ic_launcher_round" | ||
| 17 | + android:supportsRtl="true" | ||
| 18 | + android:theme="@style/Theme.MyApplication" | ||
| 19 | + tools:targetApi="31"> | ||
| 20 | + | ||
| 21 | + <activity | ||
| 22 | + android:name="com.example.myapplication.MainActivity" | ||
| 23 | + android:exported="true" | ||
| 24 | + android:launchMode="singleTask"> | ||
| 25 | + <intent-filter> | ||
| 26 | + <action android:name="android.intent.action.MAIN" /> | ||
| 27 | + <category android:name="android.intent.category.LAUNCHER" /> | ||
| 28 | + </intent-filter> | ||
| 29 | + </activity> | ||
| 30 | + </application> | ||
| 31 | +</manifest> |
| 1 | + | ||
| 2 | +package com.example.myapplication; | ||
| 3 | + | ||
| 4 | +import android.app.Activity; | ||
| 5 | +import android.os.Bundle; | ||
| 6 | + | ||
| 7 | +import androidx.annotation.Nullable; | ||
| 8 | + | ||
| 9 | +/** | ||
| 10 | + * @ProjectName: PeopleDailyVideo | ||
| 11 | + * @Package: com.people.displayui.main | ||
| 12 | + * @ClassName: WelcomeActivity | ||
| 13 | + * @Description: 启动APP过渡页面 | ||
| 14 | + * @Author: wd | ||
| 15 | + * @CreateDate: 2022/10/28 17:36 | ||
| 16 | + * @UpdateUser: wd | ||
| 17 | + * @UpdateDate: 2022/10/28 17:36 | ||
| 18 | + * @UpdateRemark: 更新说明: | ||
| 19 | + * @Version: 1.0 | ||
| 20 | + */ | ||
| 21 | +public class MainActivity extends Activity { | ||
| 22 | + | ||
| 23 | + @Override | ||
| 24 | + protected void onCreate(@Nullable Bundle savedInstanceState) { | ||
| 25 | + super.onCreate(savedInstanceState); | ||
| 26 | + // 直接进入首页 | ||
| 27 | + } | ||
| 28 | +} |
| 1 | + | ||
| 2 | +package com.example.myapplication; | ||
| 3 | + | ||
| 4 | +import android.app.Application; | ||
| 5 | +import android.util.Log; | ||
| 6 | + | ||
| 7 | +import com.example.myapplication.starttask.StartTaskConfig; | ||
| 8 | +import com.example.myapplication.starttask.StartTaskTool; | ||
| 9 | + | ||
| 10 | +/** | ||
| 11 | + * @author devel | ||
| 12 | + * @time 2024/8/28 星期三 16:23 | ||
| 13 | + */ | ||
| 14 | +public class MyApplication extends Application { | ||
| 15 | + @Override | ||
| 16 | + public void onCreate() { | ||
| 17 | + super.onCreate(); | ||
| 18 | + Log.e("zzzz","MyApplication onCreate"); | ||
| 19 | + // test | ||
| 20 | + StartTaskConfig taskConfig = new StartTaskConfig(this); | ||
| 21 | + taskConfig.start(); | ||
| 22 | + StartTaskTool.startTaskInMain(this); | ||
| 23 | + StartTaskTool.startPrivate(this); | ||
| 24 | + StartTaskTool.startTaskInSplash(this); | ||
| 25 | + } | ||
| 26 | +} |
| 1 | +/* | ||
| 2 | + * Copyright (c) People Technologies Co., Ltd. 2019-2022. All rights reserved. | ||
| 3 | + */ | ||
| 4 | + | ||
| 5 | +package com.example.myapplication.starttask; | ||
| 6 | + | ||
| 7 | +import android.content.Context; | ||
| 8 | +import android.util.Log; | ||
| 9 | + | ||
| 10 | +import com.example.myapplication.starttask.task.MyTaskCreator; | ||
| 11 | +import com.wd.base.starttask.AlphaManager; | ||
| 12 | +import com.wd.base.starttask.Project; | ||
| 13 | + | ||
| 14 | +/** | ||
| 15 | + * 描述:启动初始化任务 | ||
| 16 | + * 默认放在子线程执行,如果子线程执行有问题,构造函数中使用super(name,isInUiThread) | ||
| 17 | + * | ||
| 18 | + * @author : lvjinhui | ||
| 19 | + * @since: 2022/7/2 | ||
| 20 | + */ | ||
| 21 | + | ||
| 22 | +public class StartTaskConfig { | ||
| 23 | + | ||
| 24 | + private Context mContext; | ||
| 25 | + | ||
| 26 | + public StartTaskConfig(Context mContext) { | ||
| 27 | + this.mContext = mContext; | ||
| 28 | + } | ||
| 29 | + | ||
| 30 | + /** | ||
| 31 | + * 开始全部的初始化,在application | ||
| 32 | + */ | ||
| 33 | + public void start() { | ||
| 34 | + if (mContext == null) { | ||
| 35 | + return; | ||
| 36 | + } | ||
| 37 | + Project.Builder builder = new Project.Builder().withTaskCreator(new MyTaskCreator(mContext)); | ||
| 38 | + // 日志 | ||
| 39 | + builder.add(MyTaskCreator.TASK_LOG); | ||
| 40 | + // AppContext.init、CompComponent 组件服务注册,MyFileUtil.init,直播消息弹幕和打赏 | ||
| 41 | + builder.add(MyTaskCreator.TASK_LOCAL); | ||
| 42 | + AlphaManager.getInstance(mContext).addProject(builder.create()); | ||
| 43 | + AlphaManager.getInstance(mContext).start(); | ||
| 44 | + | ||
| 45 | + Log.e("zzzz","start"); | ||
| 46 | + } | ||
| 47 | + | ||
| 48 | + /** | ||
| 49 | + * 适当的放一部分延时初始化 | ||
| 50 | + */ | ||
| 51 | + public void startTaskDelay() { | ||
| 52 | + if (mContext == null) { | ||
| 53 | + return; | ||
| 54 | + } | ||
| 55 | + Project.Builder builder = new Project.Builder().withTaskCreator(new MyTaskCreator(mContext)); | ||
| 56 | + // 延时初始化,短视频SDK,辅助通道 | ||
| 57 | + builder.add(MyTaskCreator.TASK_DELAY); | ||
| 58 | + builder.setProjectName("delayGroup"); | ||
| 59 | + AlphaManager.getInstance(mContext).addProject(builder.create()); | ||
| 60 | + AlphaManager.getInstance(mContext).start(); | ||
| 61 | + Log.e("zzzz","startTaskDelay"); | ||
| 62 | + } | ||
| 63 | + | ||
| 64 | + /** | ||
| 65 | + * 需要用户同意隐私政策才能初始化的SDK,放在PrivatePolicyTask | ||
| 66 | + */ | ||
| 67 | + public void startPrivate() { | ||
| 68 | + if (mContext == null) { | ||
| 69 | + return; | ||
| 70 | + } | ||
| 71 | + Project.Builder builder = new Project.Builder().withTaskCreator(new MyTaskCreator(mContext)); | ||
| 72 | + // umeng 正式init | ||
| 73 | + builder.add(MyTaskCreator.TASK_PRIVATE); | ||
| 74 | + builder.setProjectName("privateGroup"); | ||
| 75 | + AlphaManager.getInstance(mContext).addProject(builder.create()); | ||
| 76 | + AlphaManager.getInstance(mContext).start(); | ||
| 77 | + Log.e("zzzz","startPrivate"); | ||
| 78 | + } | ||
| 79 | + | ||
| 80 | + /** | ||
| 81 | + * 优先级最高(未同意隐私政策,等同意隐私政策完成后初始化; | ||
| 82 | + * 已同意隐私政策,直接初始化) | ||
| 83 | + * 进入主页在初始的,但是在隐私弹窗之前,不可以放涉及隐私的SDK | ||
| 84 | + */ | ||
| 85 | + public void startTaskInMain() { | ||
| 86 | + if (mContext == null) { | ||
| 87 | + return; | ||
| 88 | + } | ||
| 89 | + | ||
| 90 | + Project.Builder builder = new Project.Builder().withTaskCreator(new MyTaskCreator(mContext)); | ||
| 91 | + // 子线程 内容组件、comp组件、语音识别 | ||
| 92 | + builder.add(MyTaskCreator.TASK_WD); | ||
| 93 | + builder.setProjectName("inMainGroup"); | ||
| 94 | + AlphaManager.getInstance(mContext).addProject(builder.create()); | ||
| 95 | + AlphaManager.getInstance(mContext).start(); | ||
| 96 | + Log.e("zzzz","startTaskInMain"); | ||
| 97 | + } | ||
| 98 | + | ||
| 99 | +} |
| 1 | +/* | ||
| 2 | + * Copyright (c) People Technologies Co., Ltd. 2019-2022. All rights reserved. | ||
| 3 | + */ | ||
| 4 | + | ||
| 5 | +package com.example.myapplication.starttask; | ||
| 6 | + | ||
| 7 | +import android.content.Context; | ||
| 8 | + | ||
| 9 | +/** | ||
| 10 | + * 描述: | ||
| 11 | + * | ||
| 12 | + * @author : lvjinhui | ||
| 13 | + * @since: 2022/7/7 | ||
| 14 | + */ | ||
| 15 | +public class StartTaskTool { | ||
| 16 | + public static void startTaskInMain(Context context) { | ||
| 17 | + StartTaskConfig taskConfig = new StartTaskConfig(context); | ||
| 18 | + taskConfig.startTaskInMain(); | ||
| 19 | + } | ||
| 20 | + | ||
| 21 | + public static void startPrivate(Context context) { | ||
| 22 | + StartTaskConfig taskConfig = new StartTaskConfig(context); | ||
| 23 | + taskConfig.startPrivate(); | ||
| 24 | + } | ||
| 25 | + | ||
| 26 | + public static void startTaskInSplash(Context context) { | ||
| 27 | + StartTaskConfig taskConfig = new StartTaskConfig(context); | ||
| 28 | + taskConfig.startTaskDelay(); | ||
| 29 | + } | ||
| 30 | +} |
| 1 | +/* | ||
| 2 | + * Copyright (c) People Technologies Co., Ltd. 2019-2022. All rights reserved. | ||
| 3 | + */ | ||
| 4 | + | ||
| 5 | +package com.example.myapplication.starttask.task; | ||
| 6 | + | ||
| 7 | +import android.content.Context; | ||
| 8 | + | ||
| 9 | +import com.wd.base.starttask.Task; | ||
| 10 | + | ||
| 11 | +//import com.orhanobut.logger.Logger; | ||
| 12 | +//import com.people.kittools.constant.CommonConstant; | ||
| 13 | +//import com.people.kittools.sp.SpUtils; | ||
| 14 | +//import com.people.umeng.UmSdkHelper; | ||
| 15 | + | ||
| 16 | +/** | ||
| 17 | + * 描述:在主页初始化,不着急使用,进入主页用户必然已经同意隐私政策 | ||
| 18 | + * | ||
| 19 | + * @author : lvjinhui | ||
| 20 | + * @since: 2022/7/2 | ||
| 21 | + */ | ||
| 22 | +public class DelayTask extends Task { | ||
| 23 | + | ||
| 24 | + public DelayTask(Context mContext) { | ||
| 25 | + super("DelayTask"); | ||
| 26 | + setExecutePriority(9); | ||
| 27 | +// if (SpUtils.isFirstAgreementFlag()){ | ||
| 28 | +// return; | ||
| 29 | +// } | ||
| 30 | + try { | ||
| 31 | + //友盟分享 | ||
| 32 | +// UmSdkHelper.initUmThirdSDk(mContext, CommonConstant.FILE_PROVIDER); | ||
| 33 | +// Logger.e("DelayTask 执行"); | ||
| 34 | + | ||
| 35 | + } catch (Exception e) { | ||
| 36 | + e.printStackTrace(); | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | + } | ||
| 40 | + | ||
| 41 | + @Override | ||
| 42 | + public void run() { | ||
| 43 | + | ||
| 44 | + } | ||
| 45 | +} |
| 1 | +/* | ||
| 2 | + * Copyright (c) People Technologies Co., Ltd. 2019-2022. All rights reserved. | ||
| 3 | + */ | ||
| 4 | + | ||
| 5 | +package com.example.myapplication.starttask.task; | ||
| 6 | + | ||
| 7 | +import java.lang.ref.WeakReference; | ||
| 8 | + | ||
| 9 | +import android.content.Context; | ||
| 10 | + | ||
| 11 | +import com.wd.base.starttask.Task; | ||
| 12 | + | ||
| 13 | +//import com.people.kittools.file.MyFileUtils; | ||
| 14 | +//import com.people.uiframework.CompComponent; | ||
| 15 | + | ||
| 16 | +/** | ||
| 17 | + * 描述:本地代码初始化context,都在子线程执行 | ||
| 18 | + * 无关用户信息,收集用户信息的SDK初始化不要放进这里 | ||
| 19 | + * @author : lvjinhui | ||
| 20 | + * @since: 2022/7/2 | ||
| 21 | + */ | ||
| 22 | +public class LocalThreadTask extends Task { | ||
| 23 | + | ||
| 24 | + private WeakReference<Context> weakReference; | ||
| 25 | + public LocalThreadTask(Context context) { | ||
| 26 | + super("LocalThreadTask"); | ||
| 27 | + weakReference = new WeakReference<>(context); | ||
| 28 | + setExecutePriority(1); | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + @Override | ||
| 32 | + public void run() { | ||
| 33 | + Context mContext = weakReference.get(); | ||
| 34 | + // 注册创建对象 | ||
| 35 | +// new CompComponent().registerServices(); | ||
| 36 | +// // 赋值context | ||
| 37 | +// MyFileUtils.init(mContext); | ||
| 38 | + } | ||
| 39 | + | ||
| 40 | +} |
| 1 | +/* | ||
| 2 | + * Copyright (c) People Technologies Co., Ltd. 2019-2022. All rights reserved. | ||
| 3 | + */ | ||
| 4 | + | ||
| 5 | +package com.example.myapplication.starttask.task; | ||
| 6 | + | ||
| 7 | +import com.wd.base.starttask.Task; | ||
| 8 | +//import com.people.logutil.LoggerInit; | ||
| 9 | + | ||
| 10 | +/** | ||
| 11 | + * 描述:com.orhanobut.logger 初始化,子线程初始化 | ||
| 12 | + * | ||
| 13 | + * @author : lvjinhui | ||
| 14 | + * @since: 2022/7/2 | ||
| 15 | + */ | ||
| 16 | +public class LoggerTask extends Task { | ||
| 17 | + | ||
| 18 | + public LoggerTask() { | ||
| 19 | + super("LoggerTask"); | ||
| 20 | + } | ||
| 21 | + | ||
| 22 | + @Override | ||
| 23 | + public void run() { | ||
| 24 | + // log 初始化 | ||
| 25 | +// LoggerInit.getInstance().init(true);// BuildConfig.DEBUG | ||
| 26 | + } | ||
| 27 | +} |
| 1 | +/* | ||
| 2 | + * Copyright (c) People Technologies Co., Ltd. 2019-2022. All rights reserved. | ||
| 3 | + */ | ||
| 4 | + | ||
| 5 | +package com.example.myapplication.starttask.task; | ||
| 6 | + | ||
| 7 | +import android.content.Context; | ||
| 8 | +import android.util.Log; | ||
| 9 | + | ||
| 10 | +import com.wd.base.starttask.ITaskCreator; | ||
| 11 | +import com.wd.base.starttask.Task; | ||
| 12 | + | ||
| 13 | +/** | ||
| 14 | + * 描述:create task | ||
| 15 | + * | ||
| 16 | + * @author : lvjinhui | ||
| 17 | + * @since: 2022/7/2 | ||
| 18 | + */ | ||
| 19 | +public class MyTaskCreator implements ITaskCreator { | ||
| 20 | + /** | ||
| 21 | + * 定义的task 名字, 比如 LoggerTask 在 task 构造函数传入 | ||
| 22 | + */ | ||
| 23 | + public static final String TASK_LOG = "LoggerTask"; | ||
| 24 | + | ||
| 25 | + public static final String TASK_LOCAL = "LocalThreadTask"; | ||
| 26 | + | ||
| 27 | + public static final String TASK_DELAY = "DelayTask"; | ||
| 28 | + | ||
| 29 | + public static final String TASK_PRIVATE = "PrivatePolicyTask"; | ||
| 30 | + | ||
| 31 | + public static final String TASK_WD = "WCompTask"; | ||
| 32 | + | ||
| 33 | + private final Context mContext; | ||
| 34 | + | ||
| 35 | + public MyTaskCreator(Context context) { | ||
| 36 | + this.mContext = context; | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | + @Override | ||
| 40 | + public Task createTask(String taskName) { | ||
| 41 | + Log.d("==ALPHA==", taskName); | ||
| 42 | + switch (taskName) { | ||
| 43 | + case TASK_LOG: | ||
| 44 | + return new LoggerTask(); | ||
| 45 | + case TASK_LOCAL: | ||
| 46 | + return new LocalThreadTask(mContext); | ||
| 47 | + case TASK_DELAY: | ||
| 48 | + return new DelayTask(mContext); | ||
| 49 | + case TASK_PRIVATE: | ||
| 50 | + return new PrivatePolicyTask(mContext); | ||
| 51 | + case TASK_WD: | ||
| 52 | + return new WCompTask(); | ||
| 53 | + default: | ||
| 54 | + break; | ||
| 55 | + } | ||
| 56 | + | ||
| 57 | + return null; | ||
| 58 | + } | ||
| 59 | +} |
| 1 | +/* | ||
| 2 | + * Copyright (c) People Technologies Co., Ltd. 2019-2022. All rights reserved. | ||
| 3 | + */ | ||
| 4 | + | ||
| 5 | +package com.example.myapplication.starttask.task; | ||
| 6 | + | ||
| 7 | +import android.content.Context; | ||
| 8 | + | ||
| 9 | +import com.wd.base.starttask.Task; | ||
| 10 | + | ||
| 11 | + | ||
| 12 | +//import com.orhanobut.logger.Logger; | ||
| 13 | +//import com.people.kittools.sp.SpUtils; | ||
| 14 | +//import com.people.umeng.UmSdkHelper; | ||
| 15 | + | ||
| 16 | + | ||
| 17 | +/** | ||
| 18 | + * 描述:需要用户同意隐私政策的SDK初始化 | ||
| 19 | + * | ||
| 20 | + * @author : lvjinhui | ||
| 21 | + * @since: 2022/7/2 | ||
| 22 | + */ | ||
| 23 | +public class PrivatePolicyTask extends Task { | ||
| 24 | + | ||
| 25 | + private Context instance; | ||
| 26 | + | ||
| 27 | + public PrivatePolicyTask(Context context) { | ||
| 28 | + super("PrivatePolicyTask"); | ||
| 29 | + this.instance = context; | ||
| 30 | +// if (SpUtils.isFirstAgreementFlag()) { | ||
| 31 | +// return; | ||
| 32 | +// } | ||
| 33 | + /** | ||
| 34 | + * 友盟SDK正式初始化 | ||
| 35 | + */ | ||
| 36 | +// UmSdkHelper.initUmSdk(instance); | ||
| 37 | +// Logger.e("隐私SDK初始化"); | ||
| 38 | + } | ||
| 39 | + | ||
| 40 | + @Override | ||
| 41 | + public void run() { | ||
| 42 | + | ||
| 43 | + } | ||
| 44 | +} |
| 1 | +/* | ||
| 2 | + * Copyright (c) People Technologies Co., Ltd. 2019-2022. All rights reserved. | ||
| 3 | + */ | ||
| 4 | + | ||
| 5 | +package com.example.myapplication.starttask.task; | ||
| 6 | + | ||
| 7 | +//import com.wondertek.wheat.ability.scheduler.WComponent; | ||
| 8 | +//import com.wondertek.wheat.ability.scheduler.listener.IComponentRegister; | ||
| 9 | +//import com.wondertek.wheat.ability.scheduler.listener.InitListener; | ||
| 10 | + | ||
| 11 | +import com.wd.base.starttask.Task; | ||
| 12 | + | ||
| 13 | +/** | ||
| 14 | + * 描述:组件注册,反射多了影响性能 | ||
| 15 | + * | ||
| 16 | + * @author : lvjinhui | ||
| 17 | + * @since: 2022/7/2 | ||
| 18 | + */ | ||
| 19 | +public class WCompTask extends Task { | ||
| 20 | + | ||
| 21 | + public WCompTask() { | ||
| 22 | + super("WCompTask"); | ||
| 23 | + } | ||
| 24 | + | ||
| 25 | + @Override | ||
| 26 | + public void run() { | ||
| 27 | + // 代码组件 | ||
| 28 | + initWComponent(); | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + private void initWComponent() { | ||
| 32 | +// WComponent.init(new InitListener() { | ||
| 33 | +// @Override | ||
| 34 | +// public void beforeInit() { | ||
| 35 | +// | ||
| 36 | +// } | ||
| 37 | +// | ||
| 38 | +// @Override | ||
| 39 | +// public void registerComponent(IComponentRegister iComponentRegister) { | ||
| 40 | +// // 内容获取组件 | ||
| 41 | +// iComponentRegister.registerComponent("ContentComponent", | ||
| 42 | +// "com.people.component.content.ContentComponent"); | ||
| 43 | +// // comp组件 | ||
| 44 | +// iComponentRegister.registerComponent("CompComponent", "com.people.component.comp.CompComponent"); | ||
| 45 | +// // 语音识别 | ||
| 46 | +// iComponentRegister.registerComponent("SpeechComponent", "com.people.speech.SpeechComponent"); | ||
| 47 | +// } | ||
| 48 | +// | ||
| 49 | +// @Override | ||
| 50 | +// public void initFinish() { | ||
| 51 | +// | ||
| 52 | +// } | ||
| 53 | +// }); | ||
| 54 | + } | ||
| 55 | + | ||
| 56 | +} |
| 1 | +<?xml version="1.0" encoding="utf-8"?> | ||
| 2 | +<vector xmlns:android="http://schemas.android.com/apk/res/android" | ||
| 3 | + android:width="108dp" | ||
| 4 | + android:height="108dp" | ||
| 5 | + android:viewportWidth="108" | ||
| 6 | + android:viewportHeight="108"> | ||
| 7 | + <path | ||
| 8 | + android:fillColor="#3DDC84" | ||
| 9 | + android:pathData="M0,0h108v108h-108z" /> | ||
| 10 | + <path | ||
| 11 | + android:fillColor="#00000000" | ||
| 12 | + android:pathData="M9,0L9,108" | ||
| 13 | + android:strokeWidth="0.8" | ||
| 14 | + android:strokeColor="#33FFFFFF" /> | ||
| 15 | + <path | ||
| 16 | + android:fillColor="#00000000" | ||
| 17 | + android:pathData="M19,0L19,108" | ||
| 18 | + android:strokeWidth="0.8" | ||
| 19 | + android:strokeColor="#33FFFFFF" /> | ||
| 20 | + <path | ||
| 21 | + android:fillColor="#00000000" | ||
| 22 | + android:pathData="M29,0L29,108" | ||
| 23 | + android:strokeWidth="0.8" | ||
| 24 | + android:strokeColor="#33FFFFFF" /> | ||
| 25 | + <path | ||
| 26 | + android:fillColor="#00000000" | ||
| 27 | + android:pathData="M39,0L39,108" | ||
| 28 | + android:strokeWidth="0.8" | ||
| 29 | + android:strokeColor="#33FFFFFF" /> | ||
| 30 | + <path | ||
| 31 | + android:fillColor="#00000000" | ||
| 32 | + android:pathData="M49,0L49,108" | ||
| 33 | + android:strokeWidth="0.8" | ||
| 34 | + android:strokeColor="#33FFFFFF" /> | ||
| 35 | + <path | ||
| 36 | + android:fillColor="#00000000" | ||
| 37 | + android:pathData="M59,0L59,108" | ||
| 38 | + android:strokeWidth="0.8" | ||
| 39 | + android:strokeColor="#33FFFFFF" /> | ||
| 40 | + <path | ||
| 41 | + android:fillColor="#00000000" | ||
| 42 | + android:pathData="M69,0L69,108" | ||
| 43 | + android:strokeWidth="0.8" | ||
| 44 | + android:strokeColor="#33FFFFFF" /> | ||
| 45 | + <path | ||
| 46 | + android:fillColor="#00000000" | ||
| 47 | + android:pathData="M79,0L79,108" | ||
| 48 | + android:strokeWidth="0.8" | ||
| 49 | + android:strokeColor="#33FFFFFF" /> | ||
| 50 | + <path | ||
| 51 | + android:fillColor="#00000000" | ||
| 52 | + android:pathData="M89,0L89,108" | ||
| 53 | + android:strokeWidth="0.8" | ||
| 54 | + android:strokeColor="#33FFFFFF" /> | ||
| 55 | + <path | ||
| 56 | + android:fillColor="#00000000" | ||
| 57 | + android:pathData="M99,0L99,108" | ||
| 58 | + android:strokeWidth="0.8" | ||
| 59 | + android:strokeColor="#33FFFFFF" /> | ||
| 60 | + <path | ||
| 61 | + android:fillColor="#00000000" | ||
| 62 | + android:pathData="M0,9L108,9" | ||
| 63 | + android:strokeWidth="0.8" | ||
| 64 | + android:strokeColor="#33FFFFFF" /> | ||
| 65 | + <path | ||
| 66 | + android:fillColor="#00000000" | ||
| 67 | + android:pathData="M0,19L108,19" | ||
| 68 | + android:strokeWidth="0.8" | ||
| 69 | + android:strokeColor="#33FFFFFF" /> | ||
| 70 | + <path | ||
| 71 | + android:fillColor="#00000000" | ||
| 72 | + android:pathData="M0,29L108,29" | ||
| 73 | + android:strokeWidth="0.8" | ||
| 74 | + android:strokeColor="#33FFFFFF" /> | ||
| 75 | + <path | ||
| 76 | + android:fillColor="#00000000" | ||
| 77 | + android:pathData="M0,39L108,39" | ||
| 78 | + android:strokeWidth="0.8" | ||
| 79 | + android:strokeColor="#33FFFFFF" /> | ||
| 80 | + <path | ||
| 81 | + android:fillColor="#00000000" | ||
| 82 | + android:pathData="M0,49L108,49" | ||
| 83 | + android:strokeWidth="0.8" | ||
| 84 | + android:strokeColor="#33FFFFFF" /> | ||
| 85 | + <path | ||
| 86 | + android:fillColor="#00000000" | ||
| 87 | + android:pathData="M0,59L108,59" | ||
| 88 | + android:strokeWidth="0.8" | ||
| 89 | + android:strokeColor="#33FFFFFF" /> | ||
| 90 | + <path | ||
| 91 | + android:fillColor="#00000000" | ||
| 92 | + android:pathData="M0,69L108,69" | ||
| 93 | + android:strokeWidth="0.8" | ||
| 94 | + android:strokeColor="#33FFFFFF" /> | ||
| 95 | + <path | ||
| 96 | + android:fillColor="#00000000" | ||
| 97 | + android:pathData="M0,79L108,79" | ||
| 98 | + android:strokeWidth="0.8" | ||
| 99 | + android:strokeColor="#33FFFFFF" /> | ||
| 100 | + <path | ||
| 101 | + android:fillColor="#00000000" | ||
| 102 | + android:pathData="M0,89L108,89" | ||
| 103 | + android:strokeWidth="0.8" | ||
| 104 | + android:strokeColor="#33FFFFFF" /> | ||
| 105 | + <path | ||
| 106 | + android:fillColor="#00000000" | ||
| 107 | + android:pathData="M0,99L108,99" | ||
| 108 | + android:strokeWidth="0.8" | ||
| 109 | + android:strokeColor="#33FFFFFF" /> | ||
| 110 | + <path | ||
| 111 | + android:fillColor="#00000000" | ||
| 112 | + android:pathData="M19,29L89,29" | ||
| 113 | + android:strokeWidth="0.8" | ||
| 114 | + android:strokeColor="#33FFFFFF" /> | ||
| 115 | + <path | ||
| 116 | + android:fillColor="#00000000" | ||
| 117 | + android:pathData="M19,39L89,39" | ||
| 118 | + android:strokeWidth="0.8" | ||
| 119 | + android:strokeColor="#33FFFFFF" /> | ||
| 120 | + <path | ||
| 121 | + android:fillColor="#00000000" | ||
| 122 | + android:pathData="M19,49L89,49" | ||
| 123 | + android:strokeWidth="0.8" | ||
| 124 | + android:strokeColor="#33FFFFFF" /> | ||
| 125 | + <path | ||
| 126 | + android:fillColor="#00000000" | ||
| 127 | + android:pathData="M19,59L89,59" | ||
| 128 | + android:strokeWidth="0.8" | ||
| 129 | + android:strokeColor="#33FFFFFF" /> | ||
| 130 | + <path | ||
| 131 | + android:fillColor="#00000000" | ||
| 132 | + android:pathData="M19,69L89,69" | ||
| 133 | + android:strokeWidth="0.8" | ||
| 134 | + android:strokeColor="#33FFFFFF" /> | ||
| 135 | + <path | ||
| 136 | + android:fillColor="#00000000" | ||
| 137 | + android:pathData="M19,79L89,79" | ||
| 138 | + android:strokeWidth="0.8" | ||
| 139 | + android:strokeColor="#33FFFFFF" /> | ||
| 140 | + <path | ||
| 141 | + android:fillColor="#00000000" | ||
| 142 | + android:pathData="M29,19L29,89" | ||
| 143 | + android:strokeWidth="0.8" | ||
| 144 | + android:strokeColor="#33FFFFFF" /> | ||
| 145 | + <path | ||
| 146 | + android:fillColor="#00000000" | ||
| 147 | + android:pathData="M39,19L39,89" | ||
| 148 | + android:strokeWidth="0.8" | ||
| 149 | + android:strokeColor="#33FFFFFF" /> | ||
| 150 | + <path | ||
| 151 | + android:fillColor="#00000000" | ||
| 152 | + android:pathData="M49,19L49,89" | ||
| 153 | + android:strokeWidth="0.8" | ||
| 154 | + android:strokeColor="#33FFFFFF" /> | ||
| 155 | + <path | ||
| 156 | + android:fillColor="#00000000" | ||
| 157 | + android:pathData="M59,19L59,89" | ||
| 158 | + android:strokeWidth="0.8" | ||
| 159 | + android:strokeColor="#33FFFFFF" /> | ||
| 160 | + <path | ||
| 161 | + android:fillColor="#00000000" | ||
| 162 | + android:pathData="M69,19L69,89" | ||
| 163 | + android:strokeWidth="0.8" | ||
| 164 | + android:strokeColor="#33FFFFFF" /> | ||
| 165 | + <path | ||
| 166 | + android:fillColor="#00000000" | ||
| 167 | + android:pathData="M79,19L79,89" | ||
| 168 | + android:strokeWidth="0.8" | ||
| 169 | + android:strokeColor="#33FFFFFF" /> | ||
| 170 | +</vector> |
| 1 | +<vector xmlns:android="http://schemas.android.com/apk/res/android" | ||
| 2 | + xmlns:aapt="http://schemas.android.com/aapt" | ||
| 3 | + android:width="108dp" | ||
| 4 | + android:height="108dp" | ||
| 5 | + android:viewportWidth="108" | ||
| 6 | + android:viewportHeight="108"> | ||
| 7 | + <path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z"> | ||
| 8 | + <aapt:attr name="android:fillColor"> | ||
| 9 | + <gradient | ||
| 10 | + android:endX="85.84757" | ||
| 11 | + android:endY="92.4963" | ||
| 12 | + android:startX="42.9492" | ||
| 13 | + android:startY="49.59793" | ||
| 14 | + android:type="linear"> | ||
| 15 | + <item | ||
| 16 | + android:color="#44000000" | ||
| 17 | + android:offset="0.0" /> | ||
| 18 | + <item | ||
| 19 | + android:color="#00000000" | ||
| 20 | + android:offset="1.0" /> | ||
| 21 | + </gradient> | ||
| 22 | + </aapt:attr> | ||
| 23 | + </path> | ||
| 24 | + <path | ||
| 25 | + android:fillColor="#FFFFFF" | ||
| 26 | + android:fillType="nonZero" | ||
| 27 | + android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z" | ||
| 28 | + android:strokeWidth="1" | ||
| 29 | + android:strokeColor="#00000000" /> | ||
| 30 | +</vector> |
app/src/main/res/layout/activity_main.xml
0 → 100644
| 1 | +<?xml version="1.0" encoding="utf-8"?> | ||
| 2 | +<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> | ||
| 3 | + <background android:drawable="@drawable/ic_launcher_background" /> | ||
| 4 | + <foreground android:drawable="@drawable/ic_launcher_foreground" /> | ||
| 5 | + <monochrome android:drawable="@drawable/ic_launcher_foreground" /> | ||
| 6 | +</adaptive-icon> |
| 1 | +<?xml version="1.0" encoding="utf-8"?> | ||
| 2 | +<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> | ||
| 3 | + <background android:drawable="@drawable/ic_launcher_background" /> | ||
| 4 | + <foreground android:drawable="@drawable/ic_launcher_foreground" /> | ||
| 5 | + <monochrome android:drawable="@drawable/ic_launcher_foreground" /> | ||
| 6 | +</adaptive-icon> |
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
app/src/main/res/values/colors.xml
0 → 100644
| 1 | +<?xml version="1.0" encoding="utf-8"?> | ||
| 2 | +<resources> | ||
| 3 | + <color name="purple_200">#FFBB86FC</color> | ||
| 4 | + <color name="purple_500">#FF6200EE</color> | ||
| 5 | + <color name="purple_700">#FF3700B3</color> | ||
| 6 | + <color name="teal_200">#FF03DAC5</color> | ||
| 7 | + <color name="teal_700">#FF018786</color> | ||
| 8 | + <color name="black">#FF000000</color> | ||
| 9 | + <color name="white">#FFFFFFFF</color> | ||
| 10 | +</resources> |
app/src/main/res/values/strings.xml
0 → 100644
app/src/main/res/values/themes.xml
0 → 100644
| 1 | +<resources xmlns:tools="http://schemas.android.com/tools"> | ||
| 2 | + <!-- Base application theme. --> | ||
| 3 | + <style name="Theme.MyApplication" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> | ||
| 4 | + <!-- Primary brand color. --> | ||
| 5 | + <item name="colorPrimary">@color/purple_500</item> | ||
| 6 | + <item name="colorPrimaryVariant">@color/purple_700</item> | ||
| 7 | + <item name="colorOnPrimary">@color/white</item> | ||
| 8 | + <!-- Secondary brand color. --> | ||
| 9 | + <item name="colorSecondary">@color/teal_200</item> | ||
| 10 | + <item name="colorSecondaryVariant">@color/teal_700</item> | ||
| 11 | + <item name="colorOnSecondary">@color/black</item> | ||
| 12 | + <!-- Status bar color. --> | ||
| 13 | + <item name="android:statusBarColor">?attr/colorPrimaryVariant</item> | ||
| 14 | + <!-- Customize your theme here. --> | ||
| 15 | + </style> | ||
| 16 | +</resources> |
app/src/main/res/xml/backup_rules.xml
0 → 100644
| 1 | +<?xml version="1.0" encoding="utf-8"?><!-- | ||
| 2 | + Sample backup rules file; uncomment and customize as necessary. | ||
| 3 | + See https://developer.android.com/guide/topics/data/autobackup | ||
| 4 | + for details. | ||
| 5 | + Note: This file is ignored for devices older that API 31 | ||
| 6 | + See https://developer.android.com/about/versions/12/backup-restore | ||
| 7 | +--> | ||
| 8 | +<full-backup-content> | ||
| 9 | + <!-- | ||
| 10 | + <include domain="sharedpref" path="."/> | ||
| 11 | + <exclude domain="sharedpref" path="device.xml"/> | ||
| 12 | +--> | ||
| 13 | +</full-backup-content> |
build.gradle
0 → 100644
| 1 | +apply plugin: 'maven' | ||
| 2 | + | ||
| 3 | +buildscript { | ||
| 4 | + ext.kotlin_version = "1.4.32" | ||
| 5 | + repositories { | ||
| 6 | + mavenLocal() | ||
| 7 | + mavenCentral() | ||
| 8 | + // 以下四行代码为阿里gradle源,需要的人自己放開使用 | ||
| 9 | + maven { url 'https://maven.aliyun.com/repository/google' } | ||
| 10 | + maven { url 'https://maven.aliyun.com/repository/gradle-plugin' } | ||
| 11 | + maven { url 'https://maven.aliyun.com/repository/public' } | ||
| 12 | + maven { url 'https://maven.aliyun.com/repository/jcenter' } | ||
| 13 | + maven { url 'https://maven.aliyun.com/nexus/content/repositories/releases' } | ||
| 14 | + //阿里云 maven | ||
| 15 | + maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' } | ||
| 16 | + maven { url 'https://maven.aliyun.com/repository/releases' } | ||
| 17 | + | ||
| 18 | + google() | ||
| 19 | + | ||
| 20 | + maven { url "https://jitpack.io" } | ||
| 21 | + //华为 | ||
| 22 | + maven { url 'https://developer.huawei.com/repo/' } | ||
| 23 | + //阿里云QuickTracking | ||
| 24 | + maven { url 'https://repo1.maven.org/maven2/' } | ||
| 25 | + | ||
| 26 | + maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' } | ||
| 27 | + maven { | ||
| 28 | + url 'https://maven.aliyun.com/nexus/content/repositories/google/' | ||
| 29 | + name 'aliyun-google' | ||
| 30 | + } | ||
| 31 | + | ||
| 32 | + // TingYun | ||
| 33 | + maven { url "https://nexus2.tingyun.com/nexus/content/repositories/snapshots/" } | ||
| 34 | + } | ||
| 35 | + | ||
| 36 | + dependencies { | ||
| 37 | + classpath "com.android.tools.build:gradle:4.0.2" | ||
| 38 | + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" | ||
| 39 | + classpath 'com.billy.android:autoregister:1.4.2' | ||
| 40 | + // NOTE: Do not place your application dependencies here; they belong | ||
| 41 | + // in the individual module build.gradle files | ||
| 42 | + } | ||
| 43 | +} | ||
| 44 | + | ||
| 45 | +allprojects { | ||
| 46 | + repositories { | ||
| 47 | + mavenLocal() | ||
| 48 | + mavenCentral() | ||
| 49 | + // 以下四行代码为阿里gradle源,需要的人自己放開使用 | ||
| 50 | + maven { url 'https://maven.aliyun.com/repository/google' } | ||
| 51 | + maven { url 'https://maven.aliyun.com/repository/gradle-plugin' } | ||
| 52 | + maven { url 'https://maven.aliyun.com/repository/public' } | ||
| 53 | + maven { url 'https://maven.aliyun.com/repository/jcenter' } | ||
| 54 | + maven { url 'https://maven.aliyun.com/nexus/content/repositories/releases' } | ||
| 55 | + //阿里云 maven | ||
| 56 | + maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' } | ||
| 57 | + maven { url 'https://maven.aliyun.com/repository/releases' } | ||
| 58 | + google() | ||
| 59 | + | ||
| 60 | + maven { url "https://jitpack.io" } | ||
| 61 | + //华为 | ||
| 62 | + maven { url 'https://developer.huawei.com/repo/' } | ||
| 63 | + //阿里云QuickTracking | ||
| 64 | + maven { url 'https://repo1.maven.org/maven2/' } | ||
| 65 | + maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' } | ||
| 66 | + maven { | ||
| 67 | + url 'https://maven.aliyun.com/nexus/content/repositories/google/' | ||
| 68 | + name 'aliyun-google' | ||
| 69 | + } | ||
| 70 | + | ||
| 71 | + flatDir { dirs 'src/main/libs' } | ||
| 72 | + | ||
| 73 | + // 快马私库 | ||
| 74 | + maven { | ||
| 75 | + credentials { | ||
| 76 | + username '6708d1cf6f4c940bd257c88d' | ||
| 77 | + password 'Wm51gc4rARyr' | ||
| 78 | + } | ||
| 79 | + url 'https://packages.aliyun.com/6708d221eef79c23d7b02189/maven/repo-higom' | ||
| 80 | + } | ||
| 81 | + } | ||
| 82 | + | ||
| 83 | + project.configurations.configureEach { | ||
| 84 | + resolutionStrategy.eachDependency { details -> | ||
| 85 | + if (details.requested.group == 'com.android.android.support' && !details.requested.name.contains('multidex')) { | ||
| 86 | + details.useVersion "28.0.0" | ||
| 87 | + } | ||
| 88 | + | ||
| 89 | + } | ||
| 90 | + } | ||
| 91 | + | ||
| 92 | + // 强制依赖 | ||
| 93 | + configurations.configureEach { | ||
| 94 | + exclude group: 'com.alipay.android.phone.thirdparty', module: 'securityguard-build' | ||
| 95 | + resolutionStrategy { | ||
| 96 | + force 'androidx.activity:activity:1.2.1' | ||
| 97 | + force 'androidx.annotation:annotation:1.1.0' | ||
| 98 | + force 'androidx.appcompat:appcompat:1.2.0' | ||
| 99 | + force 'androidx.arch.core:core-common:2.1.0' | ||
| 100 | + force 'androidx.arch.core:core-runtime:2.1.0' | ||
| 101 | + force 'androidx.core:core-ktx:1.6.0' | ||
| 102 | + force 'androidx.core:core:1.5.0' | ||
| 103 | + force 'androidx.collection:collection:1.1.0' | ||
| 104 | + force 'androidx.constraintlayout:constraintlayout:2.0.4' | ||
| 105 | + force 'androidx.constraintlayout:constraintlayout-solver:2.0.4' | ||
| 106 | + force 'androidx.coordinatorlayout:coordinatorlayout:1.1.0' | ||
| 107 | + force 'androidx.fragment:fragment:1.3.1' | ||
| 108 | + force 'androidx.lifecycle:lifecycle-common:2.3.0' | ||
| 109 | + force 'androidx.multidex:multidex:2.0.1' | ||
| 110 | + force 'androidx.recyclerview:recyclerview:1.2.0' | ||
| 111 | + force 'androidx.vectordrawable:vectordrawable:1.1.0' | ||
| 112 | + force 'androidx.vectordrawable:vectordrawable-animated:1.1.0' | ||
| 113 | + force 'com.squareup.okhttp3:okhttp:4.9.1' | ||
| 114 | + force 'com.squareup.okio:okio:2.7.0' | ||
| 115 | + force 'org.jetbrains.kotlin:kotlin-stdlib:1.4.32' | ||
| 116 | + force 'org.jetbrains.kotlin:kotilin-stdlib-jdk8:1.4.32' | ||
| 117 | + force 'org.jetbrains:annotations:15.0' | ||
| 118 | + force 'net.sf.proguard:proguard-base:6.1.0' | ||
| 119 | + } | ||
| 120 | + } | ||
| 121 | +} | ||
| 122 | + | ||
| 123 | +ext { | ||
| 124 | + var = [ | ||
| 125 | + // SDK And Tools | ||
| 126 | + applicationId : "com.wondertek.dss", | ||
| 127 | + minSdkVersion : 25, | ||
| 128 | + targetSdkVersion : 30, | ||
| 129 | + compileSdkVersion: 30, | ||
| 130 | + buildToolsVersion: "30.0.3", | ||
| 131 | + // 版本号,正式版本 1.0.0 1000080 后两位,80即标识为发布版本 | ||
| 132 | + // 测试版本 1.0.0_TF1 1000001 后两位,01即为测试版本号,01-79 | ||
| 133 | + // 升级版本 1.0.0_RC1 1000081 后两位,81即为升级版本号,81-99 | ||
| 134 | + versionName : "1.0.0", // release正式 | ||
| 135 | + debugVnName : "", // debug开发模式 用于区分debug模式下上报的日志 | ||
| 136 | + versionCode : 100, | ||
| 137 | + //此版本号是SDK版本,不能随便改 | ||
| 138 | + aar_version : "1.0.0", | ||
| 139 | + ] | ||
| 140 | + | ||
| 141 | +} |
| 1 | +<?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||
| 2 | +<profiles version="12"> | ||
| 3 | + <profile kind="CodeFormatterProfile" name="WonderTek_CodeFormatter_Convention_v1.0" | ||
| 4 | + version="12"> | ||
| 5 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert" /> | ||
| 6 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" | ||
| 7 | + value="insert" /> | ||
| 8 | + <setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration" | ||
| 9 | + value="insert" /> | ||
| 10 | + <setting | ||
| 11 | + id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" | ||
| 12 | + value="do not insert" /> | ||
| 13 | + <setting | ||
| 14 | + id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" | ||
| 15 | + value="insert" /> | ||
| 16 | + <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment" | ||
| 17 | + value="common_lines" /> | ||
| 18 | + <setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries" | ||
| 19 | + value="true" /> | ||
| 20 | + <setting | ||
| 21 | + id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" | ||
| 22 | + value="insert" /> | ||
| 23 | + <setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" | ||
| 24 | + value="do not insert" /> | ||
| 25 | + <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package" | ||
| 26 | + value="insert" /> | ||
| 27 | + <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation" | ||
| 28 | + value="common_lines" /> | ||
| 29 | + <setting | ||
| 30 | + id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" | ||
| 31 | + value="do not insert" /> | ||
| 32 | + <setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1" /> | ||
| 33 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" | ||
| 34 | + value="do not insert" /> | ||
| 35 | + <setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" | ||
| 36 | + value="insert" /> | ||
| 37 | + <setting | ||
| 38 | + id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" | ||
| 39 | + value="do not insert" /> | ||
| 40 | + <setting | ||
| 41 | + id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" | ||
| 42 | + value="do not insert" /> | ||
| 43 | + <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement" | ||
| 44 | + value="common_lines" /> | ||
| 45 | + <setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="true" /> | ||
| 46 | + <setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4" /> | ||
| 47 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" | ||
| 48 | + value="do not insert" /> | ||
| 49 | + <setting | ||
| 50 | + id="org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration" | ||
| 51 | + value="common_lines" /> | ||
| 52 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" | ||
| 53 | + value="insert" /> | ||
| 54 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" | ||
| 55 | + value="insert" /> | ||
| 56 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" | ||
| 57 | + value="do not insert" /> | ||
| 58 | + <setting | ||
| 59 | + id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration" | ||
| 60 | + value="do not insert" /> | ||
| 61 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" | ||
| 62 | + value="insert" /> | ||
| 63 | + <setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off" /> | ||
| 64 | + <setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="1" /> | ||
| 65 | + <setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="49" /> | ||
| 66 | + <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1" /> | ||
| 67 | + <setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1" /> | ||
| 68 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator" | ||
| 69 | + value="insert" /> | ||
| 70 | + <setting | ||
| 71 | + id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" | ||
| 72 | + value="insert" /> | ||
| 73 | + <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement" | ||
| 74 | + value="common_lines" /> | ||
| 75 | + <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" | ||
| 76 | + value="16" /> | ||
| 77 | + <setting | ||
| 78 | + id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" | ||
| 79 | + value="do not insert" /> | ||
| 80 | + <setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="true" /> | ||
| 81 | + <setting id="org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch" | ||
| 82 | + value="true" /> | ||
| 83 | + <setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="@formatter:on" /> | ||
| 84 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" | ||
| 85 | + value="insert" /> | ||
| 86 | + <setting | ||
| 87 | + id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" | ||
| 88 | + value="insert" /> | ||
| 89 | + <setting | ||
| 90 | + id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" | ||
| 91 | + value="20" /> | ||
| 92 | + <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" | ||
| 93 | + value="do not insert" /> | ||
| 94 | + <setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" | ||
| 95 | + value="false" /> | ||
| 96 | + <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field" | ||
| 97 | + value="insert" /> | ||
| 98 | + <setting | ||
| 99 | + id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" | ||
| 100 | + value="insert" /> | ||
| 101 | + <setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block" | ||
| 102 | + value="insert" /> | ||
| 103 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" | ||
| 104 | + value="do not insert" /> | ||
| 105 | + <setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" | ||
| 106 | + value="1" /> | ||
| 107 | + <setting | ||
| 108 | + id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" | ||
| 109 | + value="do not insert" /> | ||
| 110 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" | ||
| 111 | + value="do not insert" /> | ||
| 112 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" | ||
| 113 | + value="do not insert" /> | ||
| 114 | + <setting | ||
| 115 | + id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" | ||
| 116 | + value="do not insert" /> | ||
| 117 | + <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method" | ||
| 118 | + value="insert" /> | ||
| 119 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" | ||
| 120 | + value="do not insert" /> | ||
| 121 | + <setting id="org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references" | ||
| 122 | + value="16" /> | ||
| 123 | + <setting | ||
| 124 | + id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" | ||
| 125 | + value="insert" /> | ||
| 126 | + <setting | ||
| 127 | + id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" | ||
| 128 | + value="do not insert" /> | ||
| 129 | + <setting | ||
| 130 | + id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant" | ||
| 131 | + value="insert" /> | ||
| 132 | + <setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" | ||
| 133 | + value="false" /> | ||
| 134 | + <setting id="org.eclipse.jdt.core.compiler.problem.enumIdentifier" value="error" /> | ||
| 135 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" | ||
| 136 | + value="insert" /> | ||
| 137 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" | ||
| 138 | + value="insert" /> | ||
| 139 | + <setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" | ||
| 140 | + value="true" /> | ||
| 141 | + <setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" | ||
| 142 | + value="end_of_line" /> | ||
| 143 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" | ||
| 144 | + value="do not insert" /> | ||
| 145 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" | ||
| 146 | + value="do not insert" /> | ||
| 147 | + <setting | ||
| 148 | + id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" | ||
| 149 | + value="do not insert" /> | ||
| 150 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" | ||
| 151 | + value="insert" /> | ||
| 152 | + <setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="120" /> | ||
| 153 | + <setting id="org.eclipse.jdt.core.formatter.use_on_off_tags" value="false" /> | ||
| 154 | + <setting | ||
| 155 | + id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" | ||
| 156 | + value="do not insert" /> | ||
| 157 | + <setting | ||
| 158 | + id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" | ||
| 159 | + value="insert" /> | ||
| 160 | + <setting | ||
| 161 | + id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" | ||
| 162 | + value="do not insert" /> | ||
| 163 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" | ||
| 164 | + value="insert" /> | ||
| 165 | + <setting | ||
| 166 | + id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" | ||
| 167 | + value="insert" /> | ||
| 168 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" | ||
| 169 | + value="do not insert" /> | ||
| 170 | + <setting | ||
| 171 | + id="org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments" | ||
| 172 | + value="true" /> | ||
| 173 | + <setting | ||
| 174 | + id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" | ||
| 175 | + value="insert" /> | ||
| 176 | + <setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" | ||
| 177 | + value="end_of_line" /> | ||
| 178 | + <setting | ||
| 179 | + id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" | ||
| 180 | + value="do not insert" /> | ||
| 181 | + <setting id="org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch" | ||
| 182 | + value="16" /> | ||
| 183 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" | ||
| 184 | + value="insert" /> | ||
| 185 | + <setting | ||
| 186 | + id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" | ||
| 187 | + value="0" /> | ||
| 188 | + <setting | ||
| 189 | + id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" | ||
| 190 | + value="insert" /> | ||
| 191 | + <setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" | ||
| 192 | + value="false" /> | ||
| 193 | + <setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression" value="16" /> | ||
| 194 | + <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause" | ||
| 195 | + value="common_lines" /> | ||
| 196 | + <setting | ||
| 197 | + id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" | ||
| 198 | + value="insert" /> | ||
| 199 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" | ||
| 200 | + value="do not insert" /> | ||
| 201 | + <setting | ||
| 202 | + id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" | ||
| 203 | + value="insert" /> | ||
| 204 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" | ||
| 205 | + value="do not insert" /> | ||
| 206 | + <setting | ||
| 207 | + id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" | ||
| 208 | + value="16" /> | ||
| 209 | + <setting | ||
| 210 | + id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" | ||
| 211 | + value="true" /> | ||
| 212 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" | ||
| 213 | + value="insert" /> | ||
| 214 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" | ||
| 215 | + value="do not insert" /> | ||
| 216 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" | ||
| 217 | + value="insert" /> | ||
| 218 | + <setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="end_of_line" /> | ||
| 219 | + <setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" | ||
| 220 | + value="end_of_line" /> | ||
| 221 | + <setting id="org.eclipse.jdt.core.formatter.brace_position_for_lambda_body" | ||
| 222 | + value="end_of_line" /> | ||
| 223 | + <setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true" /> | ||
| 224 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" | ||
| 225 | + value="do not insert" /> | ||
| 226 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" | ||
| 227 | + value="insert" /> | ||
| 228 | + <setting | ||
| 229 | + id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" | ||
| 230 | + value="do not insert" /> | ||
| 231 | + <setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="true" /> | ||
| 232 | + <setting | ||
| 233 | + id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" | ||
| 234 | + value="20" /> | ||
| 235 | + <setting id="org.eclipse.jdt.core.formatter.alignment_for_type_parameters" value="16" /> | ||
| 236 | + <setting | ||
| 237 | + id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" | ||
| 238 | + value="insert" /> | ||
| 239 | + <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" | ||
| 240 | + value="16" /> | ||
| 241 | + <setting | ||
| 242 | + id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" | ||
| 243 | + value="20" /> | ||
| 244 | + <setting id="org.eclipse.jdt.core.compiler.problem.assertIdentifier" value="error" /> | ||
| 245 | + <setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" | ||
| 246 | + value="true" /> | ||
| 247 | + <setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" | ||
| 248 | + value="do not insert" /> | ||
| 249 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try" | ||
| 250 | + value="insert" /> | ||
| 251 | + <setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" | ||
| 252 | + value="do not insert" /> | ||
| 253 | + <setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" | ||
| 254 | + value="true" /> | ||
| 255 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" | ||
| 256 | + value="insert" /> | ||
| 257 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator" | ||
| 258 | + value="insert" /> | ||
| 259 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" | ||
| 260 | + value="do not insert" /> | ||
| 261 | + <setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" | ||
| 262 | + value="20" /> | ||
| 263 | + <setting id="org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column" | ||
| 264 | + value="true" /> | ||
| 265 | + <setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1" /> | ||
| 266 | + <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation" | ||
| 267 | + value="common_lines" /> | ||
| 268 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" | ||
| 269 | + value="insert" /> | ||
| 270 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" | ||
| 271 | + value="do not insert" /> | ||
| 272 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources" | ||
| 273 | + value="do not insert" /> | ||
| 274 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" | ||
| 275 | + value="insert" /> | ||
| 276 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" | ||
| 277 | + value="do not insert" /> | ||
| 278 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" | ||
| 279 | + value="do not insert" /> | ||
| 280 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" | ||
| 281 | + value="insert" /> | ||
| 282 | + <setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration" | ||
| 283 | + value="insert" /> | ||
| 284 | + <setting | ||
| 285 | + id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" | ||
| 286 | + value="do not insert" /> | ||
| 287 | + <setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="true" /> | ||
| 288 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" | ||
| 289 | + value="insert" /> | ||
| 290 | + <setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false" /> | ||
| 291 | + <setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="20" /> | ||
| 292 | + <setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body" | ||
| 293 | + value="insert" /> | ||
| 294 | + <setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" | ||
| 295 | + value="true" /> | ||
| 296 | + <setting | ||
| 297 | + id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" | ||
| 298 | + value="do not insert" /> | ||
| 299 | + <setting | ||
| 300 | + id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" | ||
| 301 | + value="do not insert" /> | ||
| 302 | + <setting | ||
| 303 | + id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" | ||
| 304 | + value="16" /> | ||
| 305 | + <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" | ||
| 306 | + value="0" /> | ||
| 307 | + <setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" | ||
| 308 | + value="16" /> | ||
| 309 | + <setting | ||
| 310 | + id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" | ||
| 311 | + value="do not insert" /> | ||
| 312 | + <setting | ||
| 313 | + id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" | ||
| 314 | + value="do not insert" /> | ||
| 315 | + <setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" | ||
| 316 | + value="false" /> | ||
| 317 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" | ||
| 318 | + value="insert" /> | ||
| 319 | + <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type" | ||
| 320 | + value="insert" /> | ||
| 321 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" | ||
| 322 | + value="insert" /> | ||
| 323 | + <setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" | ||
| 324 | + value="end_of_line" /> | ||
| 325 | + <setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" | ||
| 326 | + value="end_of_line" /> | ||
| 327 | + <setting | ||
| 328 | + id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" | ||
| 329 | + value="do not insert" /> | ||
| 330 | + <setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="false" /> | ||
| 331 | + <setting | ||
| 332 | + id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" | ||
| 333 | + value="16" /> | ||
| 334 | + <setting | ||
| 335 | + id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" | ||
| 336 | + value="do not insert" /> | ||
| 337 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" | ||
| 338 | + value="insert" /> | ||
| 339 | + <setting id="org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode" value="enabled" /> | ||
| 340 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" | ||
| 341 | + value="do not insert" /> | ||
| 342 | + <setting id="org.eclipse.jdt.core.formatter.alignment_for_method_declaration" value="16" /> | ||
| 343 | + <setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="true" /> | ||
| 344 | + <setting | ||
| 345 | + id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" | ||
| 346 | + value="do not insert" /> | ||
| 347 | + <setting id="org.eclipse.jdt.core.formatter.wrap_before_conditional_operator" | ||
| 348 | + value="true" /> | ||
| 349 | + <setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" | ||
| 350 | + value="true" /> | ||
| 351 | + <setting | ||
| 352 | + id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" | ||
| 353 | + value="do not insert" /> | ||
| 354 | + <setting | ||
| 355 | + id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" | ||
| 356 | + value="do not insert" /> | ||
| 357 | + <setting id="org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines" | ||
| 358 | + value="2147483647" /> | ||
| 359 | + <setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries" | ||
| 360 | + value="true" /> | ||
| 361 | + <setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" | ||
| 362 | + value="end_of_line" /> | ||
| 363 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" | ||
| 364 | + value="insert" /> | ||
| 365 | + <setting id="org.eclipse.jdt.core.formatter.alignment_for_resources_in_try" value="16" /> | ||
| 366 | + <setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" | ||
| 367 | + value="false" /> | ||
| 368 | + <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause" | ||
| 369 | + value="common_lines" /> | ||
| 370 | + <setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" | ||
| 371 | + value="80" /> | ||
| 372 | + <setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" | ||
| 373 | + value="false" /> | ||
| 374 | + <setting id="org.eclipse.jdt.core.compiler.source" value="1.8" /> | ||
| 375 | + <setting | ||
| 376 | + id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" | ||
| 377 | + value="do not insert" /> | ||
| 378 | + <setting | ||
| 379 | + id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" | ||
| 380 | + value="insert" /> | ||
| 381 | + <setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="4" /> | ||
| 382 | + <setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant" | ||
| 383 | + value="insert" /> | ||
| 384 | + <setting | ||
| 385 | + id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" | ||
| 386 | + value="insert" /> | ||
| 387 | + <setting | ||
| 388 | + id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" | ||
| 389 | + value="do not insert" /> | ||
| 390 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" | ||
| 391 | + value="insert" /> | ||
| 392 | + <setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true" /> | ||
| 393 | + <setting | ||
| 394 | + id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" | ||
| 395 | + value="insert" /> | ||
| 396 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try" | ||
| 397 | + value="do not insert" /> | ||
| 398 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources" | ||
| 399 | + value="insert" /> | ||
| 400 | + <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="1" /> | ||
| 401 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" | ||
| 402 | + value="do not insert" /> | ||
| 403 | + <setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" | ||
| 404 | + value="1" /> | ||
| 405 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" | ||
| 406 | + value="do not insert" /> | ||
| 407 | + <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1" /> | ||
| 408 | + <setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" | ||
| 409 | + value="16" /> | ||
| 410 | + <setting | ||
| 411 | + id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" | ||
| 412 | + value="16" /> | ||
| 413 | + <setting | ||
| 414 | + id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" | ||
| 415 | + value="insert" /> | ||
| 416 | + <setting id="org.eclipse.jdt.core.formatter.wrap_before_assignment_operator" | ||
| 417 | + value="false" /> | ||
| 418 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" | ||
| 419 | + value="do not insert" /> | ||
| 420 | + <setting id="org.eclipse.jdt.core.compiler.codegen.targetPlatform" value="1.8" /> | ||
| 421 | + <setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" | ||
| 422 | + value="end_of_line" /> | ||
| 423 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" | ||
| 424 | + value="do not insert" /> | ||
| 425 | + <setting | ||
| 426 | + id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" | ||
| 427 | + value="insert" /> | ||
| 428 | + <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation" | ||
| 429 | + value="do not insert" /> | ||
| 430 | + <setting | ||
| 431 | + id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" | ||
| 432 | + value="do not insert" /> | ||
| 433 | + <setting | ||
| 434 | + id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" | ||
| 435 | + value="do not insert" /> | ||
| 436 | + <setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true" /> | ||
| 437 | + <setting | ||
| 438 | + id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" | ||
| 439 | + value="do not insert" /> | ||
| 440 | + <setting | ||
| 441 | + id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" | ||
| 442 | + value="insert" /> | ||
| 443 | + <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration" | ||
| 444 | + value="common_lines" /> | ||
| 445 | + <setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16" /> | ||
| 446 | + <setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false" /> | ||
| 447 | + <setting id="org.eclipse.jdt.core.formatter.alignment_for_type_arguments" value="16" /> | ||
| 448 | + <setting | ||
| 449 | + id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" | ||
| 450 | + value="do not insert" /> | ||
| 451 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" | ||
| 452 | + value="do not insert" /> | ||
| 453 | + <setting | ||
| 454 | + id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" | ||
| 455 | + value="do not insert" /> | ||
| 456 | + <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation" | ||
| 457 | + value="16" /> | ||
| 458 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" | ||
| 459 | + value="do not insert" /> | ||
| 460 | + <setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" | ||
| 461 | + value="true" /> | ||
| 462 | + <setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" | ||
| 463 | + value="true" /> | ||
| 464 | + <setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" | ||
| 465 | + value="do not insert" /> | ||
| 466 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" | ||
| 467 | + value="insert" /> | ||
| 468 | + <setting | ||
| 469 | + id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" | ||
| 470 | + value="do not insert" /> | ||
| 471 | + <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1" /> | ||
| 472 | + <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_label" | ||
| 473 | + value="do not insert" /> | ||
| 474 | + <setting | ||
| 475 | + id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" | ||
| 476 | + value="true" /> | ||
| 477 | + <setting | ||
| 478 | + id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" | ||
| 479 | + value="do not insert" /> | ||
| 480 | + <setting | ||
| 481 | + id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" | ||
| 482 | + value="do not insert" /> | ||
| 483 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" | ||
| 484 | + value="insert" /> | ||
| 485 | + <setting | ||
| 486 | + id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" | ||
| 487 | + value="do not insert" /> | ||
| 488 | + <setting | ||
| 489 | + id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" | ||
| 490 | + value="do not insert" /> | ||
| 491 | + <setting | ||
| 492 | + id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" | ||
| 493 | + value="do not insert" /> | ||
| 494 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" | ||
| 495 | + value="do not insert" /> | ||
| 496 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" | ||
| 497 | + value="insert" /> | ||
| 498 | + <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1" /> | ||
| 499 | + <setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" | ||
| 500 | + value="do not insert" /> | ||
| 501 | + <setting | ||
| 502 | + id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" | ||
| 503 | + value="do not insert" /> | ||
| 504 | + <setting | ||
| 505 | + id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" | ||
| 506 | + value="do not insert" /> | ||
| 507 | + <setting | ||
| 508 | + id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" | ||
| 509 | + value="16" /> | ||
| 510 | + <setting | ||
| 511 | + id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" | ||
| 512 | + value="do not insert" /> | ||
| 513 | + <setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration" | ||
| 514 | + value="insert" /> | ||
| 515 | + <setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true" /> | ||
| 516 | + <setting | ||
| 517 | + id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" | ||
| 518 | + value="do not insert" /> | ||
| 519 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" | ||
| 520 | + value="do not insert" /> | ||
| 521 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" | ||
| 522 | + value="do not insert" /> | ||
| 523 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" | ||
| 524 | + value="do not insert" /> | ||
| 525 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try" | ||
| 526 | + value="do not insert" /> | ||
| 527 | + <setting | ||
| 528 | + id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" | ||
| 529 | + value="do not insert" /> | ||
| 530 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" | ||
| 531 | + value="do not insert" /> | ||
| 532 | + <setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="true" /> | ||
| 533 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow" | ||
| 534 | + value="insert" /> | ||
| 535 | + <setting | ||
| 536 | + id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" | ||
| 537 | + value="do not insert" /> | ||
| 538 | + <setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false" /> | ||
| 539 | + <setting | ||
| 540 | + id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" | ||
| 541 | + value="insert" /> | ||
| 542 | + <setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" | ||
| 543 | + value="16" /> | ||
| 544 | + <setting | ||
| 545 | + id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" | ||
| 546 | + value="do not insert" /> | ||
| 547 | + <setting | ||
| 548 | + id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" | ||
| 549 | + value="do not insert" /> | ||
| 550 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" | ||
| 551 | + value="do not insert" /> | ||
| 552 | + <setting | ||
| 553 | + id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" | ||
| 554 | + value="insert" /> | ||
| 555 | + <setting | ||
| 556 | + id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" | ||
| 557 | + value="do not insert" /> | ||
| 558 | + <setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" | ||
| 559 | + value="true" /> | ||
| 560 | + <setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16" /> | ||
| 561 | + <setting | ||
| 562 | + id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" | ||
| 563 | + value="insert" /> | ||
| 564 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" | ||
| 565 | + value="do not insert" /> | ||
| 566 | + <setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" | ||
| 567 | + value="end_of_line" /> | ||
| 568 | + <setting id="org.eclipse.jdt.core.formatter.wrap_before_binary_operator" value="true" /> | ||
| 569 | + <setting | ||
| 570 | + id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" | ||
| 571 | + value="insert" /> | ||
| 572 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" | ||
| 573 | + value="insert" /> | ||
| 574 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" | ||
| 575 | + value="do not insert" /> | ||
| 576 | + <setting id="org.eclipse.jdt.core.compiler.compliance" value="1.8" /> | ||
| 577 | + <setting | ||
| 578 | + id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" | ||
| 579 | + value="do not insert" /> | ||
| 580 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" | ||
| 581 | + value="insert" /> | ||
| 582 | + <setting | ||
| 583 | + id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" | ||
| 584 | + value="do not insert" /> | ||
| 585 | + <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration" | ||
| 586 | + value="common_lines" /> | ||
| 587 | + <setting | ||
| 588 | + id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" | ||
| 589 | + value="do not insert" /> | ||
| 590 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" | ||
| 591 | + value="do not insert" /> | ||
| 592 | + <setting | ||
| 593 | + id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" | ||
| 594 | + value="do not insert" /> | ||
| 595 | + <setting | ||
| 596 | + id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" | ||
| 597 | + value="insert" /> | ||
| 598 | + <setting | ||
| 599 | + id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" | ||
| 600 | + value="do not insert" /> | ||
| 601 | + <setting | ||
| 602 | + id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" | ||
| 603 | + value="do not insert" /> | ||
| 604 | + <setting id="org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested" | ||
| 605 | + value="true" /> | ||
| 606 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" | ||
| 607 | + value="insert" /> | ||
| 608 | + <setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" | ||
| 609 | + value="end_of_line" /> | ||
| 610 | + <setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" | ||
| 611 | + value="end_of_line" /> | ||
| 612 | + <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="1" /> | ||
| 613 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" | ||
| 614 | + value="insert" /> | ||
| 615 | + <setting | ||
| 616 | + id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" | ||
| 617 | + value="insert" /> | ||
| 618 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" | ||
| 619 | + value="do not insert" /> | ||
| 620 | + <setting | ||
| 621 | + id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" | ||
| 622 | + value="do not insert" /> | ||
| 623 | + <setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header" | ||
| 624 | + value="16" /> | ||
| 625 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" | ||
| 626 | + value="do not insert" /> | ||
| 627 | + <setting | ||
| 628 | + id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" | ||
| 629 | + value="do not insert" /> | ||
| 630 | + <setting | ||
| 631 | + id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" | ||
| 632 | + value="do not insert" /> | ||
| 633 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" | ||
| 634 | + value="do not insert" /> | ||
| 635 | + <setting | ||
| 636 | + id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" | ||
| 637 | + value="do not insert" /> | ||
| 638 | + <setting | ||
| 639 | + id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" | ||
| 640 | + value="true" /> | ||
| 641 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow" | ||
| 642 | + value="insert" /> | ||
| 643 | + <setting | ||
| 644 | + id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" | ||
| 645 | + value="insert" /> | ||
| 646 | + <setting | ||
| 647 | + id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" | ||
| 648 | + value="do not insert" /> | ||
| 649 | + <setting id="org.eclipse.jdt.core.formatter.join_lines_in_comments" value="false" /> | ||
| 650 | + <setting | ||
| 651 | + id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" | ||
| 652 | + value="do not insert" /> | ||
| 653 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" | ||
| 654 | + value="insert" /> | ||
| 655 | + <setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" | ||
| 656 | + value="false" /> | ||
| 657 | + <setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" | ||
| 658 | + value="do not insert" /> | ||
| 659 | + <setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="space" /> | ||
| 660 | + <setting | ||
| 661 | + id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" | ||
| 662 | + value="do not insert" /> | ||
| 663 | + <setting id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups" value="1" /> | ||
| 664 | + <setting id="org.eclipse.jdt.core.formatter.lineSplit" value="120" /> | ||
| 665 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" | ||
| 666 | + value="do not insert" /> | ||
| 667 | + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" | ||
| 668 | + value="insert" /> | ||
| 669 | + </profile> | ||
| 670 | +</profiles> |
gradle.properties
0 → 100644
| 1 | +# Project-wide Gradle settings. | ||
| 2 | +# IDE (e.g. Android Studio) users: | ||
| 3 | +# Gradle settings configured through the IDE *will override* | ||
| 4 | +# any settings specified in this file. | ||
| 5 | +# For more details on how to configure your build environment visit | ||
| 6 | +# http://www.gradle.org/docs/current/userguide/build_environment.html | ||
| 7 | +# Specifies the JVM arguments used for the daemon process. | ||
| 8 | +# The setting is particularly useful for tweaking memory settings. | ||
| 9 | +#org.gradle.jvmargs=-Xmx2048m | ||
| 10 | +# When configured, Gradle will run in incubating parallel mode. | ||
| 11 | +# This option should only be used with decoupled projects. More details, visit | ||
| 12 | +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects | ||
| 13 | +# org.gradle.parallel=true | ||
| 14 | +# AndroidX package structure to make it clearer which packages are bundled with the | ||
| 15 | +# Android operating system, and which are packaged with your app's APK | ||
| 16 | +# https://developer.android.com/topic/libraries/support-library/androidx-rn | ||
| 17 | +android.useAndroidX=true | ||
| 18 | +# Automatically convert third-party libraries to use AndroidX | ||
| 19 | +android.enableJetifier=true | ||
| 20 | +android.enableResourceOptimizations=false | ||
| 21 | +#建议您关闭 R8 后再进行混淆 | ||
| 22 | +android.enableR8=false | ||
| 23 | +android.enableR8.libraries=false | ||
| 24 | +# 如果使用最新稳定版本 Android Studio 3.5 或以上,那么您需要在 gradle.properties 里面新增 | ||
| 25 | +android.buildOnlyTargetAbi=false | ||
| 26 | +#网络请求接口版本 202204151851 | ||
| 27 | +requestVersion=107 | ||
| 28 | +#设置组件是否作为app还是lib,true是lib ,false 是app | ||
| 29 | +#分享 | ||
| 30 | +isShareModule=true | ||
| 31 | +#播放器 | ||
| 32 | +isPlayerModule=true | ||
| 33 | +#是否直播模块运行 false可以单独运行 | ||
| 34 | +isLiveModule=true | ||
| 35 | +org.gradle.daemon=true | ||
| 36 | +org.gradle.parallel=true | ||
| 37 | +org.gradle.configureondemand=true | ||
| 38 | +org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 | ||
| 39 | +# Kotlin code style for this project: "official" or "obsolete": | ||
| 40 | +kotlin.code.style=official | ||
| 41 | +# Enables namespacing of each library's R class so that its R class includes only the | ||
| 42 | +# resources declared in the library itself and none from the library's dependencies, | ||
| 43 | +# thereby reducing the size of the R class for that library | ||
| 44 | +#android.nonTransitiveRClass=true | ||
| 45 | + | ||
| 46 | + |
gradle/wrapper/gradle-wrapper.jar
0 → 100644
No preview for this file type
gradle/wrapper/gradle-wrapper.properties
0 → 100644
gradlew
0 → 100644
| 1 | +#!/usr/bin/env sh | ||
| 2 | + | ||
| 3 | +############################################################################## | ||
| 4 | +## | ||
| 5 | +## Gradle start up script for UN*X | ||
| 6 | +## | ||
| 7 | +############################################################################## | ||
| 8 | + | ||
| 9 | +# Attempt to set APP_HOME | ||
| 10 | +# Resolve links: $0 may be a link | ||
| 11 | +PRG="$0" | ||
| 12 | +# Need this for relative symlinks. | ||
| 13 | +while [ -h "$PRG" ] ; do | ||
| 14 | + ls=`ls -ld "$PRG"` | ||
| 15 | + link=`expr "$ls" : '.*-> \(.*\)$'` | ||
| 16 | + if expr "$link" : '/.*' > /dev/null; then | ||
| 17 | + PRG="$link" | ||
| 18 | + else | ||
| 19 | + PRG=`dirname "$PRG"`"/$link" | ||
| 20 | + fi | ||
| 21 | +done | ||
| 22 | +SAVED="`pwd`" | ||
| 23 | +cd "`dirname \"$PRG\"`/" >/dev/null | ||
| 24 | +APP_HOME="`pwd -P`" | ||
| 25 | +cd "$SAVED" >/dev/null | ||
| 26 | + | ||
| 27 | +APP_NAME="Gradle" | ||
| 28 | +APP_BASE_NAME=`basename "$0"` | ||
| 29 | + | ||
| 30 | +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | ||
| 31 | +DEFAULT_JVM_OPTS="" | ||
| 32 | + | ||
| 33 | +# Use the maximum available, or set MAX_FD != -1 to use that value. | ||
| 34 | +MAX_FD="maximum" | ||
| 35 | + | ||
| 36 | +warn () { | ||
| 37 | + echo "$*" | ||
| 38 | +} | ||
| 39 | + | ||
| 40 | +die () { | ||
| 41 | + echo | ||
| 42 | + echo "$*" | ||
| 43 | + echo | ||
| 44 | + exit 1 | ||
| 45 | +} | ||
| 46 | + | ||
| 47 | +# OS specific support (must be 'true' or 'false'). | ||
| 48 | +cygwin=false | ||
| 49 | +msys=false | ||
| 50 | +darwin=false | ||
| 51 | +nonstop=false | ||
| 52 | +case "`uname`" in | ||
| 53 | + CYGWIN* ) | ||
| 54 | + cygwin=true | ||
| 55 | + ;; | ||
| 56 | + Darwin* ) | ||
| 57 | + darwin=true | ||
| 58 | + ;; | ||
| 59 | + MINGW* ) | ||
| 60 | + msys=true | ||
| 61 | + ;; | ||
| 62 | + NONSTOP* ) | ||
| 63 | + nonstop=true | ||
| 64 | + ;; | ||
| 65 | +esac | ||
| 66 | + | ||
| 67 | +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar | ||
| 68 | + | ||
| 69 | +# Determine the Java command to use to start the JVM. | ||
| 70 | +if [ -n "$JAVA_HOME" ] ; then | ||
| 71 | + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then | ||
| 72 | + # IBM's JDK on AIX uses strange locations for the executables | ||
| 73 | + JAVACMD="$JAVA_HOME/jre/sh/java" | ||
| 74 | + else | ||
| 75 | + JAVACMD="$JAVA_HOME/bin/java" | ||
| 76 | + fi | ||
| 77 | + if [ ! -x "$JAVACMD" ] ; then | ||
| 78 | + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME | ||
| 79 | + | ||
| 80 | +Please set the JAVA_HOME variable in your environment to match the | ||
| 81 | +location of your Java installation." | ||
| 82 | + fi | ||
| 83 | +else | ||
| 84 | + JAVACMD="java" | ||
| 85 | + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. | ||
| 86 | + | ||
| 87 | +Please set the JAVA_HOME variable in your environment to match the | ||
| 88 | +location of your Java installation." | ||
| 89 | +fi | ||
| 90 | + | ||
| 91 | +# Increase the maximum file descriptors if we can. | ||
| 92 | +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then | ||
| 93 | + MAX_FD_LIMIT=`ulimit -H -n` | ||
| 94 | + if [ $? -eq 0 ] ; then | ||
| 95 | + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then | ||
| 96 | + MAX_FD="$MAX_FD_LIMIT" | ||
| 97 | + fi | ||
| 98 | + ulimit -n $MAX_FD | ||
| 99 | + if [ $? -ne 0 ] ; then | ||
| 100 | + warn "Could not set maximum file descriptor limit: $MAX_FD" | ||
| 101 | + fi | ||
| 102 | + else | ||
| 103 | + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" | ||
| 104 | + fi | ||
| 105 | +fi | ||
| 106 | + | ||
| 107 | +# For Darwin, add options to specify how the application appears in the dock | ||
| 108 | +if $darwin; then | ||
| 109 | + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" | ||
| 110 | +fi | ||
| 111 | + | ||
| 112 | +# For Cygwin, switch paths to Windows format before running java | ||
| 113 | +if $cygwin ; then | ||
| 114 | + APP_HOME=`cygpath --path --mixed "$APP_HOME"` | ||
| 115 | + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` | ||
| 116 | + JAVACMD=`cygpath --unix "$JAVACMD"` | ||
| 117 | + | ||
| 118 | + # We build the pattern for arguments to be converted via cygpath | ||
| 119 | + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` | ||
| 120 | + SEP="" | ||
| 121 | + for dir in $ROOTDIRSRAW ; do | ||
| 122 | + ROOTDIRS="$ROOTDIRS$SEP$dir" | ||
| 123 | + SEP="|" | ||
| 124 | + done | ||
| 125 | + OURCYGPATTERN="(^($ROOTDIRS))" | ||
| 126 | + # Add a user-defined pattern to the cygpath arguments | ||
| 127 | + if [ "$GRADLE_CYGPATTERN" != "" ] ; then | ||
| 128 | + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" | ||
| 129 | + fi | ||
| 130 | + # Now convert the arguments - kludge to limit ourselves to /bin/sh | ||
| 131 | + i=0 | ||
| 132 | + for arg in "$@" ; do | ||
| 133 | + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` | ||
| 134 | + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option | ||
| 135 | + | ||
| 136 | + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition | ||
| 137 | + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` | ||
| 138 | + else | ||
| 139 | + eval `echo args$i`="\"$arg\"" | ||
| 140 | + fi | ||
| 141 | + i=$((i+1)) | ||
| 142 | + done | ||
| 143 | + case $i in | ||
| 144 | + (0) set -- ;; | ||
| 145 | + (1) set -- "$args0" ;; | ||
| 146 | + (2) set -- "$args0" "$args1" ;; | ||
| 147 | + (3) set -- "$args0" "$args1" "$args2" ;; | ||
| 148 | + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; | ||
| 149 | + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; | ||
| 150 | + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; | ||
| 151 | + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; | ||
| 152 | + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; | ||
| 153 | + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; | ||
| 154 | + esac | ||
| 155 | +fi | ||
| 156 | + | ||
| 157 | +# Escape application args | ||
| 158 | +save () { | ||
| 159 | + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done | ||
| 160 | + echo " " | ||
| 161 | +} | ||
| 162 | +APP_ARGS=$(save "$@") | ||
| 163 | + | ||
| 164 | +# Collect all arguments for the java command, following the shell quoting and substitution rules | ||
| 165 | +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" | ||
| 166 | + | ||
| 167 | +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong | ||
| 168 | +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then | ||
| 169 | + cd "$(dirname "$0")" | ||
| 170 | +fi | ||
| 171 | + | ||
| 172 | +exec "$JAVACMD" "$@" |
gradlew.bat
0 → 100644
| 1 | +@if "%DEBUG%" == "" @echo off | ||
| 2 | +@rem ########################################################################## | ||
| 3 | +@rem | ||
| 4 | +@rem Gradle startup script for Windows | ||
| 5 | +@rem | ||
| 6 | +@rem ########################################################################## | ||
| 7 | + | ||
| 8 | +@rem Set local scope for the variables with windows NT shell | ||
| 9 | +if "%OS%"=="Windows_NT" setlocal | ||
| 10 | + | ||
| 11 | +set DIRNAME=%~dp0 | ||
| 12 | +if "%DIRNAME%" == "" set DIRNAME=. | ||
| 13 | +set APP_BASE_NAME=%~n0 | ||
| 14 | +set APP_HOME=%DIRNAME% | ||
| 15 | + | ||
| 16 | +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | ||
| 17 | +set DEFAULT_JVM_OPTS= | ||
| 18 | + | ||
| 19 | +@rem Find java.exe | ||
| 20 | +if defined JAVA_HOME goto findJavaFromJavaHome | ||
| 21 | + | ||
| 22 | +set JAVA_EXE=java.exe | ||
| 23 | +%JAVA_EXE% -version >NUL 2>&1 | ||
| 24 | +if "%ERRORLEVEL%" == "0" goto init | ||
| 25 | + | ||
| 26 | +echo. | ||
| 27 | +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. | ||
| 28 | +echo. | ||
| 29 | +echo Please set the JAVA_HOME variable in your environment to match the | ||
| 30 | +echo location of your Java installation. | ||
| 31 | + | ||
| 32 | +goto fail | ||
| 33 | + | ||
| 34 | +:findJavaFromJavaHome | ||
| 35 | +set JAVA_HOME=%JAVA_HOME:"=% | ||
| 36 | +set JAVA_EXE=%JAVA_HOME%/bin/java.exe | ||
| 37 | + | ||
| 38 | +if exist "%JAVA_EXE%" goto init | ||
| 39 | + | ||
| 40 | +echo. | ||
| 41 | +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% | ||
| 42 | +echo. | ||
| 43 | +echo Please set the JAVA_HOME variable in your environment to match the | ||
| 44 | +echo location of your Java installation. | ||
| 45 | + | ||
| 46 | +goto fail | ||
| 47 | + | ||
| 48 | +:init | ||
| 49 | +@rem Get command-line arguments, handling Windows variants | ||
| 50 | + | ||
| 51 | +if not "%OS%" == "Windows_NT" goto win9xME_args | ||
| 52 | + | ||
| 53 | +:win9xME_args | ||
| 54 | +@rem Slurp the command line arguments. | ||
| 55 | +set CMD_LINE_ARGS= | ||
| 56 | +set _SKIP=2 | ||
| 57 | + | ||
| 58 | +:win9xME_args_slurp | ||
| 59 | +if "x%~1" == "x" goto execute | ||
| 60 | + | ||
| 61 | +set CMD_LINE_ARGS=%* | ||
| 62 | + | ||
| 63 | +:execute | ||
| 64 | +@rem Setup the command line | ||
| 65 | + | ||
| 66 | +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar | ||
| 67 | + | ||
| 68 | +@rem Execute Gradle | ||
| 69 | +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% | ||
| 70 | + | ||
| 71 | +:end | ||
| 72 | +@rem End local scope for the variables with windows NT shell | ||
| 73 | +if "%ERRORLEVEL%"=="0" goto mainEnd | ||
| 74 | + | ||
| 75 | +:fail | ||
| 76 | +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of | ||
| 77 | +rem the _cmd.exe /c_ return code! | ||
| 78 | +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 | ||
| 79 | +exit /b 1 | ||
| 80 | + | ||
| 81 | +:mainEnd | ||
| 82 | +if "%OS%"=="Windows_NT" endlocal | ||
| 83 | + | ||
| 84 | +:omega |
settings.gradle
0 → 100644
wdkit/.gitignore
0 → 100644
| 1 | +/build |
wdkit/README.md
0 → 100644
wdkit/build.gradle
0 → 100644
| 1 | +plugins { | ||
| 2 | + id 'com.android.library' | ||
| 3 | + id 'kotlin-android' | ||
| 4 | + id 'maven' | ||
| 5 | +} | ||
| 6 | + | ||
| 7 | +android { | ||
| 8 | + compileSdkVersion var.compileSdkVersion | ||
| 9 | + | ||
| 10 | + defaultConfig { | ||
| 11 | + minSdkVersion var.minSdkVersion | ||
| 12 | + targetSdkVersion var.targetSdkVersion | ||
| 13 | + versionCode var.versionCode | ||
| 14 | + versionName var.versionName | ||
| 15 | + | ||
| 16 | + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" | ||
| 17 | + consumerProguardFiles "consumer-rules.pro" | ||
| 18 | + | ||
| 19 | + buildConfigField "String", "API_VERSION", "\"${requestVersion}\"" | ||
| 20 | + } | ||
| 21 | + | ||
| 22 | + buildTypes { | ||
| 23 | + release { | ||
| 24 | + minifyEnabled false | ||
| 25 | + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' | ||
| 26 | + } | ||
| 27 | + } | ||
| 28 | + compileOptions { | ||
| 29 | + sourceCompatibility JavaVersion.VERSION_1_8 | ||
| 30 | + targetCompatibility JavaVersion.VERSION_1_8 | ||
| 31 | + } | ||
| 32 | + | ||
| 33 | + // 自定义AAR包名 | ||
| 34 | + android.libraryVariants.all { variant -> | ||
| 35 | + variant.outputs.all { | ||
| 36 | + if (outputFileName != null && outputFileName.endsWith(".aar")) { | ||
| 37 | + def fileName = "${project.name}-${buildType.name}-v${var.aar_version}.aar" | ||
| 38 | + outputFileName = fileName | ||
| 39 | + } | ||
| 40 | + } | ||
| 41 | + } | ||
| 42 | +} | ||
| 43 | + | ||
| 44 | +dependencies { | ||
| 45 | + implementation 'androidx.appcompat:appcompat:1.2.0' | ||
| 46 | + implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' | ||
| 47 | + implementation 'com.wd:log:1.0.0' | ||
| 48 | + implementation 'com.wd:wdkitcore:1.0.0' | ||
| 49 | +} | ||
| 50 | + | ||
| 51 | +uploadArchives { | ||
| 52 | + repositories { | ||
| 53 | + mavenDeployer { | ||
| 54 | + repository(url: "https://packages.aliyun.com/6708d221eef79c23d7b02189/maven/repo-higom/") { | ||
| 55 | + authentication(userName: '6708d1cf6f4c940bd257c88d', password: 'Wm51gc4rARyr') | ||
| 56 | + } | ||
| 57 | + pom.project { | ||
| 58 | + artifactId 'wdkit' | ||
| 59 | + version '1.0.0' | ||
| 60 | + groupId 'com.wd' | ||
| 61 | + packaging 'aar' | ||
| 62 | + } | ||
| 63 | + } | ||
| 64 | + } | ||
| 65 | +} |
wdkit/consumer-rules.pro
0 → 100644
wdkit/proguard-rules.pro
0 → 100644
| 1 | +# Add project specific ProGuard rules here. | ||
| 2 | +# You can control the set of applied configuration files using the | ||
| 3 | +# proguardFiles setting in build.gradle. | ||
| 4 | +# | ||
| 5 | +# For more details, see | ||
| 6 | +# http://developer.android.com/guide/developing/tools/proguard.html | ||
| 7 | + | ||
| 8 | +# If your project uses WebView with JS, uncomment the following | ||
| 9 | +# and specify the fully qualified class name to the JavaScript interface | ||
| 10 | +# class: | ||
| 11 | +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { | ||
| 12 | +# public *; | ||
| 13 | +#} | ||
| 14 | + | ||
| 15 | +# Uncomment this to preserve the line number information for | ||
| 16 | +# debugging stack traces. | ||
| 17 | +#-keepattributes SourceFile,LineNumberTable | ||
| 18 | + | ||
| 19 | +# If you keep the line number information, uncomment this to | ||
| 20 | +# hide the original source file name. | ||
| 21 | +#-renamesourcefileattribute SourceFile |
wdkit/src/main/AndroidManifest.xml
0 → 100644
| 1 | +/* | ||
| 2 | + * Copyright (c) Wondertek Technologies Co., Ltd. 2019-2021. All rights reserved. | ||
| 3 | + */ | ||
| 4 | + | ||
| 5 | +package com.wd.foundation.wdkit.mvvm; | ||
| 6 | + | ||
| 7 | +import android.os.Handler; | ||
| 8 | +import android.os.Looper; | ||
| 9 | +import android.os.Message; | ||
| 10 | + | ||
| 11 | +import java.lang.ref.WeakReference; | ||
| 12 | + | ||
| 13 | +/** | ||
| 14 | + * Handler包装类<BR> | ||
| 15 | + * | ||
| 16 | + * @author 马文杰 wx4357 | ||
| 17 | + * @version [V1.0.0, 2021/03/16] | ||
| 18 | + * @since V1.0.0 | ||
| 19 | + */ | ||
| 20 | +public abstract class BaseHandler { | ||
| 21 | + private final WeakReferenceHandler mHandler = new WeakReferenceHandler(this); | ||
| 22 | + | ||
| 23 | + /** | ||
| 24 | + * 构造方法 | ||
| 25 | + */ | ||
| 26 | + public BaseHandler() { | ||
| 27 | + } | ||
| 28 | + | ||
| 29 | + /** | ||
| 30 | + * mHandler message | ||
| 31 | + * | ||
| 32 | + * @param msg message | ||
| 33 | + */ | ||
| 34 | + public abstract void handleMessage(Message msg); | ||
| 35 | + | ||
| 36 | + /** | ||
| 37 | + * get Handler | ||
| 38 | + * | ||
| 39 | + * @return WeakReferenceHandler | ||
| 40 | + */ | ||
| 41 | + public Handler getHandler() { | ||
| 42 | + return this.mHandler; | ||
| 43 | + } | ||
| 44 | + | ||
| 45 | + /** | ||
| 46 | + * obtain message | ||
| 47 | + * | ||
| 48 | + * @param what what | ||
| 49 | + * @return message | ||
| 50 | + */ | ||
| 51 | + public Message obtainMessage(int what) { | ||
| 52 | + return this.mHandler.obtainMessage(what); | ||
| 53 | + } | ||
| 54 | + | ||
| 55 | + /** | ||
| 56 | + * obtain message | ||
| 57 | + * | ||
| 58 | + * @param what what | ||
| 59 | + * @param obj obj | ||
| 60 | + * @return message | ||
| 61 | + */ | ||
| 62 | + public Message obtainMessage(int what, Object obj) { | ||
| 63 | + return this.mHandler.obtainMessage(what, obj); | ||
| 64 | + } | ||
| 65 | + | ||
| 66 | + /** | ||
| 67 | + * obtain message | ||
| 68 | + * | ||
| 69 | + * @param what what | ||
| 70 | + * @param arg1 arg1 | ||
| 71 | + * @param arg2 arg1 | ||
| 72 | + * @return message | ||
| 73 | + */ | ||
| 74 | + public Message obtainMessage(int what, int arg1, int arg2) { | ||
| 75 | + return this.mHandler.obtainMessage(what, arg1, arg2); | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | + /** | ||
| 79 | + * obtain message | ||
| 80 | + * | ||
| 81 | + * @param what what | ||
| 82 | + * @param arg1 arg1 | ||
| 83 | + * @param arg2 arg2 | ||
| 84 | + * @param obj obj | ||
| 85 | + * @return message | ||
| 86 | + */ | ||
| 87 | + public Message obtainMessage(int what, int arg1, int arg2, Object obj) { | ||
| 88 | + return this.mHandler.obtainMessage(what, arg1, arg2, obj); | ||
| 89 | + } | ||
| 90 | + | ||
| 91 | + /** | ||
| 92 | + * has message | ||
| 93 | + * | ||
| 94 | + * @param what what | ||
| 95 | + * @return has message or not | ||
| 96 | + */ | ||
| 97 | + public boolean hasMessages(int what) { | ||
| 98 | + return this.mHandler.hasMessages(what); | ||
| 99 | + } | ||
| 100 | + | ||
| 101 | + /** | ||
| 102 | + * remove message | ||
| 103 | + * | ||
| 104 | + * @param what what | ||
| 105 | + */ | ||
| 106 | + public void removeMessages(int what) { | ||
| 107 | + this.mHandler.removeMessages(what); | ||
| 108 | + } | ||
| 109 | + | ||
| 110 | + /** | ||
| 111 | + * Remove any pending posts of callbacks and sent messages whose obj is token. If token is null, all callbacks and | ||
| 112 | + * messages will be removed. | ||
| 113 | + * | ||
| 114 | + * @param token Object | ||
| 115 | + */ | ||
| 116 | + public final void removeCallbacksAndMessages(Object token) { | ||
| 117 | + this.mHandler.removeCallbacksAndMessages(token); | ||
| 118 | + } | ||
| 119 | + | ||
| 120 | + /** | ||
| 121 | + * removeCallbacks | ||
| 122 | + * | ||
| 123 | + * @param r the runable | ||
| 124 | + */ | ||
| 125 | + public final void removeCallbacks(Runnable r) { | ||
| 126 | + this.mHandler.removeCallbacks(r); | ||
| 127 | + } | ||
| 128 | + | ||
| 129 | + /** | ||
| 130 | + * send empty message | ||
| 131 | + * | ||
| 132 | + * @param what what | ||
| 133 | + */ | ||
| 134 | + public void sendEmptyMessage(int what) { | ||
| 135 | + this.mHandler.sendEmptyMessage(what); | ||
| 136 | + } | ||
| 137 | + | ||
| 138 | + /** | ||
| 139 | + * send empty message delayed | ||
| 140 | + * | ||
| 141 | + * @param what what | ||
| 142 | + * @param delayMillis delay | ||
| 143 | + */ | ||
| 144 | + public void sendEmptyMessageDelayed(int what, long delayMillis) { | ||
| 145 | + this.mHandler.sendEmptyMessageDelayed(what, delayMillis); | ||
| 146 | + } | ||
| 147 | + | ||
| 148 | + /** | ||
| 149 | + * send message | ||
| 150 | + * | ||
| 151 | + * @param msg message | ||
| 152 | + */ | ||
| 153 | + public void sendMessage(Message msg) { | ||
| 154 | + this.mHandler.sendMessage(msg); | ||
| 155 | + } | ||
| 156 | + | ||
| 157 | + /** | ||
| 158 | + * send message delayed | ||
| 159 | + * | ||
| 160 | + * @param msg message | ||
| 161 | + * @param delayMillis delay | ||
| 162 | + */ | ||
| 163 | + public void sendMessageDelayed(Message msg, long delayMillis) { | ||
| 164 | + this.mHandler.sendMessageDelayed(msg, delayMillis); | ||
| 165 | + } | ||
| 166 | + | ||
| 167 | + /** | ||
| 168 | + * postDelayed | ||
| 169 | + * | ||
| 170 | + * @param r the Runnable | ||
| 171 | + * @param delayMillis the long | ||
| 172 | + */ | ||
| 173 | + /** | ||
| 174 | + * postDelayed | ||
| 175 | + * | ||
| 176 | + * @param r The Runnable that will be executed. | ||
| 177 | + * @param delayMillis The delay (in milliseconds) until the Runnable will be executed. | ||
| 178 | + * @return Returns true if the Runnable was successfully placed in to the message queue. Returns false on failure, | ||
| 179 | + * usually because the looper processing the message queue is exiting. Note that a result of true does not | ||
| 180 | + * mean the Runnable will be processed -- if the looper is quit before the delivery time of the message | ||
| 181 | + * occurs then the message will be dropped. | ||
| 182 | + */ | ||
| 183 | + public boolean postDelayed(Runnable r, long delayMillis) { | ||
| 184 | + return mHandler.postDelayed(r, delayMillis); | ||
| 185 | + } | ||
| 186 | + | ||
| 187 | + /** | ||
| 188 | + * Causes the Runnable r to be added to the message queue. The runnable will be run on the thread to which this | ||
| 189 | + * mHandler is attached. | ||
| 190 | + * | ||
| 191 | + * @param r The Runnable that will be executed. | ||
| 192 | + * @return Returns true if the Runnable was successfully placed in to the message queue. Returns false on failure, | ||
| 193 | + * usually because the looper processing the message queue is exiting. | ||
| 194 | + */ | ||
| 195 | + public final boolean post(Runnable r) { | ||
| 196 | + return mHandler.postDelayed(r, 0); | ||
| 197 | + } | ||
| 198 | + | ||
| 199 | + /** | ||
| 200 | + * Weak mHandler | ||
| 201 | + */ | ||
| 202 | + private static final class WeakReferenceHandler extends Handler { | ||
| 203 | + private WeakReference<BaseHandler> mOuter; | ||
| 204 | + | ||
| 205 | + private WeakReferenceHandler(BaseHandler callback) { | ||
| 206 | + super(Looper.getMainLooper()); | ||
| 207 | + this.mOuter = new WeakReference(callback); | ||
| 208 | + } | ||
| 209 | + | ||
| 210 | + @Override | ||
| 211 | + public final void handleMessage(Message msg) { | ||
| 212 | + BaseHandler outer = this.mOuter.get(); | ||
| 213 | + if (outer != null) { | ||
| 214 | + outer.handleMessage(msg); | ||
| 215 | + super.handleMessage(msg); | ||
| 216 | + } | ||
| 217 | + } | ||
| 218 | + } | ||
| 219 | +} |
| 1 | +/* | ||
| 2 | + * Copyright (c) Wondertek Technologies Co., Ltd. 2019-2020. All rights reserved. | ||
| 3 | + */ | ||
| 4 | + | ||
| 5 | +package com.wd.foundation.wdkit.mvvm; | ||
| 6 | + | ||
| 7 | +import android.view.KeyEvent; | ||
| 8 | + | ||
| 9 | +import androidx.fragment.app.Fragment; | ||
| 10 | +import androidx.fragment.app.FragmentActivity; | ||
| 11 | +import androidx.lifecycle.ViewModel; | ||
| 12 | +import androidx.lifecycle.ViewModelProviders; | ||
| 13 | + | ||
| 14 | +/** | ||
| 15 | + * MVVM架构中View的基础实现<BR> | ||
| 16 | + * | ||
| 17 | + * @author zoukang | ||
| 18 | + * @version [V1.0.0, 2020/5/23] | ||
| 19 | + * @since V1.0.0 | ||
| 20 | + */ | ||
| 21 | +public class BaseView { | ||
| 22 | + private Fragment mFragment; | ||
| 23 | + | ||
| 24 | + /** | ||
| 25 | + * 构造函数 | ||
| 26 | + * | ||
| 27 | + * @param fragment fragment实例 | ||
| 28 | + */ | ||
| 29 | + public BaseView(Fragment fragment) { | ||
| 30 | + mFragment = fragment; | ||
| 31 | + } | ||
| 32 | + | ||
| 33 | + /** | ||
| 34 | + * onKeyDown回调<BR> | ||
| 35 | + * 需要Activity主动触发,层层传递 | ||
| 36 | + * | ||
| 37 | + * @param keyCode 按键类型 | ||
| 38 | + * @param event 按键事件 | ||
| 39 | + * @return 是否消费事件 | ||
| 40 | + */ | ||
| 41 | + public boolean onKeyDown(int keyCode, KeyEvent event) { | ||
| 42 | + return false; | ||
| 43 | + } | ||
| 44 | + | ||
| 45 | + /** | ||
| 46 | + * onPause生命周期View<BR> | ||
| 47 | + */ | ||
| 48 | + public void onPauseView() { | ||
| 49 | + } | ||
| 50 | + | ||
| 51 | + /** | ||
| 52 | + * onKeyUp 回调<BR> | ||
| 53 | + * 需要Activity主动触发 | ||
| 54 | + * | ||
| 55 | + * @param keyCode 按键类型 | ||
| 56 | + * @param event 按键事件 | ||
| 57 | + * @return 是否消费事件 | ||
| 58 | + */ | ||
| 59 | + public boolean onKeyUp(int keyCode, KeyEvent event) { | ||
| 60 | + return false; | ||
| 61 | + } | ||
| 62 | + | ||
| 63 | + /** | ||
| 64 | + * 获取FragmentActivity实例 | ||
| 65 | + * | ||
| 66 | + * @return FragmentActivity实例 | ||
| 67 | + */ | ||
| 68 | + protected FragmentActivity getActivity() { | ||
| 69 | + return mFragment.getActivity(); | ||
| 70 | + } | ||
| 71 | + | ||
| 72 | + /** | ||
| 73 | + * 获取Fragment实例 | ||
| 74 | + * | ||
| 75 | + * @return Fragment实例 | ||
| 76 | + */ | ||
| 77 | + protected Fragment getFragment() { | ||
| 78 | + return mFragment; | ||
| 79 | + } | ||
| 80 | + | ||
| 81 | + /** | ||
| 82 | + * 获取VM实例 | ||
| 83 | + * | ||
| 84 | + * @param viewModelClazz VM的类型 | ||
| 85 | + * @param <T> VM的泛型定义 | ||
| 86 | + * @return VM实例 | ||
| 87 | + */ | ||
| 88 | + protected <T extends ViewModel> T getViewModel(Class<T> viewModelClazz) { | ||
| 89 | + return ViewModelProviders.of(getActivity()).get(viewModelClazz); | ||
| 90 | + } | ||
| 91 | + | ||
| 92 | +} |
| 1 | +/* | ||
| 2 | + * Copyright (c) Wondertek Technologies Co., Ltd. 2019-2020. All rights reserved. | ||
| 3 | + */ | ||
| 4 | + | ||
| 5 | +package com.wd.foundation.wdkit.mvvm.base; | ||
| 6 | + | ||
| 7 | +import android.os.Bundle; | ||
| 8 | + | ||
| 9 | +import androidx.annotation.LayoutRes; | ||
| 10 | +import androidx.appcompat.app.AppCompatActivity; | ||
| 11 | +import androidx.lifecycle.ViewModel; | ||
| 12 | +import androidx.lifecycle.ViewModelProvider; | ||
| 13 | + | ||
| 14 | +import com.wd.base.log.Logger; | ||
| 15 | + | ||
| 16 | +/** | ||
| 17 | + * MVVM框架Activity基类 | ||
| 18 | + * | ||
| 19 | + * @author huweixiong | ||
| 20 | + * @version [V1.0.0.1, 2020/11/26] | ||
| 21 | + * @since V1.0.0.1 | ||
| 22 | + */ | ||
| 23 | +public abstract class BaseMvvmActivity extends AppCompatActivity { | ||
| 24 | + | ||
| 25 | + @Override | ||
| 26 | + protected void onCreate(Bundle savedInstanceState) { | ||
| 27 | + perCreate(); | ||
| 28 | + super.onCreate(savedInstanceState); | ||
| 29 | + setContentView(getLayoutId()); | ||
| 30 | + initView(); | ||
| 31 | + initData(); | ||
| 32 | + initViewModel(); | ||
| 33 | + afterCreate(); | ||
| 34 | + } | ||
| 35 | + | ||
| 36 | + /** | ||
| 37 | + * 来源onCreate,顺序perCreate initView,initData, initViewModel, afterCreate | ||
| 38 | + */ | ||
| 39 | + protected void perCreate() { | ||
| 40 | + Logger.t(getTag()).i("perCreate onCreate begin ..."); | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | + /** | ||
| 44 | + * 获取Activity布局文件id | ||
| 45 | + * | ||
| 46 | + * @return Activity布局文件id | ||
| 47 | + */ | ||
| 48 | + protected abstract @LayoutRes int getLayoutId(); | ||
| 49 | + | ||
| 50 | + protected abstract String getTag(); | ||
| 51 | + | ||
| 52 | + /** | ||
| 53 | + * 初始化UI控件,来源onCreate,顺序perCreate initView,initData, initViewModel, afterCreate | ||
| 54 | + */ | ||
| 55 | + protected abstract void initView(); | ||
| 56 | + | ||
| 57 | + /** | ||
| 58 | + * 处理页面数据,来源onCreate,顺序perCreate initView,initData, initViewModel, afterCreate | ||
| 59 | + */ | ||
| 60 | + protected abstract void initData(); | ||
| 61 | + | ||
| 62 | + /** | ||
| 63 | + * 处理页面数据,来源onCreate,顺序perCreate initView,initData, initViewModel, afterCreate | ||
| 64 | + */ | ||
| 65 | + protected abstract void initViewModel(); | ||
| 66 | + | ||
| 67 | + /** | ||
| 68 | + * 来源onCreate,顺序perCreate initView,initData, initViewModel, afterCreate | ||
| 69 | + */ | ||
| 70 | + protected void afterCreate() { | ||
| 71 | + Logger.t(getTag()).i("afterCreate onCreate end ..."); | ||
| 72 | + } | ||
| 73 | + | ||
| 74 | + /** | ||
| 75 | + * 获取页面ViewModel | ||
| 76 | + * | ||
| 77 | + * @param viewModelClazz 类class对象 | ||
| 78 | + * @param <T> 目标类对象 | ||
| 79 | + * @return 返回类对象 | ||
| 80 | + */ | ||
| 81 | + protected <T extends ViewModel> T getViewModel(Class<T> viewModelClazz) { | ||
| 82 | + return new ViewModelProvider(this).get(viewModelClazz); | ||
| 83 | + } | ||
| 84 | +} |
| 1 | +/* | ||
| 2 | + * Copyright (c) Wondertek Technologies Co., Ltd. 2019-2020. All rights reserved. | ||
| 3 | + */ | ||
| 4 | + | ||
| 5 | +package com.wd.foundation.wdkit.mvvm.model; | ||
| 6 | + | ||
| 7 | + | ||
| 8 | +import com.wd.base.log.Logger; | ||
| 9 | +import com.wd.foundation.wdkitcore.thread.ThreadPoolUtils; | ||
| 10 | + | ||
| 11 | +/** | ||
| 12 | + * 任务基类 | ||
| 13 | + * | ||
| 14 | + * @author zoukang | ||
| 15 | + * @version [V1.0.0, 2020/5/23] | ||
| 16 | + * @since V1.0.0 | ||
| 17 | + */ | ||
| 18 | +public abstract class BaseTask implements Runnable, IBaseTask { | ||
| 19 | + /** | ||
| 20 | + * 获取任务标志描述 | ||
| 21 | + * | ||
| 22 | + * @return 任务标志描述 | ||
| 23 | + */ | ||
| 24 | + protected abstract String getTaskTag(); | ||
| 25 | + | ||
| 26 | + /** | ||
| 27 | + * 任务是否主动取消<BR> | ||
| 28 | + */ | ||
| 29 | + private volatile boolean bCancel; | ||
| 30 | + | ||
| 31 | + /** | ||
| 32 | + * 具体任务执行操作 | ||
| 33 | + */ | ||
| 34 | + protected abstract void onStart(); | ||
| 35 | + | ||
| 36 | + /** | ||
| 37 | + * 任务取消操作 | ||
| 38 | + */ | ||
| 39 | + protected void onCancel() { | ||
| 40 | + | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | + @Override | ||
| 44 | + public void start() { | ||
| 45 | + Logger.t(getTaskTag()).i( "start task"); | ||
| 46 | + bCancel = false; | ||
| 47 | + onStart(); | ||
| 48 | + } | ||
| 49 | + | ||
| 50 | + @Override | ||
| 51 | + public void cancel() { | ||
| 52 | + Logger.t(getTaskTag()).i( "cancel task"); | ||
| 53 | + bCancel = true; | ||
| 54 | + onCancel(); | ||
| 55 | + } | ||
| 56 | + | ||
| 57 | + /** | ||
| 58 | + * 开始任务<BR> | ||
| 59 | + * 异步执行 | ||
| 60 | + */ | ||
| 61 | + public void startAsync() { | ||
| 62 | + bCancel = false; | ||
| 63 | + ThreadPoolUtils.submit(this); | ||
| 64 | + } | ||
| 65 | + | ||
| 66 | + @Override | ||
| 67 | + public void run() { | ||
| 68 | + Logger.t(getTaskTag()).i( "start task async"); | ||
| 69 | + try { | ||
| 70 | + if (!bCancel) { | ||
| 71 | + onStart(); | ||
| 72 | + } | ||
| 73 | + } catch (Throwable e) { | ||
| 74 | + Logger.t(getTaskTag()).e( "task exception:", e); | ||
| 75 | + } | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | + /** | ||
| 79 | + * 任务是否取消 | ||
| 80 | + */ | ||
| 81 | + public boolean isCancel() { | ||
| 82 | + return bCancel; | ||
| 83 | + } | ||
| 84 | +} |
| 1 | +/* | ||
| 2 | + * Copyright (c) Wondertek Technologies Co., Ltd. 2019-2020. All rights reserved. | ||
| 3 | + */ | ||
| 4 | + | ||
| 5 | +package com.wd.foundation.wdkit.mvvm.model; | ||
| 6 | + | ||
| 7 | +import java.util.ArrayDeque; | ||
| 8 | +import java.util.Queue; | ||
| 9 | + | ||
| 10 | +import com.wd.base.log.Logger; | ||
| 11 | + | ||
| 12 | +/** | ||
| 13 | + * 串行任务链 | ||
| 14 | + * 支持任务从头到尾依次执行,执行完成的任务则从任务链中移除 | ||
| 15 | + * 任务链执行过程中进行cancel,已执行完成的任务忽略【已经被移除】,未执行的任务清空,执行中的任务能打断则打断,打断不了即使回调结果也忽略 | ||
| 16 | + * 任务链本身也是一个任务,可以起线程执行,也可以在当前线程执行;任务链中的子任务根据自己的需要选择执行的线程 | ||
| 17 | + * | ||
| 18 | + * @author zoukang | ||
| 19 | + * @version [V1.0.0, 2020/5/23] | ||
| 20 | + * @since V1.0.0 | ||
| 21 | + */ | ||
| 22 | +public abstract class BaseTaskChain<T> extends BaseTask implements ITaskCallback<T> { | ||
| 23 | + /** | ||
| 24 | + * 等待中的任务队列 | ||
| 25 | + */ | ||
| 26 | + private Queue<BaseTaskWithResult<T>> mWaitingTaskList = new ArrayDeque<>(); | ||
| 27 | + | ||
| 28 | + /** | ||
| 29 | + * 已执行的任务队列【包括执行完成和正在执行的任务】 | ||
| 30 | + */ | ||
| 31 | + private Queue<BaseTaskWithResult<T>> mExecutedTaskList = new ArrayDeque<>(); | ||
| 32 | + | ||
| 33 | + public BaseTaskChain() { | ||
| 34 | + onRegisterChainTask(this); | ||
| 35 | + } | ||
| 36 | + | ||
| 37 | + /** | ||
| 38 | + * 开始注册需要的子任务 | ||
| 39 | + * | ||
| 40 | + * @param taskCallback 子任务回调【子类在创建子任务时,需要将改回调注入到子任务的构造函数中】 | ||
| 41 | + */ | ||
| 42 | + protected abstract void onRegisterChainTask(ITaskCallback<T> taskCallback); | ||
| 43 | + | ||
| 44 | + /** | ||
| 45 | + * 注册子任务 | ||
| 46 | + * | ||
| 47 | + * @param task 子任务 | ||
| 48 | + */ | ||
| 49 | + protected void registerTask(BaseTaskWithResult task) { | ||
| 50 | + boolean result = mWaitingTaskList.offer(task); | ||
| 51 | + Logger.t("BaseTaskChain").d("registerTask offer: " + result); | ||
| 52 | + } | ||
| 53 | + | ||
| 54 | + @Override | ||
| 55 | + protected void onStart() { | ||
| 56 | + startNextTask(); | ||
| 57 | + } | ||
| 58 | + | ||
| 59 | + private void startNextTask() { | ||
| 60 | + if (mWaitingTaskList.isEmpty()) { | ||
| 61 | + Logger.t(getTaskTag()).i("startNextTask, all task is finish."); | ||
| 62 | + onAllTaskFinish(getTaskTag()); | ||
| 63 | + return; | ||
| 64 | + } | ||
| 65 | + | ||
| 66 | + BaseTaskWithResult nextTask = mWaitingTaskList.poll(); | ||
| 67 | + if (null == nextTask) { | ||
| 68 | + Logger.t(getTaskTag()).i("startNextTask, all task is finish."); | ||
| 69 | + onAllTaskFinish(getTaskTag()); | ||
| 70 | + return; | ||
| 71 | + } | ||
| 72 | + | ||
| 73 | + boolean result = mExecutedTaskList.offer(nextTask); | ||
| 74 | + Logger.t(getTaskTag()).i("startNextTask, sub task is " + nextTask.getTaskTag() + ",offer: " + result); | ||
| 75 | + nextTask.start(); | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | + @Override | ||
| 79 | + protected void onCancel() { | ||
| 80 | + super.onCancel(); | ||
| 81 | + Logger.t(getTaskTag()).i("onCancel, cancel all waiting tasks, size is " + mWaitingTaskList.size()); | ||
| 82 | + while (!mWaitingTaskList.isEmpty()) { | ||
| 83 | + BaseTaskWithResult nextTask = mWaitingTaskList.poll(); | ||
| 84 | + if (null == nextTask) { | ||
| 85 | + break; | ||
| 86 | + } | ||
| 87 | + nextTask.cancel(); | ||
| 88 | + } | ||
| 89 | + | ||
| 90 | + Logger.t(getTaskTag()).i("onCancel, cancel all executed tasks, size is " + mExecutedTaskList.size()); | ||
| 91 | + while (!mExecutedTaskList.isEmpty()) { | ||
| 92 | + BaseTaskWithResult nextTask = mExecutedTaskList.poll(); | ||
| 93 | + if (null == nextTask) { | ||
| 94 | + break; | ||
| 95 | + } | ||
| 96 | + nextTask.cancel(); | ||
| 97 | + } | ||
| 98 | + } | ||
| 99 | + | ||
| 100 | + @Override | ||
| 101 | + public void onFinish(String taskTag, T taskContext) { | ||
| 102 | + Logger.t(getTaskTag()).i("onFinish, sub task is " + taskTag); | ||
| 103 | + if (isCancel()) { | ||
| 104 | + Logger.t(getTaskTag()).w("chain task is canceled."); | ||
| 105 | + return; | ||
| 106 | + } | ||
| 107 | + | ||
| 108 | + onSubTaskFinish(taskTag, taskContext); | ||
| 109 | + startNextTask(); | ||
| 110 | + } | ||
| 111 | + | ||
| 112 | + @Override | ||
| 113 | + public void onFailed(String taskTag, String errorCode) { | ||
| 114 | + Logger.t(getTaskTag()).i("onFailed, sub task is " + taskTag + ", errorCode is " + errorCode); | ||
| 115 | + cancel(); | ||
| 116 | + onSubTaskFailed(taskTag, errorCode); | ||
| 117 | + } | ||
| 118 | + | ||
| 119 | + /** | ||
| 120 | + * 子任务执行结束 | ||
| 121 | + * | ||
| 122 | + * @param taskTag 子任务标识 | ||
| 123 | + * @param taskContext 任务的上下文信息 | ||
| 124 | + */ | ||
| 125 | + protected abstract void onSubTaskFinish(String taskTag, T taskContext); | ||
| 126 | + | ||
| 127 | + /** | ||
| 128 | + * 任务执行失败 | ||
| 129 | + * | ||
| 130 | + * @param taskTag 子任务标识 | ||
| 131 | + * @param errorCode 错误码 | ||
| 132 | + */ | ||
| 133 | + protected abstract void onSubTaskFailed(String taskTag, String errorCode); | ||
| 134 | + | ||
| 135 | + /** | ||
| 136 | + * 所有任务执行结束 | ||
| 137 | + * | ||
| 138 | + * @param taskTag 任务链标识 | ||
| 139 | + */ | ||
| 140 | + protected abstract void onAllTaskFinish(String taskTag); | ||
| 141 | + | ||
| 142 | +} |
| 1 | +/* | ||
| 2 | + * Copyright (c) Wondertek Technologies Co., Ltd. 2019-2020. All rights reserved. | ||
| 3 | + */ | ||
| 4 | + | ||
| 5 | +package com.wd.foundation.wdkit.mvvm.model; | ||
| 6 | + | ||
| 7 | +import com.wd.base.log.Logger; | ||
| 8 | + | ||
| 9 | +/** | ||
| 10 | + * 带结果反馈的任务基类<BR> | ||
| 11 | + * 子类在实现onStart方法之后,需要主动触发onFinish方法通知任务结束<BR> | ||
| 12 | + * | ||
| 13 | + * @author zoukang | ||
| 14 | + * @version [V1.0.0, 2020/5/23] | ||
| 15 | + * @since V1.0.0 | ||
| 16 | + */ | ||
| 17 | +public abstract class BaseTaskWithResult<T> extends BaseTask { | ||
| 18 | + private ITaskCallback<T> mTaskCallback; | ||
| 19 | + | ||
| 20 | + public BaseTaskWithResult(ITaskCallback<T> taskCallback) { | ||
| 21 | + this.mTaskCallback = taskCallback; | ||
| 22 | + } | ||
| 23 | + | ||
| 24 | + /** | ||
| 25 | + * 任务结束通知 | ||
| 26 | + * | ||
| 27 | + * @param taskContext 任务上下文信息 | ||
| 28 | + */ | ||
| 29 | + protected void onFinish(T taskContext) { | ||
| 30 | + if (isCancel()) { | ||
| 31 | + Logger.t(getTaskTag()).w("onFinish, but task is canceled."); | ||
| 32 | + return; | ||
| 33 | + } | ||
| 34 | + | ||
| 35 | + if (null == this.mTaskCallback) { | ||
| 36 | + Logger.t(getTaskTag()).w("onFinish and no callback."); | ||
| 37 | + return; | ||
| 38 | + } | ||
| 39 | + | ||
| 40 | + this.mTaskCallback.onFinish(getTaskTag(), taskContext); | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | + /** | ||
| 44 | + * 任务失败通知 | ||
| 45 | + * | ||
| 46 | + * @param errorCode 错误码信息 | ||
| 47 | + */ | ||
| 48 | + protected void onFailed(String errorCode) { | ||
| 49 | + if (isCancel()) { | ||
| 50 | + Logger.t(getTaskTag()).w("onFailed, but task is canceled."); | ||
| 51 | + return; | ||
| 52 | + } | ||
| 53 | + | ||
| 54 | + if (null == this.mTaskCallback) { | ||
| 55 | + Logger.t(getTaskTag()).w("onFailed and no callback."); | ||
| 56 | + return; | ||
| 57 | + } | ||
| 58 | + | ||
| 59 | + this.mTaskCallback.onFailed(getTaskTag(), errorCode); | ||
| 60 | + } | ||
| 61 | +} |
| 1 | +/* | ||
| 2 | + * Copyright (c) Wondertek Technologies Co., Ltd. 2019-2020. All rights reserved. | ||
| 3 | + */ | ||
| 4 | + | ||
| 5 | +package com.wd.foundation.wdkit.mvvm.model; | ||
| 6 | + | ||
| 7 | +import java.util.ArrayList; | ||
| 8 | +import java.util.List; | ||
| 9 | + | ||
| 10 | +import com.wd.base.log.Logger; | ||
| 11 | + | ||
| 12 | +public abstract class ConditionTask<ContextType> { | ||
| 13 | + private static final String TAG = "ConditionTask"; | ||
| 14 | + | ||
| 15 | + private final List<String> taskConditions = new ArrayList(); | ||
| 16 | + | ||
| 17 | + private final ContextType hubContext = this.onInstantiateContext(); | ||
| 18 | + | ||
| 19 | + private final Object lock = new Object(); | ||
| 20 | + | ||
| 21 | + private volatile boolean hasProcessed = false; | ||
| 22 | + | ||
| 23 | + private volatile boolean hasCanceled = false; | ||
| 24 | + | ||
| 25 | + public ConditionTask() { | ||
| 26 | + } | ||
| 27 | + | ||
| 28 | + public void registerCondition(String... conditionNames) { | ||
| 29 | + synchronized (this.lock) { | ||
| 30 | + String[] var3 = conditionNames; | ||
| 31 | + int var4 = conditionNames.length; | ||
| 32 | + | ||
| 33 | + for (int var5 = 0; var5 < var4; ++var5) { | ||
| 34 | + String condition = var3[var5]; | ||
| 35 | + Logger.t("ConditionTask").i("add task condition:" + condition); | ||
| 36 | + this.taskConditions.add(condition); | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | + } | ||
| 40 | + } | ||
| 41 | + | ||
| 42 | + public void cancel() { | ||
| 43 | + synchronized (this.lock) { | ||
| 44 | + this.hasCanceled = true; | ||
| 45 | + } | ||
| 46 | + } | ||
| 47 | + | ||
| 48 | + public void matchCondition(String conditionName) { | ||
| 49 | + synchronized (this.lock) { | ||
| 50 | + this.taskConditions.remove(conditionName); | ||
| 51 | + if (this.taskConditions.isEmpty() && !this.hasProcessed && !this.hasCanceled) { | ||
| 52 | + Logger.t("ConditionTask").i("all condition matched"); | ||
| 53 | + this.onExecute(this.hubContext); | ||
| 54 | + this.hasProcessed = true; | ||
| 55 | + } | ||
| 56 | + | ||
| 57 | + } | ||
| 58 | + } | ||
| 59 | + | ||
| 60 | + public ContextType getHubContext() { | ||
| 61 | + return this.hubContext; | ||
| 62 | + } | ||
| 63 | + | ||
| 64 | + protected abstract ContextType onInstantiateContext(); | ||
| 65 | + | ||
| 66 | + protected abstract void onExecute(ContextType var1); | ||
| 67 | +} |
| 1 | +/* | ||
| 2 | + * Copyright (c) Wondertek Technologies Co., Ltd. 2019-2020. All rights reserved. | ||
| 3 | + */ | ||
| 4 | + | ||
| 5 | +package com.wd.foundation.wdkit.mvvm.model; | ||
| 6 | + | ||
| 7 | +/** | ||
| 8 | + * Model接口的基类<BR> | ||
| 9 | + * | ||
| 10 | + * @author zoukang | ||
| 11 | + * @version [V1.0.0, 2020/5/23] | ||
| 12 | + * @since V1.0.0 | ||
| 13 | + */ | ||
| 14 | +public interface IBaseModel { | ||
| 15 | +} |
| 1 | +/* | ||
| 2 | + * Copyright (c) Wondertek Technologies Co., Ltd. 2019-2020. All rights reserved. | ||
| 3 | + */ | ||
| 4 | + | ||
| 5 | +package com.wd.foundation.wdkit.mvvm.model; | ||
| 6 | + | ||
| 7 | +import com.wd.foundation.wdkit.mvvm.vm.IVMCallback; | ||
| 8 | + | ||
| 9 | +/** | ||
| 10 | + * 任务接口类<BR> | ||
| 11 | + * | ||
| 12 | + * @author zoukang | ||
| 13 | + * @version [V1.0.0, 2020/5/23] | ||
| 14 | + * @since V1.0.0 | ||
| 15 | + */ | ||
| 16 | +public interface IBaseTask extends IVMCallback { | ||
| 17 | + /** | ||
| 18 | + * 开始任务 | ||
| 19 | + */ | ||
| 20 | + void start(); | ||
| 21 | + | ||
| 22 | + /** | ||
| 23 | + * 结束任务 | ||
| 24 | + */ | ||
| 25 | + void cancel(); | ||
| 26 | +} |
| 1 | +/* | ||
| 2 | + * Copyright (c) Wondertek Technologies Co., Ltd. 2019-2020. All rights reserved. | ||
| 3 | + */ | ||
| 4 | + | ||
| 5 | +package com.wd.foundation.wdkit.mvvm.model; | ||
| 6 | + | ||
| 7 | +/** | ||
| 8 | + * 任务回调对象<BR> | ||
| 9 | + * | ||
| 10 | + * @author zoukang | ||
| 11 | + * @version [V1.0.0, 2020/5/23] | ||
| 12 | + * @since V1.0.0 | ||
| 13 | + */ | ||
| 14 | +public interface ITaskCallback<T> { | ||
| 15 | + /** | ||
| 16 | + * 任务执行结束回调 | ||
| 17 | + * | ||
| 18 | + * @param taskTag 任务标签 | ||
| 19 | + * @param taskContext 上下文信息 | ||
| 20 | + */ | ||
| 21 | + void onFinish(String taskTag, T taskContext); | ||
| 22 | + | ||
| 23 | + /** | ||
| 24 | + * 任务执行失败回调 | ||
| 25 | + * | ||
| 26 | + * @param taskTag 任务标签 | ||
| 27 | + * @param errorCode 错误码信息 | ||
| 28 | + */ | ||
| 29 | + void onFailed(String taskTag, String errorCode); | ||
| 30 | +} |
| 1 | +/* | ||
| 2 | + * Copyright (c) Wondertek Technologies Co., Ltd. 2019-2020. All rights reserved. | ||
| 3 | + */ | ||
| 4 | + | ||
| 5 | +package com.wd.foundation.wdkit.mvvm.vm; | ||
| 6 | + | ||
| 7 | +import java.lang.reflect.InvocationHandler; | ||
| 8 | +import java.lang.reflect.Method; | ||
| 9 | +import java.lang.reflect.Proxy; | ||
| 10 | + | ||
| 11 | +import android.os.Looper; | ||
| 12 | + | ||
| 13 | +import androidx.annotation.NonNull; | ||
| 14 | +import androidx.annotation.Nullable; | ||
| 15 | +import androidx.lifecycle.LifecycleOwner; | ||
| 16 | +import androidx.lifecycle.MutableLiveData; | ||
| 17 | +import androidx.lifecycle.Observer; | ||
| 18 | +import androidx.lifecycle.ViewModel; | ||
| 19 | + | ||
| 20 | +import com.wd.foundation.wdkitcore.thread.ThreadPoolUtils; | ||
| 21 | +import com.wd.foundation.wdkitcore.tools.CastUtils; | ||
| 22 | +import com.wd.foundation.wdkitcore.tools.ReflectionUtils; | ||
| 23 | + | ||
| 24 | +/** | ||
| 25 | + * MVVM架构中VM的基础实现<BR> | ||
| 26 | + * | ||
| 27 | + * @author zoukang | ||
| 28 | + * @version [V1.0.0, 2020/5/23] | ||
| 29 | + * @since V1.0.0 | ||
| 30 | + */ | ||
| 31 | +public class BaseViewModel extends ViewModel implements IVMObserverToCallback { | ||
| 32 | + private static final String TAG = "BaseViewModel"; | ||
| 33 | + | ||
| 34 | + @Override | ||
| 35 | + public <T extends IVMCallback> T observe(@NonNull LifecycleOwner owner, @NonNull T callback, | ||
| 36 | + @NonNull Class<T> callbackClazz) { | ||
| 37 | + MutableLiveData<ObserverData> observerData = new MutableLiveData<>(); | ||
| 38 | + Object proxyCallbackObj = Proxy.newProxyInstance(callback.getClass().getClassLoader(), | ||
| 39 | + new Class[] {callbackClazz, IVMProxyCallback.class}, new CallbackInvocationHandler(observerData)); | ||
| 40 | + Observer<ObserverData> observer = new Observer2Callback<>(callback); | ||
| 41 | + observerData.observe(owner, observer); | ||
| 42 | + // 此处不需要保存,CallbackInvocationHandler已经保存了observerData | ||
| 43 | + // if (proxyCallbackObj instanceof IVMProxyCallback) { | ||
| 44 | + // ((IVMProxyCallback) proxyCallbackObj).saveLiveData(observerData); | ||
| 45 | + // } | ||
| 46 | + | ||
| 47 | + if (callback instanceof LiveDataWrapper) { | ||
| 48 | + // 拿到这个LiveData可以进行手动去注册 | ||
| 49 | + ((LiveDataWrapper) callback).save(observerData, observer); | ||
| 50 | + } | ||
| 51 | + return CastUtils.cast(proxyCallbackObj, callbackClazz); | ||
| 52 | + } | ||
| 53 | + | ||
| 54 | + @Override | ||
| 55 | + public <T extends IVMCallback> boolean observeRepeat(@NonNull LifecycleOwner owner, @NonNull T callback, | ||
| 56 | + @NonNull T proxyCallback) { | ||
| 57 | + if (proxyCallback instanceof IVMProxyCallback) { | ||
| 58 | + MutableLiveData<ObserverData> observerData = ((IVMProxyCallback) proxyCallback).getLiveDataAvoidTheSame(); | ||
| 59 | + if (null == observerData) { | ||
| 60 | + return false; | ||
| 61 | + } | ||
| 62 | + | ||
| 63 | + Observer<ObserverData> observer = new Observer2Callback<>(callback); | ||
| 64 | + observerData.observe(owner, observer); | ||
| 65 | + | ||
| 66 | + if (callback instanceof LiveDataWrapper) { | ||
| 67 | + // 拿到这个LiveData可以进行手动去注册 | ||
| 68 | + ((LiveDataWrapper) callback).save(observerData, observer); | ||
| 69 | + } | ||
| 70 | + return true; | ||
| 71 | + } | ||
| 72 | + return false; | ||
| 73 | + } | ||
| 74 | + | ||
| 75 | + /** | ||
| 76 | + * 包装和注册Observer监听<BR> | ||
| 77 | + * | ||
| 78 | + * @param owner LiveData监听需要的生命周期对象 | ||
| 79 | + * @param mutableLiveData LiveData对象 | ||
| 80 | + * @param observer 监听对象 | ||
| 81 | + * @param <T> 回调类型 | ||
| 82 | + */ | ||
| 83 | + protected <T> void observe(LifecycleOwner owner, MutableLiveData<T> mutableLiveData, Observer<T> observer) { | ||
| 84 | + if (observer instanceof LiveDataWrapper) { | ||
| 85 | + // 拿到这个LiveData可以进行手动去注册 | ||
| 86 | + ((LiveDataWrapper) observer).save(mutableLiveData, observer); | ||
| 87 | + } | ||
| 88 | + mutableLiveData.observe(owner, observer); | ||
| 89 | + } | ||
| 90 | + | ||
| 91 | + /** | ||
| 92 | + * 动态代理的Handler类<BR> | ||
| 93 | + * 监听动态代理的方法,转换成LiveData进行回调<BR> | ||
| 94 | + * | ||
| 95 | + * @author zoukang | ||
| 96 | + * @version [V1.0.0, 2020/5/23] | ||
| 97 | + * @since V1.0.0 | ||
| 98 | + */ | ||
| 99 | + private static class CallbackInvocationHandler implements InvocationHandler { | ||
| 100 | + private MutableLiveData<ObserverData> mObserverData; | ||
| 101 | + | ||
| 102 | + CallbackInvocationHandler(MutableLiveData<ObserverData> observerData) { | ||
| 103 | + mObserverData = observerData; | ||
| 104 | + } | ||
| 105 | + | ||
| 106 | + @Override | ||
| 107 | + public Object invoke(Object o, Method method, Object[] objects) throws Throwable { | ||
| 108 | + if (null == mObserverData) { | ||
| 109 | + return null; | ||
| 110 | + } | ||
| 111 | + | ||
| 112 | + if (isGetLiveDataMethod(method)) { | ||
| 113 | + return mObserverData; | ||
| 114 | + } | ||
| 115 | + | ||
| 116 | + ObserverData observerData = new ObserverData(); | ||
| 117 | + observerData.setMethod(method); | ||
| 118 | + observerData.setParams(objects); | ||
| 119 | + | ||
| 120 | + // 非主线程操作才进行线程切换,避免真实回调延时 | ||
| 121 | + if (Looper.myLooper() == Looper.getMainLooper()) { | ||
| 122 | + mObserverData.setValue(observerData); | ||
| 123 | + } else { | ||
| 124 | + ThreadPoolUtils.postToMain(new PostValueRunnable(observerData)); | ||
| 125 | + } | ||
| 126 | + return null; | ||
| 127 | + } | ||
| 128 | + | ||
| 129 | + /** | ||
| 130 | + * 判断是否是预定义的获取LiveData方法<BR> | ||
| 131 | + * 方法名需要确保和下面的方法名保持一致 {@link IVMProxyCallback#getLiveDataAvoidTheSame()} | ||
| 132 | + * | ||
| 133 | + * @param method 输入的方法对象 | ||
| 134 | + * @return true表示是,否则反之 | ||
| 135 | + */ | ||
| 136 | + private boolean isGetLiveDataMethod(Method method) { | ||
| 137 | + if (null == method) { | ||
| 138 | + return false; | ||
| 139 | + } | ||
| 140 | + return "getLiveDataAvoidTheSame".equals(method.getName()); | ||
| 141 | + } | ||
| 142 | + | ||
| 143 | + /** | ||
| 144 | + * ObserverData 数据变化Runable<BR> | ||
| 145 | + * | ||
| 146 | + * @author zoukang | ||
| 147 | + * @version [V1.0.0, 2020/5/23] | ||
| 148 | + * @since V1.0.0 | ||
| 149 | + */ | ||
| 150 | + private class PostValueRunnable implements Runnable { | ||
| 151 | + ObserverData rObserverData; | ||
| 152 | + | ||
| 153 | + PostValueRunnable(ObserverData observerData) { | ||
| 154 | + rObserverData = observerData; | ||
| 155 | + } | ||
| 156 | + | ||
| 157 | + @Override | ||
| 158 | + public void run() { | ||
| 159 | + mObserverData.setValue(rObserverData); | ||
| 160 | + } | ||
| 161 | + } | ||
| 162 | + } | ||
| 163 | + | ||
| 164 | + /** | ||
| 165 | + * Observer回调转换成Callback回调<BR> | ||
| 166 | + * 监听LiveData的回调,将其转换成接口调用的形式回调出去<BR> | ||
| 167 | + * | ||
| 168 | + * @param <T> 回调类型 | ||
| 169 | + * @author zoukang | ||
| 170 | + * @version [V1.0.0, 2020/5/23] | ||
| 171 | + * @since V1.0.0 | ||
| 172 | + */ | ||
| 173 | + private static class Observer2Callback<T> implements Observer<ObserverData> { | ||
| 174 | + private T mCallback; | ||
| 175 | + | ||
| 176 | + Observer2Callback(T callback) { | ||
| 177 | + mCallback = callback; | ||
| 178 | + } | ||
| 179 | + | ||
| 180 | + @Override | ||
| 181 | + public void onChanged(@Nullable ObserverData observerData) { | ||
| 182 | + if (null == observerData) { | ||
| 183 | + return; | ||
| 184 | + } | ||
| 185 | + ReflectionUtils.invoke(observerData.getMethod(), mCallback, observerData.getParams()); | ||
| 186 | + } | ||
| 187 | + } | ||
| 188 | + | ||
| 189 | + /** | ||
| 190 | + * 增强的Observer数据结构<BR> | ||
| 191 | + * | ||
| 192 | + * @author zoukang | ||
| 193 | + * @version [V1.0.0, 2020/5/23] | ||
| 194 | + * @since V1.0.0 | ||
| 195 | + */ | ||
| 196 | + static class ObserverData { | ||
| 197 | + private Method method; | ||
| 198 | + | ||
| 199 | + private Object[] params; | ||
| 200 | + | ||
| 201 | + public Method getMethod() { | ||
| 202 | + return method; | ||
| 203 | + } | ||
| 204 | + | ||
| 205 | + public void setMethod(Method method) { | ||
| 206 | + this.method = method; | ||
| 207 | + } | ||
| 208 | + | ||
| 209 | + public Object[] getParams() { | ||
| 210 | + return params; | ||
| 211 | + } | ||
| 212 | + | ||
| 213 | + public void setParams(Object[] params) { | ||
| 214 | + this.params = params; | ||
| 215 | + } | ||
| 216 | + } | ||
| 217 | + | ||
| 218 | + /** | ||
| 219 | + * VM框架中的代理回调定义<BR> | ||
| 220 | + * | ||
| 221 | + * @author zoukang | ||
| 222 | + * @version [V1.0.0, 2020/5/23] | ||
| 223 | + * @since V1.0.0 | ||
| 224 | + */ | ||
| 225 | + interface IVMProxyCallback { | ||
| 226 | + /** | ||
| 227 | + * 读取LiveData对象<BR> | ||
| 228 | + * 方法名为了避免和外面接口定义重复,故意为之 | ||
| 229 | + * | ||
| 230 | + * @return LiveData对象 | ||
| 231 | + */ | ||
| 232 | + MutableLiveData<ObserverData> getLiveDataAvoidTheSame(); | ||
| 233 | + | ||
| 234 | + // /** | ||
| 235 | + // * 保存LiveData对象 | ||
| 236 | + // * @param liveData LiveData对象 | ||
| 237 | + // */ | ||
| 238 | + // void saveLiveData(MutableLiveData<ObserverData> liveData); | ||
| 239 | + } | ||
| 240 | +} |
| 1 | +/* | ||
| 2 | + * Copyright (c) Wondertek Technologies Co., Ltd. 2019-2020. All rights reserved. | ||
| 3 | + */ | ||
| 4 | + | ||
| 5 | +package com.wd.foundation.wdkit.mvvm.vm; | ||
| 6 | + | ||
| 7 | +/** | ||
| 8 | + * ViewModel框架定义的回调<BR> | ||
| 9 | + * 用于确保混淆时候,不会把callback给混淆<BR> | ||
| 10 | + * | ||
| 11 | + * @author zoukang | ||
| 12 | + * @version [V1.0.0, 2020/5/23] | ||
| 13 | + * @since V1.0.0 | ||
| 14 | + */ | ||
| 15 | +public interface IVMCallback { | ||
| 16 | +} |
| 1 | +/* | ||
| 2 | + * Copyright (c) Wondertek Technologies Co., Ltd. 2019-2020. All rights reserved. | ||
| 3 | + */ | ||
| 4 | + | ||
| 5 | +package com.wd.foundation.wdkit.mvvm.vm; | ||
| 6 | + | ||
| 7 | +import androidx.annotation.NonNull; | ||
| 8 | +import androidx.lifecycle.LifecycleOwner; | ||
| 9 | + | ||
| 10 | +/** | ||
| 11 | + * ViewModel的观察者创建器<BR> | ||
| 12 | + * | ||
| 13 | + * @author zoukang | ||
| 14 | + * @version [V1.0.0, 2020/5/23] | ||
| 15 | + * @since V1.0.0 | ||
| 16 | + */ | ||
| 17 | +public interface IVMObserverToCallback { | ||
| 18 | + | ||
| 19 | + /** | ||
| 20 | + * 包装和注册Callback回调对象<BR> | ||
| 21 | + * 1.对Callback进行动态代理并返回代理对象; 2.原始的Callback对象存储在LiveData的监听回调中,以便于真实地回调。 | ||
| 22 | + * | ||
| 23 | + * @param owner LiveData监听需要的生命周期对象 | ||
| 24 | + * @param callback 真实的回调对象 | ||
| 25 | + * @param callbackClazz 回调对象的类型(无法通过callback进行反射查找) | ||
| 26 | + * @param <T> 回调类型 | ||
| 27 | + * @return 动态代理的回调对象 | ||
| 28 | + */ | ||
| 29 | + <T extends IVMCallback> T observe(@NonNull LifecycleOwner owner, @NonNull T callback, | ||
| 30 | + @NonNull Class<T> callbackClazz); | ||
| 31 | + | ||
| 32 | + /** | ||
| 33 | + * 重复注册Callback回调对象<BR> | ||
| 34 | + * 1.取出ProxyCallback中的LiveData对象; 2.将新的Callback对象保存到LiveData中,以实现重复注册的目的。 | ||
| 35 | + * | ||
| 36 | + * @param owner LiveData监听需要的生命周期对象 | ||
| 37 | + * @param callback 真实的回调对象 | ||
| 38 | + * @param proxyCallback 动态代理的回调对象 | ||
| 39 | + * @param <T> 回调类型 | ||
| 40 | + * @return true表示注册成功,false反之 | ||
| 41 | + */ | ||
| 42 | + <T extends IVMCallback> boolean observeRepeat(@NonNull LifecycleOwner owner, @NonNull T callback, | ||
| 43 | + @NonNull T proxyCallback); | ||
| 44 | +} |
| 1 | +/* | ||
| 2 | + * Copyright (c) Wondertek Technologies Co., Ltd. 2019-2020. All rights reserved. | ||
| 3 | + */ | ||
| 4 | + | ||
| 5 | +package com.wd.foundation.wdkit.mvvm.vm; | ||
| 6 | + | ||
| 7 | +import androidx.lifecycle.MutableLiveData; | ||
| 8 | +import androidx.lifecycle.Observer; | ||
| 9 | + | ||
| 10 | +import com.wd.base.log.Logger; | ||
| 11 | + | ||
| 12 | +/** | ||
| 13 | + * LiveData包装器<BR> | ||
| 14 | + * 里面持有LiveData对象,可用于Observer的释放 | ||
| 15 | + * | ||
| 16 | + * @author zoukang | ||
| 17 | + * @version [V1.0.0, 2020/5/23] | ||
| 18 | + * @since V1.0.0 | ||
| 19 | + */ | ||
| 20 | +public class LiveDataWrapper { | ||
| 21 | + private MutableLiveData mLiveData; | ||
| 22 | + | ||
| 23 | + private Observer mObserver; | ||
| 24 | + | ||
| 25 | + void save(MutableLiveData liveData, Observer observer) { | ||
| 26 | + mLiveData = liveData; | ||
| 27 | + mObserver = observer; | ||
| 28 | + } | ||
| 29 | + | ||
| 30 | + /** | ||
| 31 | + * 释放Observer对象 | ||
| 32 | + */ | ||
| 33 | + public void removeObserver() { | ||
| 34 | + if (null == mLiveData || null == mObserver) { | ||
| 35 | + return; | ||
| 36 | + } | ||
| 37 | + | ||
| 38 | + try { | ||
| 39 | + mLiveData.removeObserver(mObserver); | ||
| 40 | + } catch (ClassCastException e) { | ||
| 41 | + Logger.t("LiveDataWrapper").e("removeObserver failed.", e); | ||
| 42 | + } | ||
| 43 | + } | ||
| 44 | + | ||
| 45 | +} |
| 1 | +/* | ||
| 2 | + * Copyright (c) Wondertek Technologies Co., Ltd. 2019-2020. All rights reserved. | ||
| 3 | + */ | ||
| 4 | + | ||
| 5 | +package com.wd.foundation.wdkit.mvvm.vm; | ||
| 6 | + | ||
| 7 | +import java.util.concurrent.ConcurrentHashMap; | ||
| 8 | + | ||
| 9 | +import androidx.annotation.NonNull; | ||
| 10 | +import androidx.lifecycle.LifecycleOwner; | ||
| 11 | + | ||
| 12 | +import com.wd.foundation.wdkit.mvvm.model.ConditionTask; | ||
| 13 | + | ||
| 14 | +/** | ||
| 15 | + * VM监听器包装类<BR> | ||
| 16 | + * | ||
| 17 | + * @param <T> 监听器实际类型 | ||
| 18 | + * @author zoukang | ||
| 19 | + * @version [V1.0.0, 2020/5/23] | ||
| 20 | + * @since V1.0.0 | ||
| 21 | + */ | ||
| 22 | +public abstract class VMListenerWrapperBase<T extends IVMCallback> { | ||
| 23 | + | ||
| 24 | + private static final String CALLBACK_CONDITION_NAME = "wait_for_register_callback"; | ||
| 25 | + | ||
| 26 | + protected T mVMListener; | ||
| 27 | + | ||
| 28 | + private ConcurrentHashMap<String, ListenerConditionTask> mCachedConditionTasks = new ConcurrentHashMap<>(); | ||
| 29 | + | ||
| 30 | + private IVMObserverToCallback mVMObserverCreator; | ||
| 31 | + | ||
| 32 | + /** | ||
| 33 | + * 构造函数 | ||
| 34 | + * | ||
| 35 | + * @param observerCreator ViewModel的观察者创建器 | ||
| 36 | + */ | ||
| 37 | + public VMListenerWrapperBase(@NonNull IVMObserverToCallback observerCreator) { | ||
| 38 | + mVMObserverCreator = observerCreator; | ||
| 39 | + } | ||
| 40 | + | ||
| 41 | + /** | ||
| 42 | + * 注册用户信息结果监听 | ||
| 43 | + * | ||
| 44 | + * @param lifecycleOwner 生命周期对象 | ||
| 45 | + * @param listener 监听对象 | ||
| 46 | + */ | ||
| 47 | + public void observe(LifecycleOwner lifecycleOwner, T listener) { | ||
| 48 | + if (null == mVMListener) { | ||
| 49 | + mVMListener = mVMObserverCreator.observe(lifecycleOwner, listener, getListenerClazz()); | ||
| 50 | + } else { | ||
| 51 | + mVMObserverCreator.observeRepeat(lifecycleOwner, listener, mVMListener); | ||
| 52 | + } | ||
| 53 | + for (ListenerConditionTask conditionTask : mCachedConditionTasks.values()) { | ||
| 54 | + conditionTask.setListener(mVMListener); | ||
| 55 | + conditionTask.matchCondition(CALLBACK_CONDITION_NAME); | ||
| 56 | + } | ||
| 57 | + } | ||
| 58 | + | ||
| 59 | + /** | ||
| 60 | + * 释放监听任务 | ||
| 61 | + */ | ||
| 62 | + public void release() { | ||
| 63 | + for (ListenerConditionTask conditionTask : mCachedConditionTasks.values()) { | ||
| 64 | + conditionTask.cancel(); | ||
| 65 | + } | ||
| 66 | + mCachedConditionTasks.clear(); | ||
| 67 | + } | ||
| 68 | + | ||
| 69 | + /** | ||
| 70 | + * 添加条件任务 | ||
| 71 | + * | ||
| 72 | + * @param conditionTask 条件任务 | ||
| 73 | + */ | ||
| 74 | + protected void addConditionTask(ListenerConditionTask conditionTask) { | ||
| 75 | + conditionTask.registerCondition(CALLBACK_CONDITION_NAME); | ||
| 76 | + mCachedConditionTasks.put(conditionTask.getType(), conditionTask); | ||
| 77 | + } | ||
| 78 | + | ||
| 79 | + /** | ||
| 80 | + * 获取Listener的类型 | ||
| 81 | + * | ||
| 82 | + * @return Listener的类型 | ||
| 83 | + */ | ||
| 84 | + protected abstract Class<T> getListenerClazz(); | ||
| 85 | + | ||
| 86 | + /** | ||
| 87 | + * 条件回调任务<BR> | ||
| 88 | + * | ||
| 89 | + * @author zoukang | ||
| 90 | + * @version [V1.0.0, 2020/5/23] | ||
| 91 | + * @since V1.0.0 | ||
| 92 | + */ | ||
| 93 | + public abstract class ListenerConditionTask extends ConditionTask<String> { | ||
| 94 | + | ||
| 95 | + T mListener; | ||
| 96 | + | ||
| 97 | + @Override | ||
| 98 | + protected String onInstantiateContext() { | ||
| 99 | + return ""; | ||
| 100 | + } | ||
| 101 | + | ||
| 102 | + @Override | ||
| 103 | + protected void onExecute(String contextType) { | ||
| 104 | + onExecute(mListener); | ||
| 105 | + } | ||
| 106 | + | ||
| 107 | + /** | ||
| 108 | + * 执行 | ||
| 109 | + * | ||
| 110 | + * @param listener 回调 | ||
| 111 | + */ | ||
| 112 | + protected abstract void onExecute(T listener); | ||
| 113 | + | ||
| 114 | + /** | ||
| 115 | + * 获取类型 | ||
| 116 | + * | ||
| 117 | + * @return 类型 | ||
| 118 | + */ | ||
| 119 | + protected abstract String getType(); | ||
| 120 | + | ||
| 121 | + public void setListener(T mListener) { | ||
| 122 | + this.mListener = mListener; | ||
| 123 | + } | ||
| 124 | + } | ||
| 125 | + | ||
| 126 | +} |
| 1 | +/* | ||
| 2 | + * Copyright (c) Wondertek Technologies Co., Ltd. 2019-2020. All rights reserved. | ||
| 3 | + */ | ||
| 4 | + | ||
| 5 | +package com.wd.foundation.wdkit.mvvm.vm.helper; | ||
| 6 | + | ||
| 7 | +/** | ||
| 8 | + * VM层Helper接口基类<BR> | ||
| 9 | + * | ||
| 10 | + * @author zoukang | ||
| 11 | + * @version [V1.0.0, 2020/5/23] | ||
| 12 | + * @since V1.0.0 | ||
| 13 | + */ | ||
| 14 | +public interface IVMHelperBase { | ||
| 15 | +} |
| 1 | +/* | ||
| 2 | + * Copyright (c) Wondertek Technologies Co., Ltd. 2019-2020. All rights reserved. | ||
| 3 | + */ | ||
| 4 | + | ||
| 5 | +package com.wd.foundation.wdkit.mvvm.vm.helper; | ||
| 6 | + | ||
| 7 | +/** | ||
| 8 | + * VM层Helper存储器接口定义<BR> | ||
| 9 | + * | ||
| 10 | + * @author zoukang | ||
| 11 | + * @version [V1.0.0, 2020/5/23] | ||
| 12 | + * @since V1.0.0 | ||
| 13 | + */ | ||
| 14 | +public interface IVMHelperHolder { | ||
| 15 | + | ||
| 16 | + /** | ||
| 17 | + * 添加VM层Helper实例 | ||
| 18 | + * | ||
| 19 | + * @param helperApiClazz VM层Helper Class对象 | ||
| 20 | + * @param playHelper VM层Helper实例 | ||
| 21 | + * @param <T> VM层Helper Class对象类型 | ||
| 22 | + */ | ||
| 23 | + <T extends IVMHelperBase> void register(Class<T> helperApiClazz, T playHelper); | ||
| 24 | + | ||
| 25 | + /** | ||
| 26 | + * 根据VM层Helper的class对象获取对应的播放Helper类 | ||
| 27 | + * | ||
| 28 | + * @param helperApiClazz VM层Helper Class对象 | ||
| 29 | + * @param <T> VM层Helper Class对象类型 | ||
| 30 | + * @return VM层Helper实例 | ||
| 31 | + */ | ||
| 32 | + <T extends IVMHelperBase> T getVMHelper(Class<T> helperApiClazz); | ||
| 33 | +} |
| 1 | +/* | ||
| 2 | + * Copyright (c) Wondertek Technologies Co., Ltd. 2019-2020. All rights reserved. | ||
| 3 | + */ | ||
| 4 | + | ||
| 5 | +package com.wd.foundation.wdkit.mvvm.vm.helper; | ||
| 6 | + | ||
| 7 | +/** | ||
| 8 | + * VM帮助类基类<BR> | ||
| 9 | + * | ||
| 10 | + * @author zoukang | ||
| 11 | + * @version [V1.0.0, 2020/5/23] | ||
| 12 | + * @since V1.0.0 | ||
| 13 | + * @param <T> 回调对象类型 | ||
| 14 | + */ | ||
| 15 | +public class VMHelperBase<T> implements IVMHelperBase { | ||
| 16 | + /** | ||
| 17 | + * VM回调汇总 | ||
| 18 | + */ | ||
| 19 | + protected T mVMListener; | ||
| 20 | + | ||
| 21 | + /** | ||
| 22 | + * VM helper容器 | ||
| 23 | + */ | ||
| 24 | + private VMHelperHolder mVMHelperHolder; | ||
| 25 | + | ||
| 26 | + /** | ||
| 27 | + * 构造函数 | ||
| 28 | + * | ||
| 29 | + * @param listener VM回调汇总 | ||
| 30 | + * @param vmHelperHolder VM Helper存储器 | ||
| 31 | + */ | ||
| 32 | + public VMHelperBase(T listener, VMHelperHolder vmHelperHolder) { | ||
| 33 | + mVMListener = listener; | ||
| 34 | + mVMHelperHolder = vmHelperHolder; | ||
| 35 | + } | ||
| 36 | + | ||
| 37 | + /** | ||
| 38 | + * 获取VM Helper存储器 | ||
| 39 | + * | ||
| 40 | + * @return VM Helper存储器 | ||
| 41 | + */ | ||
| 42 | + protected VMHelperHolder getVMHelperHolder() { | ||
| 43 | + return mVMHelperHolder; | ||
| 44 | + } | ||
| 45 | +} |
| 1 | +/* | ||
| 2 | + * Copyright (c) Wondertek Technologies Co., Ltd. 2019-2020. All rights reserved. | ||
| 3 | + */ | ||
| 4 | + | ||
| 5 | +package com.wd.foundation.wdkit.mvvm.vm.helper; | ||
| 6 | + | ||
| 7 | +import java.util.HashMap; | ||
| 8 | +import java.util.Map; | ||
| 9 | + | ||
| 10 | +import com.wd.foundation.wdkitcore.tools.CastUtils; | ||
| 11 | + | ||
| 12 | +/** | ||
| 13 | + * VM层Helper存储器<BR> | ||
| 14 | + * | ||
| 15 | + * @author zoukang | ||
| 16 | + * @version [V1.0.0, 2020/5/23] | ||
| 17 | + * @since V1.0.0 | ||
| 18 | + */ | ||
| 19 | +public class VMHelperHolder implements IVMHelperHolder { | ||
| 20 | + private Map<Class<? extends IVMHelperBase>, IVMHelperBase> mHelpers = new HashMap<>(); | ||
| 21 | + | ||
| 22 | + @Override | ||
| 23 | + public <T extends IVMHelperBase> void register(Class<T> helperApiClazz, T playHelper) { | ||
| 24 | + if (null == helperApiClazz || null == playHelper) { | ||
| 25 | + return; | ||
| 26 | + } | ||
| 27 | + | ||
| 28 | + mHelpers.put(helperApiClazz, playHelper); | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + @Override | ||
| 32 | + public <T extends IVMHelperBase> T getVMHelper(Class<T> helperApiClazz) { | ||
| 33 | + return CastUtils.cast(mHelpers.get(helperApiClazz), helperApiClazz); | ||
| 34 | + } | ||
| 35 | +} |
wdkit/src/main/res/values/strings.xml
0 → 100644
-
Please register or login to post a comment