Date: Tue, 28 Aug 2018 17:09:30 +0800
Subject: [PATCH 046/192] Create demo-subunits
---
demo-subunits/.gitignore | 1 +
demo-subunits/build.gradle | 29 +++
demo-subunits/proguard-rules.pro | 21 +++
.../demo/ExampleInstrumentedTest.java | 26 +++
demo-subunits/src/main/AndroidManifest.xml | 31 ++++
.../demo/subunits/BaseApplication.java | 101 +++++++++++
.../demo/subunits/CustomAdaptActivity.java | 71 ++++++++
.../autosize/demo/subunits/MainActivity.java | 104 +++++++++++
.../drawable-v24/ic_launcher_foreground.xml | 34 ++++
.../res/drawable/ic_launcher_background.xml | 171 ++++++++++++++++++
.../main/res/layout/activity_custom_adapt.xml | 61 +++++++
.../src/main/res/layout/activity_main.xml | 116 ++++++++++++
demo-subunits/src/main/res/layout/test.xml | 12 ++
.../res/mipmap-anydpi-v26/ic_launcher.xml | 5 +
.../mipmap-anydpi-v26/ic_launcher_round.xml | 5 +
.../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3056 bytes
.../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 5024 bytes
.../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2096 bytes
.../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2858 bytes
.../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4569 bytes
.../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 7098 bytes
.../main/res/mipmap-xxhdpi/autosize_logo.png | Bin 0 -> 31276 bytes
.../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6464 bytes
.../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 10676 bytes
.../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9250 bytes
.../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 15523 bytes
demo-subunits/src/main/res/values/colors.xml | 6 +
demo-subunits/src/main/res/values/strings.xml | 3 +
demo-subunits/src/main/res/values/styles.xml | 11 ++
.../autosize/demo/ExampleUnitTest.java | 17 ++
settings.gradle | 2 +-
31 files changed, 826 insertions(+), 1 deletion(-)
create mode 100644 demo-subunits/.gitignore
create mode 100644 demo-subunits/build.gradle
create mode 100644 demo-subunits/proguard-rules.pro
create mode 100644 demo-subunits/src/androidTest/java/me/jessyan/autosize/demo/ExampleInstrumentedTest.java
create mode 100644 demo-subunits/src/main/AndroidManifest.xml
create mode 100644 demo-subunits/src/main/java/me/jessyan/autosize/demo/subunits/BaseApplication.java
create mode 100644 demo-subunits/src/main/java/me/jessyan/autosize/demo/subunits/CustomAdaptActivity.java
create mode 100644 demo-subunits/src/main/java/me/jessyan/autosize/demo/subunits/MainActivity.java
create mode 100644 demo-subunits/src/main/res/drawable-v24/ic_launcher_foreground.xml
create mode 100644 demo-subunits/src/main/res/drawable/ic_launcher_background.xml
create mode 100644 demo-subunits/src/main/res/layout/activity_custom_adapt.xml
create mode 100644 demo-subunits/src/main/res/layout/activity_main.xml
create mode 100644 demo-subunits/src/main/res/layout/test.xml
create mode 100644 demo-subunits/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
create mode 100644 demo-subunits/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
create mode 100644 demo-subunits/src/main/res/mipmap-hdpi/ic_launcher.png
create mode 100644 demo-subunits/src/main/res/mipmap-hdpi/ic_launcher_round.png
create mode 100644 demo-subunits/src/main/res/mipmap-mdpi/ic_launcher.png
create mode 100644 demo-subunits/src/main/res/mipmap-mdpi/ic_launcher_round.png
create mode 100644 demo-subunits/src/main/res/mipmap-xhdpi/ic_launcher.png
create mode 100644 demo-subunits/src/main/res/mipmap-xhdpi/ic_launcher_round.png
create mode 100644 demo-subunits/src/main/res/mipmap-xxhdpi/autosize_logo.png
create mode 100644 demo-subunits/src/main/res/mipmap-xxhdpi/ic_launcher.png
create mode 100644 demo-subunits/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
create mode 100644 demo-subunits/src/main/res/mipmap-xxxhdpi/ic_launcher.png
create mode 100644 demo-subunits/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
create mode 100644 demo-subunits/src/main/res/values/colors.xml
create mode 100644 demo-subunits/src/main/res/values/strings.xml
create mode 100644 demo-subunits/src/main/res/values/styles.xml
create mode 100644 demo-subunits/src/test/java/me/jessyan/autosize/demo/ExampleUnitTest.java
diff --git a/demo-subunits/.gitignore b/demo-subunits/.gitignore
new file mode 100644
index 0000000..796b96d
--- /dev/null
+++ b/demo-subunits/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/demo-subunits/build.gradle b/demo-subunits/build.gradle
new file mode 100644
index 0000000..1ec5f29
--- /dev/null
+++ b/demo-subunits/build.gradle
@@ -0,0 +1,29 @@
+apply plugin: 'com.android.application'
+
+android {
+ compileSdkVersion rootProject.compileSdkVersion
+ buildToolsVersion rootProject.buildToolsVersion
+
+ defaultConfig {
+ applicationId "me.jessyan.autosize.demo.subunits"
+ minSdkVersion rootProject.minSdkVersion
+ targetSdkVersion rootProject.targetSdkVersion
+ versionCode rootProject.versionCode
+ versionName rootProject.versionName
+ testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+}
+
+dependencies {
+// implementation 'me.jessyan:autosize:0.9.0'
+ implementation project(':autosize')
+ implementation 'com.android.support:appcompat-v7:27.1.1'
+ implementation 'cat.ereza:customactivityoncrash:2.2.0'
+ testImplementation 'junit:junit:4.12'
+}
diff --git a/demo-subunits/proguard-rules.pro b/demo-subunits/proguard-rules.pro
new file mode 100644
index 0000000..f1b4245
--- /dev/null
+++ b/demo-subunits/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/demo-subunits/src/androidTest/java/me/jessyan/autosize/demo/ExampleInstrumentedTest.java b/demo-subunits/src/androidTest/java/me/jessyan/autosize/demo/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..58ce35c
--- /dev/null
+++ b/demo-subunits/src/androidTest/java/me/jessyan/autosize/demo/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package me.jessyan.autosize.demo;
+
+import android.content.Context;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getTargetContext();
+
+ assertEquals("me.jessyan.autosize.demo", appContext.getPackageName());
+ }
+}
diff --git a/demo-subunits/src/main/AndroidManifest.xml b/demo-subunits/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..e5fb5fb
--- /dev/null
+++ b/demo-subunits/src/main/AndroidManifest.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/demo-subunits/src/main/java/me/jessyan/autosize/demo/subunits/BaseApplication.java b/demo-subunits/src/main/java/me/jessyan/autosize/demo/subunits/BaseApplication.java
new file mode 100644
index 0000000..6329620
--- /dev/null
+++ b/demo-subunits/src/main/java/me/jessyan/autosize/demo/subunits/BaseApplication.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2018 JessYan
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package me.jessyan.autosize.demo.subunits;
+
+import android.app.Activity;
+import android.app.Application;
+
+import cat.ereza.customactivityoncrash.activity.DefaultErrorActivity;
+import me.jessyan.autosize.AutoSizeConfig;
+import me.jessyan.autosize.external.ExternalAdaptInfo;
+import me.jessyan.autosize.external.ExternalAdaptManager;
+import me.jessyan.autosize.internal.CustomAdapt;
+import me.jessyan.autosize.unit.Subunits;
+
+/**
+ * ================================================
+ * 本框架核心原理来自于 今日头条官方适配方案
+ *
+ * 本框架源码的注释都很详细, 欢迎阅读学习
+ *
+ * AndroidAutoSize 会在 APP 启动时自动完成初始化, 如果您想设置自定义参数可以在 {@link Application#onCreate()} 中设置
+ *
+ * Created by JessYan on 2018/8/9 17:05
+ * Contact me
+ * Follow me
+ * ================================================
+ */
+public class BaseApplication extends Application {
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ /**
+ * 以下是 AndroidAutoSize 可以自定义的参数, {@link AutoSizeConfig} 的每个方法的注释都写的很详细
+ * 使用前请一定记得跳进源码,查看方法的注释, 下面的注释只是简单描述!!!
+ */
+ AutoSizeConfig.getInstance()
+
+ //是否让框架支持自定义 Fragment 的适配参数, 由于这个需求是比较少见的, 所以须要使用者手动开启
+ //如果没有这个需求建议不开启
+ .setCustomFragment(true)
+
+ //是否打印 AutoSize 的内部日志, 默认为 true, 如果您不想 AutoSize 打印日志, 则请设置为 false
+// .setLog(false)
+
+ //是否使用设备的实际尺寸做适配, 默认为 false, 如果设置为 false, 在以屏幕高度为基准进行适配时
+ //AutoSize 会将屏幕总高度减去状态栏高度来做适配, 如果设备上有导航栏还会减去导航栏的高度
+ //设置为 true 则使用设备的实际屏幕高度, 不会减去状态栏以及导航栏高度
+// .setUseDeviceSize(true)
+
+ //是否全局按照宽度进行等比例适配, 默认为 true, 如果设置为 false, AutoSize 会全局按照高度进行适配
+// .setBaseOnWidth(false)
+
+ //设置屏幕适配逻辑策略类, 一般不用设置, 使用框架默认的就好
+// .setAutoAdaptStrategy(new AutoAdaptStrategy())
+ ;
+ customAdaptForExternal();
+// AutoSizeConfig.getInstance().getUnitsManager().setSupportDP(false);
+ AutoSizeConfig.getInstance().getUnitsManager().setSupportSP(false);
+ AutoSizeConfig.getInstance().getUnitsManager().setSupportSubunits(Subunits.MM);
+ }
+
+ /**
+ * 给外部的三方库 {@link Activity} 自定义适配参数, 因为三方库的 {@link Activity} 并不能通过实现
+ * {@link CustomAdapt} 接口的方式来提供自定义适配参数 (因为远程依赖改不了源码)
+ * 所以使用 {@link ExternalAdaptManager} 来替代实现接口的方式, 来提供自定义适配参数
+ */
+ private void customAdaptForExternal() {
+ /**
+ * {@link ExternalAdaptManager} 是一个管理外部三方库的适配信息和状态的管理类, 详细介绍请看 {@link ExternalAdaptManager} 的类注释
+ */
+ AutoSizeConfig.getInstance().getExternalAdaptManager()
+
+ //加入的 Activity 将会放弃屏幕适配, 一般用于三方库的 Activity, 详情请看方法注释
+ //如果不想放弃三方库页面的适配, 请用 addExternalAdaptInfoOfActivity 方法, 建议对三方库页面进行适配, 让自己的 App 更完美一点
+// .addCancelAdaptOfActivity(DefaultErrorActivity.class)
+
+ //为指定的 Activity 提供自定义适配参数, AndroidAutoSize 将会按照提供的适配参数进行适配, 详情请看方法注释
+ //一般用于三方库的 Activity, 因为三方库的设计图尺寸可能和项目自身的设计图尺寸不一致, 所以要想完美适配三方库的页面
+ //就需要提供三方库的设计图尺寸, 以及适配的方向 (以宽为基准还是高为基准?)
+ //三方库页面的设计图尺寸可能无法获知, 所以如果想让三方库的适配效果达到最好, 只有靠不断的尝试
+ //由于 AndroidAutoSize 可以让布局在所有设备上都等比例缩放, 所以只要你在一个设备上测试出了一个最完美的设计图尺寸
+ //那这个三方库页面在其他设备上也会呈现出同样的适配效果, 等比例缩放, 所以也就完成了三方库页面的屏幕适配
+ //即使在不改三方库源码的情况下也可以完美适配三方库的页面, 这就是 AndroidAutoSize 的优势
+ //但前提是三方库页面的布局使用的是 dp 和 sp, 如果布局全部使用的 px, 那 AndroidAutoSize 也将无能为力
+ //经过测试 DefaultErrorActivity 的设计图宽度在 380dp - 400dp 显示效果都是比较舒服的
+ .addExternalAdaptInfoOfActivity(DefaultErrorActivity.class, new ExternalAdaptInfo(true, 400));
+ }
+}
diff --git a/demo-subunits/src/main/java/me/jessyan/autosize/demo/subunits/CustomAdaptActivity.java b/demo-subunits/src/main/java/me/jessyan/autosize/demo/subunits/CustomAdaptActivity.java
new file mode 100644
index 0000000..e3b7a4e
--- /dev/null
+++ b/demo-subunits/src/main/java/me/jessyan/autosize/demo/subunits/CustomAdaptActivity.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2018 JessYan
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package me.jessyan.autosize.demo.subunits;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.support.v7.app.AppCompatActivity;
+
+import me.jessyan.autosize.internal.CustomAdapt;
+
+/**
+ * ================================================
+ * 本框架核心原理来自于 今日头条官方适配方案
+ *
+ * {@link CustomAdaptActivity} 展示项目内部的 {@link Activity} 自定义适配参数的用法, 需要实现 {@link CustomAdapt}
+ * 现在 AndroidAutoSize 是全局以屏幕宽度为基准进行适配的, 并且全局的设计图尺寸为 360 * 640
+ * 这里就展示怎么让 {@link CustomAdaptActivity} 单个页面, 有别于全局设置, 以屏幕高度为基准进行适配, 并且更改设计图尺寸为 IPhone 的设计图尺寸
+ * 如果这个页面的设计图尺寸有别于其他页面, AndroidAutoSize 允许您改变单个页面的设计图尺寸, {@link #getSizeInDp()}
+ *
+ * Created by JessYan on 2018/8/11 11:31
+ * Contact me
+ * Follow me
+ * ================================================
+ */
+public class CustomAdaptActivity extends AppCompatActivity implements CustomAdapt {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_custom_adapt);
+ }
+
+ /**
+ * 是否按照宽度进行等比例适配 (为了保证在高宽比不同的屏幕上也能正常适配, 所以只能在宽度和高度之中选一个作为基准进行适配)
+ *
+ * @return {@code true} 为按照宽度适配, {@code false} 为按照高度适配
+ */
+ @Override
+ public boolean isBaseOnWidth() {
+ return false;
+ }
+
+ /**
+ * 这里使用 IPhone 的设计图, IPhone 的设计图尺寸为 750px * 1334px, 高换算成 dp 为 667 (1334px / 2 = 667dp)
+ *
+ * 返回设计图上的设计尺寸, 单位 dp
+ * {@link #getSizeInDp} 须配合 {@link #isBaseOnWidth()} 使用, 规则如下:
+ * 如果 {@link #isBaseOnWidth()} 返回 {@code true}, {@link #getSizeInDp} 则应该返回设计图的总宽度
+ * 如果 {@link #isBaseOnWidth()} 返回 {@code false}, {@link #getSizeInDp} 则应该返回设计图的总高度
+ * 如果您不需要自定义设计图上的设计尺寸, 想继续使用在 AndroidManifest 中填写的设计图尺寸, {@link #getSizeInDp} 则返回 {@code 0}
+ *
+ * @return 设计图上的设计尺寸, 单位 dp
+ */
+ @Override
+ public float getSizeInDp() {
+ return 667;
+ }
+}
diff --git a/demo-subunits/src/main/java/me/jessyan/autosize/demo/subunits/MainActivity.java b/demo-subunits/src/main/java/me/jessyan/autosize/demo/subunits/MainActivity.java
new file mode 100644
index 0000000..793400c
--- /dev/null
+++ b/demo-subunits/src/main/java/me/jessyan/autosize/demo/subunits/MainActivity.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2018 JessYan
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package me.jessyan.autosize.demo.subunits;
+
+import android.app.Activity;
+import android.app.Dialog;
+import android.app.Fragment;
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.v7.app.AppCompatActivity;
+import android.view.View;
+import android.widget.Toast;
+
+import cat.ereza.customactivityoncrash.activity.DefaultErrorActivity;
+import cat.ereza.customactivityoncrash.config.CaocConfig;
+import me.jessyan.autosize.AutoSizeConfig;
+import me.jessyan.autosize.internal.CustomAdapt;
+
+/**
+ * ================================================
+ * 本框架核心原理来自于 今日头条官方适配方案
+ * 此方案不光可以适配 {@link Activity}, 这个 {@link Activity} 下的所有 {@link Fragment}、{@link Dialog}、{@link View} 都会自动适配
+ *
+ * {@link MainActivity} 是以屏幕宽度为基准进行适配的, 并且使用的是在 AndroidManifest 中填写的全局设计图尺寸 360 * 640
+ * 不懂什么叫基准的话, 请看 {@link AutoSizeConfig#isBaseOnWidth}) 的注释, AndroidAutoSize 默认全局以屏幕宽度为基准进行适配
+ * 如果想更改为全局以屏幕高度为基准进行适配, 请在 {@link BaseApplication} 中按注释中更改, 为什么强调全局?
+ * 因为 AndroidAutoSize 允许每个 {@link Activity} 可以自定义适配参数, 自定义适配参数通过实现 {@link CustomAdapt}
+ * 如果不自定义适配参数就会使用全局的适配参数, 全局适配参数在 {@link BaseApplication} 中按注释设置
+ *
+ * Created by JessYan on 2018/8/9 17:05
+ * Contact me
+ * Follow me
+ * ================================================
+ */
+//实现 CancelAdapt 即可取消当前 Activity 的屏幕适配, 并且这个 Activity 下的所有 Fragment 和 View 都会被取消适配
+//public class MainActivity extends AppCompatActivity implements CancelAdapt {
+public class MainActivity extends AppCompatActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+ }
+
+ /**
+ * 需要注意的是暂停 AndroidAutoSize 后, AndroidAutoSize 只是停止了对后续还没有启动的 {@link Activity} 进行适配的工作
+ * 但对已经启动且已经适配的 {@link Activity} 不会有任何影响
+ *
+ * @param view {@link View}
+ */
+ public void stop(View view) {
+ Toast.makeText(getApplicationContext(), "AndroidAutoSize stops working!", Toast.LENGTH_SHORT).show();
+ AutoSizeConfig.getInstance().stop(this);
+ }
+
+ /**
+ * 需要注意的是重新启动 AndroidAutoSize 后, AndroidAutoSize 只是重新开始了对后续还没有启动的 {@link Activity} 进行适配的工作
+ * 但对已经启动且在 stop 期间未适配的 {@link Activity} 不会有任何影响
+ *
+ * @param view {@link View}
+ */
+ public void restart(View view) {
+ Toast.makeText(getApplicationContext(), "AndroidAutoSize continues to work", Toast.LENGTH_SHORT).show();
+ AutoSizeConfig.getInstance().restart();
+ }
+
+ /**
+ * 跳转到 {@link CustomAdaptActivity}, 展示项目内部的 {@link Activity} 自定义适配参数的用法
+ *
+ * @param view {@link View}
+ */
+ public void goCustomAdaptActivity(View view) {
+ startActivity(new Intent(getApplicationContext(), CustomAdaptActivity.class));
+ }
+
+ /**
+ * 跳转到三方库的 {@link Activity}, 展示项目外部某些三方库的 {@link Activity} 自定义适配参数的用法
+ * 跳转前要先在 {@link BaseApplication#customAdaptForExternal()} 中给外部的三方库 {@link Activity} 自定义适配参数
+ *
+ * @param view {@link View}
+ */
+ public void goThirdLibraryActivity(View view) {
+ //这里就是随便找个三方库的 Activity, 测试下适配三方库页面的功能是否可用
+ //以下代码就是为了启动这个三方库的 Activity, 不必在意
+ Intent intent = new Intent(getApplicationContext(), DefaultErrorActivity.class);
+ Bundle extras = new Bundle();
+ extras.putSerializable("cat.ereza.customactivityoncrash.EXTRA_CONFIG", CaocConfig.Builder.create().get());
+ intent.putExtras(extras);
+ startActivity(intent);
+ }
+}
diff --git a/demo-subunits/src/main/res/drawable-v24/ic_launcher_foreground.xml b/demo-subunits/src/main/res/drawable-v24/ic_launcher_foreground.xml
new file mode 100644
index 0000000..c3903ed
--- /dev/null
+++ b/demo-subunits/src/main/res/drawable-v24/ic_launcher_foreground.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demo-subunits/src/main/res/drawable/ic_launcher_background.xml b/demo-subunits/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 0000000..5713f34
--- /dev/null
+++ b/demo-subunits/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,171 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demo-subunits/src/main/res/layout/activity_custom_adapt.xml b/demo-subunits/src/main/res/layout/activity_custom_adapt.xml
new file mode 100644
index 0000000..f087d37
--- /dev/null
+++ b/demo-subunits/src/main/res/layout/activity_custom_adapt.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/demo-subunits/src/main/res/layout/activity_main.xml b/demo-subunits/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000..a83ba2e
--- /dev/null
+++ b/demo-subunits/src/main/res/layout/activity_main.xml
@@ -0,0 +1,116 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/demo-subunits/src/main/res/layout/test.xml b/demo-subunits/src/main/res/layout/test.xml
new file mode 100644
index 0000000..414fe9b
--- /dev/null
+++ b/demo-subunits/src/main/res/layout/test.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/demo-subunits/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/demo-subunits/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 0000000..bbd3e02
--- /dev/null
+++ b/demo-subunits/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/demo-subunits/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/demo-subunits/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 0000000..bbd3e02
--- /dev/null
+++ b/demo-subunits/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/demo-subunits/src/main/res/mipmap-hdpi/ic_launcher.png b/demo-subunits/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000000000000000000000000000000000000..a2f5908281d070150700378b64a84c7db1f97aa1
GIT binary patch
literal 3056
zcmV(P)KhZB4W`O-$6PEY7dL@435|%iVhscI7#HXTET`
zzkBaFzt27A{C?*?2n!1>p(V70me4Z57os7_P3wngt7(|N?Oyh#`(O{OZ1{A4;H+Oi
zbkJV-pnX%EV7$w+V1moMaYCgzJI-a^GQPsJHL=>Zb!M$&E7r9HyP>8`*Pg_->7CeN
zOX|dqbE6DBJL=}Mqt2*1e1I>(L-HP&UhjA?q1x7zSXD}D&D-Om%sC#AMr*KVk>dy;pT>Dpn#K6-YX8)fL(Q8(04+g?ah97XT2i$m2u
z-*XXz7%$`O#x&6Oolq?+sA+c;
zdg7fXirTUG`+!=-QudtfOZR*6Z3~!#;X;oEv56*-B
z&gIGE3os@3O)sFP?zf;Z#kt18-o>IeueS!=#X^8WfI@&mfI@)!F(BkYxSfC*Gb*AM
zau9@B_4f3=m1I71l8mRD>8A(lNb6V#dCpSKW%TT@VIMvFvz!K$oN1v#E@%Fp3O_sQ
zmbSM-`}i8WCzSyPl?NqS^NqOYg4+tXT52ItLoTA;4mfx3-lev-HadLiA}!)%PwV)f
zumi|*v}_P;*hk9-c*ibZqBd_ixhLQA+Xr>akm~QJCpfoT!u5JA_l@4qgMRf+Bi(Gh
zBOtYM<*PnDOA}ls-7YrTVWimdA{y^37Q#BV>2&NKUfl(9F9G}lZ{!-VfTnZh-}vANUA=kZz5}{^<2t=|
z{D>%{4**GFekzA~Ja)m81w<3IaIXdft(FZDD2oTruW#SJ?{Iv&cKenn!x!z;LfueD
zEgN@#Px>AgO$sc`OMv1T5S~rp@e3-U7LqvJvr%uyV7jUKDBZYor^n#
zR8bDS*jTTdV4l8ug<>o_Wk~%F&~lzw`sQGMi5{!yoTBs|8;>L
zD=nbWe5~W67Tx`B@_@apzLKH@q=Nnj$a1EoQ%5m|;3}WxR@U0q^=umZUcB}dz5n^8
zPRAi!1T)V8qs-eWs$?h4sVncF`)j&1`Rr+-4of)XCppcuoV#0EZ8^>0Z2LYZirw#G7=POO0U*?2*&a7V
zn|Dx3WhqT{6j8J_PmD=@ItKmb-GlN>yH5eJe%-WR0D8jh1;m54AEe#}goz`fh*C%j
zA@%m2wr3qZET9NLoVZ5wfGuR*)rV2cmQPWftN8L9hzEHxlofT@rc|PhXZ&SGk>mLC
z97(xCGaSV+)DeysP_%tl@Oe<6k9|^VIM*mQ(IU5vme)80qz-aOT3T(VOxU><7R4#;RZfTQeI$^m&cw@}f=eBDYZ+b&N$LyX$Au8*J1b9WPC
zk_wIhRHgu=f&&@Yxg-Xl1xEnl3xHOm1xE(NEy@oLx8xXme*uJ-7cg)a=lVq}gm3{!
z0}fh^fyW*tAa%6Dcq0I5z(K2#0Ga*a*!mkF5#0&|BxSS`fXa(?^Be)lY0}Me1R$45
z6OI7HbFTOffV^;gfOt%b+SH$3e*q)_&;q0p$}uAcAiX>XkqU#c790SX&E2~lkOB_G
zKJ`C9ki9?xz)+Cm2tYb{js(c8o9FleQsy}_Ad5d7F((TOP!GQbT(nFhx6IBlIHLQ
zgXXeN84Yfl5^NsSQ!kRoGoVyhyQXsYTgXWy@*K>_h02S>)Io^59+E)h
zGFV5n!hjqv%Oc>+V;J$A_ekQjz$f-;Uace07pQvY6}%aIZUZ}_m*>DHx|mL$gUlGo
zpJtxJ-3l!SVB~J4l=zq>$T4VaQ7?R}!7V7tvO_bJ8`$|ImsvN@kpXGtISd6|N&r&B
zkpY!Z%;q4z)rd81@12)8F>qUU_(dxjkWQYX4XAxEmH?G>4ruF!AX<2qpdqxJ3I!SaZj(bdjDpXdS%NK!YvET$}#ao
zW-QD5;qF}ZN4;`6g&z16w|Qd=`#4hg+UF^02UgmQka=%|A!5CjRL86{{mwzf=~v{&!Uo
zYhJ00Shva@yJ59^Qq~$b)+5%gl79Qv*Gl#YS+BO+RQrr$dmQX)o6o-P_wHC$#H%aa
z5o>q~f8c=-2(k3lb!CqFQJ;;7+2h#B$V_anm}>Zr(v{I_-09@zzZ
yco6bG9zMVq_|y~s4rIt6QD_M*p(V5oh~@tmE4?#%!pj)|0000T-ViIFIPY+_yk1-RB&z5bHD$YnPieqLK5EI`ThRCq%$YyeCI#k
z>wI&j0Rb2DV5|p6T3Syaq)GU^8BR8(!9qaEe6w+TJxLZtBeQf
z`>{w%?oW}WhJSMi-;YIE3P2FtzE8p;}`HCT>Lt1o3h65;M`4J@U(hJSYlTt_?Ucf5~AOFjBT-*WTiV_&id
z?xIZPQ`>7M-B?*vptTsj)0XBk37V2zTSQ5&6`0#pVU4dg+Hj7pb;*Hq8nfP(P;0i%
zZ7k>Q#cTGyguV?0<0^_L$;~g|Qqw58DUr~LB=oigZFOvHc|MCM(KB_4-l{U|t!kPu
z{+2Mishq{vnwb2YD{vj{q`%Pz?~D4B&S9Jdt##WlwvtR2)d5RdqcIvrs!MY#BgDI#
z+FHxTmgQp-UG66D4?!;I0$Csk<6&IL09jn+yWmHxUf)alPUi3jBIdLtG|Yhn?vga<
zJQBnaQ=Z?I+FZj;ke@5f{TVVT$$CMK74HfIhE?eMQ#fvN2%FQ1PrC+PAcEu?B*`Ek
zcMD{^pd?8HMV94_qC0g+B1Z0CE-pcWpK=hDdq`{6kCxxq^X`oAYOb3VU6%K=Tx;aG
z*aW$1G~wsy!mL})tMisLXN<*g$Kv)zHl{2OA=?^BLb)Q^Vqgm?irrLM$ds;2n7gHt
zCDfI8Y=i4)=cx_G!FU+g^_nE(Xu7tj&a&{ln46@U3)^aEf}FHHud~H%_0~Jv>X{Pm
z+E&ljy!{$my1j|HYXdy;#&&l9YpovJ;5yoQYJ+hw9>!H{(^6+$(%!(HeR~&MP-UER
zPR&hH$w*_)D3}#A2joDlamSP}n%Y3H@pNb1wE=G1TFH_~Lp-&?b+q%;2IF8njO(rq
zQVx(bn#@hTaqZZ1V{T#&p)zL%!r8%|p|TJLgSztxmyQo|0P;eUU~a0y&4)u?eEeGZ
z9M6iN2(zw9a(WoxvL%S*jx5!2$E`ACG}F|2_)UTkqb*jyXm{3{73tLMlU%IiPK(UR4}Uv87uZIacp(XTRUs?6D25qn)QV%Xe&LZ-4bUJM!ZXtnKhY#Ws)^axZkui_Z=7
zOlc@%Gj$nLul=cEH-leGY`0T)`IQzNUSo}amQtL)O>v*
zNJH1}B2znb;t8tf4-S6iL2_WuMVr~!
zwa+Are(1_>{zqfTcoYN)lg$AVibhUwnFA33`np7$V)-5~MQcS~aE|Ha>IxGu+iU
z`5{4rdTNR`nUc;CL5tfPI63~BlehRcnJ!4ecxOkD-b&G%-JG+r+}RH~wwPQoxuR(I
z-89hLhH@)Hs}fNDM1>DUEO%{C;roF6#Q7w~76179D?Y9}nIJFZhWtv`=QNbzNiUmk
zDSV5#xXQtcn9
zM{aI;AO6EH6GJ4^Qk!^F?$-lTQe+9ENYIeS9}cAj>Ir`dLe`4~Dulck2#9{o}JJ8v+QRsAAp*}|A^
z1PxxbEKFxar-$a&mz95(E1mAEVp{l!eF9?^K43Ol`+3Xh5z`aC(r}oEBpJK~e>zRtQ4J3K*r1f79xFs>v
z5yhl1PoYg~%s#*ga&W@K>*NW($n~au>D~{Rrf@Tg
z^DN4&Bf0C`6J*kHg5nCZIsyU%2RaiZkklvEqTMo0tFeq7{pp8`8oAs7
z6~-A=MiytuV+rI2R*|N=%Y));j8>F)XBFn`Aua-)_GpV`#%pda&MxsalV15+%Oy#U
zg!?Gu&m@yfCi8xHM>9*N8|p5TPNucv?3|1$aN$&X6&Ge#g}?H`)4ncN@1whNDHF7u
z2vU*@9OcC-MZK}lJ-H5CC@og69P#Ielf`le^Om4BZ|}OK33~dC
z9o-007j1SXiTo3P#6`YJ^T4tN;KHfgA=+Bc0h1?>NT@P?=}W;Z=U;!nqzTHQbbu37
zOawJK2$GYeHtTr7EIjL_BS8~lBKT^)+ba(OWBsQT=QR3Ka((u#*VvW=A35XWkJ#?R
zpRksL`?_C~VJ9Vz?VlXr?cJgMlaJZX!yWW}pMZni(bBP>?f&c#+p2KwnKwy;D3V1{
zdcX-Pb`YfI=B5+oN?J5>?Ne>U!2oCNarQ&KW7D61$fu$`2FQEWo&*AF%68{fn%L<4
zOsDg%m|-bklj!%zjsYZr0y6BFY|dpfDvJ0R9Qkr&a*QG0F`u&Rh{8=gq(fuuAaWc8
zRmup;5F
zR3altfgBJbCrF7LP7t+8-2#HL9pn&HMVoEnPLE@KqNA~~s+Ze0ilWm}ucD8EVHs;p
z@@l_VDhtt@6q
zmV7pb1RO&XaRT)NOe-&7x7C>07@CZLYyn0GZl-MhPBNddM0N}0jayB22swGh3C!m6~r;0uCdOJ6>+nYo*R9J7Pzo%#X_imc=P;u^O*#06g*l)^?9O^cwu
z>?m{qW(CawISAnzIf^A@vr*J$(bj4fMWG!DVMK9umxeS;rF)rOmvZY8%sF7i3NLrQ
zCMI5u5>e<&Y4tpb@?!%PGzlgm_c^Z7Y6cO6C?)qfuF)!vOkifE(aGmXko*nI3Yr5_
zB%dP>Y)esVRQrVbP5?CtAV%1ftbeAX
zSO5O8m|H+>?Ag7NFznXY-Y8iI#>Xdz<)ojC6nCuqwTY9Hlxg=lc7i-4fdWA$x8y)$
z1cEAfv{E7mnX=ZTvo30>Vc{EJ_@UqAo91Co;@r;u7&viaAa=(LUNnDMq#?t$WP2mu
zy5`rr8b||Z0+BS)Iiwj0lqg10xE8QkK#>Cp6zNdxLb-wi+CW5b7zH2+M4p3Cj%WpQ
zvV+J2IY@kOFU_|NN}2O}n#&F1oX*)lDd-WJICcPhckHVB{_D}UMo!YA)`reITkCv&
z+h-AyO1k3@ZEIrpHB)j~Z(*sF@TFpx2IVtytZ1!gf7rg2x94b*P|1@%EFX{|BMC&F
zgHR4<48Z5Wte`o!m*m@iyK=>9%pqjT=xfgQua>)1|
zzH!~jLG!rggat+qAIR%H=jrI#Ppid$J{TDkck^wb>Cbnli}}Mj8!tNfx{tXtDDVA6#7kU4k)m;JoI1>JM_
zq-flQ5dpn>kG~=9u{Kp+hETG^OCq!Y^l7JkwUJNUU7izHmd|F@nB0=X2`Ui?!twzb
zGEx%cIl)h?ZV$NTnhB6KFgkkRg&@c7ldg>o!`sBcgi%9RE?paz`QmZ@sF(jo1bt^}
zOO5xhg(FXLQ|z)6CE=`kWOCVJNJCs#Lx)8bDSWkN@122J_Z`gpPK4kwk4&%uxnuQ
z^m`!#WD#Y$Wd7NSpiP4Y;lHtj;pJ#m@{GmdPp+;QnX&E&oUq!YlgQ%hIuM43b=cWO
zKEo!Er{mwD8T1>Qs$i2XjF2i
zo0yfpKQUwdThrD(TOIY_s`L@_<}B|w^!j*FThM0+#t0G?oR`l(S(2v&bXR}F6HLMU
zhVvD4K!6s}uUD^L;|Sxgrb+kFs%8d8Ma>5A9p~uUO=yF*;%~xvAJiA`lls1pq5J%k
z6&-yQ$_vP5`-Tr56ws&75Y&Q2;zD?CB_KpRHxzC9hKCR0889>jef)|@@$A?!QIu3r
qa)363hF;Bq?>HxvTY6qhhx>m(`%O(!)s{N|0000xsEBz6iy~SX+W%nrKL2KH{`gFsDCOB6ZW0@Yj?g&st+$-t|2c4&NM7M5Tk(z5p1+IN@y}=N)4$Vmgo_?Y@Ck5u}3=}@K
z);Ns<{X)3-we^O|gm)Oh1^>hg6g=|b7E-r?H6QeeKvv7{-kP9)eb76lZ>I5?WDjiX
z7Qu}=I4t9`G435HO)Jpt^;4t
zottB%?uUE#zt^RaO&$**I5GbJM-Nj&Z#XT#=iLsG7*JO@)I~kH1#tl@P}J@i#`XX!
zEUc>l4^`@w2_Fsoa*|Guk5hF2XJq0TQ{QXsjnJ)~K{EG*sHQW(a<^vuQkM07vtNw=
z{=^9J-YI<#TM>DTE6u^^Z5vsVZx{Lxr@$j8f2PsXr^)~M97)OdjJOe81=H#lTbl`!5}35~o;+uSbUHP+6L00V99ox@t5JT2~=-{-Zvti4(UkQKDs{%?4V4AV3L`G476;|CgCH%rI
z;0kA=z$nkcwu1-wIX=yE5wwUO)D;dT0m~o7z(f`*<1B>zJhsG0hYGMgQ0h>ylQYP;
zbY|ogjI;7_P6BwI^6ZstC}cL&6%I8~cYe1LP)2R}amKG>qavWEwL0HNzwt@3hu-i0
z>tX4$uXNRX_<>h#Q`kvWAs3Y+9)i~VyAb3%4t+;Ej~o)%J#d6}9XXtC10QpHH*X!(vYjmZ
zlmm6A=sN)+Lnfb)wzL90u6B=liNgkPm2tWfvU)a0y=N2gqg_uRzguCqXO<0
zp@5n^hzkW&E&~|ZnlPAz)<%Cdh;IgaTGMjVcP{dLFnX>K+DJ
zd?m)lN&&u@soMY!B-jeeZNHfQIu7I&9N?AgMkXKxIC+JQibV=}9;p)91_6sP0x=oO
zd9T#KhN9M8uO4rCDa
ze;J+@sfk?@C6ke`KmkokKLLvbpNHGP^1^^YoBV^rxnXe8nl%NfKS}ea`^9weO&eZ`
zo3Nb?%LfcmGM4c%PpK;~v#XWF+!|RaTd$6126a6)WGQPmv0E@fm9;I@#QpU0rcGEJ
zNS_DL26^sx!>ccJF}F){`A0VIvLan^$?MI%g|@ebIFlrG&W$4|8=~H%Xsb{gawm(u
zEgD&|uQgc{a;4k6J|qjRZzat^hbRSXZwu7(c-+?ku6G1X0c*0%*CyUsXxlKf=%wfS
z7A!7+`^?MrPvs?yo31D=ZCu!3UU`+dR^S>@R%-y+!b$RlnflhseNn10MV5M=0KfZ+
zl9DEH0jK5}{VOgmzKClJ7?+=AED&7I=*K$;ONIUM3nyT|P}|NXn@Qhn<7H$I*mKw1
axPAxe%7rDusX+w*00006jj
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⁣
zwiG+x#%j}{0gU~J8;<|!B1@-XaB@{KORFwrYg_8rOv({b0EO#DbeQRm;B6_9=mXGf
z-x|VL{zd`)#@yN}HkCSJbjbNlE|zL3Wm9Q8HY`sV)}3%pgN>cL^67{Z;PPL(*wT8N
zUjXU{@|*hvm}({wsAC=x0^ok0%UAz0;sogW{B!nDqk|JJ5x~4NfTDgP49^zeu`csl?5mY@JdQdISc
zFs!E{^grmkLnUk9
zny~m)1vws@5BFI<-0Tuo2JWX(0v`W|t(wg;s--L47WTvTMz-8l#TL^=OJNRS2?_Qj
z3AKT+gvbyBi#H*-tJ%tWD|>EV3wy|8qxfzS!5RW;Jpl5*zo&^UBU=fG#2}UvRyNkK
zA06Dy9;K1ca@r2T>yThYgI!ont$(G{6q#2QT+00r_x0(b)gsE`lBB?2gr55gq^D3Fi&p%E(p9>U%bv
zkg1Jco(RbyTX7FDHOnl7-O@
zI$AaIl?9NJKPm(WiBP`1-#CB1QzU>&hKm)fpa5DKE{2$X0hGz-0uZ?cyTk(YC!Y&|
zL=1VrNERSA5NA2jq7FACfX4JfPyj5XXl1yv0>~s;eF7L2$>&oMqeTFT2m$y7FlkON
z_yurD1yIOvA;5C6016pyxBznGUt0kJ&k5r#;&>Jow`r)sp9R~PmK~lz$3xH%LT*1U
zJdOyABZ3!FvNoR*vN$5ykHS8f`jA4zV+|L}i1C4`B2c{R0;UdYxaU|H)2avz@
z=mEYc|2S<+(B2Tj+FkX+2D+yFI!k9lWMA61DJ{)e;lum$(;O87?vGJJe!KtK04+N_
zI*P~t@dUb>9Xh{dbyl{-ZQ(UMgz7$|QfL5XSPkskt^NgctYC#;4WcZB1@%@wy@2t3
z2z0DI7&%b$*Aw~abe?GxE`ez@+6hOh-6*8fHRV{1os$EL@}uUZeG4h1&Be`98q*7j
z=3-v+lhIjfWVo12!<>%V^a6lTgW3+_#W6n|p*~==zOH7z$0{LSZk(Tpd7EaD04hnA
zL;#fxS0aD{`5^&D`}>0Uq?byDD-l2=!wm_bLcUl4gc(%
za1p|itVANvFF>hghAS07Im1;IK;|b*W)}VDyI;BIp2=K*yu2a)j?B|f<44NI$NbmJ
z#dE0>jI$fMr&@>4kN8MLFb4&2O9fEKaQg%(QO$4_1rVQywG^CmBLh#}_7gKW3vd?|
z2?1^&KWq8}8I^_S0|)MowU_pw$q@nl@Nkn$z>BQq_KA^9yaR`(R3u{{Ig;cwt
z@AJ^{ODQCm^neroM9nKNUAXi9RCK`OsP_LuR0PUR(YZCCX5dNF6VzcoK&=b^r`W?ltt|*F
zpkoae%ZT{C1h~EcFui~b7fF`vb<<~j_VquuUA$}QqIKYELPp#;{u?q8Dz}WAG-(3;
zjrm$i%7UbyZMM(Y{>!uJ#vNB?R~B{6Htp=>e*<{fQQ5W7V(1coCWlOON!MzZxhum|
ztZBQpGR
z;~#ur^&PockKdV{Q6R>o`Pl{0x!DEbpZ7y9Y;*ZvE!*gU`V1W3znva{f=?WO5I&>B
z&hw6}tjECtaghm5z|C#%M;Yf_*pI^};h}Vl=^r9EN=tVDj86D;C$jIJ?K7VP+00000NkvXXu0mjf
D5i!M*
literal 0
HcmV?d00001
diff --git a/demo-subunits/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/demo-subunits/src/main/res/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 0000000000000000000000000000000000000000..459ca609d3ae0d3943ab44cdc27feef9256dc6d7
GIT binary patch
literal 7098
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
literal 0
HcmV?d00001
diff --git a/demo-subunits/src/main/res/mipmap-xxhdpi/autosize_logo.png b/demo-subunits/src/main/res/mipmap-xxhdpi/autosize_logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..e12c09b2ead445d340d1edc9ec913551189d86eb
GIT binary patch
literal 31276
zcma&OcT`hp*FLP{DC1ao6cwb!hA1tA(o3RaK|stXQlv$VN+%#aq^Ky0NEoC_%P0cU
zLFs`+YDAjU&;tYr9nuI1Dc@n{dEWKD-}<#bT*q}M=RP_2xzFC$zOHK%`Ns{jeZR{8
zx^3IGedgCL-`ciq`?0NmzwFw!ZQG&nq9?%NXV;5X7q@LIjoBl-w{zRJ3){>uU%VZ%
zeW`ADnK#uYqnbNz&FkZRKGn8B&~S|2bkX}99bT_=cW+D3-2F7UYi@5ZT)UTb?#wm0
z{pMG-Z=Jf`cJ1QpQ$^1%T-=*|OfTI}wKdu+yfivmW#nzNBez^!&I?|_%{ng@)WQ5|
z7+A15qaD}9@4|JK^B{}Mz2k_QlMhU0&cX~=$HP`lIX^B*&p3K)=1GCjYXu0r;cWbK
zn7P>cd7P=%P}ZY_$Hp_?J)R`>JLX01HeXx`9z)4we?AmACMt47=9-tstysl_Kl-!w
zlY&@GpI($|F!&^SR$`U9!MxW3dB&>|9L%*j{(pr4Z=5xu|ka$KlRW~obi)rjRp
zjihZ^>gkKU37z@9or3kgHU4A`INVhYth-Kxtq
zPdrGXHm45L{yp??HtxuKsCg)qpTVnTP&}@=^-MkeTCL?C{
zZI+ix9tIsts_*%!P3wI20J1+huhLyyv*}zpJ}%6u+kGw&r;Dc+&ik?Bz+ppeSQXP7
zATM9)5f|W@T;?nIR878^f6Z{UUa%SVlh4+OwCtI~%I9
zo1#rcnV11X{K*(^hQa9-|Dfw=n?+rv%tZ*LDKijH|ArVb#7AzXDapY5QC5_>nl5do
zTRPoxv{q(TdVx%M`o7r*cdoLp
zeIH7dj58T&)X+UHEFn2eA{NnN$15cLfskDT72Ec~s>OF4baB2*Kj%O$WV7tXZWf{n
zL-NIa!d#)P$hOv|_%PfCI$P`jUMR0{z#PBxCbCfz_{4fD1sKy
zrdc_s`yrv_d-3)xb;1{GDWtg_B$PQhear6doiX8d)qTkNV1uHW6@X=CX
zGN{rKrA^Y86z)u-Sk$rA8t&h_@9*fhwIP9_Ur{v&QIBd43flV&ue&^nkWHh#
zO&MEP=^6OhfoaSB--Wf}6j~2lcYLAvFtQ)6OU@!&n20iq!R6yR+!yoad;X|lb?2nw
zqGi+U>Za@;HXt6;w?`RTZ^odk*$9ypl7dCl<%-Pea`~m=>`DZ=bi7ZTIo>C<$Mues
z((I8QlAGY!oMoB?vYYJo-H{XLvcn>(3uW7)E@8eI^+vWp7n4_AyyuN|MSMmqtRR`4)==lSVx=_7ppSn+=O1r{J4XiG?`_72YrhzP?O>}P*l@&(lK2S=kQXw!5A{HT&Au`hV
z-(YnQFw8fh<;$OPmal{l&qYQdZz^k7l?&xwzKrIs&(b8DHNisZHol~f^EMibcb&8k
z+4)ggP9>I?BU8H(2Dv!|n%2(tHvMBFeyZsKwH`U&9FnWbvs$M4Q?&`7WH)0(R?%jn
zDkUz$WFU%}%g<*apf|xS2(q8?EG5Je=^@S&4#N7PmPPQT4g~^n
zS98%2?-{zabt;8LlgTDLLuG}Rc3+C-L!5;v`?1Bq(J#Pbz|+V@7I=s>;Ap3qp2AJR
zQ=5zDCwRc|u$h@>0^^kp+O>~#StN$f+d
zsDI$*t8njmqd(@Eh4*~rMq!8-n1wL$sT4#Bd)CK=l`fz+o8)qwqtMnwIp$jovubPs
z%(5JjrqT&oZXB~~lH#(i${SD0!YiDQIO9ZIutk&5Y{$@@&v;8?TZqyh1-`Wh+CBy_
zQt**mku4-|Kbq=$-DLRhSeY)vtaVM5V?-0I|9>A}Vc@1*^2=3by~2JC>NI2sL6HIX
zPI(v~@r6g?%J}QEQ1aI$B}pNrsXM4BY4*zkpKzqKt=ITId16>}R5wJKolJ2eysk~{
zzp?Yh*`-M0_TG^i0RSwrdENg882Uu10Zi>cp0~3Y^(p1dx1UBK)TSQT9K8tkI!I9Uq>YTPlymBFzRX#WmMdntOO
zl=z+&NPt0HeFbh^`Iw?F|HgZq-@Db_pQV?5JF)OA>NnMw8i6H>zbu_dFV!yd@c%2Q
zkl>(<=qtu0uI)5q_yOqGVOvE4efS~(0!q;y-#xBnK0;`)S_XI~
zvle7vBZv5OuB6dJG-zRd8iiF#n5>XA*pX7=rvrS56a~SM;T8l$6desaa9n^M(XLsM
zQMRTnUM6`OK)y3@Ea%`c?#p>izO*N;{m5UODYimSQ$CzHaZKa0we%l-tndkkwIloq
z#T$zvzLSUQ?WKNyr#<5*KxvKcbx=avxRBzk!iTUit=i7h;r<4NJcj>SB?;#~C$%ph
zw||bGuLnC`z)`H^Ox{O8uwHK}Ir>UD;H5tCx5gH27*t1+`60ms-L
zNgn1LgJbj~bY6+)`7ufMFHR~{|3H)4FNuK#_U;B0zeq<`C>~J-fCzoGmv;`*wu!
ztQqzVv4Y}(iUlwQ_kNm@{pxX#u)Wx_PQSffmT;ZGDOcxZ_+&XRB}!bLhm841+sJ%Q-gA>iByqB=5uB<_FH`gXX4&FeZ5%<
zN*ljF2slR-wBt>*V68;cG{k;3I+|bV@+LDp{X2NRm9h0`(YIaY
zrdl}fKRl7*FbX*UKW8$fc(!?l?qs=s)f>bfq(Ihd%a~`MX>Ml*dHmR;iuQb#I=k9e
zoBL&+f4x7aIQ_Hr=7@~Bl2(3bQNRzqXdP^x!n03{|rK{7sH}ImA9|=3EKB4Y`V`kD{lp`1*W%qrS4mgl&urxCc&Ze&PNbp`W~Y0
z8`7I1Zla~)Hglny3G^okG`~^u>&Z)q*H;u27OlDuCbx22$g|dNN8nhfbJ9T?79PZ^e5qPgLzV32o^PG=3-*HhyEm
zfM9>Vb1QPsdWIpzblKz{@yJK8a+kfjG7X5@$;HccbaJ4u_e*hpz|Me*)icX|52dOH
z6K|N@{oZI+K*=t?$C2(iJpg
z$>{Rw`#B4-FVj6|j)L`XUEurKQ`ZtP*SXJF2~<(o!DxNBxcdlhVezxTV_3n^Hs%
z(|{6d?zhGp9j-12&A^iU0ZY3Js*7R553xI4}`_Po)r;f~-8jnLP5RqSV=6?ND
zvn{geq4Eiz$X1WbK;5+V0o!NYsdjR~tZ?haY~PcQQh5VjXo~@_*R<;a8^1eGUl(}i
zY`#2aUIDUgf*^h2l4XUC12=p2Jh;Fk@i)>|qP|78#<;a6Ud
z3!i#(6&9P9Khb(TnZ2GDa^|kg(eEFxaQta1cX!KeNcEsLzfbK>KuMIr>-xs4;$*Bz
zuo}T>DOos}iOdY=$_*m!YA7!K*DxBT{{Qx6Xx*-WQ89-{L)w1uk+)CrUEDcwFWs)u
z_n{JX!&+1{UzJT)q(p5DPfp<{&6K+Q6hqs5h}ra%41Y!N)an)zTXZ_=PikU+^MACl
zkY7Ar^E~os*hpB|-M_)tzLlpK?C!&h|B4G#3|$;vm&bPp{}0Gjyubs-{wECke;otU
zyP%YtmTAtX_rbdQo}+bS*so$`>Do|MYoi+Zxh2HUQ80D=XkYzR(I*wRYL9B16t+VZX9-U`8xASC3H6AS
zQf(=-x^8=tl^gydu5|}_HjbPH?u@?(8vFz*Zwi+|44*!oe;n)b#P`AKGh*&ei(641
z&AWh*4W9z{#Grgjw*r7j4$QTlx(pgA6xx%UK*qBD&!e(pQlhyhi~C@aG8nH)7D99o
zx8!tNMk^8Gp*Ijydkd;^gHt;8J%(#3EcL%>Rb?;uG-MBDS%~5dR@(Ob`CQlGC!N=U
z$0r9T&Y_A-uOfTVgp=hZ$|GBqJjkCUFl-EcZqv?`tFvM|icsk5Dm}ntKB3LqP$o0qec+TyZw0Z+z?K!0DcdP8gJ2Z|`n25UR)1N`991{6x5?>H~GH=qrfp
zrp5bO@U1c2)&$U-^t>FC$M@5Q=9fVF1hgH{sx2q?n+*8O-F^X
z;UZxd`1j3=?&&(#Q-~WSXHof&gKG%sMbu%a@mSXlDzL6orX{@;V1CTeKtHPbH44d?4%M
z8znhI>)>O7B{y+-E=#IDW+FLczoRbsHjGrqPa-_7z?+Q{fZ{HOmd7uJ;*Iqdpo$FK
zlk@|@i4~FePO7eam5VXfVL1X6%bbD&x6JgkExn0<88cIVbFW5z_iNX;W91v#Mc(@g
z%sVEM?W1KF=Vg?huqM9k{Cn}J{J+?UN$Zk<-A(2y`PvCISMM=(_znfwpys2ae)kb=
z1?i)kiZg663SjDu{Eb6px&Oh8`h6x0`CxR)K97=RU&2+*N_g<~n
zMpFZ>kNW>Z<4uO{`!{cw?;R$MpCo1@rZVVT-#!3Y9~6ysKv_Z`35j#~_d0x@Y;Uhb
zGQrgkqJS!)IoA3fTQQ1$uyQ&|^eP-SsH>!&z1?oW4>X1a?&7z)h<|g4{S|dmlr`sG
zZNDx*p!x(#eunPfSD&a>KbH16EA{8eU&5>#Uf-L%*Nog(1q`qz|E2{Dz7;YNipsVq
z-{&A7wq(T)Qc4uQJzp*xkt$}QJ`pEsduym9!PzhhZdFJSZV))$A%
z#z*FS3C)tK($RfDnR8`5H|FMEBzFU>K8>OLOQ*Muq&w@iRf7cCU&I*kxn&UxLVdj_+FmQ6Zr$LdqA%$s=^%j>4
z=YSIbByy<&7@RQ%2E~)flF`F|>MvL6J
z+zRf0=&Bkj)_&V>m49IU{Yr$Va(CT^Cny~~Gns;KTT17lV0dbOB)}*niSvxcA&fG3XeAGTM4xGaxv{Z9^U_5TlV%wJDP%IL>1)HD8!DSj+G
zt!&g#V=sQXibVwv=c>B-A2~_Ey!%mgiI_-xZN|_2hZ`*n>5Br=ku5sUWx5jJY#sgP
z!L>iVeL{;bU9CLt6|fMt|CiwLPr3A6%;w>Fr!Akvoa`@Ak2(X2DdsEYA%
zziEc0{!N)wwIKPqR?y8J>mtI&dqxoIS6lg5!i}Wb4dK^dQ`6o$Rf=0Pn$N7i^T4^6
z`62C!wntl{&-WK6m$o+Zzc1$Sf4bPZLl{{qetnm*jj?%h`p(mx_{NHzg3^~+8OT|b$LDHig9uckSt!r&n0##D^_#riVT}#)_7v76MNOGI
zs;VeeJr^onbj4*l?&V==e2J%l?e#`X!}sP7;fFyQi}u>lpBSX;zXTT@zwUj9dP0*`
zz6?~AzYtp<$`ZOUyh_N;m6i8WaoC!fovtMsMuXSOh@eezaVtULZB)u#H@x=p!AA_6{7^!UAUONa@In8f4a?Fl|g7Y$XnxtP@X=4$fA_{?CBEtqlt3gJu
z)JYYh)AEWb<5r2|bD(a;dOC_Zu(rhY-=8T!CHmVZ!y!C2%befPqmZ1KEBYnM0Ey&nSZO2jLmz2IwI8y8_IME4Et;Oj9<
zQKbMh%ITc^3~{A!&IdwN#0}IZXP(>09E|KJv3m1+Y|M?07U8!jfGVPElbeC!9K;0*
zyl8$bhzmTy80IHgzP2*k6OD2BA$`bQ>dQfL2aNho=!lrxwE-E3ZANJJxFcClk4d<&t3FZB0q*{uK!wIZub=+4VT
zWjo&gjGqM9Z9neG_J5gO0@TdJEBV>9@4S?Tp85~-iOB^BgOweO;`d~
z*XSou;e!bP7C|P5g_D~Q03|KBk4V+MnF;gRZDtx!3cS2kM`+P(8cr~uLo1l2yfN55
zGocVi?o~v^^;=2pB3=jIgvoCtc8>(?uWMbXa1#?G4R*w0ELXhZ9zzZpu(fF2^TvxD
z;748o6wYY^IiUMcj4+BseXrL)jmt6QoX#KlK!;{me#%iq
zBUqMc=47dlyWPGe`ZS$$pO|DjO{G@2_+KX%VzU>nKsGcKp)28oU0}(u<`~gu
zv#FrADB_%%-Ibd8D#Wr=vWl0cb!);ALQ^$kT#ASjBe7t{qr&4zbyt741)*d5_5LVf
z9lr}+>W*u#+ocouvQ*G&G<#u7KOTDoT4CeX>VeY)#W;OTBu9*Pi*Wse@6b~09pD^S
z?A>$!S;wZ9H==yQO$e4u!icbO{);Jo>~7-R$|P1OO%bxC4xBBx^1J?2qw^P)%GC^r~oCPQfEUiB`q4R^XGF1Wyt|B9!J&5BzS+xk3W;j
zdqdyK%HP?iX|&NZYX)WVg~L5N-0!LHD|?{ZCk62iPl~o|e7SXQ?OY-OvlY0ZmTh$GTDi(o
zqjh%s+tteB7gJoqY{nk4XrUvj#3U0*_ZQG%b@w@K!u~r(k47@dOk!m)nUi1XC9Scx
zl+Dk#g6?Wywp62ZlqKmYl7^jb_0^wcjlT1~%97E@U@C(&I<_%w*}HSU`kNxJ=P&b}
zM;1&m)5YWv81JN{QIbkVqvBVy>*foqq-I^7yWGrw*GWF~8SfdnRq?C_kpbDY5V@t)
zQkNzDH1P$V)ar))+kVztAO0=Z5~Bz;1A7XTN0!_R<}t`0=0?{H4Khv+MffW!%)ELA
z$Pne`0O1}@9uYyLd|jTDJ>B7$vbVHU__pN`y!K~XEz;W?OEHjtUdI^SZ%S=3eCx`0
z>Ph176uX|+qHa}NLth|mPYI{HM7S~8p2N{(6);XY^rFSJps$tK3F|S5XqG4aynnC1
zX&Re%v}EF$;IM
z(z97AYRdi1OnyYfQZj1I<4B=~(cF~!e6K2C$?)`Zr@bTn&TN5)c
zy+3Z8tz4UOMLlYN&4vZQP%i={qrq^W3=E+G*VTDI=?k~};`XrnqAc8;04W7lGAh%`
zl&RCgvbl7r!glpZ)3Ik~r_Jx=`kHCI7{zz9h1$a3_nen?7`$_Lo2Cfhx!p$qLKnfA
zu<+aquN}UyMeyShH~M2!>Z+QN4s
z+y8nI9iOmrdaPugSf}jOe(Wgxbb#Gme-&Vun2FeFGt-6pCvkb$X$l|`
z0N_UaL7Ck`;(LQuuncdUp0WOhEU$1r{WEPdE~dS6-$o%8U&gPTmEpmo$oi5s=ik!*
zkO!*Zpx;!}SG|HBw8x+ycV{2rcVDeL0-X(u0lYWM_P{pugM7baXE19kO_1H*L0t_If%7OovOBjsL)n&`FPs07sz6`ANHLF)&x3#@}
z6{tPceHF-BQ;on@s^mB~YNM_@RP;gXz6S5R*X37WKYxV#qxq@`SSK>u
z>uS}>mRbugv)<2g?@;3SId)D&8HQlEo}n0LiR-QqMEg)Wk5k`D?k0+NXyR>(sjVr$}1OO@RQ0cN%k;BbVJd+eQD1zfY10_fGhF1
zZ^<1~MK8Z+*O;Y+dGKQ3k~B_|CO$P`qYlcCTB*cJ8pjBjrJ|Lj9%J}kcid_vB-eP6
zBSU0BM69K3Deub|-owXLCxIFNve7p+v*(tM@7WUMYab#^nate)_0nt+?gTtOpH_xp
zLtdn2KaiH*2DQpAMsBey^_wu`<+9YnqY7bR$5x)&)lEmNXwR=cPme!B_|ikX>kuNh
zie6PE24|Bui@J7ea{`t@qGbglhO)G%94jsof<;M=Mxx=Vae!7WH~o#LC71uUfbPKR
zp5+-DLxyMXq{7nJ{`{!y`Jn+Sl<^0zfHS=R5{)PLO2DLa2*G1e^l~)cQlY2Yx>OZT
zh3-p@4KiHg8;{R;7Z;iWpsW1wnO{0IFF0wnE@YoB$%+727NdV;%Pnj}LD1JqijFH%
zwq*X3J&TZDi;=;m07`kTk)vb(V=v?#BJR_Lql+MQ}^}PHgYC-xZn@d`#Jk9I4yHnj23zlY?
z+0;B)t__GlUvir2)P3$KdPUbqp~XCG$z4tRl+9Qj+&VlBN>Nf*R(w1vNK-PVXgeUdrol1>>zCm6{m-rQR{evP
zMqljtQzofiN55h+S68nPT2A;z3&5rJ;Kb*PzNsc2Ine*-vL6y=IKQz%A@N#-_ZmU`
z71z$}j)WL5QkIQ5*l7`5j4J-}{P0tNi@F))Jr8hEfrovqD2qLC8%o&YrJB&~w@R-1
ze)d;1X87J;ZS^ZuWf*MvVZNOG8v|tcf2Al9$zcOB$_ciAPQoke4^kk@5oSS>*;&~@
z*|abV^5ChAT~U9Ky8|5xIM3E^>_x=|I^_dy$HggXfZhzx(4eT_A5RZtdK#_Jx@kLZ
z-8;QtPtw*0D9j=)_Vb69N$A(HQqqgnEJJN%dlIEa_>X&QcXZI)FDGEb+oO)lvuH?zmXH
z&u#$azo4$nSS8ttfa0;R$|JNGvGF~3Us*}4Ecb9y%=VTR{?|qz8zP&t;)k2
zaHNjfjbs2tFUm?MdoWk@TH>23u>k*G8RWZow=f07r54I^>Far1+YWdzl(v?ZUnAPA
zJhF|;(8oD{f@k%d%SupVvaI&)?rItMi5uNTel)vtse<22wI_N=@@FZK|4a}M+IZA1h4!>?NB0KTck!D9cMGLvNKsQ$M@(
z`V|6_Y9o*sikh=ZM`p=u-XVl|`tZ-qcLJ=HjsEQrZc)lJfKXWT*-tg+iCx-(V~pew
z;F%&=K;#c8Yfs>x#RDa``>*Gly8pzqTD@fD#bH=E3icJ0My9pHWMY53(es^ayKC3(
z*ku<#@-kiQO1Xrgv?jdVd`^$9J_l`P8lKj=c`w31e(u>9|24Y5k0$;`#|N7>WOJsL
z|3mC+y8m@2!4{kFW2Y-)g2EVe0IYCV+SrVYXQ2lur^+P?9I=XbSL
z2)2mhu|yZm;#q)8?=qx+6i)eTA`2w%r8WuUe+FI`yXU0+Fg3%u>!xqG5JJiTlfVMN
zjYn2`<-@4~PQBjq{VWf_i6{5B;y+|dF4{dVV0_BTm^#&Jbh;l99?TRJZ1LzVDWf}Z
zFBJn|bHD7p9#oD4)84bP9S(-9jwFd6UY8u3HJk%oZEV+f=y++kr*igWM^ZNRot!2%
zU%7nJTy`tLL0TNjJOOKS0btTa%#!zkf`4RJ<|vm~@xJs5i1)-bCvZ$F$Eb#Q%)d6N
z6|^21TCHZPpTkq-VD8BpGiP51EgAMqlYUmr$%HniAy;V%A0X8|mjAM$Gn+GRE
z#ltXl+!!}|AyUFo&|2vPSF
zdHg|LFy{mui}oF@iSSf^X;R>+slXdX{8paJFh#ApT_N%IszO!1M@5)89N(3CLBg8|
zQ!hvYm)6Ed+Sm>g>skkx6Uyz>EZNK$D%JEf-hdF;PIFwt%ndIg{pRbLpZ$tWcUh;R
z#xr?%+v%{bzprBr26`p{F+u5v(umMeqw5Fn?bMNUS>{u5&dCCYKG>iB6aHWt1
zV@>GVpgyR+=+8mx-mdI(u9`>PtKVs!Gz?z+>2f`G?~$UVcs~ol1CD=Ba3_{s2+FXG
z5|yv7p59oBs%}wJC={!?+we}$(wkf6Ryjfj=}q3F{!`(P9$5bE-8!NP)C^7r4Q@9r
zweLMX2_J#{$YbU#m_ac2Y!vXk?Re1-Sz8m}^Y_KczR|^sAh-UFo02Q@!5N{+of%wofrWd9y
zZ4r(pn+L&WVR!DeLiI%D(Vjh(^E6ke7xc%Yi1E^2<4ZOlweFCU0g~z`-9QCRud}%8
z?S?8#BzpvK#Agold6$)B35D{1{_ytoGSm+#_@6oZpsT8v01y
zA69?+LXz2Mm%Z;p%=@Q^5eUwQKtLRbl%{B#pm>%hDCNea{qlYFY9LLHBl__}CChxB
zv`cu$8Gzz@IX(|lLa&oI=af#6=v(kUYPRy`tpWe;OxcYsV`N$9#a?eq
zS{TbESBAS)O?9f!bSLjwqIrf_VL>azyM;d;WGXa2RBGJn%ka36d>kK9fS9t@9PVQ)
zTL3O2Ek4k!0jLQ8x61!zE7%4C-u)}7D9&1Kj&lZy7x?)#kK4ZkbJu3CNz)gXhB;FM
zpi4ogBs4s?)u^*RAZeDrAnQyS7){eRlnjfxDNE`a{y~=42ecKp=8W9)-{u^@WKP3$
zszCqNaRItkmw?{+{G`KyX~&>HqkJrjn~}|qm=?4k4+x9a0LHwJi>1AeS!US4an9IZ
zPhpMvD|-wEJ|E4I3u+me3V#r2jT@|mNfA2#LLbR8u&tRgSv{K+D4PwH6m+M+)ibUf
z8Er;;gKI)zdmiM!w=d430yd@os}UF4sp}sc^J%$U3zR=$M~_<8@kImUJ;8pzf0&R7
z+DCcq{`H~itCJdzQ@lIeO&e})Hr=7w9%cd*c9Ztn01&H*4A*3C76?Rgb*|YU#opcw
z(j(d>we$+5B-r)UA-`gkr!FUp&+TS>aW4@y^lg4p&6wpcgV9S~sdGoVN=oV(8v7Rq`Zs~T(j
ztkz@t;fZ@g0lgMatqhR+_2`EhJ42#2F8SP8knxW$4jZsZC;e;FcTm!NKHoVVHIB+$4fINXBVtf4%r?KCE2(gOzuI~)KRftbs9
zfou%x#lL$3Bw{NQgJ}R>j@R(9LyO7E4&0oUcTz!PYawqJ4