Showing
63 changed files
with
3747 additions
and
0 deletions
.gitignore
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 project(path: ':wdstartup') | ||
| 60 | + api(name: "wdstartup-debug-v1.0.0", ext: "aar") | ||
| 61 | +} |
app/libs/wdstartup-debug-v1.0.0.aar
0 → 100644
No preview for this file type
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 | + project.configurations.configureEach { | ||
| 75 | + resolutionStrategy.eachDependency { details -> | ||
| 76 | + if (details.requested.group == 'com.android.android.support' && !details.requested.name.contains('multidex')) { | ||
| 77 | + details.useVersion "28.0.0" | ||
| 78 | + } | ||
| 79 | + | ||
| 80 | + } | ||
| 81 | + } | ||
| 82 | + | ||
| 83 | + // 强制依赖 | ||
| 84 | + configurations.configureEach { | ||
| 85 | + exclude group: 'com.alipay.android.phone.thirdparty', module: 'securityguard-build' | ||
| 86 | + resolutionStrategy { | ||
| 87 | + force 'androidx.activity:activity:1.2.1' | ||
| 88 | + force 'androidx.annotation:annotation:1.1.0' | ||
| 89 | + force 'androidx.appcompat:appcompat:1.2.0' | ||
| 90 | + force 'androidx.arch.core:core-common:2.1.0' | ||
| 91 | + force 'androidx.arch.core:core-runtime:2.1.0' | ||
| 92 | + force 'androidx.core:core-ktx:1.6.0' | ||
| 93 | + force 'androidx.core:core:1.5.0' | ||
| 94 | + force 'androidx.collection:collection:1.1.0' | ||
| 95 | + force 'androidx.constraintlayout:constraintlayout:2.0.4' | ||
| 96 | + force 'androidx.constraintlayout:constraintlayout-solver:2.0.4' | ||
| 97 | + force 'androidx.coordinatorlayout:coordinatorlayout:1.1.0' | ||
| 98 | + force 'androidx.fragment:fragment:1.3.1' | ||
| 99 | + force 'androidx.lifecycle:lifecycle-common:2.3.0' | ||
| 100 | + force 'androidx.multidex:multidex:2.0.1' | ||
| 101 | + force 'androidx.recyclerview:recyclerview:1.2.0' | ||
| 102 | + force 'androidx.vectordrawable:vectordrawable:1.1.0' | ||
| 103 | + force 'androidx.vectordrawable:vectordrawable-animated:1.1.0' | ||
| 104 | + force 'com.squareup.okhttp3:okhttp:4.9.1' | ||
| 105 | + force 'com.squareup.okio:okio:2.7.0' | ||
| 106 | + force 'org.jetbrains.kotlin:kotlin-stdlib:1.4.32' | ||
| 107 | + force 'org.jetbrains.kotlin:kotilin-stdlib-jdk8:1.4.32' | ||
| 108 | + force 'org.jetbrains:annotations:15.0' | ||
| 109 | + force 'net.sf.proguard:proguard-base:6.1.0' | ||
| 110 | + } | ||
| 111 | + } | ||
| 112 | +} | ||
| 113 | + | ||
| 114 | +ext { | ||
| 115 | + var = [ | ||
| 116 | + // SDK And Tools | ||
| 117 | + applicationId : "com.wondertek.dss", | ||
| 118 | + minSdkVersion : 25, | ||
| 119 | + targetSdkVersion : 30, | ||
| 120 | + compileSdkVersion: 30, | ||
| 121 | + buildToolsVersion: "30.0.3", | ||
| 122 | + // 版本号,正式版本 1.0.0 1000080 后两位,80即标识为发布版本 | ||
| 123 | + // 测试版本 1.0.0_TF1 1000001 后两位,01即为测试版本号,01-79 | ||
| 124 | + // 升级版本 1.0.0_RC1 1000081 后两位,81即为升级版本号,81-99 | ||
| 125 | + versionName : "1.0.0", // release正式 | ||
| 126 | + debugVnName : "", // debug开发模式 用于区分debug模式下上报的日志 | ||
| 127 | + versionCode : 100, | ||
| 128 | + //此版本号是SDK版本,不能随便改 | ||
| 129 | + aar_version : "1.0.0", | ||
| 130 | + ] | ||
| 131 | + | ||
| 132 | +} |
| 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
wdstartup/.gitignore
0 → 100644
| 1 | +/build |
wdstartup/README.md
0 → 100644
wdstartup/build.gradle
0 → 100644
| 1 | +plugins { | ||
| 2 | + id 'com.android.library' | ||
| 3 | + id 'kotlin-android' | ||
| 4 | +} | ||
| 5 | + | ||
| 6 | +android { | ||
| 7 | + compileSdkVersion var.compileSdkVersion | ||
| 8 | + | ||
| 9 | + defaultConfig { | ||
| 10 | + minSdkVersion var.minSdkVersion | ||
| 11 | + targetSdkVersion var.targetSdkVersion | ||
| 12 | + versionCode var.versionCode | ||
| 13 | + versionName var.versionName | ||
| 14 | + | ||
| 15 | + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" | ||
| 16 | + consumerProguardFiles "consumer-rules.pro" | ||
| 17 | + | ||
| 18 | + buildConfigField "String", "API_VERSION", "\"${requestVersion}\"" | ||
| 19 | + } | ||
| 20 | + | ||
| 21 | + buildTypes { | ||
| 22 | + release { | ||
| 23 | + minifyEnabled false | ||
| 24 | + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' | ||
| 25 | + } | ||
| 26 | + } | ||
| 27 | + compileOptions { | ||
| 28 | + sourceCompatibility JavaVersion.VERSION_1_8 | ||
| 29 | + targetCompatibility JavaVersion.VERSION_1_8 | ||
| 30 | + } | ||
| 31 | + | ||
| 32 | + // 自定义AAR包名 | ||
| 33 | + android.libraryVariants.all { variant -> | ||
| 34 | + variant.outputs.all { | ||
| 35 | + if (outputFileName != null && outputFileName.endsWith(".aar")) { | ||
| 36 | + def fileName = "${project.name}-${buildType.name}-v${var.aar_version}.aar" | ||
| 37 | + outputFileName = fileName | ||
| 38 | + } | ||
| 39 | + } | ||
| 40 | + } | ||
| 41 | +} | ||
| 42 | + | ||
| 43 | +dependencies { | ||
| 44 | + | ||
| 45 | +} |
wdstartup/consumer-rules.pro
0 → 100644
wdstartup/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 |
wdstartup/src/main/AndroidManifest.xml
0 → 100644
| 1 | + | ||
| 2 | +package com.wd.base.starttask; | ||
| 3 | + | ||
| 4 | +import java.util.concurrent.ExecutorService; | ||
| 5 | +import java.util.concurrent.LinkedBlockingQueue; | ||
| 6 | +import java.util.concurrent.ThreadFactory; | ||
| 7 | +import java.util.concurrent.ThreadPoolExecutor; | ||
| 8 | +import java.util.concurrent.TimeUnit; | ||
| 9 | +import java.util.concurrent.atomic.AtomicInteger; | ||
| 10 | + | ||
| 11 | +import android.content.Context; | ||
| 12 | + | ||
| 13 | +public class AlphaConfig { | ||
| 14 | + private static boolean sIsLoggable = true; | ||
| 15 | + | ||
| 16 | + private static int sCoreThreadNum = Runtime.getRuntime().availableProcessors(); | ||
| 17 | + | ||
| 18 | + private static ThreadFactory sThreadFactory; | ||
| 19 | + | ||
| 20 | + private static ExecutorService sExecutor; | ||
| 21 | + | ||
| 22 | + private static int sWarningTime = 400; | ||
| 23 | + | ||
| 24 | + private static boolean sShowToastToAlarm = false; | ||
| 25 | + | ||
| 26 | + private static Context sContext; | ||
| 27 | + | ||
| 28 | + public AlphaConfig() { | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + public static void setCoreThreadNum(int coreThreadNum) { | ||
| 32 | + sCoreThreadNum = coreThreadNum; | ||
| 33 | + } | ||
| 34 | + | ||
| 35 | + public static void setThreadFactory(ThreadFactory threadFactory) { | ||
| 36 | + sThreadFactory = threadFactory; | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | + public static void setExecutorService(ExecutorService executorService) { | ||
| 40 | + sExecutor = executorService; | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | + public static void setLoggable(boolean isLoggable) { | ||
| 44 | + sIsLoggable = isLoggable; | ||
| 45 | + } | ||
| 46 | + | ||
| 47 | + public static void setWarningTime(int warningTime) { | ||
| 48 | + sWarningTime = warningTime; | ||
| 49 | + } | ||
| 50 | + | ||
| 51 | + public static void setShowToastToAlarm(Context context, boolean showToastToAlarm) { | ||
| 52 | + sContext = context; | ||
| 53 | + sShowToastToAlarm = showToastToAlarm; | ||
| 54 | + } | ||
| 55 | + | ||
| 56 | + static boolean isLoggable() { | ||
| 57 | + return sIsLoggable; | ||
| 58 | + } | ||
| 59 | + | ||
| 60 | + static ThreadFactory getThreadFactory() { | ||
| 61 | + if (sThreadFactory == null) { | ||
| 62 | + sThreadFactory = getDefaultThreadFactory(); | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | + return sThreadFactory; | ||
| 66 | + } | ||
| 67 | + | ||
| 68 | + static ExecutorService getExecutor() { | ||
| 69 | + if (sExecutor == null) { | ||
| 70 | + sExecutor = getDefaultExecutor(); | ||
| 71 | + } | ||
| 72 | + | ||
| 73 | + return sExecutor; | ||
| 74 | + } | ||
| 75 | + | ||
| 76 | + static int getWarmingTime() { | ||
| 77 | + return sWarningTime; | ||
| 78 | + } | ||
| 79 | + | ||
| 80 | + static boolean shouldShowToastToAlarm() { | ||
| 81 | + return sShowToastToAlarm; | ||
| 82 | + } | ||
| 83 | + | ||
| 84 | + static Context getContext() { | ||
| 85 | + return sContext; | ||
| 86 | + } | ||
| 87 | + | ||
| 88 | + private static ThreadFactory getDefaultThreadFactory() { | ||
| 89 | + ThreadFactory defaultFactory = new ThreadFactory() { | ||
| 90 | + private final AtomicInteger mCount = new AtomicInteger(1); | ||
| 91 | + | ||
| 92 | + public Thread newThread(Runnable r) { | ||
| 93 | + return new Thread(r, "Alpha Thread #" + this.mCount.getAndIncrement()); | ||
| 94 | + } | ||
| 95 | + }; | ||
| 96 | + return defaultFactory; | ||
| 97 | + } | ||
| 98 | + | ||
| 99 | + private static ExecutorService getDefaultExecutor() { | ||
| 100 | + ThreadPoolExecutor executor = new ThreadPoolExecutor(sCoreThreadNum, sCoreThreadNum, 60L, TimeUnit.SECONDS, | ||
| 101 | + new LinkedBlockingQueue(), getThreadFactory()); | ||
| 102 | + executor.allowCoreThreadTimeOut(true); | ||
| 103 | + return executor; | ||
| 104 | + } | ||
| 105 | +} |
| 1 | + | ||
| 2 | +package com.wd.base.starttask; | ||
| 3 | + | ||
| 4 | +import android.util.Log; | ||
| 5 | + | ||
| 6 | +public class AlphaLog { | ||
| 7 | + public static final String GLOBAL_TAG = "==ALPHA=="; | ||
| 8 | + | ||
| 9 | + public AlphaLog() { | ||
| 10 | + } | ||
| 11 | + | ||
| 12 | + public static void d(String tag, Object obj) { | ||
| 13 | + if (AlphaConfig.isLoggable()) { | ||
| 14 | + Log.d(tag, obj.toString()); | ||
| 15 | + } | ||
| 16 | + | ||
| 17 | + } | ||
| 18 | + | ||
| 19 | + public static void d(String tag, String msg, Object... args) { | ||
| 20 | + if (AlphaConfig.isLoggable()) { | ||
| 21 | + String formattedMsg = String.format(msg, args); | ||
| 22 | + Log.d(tag, formattedMsg); | ||
| 23 | + } | ||
| 24 | + | ||
| 25 | + } | ||
| 26 | + | ||
| 27 | + public static void d(String msg, Object... args) { | ||
| 28 | + d("==ALPHA==", msg, args); | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + public static void e(String tag, Object obj) { | ||
| 32 | + if (AlphaConfig.isLoggable()) { | ||
| 33 | + Log.e(tag, obj.toString()); | ||
| 34 | + } | ||
| 35 | + | ||
| 36 | + } | ||
| 37 | + | ||
| 38 | + public static void e(String tag, String msg, Object... args) { | ||
| 39 | + if (AlphaConfig.isLoggable()) { | ||
| 40 | + String formattedMsg = String.format(msg, args); | ||
| 41 | + Log.e(tag, formattedMsg); | ||
| 42 | + } | ||
| 43 | + | ||
| 44 | + } | ||
| 45 | + | ||
| 46 | + public static void i(String tag, Object obj) { | ||
| 47 | + if (AlphaConfig.isLoggable()) { | ||
| 48 | + Log.i(tag, obj.toString()); | ||
| 49 | + } | ||
| 50 | + | ||
| 51 | + } | ||
| 52 | + | ||
| 53 | + public static void w(Exception e) { | ||
| 54 | + if (AlphaConfig.isLoggable()) { | ||
| 55 | + e.printStackTrace(); | ||
| 56 | + } | ||
| 57 | + | ||
| 58 | + } | ||
| 59 | + | ||
| 60 | + public static void print(Object msg) { | ||
| 61 | + d("==ALPHA==", msg); | ||
| 62 | + } | ||
| 63 | + | ||
| 64 | + public static void print(String msg, Object... args) { | ||
| 65 | + d("==ALPHA==", msg, args); | ||
| 66 | + } | ||
| 67 | +} |
| 1 | +package com.wd.base.starttask; | ||
| 2 | + | ||
| 3 | + | ||
| 4 | + | ||
| 5 | +import android.content.Context; | ||
| 6 | +import android.text.TextUtils; | ||
| 7 | +import android.util.SparseArray; | ||
| 8 | + | ||
| 9 | + | ||
| 10 | +import java.io.File; | ||
| 11 | +import java.io.FileInputStream; | ||
| 12 | +import java.io.IOException; | ||
| 13 | +import java.io.InputStream; | ||
| 14 | +import java.util.ArrayList; | ||
| 15 | +import java.util.Iterator; | ||
| 16 | +import java.util.List; | ||
| 17 | + | ||
| 18 | +public class AlphaManager { | ||
| 19 | + public static final int MAIN_PROCESS_MODE = 1; | ||
| 20 | + public static final int SECONDARY_PROCESS_MODE = 2; | ||
| 21 | + public static final int ALL_PROCESS_MODE = 3; | ||
| 22 | + private Task mProjectForCurrentProcess; | ||
| 23 | + private SparseArray<Task> mProjectArray = new SparseArray(); | ||
| 24 | + private Context mContext; | ||
| 25 | + private static AlphaManager sInstance = null; | ||
| 26 | + private volatile boolean mIsStartupFinished = false; | ||
| 27 | + private OnProjectExecuteListener mProjectExecuteListener = new AlphaManager.ProjectExecuteListener(); | ||
| 28 | + private static byte[] sExtraTaskListLock = new byte[0]; | ||
| 29 | + private static byte[] sExtraTaskMapLock = new byte[0]; | ||
| 30 | + private List<String> mFinishedTask = new ArrayList(); | ||
| 31 | + private ListMultiMap<String, Task> mExtraTaskMap = new ListMultiMap(); | ||
| 32 | + private List<Task> mExtraTaskList = new ArrayList(); | ||
| 33 | + private static byte[] sWaitFinishLock = new byte[0]; | ||
| 34 | + | ||
| 35 | + private AlphaManager(Context context) { | ||
| 36 | + if (context == null) { | ||
| 37 | + throw new IllegalArgumentException("Context is null. "); | ||
| 38 | + } else { | ||
| 39 | + this.mContext = context; | ||
| 40 | + } | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | + public static synchronized AlphaManager getInstance(Context context) { | ||
| 44 | + if (sInstance == null) { | ||
| 45 | + sInstance = new AlphaManager(context); | ||
| 46 | + } | ||
| 47 | + | ||
| 48 | + return sInstance; | ||
| 49 | + } | ||
| 50 | + | ||
| 51 | + public void start() { | ||
| 52 | + Project project = null; | ||
| 53 | + if (this.mProjectForCurrentProcess != null) { | ||
| 54 | + project = (Project)this.mProjectForCurrentProcess; | ||
| 55 | + } else if (AlphaUtils.isInMainProcess(this.mContext) && this.mProjectArray.indexOfKey(1) >= 0) { | ||
| 56 | + project = (Project)this.mProjectArray.get(1); | ||
| 57 | + } else if (!AlphaUtils.isInMainProcess(this.mContext) && this.mProjectArray.indexOfKey(2) >= 0) { | ||
| 58 | + project = (Project)this.mProjectArray.get(2); | ||
| 59 | + } else if (this.mProjectArray.indexOfKey(3) >= 0) { | ||
| 60 | + project = (Project)this.mProjectArray.get(3); | ||
| 61 | + } | ||
| 62 | + | ||
| 63 | + if (project != null) { | ||
| 64 | + this.addListeners(project); | ||
| 65 | + project.start(); | ||
| 66 | + } else { | ||
| 67 | + AlphaLog.e("==ALPHA==", "No startup project for current process."); | ||
| 68 | + } | ||
| 69 | + | ||
| 70 | + } | ||
| 71 | + | ||
| 72 | + public void addProject(Task project) { | ||
| 73 | + this.addProject(project, 3); | ||
| 74 | + } | ||
| 75 | + | ||
| 76 | + public void addProject(Task project, String processName) { | ||
| 77 | + if (AlphaUtils.isMatchProcess(this.mContext, processName)) { | ||
| 78 | + this.mProjectForCurrentProcess = project; | ||
| 79 | + } | ||
| 80 | + | ||
| 81 | + } | ||
| 82 | + | ||
| 83 | + public void addProject(Task project, int mode) { | ||
| 84 | + if (project == null) { | ||
| 85 | + throw new IllegalArgumentException("project is null"); | ||
| 86 | + } else if (mode >= 1 && mode <= 3) { | ||
| 87 | + if (AlphaUtils.isMatchMode(this.mContext, mode)) { | ||
| 88 | + this.mProjectArray.put(mode, project); | ||
| 89 | + } | ||
| 90 | + | ||
| 91 | + } else { | ||
| 92 | + throw new IllegalArgumentException("No such mode: " + mode); | ||
| 93 | + } | ||
| 94 | + } | ||
| 95 | + | ||
| 96 | + public void addProjectsViaFile(String path) { | ||
| 97 | + File file = new File(path); | ||
| 98 | + this.addProjectsViaFile(file); | ||
| 99 | + } | ||
| 100 | + | ||
| 101 | + public void addProjectsViaFile(File file) { | ||
| 102 | + if (!file.exists()) { | ||
| 103 | + throw new RuntimeException("Alpha config file " + file + " is not exist!"); | ||
| 104 | + } else { | ||
| 105 | + InputStream in = null; | ||
| 106 | + | ||
| 107 | + try { | ||
| 108 | + in = new FileInputStream(file); | ||
| 109 | + this.addProjectsViaFile((InputStream)in); | ||
| 110 | + } catch (IOException var7) { | ||
| 111 | + throw new RuntimeException(var7); | ||
| 112 | + } finally { | ||
| 113 | + AlphaUtils.closeSafely(in); | ||
| 114 | + } | ||
| 115 | + | ||
| 116 | + } | ||
| 117 | + } | ||
| 118 | + | ||
| 119 | + public void addProjectsViaFile(InputStream in) { | ||
| 120 | + ConfigParser parser = new ConfigParser(); | ||
| 121 | + List<ConfigParser.ProjectInfo> projectInfoList = parser.parse(in); | ||
| 122 | + if (projectInfoList == null) { | ||
| 123 | + throw new RuntimeException("Parse alpha config file fail."); | ||
| 124 | + } else { | ||
| 125 | + Iterator var4 = projectInfoList.iterator(); | ||
| 126 | + | ||
| 127 | + while(var4.hasNext()) { | ||
| 128 | + ConfigParser.ProjectInfo projectInfo = (ConfigParser.ProjectInfo)var4.next(); | ||
| 129 | + if (TextUtils.isEmpty(projectInfo.processName)) { | ||
| 130 | + this.addProject(projectInfo.project, projectInfo.mode); | ||
| 131 | + } else { | ||
| 132 | + this.addProject(projectInfo.project, projectInfo.processName); | ||
| 133 | + } | ||
| 134 | + } | ||
| 135 | + | ||
| 136 | + } | ||
| 137 | + } | ||
| 138 | + | ||
| 139 | + public boolean isStartupFinished() { | ||
| 140 | + return this.mIsStartupFinished; | ||
| 141 | + } | ||
| 142 | + | ||
| 143 | + public void executeAfterStartup(Task task) { | ||
| 144 | + this.executeAfterStartup(task, 3); | ||
| 145 | + } | ||
| 146 | + | ||
| 147 | + public void executeAfterStartup(Task task, int mode) { | ||
| 148 | + this.executeAfterStartup(task, mode, 0); | ||
| 149 | + } | ||
| 150 | + | ||
| 151 | + public void executeAfterStartup(Task task, int mode, int executePriority) { | ||
| 152 | + if (AlphaUtils.isMatchMode(this.mContext, mode)) { | ||
| 153 | + if (this.isStartupFinished()) { | ||
| 154 | + task.start(); | ||
| 155 | + } else { | ||
| 156 | + task.setExecutePriority(executePriority); | ||
| 157 | + this.addProjectBindTask(task); | ||
| 158 | + } | ||
| 159 | + | ||
| 160 | + } | ||
| 161 | + } | ||
| 162 | + | ||
| 163 | + public void executeAfterStartup(Task task, String processName, int executePriority) { | ||
| 164 | + if (AlphaUtils.isMatchProcess(this.mContext, processName)) { | ||
| 165 | + if (this.isStartupFinished()) { | ||
| 166 | + task.start(); | ||
| 167 | + } else { | ||
| 168 | + task.setExecutePriority(executePriority); | ||
| 169 | + this.addProjectBindTask(task); | ||
| 170 | + } | ||
| 171 | + | ||
| 172 | + } | ||
| 173 | + } | ||
| 174 | + | ||
| 175 | + public void executeAfterStartup(Task task, String processName) { | ||
| 176 | + this.executeAfterStartup(task, processName, 0); | ||
| 177 | + } | ||
| 178 | + | ||
| 179 | + public void executeAfterTask(Task task, String taskName) { | ||
| 180 | + this.executeAfterTask(task, taskName, 3); | ||
| 181 | + } | ||
| 182 | + | ||
| 183 | + public void executeAfterTask(Task task, String taskName, int mode, int executePriority) { | ||
| 184 | + if (AlphaUtils.isMatchMode(this.mContext, mode)) { | ||
| 185 | + synchronized(sExtraTaskMapLock) { | ||
| 186 | + if (!this.isStartupFinished() && !this.mFinishedTask.contains(taskName)) { | ||
| 187 | + task.setExecutePriority(executePriority); | ||
| 188 | + this.mExtraTaskMap.put(taskName, task); | ||
| 189 | + } else { | ||
| 190 | + task.start(); | ||
| 191 | + } | ||
| 192 | + | ||
| 193 | + } | ||
| 194 | + } | ||
| 195 | + } | ||
| 196 | + | ||
| 197 | + public void executeAfterTask(Task task, String taskName, int mode) { | ||
| 198 | + this.executeAfterTask(task, taskName, mode, 0); | ||
| 199 | + } | ||
| 200 | + | ||
| 201 | + public void executeAfterTask(Task task, String taskName, String processName, int executePriority) { | ||
| 202 | + if (AlphaUtils.isMatchProcess(this.mContext, processName)) { | ||
| 203 | + synchronized(sExtraTaskMapLock) { | ||
| 204 | + if (!this.isStartupFinished() && !this.mFinishedTask.contains(taskName)) { | ||
| 205 | + task.setExecutePriority(executePriority); | ||
| 206 | + this.mExtraTaskMap.put(taskName, task); | ||
| 207 | + } else { | ||
| 208 | + task.start(); | ||
| 209 | + } | ||
| 210 | + | ||
| 211 | + } | ||
| 212 | + } | ||
| 213 | + } | ||
| 214 | + | ||
| 215 | + public void executeAfterTask(Task task, String taskName, String processName) { | ||
| 216 | + this.executeAfterTask(task, taskName, processName, 0); | ||
| 217 | + } | ||
| 218 | + | ||
| 219 | + public void waitUntilFinish() { | ||
| 220 | + synchronized(sWaitFinishLock) { | ||
| 221 | + while(!this.mIsStartupFinished) { | ||
| 222 | + try { | ||
| 223 | + sWaitFinishLock.wait(); | ||
| 224 | + } catch (InterruptedException var4) { | ||
| 225 | + AlphaLog.w(var4); | ||
| 226 | + } | ||
| 227 | + } | ||
| 228 | + | ||
| 229 | + } | ||
| 230 | + } | ||
| 231 | + | ||
| 232 | + public boolean waitUntilFinish(long timeout) { | ||
| 233 | + long start = System.currentTimeMillis(); | ||
| 234 | + long waitTime = 0L; | ||
| 235 | + synchronized(sWaitFinishLock) { | ||
| 236 | + for(; !this.mIsStartupFinished && waitTime < timeout; waitTime = System.currentTimeMillis() - start) { | ||
| 237 | + try { | ||
| 238 | + sWaitFinishLock.wait(timeout); | ||
| 239 | + } catch (InterruptedException var10) { | ||
| 240 | + AlphaLog.w(var10); | ||
| 241 | + } | ||
| 242 | + } | ||
| 243 | + } | ||
| 244 | + | ||
| 245 | + return waitTime > timeout; | ||
| 246 | + } | ||
| 247 | + | ||
| 248 | + private void addListeners(Project project) { | ||
| 249 | + project.addOnTaskFinishListener(new Task.OnTaskFinishListener() { | ||
| 250 | + public void onTaskFinish(String taskName) { | ||
| 251 | + AlphaManager.this.mIsStartupFinished = true; | ||
| 252 | + AlphaManager.this.recycle(); | ||
| 253 | + AlphaManager.this.releaseWaitFinishLock(); | ||
| 254 | + } | ||
| 255 | + }); | ||
| 256 | + project.addOnProjectExecuteListener(this.mProjectExecuteListener); | ||
| 257 | + } | ||
| 258 | + | ||
| 259 | + private void releaseWaitFinishLock() { | ||
| 260 | + synchronized(sWaitFinishLock) { | ||
| 261 | + sWaitFinishLock.notifyAll(); | ||
| 262 | + } | ||
| 263 | + } | ||
| 264 | + | ||
| 265 | + private void recycle() { | ||
| 266 | + this.mProjectForCurrentProcess = null; | ||
| 267 | + this.mProjectArray.clear(); | ||
| 268 | + } | ||
| 269 | + | ||
| 270 | + private void executeTaskBindRunnable(String taskName) { | ||
| 271 | + List<Task> list = this.mExtraTaskMap.get(taskName); | ||
| 272 | + AlphaUtils.sort(list); | ||
| 273 | + Iterator var3 = list.iterator(); | ||
| 274 | + | ||
| 275 | + while(var3.hasNext()) { | ||
| 276 | + Task task = (Task)var3.next(); | ||
| 277 | + task.start(); | ||
| 278 | + } | ||
| 279 | + | ||
| 280 | + this.mExtraTaskMap.remove(taskName); | ||
| 281 | + } | ||
| 282 | + | ||
| 283 | + private void executeProjectBindRunnables() { | ||
| 284 | + AlphaUtils.sort(this.mExtraTaskList); | ||
| 285 | + Iterator var1 = this.mExtraTaskList.iterator(); | ||
| 286 | + | ||
| 287 | + while(var1.hasNext()) { | ||
| 288 | + Task task = (Task)var1.next(); | ||
| 289 | + task.start(); | ||
| 290 | + } | ||
| 291 | + | ||
| 292 | + this.mExtraTaskList.clear(); | ||
| 293 | + } | ||
| 294 | + | ||
| 295 | + private void addProjectBindTask(Task task) { | ||
| 296 | + synchronized(sExtraTaskListLock) { | ||
| 297 | + this.mExtraTaskList.add(task); | ||
| 298 | + } | ||
| 299 | + } | ||
| 300 | + | ||
| 301 | + private class ProjectExecuteListener implements OnProjectExecuteListener { | ||
| 302 | + private ProjectExecuteListener() { | ||
| 303 | + } | ||
| 304 | + | ||
| 305 | + public void onProjectStart() { | ||
| 306 | + } | ||
| 307 | + | ||
| 308 | + public void onTaskFinish(String taskName) { | ||
| 309 | + synchronized(AlphaManager.sExtraTaskMapLock) { | ||
| 310 | + AlphaManager.this.mFinishedTask.add(taskName); | ||
| 311 | + if (AlphaManager.this.mExtraTaskMap.containsKey(taskName)) { | ||
| 312 | + AlphaManager.this.executeTaskBindRunnable(taskName); | ||
| 313 | + } | ||
| 314 | + | ||
| 315 | + } | ||
| 316 | + } | ||
| 317 | + | ||
| 318 | + public void onProjectFinish() { | ||
| 319 | + synchronized(AlphaManager.sExtraTaskListLock) { | ||
| 320 | + if (!AlphaManager.this.mExtraTaskList.isEmpty()) { | ||
| 321 | + AlphaManager.this.executeProjectBindRunnables(); | ||
| 322 | + } | ||
| 323 | + } | ||
| 324 | + | ||
| 325 | + synchronized(AlphaManager.sExtraTaskMapLock) { | ||
| 326 | + AlphaManager.this.mFinishedTask.clear(); | ||
| 327 | + } | ||
| 328 | + } | ||
| 329 | + } | ||
| 330 | +} | ||
| 331 | + |
| 1 | + | ||
| 2 | +package com.wd.base.starttask; | ||
| 3 | + | ||
| 4 | +import java.io.Closeable; | ||
| 5 | +import java.io.FileInputStream; | ||
| 6 | +import java.util.Collections; | ||
| 7 | +import java.util.Comparator; | ||
| 8 | +import java.util.Iterator; | ||
| 9 | +import java.util.List; | ||
| 10 | + | ||
| 11 | +import android.app.ActivityManager; | ||
| 12 | +import android.content.Context; | ||
| 13 | +import android.database.Cursor; | ||
| 14 | +import android.os.Process; | ||
| 15 | +import android.text.TextUtils; | ||
| 16 | + | ||
| 17 | +public class AlphaUtils { | ||
| 18 | + private static Comparator<Task> sTaskComparator = new Comparator<Task>() { | ||
| 19 | + public int compare(Task lhs, Task rhs) { | ||
| 20 | + return lhs.getExecutePriority() - rhs.getExecutePriority(); | ||
| 21 | + } | ||
| 22 | + }; | ||
| 23 | + | ||
| 24 | + private static String sProcessName; | ||
| 25 | + | ||
| 26 | + public AlphaUtils() { | ||
| 27 | + } | ||
| 28 | + | ||
| 29 | + public static void sort(List<Task> tasks) { | ||
| 30 | + if (tasks.size() > 1) { | ||
| 31 | + Collections.sort(tasks, sTaskComparator); | ||
| 32 | + } | ||
| 33 | + } | ||
| 34 | + | ||
| 35 | + public static boolean closeSafely(Closeable closeable) { | ||
| 36 | + if (closeable == null) { | ||
| 37 | + return false; | ||
| 38 | + } else { | ||
| 39 | + boolean ret = false; | ||
| 40 | + | ||
| 41 | + try { | ||
| 42 | + closeable.close(); | ||
| 43 | + ret = true; | ||
| 44 | + } catch (Exception var3) { | ||
| 45 | + AlphaLog.w(var3); | ||
| 46 | + } | ||
| 47 | + | ||
| 48 | + return ret; | ||
| 49 | + } | ||
| 50 | + } | ||
| 51 | + | ||
| 52 | + public static boolean closeSafely(Cursor cursor) { | ||
| 53 | + if (cursor == null) { | ||
| 54 | + return false; | ||
| 55 | + } else { | ||
| 56 | + boolean ret = false; | ||
| 57 | + | ||
| 58 | + try { | ||
| 59 | + cursor.close(); | ||
| 60 | + ret = true; | ||
| 61 | + } catch (Exception var3) { | ||
| 62 | + AlphaLog.w(var3); | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | + return ret; | ||
| 66 | + } | ||
| 67 | + } | ||
| 68 | + | ||
| 69 | + public static String getCurrProcessName(Context context) { | ||
| 70 | + String name = getCurrentProcessNameViaLinuxFile(); | ||
| 71 | + if (TextUtils.isEmpty(name) && context != null) { | ||
| 72 | + name = getCurrentProcessNameViaActivityManager(context); | ||
| 73 | + } | ||
| 74 | + | ||
| 75 | + return name; | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | + public static boolean isInMainProcess(Context context) { | ||
| 79 | + String mainProcessName = context.getPackageName(); | ||
| 80 | + String currentProcessName = getCurrProcessName(context); | ||
| 81 | + return mainProcessName != null && mainProcessName.equalsIgnoreCase(currentProcessName); | ||
| 82 | + } | ||
| 83 | + | ||
| 84 | + private static String getCurrentProcessNameViaLinuxFile() { | ||
| 85 | + int pid = Process.myPid(); | ||
| 86 | + String line = "/proc/" + pid + "/cmdline"; | ||
| 87 | + FileInputStream fis = null; | ||
| 88 | + String processName = null; | ||
| 89 | + byte[] bytes = new byte[1024]; | ||
| 90 | + int read = 0; | ||
| 91 | + | ||
| 92 | + try { | ||
| 93 | + fis = new FileInputStream(line); | ||
| 94 | + read = fis.read(bytes); | ||
| 95 | + } catch (Exception var10) { | ||
| 96 | + AlphaLog.w(var10); | ||
| 97 | + } finally { | ||
| 98 | + closeSafely((Closeable) fis); | ||
| 99 | + } | ||
| 100 | + | ||
| 101 | + if (read > 0) { | ||
| 102 | + processName = new String(bytes, 0, read); | ||
| 103 | + processName = processName.trim(); | ||
| 104 | + } | ||
| 105 | + | ||
| 106 | + return processName; | ||
| 107 | + } | ||
| 108 | + | ||
| 109 | + private static String getCurrentProcessNameViaActivityManager(Context context) { | ||
| 110 | + if (context == null) { | ||
| 111 | + return null; | ||
| 112 | + } else if (sProcessName != null) { | ||
| 113 | + return sProcessName; | ||
| 114 | + } else { | ||
| 115 | + int pid = Process.myPid(); | ||
| 116 | + ActivityManager mActivityManager = (ActivityManager) context.getSystemService("activity"); | ||
| 117 | + if (mActivityManager == null) { | ||
| 118 | + return null; | ||
| 119 | + } else { | ||
| 120 | + List<ActivityManager.RunningAppProcessInfo> processes = mActivityManager.getRunningAppProcesses(); | ||
| 121 | + if (processes == null) { | ||
| 122 | + return null; | ||
| 123 | + } else { | ||
| 124 | + Iterator var4 = processes.iterator(); | ||
| 125 | + | ||
| 126 | + while (var4.hasNext()) { | ||
| 127 | + ActivityManager.RunningAppProcessInfo appProcess = | ||
| 128 | + (ActivityManager.RunningAppProcessInfo) var4.next(); | ||
| 129 | + if (appProcess != null && appProcess.pid == pid) { | ||
| 130 | + sProcessName = appProcess.processName; | ||
| 131 | + break; | ||
| 132 | + } | ||
| 133 | + } | ||
| 134 | + | ||
| 135 | + return sProcessName; | ||
| 136 | + } | ||
| 137 | + } | ||
| 138 | + } | ||
| 139 | + } | ||
| 140 | + | ||
| 141 | + public static boolean isMatchProcess(Context context, String processName) { | ||
| 142 | + String currentProcessName = getCurrProcessName(context); | ||
| 143 | + return TextUtils.equals(processName, currentProcessName); | ||
| 144 | + } | ||
| 145 | + | ||
| 146 | + public static boolean isMatchMode(Context context, int mode) { | ||
| 147 | + if (mode == 3) { | ||
| 148 | + return true; | ||
| 149 | + } else if (isInMainProcess(context) && mode == 1) { | ||
| 150 | + return true; | ||
| 151 | + } else { | ||
| 152 | + return !isInMainProcess(context) && mode == 2; | ||
| 153 | + } | ||
| 154 | + } | ||
| 155 | +} |
| 1 | + | ||
| 2 | +package com.wd.base.starttask; | ||
| 3 | + | ||
| 4 | +import java.io.FileNotFoundException; | ||
| 5 | +import java.io.IOException; | ||
| 6 | +import java.io.InputStream; | ||
| 7 | +import java.util.ArrayList; | ||
| 8 | +import java.util.Arrays; | ||
| 9 | +import java.util.HashMap; | ||
| 10 | +import java.util.Iterator; | ||
| 11 | +import java.util.List; | ||
| 12 | + | ||
| 13 | +import org.xmlpull.v1.XmlPullParser; | ||
| 14 | +import org.xmlpull.v1.XmlPullParserException; | ||
| 15 | + | ||
| 16 | +import android.text.TextUtils; | ||
| 17 | +import android.util.Xml; | ||
| 18 | + | ||
| 19 | +class ConfigParser { | ||
| 20 | + private static final String TAG_PROJECTS = "projects"; | ||
| 21 | + | ||
| 22 | + private static final String TAG_PROJECT = "project"; | ||
| 23 | + | ||
| 24 | + private static final String TAG_TASK = "task"; | ||
| 25 | + | ||
| 26 | + private static final String ATTRIBUTE_TASK_NAME = "name"; | ||
| 27 | + | ||
| 28 | + private static final String ATTRIBUTE_TASK_CLASS = "class"; | ||
| 29 | + | ||
| 30 | + private static final String ATTRIBUTE_TASK_PREDECESSOR = "predecessor"; | ||
| 31 | + | ||
| 32 | + private static final String ATTRIBUTE_PROJECT_MODE = "mode"; | ||
| 33 | + | ||
| 34 | + private static final String ATTRIBUTE_PROCESS_NAME = "process"; | ||
| 35 | + | ||
| 36 | + private static final String ATTRIBUTE_THREAD_PRIORITY = "threadPriority"; | ||
| 37 | + | ||
| 38 | + private static final String ATTRIBUTE_EXECUTE_PRIORITY = "executePriority"; | ||
| 39 | + | ||
| 40 | + private static final String MODE_ALL_PROCESS = "allProcess"; | ||
| 41 | + | ||
| 42 | + private static final String MODE_MAIN_PROCESS = "mainProcess"; | ||
| 43 | + | ||
| 44 | + private static final String MODE_SECONDARY_PROCESS = "secondaryProcess"; | ||
| 45 | + | ||
| 46 | + private static final String PREDECESSOR_DIVIDER = ","; | ||
| 47 | + | ||
| 48 | + ConfigParser() { | ||
| 49 | + } | ||
| 50 | + | ||
| 51 | + public List<ConfigParser.ProjectInfo> parse(InputStream in) { | ||
| 52 | + try { | ||
| 53 | + XmlPullParser parser = Xml.newPullParser(); | ||
| 54 | + parser.setFeature("http://xmlpull.org/v1/doc/features.html#process-namespaces", false); | ||
| 55 | + parser.setInput(in, (String) null); | ||
| 56 | + parser.nextTag(); | ||
| 57 | + List<ConfigParser.TaskBundle> taskBundles = this.readProjects(parser); | ||
| 58 | + List<ConfigParser.ProjectInfo> result = new ArrayList(); | ||
| 59 | + Iterator var5 = taskBundles.iterator(); | ||
| 60 | + | ||
| 61 | + while (var5.hasNext()) { | ||
| 62 | + ConfigParser.TaskBundle info = (ConfigParser.TaskBundle) var5.next(); | ||
| 63 | + ConfigParser.ProjectInfo projectInfo = this.createProject(info); | ||
| 64 | + result.add(projectInfo); | ||
| 65 | + } | ||
| 66 | + | ||
| 67 | + return result; | ||
| 68 | + } catch (FileNotFoundException var8) { | ||
| 69 | + AlphaLog.w(var8); | ||
| 70 | + } catch (XmlPullParserException var9) { | ||
| 71 | + AlphaLog.w(var9); | ||
| 72 | + } catch (IOException var10) { | ||
| 73 | + AlphaLog.w(var10); | ||
| 74 | + } | ||
| 75 | + | ||
| 76 | + return null; | ||
| 77 | + } | ||
| 78 | + | ||
| 79 | + private List<ConfigParser.TaskBundle> readProjects(XmlPullParser parser) | ||
| 80 | + throws XmlPullParserException, IOException { | ||
| 81 | + List<ConfigParser.TaskBundle> projects = new ArrayList(); | ||
| 82 | + parser.require(2, (String) null, "projects"); | ||
| 83 | + | ||
| 84 | + while (parser.next() != 3) { | ||
| 85 | + if (parser.getEventType() == 2) { | ||
| 86 | + String name = parser.getName(); | ||
| 87 | + if ("project".equals(name)) { | ||
| 88 | + projects.add(this.readProject(parser)); | ||
| 89 | + } else { | ||
| 90 | + this.skip(parser); | ||
| 91 | + } | ||
| 92 | + } | ||
| 93 | + } | ||
| 94 | + | ||
| 95 | + return projects; | ||
| 96 | + } | ||
| 97 | + | ||
| 98 | + private ConfigParser.TaskBundle readProject(XmlPullParser parser) throws IOException, XmlPullParserException { | ||
| 99 | + parser.require(2, (String) null, "project"); | ||
| 100 | + List<ConfigParser.TaskInfo> taskList = new ArrayList(); | ||
| 101 | + int mode = this.readMode(parser); | ||
| 102 | + String processName = parser.getAttributeValue((String) null, "process"); | ||
| 103 | + | ||
| 104 | + while (parser.next() != 3) { | ||
| 105 | + if (parser.getEventType() == 2) { | ||
| 106 | + String name = parser.getName(); | ||
| 107 | + if ("task".equals(name)) { | ||
| 108 | + taskList.add(this.readTask(parser)); | ||
| 109 | + } else { | ||
| 110 | + this.skip(parser); | ||
| 111 | + } | ||
| 112 | + } | ||
| 113 | + } | ||
| 114 | + | ||
| 115 | + ConfigParser.TaskBundle project = new ConfigParser.TaskBundle(mode, processName, taskList); | ||
| 116 | + return project; | ||
| 117 | + } | ||
| 118 | + | ||
| 119 | + private ConfigParser.TaskInfo readTask(XmlPullParser parser) throws IOException, XmlPullParserException { | ||
| 120 | + parser.require(2, (String) null, "task"); | ||
| 121 | + String name = parser.getAttributeValue((String) null, "name"); | ||
| 122 | + String path = parser.getAttributeValue((String) null, "class"); | ||
| 123 | + String predecessors = parser.getAttributeValue((String) null, "predecessor"); | ||
| 124 | + String threadPriorityStr = parser.getAttributeValue((String) null, "threadPriority"); | ||
| 125 | + String executePriorityStr = parser.getAttributeValue((String) null, "executePriority"); | ||
| 126 | + if (TextUtils.isEmpty(name)) { | ||
| 127 | + throw new RuntimeException("Task name is not set."); | ||
| 128 | + } else if (TextUtils.isEmpty(path)) { | ||
| 129 | + throw new RuntimeException("The path of task : " + name + " is not set."); | ||
| 130 | + } else { | ||
| 131 | + ConfigParser.TaskInfo info = new ConfigParser.TaskInfo(name, path); | ||
| 132 | + if (!TextUtils.isEmpty(predecessors)) { | ||
| 133 | + List<String> predecessorList = this.parsePredecessorId(predecessors); | ||
| 134 | + info.addPredecessors(predecessorList); | ||
| 135 | + } | ||
| 136 | + | ||
| 137 | + if (!TextUtils.isEmpty(threadPriorityStr)) { | ||
| 138 | + info.threadPriority = Integer.parseInt(threadPriorityStr); | ||
| 139 | + } | ||
| 140 | + | ||
| 141 | + if (!TextUtils.isEmpty(executePriorityStr)) { | ||
| 142 | + info.executePriority = Integer.parseInt(executePriorityStr); | ||
| 143 | + } | ||
| 144 | + | ||
| 145 | + parser.nextTag(); | ||
| 146 | + parser.require(3, (String) null, "task"); | ||
| 147 | + return info; | ||
| 148 | + } | ||
| 149 | + } | ||
| 150 | + | ||
| 151 | + private List<String> parsePredecessorId(String predecessorIds) { | ||
| 152 | + if (TextUtils.isEmpty(predecessorIds)) { | ||
| 153 | + return null; | ||
| 154 | + } else { | ||
| 155 | + predecessorIds = predecessorIds.replace(" ", ""); | ||
| 156 | + String[] predecessorArray = TextUtils.split(predecessorIds, ","); | ||
| 157 | + return Arrays.asList(predecessorArray); | ||
| 158 | + } | ||
| 159 | + } | ||
| 160 | + | ||
| 161 | + private int readMode(XmlPullParser parser) { | ||
| 162 | + String modeStr = parser.getAttributeValue((String) null, "mode"); | ||
| 163 | + if ("allProcess".equals(modeStr)) { | ||
| 164 | + return 3; | ||
| 165 | + } else if ("mainProcess".equals(modeStr)) { | ||
| 166 | + return 1; | ||
| 167 | + } else { | ||
| 168 | + return "secondaryProcess".equals(modeStr) ? 2 : 3; | ||
| 169 | + } | ||
| 170 | + } | ||
| 171 | + | ||
| 172 | + private void skip(XmlPullParser parser) throws XmlPullParserException, IOException { | ||
| 173 | + if (parser.getEventType() != 2) { | ||
| 174 | + throw new IllegalStateException(); | ||
| 175 | + } else { | ||
| 176 | + int depth = 1; | ||
| 177 | + | ||
| 178 | + while (depth != 0) { | ||
| 179 | + switch (parser.next()) { | ||
| 180 | + case 2: | ||
| 181 | + ++depth; | ||
| 182 | + break; | ||
| 183 | + case 3: | ||
| 184 | + --depth; | ||
| 185 | + } | ||
| 186 | + } | ||
| 187 | + | ||
| 188 | + } | ||
| 189 | + } | ||
| 190 | + | ||
| 191 | + private ConfigParser.ProjectInfo createProject(ConfigParser.TaskBundle info) { | ||
| 192 | + List<ConfigParser.TaskInfo> taskInfos = info.taskList; | ||
| 193 | + HashMap<String, Task> taskMap = new HashMap(); | ||
| 194 | + Iterator var4 = taskInfos.iterator(); | ||
| 195 | + | ||
| 196 | + while (var4.hasNext()) { | ||
| 197 | + ConfigParser.TaskInfo taskInfo = (ConfigParser.TaskInfo) var4.next(); | ||
| 198 | + Task task = null; | ||
| 199 | + | ||
| 200 | + try { | ||
| 201 | + Class<?> c = Class.forName(taskInfo.path); | ||
| 202 | + task = (Task) c.newInstance(); | ||
| 203 | + task.setName(taskInfo.id); | ||
| 204 | + if (taskInfo.threadPriority != 0) { | ||
| 205 | + task.setThreadPriority(taskInfo.threadPriority); | ||
| 206 | + } | ||
| 207 | + | ||
| 208 | + if (taskInfo.executePriority != 0) { | ||
| 209 | + task.setExecutePriority(taskInfo.executePriority); | ||
| 210 | + } | ||
| 211 | + } catch (ClassNotFoundException var12) { | ||
| 212 | + AlphaLog.w(var12); | ||
| 213 | + } catch (InstantiationException var13) { | ||
| 214 | + AlphaLog.w(var13); | ||
| 215 | + } catch (IllegalAccessException var14) { | ||
| 216 | + AlphaLog.w(var14); | ||
| 217 | + } | ||
| 218 | + | ||
| 219 | + if (task == null) { | ||
| 220 | + throw new RuntimeException("Can not reflect Task: " + taskInfo.path); | ||
| 221 | + } | ||
| 222 | + | ||
| 223 | + taskMap.put(taskInfo.id, task); | ||
| 224 | + } | ||
| 225 | + | ||
| 226 | + Project.Builder builder = new Project.Builder(); | ||
| 227 | + Iterator var16 = taskInfos.iterator(); | ||
| 228 | + | ||
| 229 | + while (true) { | ||
| 230 | + List predecessorList; | ||
| 231 | + do { | ||
| 232 | + if (!var16.hasNext()) { | ||
| 233 | + ConfigParser.ProjectInfo result = | ||
| 234 | + new ConfigParser.ProjectInfo(builder.create(), info.mode, info.processName); | ||
| 235 | + return result; | ||
| 236 | + } | ||
| 237 | + | ||
| 238 | + ConfigParser.TaskInfo taskInfo = (ConfigParser.TaskInfo) var16.next(); | ||
| 239 | + Task task = (Task) taskMap.get(taskInfo.id); | ||
| 240 | + builder.add(task); | ||
| 241 | + predecessorList = taskInfo.predecessorList; | ||
| 242 | + } while (predecessorList.isEmpty()); | ||
| 243 | + | ||
| 244 | + Iterator var9 = predecessorList.iterator(); | ||
| 245 | + | ||
| 246 | + while (var9.hasNext()) { | ||
| 247 | + String predecessorName = (String) var9.next(); | ||
| 248 | + Task t = (Task) taskMap.get(predecessorName); | ||
| 249 | + if (t == null) { | ||
| 250 | + throw new RuntimeException("No such task: " + predecessorName); | ||
| 251 | + } | ||
| 252 | + | ||
| 253 | + builder.after(t); | ||
| 254 | + } | ||
| 255 | + } | ||
| 256 | + } | ||
| 257 | + | ||
| 258 | + public static class ProjectInfo { | ||
| 259 | + public Task project; | ||
| 260 | + | ||
| 261 | + public int mode = 3; | ||
| 262 | + | ||
| 263 | + public String processName; | ||
| 264 | + | ||
| 265 | + public ProjectInfo(Task project, int mode, String processName) { | ||
| 266 | + this.project = project; | ||
| 267 | + this.mode = mode; | ||
| 268 | + this.processName = processName; | ||
| 269 | + } | ||
| 270 | + } | ||
| 271 | + | ||
| 272 | + private static class TaskInfo { | ||
| 273 | + public String id; | ||
| 274 | + | ||
| 275 | + public String path; | ||
| 276 | + | ||
| 277 | + public List<String> predecessorList = new ArrayList(); | ||
| 278 | + | ||
| 279 | + public int threadPriority = 0; | ||
| 280 | + | ||
| 281 | + public int executePriority = 0; | ||
| 282 | + | ||
| 283 | + public TaskInfo(String id, String path) { | ||
| 284 | + this.id = id; | ||
| 285 | + this.path = path; | ||
| 286 | + } | ||
| 287 | + | ||
| 288 | + public void addPredecessors(List<String> predecessors) { | ||
| 289 | + this.predecessorList.addAll(predecessors); | ||
| 290 | + } | ||
| 291 | + | ||
| 292 | + public boolean isFirst() { | ||
| 293 | + return this.predecessorList.isEmpty(); | ||
| 294 | + } | ||
| 295 | + | ||
| 296 | + public String toString() { | ||
| 297 | + StringBuilder builder = new StringBuilder(); | ||
| 298 | + builder.append("TaskInfo ").append("id: ").append(this.id); | ||
| 299 | + return builder.toString(); | ||
| 300 | + } | ||
| 301 | + } | ||
| 302 | + | ||
| 303 | + private static class TaskBundle { | ||
| 304 | + public List<ConfigParser.TaskInfo> taskList = new ArrayList(); | ||
| 305 | + | ||
| 306 | + public int mode = 3; | ||
| 307 | + | ||
| 308 | + public String processName = ""; | ||
| 309 | + | ||
| 310 | + public TaskBundle(int mode, String processName, List<ConfigParser.TaskInfo> tasks) { | ||
| 311 | + this.mode = mode; | ||
| 312 | + this.processName = processName; | ||
| 313 | + this.taskList = tasks; | ||
| 314 | + } | ||
| 315 | + } | ||
| 316 | +} |
| 1 | + | ||
| 2 | +package com.wd.base.starttask; | ||
| 3 | + | ||
| 4 | +import java.util.HashMap; | ||
| 5 | +import java.util.Map; | ||
| 6 | + | ||
| 7 | +import android.os.Handler; | ||
| 8 | +import android.os.Looper; | ||
| 9 | +import android.widget.Toast; | ||
| 10 | + | ||
| 11 | +class ExecuteMonitor { | ||
| 12 | + private Map<String, Long> mExecuteTimeMap = new HashMap(); | ||
| 13 | + | ||
| 14 | + private long mStartTime; | ||
| 15 | + | ||
| 16 | + private long mProjectCostTime; | ||
| 17 | + | ||
| 18 | + private Handler mHandler; | ||
| 19 | + | ||
| 20 | + ExecuteMonitor() { | ||
| 21 | + } | ||
| 22 | + | ||
| 23 | + public synchronized void record(String taskName, long executeTime) { | ||
| 24 | + AlphaLog.d("==ALPHA==", "AlphaTask-->Startup task %s cost time: %s ms, in thread: %s", | ||
| 25 | + new Object[] {taskName, executeTime, Thread.currentThread().getName()}); | ||
| 26 | + if (executeTime >= (long) AlphaConfig.getWarmingTime()) { | ||
| 27 | + this.toastToWarn("AlphaTask %s run too long, cost time: %s", taskName, executeTime); | ||
| 28 | + } | ||
| 29 | + | ||
| 30 | + this.mExecuteTimeMap.put(taskName, executeTime); | ||
| 31 | + } | ||
| 32 | + | ||
| 33 | + public synchronized Map<String, Long> getExecuteTimeMap() { | ||
| 34 | + return this.mExecuteTimeMap; | ||
| 35 | + } | ||
| 36 | + | ||
| 37 | + public void recordProjectStart() { | ||
| 38 | + this.mStartTime = System.currentTimeMillis(); | ||
| 39 | + } | ||
| 40 | + | ||
| 41 | + public void recordProjectFinish() { | ||
| 42 | + this.mProjectCostTime = System.currentTimeMillis() - this.mStartTime; | ||
| 43 | + AlphaLog.d("==ALPHA==", "tm start up cost time: %s ms", new Object[] {this.mProjectCostTime}); | ||
| 44 | + } | ||
| 45 | + | ||
| 46 | + public long getProjectCostTime() { | ||
| 47 | + return this.mProjectCostTime; | ||
| 48 | + } | ||
| 49 | + | ||
| 50 | + private void toastToWarn(final String msg, final Object... args) { | ||
| 51 | + if (AlphaConfig.shouldShowToastToAlarm()) { | ||
| 52 | + this.getHandler().post(new Runnable() { | ||
| 53 | + public void run() { | ||
| 54 | + String formattedMsg; | ||
| 55 | + if (args == null) { | ||
| 56 | + formattedMsg = msg; | ||
| 57 | + } else { | ||
| 58 | + formattedMsg = String.format(msg, args); | ||
| 59 | + } | ||
| 60 | + | ||
| 61 | + Toast.makeText(AlphaConfig.getContext(), formattedMsg, Toast.LENGTH_SHORT).show(); | ||
| 62 | + } | ||
| 63 | + }); | ||
| 64 | + } | ||
| 65 | + | ||
| 66 | + } | ||
| 67 | + | ||
| 68 | + private Handler getHandler() { | ||
| 69 | + if (this.mHandler == null) { | ||
| 70 | + this.mHandler = new Handler(Looper.getMainLooper()); | ||
| 71 | + } | ||
| 72 | + | ||
| 73 | + return this.mHandler; | ||
| 74 | + } | ||
| 75 | +} |
| 1 | + | ||
| 2 | +package com.wd.base.starttask; | ||
| 3 | + | ||
| 4 | +import java.util.ArrayList; | ||
| 5 | +import java.util.HashMap; | ||
| 6 | +import java.util.Iterator; | ||
| 7 | +import java.util.List; | ||
| 8 | +import java.util.Map; | ||
| 9 | + | ||
| 10 | +public class ListMultiMap<K, V> { | ||
| 11 | + private HashMap<K, List<V>> mInnerMap = new HashMap(); | ||
| 12 | + | ||
| 13 | + private int mSize = 0; | ||
| 14 | + | ||
| 15 | + public ListMultiMap() { | ||
| 16 | + } | ||
| 17 | + | ||
| 18 | + public void clear() { | ||
| 19 | + this.mInnerMap.clear(); | ||
| 20 | + this.mSize = 0; | ||
| 21 | + } | ||
| 22 | + | ||
| 23 | + public boolean containsKey(K key) { | ||
| 24 | + return this.mInnerMap.containsKey(key); | ||
| 25 | + } | ||
| 26 | + | ||
| 27 | + public boolean containsValue(V value) { | ||
| 28 | + Iterator var2 = this.mInnerMap.entrySet().iterator(); | ||
| 29 | + | ||
| 30 | + List values; | ||
| 31 | + do { | ||
| 32 | + if (!var2.hasNext()) { | ||
| 33 | + return false; | ||
| 34 | + } | ||
| 35 | + | ||
| 36 | + Map.Entry<K, List<V>> entry = (Map.Entry) var2.next(); | ||
| 37 | + values = (List) entry.getValue(); | ||
| 38 | + } while (values == null || !values.contains(value)); | ||
| 39 | + | ||
| 40 | + return true; | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | + public boolean contains(K key, V value) { | ||
| 44 | + if (!this.containsKey(key)) { | ||
| 45 | + return false; | ||
| 46 | + } else { | ||
| 47 | + List<V> list = this.get(key); | ||
| 48 | + return list != null && !list.isEmpty() ? list.contains(value) : false; | ||
| 49 | + } | ||
| 50 | + } | ||
| 51 | + | ||
| 52 | + public List<V> get(K key) { | ||
| 53 | + return (List) this.mInnerMap.get(key); | ||
| 54 | + } | ||
| 55 | + | ||
| 56 | + public boolean isEmpty() { | ||
| 57 | + return this.mSize <= 0; | ||
| 58 | + } | ||
| 59 | + | ||
| 60 | + public void put(K key, V value) { | ||
| 61 | + if (this.mInnerMap.containsKey(key)) { | ||
| 62 | + List<V> list = (List) this.mInnerMap.get(key); | ||
| 63 | + list.add(value); | ||
| 64 | + } else { | ||
| 65 | + List<V> list = new ArrayList(); | ||
| 66 | + list.add(value); | ||
| 67 | + this.mInnerMap.put(key, list); | ||
| 68 | + } | ||
| 69 | + | ||
| 70 | + ++this.mSize; | ||
| 71 | + } | ||
| 72 | + | ||
| 73 | + public List<V> remove(K key) { | ||
| 74 | + List<V> list = (List) this.mInnerMap.remove(key); | ||
| 75 | + if (list != null && !list.isEmpty()) { | ||
| 76 | + this.mSize -= list.size(); | ||
| 77 | + } | ||
| 78 | + | ||
| 79 | + return list; | ||
| 80 | + } | ||
| 81 | + | ||
| 82 | + public V remove(K key, V value) { | ||
| 83 | + List<V> list = (List) this.mInnerMap.get(key); | ||
| 84 | + V ret = null; | ||
| 85 | + if (list != null && !list.isEmpty()) { | ||
| 86 | + boolean isRemoved = list.remove(value); | ||
| 87 | + if (isRemoved) { | ||
| 88 | + --this.mSize; | ||
| 89 | + ret = value; | ||
| 90 | + } | ||
| 91 | + } | ||
| 92 | + | ||
| 93 | + return ret; | ||
| 94 | + } | ||
| 95 | + | ||
| 96 | + public V removeValue(V value) { | ||
| 97 | + boolean contains = false; | ||
| 98 | + Iterator var3 = this.mInnerMap.entrySet().iterator(); | ||
| 99 | + | ||
| 100 | + while (var3.hasNext()) { | ||
| 101 | + Map.Entry<K, List<V>> entry = (Map.Entry) var3.next(); | ||
| 102 | + List<V> values = (List) entry.getValue(); | ||
| 103 | + if (values != null && values.contains(value)) { | ||
| 104 | + values.remove(value); | ||
| 105 | + contains = true; | ||
| 106 | + --this.mSize; | ||
| 107 | + } | ||
| 108 | + } | ||
| 109 | + | ||
| 110 | + return contains ? value : null; | ||
| 111 | + } | ||
| 112 | + | ||
| 113 | + public int size() { | ||
| 114 | + return this.mSize; | ||
| 115 | + } | ||
| 116 | + | ||
| 117 | + public String toString() { | ||
| 118 | + return this.mInnerMap.toString(); | ||
| 119 | + } | ||
| 120 | +} |
| 1 | +package com.wd.base.starttask; | ||
| 2 | + | ||
| 3 | +import java.util.ArrayList; | ||
| 4 | +import java.util.Iterator; | ||
| 5 | +import java.util.List; | ||
| 6 | + | ||
| 7 | +public class Project extends Task implements OnProjectExecuteListener { | ||
| 8 | + private Task mStartTask; | ||
| 9 | + private Project.AnchorTask mFinishTask; | ||
| 10 | + private List<OnProjectExecuteListener> mExecuteListeners = new ArrayList(); | ||
| 11 | + private static final String DEFAULT_NAME = "AlphaProject"; | ||
| 12 | + private ExecuteMonitor mProjectExecuteMonitor; | ||
| 13 | + private OnGetMonitorRecordCallback mOnGetMonitorRecordCallback; | ||
| 14 | + | ||
| 15 | + public Project() { | ||
| 16 | + super("AlphaProject"); | ||
| 17 | + } | ||
| 18 | + | ||
| 19 | + public Project(String name) { | ||
| 20 | + super(name); | ||
| 21 | + } | ||
| 22 | + | ||
| 23 | + public void run() { | ||
| 24 | + } | ||
| 25 | + | ||
| 26 | + public void start() { | ||
| 27 | + this.mStartTask.start(); | ||
| 28 | + } | ||
| 29 | + | ||
| 30 | + synchronized void addSuccessor(Task task) { | ||
| 31 | + this.mFinishTask.addSuccessor(task); | ||
| 32 | + } | ||
| 33 | + | ||
| 34 | + public int getCurrentState() { | ||
| 35 | + if (this.mStartTask.getCurrentState() == 0) { | ||
| 36 | + return 0; | ||
| 37 | + } else { | ||
| 38 | + return this.mFinishTask.getCurrentState() == 2 ? 2 : 1; | ||
| 39 | + } | ||
| 40 | + } | ||
| 41 | + | ||
| 42 | + public boolean isRunning() { | ||
| 43 | + return this.getCurrentState() == 1; | ||
| 44 | + } | ||
| 45 | + | ||
| 46 | + public boolean isFinished() { | ||
| 47 | + return this.getCurrentState() == 2; | ||
| 48 | + } | ||
| 49 | + | ||
| 50 | + public void addOnTaskFinishListener(final Task.OnTaskFinishListener listener) { | ||
| 51 | + this.mFinishTask.addOnTaskFinishListener(new Task.OnTaskFinishListener() { | ||
| 52 | + public void onTaskFinish(String taskName) { | ||
| 53 | + listener.onTaskFinish(Project.this.mName); | ||
| 54 | + } | ||
| 55 | + }); | ||
| 56 | + } | ||
| 57 | + | ||
| 58 | + public void onProjectStart() { | ||
| 59 | + this.mProjectExecuteMonitor.recordProjectStart(); | ||
| 60 | + if (this.mExecuteListeners != null && !this.mExecuteListeners.isEmpty()) { | ||
| 61 | + Iterator var1 = this.mExecuteListeners.iterator(); | ||
| 62 | + | ||
| 63 | + while(var1.hasNext()) { | ||
| 64 | + OnProjectExecuteListener listener = (OnProjectExecuteListener)var1.next(); | ||
| 65 | + listener.onProjectStart(); | ||
| 66 | + } | ||
| 67 | + } | ||
| 68 | + | ||
| 69 | + } | ||
| 70 | + | ||
| 71 | + public void onTaskFinish(String taskName) { | ||
| 72 | + if (this.mExecuteListeners != null && !this.mExecuteListeners.isEmpty()) { | ||
| 73 | + Iterator var2 = this.mExecuteListeners.iterator(); | ||
| 74 | + | ||
| 75 | + while(var2.hasNext()) { | ||
| 76 | + OnProjectExecuteListener listener = (OnProjectExecuteListener)var2.next(); | ||
| 77 | + listener.onTaskFinish(taskName); | ||
| 78 | + } | ||
| 79 | + } | ||
| 80 | + | ||
| 81 | + } | ||
| 82 | + | ||
| 83 | + public void onProjectFinish() { | ||
| 84 | + this.mProjectExecuteMonitor.recordProjectFinish(); | ||
| 85 | + this.recordTime(this.mProjectExecuteMonitor.getProjectCostTime()); | ||
| 86 | + if (this.mExecuteListeners != null && !this.mExecuteListeners.isEmpty()) { | ||
| 87 | + Iterator var1 = this.mExecuteListeners.iterator(); | ||
| 88 | + | ||
| 89 | + while(var1.hasNext()) { | ||
| 90 | + OnProjectExecuteListener listener = (OnProjectExecuteListener)var1.next(); | ||
| 91 | + listener.onProjectFinish(); | ||
| 92 | + } | ||
| 93 | + } | ||
| 94 | + | ||
| 95 | + if (this.mOnGetMonitorRecordCallback != null) { | ||
| 96 | + this.mOnGetMonitorRecordCallback.onGetProjectExecuteTime(this.mProjectExecuteMonitor.getProjectCostTime()); | ||
| 97 | + this.mOnGetMonitorRecordCallback.onGetTaskExecuteRecord(this.mProjectExecuteMonitor.getExecuteTimeMap()); | ||
| 98 | + } | ||
| 99 | + | ||
| 100 | + } | ||
| 101 | + | ||
| 102 | + public void addOnProjectExecuteListener(OnProjectExecuteListener listener) { | ||
| 103 | + this.mExecuteListeners.add(listener); | ||
| 104 | + } | ||
| 105 | + | ||
| 106 | + public void setOnGetMonitorRecordCallback(OnGetMonitorRecordCallback callback) { | ||
| 107 | + this.mOnGetMonitorRecordCallback = callback; | ||
| 108 | + } | ||
| 109 | + | ||
| 110 | + void setStartTask(Task startTask) { | ||
| 111 | + this.mStartTask = startTask; | ||
| 112 | + } | ||
| 113 | + | ||
| 114 | + void setFinishTask(Project.AnchorTask finishTask) { | ||
| 115 | + this.mFinishTask = finishTask; | ||
| 116 | + } | ||
| 117 | + | ||
| 118 | + void setProjectExecuteMonitor(ExecuteMonitor monitor) { | ||
| 119 | + this.mProjectExecuteMonitor = monitor; | ||
| 120 | + } | ||
| 121 | + | ||
| 122 | + void recycle() { | ||
| 123 | + super.recycle(); | ||
| 124 | + this.mExecuteListeners.clear(); | ||
| 125 | + } | ||
| 126 | + | ||
| 127 | + private static class AnchorTask extends Task { | ||
| 128 | + private boolean mIsStartTask = true; | ||
| 129 | + private OnProjectExecuteListener mExecuteListener; | ||
| 130 | + | ||
| 131 | + public AnchorTask(boolean isStartTask, String name) { | ||
| 132 | + super(name); | ||
| 133 | + this.mIsStartTask = isStartTask; | ||
| 134 | + } | ||
| 135 | + | ||
| 136 | + public void setProjectLifecycleCallbacks(OnProjectExecuteListener callbacks) { | ||
| 137 | + this.mExecuteListener = callbacks; | ||
| 138 | + } | ||
| 139 | + | ||
| 140 | + public void run() { | ||
| 141 | + if (this.mExecuteListener != null) { | ||
| 142 | + if (this.mIsStartTask) { | ||
| 143 | + this.mExecuteListener.onProjectStart(); | ||
| 144 | + } else { | ||
| 145 | + this.mExecuteListener.onProjectFinish(); | ||
| 146 | + } | ||
| 147 | + } | ||
| 148 | + | ||
| 149 | + } | ||
| 150 | + } | ||
| 151 | + | ||
| 152 | + private static class InnerOnTaskFinishListener implements Task.OnTaskFinishListener { | ||
| 153 | + private Project mProject; | ||
| 154 | + | ||
| 155 | + InnerOnTaskFinishListener(Project project) { | ||
| 156 | + this.mProject = project; | ||
| 157 | + } | ||
| 158 | + | ||
| 159 | + public void onTaskFinish(String taskName) { | ||
| 160 | + this.mProject.onTaskFinish(taskName); | ||
| 161 | + } | ||
| 162 | + } | ||
| 163 | + | ||
| 164 | + public static class Builder { | ||
| 165 | + private Task mCacheTask; | ||
| 166 | + private boolean mIsSetPosition; | ||
| 167 | + private Project.AnchorTask mFinishTask; | ||
| 168 | + private Project.AnchorTask mStartTask; | ||
| 169 | + private Project mProject; | ||
| 170 | + private ExecuteMonitor mMonitor; | ||
| 171 | + private TaskFactory mTaskFactory; | ||
| 172 | + | ||
| 173 | + public Builder() { | ||
| 174 | + this.init(); | ||
| 175 | + } | ||
| 176 | + | ||
| 177 | + public Project create() { | ||
| 178 | + this.addToRootIfNeed(); | ||
| 179 | + Project project = this.mProject; | ||
| 180 | + this.init(); | ||
| 181 | + return project; | ||
| 182 | + } | ||
| 183 | + | ||
| 184 | + public Project.Builder withTaskCreator(ITaskCreator creator) { | ||
| 185 | + this.mTaskFactory = new TaskFactory(creator); | ||
| 186 | + return this; | ||
| 187 | + } | ||
| 188 | + | ||
| 189 | + public Project.Builder setOnProjectExecuteListener(OnProjectExecuteListener listener) { | ||
| 190 | + this.mProject.addOnProjectExecuteListener(listener); | ||
| 191 | + return this; | ||
| 192 | + } | ||
| 193 | + | ||
| 194 | + public Project.Builder setOnGetMonitorRecordCallback(OnGetMonitorRecordCallback callback) { | ||
| 195 | + this.mProject.setOnGetMonitorRecordCallback(callback); | ||
| 196 | + return this; | ||
| 197 | + } | ||
| 198 | + | ||
| 199 | + public Project.Builder setProjectName(String name) { | ||
| 200 | + this.mProject.setName(name); | ||
| 201 | + return this; | ||
| 202 | + } | ||
| 203 | + | ||
| 204 | + public Project.Builder add(String taskName) { | ||
| 205 | + if (this.mTaskFactory == null) { | ||
| 206 | + throw new IllegalAccessError("You should set a ITaskCreator with withTaskCreator(), and then you can call add() and after() with task name."); | ||
| 207 | + } else { | ||
| 208 | + Task task = this.mTaskFactory.getTask(taskName); | ||
| 209 | + this.add(task); | ||
| 210 | + return this; | ||
| 211 | + } | ||
| 212 | + } | ||
| 213 | + | ||
| 214 | + public Project.Builder after(String taskName) { | ||
| 215 | + if (this.mTaskFactory == null) { | ||
| 216 | + throw new IllegalAccessError("You should set a ITaskCreator with withTaskCreator(), and then you can call add() and after() with task name."); | ||
| 217 | + } else { | ||
| 218 | + Task task = this.mTaskFactory.getTask(taskName); | ||
| 219 | + this.after(task); | ||
| 220 | + return this; | ||
| 221 | + } | ||
| 222 | + } | ||
| 223 | + | ||
| 224 | + public Project.Builder after(String... taskNames) { | ||
| 225 | + if (this.mTaskFactory == null) { | ||
| 226 | + throw new IllegalAccessError("You should set a ITaskCreator with withTaskCreator(), and then you can call add() and after() with task name."); | ||
| 227 | + } else { | ||
| 228 | + Task[] tasks = new Task[taskNames.length]; | ||
| 229 | + int i = 0; | ||
| 230 | + | ||
| 231 | + for(int len = taskNames.length; i < len; ++i) { | ||
| 232 | + String taskName = taskNames[i]; | ||
| 233 | + Task task = this.mTaskFactory.getTask(taskName); | ||
| 234 | + tasks[i] = task; | ||
| 235 | + } | ||
| 236 | + | ||
| 237 | + this.after(tasks); | ||
| 238 | + return this; | ||
| 239 | + } | ||
| 240 | + } | ||
| 241 | + | ||
| 242 | + public Project.Builder add(Task task) { | ||
| 243 | + this.addToRootIfNeed(); | ||
| 244 | + this.mCacheTask = task; | ||
| 245 | + this.mCacheTask.setExecuteMonitor(this.mMonitor); | ||
| 246 | + this.mIsSetPosition = false; | ||
| 247 | + this.mCacheTask.addOnTaskFinishListener(new Project.InnerOnTaskFinishListener(this.mProject)); | ||
| 248 | + this.mCacheTask.addSuccessor(this.mFinishTask); | ||
| 249 | + return this; | ||
| 250 | + } | ||
| 251 | + | ||
| 252 | + public Project.Builder after(Task task) { | ||
| 253 | + task.addSuccessor(this.mCacheTask); | ||
| 254 | + this.mFinishTask.removePredecessor(task); | ||
| 255 | + this.mIsSetPosition = true; | ||
| 256 | + return this; | ||
| 257 | + } | ||
| 258 | + | ||
| 259 | + public Project.Builder after(Task... tasks) { | ||
| 260 | + Task[] var2 = tasks; | ||
| 261 | + int var3 = tasks.length; | ||
| 262 | + | ||
| 263 | + for(int var4 = 0; var4 < var3; ++var4) { | ||
| 264 | + Task task = var2[var4]; | ||
| 265 | + task.addSuccessor(this.mCacheTask); | ||
| 266 | + this.mFinishTask.removePredecessor(task); | ||
| 267 | + } | ||
| 268 | + | ||
| 269 | + this.mIsSetPosition = true; | ||
| 270 | + return this; | ||
| 271 | + } | ||
| 272 | + | ||
| 273 | + private void addToRootIfNeed() { | ||
| 274 | + if (!this.mIsSetPosition && this.mCacheTask != null) { | ||
| 275 | + this.mStartTask.addSuccessor(this.mCacheTask); | ||
| 276 | + } | ||
| 277 | + | ||
| 278 | + } | ||
| 279 | + | ||
| 280 | + private void init() { | ||
| 281 | + this.mCacheTask = null; | ||
| 282 | + this.mIsSetPosition = true; | ||
| 283 | + this.mProject = new Project(); | ||
| 284 | + this.mFinishTask = new Project.AnchorTask(false, "==AlphaDefaultFinishTask=="); | ||
| 285 | + this.mFinishTask.setProjectLifecycleCallbacks(this.mProject); | ||
| 286 | + this.mStartTask = new Project.AnchorTask(true, "==AlphaDefaultStartTask=="); | ||
| 287 | + this.mStartTask.setProjectLifecycleCallbacks(this.mProject); | ||
| 288 | + this.mProject.setStartTask(this.mStartTask); | ||
| 289 | + this.mProject.setFinishTask(this.mFinishTask); | ||
| 290 | + this.mMonitor = new ExecuteMonitor(); | ||
| 291 | + this.mProject.setProjectExecuteMonitor(this.mMonitor); | ||
| 292 | + } | ||
| 293 | + } | ||
| 294 | +} | ||
| 295 | + |
| 1 | +package com.wd.base.starttask; | ||
| 2 | + | ||
| 3 | +import android.os.Handler; | ||
| 4 | +import android.os.Looper; | ||
| 5 | +import android.os.Process; | ||
| 6 | + | ||
| 7 | +import java.util.ArrayList; | ||
| 8 | +import java.util.HashSet; | ||
| 9 | +import java.util.Iterator; | ||
| 10 | +import java.util.List; | ||
| 11 | +import java.util.Set; | ||
| 12 | +import java.util.concurrent.ExecutorService; | ||
| 13 | + | ||
| 14 | +public abstract class Task { | ||
| 15 | + public static final int STATE_IDLE = 0; | ||
| 16 | + public static final int STATE_RUNNING = 1; | ||
| 17 | + public static final int STATE_FINISHED = 2; | ||
| 18 | + public static final int STATE_WAIT = 3; | ||
| 19 | + public static final int DEFAULT_EXECUTE_PRIORITY = 0; | ||
| 20 | + private int mExecutePriority; | ||
| 21 | + private int mThreadPriority; | ||
| 22 | + private static ExecutorService sExecutor = AlphaConfig.getExecutor(); | ||
| 23 | + private static Handler sHandler = new Handler(Looper.getMainLooper()); | ||
| 24 | + private boolean mIsInUiThread; | ||
| 25 | + private Runnable mInternalRunnable; | ||
| 26 | + protected String mName; | ||
| 27 | + private List<Task.OnTaskFinishListener> mTaskFinishListeners; | ||
| 28 | + private volatile int mCurrentState; | ||
| 29 | + private List<Task> mSuccessorList; | ||
| 30 | + protected Set<Task> mPredecessorSet; | ||
| 31 | + private ExecuteMonitor mTaskExecuteMonitor; | ||
| 32 | + | ||
| 33 | + public Task(String name) { | ||
| 34 | + this(name, 0); | ||
| 35 | + } | ||
| 36 | + | ||
| 37 | + public Task(String name, int threadPriority) { | ||
| 38 | + this.mExecutePriority = 0; | ||
| 39 | + this.mTaskFinishListeners = new ArrayList(); | ||
| 40 | + this.mCurrentState = 0; | ||
| 41 | + this.mSuccessorList = new ArrayList(); | ||
| 42 | + this.mPredecessorSet = new HashSet(); | ||
| 43 | + this.mName = name; | ||
| 44 | + this.mThreadPriority = threadPriority; | ||
| 45 | + } | ||
| 46 | + | ||
| 47 | + public Task(String name, boolean isInUiThread) { | ||
| 48 | + this.mExecutePriority = 0; | ||
| 49 | + this.mTaskFinishListeners = new ArrayList(); | ||
| 50 | + this.mCurrentState = 0; | ||
| 51 | + this.mSuccessorList = new ArrayList(); | ||
| 52 | + this.mPredecessorSet = new HashSet(); | ||
| 53 | + this.mName = name; | ||
| 54 | + this.mIsInUiThread = isInUiThread; | ||
| 55 | + } | ||
| 56 | + | ||
| 57 | + public synchronized void start() { | ||
| 58 | + if (this.mCurrentState != 0) { | ||
| 59 | + throw new RuntimeException("You try to run task " + this.mName + " twice, is there a circular dependency?"); | ||
| 60 | + } else { | ||
| 61 | + this.switchState(3); | ||
| 62 | + if (this.mInternalRunnable == null) { | ||
| 63 | + this.mInternalRunnable = new Runnable() { | ||
| 64 | + public void run() { | ||
| 65 | + Process.setThreadPriority(Task.this.mThreadPriority); | ||
| 66 | + long startTime = System.currentTimeMillis(); | ||
| 67 | + Task.this.switchState(1); | ||
| 68 | + Task.this.run(); | ||
| 69 | + Task.this.switchState(2); | ||
| 70 | + long finishTime = System.currentTimeMillis(); | ||
| 71 | + Task.this.recordTime(finishTime - startTime); | ||
| 72 | + Task.this.notifyFinished(); | ||
| 73 | + Task.this.recycle(); | ||
| 74 | + } | ||
| 75 | + }; | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | + if (this.mIsInUiThread) { | ||
| 79 | + sHandler.post(this.mInternalRunnable); | ||
| 80 | + } else { | ||
| 81 | + sExecutor.execute(this.mInternalRunnable); | ||
| 82 | + } | ||
| 83 | + | ||
| 84 | + } | ||
| 85 | + } | ||
| 86 | + | ||
| 87 | + public void addOnTaskFinishListener(Task.OnTaskFinishListener listener) { | ||
| 88 | + if (!this.mTaskFinishListeners.contains(listener)) { | ||
| 89 | + this.mTaskFinishListeners.add(listener); | ||
| 90 | + } | ||
| 91 | + | ||
| 92 | + } | ||
| 93 | + | ||
| 94 | + public abstract void run(); | ||
| 95 | + | ||
| 96 | + public int getCurrentState() { | ||
| 97 | + return this.mCurrentState; | ||
| 98 | + } | ||
| 99 | + | ||
| 100 | + public boolean isRunning() { | ||
| 101 | + return this.mCurrentState == 1; | ||
| 102 | + } | ||
| 103 | + | ||
| 104 | + public boolean isFinished() { | ||
| 105 | + return this.mCurrentState == 2; | ||
| 106 | + } | ||
| 107 | + | ||
| 108 | + public void setExecutePriority(int executePriority) { | ||
| 109 | + this.mExecutePriority = executePriority; | ||
| 110 | + } | ||
| 111 | + | ||
| 112 | + public int getExecutePriority() { | ||
| 113 | + return this.mExecutePriority; | ||
| 114 | + } | ||
| 115 | + | ||
| 116 | + void addPredecessor(Task task) { | ||
| 117 | + this.mPredecessorSet.add(task); | ||
| 118 | + } | ||
| 119 | + | ||
| 120 | + void removePredecessor(Task task) { | ||
| 121 | + this.mPredecessorSet.remove(task); | ||
| 122 | + } | ||
| 123 | + | ||
| 124 | + void addSuccessor(Task task) { | ||
| 125 | + if (task == this) { | ||
| 126 | + throw new RuntimeException("A task should not after itself."); | ||
| 127 | + } else { | ||
| 128 | + task.addPredecessor(this); | ||
| 129 | + this.mSuccessorList.add(task); | ||
| 130 | + } | ||
| 131 | + } | ||
| 132 | + | ||
| 133 | + void notifyFinished() { | ||
| 134 | + Iterator var1; | ||
| 135 | + if (!this.mSuccessorList.isEmpty()) { | ||
| 136 | + AlphaUtils.sort(this.mSuccessorList); | ||
| 137 | + var1 = this.mSuccessorList.iterator(); | ||
| 138 | + | ||
| 139 | + while(var1.hasNext()) { | ||
| 140 | + Task task = (Task)var1.next(); | ||
| 141 | + task.onPredecessorFinished(this); | ||
| 142 | + } | ||
| 143 | + } | ||
| 144 | + | ||
| 145 | + if (!this.mTaskFinishListeners.isEmpty()) { | ||
| 146 | + var1 = this.mTaskFinishListeners.iterator(); | ||
| 147 | + | ||
| 148 | + while(var1.hasNext()) { | ||
| 149 | + Task.OnTaskFinishListener listener = (Task.OnTaskFinishListener)var1.next(); | ||
| 150 | + listener.onTaskFinish(this.mName); | ||
| 151 | + } | ||
| 152 | + | ||
| 153 | + this.mTaskFinishListeners.clear(); | ||
| 154 | + } | ||
| 155 | + | ||
| 156 | + } | ||
| 157 | + | ||
| 158 | + synchronized void onPredecessorFinished(Task beforeTask) { | ||
| 159 | + if (!this.mPredecessorSet.isEmpty()) { | ||
| 160 | + this.mPredecessorSet.remove(beforeTask); | ||
| 161 | + if (this.mPredecessorSet.isEmpty()) { | ||
| 162 | + this.start(); | ||
| 163 | + } | ||
| 164 | + | ||
| 165 | + } | ||
| 166 | + } | ||
| 167 | + | ||
| 168 | + void setName(String name) { | ||
| 169 | + this.mName = name; | ||
| 170 | + } | ||
| 171 | + | ||
| 172 | + void setThreadPriority(int threadPriority) { | ||
| 173 | + this.mThreadPriority = threadPriority; | ||
| 174 | + } | ||
| 175 | + | ||
| 176 | + void setExecuteMonitor(ExecuteMonitor monitor) { | ||
| 177 | + this.mTaskExecuteMonitor = monitor; | ||
| 178 | + } | ||
| 179 | + | ||
| 180 | + void recycle() { | ||
| 181 | + this.mSuccessorList.clear(); | ||
| 182 | + this.mTaskFinishListeners.clear(); | ||
| 183 | + } | ||
| 184 | + | ||
| 185 | + protected void recordTime(long costTime) { | ||
| 186 | + if (this.mTaskExecuteMonitor != null) { | ||
| 187 | + this.mTaskExecuteMonitor.record(this.mName, costTime); | ||
| 188 | + } | ||
| 189 | + | ||
| 190 | + } | ||
| 191 | + | ||
| 192 | + private void switchState(int state) { | ||
| 193 | + this.mCurrentState = state; | ||
| 194 | + } | ||
| 195 | + | ||
| 196 | + public interface OnTaskFinishListener { | ||
| 197 | + void onTaskFinish(String var1); | ||
| 198 | + } | ||
| 199 | +} | ||
| 200 | + |
| 1 | + | ||
| 2 | +package com.wd.base.starttask; | ||
| 3 | + | ||
| 4 | +import java.util.HashMap; | ||
| 5 | +import java.util.Map; | ||
| 6 | + | ||
| 7 | +public final class TaskFactory { | ||
| 8 | + private Map<String, Task> mTasks = new HashMap(); | ||
| 9 | + | ||
| 10 | + private ITaskCreator mTaskCreator; | ||
| 11 | + | ||
| 12 | + public TaskFactory(ITaskCreator creator) { | ||
| 13 | + this.mTaskCreator = creator; | ||
| 14 | + } | ||
| 15 | + | ||
| 16 | + public synchronized Task getTask(String taskName) { | ||
| 17 | + Task task = (Task) this.mTasks.get(taskName); | ||
| 18 | + if (task != null) { | ||
| 19 | + return task; | ||
| 20 | + } else { | ||
| 21 | + task = this.mTaskCreator.createTask(taskName); | ||
| 22 | + if (task == null) { | ||
| 23 | + throw new IllegalArgumentException( | ||
| 24 | + "Create task fail, there is no task corresponding to the task name. Make sure you have create a task instance in TaskCreator."); | ||
| 25 | + } else { | ||
| 26 | + this.mTasks.put(taskName, task); | ||
| 27 | + return task; | ||
| 28 | + } | ||
| 29 | + } | ||
| 30 | + } | ||
| 31 | +} |
wdstartup/src/main/res/values/strings.xml
0 → 100644
-
Please register or login to post a comment