From cdd3d43ae33321528ffb6a88096061f31c50dc7f Mon Sep 17 00:00:00 2001 From: Administrator <981964879@qq.com> Date: Wed, 25 Dec 2019 11:28:10 +0800 Subject: [PATCH] init --- app/build.gradle | 133 +++ app/src/keys/xueshibaoos.jks | Bin 0 -> 2552 bytes app/src/main/AndroidManifest.xml | 203 ++++ .../aidl/com/info/sn/KeepAliveConnection.aidl | 13 + .../main/java/com/info/sn/MainActivity.java | 379 ++++++++ .../main/java/com/info/sn/MyApplication.java | 447 +++++++++ .../java/com/info/sn/bean/MessageWhat.java | 6 + .../main/java/com/info/sn/bean/UserInfo.java | 124 +++ .../com/info/sn/jpush/ExampleApplication.java | 22 + .../java/com/info/sn/jpush/ExampleUtil.java | 133 +++ .../info/sn/jpush/LocalBroadcastManager.java | 263 ++++++ .../main/java/com/info/sn/jpush/Logger.java | 40 + .../info/sn/jpush/MyJPushMessageReceiver.java | 47 + .../java/com/info/sn/jpush/MyReceiver.java | 129 +++ .../java/com/info/sn/jpush/PushService.java | 7 + .../info/sn/jpush/TagAliasOperatorHelper.java | 338 +++++++ .../java/com/info/sn/jpush/TestActivity.java | 32 + .../java/com/info/sn/network/UrlPath.java | 22 + .../info/sn/network/api/HTTPInterface.java | 239 +++++ .../info/sn/service/APKinstallReceiver.java | 19 + .../com/info/sn/service/BootReceiver.java | 23 + .../com/info/sn/service/GuardService.java | 67 ++ .../info/sn/service/MyDownloadService.java | 159 ++++ .../java/com/info/sn/service/StepService.java | 68 ++ .../main/java/com/info/sn/utils/ApkUtils.java | 454 +++++++++ .../java/com/info/sn/utils/AppUpdateInfo.java | 34 + .../com/info/sn/utils/AppsManagerUtils.java | 146 +++ .../java/com/info/sn/utils/CommonData.java | 28 + .../java/com/info/sn/utils/LocalAppInfo.java | 144 +++ .../main/java/com/info/sn/utils/LogUtils.java | 40 + .../main/java/com/info/sn/utils/SPUtils.java | 198 ++++ .../com/info/sn/utils/ServiceAliveUtils.java | 24 + .../java/com/info/sn/utils/ToastUtil.java | 65 ++ .../main/java/com/info/sn/utils/Utils.java | 864 ++++++++++++++++++ .../drawable-v24/ic_launcher_foreground.xml | 34 + app/src/main/res/drawable/background.xml | 24 + .../res/drawable/ic_launcher_background.xml | 170 ++++ app/src/main/res/drawable/mask.png | Bin 0 -> 2119 bytes app/src/main/res/layout/activity_main.xml | 190 ++++ .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2963 bytes .../main/res/mipmap-hdpi/ic_launcher_home.png | Bin 0 -> 5998 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 4905 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2060 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2783 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4490 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 6895 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6387 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 10413 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9128 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 15132 bytes app/src/main/res/values-sw1024dp/dimens.xml | 419 +++++++++ app/src/main/res/values-sw1280dp/dimens.xml | 419 +++++++++ app/src/main/res/values-sw1365dp/dimens.xml | 419 +++++++++ app/src/main/res/values-sw320dp/dimens.xml | 419 +++++++++ app/src/main/res/values-sw360dp/dimens.xml | 419 +++++++++ app/src/main/res/values-sw384dp/dimens.xml | 419 +++++++++ app/src/main/res/values-sw392dp/dimens.xml | 419 +++++++++ app/src/main/res/values-sw400dp/dimens.xml | 419 +++++++++ app/src/main/res/values-sw410dp/dimens.xml | 419 +++++++++ app/src/main/res/values-sw411dp/dimens.xml | 419 +++++++++ app/src/main/res/values-sw432dp/dimens.xml | 419 +++++++++ app/src/main/res/values-sw480dp/dimens.xml | 419 +++++++++ app/src/main/res/values-sw533dp/dimens.xml | 419 +++++++++ app/src/main/res/values-sw592dp/dimens.xml | 419 +++++++++ app/src/main/res/values-sw600dp/dimens.xml | 419 +++++++++ app/src/main/res/values-sw640dp/dimens.xml | 419 +++++++++ app/src/main/res/values-sw662dp/dimens.xml | 419 +++++++++ app/src/main/res/values-sw720dp/dimens.xml | 419 +++++++++ app/src/main/res/values-sw768dp/dimens.xml | 419 +++++++++ app/src/main/res/values-sw800dp/dimens.xml | 419 +++++++++ app/src/main/res/values-sw811dp/dimens.xml | 419 +++++++++ app/src/main/res/values-sw820dp/dimens.xml | 419 +++++++++ app/src/main/res/values-sw960dp/dimens.xml | 419 +++++++++ app/src/main/res/values-sw961dp/dimens.xml | 419 +++++++++ app/src/main/res/values/colors.xml | 6 + app/src/main/res/values/dimens.xml | 427 +++++++++ app/src/main/res/values/strings.xml | 6 + app/src/main/res/values/styles.xml | 11 + app/src/main/res/xml/file_paths.xml | 9 + build.gradle | 27 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 54329 bytes gradle/wrapper/gradle-wrapper.properties | 6 + screenMatch.properties | 54 ++ screenMatch_example_dimens.xml | 431 +++++++++ settings.gradle | 2 + 87 files changed, 16373 insertions(+) create mode 100644 app/build.gradle create mode 100644 app/src/keys/xueshibaoos.jks create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/aidl/com/info/sn/KeepAliveConnection.aidl create mode 100644 app/src/main/java/com/info/sn/MainActivity.java create mode 100644 app/src/main/java/com/info/sn/MyApplication.java create mode 100644 app/src/main/java/com/info/sn/bean/MessageWhat.java create mode 100644 app/src/main/java/com/info/sn/bean/UserInfo.java create mode 100644 app/src/main/java/com/info/sn/jpush/ExampleApplication.java create mode 100644 app/src/main/java/com/info/sn/jpush/ExampleUtil.java create mode 100644 app/src/main/java/com/info/sn/jpush/LocalBroadcastManager.java create mode 100644 app/src/main/java/com/info/sn/jpush/Logger.java create mode 100644 app/src/main/java/com/info/sn/jpush/MyJPushMessageReceiver.java create mode 100644 app/src/main/java/com/info/sn/jpush/MyReceiver.java create mode 100644 app/src/main/java/com/info/sn/jpush/PushService.java create mode 100644 app/src/main/java/com/info/sn/jpush/TagAliasOperatorHelper.java create mode 100644 app/src/main/java/com/info/sn/jpush/TestActivity.java create mode 100644 app/src/main/java/com/info/sn/network/UrlPath.java create mode 100644 app/src/main/java/com/info/sn/network/api/HTTPInterface.java create mode 100644 app/src/main/java/com/info/sn/service/APKinstallReceiver.java create mode 100644 app/src/main/java/com/info/sn/service/BootReceiver.java create mode 100644 app/src/main/java/com/info/sn/service/GuardService.java create mode 100644 app/src/main/java/com/info/sn/service/MyDownloadService.java create mode 100644 app/src/main/java/com/info/sn/service/StepService.java create mode 100644 app/src/main/java/com/info/sn/utils/ApkUtils.java create mode 100644 app/src/main/java/com/info/sn/utils/AppUpdateInfo.java create mode 100644 app/src/main/java/com/info/sn/utils/AppsManagerUtils.java create mode 100644 app/src/main/java/com/info/sn/utils/CommonData.java create mode 100644 app/src/main/java/com/info/sn/utils/LocalAppInfo.java create mode 100644 app/src/main/java/com/info/sn/utils/LogUtils.java create mode 100644 app/src/main/java/com/info/sn/utils/SPUtils.java create mode 100644 app/src/main/java/com/info/sn/utils/ServiceAliveUtils.java create mode 100644 app/src/main/java/com/info/sn/utils/ToastUtil.java create mode 100644 app/src/main/java/com/info/sn/utils/Utils.java create mode 100644 app/src/main/res/drawable-v24/ic_launcher_foreground.xml create mode 100644 app/src/main/res/drawable/background.xml create mode 100644 app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 app/src/main/res/drawable/mask.png create mode 100644 app/src/main/res/layout/activity_main.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_home.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/values-sw1024dp/dimens.xml create mode 100644 app/src/main/res/values-sw1280dp/dimens.xml create mode 100644 app/src/main/res/values-sw1365dp/dimens.xml create mode 100644 app/src/main/res/values-sw320dp/dimens.xml create mode 100644 app/src/main/res/values-sw360dp/dimens.xml create mode 100644 app/src/main/res/values-sw384dp/dimens.xml create mode 100644 app/src/main/res/values-sw392dp/dimens.xml create mode 100644 app/src/main/res/values-sw400dp/dimens.xml create mode 100644 app/src/main/res/values-sw410dp/dimens.xml create mode 100644 app/src/main/res/values-sw411dp/dimens.xml create mode 100644 app/src/main/res/values-sw432dp/dimens.xml create mode 100644 app/src/main/res/values-sw480dp/dimens.xml create mode 100644 app/src/main/res/values-sw533dp/dimens.xml create mode 100644 app/src/main/res/values-sw592dp/dimens.xml create mode 100644 app/src/main/res/values-sw600dp/dimens.xml create mode 100644 app/src/main/res/values-sw640dp/dimens.xml create mode 100644 app/src/main/res/values-sw662dp/dimens.xml create mode 100644 app/src/main/res/values-sw720dp/dimens.xml create mode 100644 app/src/main/res/values-sw768dp/dimens.xml create mode 100644 app/src/main/res/values-sw800dp/dimens.xml create mode 100644 app/src/main/res/values-sw811dp/dimens.xml create mode 100644 app/src/main/res/values-sw820dp/dimens.xml create mode 100644 app/src/main/res/values-sw960dp/dimens.xml create mode 100644 app/src/main/res/values-sw961dp/dimens.xml create mode 100644 app/src/main/res/values/colors.xml create mode 100644 app/src/main/res/values/dimens.xml create mode 100644 app/src/main/res/values/strings.xml create mode 100644 app/src/main/res/values/styles.xml create mode 100644 app/src/main/res/xml/file_paths.xml create mode 100644 build.gradle create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 screenMatch.properties create mode 100644 screenMatch_example_dimens.xml create mode 100644 settings.gradle diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..362457a --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,133 @@ +apply plugin: 'com.android.application' + +def appName() { + return "SnInfo" +} + +def releaseTime() { + return new Date().format("yyyyMMddHHmm", TimeZone.getDefault()) +} + +android { + compileSdkVersion 29 + buildToolsVersion "29.0.2" + defaultConfig { + applicationId "com.info.sn" + minSdkVersion 23 + targetSdkVersion 29 + versionCode 5 + versionName "1.0.4" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + ndk { + //选择要添加的对应 cpu 类型的 .so 库。 + abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a' + // 还可以添加 'x86', 'x86_64', 'mips', 'mips64' + } + manifestPlaceholders = [ + JPUSH_PKGNAME: applicationId, + JPUSH_APPKEY : "edf9cec22731b8b2fed56ee6", //JPush 上注册的包名对应的 Appkey. + JPUSH_CHANNEL: "developer-default", //暂时填写默认值即可. + ] + multiDexEnabled true + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + lintOptions { + checkReleaseBuilds false + } + //签名 + signingConfigs { + debug { + storeFile file("src/keys/xueshibaoos.jks") + storePassword "123456" + keyAlias "xueshibaoos" + keyPassword "123456" + v2SigningEnabled false + } + release {// 签名文件 + storeFile file("src/keys/xueshibaoos.jks") + storePassword "123456" + keyAlias "xueshibaoos" + keyPassword "123456" + v2SigningEnabled false + } + } + + buildTypes { + debug { + // 显示Log + buildConfigField "boolean", "LOG_DEBUG", "true" + versionNameSuffix "-debug" + minifyEnabled false + //Zipalign优化 + zipAlignEnabled true + signingConfig signingConfigs.debug + applicationVariants.all { variant -> + variant.outputs.each { output -> + if (outputFile != null) { + def fileName = "${appName()}-V${defaultConfig.versionName}-${releaseTime()}.apk" + output.outputFileName = fileName + } + } + } + } + release { + // 不显示Log + buildConfigField "boolean", "LOG_DEBUG", "false" + //混淆 + minifyEnabled false + //Zipalign优化 + zipAlignEnabled true + //前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,后一个文件是自己的定义混淆文件 + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + //签名 + signingConfig signingConfigs.release +// 将release版本的包名重命名,加上版本及日期 + applicationVariants.all { variant -> + variant.outputs.each { output -> + def outputFile = "" + if (outputFile != null) { + def fileName = "${appName()}-${defaultConfig.versionCode}-V${defaultConfig.versionName}-${releaseTime()}.apk" + output.outputFileName = new File(outputFile, fileName) + + } + } + } + } + } + lintOptions { + checkReleaseBuilds false + // Or, if you prefer, you can continue to check for errors in release builds, + // but continue the build even when errors are found: + abortOnError false + } + + +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'androidx.appcompat:appcompat:1.1.0' + implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'androidx.test.ext:junit:1.1.1' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' + + implementation 'com.google.zxing:core:3.2.1' + implementation 'cn.jiguang.sdk:jpush:3.3.4' // 此处以JPush 3.3.4 版本为例。 + implementation 'cn.jiguang.sdk:jcore:2.1.2' // 此处以JCore 2.1.2 版本为例。 + //动态权限框架 + implementation 'com.hjq:xxpermissions:6.0' + //http框架 + implementation 'com.lzy.net:okgo:3.0.4' + implementation 'com.lzy.net:okrx:0.1.2' + implementation 'com.lzy.net:okserver:2.0.5' + implementation 'com.alibaba:fastjson:1.2.21' + implementation 'com.blankj:utilcode:1.26.0' + implementation 'com.arialyy.aria:core:3.7.10' + annotationProcessor 'com.arialyy.aria:compiler:3.7.10' +} diff --git a/app/src/keys/xueshibaoos.jks b/app/src/keys/xueshibaoos.jks new file mode 100644 index 0000000000000000000000000000000000000000..b94a626a1e59b41e0d2b0e1725c1d164b6a8f5ab GIT binary patch literal 2552 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 h=~IOHotm-=tG={6OY~?wV#1*=AWE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/aidl/com/info/sn/KeepAliveConnection.aidl b/app/src/main/aidl/com/info/sn/KeepAliveConnection.aidl new file mode 100644 index 0000000..3cada22 --- /dev/null +++ b/app/src/main/aidl/com/info/sn/KeepAliveConnection.aidl @@ -0,0 +1,13 @@ +// KeepAliveConnection.aidl +package com.info.sn; + +// Declare any non-default types here with import statements + +interface KeepAliveConnection { + /** + * Demonstrates some basic types that you can use as parameters + * and return values in AIDL. + */ +// void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, +// double aDouble, String aString); +} diff --git a/app/src/main/java/com/info/sn/MainActivity.java b/app/src/main/java/com/info/sn/MainActivity.java new file mode 100644 index 0000000..043d0aa --- /dev/null +++ b/app/src/main/java/com/info/sn/MainActivity.java @@ -0,0 +1,379 @@ +package com.info.sn; + +import androidx.appcompat.app.AppCompatActivity; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.pm.ActivityInfo; +import android.content.pm.PackageManager; +import android.graphics.Bitmap; +import android.os.Build; +import android.os.Bundle; +import android.os.Environment; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.widget.ImageView; +import android.widget.TextView; + +import com.hjq.permissions.OnPermission; +import com.hjq.permissions.Permission; +import com.hjq.permissions.XXPermissions; +import com.info.sn.bean.UserInfo; +import com.info.sn.jpush.ExampleUtil; +import com.info.sn.jpush.LocalBroadcastManager; +import com.info.sn.jpush.TagAliasOperatorHelper; +import com.info.sn.network.api.HTTPInterface; +import com.info.sn.service.MyDownloadService; +import com.info.sn.utils.LogUtils; +import com.info.sn.utils.SPUtils; +import com.info.sn.utils.ToastUtil; +import com.info.sn.utils.Utils; + +import java.io.File; +import java.util.List; +import java.util.Set; + +import cn.jpush.android.api.JPushInterface; + +import static com.info.sn.jpush.TagAliasOperatorHelper.ACTION_ADD; +import static com.info.sn.jpush.TagAliasOperatorHelper.ACTION_CHECK; +import static com.info.sn.jpush.TagAliasOperatorHelper.ACTION_CLEAN; +import static com.info.sn.jpush.TagAliasOperatorHelper.ACTION_DELETE; +import static com.info.sn.jpush.TagAliasOperatorHelper.ACTION_GET; +import static com.info.sn.jpush.TagAliasOperatorHelper.ACTION_SET; +import static com.info.sn.jpush.TagAliasOperatorHelper.TagAliasBean; +import static com.info.sn.jpush.TagAliasOperatorHelper.sequence; + +public class MainActivity extends AppCompatActivity { + public static boolean isForeground = false; + private ImageView imageView; + private TextView tv_note, tv_devsn, tv_username, tv_school, tv_grade, tv_version; + private int DeviceInfo; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + if (getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) { + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + } + PackageManager pm = getPackageManager(); + //后台为0可能传过来null + pm.setApplicationEnabledSetting("com.info.sn", PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0); + requestPermission(); + registerMessageReceiver(); // used for receive msg + String rid = JPushInterface.getRegistrationID(getApplicationContext()); + if (!rid.isEmpty()) { + ToastUtil.debugShow("RegId:" + rid); + LogUtils.e("RegId", rid); + onTagAliasAction(7); + } else { +// ToastUtil.show("Get registration fail, JPush init failed!"); +// Toast.makeText(this, "Get registration fail, JPush init failed!", Toast.LENGTH_SHORT).show(); + } + initView(); + initData(); + HTTPInterface.checkDevicesInfo(handler); + startService(new Intent(MainActivity.this, MyDownloadService.class)); + + } + + private void initView() { + tv_note = (TextView) findViewById(R.id.tv_note); + imageView = (ImageView) findViewById(R.id.imageView); + tv_devsn = (TextView) findViewById(R.id.tv_devsn); + tv_devsn.setText("设备SN:" + Utils.getSerial()); + tv_username = (TextView) findViewById(R.id.tv_username); + tv_school = (TextView) findViewById(R.id.tv_school); + tv_grade = (TextView) findViewById(R.id.tv_grade); + tv_version = findViewById(R.id.version); + tv_version.setText("版本:"+ BuildConfig.VERSION_NAME); + } + + private void initData() { + DeviceInfo = (int) SPUtils.get(this, "isLogined", 2); + switch (DeviceInfo) { + case 0: + setImageAndText(imageView, "设备未绑定"); + break; + case 1: + setImageAndText(imageView, "设备已绑定"); + break; + case 2: + setImageAndText(imageView, "未经验证的设备,请联系客服"); + + break; + } + } + + private void setImageAndText(ImageView imageView, String text) { + Bitmap bitmap = Utils.createQRImage(Utils.getSn(), 250, 250); + imageView.setImageBitmap(bitmap); + tv_note.setText(text); + } + + private void setUserInfo(UserInfo userInfo) { + String name = userInfo.getSn_name(); + String school = userInfo.getSn_school(); + String grade = userInfo.getSn_grade(); + if (name == null || name.equals("")) { + tv_username.setText("用户姓名:未设置"); + } else { + tv_username.setText("用户姓名:" + name); + } + if (school == null || school.equals("")) { + tv_school.setText("学校:未设置"); + } else { + tv_school.setText("学校:" + school); + } + if (grade == null || grade.equals("")) { + tv_grade.setText("年级:未设置"); + } else { + tv_grade.setText("年级:" + getGrade(grade)); + } + + } + + private String getGrade(String grade) { + String s; + switch (grade) { + case "1": + s = "一年级"; + break; + case "2": + s = "二年级"; + break; + case "3": + s = "三年级"; + break; + case "4": + s = "四年级"; + break; + case "5": + s = "五年级"; + break; + case "6": + s = "六年级"; + break; + case "7": + s = "初一"; + break; + case "8": + s = "初二"; + break; + case "9": + s = "初三"; + break; + case "10": + s = "高一"; + break; + case "11": + s = "高二"; + break; + case "12": + s = "高三"; + break; + default: + s = "一年级"; + break; + } + return s; + } + + Handler handler = new Handler() { + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + switch (msg.what) { + case 0: + SPUtils.put(MainActivity.this, "isLogined", 0); + setImageAndText(imageView, "设备未绑定"); + break; + case 1: + UserInfo userInfo = (UserInfo) msg.obj; + SPUtils.put(MainActivity.this, "isLogined", 1); + SPUtils.put(MainActivity.this, "member_id", userInfo.getMember_id()); + SPUtils.put(MainActivity.this, "sn_id", userInfo.getId()); + setUserInfo((UserInfo) msg.obj); + setImageAndText(imageView, "设备已绑定"); + break; + case 2: + SPUtils.put(MainActivity.this, "isLogined", 2); + setImageAndText(imageView, "未经验证的设备,请联系客服"); + break; + } + } + }; + + private String[] permission = new String[]{ +// Permission.SYSTEM_ALERT_WINDOW, +// Permission.CAMERA, +// Permission.READ_SMS, +// Permission.RECEIVE_SMS, +// Permission.SEND_SMS, + Permission.REQUEST_INSTALL_PACKAGES, + Permission.READ_EXTERNAL_STORAGE, + Permission.WRITE_EXTERNAL_STORAGE, +// Permission.READ_PHONE_STATE + }; + + public void requestPermission() { + XXPermissions.with(this) + // 可设置被拒绝后继续申请,直到用户授权或者永久拒绝 + .constantRequest() + // 支持请求6.0悬浮窗权限8.0请求安装权限 + //.permission(Permission.REQUEST_INSTALL_PACKAGES) + // 不指定权限则自动获取清单中的危险权限 + .permission(permission) + .request(new OnPermission() { + + @Override + public void hasPermission(List granted, boolean isAll) { + if (isAll) { + String path = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "POStemp"; + File file = new File(path); + file.mkdirs(); + } else { + ToastUtil.show("需要授予所有权限才能正常使用本程序!"); + } + } + + @Override + public void noPermission(List denied, boolean quick) { + if (quick) { + ToastUtil.show("被永久拒绝授权,请手动授予权限!"); + //如果是被永久拒绝就跳转到应用权限系统设置页面 + XXPermissions.gotoPermissionSettings(MainActivity.this); + } else { + ToastUtil.show("获取权限失败"); + } + } + }); + } + + + public void onTagAliasAction(int i) { + Set tags = null; + String alias = null; + int action = -1; + boolean isAliasAction = false; + switch (i) { + //设置手机号码: + case 0: +// handleSetMobileNumber(); + return; + //增加tag + case 1: +// tags = getInPutTags(); + if (tags == null) { + return; + } + action = ACTION_ADD; + break; + //设置tag + case 2: +// tags = getInPutTags(); + if (tags == null) { + return; + } + action = ACTION_SET; + break; + //删除tag + case 3: +// tags = getInPutTags(); + if (tags == null) { + return; + } + action = ACTION_DELETE; + break; + //获取所有tag + case 4: + action = ACTION_GET; + break; + //清除所有tag + case 5: + action = ACTION_CLEAN; + break; + case 6: +// tags = getInPutTags(); + if (tags == null) { + return; + } + action = ACTION_CHECK; + break; + //设置alias + case 7: +// alias = getInPutAlias(); + alias = Utils.getSerial(); + if (TextUtils.isEmpty(alias)) { + return; + } + isAliasAction = true; + action = ACTION_SET; + break; + //获取alias + case 8: + isAliasAction = true; + action = ACTION_GET; + break; + //删除alias + case 9: + isAliasAction = true; + action = ACTION_DELETE; + break; + default: + return; + } + TagAliasBean tagAliasBean = new TagAliasBean(); + tagAliasBean.action = action; + sequence++; + if (isAliasAction) { + tagAliasBean.alias = alias; + } else { + tagAliasBean.tags = tags; + } + tagAliasBean.isAliasAction = isAliasAction; + TagAliasOperatorHelper.getInstance().handleAction(getApplicationContext(), sequence, tagAliasBean); + + } + + + //for receive customer msg from jpush server + private MessageReceiver mMessageReceiver; + public static final String MESSAGE_RECEIVED_ACTION = "com.example.jpushdemo.MESSAGE_RECEIVED_ACTION"; + public static final String KEY_TITLE = "title"; + public static final String KEY_MESSAGE = "message"; + public static final String KEY_EXTRAS = "extras"; + + public void registerMessageReceiver() { + mMessageReceiver = new MessageReceiver(); + IntentFilter filter = new IntentFilter(); + filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); + filter.addAction(MESSAGE_RECEIVED_ACTION); + LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, filter); + } + + public class MessageReceiver extends BroadcastReceiver { + + @Override + public void onReceive(Context context, Intent intent) { + try { + if (MESSAGE_RECEIVED_ACTION.equals(intent.getAction())) { + String messge = intent.getStringExtra(KEY_MESSAGE); + String extras = intent.getStringExtra(KEY_EXTRAS); + StringBuilder showMsg = new StringBuilder(); + showMsg.append(KEY_MESSAGE + " : " + messge + "\n"); + if (!ExampleUtil.isEmpty(extras)) { + showMsg.append(KEY_EXTRAS + " : " + extras + "\n"); + } +// setCostomMsg(showMsg.toString()); + } + } catch (Exception e) { + } + } + } + +} diff --git a/app/src/main/java/com/info/sn/MyApplication.java b/app/src/main/java/com/info/sn/MyApplication.java new file mode 100644 index 0000000..f653ffa --- /dev/null +++ b/app/src/main/java/com/info/sn/MyApplication.java @@ -0,0 +1,447 @@ +package com.info.sn; + +import android.app.ActivityManager; +import android.app.Application; +import android.app.usage.UsageStats; +import android.app.usage.UsageStatsManager; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.pm.PackageManager; +import android.os.Environment; +import android.provider.Settings; +import android.util.Log; + +import com.arialyy.annotations.Download; +import com.arialyy.aria.core.Aria; +import com.arialyy.aria.core.task.DownloadTask; +import com.blankj.utilcode.util.NetworkUtils; +import com.info.sn.network.api.HTTPInterface; +import com.info.sn.utils.ApkUtils; +import com.info.sn.utils.LogUtils; +import com.info.sn.utils.SPUtils; +import com.info.sn.utils.ToastUtil; +import com.lzy.okgo.OkGo; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.File; +import java.util.List; +import java.util.SortedMap; +import java.util.TreeMap; + +import cn.jpush.android.api.CustomMessage; + +public class MyApplication extends Application implements NetworkUtils.OnNetworkStatusChangedListener { + public static Context context; + private static MyApplication app; + + @Override + public void onCreate() { + super.onCreate(); + app = this; + ToastUtil.init(this); + context = getApplicationContext(); + ToastUtil.init(this); + OkGo.getInstance().init(this); + NetworkUtils.registerNetworkStatusChangedListener(this); + Aria.init(this); + Aria.download(this).register(); + Aria.download(this).resumeAllTask(); + + } + + @Override + public void onTerminate() { + super.onTerminate(); + NetworkUtils.unregisterNetworkStatusChangedListener(this); + + } + + public static MyApplication getInstance() { + return app; + } + + public static Context getAppContext() { + if (context == null) { + context = getAppContext(); + } + return context; + } + + public static String getTaskPackname() { + String currentApp = "CurrentNULL"; + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { + UsageStatsManager usm = (UsageStatsManager) context.getSystemService("usagestats"); + long time = System.currentTimeMillis(); + List appList = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 1000, time); + if (appList != null && appList.size() > 0) { + SortedMap mySortedMap = new TreeMap(); + for (UsageStats usageStats : appList) { + mySortedMap.put(usageStats.getLastTimeUsed(), usageStats); + } + if (mySortedMap != null && !mySortedMap.isEmpty()) { + currentApp = mySortedMap.get(mySortedMap.lastKey()).getPackageName(); + } + } + } else { + ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); + List tasks = am.getRunningAppProcesses(); + currentApp = tasks.get(0).processName; + } +// LogUtils.e("TAG", "Current App in foreground is: " + currentApp); + return currentApp; + } + + /** + * 实时获取电量 + */ + public static int getSystemBattery() { + int level = 0; + Intent batteryInfoIntent = context.getApplicationContext().registerReceiver(null, + new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); + level = batteryInfoIntent.getIntExtra("level", 0); + int batterySum = batteryInfoIntent.getIntExtra("scale", 100); + int percentBattery = 100 * level / batterySum; + LogUtils.i("getSystemBattery", "level = " + level); + LogUtils.i("getSystemBattery", "batterySum = " + batterySum); + LogUtils.i("getSystemBattery", "percent is " + percentBattery + "%"); + return percentBattery; + } + + + //定义接收极光推送消息的类型。 + //1.获取设备在线信息 + // 2.获取当前正在运行得应用和电量 + // 3.数据线传输管控 + // 4.TF卡管控 + // 5.蓝牙管控 + // 6.浏览器上网管控 + // 7.应用联网管控 + // 8.应用锁管控 + // 9.强制安装应用 + // 10.强制卸载应用 + private static final String JIGUANG_GET_DRIVELINE = "1"; + private static final String JIGUANG_GET_STARTTIME = "2"; + private static final String JIGUANG_USB_STATE = "3"; + private static final String JIGUANG_TFCARD_STATE = "4"; + private static final String JIGUANG_BLUETOOTH_STATE = "5"; + private static final String JIGUANG_BROWSER_URLPATH = "6"; + private static final String JIGUANG_APP_NETWORKSTATE = "7"; + private static final String JIGUANG_APP_LOCKEDSTATE = "8"; + private static final String JIGUANG_FORCE_INSTALLAPK = "9"; + private static final String JIGUANG_FORCE_UNINSTALLAPK = "10"; + + + + synchronized public void manageCustomMessage(CustomMessage customMessage) { + String sn_id = (String) SPUtils.get(context, "sn_id", "-1"); + String member_id = (String) SPUtils.get(context, "member_id", "-1"); + if (customMessage == null) { + LogUtils.e("jiguang", "customMessage is NULL"); + } else { + String MESSAGE = customMessage.message; + //MESSAGE用作判断 + String TITLE = customMessage.title; + String CONTENT_TYPE = customMessage.contentType; + String EXTRA = customMessage.extra; + LogUtils.e("EXTRA", EXTRA); + switch (MESSAGE) { + case JIGUANG_GET_DRIVELINE: + HTTPInterface.getDriveState(member_id, sn_id); + break; + case JIGUANG_GET_STARTTIME: + sendStartTime(EXTRA); + break; + case JIGUANG_USB_STATE: + setUsbState(EXTRA); + break; + case JIGUANG_TFCARD_STATE: + setTfcardState(EXTRA); + break; + case JIGUANG_BLUETOOTH_STATE: + setBluetoothState(EXTRA); + break; + case JIGUANG_BROWSER_URLPATH: + setBrowserUrlpath(EXTRA); + break; + case JIGUANG_APP_NETWORKSTATE: + setAppNetworkstate(EXTRA); + break; + case JIGUANG_APP_LOCKEDSTATE: + setAppLockedstate(EXTRA); + break; + case JIGUANG_FORCE_INSTALLAPK: + intallApk(EXTRA); + break; + case JIGUANG_FORCE_UNINSTALLAPK: + unintallApk(EXTRA); + break; + } + + + } + } + + + synchronized private void defaults(String jsonArray) { + if (jsonArray.length() > 0) { + try { + JSONObject extra = new JSONObject(jsonArray); + String packageName = extra.getString("package"); + int is_network = extra.getInt("is_network"); + } catch (JSONException e) { + e.printStackTrace(); + LogUtils.e("defaults", e.getMessage()); + } + } else { + ToastUtil.debugShow("defaults jsonArray is NULL"); + } + } + + //USB数据功能管控 + //仅充电:usb_charge + //MTP模式:usb_mtp + //Midi模式:usb_midi + synchronized public static void sendStartTime() { + int battery = getSystemBattery(); + HTTPInterface.sendStartTime(getAppContext(), 0, getTaskPackname(), battery, "111"); + } + + + synchronized private void sendStartTime(String jsonArray) { + if (jsonArray.length() > 0) { + try { + JSONObject extra = new JSONObject(jsonArray); + String random = extra.getString("random"); + int battery = getSystemBattery(); + HTTPInterface.sendStartTime(getAppContext(), 0, getTaskPackname(), battery, random); + } catch (JSONException e) { + e.printStackTrace(); + } + } + } + + synchronized private void setUsbState(String jsonArray) { + if (jsonArray.length() > 0) { + try { + JSONObject extra = new JSONObject(jsonArray); + int is_dataline = extra.getInt("is_dataline"); + if (is_dataline == 1) { + boolean qch_usb_choose = Settings.System.putString(getContentResolver(), "qch_usb_choose", "usb_charge"); + LogUtils.e("setUsbState:", Settings.System.getString(getContentResolver(), "qch_usb_choose")); + } else { + boolean qch_usb_choose = Settings.System.putString(getContentResolver(), "qch_usb_choose", "usb_mtp"); + LogUtils.e("setUsbState:", Settings.System.getString(getContentResolver(), "qch_usb_choose")); + } + } catch (JSONException e) { + e.printStackTrace(); + LogUtils.e("setUsbState", e.getMessage()); + } + } else { + ToastUtil.debugShow("setUsbState jsonArray is NULL"); + } + } + + synchronized private void setTfcardState(String jsonArray) { + if (jsonArray.length() > 0) { + try { + JSONObject extra = new JSONObject(jsonArray); + int is_tf = extra.getInt("is_tf"); + boolean qch_sdcard_forbid_on = Settings.System.putInt(getContentResolver(), "qch_sdcard_forbid_on", is_tf); + if (qch_sdcard_forbid_on) { + LogUtils.e("setTfcardState:", Settings.System.getString(getContentResolver(), "qch_sdcard_forbid_on")); + } else { + ToastUtil.debugShow("setTfcardState failed,state:" + is_tf); + } + } catch (JSONException e) { + e.printStackTrace(); + LogUtils.e("setTfcardState", e.getMessage()); + } + } else { + ToastUtil.debugShow("setTfcardState jsonArray is NULL"); + } + } + + synchronized private void setBluetoothState(String jsonArray) { + if (jsonArray.length() > 0) { + try { + JSONObject extra = new JSONObject(jsonArray); + int is_bluetooth = extra.getInt("is_bluetooth"); + boolean qch_bt_forbid_on = Settings.System.putInt(getContentResolver(), "qch_bt_forbid_on", is_bluetooth); + if (qch_bt_forbid_on) { + LogUtils.e("setBluetoothState:", Settings.System.getString(getContentResolver(), "qch_bt_forbid_on")); + } else { + ToastUtil.debugShow("setBluetoothState failed,state:" + is_bluetooth); + } + } catch (JSONException e) { + e.printStackTrace(); + LogUtils.e("setBluetoothState", e.getMessage()); + } + } else { + ToastUtil.debugShow("setBluetoothState jsonArray is NULL"); + } + } + + synchronized private void setBrowserUrlpath(String jsonArray) { + if (jsonArray.length() > 0) { + try { + JSONObject extra = new JSONObject(jsonArray); + String browser = extra.getString("browser"); + boolean setBrowserUrlpath = Settings.System.putString(getContentResolver(), "DeselectBrowserArray", browser); + LogUtils.e("setBrowserUrlpath:", String.valueOf(setBrowserUrlpath)); + if (setBrowserUrlpath) { + LogUtils.e("getBrowserUrlpath:", Settings.System.getString(getContentResolver(), "DeselectBrowserArray")); + } else { + ToastUtil.debugShow("setBrowserUrlpath failed,url:" + browser); + } + } catch (JSONException e) { + e.printStackTrace(); + LogUtils.e("setBrowserUrlpath", e.getMessage()); + } + } else { + boolean setBrowserUrlpath = Settings.System.putString(getContentResolver(), "DeselectBrowserArray", "invalid"); + + ToastUtil.debugShow("setBrowserUrlpath jsonArray is NULL,set default: " + setBrowserUrlpath); + } + } + + synchronized private void setAppNetworkstate(String jsonArray) { + if (jsonArray.length() > 0) { + try { + JSONObject extra = new JSONObject(jsonArray); + String package0 = extra.getString("package0"); + String package1 = extra.getString("package1"); + if (package0.length() != 0) { + boolean qch_jgy_network_disallow = Settings.System.putString(getContentResolver(), "qch_jgy_network_allow", package0); + LogUtils.e("fht", "setAppNetworkstate::" + qch_jgy_network_disallow + ":" + Settings.System.getString(getContentResolver(), "qch_jgy_network_allow")); + } else { + boolean qch_jgy_network_disallow = Settings.System.putString(getContentResolver(), "qch_jgy_network_allow", "invalid"); + LogUtils.e("fht", "setAppNetworkstate::" + qch_jgy_network_disallow + ":" + Settings.System.getString(getContentResolver(), "qch_jgy_network_allow")); + } + if (package1.length() != 0) { + boolean qch_jgy_network_disallow = Settings.System.putString(getContentResolver(), "qch_jgy_network_disallow", package1); + LogUtils.e("fht", "setAppNetworkstate::" + qch_jgy_network_disallow + ":" + Settings.System.getString(getContentResolver(), "qch_jgy_network_disallow")); + } else { + boolean qch_jgy_network_disallow = Settings.System.putString(getContentResolver(), "qch_jgy_network_disallow", "invalid"); + LogUtils.e("fht", "setAppNetworkstate::" + qch_jgy_network_disallow + ":" + Settings.System.getString(getContentResolver(), "qch_jgy_network_disallow")); + } + + } catch (JSONException e) { + e.printStackTrace(); + LogUtils.e("setAppNetworkstate", e.getMessage()); + } + } else { + ToastUtil.debugShow("setAppNetworkstate jsonArray is NULL"); + } + } + + synchronized private void setAppLockedstate(String jsonArray) { + if (jsonArray.length() > 0) { + try { + JSONObject extra = new JSONObject(jsonArray); + String packageName = extra.getString("package"); + int is_lock = extra.getInt("is_lock"); + ToastUtil.debugShow("收到应用锁管控消息:包名" + packageName + "is_lock_state:" + is_lock); + PackageManager pm = getPackageManager(); + //后台为0可能传过来null + if (is_lock == 1) { + pm.setApplicationEnabledSetting(packageName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0); + } else { + pm.setApplicationEnabledSetting(packageName, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0); + } + } catch (JSONException e) { + e.printStackTrace(); + LogUtils.e("setAppLockedstate", e.getMessage()); + } + } else { + ToastUtil.debugShow("setAppLockedstate jsonArray is NULL"); + } + + } + + //静默安装应用,使用okgo,断网会出现问题,等待修改使用aria + synchronized private void intallApk(String jsondata) { + try { + JSONObject extra = new JSONObject(jsondata); + final String packages = extra.getString("package"); + ToastUtil.debugShow("收到应用安装消息:包名" + packages); + String url = extra.getString("url"); + File file = new File(Environment.getExternalStoragePublicDirectory("Download") + "/Sninfo/apk"); + file.mkdirs(); + Aria.download(this).load(url).setFilePath(file.getAbsolutePath() + "/" + packages + ".apk").ignoreFilePathOccupy().setExtendField(packages).create(); +// OkGo.get(url) +// .execute(new FileCallback() { +// @Override +// public void onSuccess(Response response) { +//// Settings.System.putString(getApplicationContext().getContentResolver(), "qch_app_forbid", "com.baidu.video"); +// ApkUtils.installApkInSilence(response.body().getAbsolutePath(), packages); +// LogUtils.e("onSuccess", "download file successful,now installing"); +// } +// +// @Override +// public void onError(Response response) { +// super.onError(response); +// LogUtils.e("manageCustomMessage", "File download Failure"); +// } +// +// @Override +// public void downloadProgress(Progress progress) { +// super.downloadProgress(progress); +// LogUtils.e("downloadProgress", "已下载:" + progress.currentSize + ",总大小:" + progress.totalSize + ",进度:" + progress.fraction + ",当前网速:" + progress.speed); +// } +// }); + + } catch (JSONException e) { + e.printStackTrace(); + LogUtils.e("intallApk", e.getMessage()); + } + } + + + synchronized private void unintallApk(String json) { + String sn_id = (String) SPUtils.get(context, "sn_id", "-1"); + + try { + JSONObject object = new JSONObject(json); + String packageName = object.getString("package"); + ToastUtil.debugShow("收到应用卸载消息:包名" + packageName); + if (!packageName.equals("") && !packageName.equals(getApplicationContext().getPackageName())) { + if (!ApkUtils.isAvailable(getApplicationContext(), packageName)) { + HTTPInterface.setAppuninstallInfo(sn_id, packageName); + } else { + ApkUtils.deleteApkInSilence(packageName); + } + } + } catch (JSONException e) { + e.printStackTrace(); + LogUtils.e("unintallApk", e.getMessage()); + } + } + + @Override + public void onDisconnected() { + LogUtils.e("onDisconnected", "网络断开"); + } + + @Override + public void onConnected(NetworkUtils.NetworkType networkType) { + Aria.download(this).resumeAllTask(); + LogUtils.e("onConnected", "网络连接"); + + } + + + //在这里处理任务执行中的状态,如进度进度条的刷新 + @Download.onTaskRunning + protected void running(DownloadTask task) { + Log.e("aria running", task.getState() + "--" + task.getPercent() + "--" + task.getExtendField()); + } + + @Download.onTaskComplete + void taskComplete(DownloadTask task) { + //在这里处理任务完成的状态 + ApkUtils.installApkInSilence(task.getFilePath(), task.getExtendField()); + } +} diff --git a/app/src/main/java/com/info/sn/bean/MessageWhat.java b/app/src/main/java/com/info/sn/bean/MessageWhat.java new file mode 100644 index 0000000..e789550 --- /dev/null +++ b/app/src/main/java/com/info/sn/bean/MessageWhat.java @@ -0,0 +1,6 @@ +package com.info.sn.bean; + +public class MessageWhat { + public static int CODE_SUCCESSFUL = 200; + +} diff --git a/app/src/main/java/com/info/sn/bean/UserInfo.java b/app/src/main/java/com/info/sn/bean/UserInfo.java new file mode 100644 index 0000000..c8313b6 --- /dev/null +++ b/app/src/main/java/com/info/sn/bean/UserInfo.java @@ -0,0 +1,124 @@ +package com.info.sn.bean; + +import java.io.Serializable; + +public class UserInfo implements Serializable { + private String id; + + private String sn_value; + private String sn_name; + private String sn_phone; + private String sn_grade; + private String sn_app; + private String sn_area; + private String member_id; + private String is_delete; + private String is_reset; + private String is_lock; + private String sn_school; + private String createtime; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getSn_value() { + return sn_value; + } + + public void setSn_value(String sn_value) { + this.sn_value = sn_value; + } + + public String getSn_name() { + return sn_name; + } + + public void setSn_name(String sn_name) { + this.sn_name = sn_name; + } + + public String getSn_phone() { + return sn_phone; + } + + public void setSn_phone(String sn_phone) { + this.sn_phone = sn_phone; + } + + public String getSn_grade() { + return sn_grade; + } + + public void setSn_grade(String sn_grade) { + this.sn_grade = sn_grade; + } + + public String getSn_app() { + return sn_app; + } + + public void setSn_app(String sn_app) { + this.sn_app = sn_app; + } + + public String getSn_area() { + return sn_area; + } + + public void setSn_area(String sn_area) { + this.sn_area = sn_area; + } + + public String getMember_id() { + return member_id; + } + + public void setMember_id(String member_id) { + this.member_id = member_id; + } + + public String getIs_delete() { + return is_delete; + } + + public void setIs_delete(String is_delete) { + this.is_delete = is_delete; + } + + public String getIs_reset() { + return is_reset; + } + + public void setIs_reset(String is_reset) { + this.is_reset = is_reset; + } + + public String getIs_lock() { + return is_lock; + } + + public void setIs_lock(String is_lock) { + this.is_lock = is_lock; + } + + public String getCreatetime() { + return createtime; + } + + public void setCreatetime(String createtime) { + this.createtime = createtime; + } + + public String getSn_school() { + return sn_school; + } + + public void setSn_school(String sn_school) { + this.sn_school = sn_school; + } +} diff --git a/app/src/main/java/com/info/sn/jpush/ExampleApplication.java b/app/src/main/java/com/info/sn/jpush/ExampleApplication.java new file mode 100644 index 0000000..875e635 --- /dev/null +++ b/app/src/main/java/com/info/sn/jpush/ExampleApplication.java @@ -0,0 +1,22 @@ +package com.info.sn.jpush; + +import android.app.Application; +import cn.jpush.android.api.JPushInterface; + +/** + * For developer startup JPush SDK + * + * 一般建议在自定义 Application 类里初始化。也可以在主 Activity 里。 + */ +public class ExampleApplication extends Application { + private static final String TAG = "JIGUANG-Example"; + + @Override + public void onCreate() { + Logger.d(TAG, "[ExampleApplication] onCreate"); + super.onCreate(); + + JPushInterface.setDebugMode(true); // 设置开启日志,发布时请关闭日志 + JPushInterface.init(this); // 初始化 JPush + } +} diff --git a/app/src/main/java/com/info/sn/jpush/ExampleUtil.java b/app/src/main/java/com/info/sn/jpush/ExampleUtil.java new file mode 100644 index 0000000..651c151 --- /dev/null +++ b/app/src/main/java/com/info/sn/jpush/ExampleUtil.java @@ -0,0 +1,133 @@ +package com.info.sn.jpush; + +import android.content.Context; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.content.pm.PackageManager.NameNotFoundException; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.os.Bundle; +import android.os.Looper; +import android.telephony.TelephonyManager; +import android.text.TextUtils; +import android.widget.Toast; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import cn.jpush.android.api.JPushInterface; + +public class ExampleUtil { + public static final String PREFS_NAME = "JPUSH_EXAMPLE"; + public static final String PREFS_DAYS = "JPUSH_EXAMPLE_DAYS"; + public static final String PREFS_START_TIME = "PREFS_START_TIME"; + public static final String PREFS_END_TIME = "PREFS_END_TIME"; + public static final String KEY_APP_KEY = "JPUSH_APPKEY"; + + public static boolean isEmpty(String s) { + if (null == s) + return true; + if (s.length() == 0) + return true; + if (s.trim().length() == 0) + return true; + return false; + } + /** + * 只能以 “+” 或者 数字开头;后面的内容只能包含 “-” 和 数字。 + * */ + private final static String MOBILE_NUMBER_CHARS = "^[+0-9][-0-9]{1,}$"; + public static boolean isValidMobileNumber(String s) { + if(TextUtils.isEmpty(s)) return true; + Pattern p = Pattern.compile(MOBILE_NUMBER_CHARS); + Matcher m = p.matcher(s); + return m.matches(); + } + // 校验Tag Alias 只能是数字,英文字母和中文 + public static boolean isValidTagAndAlias(String s) { + Pattern p = Pattern.compile("^[\u4E00-\u9FA50-9a-zA-Z_!@#$&*+=.|]+$"); + Matcher m = p.matcher(s); + return m.matches(); + } + + // 取得AppKey + public static String getAppKey(Context context) { + Bundle metaData = null; + String appKey = null; + try { + ApplicationInfo ai = context.getPackageManager().getApplicationInfo( + context.getPackageName(), PackageManager.GET_META_DATA); + if (null != ai) + metaData = ai.metaData; + if (null != metaData) { + appKey = metaData.getString(KEY_APP_KEY); + if ((null == appKey) || appKey.length() != 24) { + appKey = null; + } + } + } catch (NameNotFoundException e) { + + } + return appKey; + } + + // 取得版本号 + public static String GetVersion(Context context) { + try { + PackageInfo manager = context.getPackageManager().getPackageInfo( + context.getPackageName(), 0); + return manager.versionName; + } catch (NameNotFoundException e) { + return "Unknown"; + } + } + + public static void showToast(final String toast, final Context context) + { + new Thread(new Runnable() { + + @Override + public void run() { + Looper.prepare(); +// Toast.makeText(context, toast, Toast.LENGTH_SHORT).show(); + Looper.loop(); + } + }).start(); + } + + public static boolean isConnected(Context context) { + ConnectivityManager conn = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo info = conn.getActiveNetworkInfo(); + return (info != null && info.isConnected()); + } + + public static String getImei(Context context, String imei) { + String ret = null; + try { + TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); + ret = telephonyManager.getDeviceId(); + } catch (Exception e) { + Logger.e(ExampleUtil.class.getSimpleName(), e.getMessage()); + } + if (isReadableASCII(ret)){ + return ret; + } else { + return imei; + } + } + + private static boolean isReadableASCII(CharSequence string){ + if (TextUtils.isEmpty(string)) return false; + try { + Pattern p = Pattern.compile("[\\x20-\\x7E]+"); + return p.matcher(string).matches(); + } catch (Throwable e){ + return true; + } + } + + public static String getDeviceId(Context context) { + return JPushInterface.getUdid(context); + } +} diff --git a/app/src/main/java/com/info/sn/jpush/LocalBroadcastManager.java b/app/src/main/java/com/info/sn/jpush/LocalBroadcastManager.java new file mode 100644 index 0000000..20c7942 --- /dev/null +++ b/app/src/main/java/com/info/sn/jpush/LocalBroadcastManager.java @@ -0,0 +1,263 @@ +package com.info.sn.jpush; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.net.Uri; +import android.os.Handler; +import android.os.Message; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Set; + +/** + * Created by efan on 2017/4/14. + */ + +public final class LocalBroadcastManager { + private static final String TAG = "JIGUANG-Example"; + private static final boolean DEBUG = false; + private final Context mAppContext; + private final HashMap> mReceivers = new HashMap>(); + private final HashMap> mActions = new HashMap> (); + private final ArrayList mPendingBroadcasts = new ArrayList(); + static final int MSG_EXEC_PENDING_BROADCASTS = 1; + private final Handler mHandler; + private static final Object mLock = new Object(); + private static LocalBroadcastManager mInstance; + + public static LocalBroadcastManager getInstance(Context context) { + Object var1 = mLock; + synchronized (mLock) { + if (mInstance == null) { + mInstance = new LocalBroadcastManager(context.getApplicationContext()); + } + + return mInstance; + } + } + + private LocalBroadcastManager(Context context) { + this.mAppContext = context; + this.mHandler = new Handler(context.getMainLooper()) { + public void handleMessage(Message msg) { + switch (msg.what) { + case 1: + LocalBroadcastManager.this.executePendingBroadcasts(); + break; + default: + super.handleMessage(msg); + } + + } + }; + } + + public void registerReceiver(BroadcastReceiver receiver, IntentFilter filter) { + HashMap var3 = this.mReceivers; + synchronized (this.mReceivers) { + ReceiverRecord entry = new ReceiverRecord(filter, receiver); + ArrayList filters = (ArrayList) this.mReceivers.get(receiver); + if (filters == null) { + filters = new ArrayList(1); + this.mReceivers.put(receiver, filters); + } + + filters.add(filter); + + for (int i = 0; i < filter.countActions(); ++i) { + String action = filter.getAction(i); + ArrayList entries = (ArrayList) this.mActions.get(action); + if (entries == null) { + entries = new ArrayList(1); + this.mActions.put(action, entries); + } + + entries.add(entry); + } + + } + } + + public void unregisterReceiver(BroadcastReceiver receiver) { + HashMap var2 = this.mReceivers; + synchronized (this.mReceivers) { + ArrayList filters = (ArrayList) this.mReceivers.remove(receiver); + if (filters != null) { + for (int i = 0; i < filters.size(); ++i) { + IntentFilter filter = (IntentFilter) filters.get(i); + + for (int j = 0; j < filter.countActions(); ++j) { + String action = filter.getAction(j); + ArrayList receivers = (ArrayList) this.mActions.get(action); + if (receivers != null) { + for (int k = 0; k < receivers.size(); ++k) { + if (((ReceiverRecord) receivers.get(k)).receiver == receiver) { + receivers.remove(k); + --k; + } + } + + if (receivers.size() <= 0) { + this.mActions.remove(action); + } + } + } + } + + } + } + } + + public boolean sendBroadcast(Intent intent) { + HashMap var2 = this.mReceivers; + synchronized (this.mReceivers) { + String action = intent.getAction(); + String type = intent.resolveTypeIfNeeded(this.mAppContext.getContentResolver()); + Uri data = intent.getData(); + String scheme = intent.getScheme(); + Set categories = intent.getCategories(); + boolean debug = (intent.getFlags() & 8) != 0; + if (debug) { + Logger.v("LocalBroadcastManager", "Resolving type " + type + " scheme " + scheme + " of intent " + intent); + } + + ArrayList entries = (ArrayList) this.mActions.get(intent.getAction()); + if (entries != null) { + if (debug) { + Logger.v("LocalBroadcastManager", "Action list: " + entries); + } + + ArrayList receivers = null; + + int i; + for (i = 0; i < entries.size(); ++i) { + ReceiverRecord receiver = (ReceiverRecord) entries.get(i); + if (debug) { + Logger.v("LocalBroadcastManager", "Matching against filter " + receiver.filter); + } + + if (receiver.broadcasting) { + if (debug) { + Logger.v("LocalBroadcastManager", " Filter\'s target already added"); + } + } else { + int match = receiver.filter.match(action, type, scheme, data, categories, "LocalBroadcastManager"); + if (match >= 0) { + if (debug) { + Logger.v("LocalBroadcastManager", " Filter matched! match=0x" + Integer.toHexString(match)); + } + + if (receivers == null) { + receivers = new ArrayList(); + } + + receivers.add(receiver); + receiver.broadcasting = true; + } else if (debug) { + String reason; + switch (match) { + case -4: + reason = "category"; + break; + case -3: + reason = "action"; + break; + case -2: + reason = "data"; + break; + case -1: + reason = "type"; + break; + default: + reason = "unknown reason"; + } + + Logger.v("LocalBroadcastManager", " Filter did not match: " + reason); + } + } + } + + if (receivers != null) { + for (i = 0; i < receivers.size(); ++i) { + ((ReceiverRecord) receivers.get(i)).broadcasting = false; + } + + this.mPendingBroadcasts.add(new BroadcastRecord(intent, receivers)); + if (!this.mHandler.hasMessages(1)) { + this.mHandler.sendEmptyMessage(1); + } + + return true; + } + } + + return false; + } + } + + public void sendBroadcastSync(Intent intent) { + if (this.sendBroadcast(intent)) { + this.executePendingBroadcasts(); + } + + } + + private void executePendingBroadcasts() { + while (true) { + BroadcastRecord[] brs = null; + HashMap i = this.mReceivers; + synchronized (this.mReceivers) { + int br = this.mPendingBroadcasts.size(); + if (br <= 0) { + return; + } + + brs = new BroadcastRecord[br]; + this.mPendingBroadcasts.toArray(brs); + this.mPendingBroadcasts.clear(); + } + + for (int var6 = 0; var6 < brs.length; ++var6) { + BroadcastRecord var7 = brs[var6]; + + for (int j = 0; j < var7.receivers.size(); ++j) { + ((ReceiverRecord) var7.receivers.get(j)).receiver.onReceive(this.mAppContext, var7.intent); + } + } + } + } + + private static class BroadcastRecord { + final Intent intent; + final ArrayList receivers; + + BroadcastRecord(Intent _intent, ArrayList _receivers) { + this.intent = _intent; + this.receivers = _receivers; + } + } + + private static class ReceiverRecord { + final IntentFilter filter; + final BroadcastReceiver receiver; + boolean broadcasting; + + ReceiverRecord(IntentFilter _filter, BroadcastReceiver _receiver) { + this.filter = _filter; + this.receiver = _receiver; + } + + public String toString() { + StringBuilder builder = new StringBuilder(128); + builder.append("Receiver{"); + builder.append(this.receiver); + builder.append(" filter="); + builder.append(this.filter); + builder.append("}"); + return builder.toString(); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/info/sn/jpush/Logger.java b/app/src/main/java/com/info/sn/jpush/Logger.java new file mode 100644 index 0000000..e747ddc --- /dev/null +++ b/app/src/main/java/com/info/sn/jpush/Logger.java @@ -0,0 +1,40 @@ +package com.info.sn.jpush; + +import android.util.Log; + +/** + * Created by efan on 2017/4/13. + */ + +public class Logger { + + //设为false关闭日志 + private static final boolean LOG_ENABLE = true; + + public static void i(String tag, String msg){ + if (LOG_ENABLE){ + Log.i(tag, msg); + } + } + public static void v(String tag, String msg){ + if (LOG_ENABLE){ + Log.v(tag, msg); + } + } + public static void d(String tag, String msg){ + if (LOG_ENABLE){ + Log.d(tag, msg); + } + } + public static void w(String tag, String msg){ + if (LOG_ENABLE){ + Log.w(tag, msg); + } + } + public static void e(String tag, String msg){ + if (LOG_ENABLE){ + Log.e(tag, msg); + } + } + +} diff --git a/app/src/main/java/com/info/sn/jpush/MyJPushMessageReceiver.java b/app/src/main/java/com/info/sn/jpush/MyJPushMessageReceiver.java new file mode 100644 index 0000000..fcd1ff0 --- /dev/null +++ b/app/src/main/java/com/info/sn/jpush/MyJPushMessageReceiver.java @@ -0,0 +1,47 @@ +package com.info.sn.jpush; + +import android.content.Context; + +import com.info.sn.MyApplication; + +import cn.jpush.android.api.CustomMessage; +import cn.jpush.android.api.JPushMessage; +import cn.jpush.android.service.JPushMessageReceiver; + +/** + * 自定义JPush message 接收器,包括操作tag/alias的结果返回(仅仅包含tag/alias新接口部分) + */ +public class MyJPushMessageReceiver extends JPushMessageReceiver { + + @Override + public void onTagOperatorResult(Context context, JPushMessage jPushMessage) { + TagAliasOperatorHelper.getInstance().onTagOperatorResult(context, jPushMessage); + super.onTagOperatorResult(context, jPushMessage); + } + + @Override + public void onCheckTagOperatorResult(Context context, JPushMessage jPushMessage) { + TagAliasOperatorHelper.getInstance().onCheckTagOperatorResult(context, jPushMessage); + super.onCheckTagOperatorResult(context, jPushMessage); + } + + @Override + public void onAliasOperatorResult(Context context, JPushMessage jPushMessage) { + TagAliasOperatorHelper.getInstance().onAliasOperatorResult(context, jPushMessage); + super.onAliasOperatorResult(context, jPushMessage); + } + + @Override + public void onMobileNumberOperatorResult(Context context, JPushMessage jPushMessage) { + TagAliasOperatorHelper.getInstance().onMobileNumberOperatorResult(context, jPushMessage); + super.onMobileNumberOperatorResult(context, jPushMessage); + } + + @Override + public void onMessage(Context context, CustomMessage customMessage) { + super.onMessage(context, customMessage); + MyApplication.getInstance().manageCustomMessage(customMessage); + } + + +} diff --git a/app/src/main/java/com/info/sn/jpush/MyReceiver.java b/app/src/main/java/com/info/sn/jpush/MyReceiver.java new file mode 100644 index 0000000..4103437 --- /dev/null +++ b/app/src/main/java/com/info/sn/jpush/MyReceiver.java @@ -0,0 +1,129 @@ +package com.info.sn.jpush; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.text.TextUtils; + +import com.info.sn.MainActivity; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.Iterator; + +import cn.jpush.android.api.JPushInterface; + +/** + * 自定义接收器 + * + * 如果不定义这个 Receiver,则: + * 1) 默认用户会打开主界面 + * 2) 接收不到自定义消息 + */ +public class MyReceiver extends BroadcastReceiver { + private static final String TAG = "JIGUANG-Example"; + + @Override + public void onReceive(Context context, Intent intent) { + try { + Bundle bundle = intent.getExtras(); + Logger.d(TAG, "[MyReceiver] onReceive - " + intent.getAction() + ", extras: " + printBundle(bundle)); + + if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) { + String regId = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID); + Logger.d(TAG, "[MyReceiver] 接收Registration Id : " + regId); + //send the Registration Id to your server... + + } else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) { + Logger.d(TAG, "[MyReceiver] 接收到推送下来的自定义消息: " + bundle.getString(JPushInterface.EXTRA_MESSAGE)); + processCustomMessage(context, bundle); + + } else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) { + Logger.d(TAG, "[MyReceiver] 接收到推送下来的通知"); + int notifactionId = bundle.getInt(JPushInterface.EXTRA_NOTIFICATION_ID); + Logger.d(TAG, "[MyReceiver] 接收到推送下来的通知的ID: " + notifactionId); + + } else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) { + Logger.d(TAG, "[MyReceiver] 用户点击打开了通知"); + + //打开自定义的Activity + Intent i = new Intent(context, TestActivity.class); + i.putExtras(bundle); + //i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP ); + context.startActivity(i); + + } else if (JPushInterface.ACTION_RICHPUSH_CALLBACK.equals(intent.getAction())) { + Logger.d(TAG, "[MyReceiver] 用户收到到RICH PUSH CALLBACK: " + bundle.getString(JPushInterface.EXTRA_EXTRA)); + //在这里根据 JPushInterface.EXTRA_EXTRA 的内容处理代码,比如打开新的Activity, 打开一个网页等.. + + } else if(JPushInterface.ACTION_CONNECTION_CHANGE.equals(intent.getAction())) { + boolean connected = intent.getBooleanExtra(JPushInterface.EXTRA_CONNECTION_CHANGE, false); + Logger.w(TAG, "[MyReceiver]" + intent.getAction() +" connected state change to "+connected); + } else { + Logger.d(TAG, "[MyReceiver] Unhandled intent - " + intent.getAction()); + } + } catch (Exception e){ + + } + + } + + // 打印所有的 intent extra 数据 + private static String printBundle(Bundle bundle) { + StringBuilder sb = new StringBuilder(); + for (String key : bundle.keySet()) { + if (key.equals(JPushInterface.EXTRA_NOTIFICATION_ID)) { + sb.append("\nkey:" + key + ", value:" + bundle.getInt(key)); + }else if(key.equals(JPushInterface.EXTRA_CONNECTION_CHANGE)){ + sb.append("\nkey:" + key + ", value:" + bundle.getBoolean(key)); + } else if (key.equals(JPushInterface.EXTRA_EXTRA)) { + if (TextUtils.isEmpty(bundle.getString(JPushInterface.EXTRA_EXTRA))) { + Logger.i(TAG, "This message has no Extra data"); + continue; + } + + try { + JSONObject json = new JSONObject(bundle.getString(JPushInterface.EXTRA_EXTRA)); + Iterator it = json.keys(); + + while (it.hasNext()) { + String myKey = it.next(); + sb.append("\nkey:" + key + ", value: [" + + myKey + " - " +json.optString(myKey) + "]"); + } + } catch (JSONException e) { + Logger.e(TAG, "Get message extra JSON error!"); + } + + } else { + sb.append("\nkey:" + key + ", value:" + bundle.get(key)); + } + } + return sb.toString(); + } + + //send msg to MainActivity + private void processCustomMessage(Context context, Bundle bundle) { + if (MainActivity.isForeground) { + String message = bundle.getString(JPushInterface.EXTRA_MESSAGE); + String extras = bundle.getString(JPushInterface.EXTRA_EXTRA); + Intent msgIntent = new Intent(MainActivity.MESSAGE_RECEIVED_ACTION); + msgIntent.putExtra(MainActivity.KEY_MESSAGE, message); + if (!ExampleUtil.isEmpty(extras)) { + try { + JSONObject extraJson = new JSONObject(extras); + if (extraJson.length() > 0) { + msgIntent.putExtra(MainActivity.KEY_EXTRAS, extras); + } + } catch (JSONException e) { + + } + + } + LocalBroadcastManager.getInstance(context).sendBroadcast(msgIntent); + } + } +} diff --git a/app/src/main/java/com/info/sn/jpush/PushService.java b/app/src/main/java/com/info/sn/jpush/PushService.java new file mode 100644 index 0000000..b3d0d29 --- /dev/null +++ b/app/src/main/java/com/info/sn/jpush/PushService.java @@ -0,0 +1,7 @@ +package com.info.sn.jpush; + +import cn.jpush.android.service.JCommonService; + +public class PushService extends JCommonService { + +} diff --git a/app/src/main/java/com/info/sn/jpush/TagAliasOperatorHelper.java b/app/src/main/java/com/info/sn/jpush/TagAliasOperatorHelper.java new file mode 100644 index 0000000..20051e2 --- /dev/null +++ b/app/src/main/java/com/info/sn/jpush/TagAliasOperatorHelper.java @@ -0,0 +1,338 @@ +package com.info.sn.jpush; + +import android.content.Context; +import android.os.Handler; +import android.os.Message; +import android.util.SparseArray; + +import java.util.Locale; +import java.util.Set; + +import cn.jpush.android.api.JPushInterface; +import cn.jpush.android.api.JPushMessage; + +/** + * 处理tagalias相关的逻辑 + * */ +public class TagAliasOperatorHelper { + private static final String TAG = "JIGUANG-TagAliasHelper"; + public static int sequence = 1; + /**增加*/ + public static final int ACTION_ADD = 1; + /**覆盖*/ + public static final int ACTION_SET = 2; + /**删除部分*/ + public static final int ACTION_DELETE = 3; + /**删除所有*/ + public static final int ACTION_CLEAN = 4; + /**查询*/ + public static final int ACTION_GET = 5; + + public static final int ACTION_CHECK = 6; + + public static final int DELAY_SEND_ACTION = 1; + + public static final int DELAY_SET_MOBILE_NUMBER_ACTION = 2; + + private Context context; + + private static TagAliasOperatorHelper mInstance; + private TagAliasOperatorHelper(){ + } + public static TagAliasOperatorHelper getInstance(){ + if(mInstance == null){ + synchronized (TagAliasOperatorHelper.class){ + if(mInstance == null){ + mInstance = new TagAliasOperatorHelper(); + } + } + } + return mInstance; + } + public void init(Context context){ + if(context != null) { + this.context = context.getApplicationContext(); + } + } + private SparseArray setActionCache = new SparseArray(); + + public Object get(int sequence){ + return setActionCache.get(sequence); + } + public Object remove(int sequence){ + return setActionCache.get(sequence); + } + public void put(int sequence,Object tagAliasBean){ + setActionCache.put(sequence,tagAliasBean); + } + private Handler delaySendHandler = new Handler(){ + @Override + public void handleMessage(Message msg) { + switch (msg.what){ + case DELAY_SEND_ACTION: + if(msg.obj !=null && msg.obj instanceof TagAliasBean){ + Logger.i(TAG,"on delay time"); + sequence++; + TagAliasBean tagAliasBean = (TagAliasBean) msg.obj; + setActionCache.put(sequence, tagAliasBean); + if(context!=null) { + handleAction(context, sequence, tagAliasBean); + }else{ + Logger.e(TAG,"#unexcepted - context was null"); + } + }else{ + Logger.w(TAG,"#unexcepted - msg obj was incorrect"); + } + break; + case DELAY_SET_MOBILE_NUMBER_ACTION: + if(msg.obj !=null && msg.obj instanceof String) { + Logger.i(TAG, "retry set mobile number"); + sequence++; + String mobileNumber = (String) msg.obj; + setActionCache.put(sequence, mobileNumber); + if(context !=null) { + handleAction(context, sequence, mobileNumber); + }else { + Logger.e(TAG, "#unexcepted - context was null"); + } + }else{ + Logger.w(TAG,"#unexcepted - msg obj was incorrect"); + } + break; + } + } + }; + public void handleAction(Context context,int sequence,String mobileNumber){ + put(sequence,mobileNumber); + Logger.d(TAG,"sequence:"+sequence+",mobileNumber:"+mobileNumber); + JPushInterface.setMobileNumber(context,sequence,mobileNumber); + } + /** + * 处理设置tag + * */ + public void handleAction(Context context,int sequence, TagAliasBean tagAliasBean){ + init(context); + if(tagAliasBean == null){ + Logger.w(TAG,"tagAliasBean was null"); + return; + } + put(sequence,tagAliasBean); + if(tagAliasBean.isAliasAction){ + switch (tagAliasBean.action){ + case ACTION_GET: + JPushInterface.getAlias(context,sequence); + break; + case ACTION_DELETE: + JPushInterface.deleteAlias(context,sequence); + break; + case ACTION_SET: + JPushInterface.setAlias(context,sequence,tagAliasBean.alias); + break; + default: + Logger.w(TAG,"unsupport alias action type"); + return; + } + }else { + switch (tagAliasBean.action) { + case ACTION_ADD: + JPushInterface.addTags(context, sequence, tagAliasBean.tags); + break; + case ACTION_SET: + JPushInterface.setTags(context, sequence, tagAliasBean.tags); + break; + case ACTION_DELETE: + JPushInterface.deleteTags(context, sequence, tagAliasBean.tags); + break; + case ACTION_CHECK: + //一次只能check一个tag + String tag = (String)tagAliasBean.tags.toArray()[0]; + JPushInterface.checkTagBindState(context,sequence,tag); + break; + case ACTION_GET: + JPushInterface.getAllTags(context, sequence); + break; + case ACTION_CLEAN: + JPushInterface.cleanTags(context, sequence); + break; + default: + Logger.w(TAG,"unsupport tag action type"); + return; + } + } + } + private boolean RetryActionIfNeeded(int errorCode,TagAliasBean tagAliasBean){ + if(!ExampleUtil.isConnected(context)){ + Logger.w(TAG,"no network"); + return false; + } + //返回的错误码为6002 超时,6014 服务器繁忙,都建议延迟重试 + if(errorCode == 6002 || errorCode == 6014){ + Logger.d(TAG,"need retry"); + if(tagAliasBean!=null){ + Message message = new Message(); + message.what = DELAY_SEND_ACTION; + message.obj = tagAliasBean; + delaySendHandler.sendMessageDelayed(message,1000*60); + String logs =getRetryStr(tagAliasBean.isAliasAction, tagAliasBean.action,errorCode); + ExampleUtil.showToast(logs, context); + return true; + } + } + return false; + } + private boolean RetrySetMObileNumberActionIfNeeded(int errorCode,String mobileNumber){ + if(!ExampleUtil.isConnected(context)){ + Logger.w(TAG,"no network"); + return false; + } + //返回的错误码为6002 超时,6024 服务器内部错误,建议稍后重试 + if(errorCode == 6002 || errorCode == 6024){ + Logger.d(TAG,"need retry"); + Message message = new Message(); + message.what = DELAY_SET_MOBILE_NUMBER_ACTION; + message.obj = mobileNumber; + delaySendHandler.sendMessageDelayed(message,1000*60); + String str = "Failed to set mobile number due to %s. Try again after 60s."; + str = String.format(Locale.ENGLISH,str,(errorCode == 6002 ? "timeout" : "server internal error”")); + ExampleUtil.showToast(str, context); + return true; + } + return false; + + } + private String getRetryStr(boolean isAliasAction,int actionType,int errorCode){ + String str = "Failed to %s %s due to %s. Try again after 60s."; + str = String.format(Locale.ENGLISH,str,getActionStr(actionType),(isAliasAction? "alias" : " tags") ,(errorCode == 6002 ? "timeout" : "server too busy")); + return str; + } + + private String getActionStr(int actionType){ + switch (actionType){ + case ACTION_ADD: + return "add"; + case ACTION_SET: + return "set"; + case ACTION_DELETE: + return "delete"; + case ACTION_GET: + return "get"; + case ACTION_CLEAN: + return "clean"; + case ACTION_CHECK: + return "check"; + } + return "unkonw operation"; + } + public void onTagOperatorResult(Context context, JPushMessage jPushMessage) { + int sequence = jPushMessage.getSequence(); + Logger.i(TAG,"action - onTagOperatorResult, sequence:"+sequence+",tags:"+jPushMessage.getTags()); + Logger.i(TAG,"tags size:"+jPushMessage.getTags().size()); + init(context); + //根据sequence从之前操作缓存中获取缓存记录 + TagAliasBean tagAliasBean = (TagAliasBean)setActionCache.get(sequence); + if(tagAliasBean == null){ + ExampleUtil.showToast("获取缓存记录失败", context); + return; + } + if(jPushMessage.getErrorCode() == 0){ + Logger.i(TAG,"action - modify tag Success,sequence:"+sequence); + setActionCache.remove(sequence); + String logs = getActionStr(tagAliasBean.action)+" tags success"; + Logger.i(TAG,logs); + ExampleUtil.showToast(logs, context); + }else{ + String logs = "Failed to " + getActionStr(tagAliasBean.action)+" tags"; + if(jPushMessage.getErrorCode() == 6018){ + //tag数量超过限制,需要先清除一部分再add + logs += ", tags is exceed limit need to clean"; + } + logs += ", errorCode:" + jPushMessage.getErrorCode(); + Logger.e(TAG, logs); + if(!RetryActionIfNeeded(jPushMessage.getErrorCode(),tagAliasBean)) { + ExampleUtil.showToast(logs, context); + } + } + } + public void onCheckTagOperatorResult(Context context, JPushMessage jPushMessage){ + int sequence = jPushMessage.getSequence(); + Logger.i(TAG,"action - onCheckTagOperatorResult, sequence:"+sequence+",checktag:"+jPushMessage.getCheckTag()); + init(context); + //根据sequence从之前操作缓存中获取缓存记录 + TagAliasBean tagAliasBean = (TagAliasBean)setActionCache.get(sequence); + if(tagAliasBean == null){ + ExampleUtil.showToast("获取缓存记录失败", context); + return; + } + if(jPushMessage.getErrorCode() == 0){ + Logger.i(TAG,"tagBean:"+tagAliasBean); + setActionCache.remove(sequence); + String logs = getActionStr(tagAliasBean.action)+" tag "+jPushMessage.getCheckTag() + " bind state success,state:"+jPushMessage.getTagCheckStateResult(); + Logger.i(TAG,logs); + ExampleUtil.showToast(logs, context); + }else{ + String logs = "Failed to " + getActionStr(tagAliasBean.action)+" tags, errorCode:" + jPushMessage.getErrorCode(); + Logger.e(TAG, logs); + if(!RetryActionIfNeeded(jPushMessage.getErrorCode(),tagAliasBean)) { + ExampleUtil.showToast(logs, context); + } + } + } + public void onAliasOperatorResult(Context context, JPushMessage jPushMessage) { + int sequence = jPushMessage.getSequence(); + Logger.i(TAG,"action - onAliasOperatorResult, sequence:"+sequence+",alias:"+jPushMessage.getAlias()); + init(context); + //根据sequence从之前操作缓存中获取缓存记录 + TagAliasBean tagAliasBean = (TagAliasBean)setActionCache.get(sequence); + if(tagAliasBean == null){ + ExampleUtil.showToast("获取缓存记录失败", context); + return; + } + if(jPushMessage.getErrorCode() == 0){ + Logger.i(TAG,"action - modify alias Success,sequence:"+sequence); + setActionCache.remove(sequence); + String logs = getActionStr(tagAliasBean.action)+" alias success"; + Logger.i(TAG,logs); + ExampleUtil.showToast(logs, context); + }else{ + String logs = "Failed to " + getActionStr(tagAliasBean.action)+" alias, errorCode:" + jPushMessage.getErrorCode(); + Logger.e(TAG, logs); + if(!RetryActionIfNeeded(jPushMessage.getErrorCode(),tagAliasBean)) { + ExampleUtil.showToast(logs, context); + } + } + } + //设置手机号码回调 + public void onMobileNumberOperatorResult(Context context, JPushMessage jPushMessage) { + int sequence = jPushMessage.getSequence(); + Logger.i(TAG,"action - onMobileNumberOperatorResult, sequence:"+sequence+",mobileNumber:"+jPushMessage.getMobileNumber()); + init(context); + if(jPushMessage.getErrorCode() == 0){ + Logger.i(TAG,"action - set mobile number Success,sequence:"+sequence); + setActionCache.remove(sequence); + }else{ + String logs = "Failed to set mobile number, errorCode:" + jPushMessage.getErrorCode(); + Logger.e(TAG, logs); + if(!RetrySetMObileNumberActionIfNeeded(jPushMessage.getErrorCode(),jPushMessage.getMobileNumber())){ + ExampleUtil.showToast(logs, context); + } + } + } + public static class TagAliasBean{ + public int action; + public Set tags; + public String alias; + public boolean isAliasAction; + + @Override + public String toString() { + return "TagAliasBean{" + + "action=" + action + + ", tags=" + tags + + ", alias='" + alias + '\'' + + ", isAliasAction=" + isAliasAction + + '}'; + } + } + + +} diff --git a/app/src/main/java/com/info/sn/jpush/TestActivity.java b/app/src/main/java/com/info/sn/jpush/TestActivity.java new file mode 100644 index 0000000..3908ac3 --- /dev/null +++ b/app/src/main/java/com/info/sn/jpush/TestActivity.java @@ -0,0 +1,32 @@ +package com.info.sn.jpush; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.view.ViewGroup.LayoutParams; +import android.widget.TextView; + +import cn.jpush.android.api.JPushInterface; + +public class TestActivity extends Activity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + TextView tv = new TextView(this); + tv.setText("用户自定义打开的Activity"); + Intent intent = getIntent(); + if (null != intent) { + Bundle bundle = getIntent().getExtras(); + String title = null; + String content = null; + if(bundle!=null){ + title = bundle.getString(JPushInterface.EXTRA_NOTIFICATION_TITLE); + content = bundle.getString(JPushInterface.EXTRA_ALERT); + } + tv.setText("Title : " + title + " " + "Content : " + content); + } + addContentView(tv, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); + } + +} diff --git a/app/src/main/java/com/info/sn/network/UrlPath.java b/app/src/main/java/com/info/sn/network/UrlPath.java new file mode 100644 index 0000000..522bf83 --- /dev/null +++ b/app/src/main/java/com/info/sn/network/UrlPath.java @@ -0,0 +1,22 @@ +package com.info.sn.network; + +public class UrlPath { + public static final String HOMEPATHRUL = "http://homework.tuiinfo.com/api/"; + //主页接口 + + public static final String SNINFO = HOMEPATHRUL + "Member/snInfo"; + //设备信息接口 + public static final String APPLOG = HOMEPATHRUL + "App/getApplog"; + + public final static String GET_APP_UPDATE = HOMEPATHRUL + "Update/update"; + //根据包名获取更新 + + public final static String SET_APP_INSTALL_INFO = HOMEPATHRUL + "App/appInstall"; + //发送app安装信息 + public final static String SET_APP_UNINSTALL_INFO = HOMEPATHRUL + "App/appUnload"; + //发送app卸载信息 + public final static String SEND_RUNINGAPPINFO = HOMEPATHRUL + "Monitoring/getAppNow"; + //获取当前最顶层应用和电量 + public final static String SEND_DRIVE_STATE = HOMEPATHRUL + "Online/online"; + +} diff --git a/app/src/main/java/com/info/sn/network/api/HTTPInterface.java b/app/src/main/java/com/info/sn/network/api/HTTPInterface.java new file mode 100644 index 0000000..1eb9b70 --- /dev/null +++ b/app/src/main/java/com/info/sn/network/api/HTTPInterface.java @@ -0,0 +1,239 @@ +package com.info.sn.network.api; + +import android.content.Context; +import android.icu.text.SimpleDateFormat; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.util.Log; + +import androidx.annotation.RequiresApi; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.info.sn.bean.MessageWhat; +import com.info.sn.bean.UserInfo; +import com.info.sn.network.UrlPath; +import com.info.sn.utils.LogUtils; +import com.info.sn.utils.SPUtils; +import com.info.sn.utils.ToastUtil; +import com.info.sn.utils.Utils; +import com.lzy.okgo.OkGo; +import com.lzy.okgo.callback.StringCallback; +import com.lzy.okgo.model.Response; + +import java.util.Date; +import java.util.Random; + +public class HTTPInterface { + private final static int requestCodeOK = 200; + + //获取设备信息接口 + public static synchronized void checkDevicesInfo(final Handler handler) { + OkGo.post(UrlPath.SNINFO) + .params("sn", Utils.getSn()) + .execute(new StringCallback() { + @Override + public void onSuccess(Response response) { + Log.e("onSuccess", "checkDevicesInfo"); + try { + JSONObject bodyObject = JSON.parseObject(response.body()); + Integer code = (bodyObject.getInteger("code")); + String msg = bodyObject.getString("msg"); + String data = bodyObject.getString("data"); + UserInfo userInfo = JSON.parseObject(data, UserInfo.class); + Message message = new Message(); + message.obj = userInfo; + if (code == requestCodeOK) { + message.what = 1; + handler.sendMessage(message); + } else if (code == -200) { + message.what = 0; + handler.sendMessage(message); + } else if (code == -250) { + ToastUtil.show(msg); + handler.sendEmptyMessage(2); + //设备验证 + } + } catch (Exception ex) { + Log.e("checkDevicesInfo", ex.getMessage()); + } + } + + @Override + public void onError(Response response) { + super.onError(response); + Log.e("onError", response.getException().toString()); + + } + }); + } + + @RequiresApi(api = Build.VERSION_CODES.N) + public static void sendTimeLog(final Handler handler, UserInfo userInfo, String appname, int status, long time) { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(System.currentTimeMillis()); + String times = simpleDateFormat.format(date); + OkGo.post(UrlPath.APPLOG) + .params("sn", Utils.getSerial()) + .params("app_name", appname) + .params("use_time", time) + .params("status", status) + .params("createtime", times) + .execute(new StringCallback() { + @Override + public void onSuccess(Response response) { + Log.e("onSuccess", "sendTimeLog"); + try { + JSONObject bodyObject = JSON.parseObject(response.body()); + Log.e("onSuccess", bodyObject.toString()); + + Integer code = (bodyObject.getInteger("code")); + String msg = bodyObject.getString("msg"); + String data = bodyObject.getString("data"); + UserInfo userInfo = JSON.parseObject(data, UserInfo.class); + Message message = new Message(); + message.obj = userInfo; + if (code == requestCodeOK) { + + } else if (code == -200) { + + } else if (code == -250) { + + } + } catch (Exception ex) { + Log.e("checkDevicesInfo", ex.getMessage()); + } + } + + @Override + public void onError(Response response) { + super.onError(response); + Log.e("onError", response.getException().toString()); + + } + }); + } + + synchronized public static void checkUpdateByPackage(final Handler handler, String packageName, String versionCode) { + OkGo.post(UrlPath.GET_APP_UPDATE) + .params("code", versionCode) + .params("package", packageName) + .execute(new StringCallback() { + @Override + public void onSuccess(Response response) { + try { + JSONObject body = JSON.parseObject(response.body()); + int code = body.getInteger("code"); + String msg = body.getString("msg"); + if (code == 200) { + Message message = new Message(); + JSONObject data = JSON.parseObject(body.getString("data")); + if (data != null) { + String url = data.getString("downloadurl"); + String newversion = data.getString("newversion"); + String content = data.getString("content"); + message.what = 200; + Bundle bundle = new Bundle(); + bundle.putString("url", url); + bundle.putString("versionCode", newversion); + bundle.putString("content", content); + message.obj = bundle; + } else { + message.what = -200; + } + handler.sendMessage(message); + Log.e("checkUpdateByPackage", msg); + } else { + Log.e("checkUpdateByPackage", msg); + } + } catch (Exception e) { + Log.e("checkUpdateByPackage", e.getMessage()); + } + } + + @Override + public void onError(Response response) { + super.onError(response); + Log.e("checkUpdateByPackage", response.getException().toString()); + } + }); + } + + synchronized public static void setAppuninstallInfo(String sn_id, String packageName) { + OkGo.post(UrlPath.SET_APP_UNINSTALL_INFO) + .params("sn_id", sn_id) + .params("package", packageName) + .execute(new StringCallback() { + @Override + public void onSuccess(Response response) { + JSONObject object = JSON.parseObject(response.body()); + int code = object.getInteger("code"); + String msg = object.getString("msg"); + LogUtils.e("setAppinstallInfo", msg); + if (code == MessageWhat.CODE_SUCCESSFUL) { + + } else { + + } + } + + @Override + public void onError(Response response) { + super.onError(response); + LogUtils.e("setAppinstallInfo", "onError:" + response.getException()); + + } + }); + + } + + synchronized public static void sendStartTime(Context context, long startTime, String packageName, int battery, String random) { + String sn_id = (String) SPUtils.get(context, "sn_id", "-1"); + String member_id = (String) SPUtils.get(context, "member_id", "-1"); + OkGo.post(UrlPath.SEND_RUNINGAPPINFO) + .params("start_time", startTime) + .params("package", packageName) + .params("battery", battery) + .params("member_id", member_id) + .params("sn_id", sn_id) + .params("random", random) + .execute(new StringCallback() { + @Override + public void onSuccess(Response response) { + String body = response.body(); + LogUtils.e("sendStartTime", body); + } + + @Override + public void onError(Response response) { + super.onError(response); + LogUtils.e("sendStartTime", response.getException().toString()); + + } + }); + } + + synchronized public static void getDriveState(String member_id, String sn_id) { + + OkGo.post(UrlPath.SEND_DRIVE_STATE) + .params("member_id", member_id) + .params("sn_id", sn_id) + .params("status", 1) + .execute(new StringCallback() { + @Override + public void onSuccess(Response response) { + + } + + @Override + public void onError(Response response) { + super.onError(response); + + } + }); + } + + +} diff --git a/app/src/main/java/com/info/sn/service/APKinstallReceiver.java b/app/src/main/java/com/info/sn/service/APKinstallReceiver.java new file mode 100644 index 0000000..9568ef8 --- /dev/null +++ b/app/src/main/java/com/info/sn/service/APKinstallReceiver.java @@ -0,0 +1,19 @@ +package com.info.sn.service; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +public class APKinstallReceiver extends BroadcastReceiver { + + @Override + public void onReceive(Context context, Intent intent) { + // TODO: This method is called when the BroadcastReceiver is receiving + // an Intent broadcast. + + if (intent.getAction().equals(Intent.ACTION_PACKAGE_ADDED) || intent.getAction().equals(Intent.ACTION_PACKAGE_REPLACED)) { + String packageName = intent.getDataString().replace("package:", ""); + + } + } +} diff --git a/app/src/main/java/com/info/sn/service/BootReceiver.java b/app/src/main/java/com/info/sn/service/BootReceiver.java new file mode 100644 index 0000000..4f4994a --- /dev/null +++ b/app/src/main/java/com/info/sn/service/BootReceiver.java @@ -0,0 +1,23 @@ +package com.info.sn.service; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.util.Log; + + +public class BootReceiver extends BroadcastReceiver { + + + @Override + public void onReceive(Context context, Intent intent) { + Log.e("BootReceiver", intent.getAction()); + if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) { +// Intent i = new Intent(context, InitJpushServer.class); +// context.startService(i); + context.startService(new Intent(context, StepService.class)); + context.startService(new Intent(context, GuardService.class)); + } + + } +} diff --git a/app/src/main/java/com/info/sn/service/GuardService.java b/app/src/main/java/com/info/sn/service/GuardService.java new file mode 100644 index 0000000..c88a6be --- /dev/null +++ b/app/src/main/java/com/info/sn/service/GuardService.java @@ -0,0 +1,67 @@ +package com.info.sn.service; + +/** + * 作者 mjsheng + * 日期 2019/4/1 10:58 + * 邮箱 501802639@qq.com + * 来自: + */ + +import android.app.Service; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.ServiceConnection; +import android.os.IBinder; + +import androidx.annotation.Nullable; + +import com.info.sn.KeepAliveConnection; +import com.info.sn.utils.LogUtils; +import com.info.sn.utils.ServiceAliveUtils; + + +/** + * 守护进程 双进程通讯 + * + * @author LiGuangMin + * @time Created by 2018/8/17 11:27 + */ +public class GuardService extends Service { + private final static String TAG = GuardService.class.getSimpleName(); + private ServiceConnection mServiceConnection = new ServiceConnection() { + @Override + public void onServiceConnected(ComponentName componentName, IBinder iBinder) { + LogUtils.e(TAG, "GuardService:建立链接"); + boolean isServiceRunning = ServiceAliveUtils.isServiceAlice(); + if (!isServiceRunning) { + Intent i = new Intent(GuardService.this, MyDownloadService.class); + startService(i); + } + } + + @Override + public void onServiceDisconnected(ComponentName componentName) { + // 断开链接 + startService(new Intent(GuardService.this, StepService.class)); + // 重新绑定 + bindService(new Intent(GuardService.this, StepService.class), mServiceConnection, Context.BIND_IMPORTANT); + } + }; + + @Nullable + @Override + public IBinder onBind(Intent intent) { + return new KeepAliveConnection.Stub() { + }; + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + // 绑定建立链接 + bindService(new Intent(this, StepService.class), mServiceConnection, Context.BIND_IMPORTANT); + return START_STICKY; + } + +} + diff --git a/app/src/main/java/com/info/sn/service/MyDownloadService.java b/app/src/main/java/com/info/sn/service/MyDownloadService.java new file mode 100644 index 0000000..079fee4 --- /dev/null +++ b/app/src/main/java/com/info/sn/service/MyDownloadService.java @@ -0,0 +1,159 @@ +package com.info.sn.service; + +import android.app.AlertDialog; +import android.app.Service; +import android.content.DialogInterface; +import android.content.Intent; +import android.os.Bundle; +import android.os.Environment; +import android.os.Handler; +import android.os.IBinder; +import android.os.Message; +import android.util.Log; +import android.view.WindowManager; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.info.sn.BuildConfig; +import com.info.sn.MyApplication; +import com.info.sn.R; +import com.info.sn.network.api.HTTPInterface; +import com.info.sn.utils.ApkUtils; +import com.info.sn.utils.LogUtils; +import com.lzy.okgo.OkGo; +import com.lzy.okgo.callback.FileCallback; +import com.lzy.okgo.model.Progress; +import com.lzy.okgo.model.Response; + +import java.io.File; + +// 下载管理服务 +public class MyDownloadService extends Service { + + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + flags = START_STICKY; + return super.onStartCommand(intent, flags, startId); + } + + synchronized private void CheckUpdate() { + HTTPInterface.checkUpdateByPackage(handler, this.getPackageName(), String.valueOf(BuildConfig.VERSION_CODE)); + } + + @Override + public void onCreate() { + super.onCreate(); + startService(new Intent(this, StepService.class)); + startService(new Intent(this, GuardService.class)); + CheckUpdate(); +// new Thread(new Runnable() { +// @Override +// public void run() { +// while (true) { +// LogUtils.e("packagename", MyApplication.getTaskPackname()); +// LogUtils.e("packagename", String.valueOf(MyApplication.getSystemBattery())); +//// MyApplication.sendStartTime(); +// try { +// Thread.sleep(5000); +// } catch (InterruptedException e) { +// e.printStackTrace(); +// } +// } +// } +// }).start(); + } + + + @Override + public void onDestroy() { + super.onDestroy(); + } + + @Nullable + @Override + public IBinder onBind(Intent intent) { + return null; + } + + private Handler handler = new Handler() { + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + switch (msg.what) { + case 0: + + break; + case 200: + Bundle bundle = (Bundle) msg.obj; + getFile(bundle); + break; + } + } + }; + + private void getFile(final Bundle bundle) { + final File path = new File(Environment.getExternalStoragePublicDirectory("Download") + "/Sninfo/"); + path.mkdirs(); + final File file = new File(Environment.getExternalStoragePublicDirectory("Download") + "/Sninfo/Update" + bundle.getString("versionCode") + ".apk"); + + if (file.exists() && file.isFile()) { + AlertDialog.Builder builder = new AlertDialog.Builder(this) + .setTitle("软件更新") + .setIcon(R.mipmap.ic_launcher_home) + .setCancelable(false) + .setMessage("发现新版本,点击确定更新\n" + "更新内容:" + bundle.getString("content")) + .setPositiveButton("确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + ApkUtils.installApk(MyDownloadService.this, file); + dialogInterface.dismiss(); + } + }); + AlertDialog ad = builder.create(); + ad.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); + ad.setCanceledOnTouchOutside(false); //点击外面区域不会让dialog消失 + ad.show(); + } else { + OkGo.get(bundle.getString("url")) + .execute(new FileCallback("Sninfo/Update" + bundle.getString("versionCode") + ".apk") { + @Override + public void onSuccess(final Response response) { +// Settings.System.putString(getApplicationContext().getContentResolver(), "qch_app_forbid", "com.baidu.video"); +// ApkUtils.installApkInSilence(response.body().getAbsolutePath(), Launcher.this.getPackageName()); + AlertDialog.Builder builder = new AlertDialog.Builder(MyDownloadService.this) + .setTitle("软件更新") + .setIcon(R.mipmap.ic_launcher_home) + .setCancelable(false) + .setMessage("发现新版本,点击确定更新\n" + "更新内容:" + bundle.getString("content")) + .setPositiveButton("确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + ApkUtils.installApk(MyDownloadService.this, response.body()); + dialogInterface.dismiss(); + } + }); + AlertDialog ad = builder.create(); + ad.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); + ad.setCanceledOnTouchOutside(false); //点击外面区域不会让dialog消失 + ad.show(); + Log.e("getFile", "download file successful,now installing"); + } + + @Override + public void onError(Response response) { + super.onError(response); + Log.e("getFile", "File download Failure" + response.getException()); + } + + @Override + public void downloadProgress(Progress progress) { + super.downloadProgress(progress); + Log.e("getFile", "已下载:" + progress.currentSize + ",总大小:" + progress.totalSize + ",进度:" + progress.fraction + ",当前网速:" + progress.speed); + } + }); + } + } + +} diff --git a/app/src/main/java/com/info/sn/service/StepService.java b/app/src/main/java/com/info/sn/service/StepService.java new file mode 100644 index 0000000..43c9b54 --- /dev/null +++ b/app/src/main/java/com/info/sn/service/StepService.java @@ -0,0 +1,68 @@ +package com.info.sn.service; + +/** + * 作者 mjsheng + * 日期 2019/4/1 10:57 + * 邮箱 501802639@qq.com + * 来自: + */ + +import android.app.Service; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.ServiceConnection; +import android.os.IBinder; + +import androidx.annotation.Nullable; + +import com.info.sn.KeepAliveConnection; +import com.info.sn.utils.LogUtils; +import com.info.sn.utils.ServiceAliveUtils; + + +/** + * 主进程 双进程通讯 + * + * @author LiGuangMin + * @time Created by 2018/8/17 11:26 + */ +public class StepService extends Service { + + private final static String TAG = StepService.class.getSimpleName(); + private ServiceConnection mServiceConnection = new ServiceConnection() { + @Override + public void onServiceConnected(ComponentName componentName, IBinder iBinder) { + LogUtils.e(TAG, "StepService:建立链接"); + boolean isServiceRunning = ServiceAliveUtils.isServiceAlice(); + if (!isServiceRunning) { + Intent i = new Intent(StepService.this, MyDownloadService.class); + startService(i); + } + } + + @Override + public void onServiceDisconnected(ComponentName componentName) { + // 断开链接 + startService(new Intent(StepService.this, GuardService.class)); + // 重新绑定 + bindService(new Intent(StepService.this, GuardService.class), mServiceConnection, Context.BIND_IMPORTANT); + } + }; + + @Nullable + @Override + public IBinder onBind(Intent intent) { + return new KeepAliveConnection.Stub() { + }; + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { +// startForeground(1, new Notification()); + // 绑定建立链接 + bindService(new Intent(this, GuardService.class), mServiceConnection, Context.BIND_IMPORTANT); + return START_STICKY; + } + +} diff --git a/app/src/main/java/com/info/sn/utils/ApkUtils.java b/app/src/main/java/com/info/sn/utils/ApkUtils.java new file mode 100644 index 0000000..6ebe7ab --- /dev/null +++ b/app/src/main/java/com/info/sn/utils/ApkUtils.java @@ -0,0 +1,454 @@ +package com.info.sn.utils; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.net.Uri; +import android.os.Binder; +import android.os.Build; +import android.util.Log; +import android.view.View; +import android.widget.Toast; + +import androidx.core.content.FileProvider; + + +import com.info.sn.R; + +import java.io.BufferedReader; +import java.io.DataOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; + +import rx.Observable; +import rx.Observer; +import rx.Subscriber; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ApkUtils { + + + public static synchronized boolean getRootAhth() { + Process process = null; + DataOutputStream os = null; + try { + process = Runtime.getRuntime().exec("su"); + os = new DataOutputStream(process.getOutputStream()); + os.writeBytes("exit\n"); + os.flush(); + int exitValue = process.waitFor(); + if (exitValue == 0) { + return true; + } else { + return false; + } + } catch (Exception e) { + Log.e("*** DEBUG ***", "Unexpected error - Here is what I know: " + + e.getMessage()); + return false; + } finally { + try { + if (os != null) { + os.close(); + } + process.destroy(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + public static void openApp(Context context, View view) { + try { + Intent intent = context.getPackageManager().getLaunchIntentForPackage((String) view.getTag(R.string.download_btn_had)); + context.startActivity(intent); + } catch (Exception e) { + Toast.makeText(context, R.string.open_app_fail, Toast.LENGTH_LONG).show(); + } + return; + } + + public static void openApp(Context context, String packageName) { + Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName); + if (intent != null) { + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(intent); + } + } + + + /** + * 安装一个apk文件 + */ + public static void install(Context context, File uriFile) { + + Intent intent = new Intent(Intent.ACTION_VIEW); + // 由于没有在Activity环境下启动Activity,设置下面的标签 + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + if (Build.VERSION.SDK_INT >= 24) { //判读版本是否在7.0以上 + //参数1 上下文, 参数2 Provider主机地址 和配置文件中保持一致 参数3 共享的文件 + Uri apkUri = + FileProvider.getUriForFile(context, "com.info.sn.fileprovider", uriFile); + //添加这一句表示对目标应用临时授权该Uri所代表的文件 + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + intent.setDataAndType(apkUri, "application/vnd.android.package-archive"); + } else { + intent.setDataAndType(Uri.fromFile(uriFile), + "application/vnd.android.package-archive"); + } + context.startActivity(intent); + } + + /** + * 卸载一个app + */ + public static void uninstall(Context context, String packageName) { + //通过程序的包名创建URI + Uri packageURI = Uri.parse("package:" + packageName); + //创建Intent意图 + Intent intent = new Intent(Intent.ACTION_DELETE, packageURI); + //执行卸载程序 + context.startActivity(intent); + } + + /** + * 检查手机上是否安装了指定的软件 + */ + public static boolean isAvailable(Context context, String packageName) { + // 获取packagemanager + final PackageManager packageManager = context.getPackageManager(); + // 获取所有已安装程序的包信息 + List packageInfos = packageManager.getInstalledPackages(0); + // 用于存储所有已安装程序的包名 + List packageNames = new ArrayList<>(); + // 从pinfo中将包名字逐一取出,压入pName list中 + if (packageInfos != null) { + for (int i = 0; i < packageInfos.size(); i++) { + String packName = packageInfos.get(i).packageName; + packageNames.add(packName); + } + } + // 判断packageNames中是否有目标程序的包名,有TRUE,没有FALSE + return packageNames.contains(packageName); + } + + /** + * 检查手机上是否安装了指定的软件 + */ + public static boolean isAvailable(Context context, File file) { + return isAvailable(context, getPackageName(context, file.getAbsolutePath())); + } + + /** + * 根据文件路径获取包名 + */ + public static String getPackageName(Context context, String filePath) { + PackageManager packageManager = context.getPackageManager(); + PackageInfo info = packageManager.getPackageArchiveInfo(filePath, PackageManager.GET_ACTIVITIES); + if (info != null) { + ApplicationInfo appInfo = info.applicationInfo; + return appInfo.packageName; //得到安装包名称 + } + return null; + } + + /** + * 从apk中获取版本信息 + */ + public static String getChannelFromApk(Context context, String channelPrefix) { + //从apk包中获取 + ApplicationInfo appinfo = context.getApplicationInfo(); + String sourceDir = appinfo.sourceDir; + //默认放在meta-inf/里, 所以需要再拼接一下 + String key = "META-INF/" + channelPrefix; + String ret = ""; + ZipFile zipfile = null; + try { + zipfile = new ZipFile(sourceDir); + Enumeration entries = zipfile.entries(); + while (entries.hasMoreElements()) { + ZipEntry entry = ((ZipEntry) entries.nextElement()); + String entryName = entry.getName(); + if (entryName.startsWith(key)) { + ret = entryName; + break; + } + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (zipfile != null) { + try { + zipfile.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + String[] split = ret.split(channelPrefix); + String channel = ""; + if (split.length >= 2) { + channel = ret.substring(key.length()); + } + return channel; + } + + + public static void installRx(final Context context, final String packageName, final String filePath) { + + Observable.create(new Observable.OnSubscribe() { + @Override + public void call(Subscriber subscriber) { + File file = new File(filePath); + if (filePath == null || filePath.length() == 0 || file == null) { + Log.e("fanhuitong", "errormesg=========" + " 空啊 "); + subscriber.onNext(0); + return; + } + // String[] args = { "pm", "install", "-r", filePath }; + String[] args = {"pm", "install", "-i", "com.colorflykids", "--user", "0", filePath}; + // String argss = "pm install -i " + "com.colorflykids" + " --user 0 " + filePath; + Log.e("fanhuitong", "argss====" + args); + ProcessBuilder processBuilder = new ProcessBuilder(args); + Process process = null; + BufferedReader successResult = null; + BufferedReader errorResult = null; + StringBuilder successMsg = new StringBuilder(); + StringBuilder errorMsg = new StringBuilder(); + try { + process = processBuilder.start(); + successResult = new BufferedReader(new InputStreamReader(process.getInputStream())); + errorResult = new BufferedReader(new InputStreamReader(process.getErrorStream())); + String s; + while ((s = successResult.readLine()) != null) { + Log.e("mjhseng", "successResult----------" + s); + successMsg.append(s); + } + while ((s = errorResult.readLine()) != null) { + Log.e("mjhseng", "errorResult----------" + s); + errorMsg.append(s); + } + } catch (IOException e1) { + Log.e("fanhuitong", "IOException e1)----------" + e1.toString()); + e1.printStackTrace(); + } finally { + try { + if (successResult != null) { + successResult.close(); + } + if (errorResult != null) { + errorResult.close(); + } + } catch (IOException e1) { + Log.e("fanhuitong", "IOException e11)---------" + e1.toString()); + e1.printStackTrace(); + } + if (process != null) { + process.destroy(); + } + } + if (successMsg.toString().contains("Success") || successMsg.toString().contains("success")) { + subscriber.onNext(2); + } else { + Log.e("fanhuitong", "errormesg=========" + errorMsg.toString()); + subscriber.onNext(1); + } + } + }).subscribeOn(Schedulers.newThread()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + + @Override + public void onNext(Integer value) { + if (value == 2) { + //安装成功 + Utils.showToast(context, "安装成功"); + Log.e("fanhuitong", "-----------安装成功-----------"); + } else { + //安装错误 + Log.e("fanhuitong", "------------安装错误-----------"); + Utils.showToast(context, "安装失败"); + } + } + + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + //安装错误 + } + }); + } + + // public static void installApp(final String path, final String packageNames){ + // File apkFile = new File(path); + // try { + // Class clazz = Class.forName("android.os.ServiceManager"); + // Method method_getService = clazz.getMethod("getService", String.class); + // IBinder bind = (IBinder) method_getService.invoke(null, "package"); + // IPackageManager iPm = IPackageManager.Stub.asInterface(bind); + // iPm.installPackage(Uri.fromFile(apkFile),null, 2, apkFile.getName()); + // Log.e("fanhuitong", "安装成功"); + // } catch (Exception e) { + // e.printStackTrace(); + // Log.e("fanhuitong", "安装失败"); + // } + // } + + //使用系统签名 + public static void installApkInSilence(String installPath, String packageName) { + ToastUtil.show("正在安装应用..."); + Class pmService; + Class activityTherad; + Method method; + try { + activityTherad = Class.forName("android.app.ActivityThread"); + Class paramTypes[] = getParamTypes(activityTherad, "getPackageManager"); + method = activityTherad.getMethod("getPackageManager", paramTypes); + Object PackageManagerService = method.invoke(activityTherad); + pmService = PackageManagerService.getClass(); + Class paramTypes1[] = getParamTypes(pmService, "installPackageAsUser"); + method = pmService.getMethod("installPackageAsUser", paramTypes1); + method.invoke(PackageManagerService, installPath, null, 0x00000040, packageName, getUserId(Binder.getCallingUid()));//getUserId + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } catch (NoSuchMethodException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + } + + public static void deleteApkInSilence(String packageName) { + Class pmService; + Class activityTherad; + Method method; + try { + activityTherad = Class.forName("android.app.ActivityThread"); + Class paramTypes[] = getParamTypes(activityTherad, "getPackageManager"); + method = activityTherad.getMethod("getPackageManager", paramTypes); + Object PackageManagerService = method.invoke(activityTherad); + pmService = PackageManagerService.getClass(); + Class paramTypes1[] = getParamTypes(pmService, "deletePackageAsUser"); + method = pmService.getMethod("deletePackageAsUser", paramTypes1); + method.invoke(PackageManagerService, packageName, null, getUserId(Binder.getCallingUid()), 0x00000040);//getUserId + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } catch (NoSuchMethodException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + } + + private static Class[] getParamTypes(Class cls, String mName) { + Class cs[] = null; + Method[] mtd = cls.getMethods(); + for (int i = 0; i < mtd.length; i++) { + if (!mtd[i].getName().equals(mName)) { + continue; + } + + cs = mtd[i].getParameterTypes(); + } + return cs; + } + + public static final int PER_USER_RANGE = 100000; + + public static int getUserId(int uid) { + return uid / PER_USER_RANGE; + } + + public static boolean checkIsUpdate(Context context, String packageName, int versionCode) { + PackageManager packageManager = context.getPackageManager(); + boolean update = false; + PackageInfo packageInfo = null; + try { + packageInfo = packageManager.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES); + int code = packageInfo.versionCode; + update = versionCode > code; + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); +// LogUtils.e("NameNotFoundException", e.getMessage()); + update = false; + } + return update; + } + + synchronized public static PackageInfo getPackageInfo(Context context, String packageName) { + PackageManager pm = context.getPackageManager(); + PackageInfo packageInfo = null; + try { + packageInfo = pm.getPackageInfo(packageName, 0); + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + Log.e("getPackageInfo", packageName + ":" + e.getMessage()); + } + return packageInfo; + } + + synchronized public static String getApplicationName(Context context, String packageName) { + PackageManager pm = context.getPackageManager(); + PackageInfo packageInfo = null; + String name = ""; + try { + packageInfo = pm.getPackageInfo(packageName, 0); + name = pm.getApplicationLabel(packageInfo.applicationInfo).toString(); + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + Log.e("getPackageInfo", packageName + ":" + e.getMessage()); + } + return name; + } + public static void installApk(Activity activity, File newApkFile) { + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.addCategory(Intent.CATEGORY_DEFAULT); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + String type = "application/vnd.android.package-archive"; + Uri uri; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + uri = FileProvider.getUriForFile(activity, "com.info.sn.fileprovider", newApkFile); + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + } else { + uri = Uri.fromFile(newApkFile); + } + intent.setDataAndType(uri, type); + activity.startActivity(intent); + } + public static void installApk(Context context, File newApkFile) { + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.addCategory(Intent.CATEGORY_DEFAULT); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + String type = "application/vnd.android.package-archive"; + Uri uri; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + uri = FileProvider.getUriForFile(context, "com.info.sn.fileprovider", newApkFile); + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + } else { + uri = Uri.fromFile(newApkFile); + } + intent.setDataAndType(uri, type); + context.startActivity(intent); + } + +} diff --git a/app/src/main/java/com/info/sn/utils/AppUpdateInfo.java b/app/src/main/java/com/info/sn/utils/AppUpdateInfo.java new file mode 100644 index 0000000..a9049e9 --- /dev/null +++ b/app/src/main/java/com/info/sn/utils/AppUpdateInfo.java @@ -0,0 +1,34 @@ +package com.info.sn.utils; + +/** + * Created by Administrator on 2017/1/10. + */ + +public class AppUpdateInfo { + private String packageName; + private String version; + + public String getPackageName() { + return packageName; + } + + public void setPackageName(String packageName) { + this.packageName = packageName; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + @Override + public String toString() { + return "AppUpdateInfo{" + + "packageName='" + packageName + '\'' + + ", version='" + version + '\'' + + '}'; + } +} diff --git a/app/src/main/java/com/info/sn/utils/AppsManagerUtils.java b/app/src/main/java/com/info/sn/utils/AppsManagerUtils.java new file mode 100644 index 0000000..42767f6 --- /dev/null +++ b/app/src/main/java/com/info/sn/utils/AppsManagerUtils.java @@ -0,0 +1,146 @@ +package com.info.sn.utils; + +import android.content.Context; +import android.content.Intent; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.content.pm.PackageManager.NameNotFoundException; +import android.content.pm.ResolveInfo; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class AppsManagerUtils { + + public static AppUpdateInfo getUpAppsByPackageName(Context context, String packageName) { + PackageManager pm = context.getPackageManager(); + AppUpdateInfo appInfo = new AppUpdateInfo(); + try { + PackageInfo packinfo = pm.getPackageInfo(packageName, 0); + appInfo.setPackageName(packageName); + appInfo.setVersion(packinfo.versionName); + if (packinfo.versionName == null || packinfo.versionName.equals("")) { + appInfo.setVersion(packinfo.versionCode + ""); + } + } catch (NameNotFoundException e) { + e.printStackTrace(); + } + return appInfo; + } + + public static LocalAppInfo getAppsByPackageName(Context context, String packageName) { + PackageManager pm = context.getPackageManager(); + List appInfos = new ArrayList(); + Intent intent = new Intent(Intent.ACTION_MAIN, null); + intent.addCategory(Intent.CATEGORY_LAUNCHER); + // 通过查询,获得所有ResolveInfo对象. + List infos = pm.queryIntentActivities(intent, 0); + for (ResolveInfo info : infos) { + // 不列出系统应用 + String pkg = info.activityInfo.packageName; + if (pkg.equals(packageName)) { + extractedAppInfo(pm, appInfos, info); + } + + } + return appInfos.get(0); + } + + public static List getUpadteApps(Context context) { + PackageManager pm = context.getPackageManager(); + List appInfos = new ArrayList(); + Intent intent = new Intent(Intent.ACTION_MAIN, null); + + intent.addCategory(Intent.CATEGORY_LAUNCHER); + // 通过查询,获得所有ResolveInfo对象. + List infos = pm.queryIntentActivities(intent, 0); + for (ResolveInfo info : infos) { + // 不列出系统应用 + String pkg = info.activityInfo.packageName; + if (!isSystemApp(context, pkg)) { + PackageInfo packageInfo = null; + AppUpdateInfo appInfo = new AppUpdateInfo(); + appInfo.setPackageName(info.activityInfo.packageName); + try { + packageInfo = pm.getPackageInfo(info.activityInfo.packageName, 0); + appInfo.setVersion(packageInfo.versionName); + if (packageInfo.versionName == null || packageInfo.versionName.equals("")) { + appInfo.setVersion(packageInfo.versionCode + ""); + } + } catch (NameNotFoundException e) { + e.printStackTrace(); + } + appInfos.add(appInfo); + } + + } + return appInfos; + } + + public static List getUserApps(Context context) { + PackageManager pm = context.getPackageManager(); + List appInfos = new ArrayList(); + Intent intent = new Intent(Intent.ACTION_MAIN, null); + intent.addCategory(Intent.CATEGORY_LAUNCHER); + // 通过查询,获得所有ResolveInfo对象. + List infos = pm.queryIntentActivities(intent, 0); + for (ResolveInfo info : infos) { + // 不列出系统应用 + String pkg = info.activityInfo.packageName; + if (!isSystemApp(context, pkg)) { + extractedAppInfo(pm, appInfos, info); + } + + } + return appInfos; + } + + + + private static void extractedAppInfo(PackageManager pm, + List appInfos, ResolveInfo info) { + PackageInfo packageInfo = null; + LocalAppInfo appInfo = new LocalAppInfo(); + appInfo.setIcon(info.activityInfo.loadIcon(pm)); + appInfo.setAppName(info.activityInfo.loadLabel(pm).toString()); + appInfo.setPackageName(info.activityInfo.packageName); + + try { + packageInfo = pm.getPackageInfo(info.activityInfo.packageName, 0); + appInfo.setVersion(packageInfo.versionName); + if (packageInfo.versionName == null || packageInfo.versionName.equals("")) { + appInfo.setVersion(packageInfo.versionCode + ""); + } + String appInstallDir = info.activityInfo.applicationInfo.publicSourceDir; + int size = Integer.valueOf((int) new File(appInstallDir).length()); + appInfo.setSize(size); + } catch (NameNotFoundException e) { + e.printStackTrace(); + } + appInfos.add(appInfo); + } + + + public static boolean isSystemApp(Context context, String pkg) { + try { + PackageInfo packageInfo = context.getPackageManager().getPackageInfo(pkg, 0); + if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) <= 0) { + if (pkg.equals(context.getPackageName())) { + return true; + } else { + //第三方应用 + return false; + } + } else { + //系统应用 + return true; + } + } catch (NameNotFoundException e) { + e.printStackTrace(); + return true; + } + } + +} diff --git a/app/src/main/java/com/info/sn/utils/CommonData.java b/app/src/main/java/com/info/sn/utils/CommonData.java new file mode 100644 index 0000000..66d843a --- /dev/null +++ b/app/src/main/java/com/info/sn/utils/CommonData.java @@ -0,0 +1,28 @@ +package com.info.sn.utils; + + + +public class CommonData { + + public static final String MAJOR_ACTION = "MAJOR_ACTION"; + public static final String FLAG_FIRST_ENTER = "first_enter"; + public static final String SP_USER_ID = "user_ID"; + public static final String SP_USER_PHONE = "user_phone"; + public static final String SP_USER_NAME = "user_name"; + public static final String SP_USER_IDCARD = "user_idcard"; + public static final String SP_USER_PASSWORD = "user_pass"; + public static final String SP_RECOMMEND_PHONE = "recommend_phone"; + public static final String SP_RECOMMEND_NAME = "sup_name"; + public static final String SP_USER_LEVEL = "user_level"; + public static final String SP_ISLOGINED = "user_islogined"; + + + public static final String NEXT_PAGE = "next_page"; + + public static final String BANK_NAME = "bank_name"; + public static final String OPERATOR_NAME = "bank_name"; + + public static final String PRODUCT_LINK = "product_link"; + public static final String PRODUCT_NAME = "product_name"; + +} diff --git a/app/src/main/java/com/info/sn/utils/LocalAppInfo.java b/app/src/main/java/com/info/sn/utils/LocalAppInfo.java new file mode 100644 index 0000000..c8371ed --- /dev/null +++ b/app/src/main/java/com/info/sn/utils/LocalAppInfo.java @@ -0,0 +1,144 @@ +package com.info.sn.utils; + +import android.graphics.drawable.Drawable; + +public class LocalAppInfo { + + public static final int DOWNLOAD_STATUS_NORMAL = 0; + public static final int DOWNLOAD_STATUS_DOWNLOADING = 1; + public static final int DOWNLOAD_STATUS_PAUSE = 2; + private Drawable icon; + private String iconUrl = ""; + private String appName; + private String packageName; + private String version; + private String latestVersion = ""; + private int size; + private String latestSize; + private String downLoadUrl; + private int dowloadStatus = DOWNLOAD_STATUS_NORMAL; + private String tip; + private int id; + + public Drawable getIcon() { + return icon; + } + + public void setIcon(Drawable icon) { + this.icon = icon; + } + + public String getIconUrl() { + return iconUrl; + } + + public void setIconUrl(String iconUrl) { + this.iconUrl = iconUrl; + } + + public String getAppName() { + return appName; + } + + public void setAppName(String appName) { + this.appName = appName; + } + + public String getPackageName() { + return packageName; + } + + public void setPackageName(String packageName) { + this.packageName = packageName; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public int getSize() { + return size; + } + + public void setSize(int size) { + this.size = size; + } + + public String getLatestVersion() { + return latestVersion; + } + + public void setLatestVersion(String latestVersion) { + this.latestVersion = latestVersion; + } + + public String getLatestSize() { + return latestSize; + } + + public void setLatestSize(String latestSize) { + this.latestSize = latestSize; + } + + public String getDownLoadUrl() { + return downLoadUrl; + } + + public void setDownLoadUrl(String downLoadUrl) { + this.downLoadUrl = downLoadUrl; + } + + public int getDowloadStatus() { + return dowloadStatus; + } + + public void setDowloadStatus(int dowloadStatus) { + this.dowloadStatus = dowloadStatus; + } + + public String getTip() { + return tip; + } + + public void setTip(String tip) { + this.tip = tip; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + @Override + public String toString() { + return "AppUpdateInfo{" + + "packageName='" + packageName + '\'' + + ", version='" + version + '\'' + + '}'; + } + + + public boolean equals(Object obj) { + if (this == obj) //传入的对象就是它自己,如s.equals(s);肯定是相等的; + return true; + if (obj == null) //如果传入的对象是空,肯定不相等 + return false; + if (getClass() != obj.getClass()) //如果不是同一个类型的,如Studnet类和Animal类, + //也不用比较了,肯定是不相等的 + return false; + LocalAppInfo other = (LocalAppInfo) obj; + if (packageName == null) { + if (other.packageName != null) + return false; + } else if (!packageName.equals(other.packageName)) //如果name属性相等,则相等 + return false; + return true; + } +} diff --git a/app/src/main/java/com/info/sn/utils/LogUtils.java b/app/src/main/java/com/info/sn/utils/LogUtils.java new file mode 100644 index 0000000..cb51ca2 --- /dev/null +++ b/app/src/main/java/com/info/sn/utils/LogUtils.java @@ -0,0 +1,40 @@ +package com.info.sn.utils; + +import android.util.Log; + +import com.info.sn.BuildConfig; + +public class LogUtils { + static boolean isDebug = BuildConfig.LOG_DEBUG; +// static boolean isDebug = BuildConfig.LOG_DEBUG; + + public static void v(String tag, String msg) { + if (isDebug) { + Log.v(tag, msg); + } + } + + public static void d(String tag, String msg) { + if (isDebug) { + Log.d(tag, msg); + } + } + + public static void i(String tag, String msg) { + if (isDebug) { + Log.i(tag, msg); + } + } + + public static void w(String tag, String msg) { + if (isDebug) { + Log.w(tag, msg); + } + } + + public static void e(String tag, String msg) { + if (isDebug) { + Log.e(tag, msg); + } + } +} diff --git a/app/src/main/java/com/info/sn/utils/SPUtils.java b/app/src/main/java/com/info/sn/utils/SPUtils.java new file mode 100644 index 0000000..0332795 --- /dev/null +++ b/app/src/main/java/com/info/sn/utils/SPUtils.java @@ -0,0 +1,198 @@ +package com.info.sn.utils; + +import android.content.Context; +import android.content.SharedPreferences; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.util.Base64; +import android.widget.ImageView; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Map; + +/** + * 作者 mjsheng + * 日期 2018/10/9 18:41 + * 邮箱 278359328@qq.com + * 来自: + */ + +public class SPUtils { + /** + * 保存在手机里面的文件名 + */ + public static final String FILE_NAME = "share_data"; + + /** + * 保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法 + */ + public static void put(Context context, String key, Object object) { + + SharedPreferences sp = context.getSharedPreferences(FILE_NAME, + Context.MODE_PRIVATE); + SharedPreferences.Editor editor = sp.edit(); + + if (object instanceof String) { + editor.putString(key, (String) object); + } else if (object instanceof Integer) { + editor.putInt(key, (Integer) object); + } else if (object instanceof Boolean) { + editor.putBoolean(key, (Boolean) object); + } else if (object instanceof Float) { + editor.putFloat(key, (Float) object); + } else if (object instanceof Long) { + editor.putLong(key, (Long) object); + } else { + editor.putString(key, object.toString()); + } + + SharedPreferencesCompat.apply(editor); + } + + /** + * 得到保存数据的方法,我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值 + */ + public static Object get(Context context, String key, Object defaultObject) { + SharedPreferences sp = context.getSharedPreferences(FILE_NAME, + Context.MODE_PRIVATE); + + if (defaultObject instanceof String) { + return sp.getString(key, (String) defaultObject); + } else if (defaultObject instanceof Integer) { + return sp.getInt(key, (Integer) defaultObject); + } else if (defaultObject instanceof Boolean) { + return sp.getBoolean(key, (Boolean) defaultObject); + } else if (defaultObject instanceof Float) { + return sp.getFloat(key, (Float) defaultObject); + } else if (defaultObject instanceof Long) { + return sp.getLong(key, (Long) defaultObject); + } + + return null; + } + + /** + * 移除某个key值已经对应的值 + */ + public static void remove(Context context, String key) { + SharedPreferences sp = context.getSharedPreferences(FILE_NAME, + Context.MODE_PRIVATE); + SharedPreferences.Editor editor = sp.edit(); + editor.remove(key); + SharedPreferencesCompat.apply(editor); + } + + /** + * 清除所有数据 + */ + public static void clear(Context context) { + SharedPreferences sp = context.getSharedPreferences(FILE_NAME, + Context.MODE_PRIVATE); + SharedPreferences.Editor editor = sp.edit(); + editor.clear(); + SharedPreferencesCompat.apply(editor); + reductFirstEnter(context); + } + + //还原状态firstEnter信息 + private static void reductFirstEnter(Context context){ + put(context, CommonData.FLAG_FIRST_ENTER,CommonData.FLAG_FIRST_ENTER); + } + + /** + * 查询某个key是否已经存在 + */ + public static boolean contains(Context context, String key) { + SharedPreferences sp = context.getSharedPreferences(FILE_NAME, + Context.MODE_PRIVATE); + return sp.contains(key); + } + + /** + * 返回所有的键值对 + */ + public static Map getAll(Context context) { + SharedPreferences sp = context.getSharedPreferences(FILE_NAME, + Context.MODE_PRIVATE); + return sp.getAll(); + } + + + /** + * 保存图片到SharedPreferences + * + * @param mContext + * @param imageView + */ + public static void putImage(Context mContext, String key, ImageView imageView) { + BitmapDrawable drawable = (BitmapDrawable) imageView.getDrawable(); + Bitmap bitmap = drawable.getBitmap(); + // 将Bitmap压缩成字节数组输出流 + ByteArrayOutputStream byStream = new ByteArrayOutputStream(); + bitmap.compress(Bitmap.CompressFormat.PNG, 80, byStream); + // 利用Base64将我们的字节数组输出流转换成String + byte[] byteArray = byStream.toByteArray(); + String imgString = new String(Base64.encodeToString(byteArray, Base64.DEFAULT)); + // 将String保存shareUtils + SPUtils.put(mContext, key, imgString); + } + + /** + * 从SharedPreferences读取图片 + * + * @param mContext + * @param imageView + */ + public static Bitmap getImage(Context mContext, String key, ImageView imageView) { + String imgString = (String) SPUtils.get(mContext, key, ""); + if (!imgString.equals("")) { + // 利用Base64将我们string转换 + byte[] byteArray = Base64.decode(imgString, Base64.DEFAULT); + ByteArrayInputStream byStream = new ByteArrayInputStream(byteArray); + // 生成bitmap + return BitmapFactory.decodeStream(byStream); + } + return null; + } + + /** + * 创建一个解决SharedPreferencesCompat.apply方法的一个兼容类 + */ + private static class SharedPreferencesCompat { + private static final Method sApplyMethod = findApplyMethod(); + + /** + * 反射查找apply的方法 + */ + @SuppressWarnings({"unchecked", "rawtypes"}) + private static Method findApplyMethod() { + try { + Class clz = SharedPreferences.Editor.class; + return clz.getMethod("apply"); + } catch (NoSuchMethodException e) { + } + + return null; + } + + /** + * 如果找到则使用apply执行,否则使用commit + */ + public static void apply(SharedPreferences.Editor editor) { + try { + if (sApplyMethod != null) { + sApplyMethod.invoke(editor); + return; + } + } catch (IllegalArgumentException e) { + } catch (IllegalAccessException e) { + } catch (InvocationTargetException e) { + } + editor.commit(); + } + } +} diff --git a/app/src/main/java/com/info/sn/utils/ServiceAliveUtils.java b/app/src/main/java/com/info/sn/utils/ServiceAliveUtils.java new file mode 100644 index 0000000..2d672d0 --- /dev/null +++ b/app/src/main/java/com/info/sn/utils/ServiceAliveUtils.java @@ -0,0 +1,24 @@ +package com.info.sn.utils; + +import android.app.ActivityManager; +import android.content.Context; + +import com.info.sn.MyApplication; + +public class ServiceAliveUtils { + + public static boolean isServiceAlice() { + boolean isServiceRunning = false; + ActivityManager manager = + (ActivityManager) MyApplication.getInstance().getAppContext().getSystemService(Context.ACTIVITY_SERVICE); + if (manager == null) { + return true; + } + for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { + if ("demo.lgm.com.keepalivedemo.service.DownloadService".equals(service.service.getClassName())) { + isServiceRunning = true; + } + } + return isServiceRunning; + } +} diff --git a/app/src/main/java/com/info/sn/utils/ToastUtil.java b/app/src/main/java/com/info/sn/utils/ToastUtil.java new file mode 100644 index 0000000..9638836 --- /dev/null +++ b/app/src/main/java/com/info/sn/utils/ToastUtil.java @@ -0,0 +1,65 @@ +package com.info.sn.utils; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.os.Handler; +import android.os.Looper; +import android.widget.Toast; + +import com.info.sn.BuildConfig; + + +/** + * Created by haoge on 2017/3/2. + */ + +public class ToastUtil { + static Handler mainHandler = new Handler(Looper.getMainLooper()); + static Toast toast; + + @SuppressLint("ShowToast") + public static void init(Context context) { + toast = Toast.makeText(context, "", Toast.LENGTH_SHORT); + debugToast = Toast.makeText(context, "", Toast.LENGTH_SHORT); + + } + + public static void show(final String msg) { + mainHandler.post(new Runnable() { + @Override + public void run() { + if (toast != null) { + toast.setText(msg); + toast.show(); + } + } + }); + } + + // public static void showInCenter(String msg) { +// mainHandler.post(() -> { +// if (toast != null) { +// toast.setGravity(Gravity.CENTER, 0, 0); +// toast.setText(msg); +// toast.show(); +// } +// }); +// } + static Handler debugHandler = new Handler(Looper.getMainLooper()); + static Toast debugToast; + + public static void debugShow(final String msg) { + mainHandler.post(new Runnable() { + @Override + public void run() { + if (BuildConfig.LOG_DEBUG) { + if (toast != null) { + toast.setText(msg); + toast.show(); + } + } + } + }); + } + +} diff --git a/app/src/main/java/com/info/sn/utils/Utils.java b/app/src/main/java/com/info/sn/utils/Utils.java new file mode 100644 index 0000000..39fb541 --- /dev/null +++ b/app/src/main/java/com/info/sn/utils/Utils.java @@ -0,0 +1,864 @@ +package com.info.sn.utils; + +import android.annotation.SuppressLint; +import android.app.admin.DevicePolicyManager; +import android.content.ActivityNotFoundException; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.content.pm.PackageManager.NameNotFoundException; +import android.content.pm.ResolveInfo; +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffXfermode; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.net.Uri; +import android.net.wifi.WifiInfo; +import android.net.wifi.WifiManager; +import android.os.Build; +import android.provider.Settings; +import android.telephony.TelephonyManager; +import android.text.TextUtils; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.view.inputmethod.InputMethodManager; +import android.widget.EditText; +import android.widget.Toast; + +import com.google.zxing.BarcodeFormat; +import com.google.zxing.EncodeHintType; +import com.google.zxing.WriterException; +import com.google.zxing.common.BitMatrix; +import com.google.zxing.qrcode.QRCodeWriter; +import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; +import com.info.sn.MyApplication; +import com.info.sn.R; + +import java.io.FileReader; +import java.io.InputStreamReader; +import java.io.LineNumberReader; +import java.io.Reader; +import java.net.NetworkInterface; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Collections; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public class Utils { + + + public static final String PACKAGE = "appstore"; + public static final String DOWNLOAD_STARTALL_ACTION = PACKAGE + "_startall"; // 开始所有任务 + public static final String DOWNLOAD_DELETE_UPDATE_ACTION = PACKAGE + "_download_update_delete"; // 删除应用更新文件 + public static final String DOWNLOAD_DELETEALL_ACTION = PACKAGE + "_deleteall_alltask"; // 删除所有任务 + public static final String DOWNLOAD_ALLTASK_ACTION = PACKAGE + "_download_alltask"; // 获取所有任务 + public static final String DOWNLOAD_START_ACTION = PACKAGE + "_download_start"; // 下载标识 + public static final String DOWNLOAD_STOP_ACTION = PACKAGE + "_download_stop"; // 暂停标识 + public static final String DOWNLOAD_DELETE_PACKAGENAME_ACTION = PACKAGE + "_download_packagename_delete"; // 删除标识 根据包名 + public static final String DOWNLOAD_DELETE_URL_ACTION = PACKAGE + "_download_url_delete"; // 删除标识 根据下载地址 + public static final String DOWNLOAD_INITIALIZE_ACTION = PACKAGE + "_download_initialize"; // item初始化状态 + public static final String DOWNLOAD_PACKAGENAME_ACTION = PACKAGE + "_download_packagename"; // item初始化状态 包名 + public static final String DOWNLOAD_SERVICE_ACTION = PACKAGE + "_download_service"; // 下载状态回调服务 + + public static final String DOWNLOAD_ALLSERVICE_ACTION = PACKAGE + "_download_allservice"; // 返回所有下载任务 + public static final String DOWNLOAD_NEWSERVICE_ACTION = PACKAGE + "_download_newservice"; // 一个新的下载任务 + + // JPush 推送消息 + public static final String MESSAGE_RECEIVED_ACTION = "com.appstore.jpushdemo.MESSAGE_RECEIVED_ACTION"; + public static final String KEY_TITLE = "title"; // 消息标题 + public static final String KEY_MESSAGE = "message"; // 消息内容 + public static final String KEY_EXTRAS = "extras"; // 消息内容类型 + public static final String KEY_TYPE = "type"; // 消息内容类型 + + + public static final String ACTION_PACKAGE_REPLACED = PACKAGE + "PACKAGE_REPLACED"; // 替换应用 + public static final String ACTION_PACKAGE_REMOVED = PACKAGE + "PACKAGE_REMOVED"; // 卸载应用 + public static final String ACTION_PACKAGE_ADDED = PACKAGE + "PACKAGE_ADDED"; // 安装应用 + + // public static int[] babyImage = {R.drawable.language, R.drawable.habit, R.drawable.knowledge, R.drawable.security, R.drawable.promotion}; +// public static int[] childImage = {R.drawable.yuwen, R.drawable.shuxue, R.drawable.yingyu, R.drawable.qingshang, R.drawable.yishu, R.drawable.promotion}; +// public static int[] youngImage = {R.drawable.yuwen, R.drawable.shuxue, R.drawable.yingyu, R.drawable.promotion}; + // 学习日志上传标识 + public static final String APP_LRARNLOG = "com.colorflykids.alarm"; + // 学习日志下载标识 + public static final String APP_DOWNLOADLEARNLOG = "com.colorflykids.downloadlearnlog"; + // 账号注销标识 + public static final String APP_USERLOGOUT = "com.colorflykids.userlogout"; + + + public static final String UPDATE_SYSTEMUI = "cn.colorflykids.UPDATE_SYSTEMUI"; + public static final int COUNT_ONE_PAGE = 8; + public static final int COUNT_ONE_PAGE2 = 10; + public static final String YOUNGSYSTEM_APP_TONGBU = "com.school.app.syn"; // 小学系统 同步教材app + /** + * + */ + public static final String number[] = { + "1", "2", "3", "4", "5", "6", "7", + "8", "9", "10", "0", "11"}; + public static final String STORE = "store"; + public static final String CATEGORY_THREE = "3"; + public static final String CATEGORY_SIX = "6"; + public static final String CATEGORY_UPSIX = "10"; + public static final String CLOSE_REST_WINDOW = "colse_rest_window"; + public static final String STOP_LOOPING_TIMER = "stop_looping_timer"; + public static final String START_LOOPING_TIMER = "start_looping_timer"; + public static String DOWNLOADAPP_CALLBACK = "com.colorflykids.downloadapp"; // 子界面下载回调 提示更新UI + public static String MENU_YOUYOU = "youyou"; + public static String MENU_LANGUAGE = "语言启蒙"; + public static String MENU_HABIT = "行为习惯"; + public static String MENU_KNOWLEDGE = "生活认知"; + public static String MENU_SECURITY = "安全自理"; + public static String MENU_PROMOTION = "入园-综合提升"; + public static String MENU_LY = "优优乐园"; + public static String MENU_YW = "语文知识"; + public static String MENU_SX = "数理逻辑"; + public static String MENU_YY = "英语启蒙"; + public static String MENU_QS = "情商培养"; + public static String MENU_YS = "艺术提升"; + public static String MENU_ZH = "学前-综合提升"; + public static String MENU_TONGBUJIAOCAI = "同步教材"; + public static String MENU_YUWEN = "语文"; + public static String MENU_SHUXUE = "数学"; + public static String MENU_YINGYU = "英语"; + public static String MENU_ZONGHETISHEGN = "小学-综合提升"; + public static String[] babySystem = {MENU_LANGUAGE, MENU_HABIT, MENU_KNOWLEDGE, MENU_SECURITY, MENU_PROMOTION}; + public static String[] childSystem = {MENU_LY, MENU_YW, MENU_SX, MENU_YY, MENU_QS, MENU_YS, MENU_ZH}; + public static String[] youngSystem = {MENU_YUWEN, MENU_SHUXUE, MENU_YINGYU, MENU_ZONGHETISHEGN}; + + + public static String[] sonSystem = {MENU_HABIT, MENU_SECURITY, MENU_LANGUAGE, MENU_KNOWLEDGE, MENU_PROMOTION, + MENU_LY, MENU_YW, MENU_SX, MENU_YY, MENU_QS, MENU_YS, MENU_ZH, + MENU_TONGBUJIAOCAI, MENU_YUWEN, MENU_SHUXUE, MENU_YINGYU, MENU_YINGYU, MENU_ZONGHETISHEGN}; + public static String[][] tagList = {babySystem, childSystem, youngSystem}; + public static String subcategories[][] = {babySystem, childSystem, youngSystem}; + public static String system[] = {"入园系统", "学前系统", "小学系统"}; + public static String systemandno[] = {"入园系统", "学前系统", "小学系统", "未分配"}; + protected static Toast toast = null; + private static String oldMsg; + private static long oneTime = 0; + private static long twoTime = 0; + + + // 积分记录 达人标准次数记录 + + + // MD5 设备地址标识 + public static String getMAC(Context context) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // 如果当前设备系统大于等于6.0 使用下面的方法 + return getMac(); + } else { + try { + WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); + // 获取MAC地址 + WifiInfo wifiInfo = wifiManager.getConnectionInfo(); + String mac = wifiInfo.getMacAddress(); + if (null == mac) { + // 未获取到 + mac = ""; + } + return mac; + } catch (Exception e) { + e.printStackTrace(); + return ""; + } + } + } + + /** + * 获取手机的MAC地址 + * + * @return + */ + public static String getMac() { + String str = ""; + String macSerial = ""; + try { + Process pp = Runtime.getRuntime().exec( + "cat /sys/class/net/wlan0/address"); + InputStreamReader ir = new InputStreamReader(pp.getInputStream()); + LineNumberReader input = new LineNumberReader(ir); + for (; null != str; ) { + str = input.readLine(); + if (str != null) { + macSerial = str.trim();// 去空格 + break; + } + } + } catch (Exception ex) { + ex.printStackTrace(); + } + if (macSerial == null || "".equals(macSerial)) { + try { + return loadFileAsString("/sys/class/net/eth0/address") + .toUpperCase().substring(0, 17); + } catch (Exception e) { + e.printStackTrace(); + macSerial = getAndroid7MAC(); + } + } + return macSerial; + } + + /** + * 兼容7.0获取不到的问题 + * + * @return + */ + public static String getAndroid7MAC() { + try { + List all = Collections.list(NetworkInterface.getNetworkInterfaces()); + for (NetworkInterface nif : all) { + if (!nif.getName().equalsIgnoreCase("wlan0")) + continue; + byte[] macBytes = nif.getHardwareAddress(); + if (macBytes == null) { + return ""; + } + StringBuilder res1 = new StringBuilder(); + for (byte b : macBytes) { + res1.append(String.format("%02X:", b)); + } + if (res1.length() > 0) { + res1.deleteCharAt(res1.length() - 1); + } + return res1.toString(); + } + } catch (Exception ex) { + } + return ""; + } + + public static String loadFileAsString(String fileName) throws Exception { + FileReader reader = new FileReader(fileName); + String text = loadReaderAsString(reader); + reader.close(); + return text; + } + + public static String loadReaderAsString(Reader reader) throws Exception { + StringBuilder builder = new StringBuilder(); + char[] buffer = new char[4096]; + int readLength = reader.read(buffer); + while (readLength >= 0) { + builder.append(buffer, 0, readLength); + readLength = reader.read(buffer); + } + return builder.toString(); + } + + + // MD5 设备地址标识 + public static String getMD5(Context context) { + String WLANMAC = getMAC(context); + // compute md5 + MessageDigest m = null; + try { + m = MessageDigest.getInstance("MD5"); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + if (WLANMAC != null && !WLANMAC.equals("")) { + m.update(WLANMAC.getBytes(), 0, WLANMAC.length()); + } else if (getSimSerialNumber(context) != null && !getSimSerialNumber(context).equals("")) { + m.update(getSimSerialNumber(context).getBytes(), 0, getSimSerialNumber(context).length()); + } else { + m.update(getPesudoUniqueID().getBytes(), 0, getPesudoUniqueID().length()); + } + // get md5 bytes + byte p_md5Data[] = m.digest(); + // create a hex string + String m_szUniqueID = new String(); + for (int i = 0; i < p_md5Data.length; i++) { + int b = (0xFF & p_md5Data[i]); + // if it is a single digit, make sure it have 0 in front (proper padding) + if (b <= 0xF) + m_szUniqueID += "0"; + // add number to string + m_szUniqueID += Integer.toHexString(b); + } // hex string to uppercase + m_szUniqueID = m_szUniqueID.toUpperCase(); + return m_szUniqueID; + } + + private static String getSimSerialNumber(Context context) { + + TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); + + @SuppressLint("MissingPermission") String simSerialNumber = tm.getSimSerialNumber(); + return simSerialNumber; + } + + + private static String getPesudoUniqueID() { + String m_szDevIDShort = "35" + //we make this look like a valid IMEI + Build.BOARD.length() % 10 + + Build.BRAND.length() % 10 + + Build.CPU_ABI.length() % 10 + + Build.DEVICE.length() % 10 + + Build.DISPLAY.length() % 10 + + Build.HOST.length() % 10 + + Build.ID.length() % 10 + + Build.MANUFACTURER.length() % 10 + + Build.MODEL.length() % 10 + + Build.PRODUCT.length() % 10 + + Build.TAGS.length() % 10 + + Build.TYPE.length() % 10 + + Build.USER.length() % 10; + return m_szDevIDShort; + } + + + // 防止连续点击 + private static long lastClickTime; + + public static boolean isFastDoubleClick() { + long time = System.currentTimeMillis(); + long timeD = time - lastClickTime; + if (0 < timeD && timeD < 500) { + return true; + } + lastClickTime = time; + return false; + } + + // 5分钟 = 1 转换成时间 + public static String getRangeTime(int range) { + StringBuffer sBuffer = new StringBuffer(); + String hour; + String minute; + if ((range / 12) >= 10) { + hour = range / 12 + ""; + } else { + hour = "0" + range / 12 + ""; + } + if ((range % 12) > 0) { + minute = ":" + range % 12 / 2 + "0"; + } else { + minute = ":00"; + } + sBuffer.append(hour.trim()); + sBuffer.append(minute.trim()); + return sBuffer.toString(); + } + + + // 根据日期取得星期几 + public static String getWeek(Date date) { + String[] weeks = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + int week_index = cal.get(Calendar.DAY_OF_WEEK) - 1; + if (week_index < 0) { + week_index = 0; + } + return weeks[week_index]; + } + + + // 非空判断 + public static boolean isEmpty(String s) { + if (null == s) + return true; + if (s.length() == 0) + return true; + if (s.trim().length() == 0) + return true; + return false; + } + + // 手动隐藏键盘 + public static void CloseKeyBoard(Context context) { + InputMethodManager imm = (InputMethodManager) context + .getSystemService(Context.INPUT_METHOD_SERVICE); + System.out.println("isActive:" + imm.isActive()); + if (imm.isActive()) { + imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, + InputMethodManager.HIDE_NOT_ALWAYS); + } + } + + // 接受软键盘输入 + public static void hideKeyboard(Context context, View view) { + if (context == null || view == null) { + return; + } + InputMethodManager imm = (InputMethodManager) context + .getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + + // 卸载app + public static void unInstallAPP(Context context, String packageName) { + if (!TextUtils.isEmpty(packageName) && !AppsManagerUtils.isSystemApp(context, packageName)) { + if (AppsManagerUtils.isSystemApp(context, packageName)) { + Toast.makeText(MyApplication.getAppContext(), "系统应用无法卸载!", Toast.LENGTH_SHORT).show(); + } else { + Uri packageURI = Uri.parse("package:" + packageName); + Intent intent = new Intent(Intent.ACTION_DELETE, packageURI); + context.startActivity(intent); + } + } else { + Toast.makeText(MyApplication.getAppContext(), "系统应用无法卸载!", Toast.LENGTH_SHORT).show(); + } + } + + // 打开app + public static void startApp(Context context, String packageName, + String activityName) { + + if (TextUtils.isEmpty(packageName)) + return; + + try { + Intent intent = null; + if (TextUtils.isEmpty(activityName)) { + intent = context.getPackageManager().getLaunchIntentForPackage( + packageName); + } else { + intent = new Intent(); + intent.setComponent(new ComponentName(packageName, activityName)); + } + if (intent == null) { + intent = getLaunchIntentForNoCategory(context, packageName); + } + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(intent); + } catch (ActivityNotFoundException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static Intent getLaunchIntentForNoCategory(Context context, + String packageName) { + Intent intent = null; + + PackageManager packageManager = context.getPackageManager(); + PackageInfo packageinfo = null; + try { + packageinfo = packageManager.getPackageInfo(packageName, 0); + } catch (NameNotFoundException e) { + e.printStackTrace(); + } + if (packageinfo == null) { + return null; + } + Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null); + resolveIntent.setPackage(packageinfo.packageName); + List resolveinfoList = packageManager + .queryIntentActivities(resolveIntent, 0); + + ResolveInfo resolveinfo = resolveinfoList.iterator().next(); + if (resolveinfo != null) { + String className = resolveinfo.activityInfo.name; + intent = new Intent(Intent.ACTION_MAIN); + intent.addCategory(Intent.CATEGORY_LAUNCHER); + ComponentName cn = new ComponentName(packageName, className); + intent.setComponent(cn); + } + return intent; + } + + // 设置系统亮度模式 + public static void systemBrightness(Context context) { + try { + SharedPreferences mPrefs = context.getSharedPreferences("colorflykids", 0); + boolean initSetting = mPrefs.getBoolean("init_setting", true); + if (initSetting) { + mPrefs.edit().putBoolean("init_setting", false).commit(); + } + Settings.System.putInt(context.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, 0); + mPrefs.edit().putBoolean("first_init", false).commit(); + + } catch (Exception err) { + err.printStackTrace(); + } + } + + // 更新 版本比较 + public static boolean isUpdate(String oldVersion, String newVersion) { + if (TextUtils.isEmpty(oldVersion) || TextUtils.isEmpty(newVersion) || oldVersion.equals(newVersion)) { + return false; + } + String[] oldVersionSp = oldVersion.replaceAll("[^.\\d]", "").trim().split("\\."); + String[] newVsersionSp = newVersion.replaceAll("[^.\\d]", "").trim().split("\\."); + int index = 0; + int minLen = Math.min(oldVersionSp.length, newVsersionSp.length); + int diff = 0; + while (index < minLen && (diff = Integer.parseInt(newVsersionSp[index]) - Integer.parseInt(oldVersionSp[index])) == 0) { + index++; + } + if (diff == 0) { + for (int i = index; i < oldVersionSp.length; i++) { + if (Integer.parseInt(oldVersionSp[i]) > 0) { + return false; + } + } + for (int i = index; i < newVsersionSp.length; i++) { + if (Integer.parseInt(newVsersionSp[i]) > 0) { + return true; + } + } + } else { + return diff > 0 ? true : false; + } + return false; + } + + /*** + * 半角转换为全角 + * + * @param input + * @return + */ + public static String ToDBC(String input) { + char[] c = input.toCharArray(); + for (int i = 0; i < c.length; i++) { + if (c[i] == 12288) { + c[i] = (char) 32; + continue; + } + if (c[i] > 65280 && c[i] < 65375) + c[i] = (char) (c[i] - 65248); + } + return new String(c); + } + + public static void showToast(Context context, String s) { + if (toast == null) { + toast = Toast.makeText(context, s, Toast.LENGTH_SHORT); + toast.show(); + oneTime = System.currentTimeMillis(); + } else { + twoTime = System.currentTimeMillis(); + if (s.equals(oldMsg)) { + if (twoTime - oneTime > Toast.LENGTH_SHORT) { + toast.show(); + } + } else { + oldMsg = s; + toast.setText(s); + toast.show(); + } + } + oneTime = twoTime; + } + + public static boolean isShouldHideInput(View v, MotionEvent event) { + if (v != null && (v instanceof EditText)) { + int[] leftTop = {0, 0}; + //获取输入框当前的location位置 + v.getLocationInWindow(leftTop); + int left = leftTop[0]; + int top = leftTop[1]; + int bottom = top + v.getHeight(); + int right = left + v.getWidth(); + if (event.getX() > left && event.getX() < right + && event.getY() > top && event.getY() < bottom) { + // 点击的是输入框区域,保留点击EditText的事件 + return false; + } else { + return true; + } + } + return false; + } + + public static boolean isIntent(Context context) { + + ConnectivityManager manager = (ConnectivityManager) context + .getApplicationContext().getSystemService( + Context.CONNECTIVITY_SERVICE); + if (manager == null) { + return false; + } + // 检查网络连接,如果无网络可用,就不需要进行连网操作等 + NetworkInfo networkinfo = manager.getActiveNetworkInfo(); + + if (networkinfo == null || !networkinfo.isAvailable()) { + return false; + } + return true; + } + + public static String getTime(int time) { + int min = time / 60; + int sec = time % 60; + if (sec > 0) { + return String.valueOf(min + 1); + } else { + return String.valueOf(min); + } + } + + public static String getTimeClick(int time) { + StringBuffer timeClick = new StringBuffer(); + int min = time / 60; + int sec = time % 60; + timeClick.append(min >= 10 ? (int) Math.ceil(min / 10) : 0) + .append(min % 10) + .append(":") + .append(sec >= 10 ? (int) Math.ceil(sec / 10) : 0) + .append(sec % 10); + return timeClick.toString(); + } + + + public static String getVersionName(Context context) { + // 获取packagemanager的实例 + PackageManager packageManager = context.getPackageManager(); + // getPackageName()是你当前类的包名,0代表是获取版本信息 + PackageInfo packInfo; + try { + packInfo = packageManager.getPackageInfo(context.getPackageName(), 0); + String version = packInfo.versionName.replaceAll("[a-zA-Z]", "").trim(); + ; + return version; + } catch (NameNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return ""; + } + + + /** + * 根据手机的分辨率从 dp 的单位 转成为 px(像素) + */ + public static int dip2px(Context context, float dpValue) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (dpValue * scale + 0.5f); + } + + /** + * 根据手机的分辨率从 px(像素) 的单位 转成为 dp + */ + public static int px2dip(Context context, float pxValue) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (pxValue / scale + 0.5f); + } + + + public static float dp2px(Resources resources, float dp) { + final float scale = resources.getDisplayMetrics().density; + return dp * scale + 0.5f; + } + + public static float sp2px(Resources resources, float sp) { + final float scale = resources.getDisplayMetrics().scaledDensity; + return sp * scale; + } + + public static String getTime() { + long time = System.currentTimeMillis();//long now = android.os.SystemClock.uptimeMillis(); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + Date d1 = new Date(time); + String t1 = format.format(d1); + return t1; + } + + + private static void getAdmin(Context context, ComponentName componentName) { + Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); + intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName); + intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "宏云萌书院OS"); + context.startActivity(intent); + } + + /** + * 获取设备序列号 + * + * @return + */ + public static String getSerial() { + return Build.SERIAL; +// return "QNS3AI000111"; +// return "QNW8WJ900002"; + + } + + public static final long A_GB = 1073741824; + public static final long A_MB = 1048576; + public static final int A_KB = 1024; + + public static String fmtSpace(long space) { + if (space <= 0) { + return "0"; + } + double gbValue = (double) space / A_GB; + if (gbValue >= 1) { + return String.format("%.2fGB", gbValue); + } else { + double mbValue = (double) space / A_MB; + // Log.e("GB", "gbvalue=" + mbValue); + if (mbValue >= 1) { + return String.format("%.2fMB", mbValue); + } else { + final double kbValue = space / A_KB; + return String.format("%.2fKB", kbValue); + } + } + } + + + public static String transferLongToDate(Long millSec) { + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + Date date = new Date(millSec); + + return sdf.format(date); + + } + + public static String getSn() { + return Build.SERIAL; + } + + public static Bitmap createQRImage(String content, int widthPix, int heightPix) { + try { +// if (content == null || "".equals(content)) { +// return false; +// } + + //配置参数 + Map hints = new HashMap<>(); + hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); + //容错级别 + hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); + //设置空白边距的宽度 + hints.put(EncodeHintType.MARGIN, 1); //default is 4 + + // 图像数据转换,使用了矩阵转换 + BitMatrix bitMatrix = null; + try { + bitMatrix = new QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, widthPix, + heightPix, hints); + } catch (WriterException e) { + e.printStackTrace(); + } + int[] pixels = new int[widthPix * heightPix]; + // 下面这里按照二维码的算法,逐个生成二维码的图片, + // 两个for循环是图片横列扫描的结果 + for (int y = 0; y < heightPix; y++) { + for (int x = 0; x < widthPix; x++) { + if (bitMatrix.get(x, y)) { + pixels[y * widthPix + x] = 0xff000000; + } else { + pixels[y * widthPix + x] = 0xffffffff; + } + } + } + + // 生成二维码图片的格式,使用ARGB_8888 + Bitmap bitmap = Bitmap.createBitmap(widthPix, heightPix, Bitmap.Config.ARGB_8888); + bitmap.setPixels(pixels, 0, widthPix, 0, 0, widthPix, heightPix); +// +// if (logoBm != null) { +// bitmap = addLogo(bitmap, logoBm); +// } + + //必须使用compress方法将bitmap保存到文件中再进行读取。直接返回的bitmap是没有任何压缩的, + // 内存消耗巨大! + return bitmap; +// return bitmap != null && bitmap.compress(Bitmap.CompressFormat.JPEG, 100); + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + + //判断是否为系统应用 + public static boolean isSystemApp(Context context, String pkgName) { + boolean isSystemApp = false; + PackageInfo pi = null; + try { + PackageManager pm = context.getPackageManager(); + pi = pm.getPackageInfo(pkgName, 0); + } catch (NameNotFoundException e) { + e.printStackTrace(); + Log.e("isSystemApp", e.getMessage(), e); + + } + + // 是系统中已安装的应用 + if (pi != null) { + boolean isSysApp = (pi.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1; + boolean isSysUpd = (pi.applicationInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) == 1; + isSystemApp = isSysApp || isSysUpd; + } + return isSystemApp; + } + + public static Bitmap getRoundedBitmap(Bitmap mBitmap, Context context) { + Bitmap bgBitmap = Bitmap.createBitmap(mBitmap.getWidth(), mBitmap.getHeight(), Bitmap.Config.ARGB_8888); + + + Bitmap mask = BitmapFactory.decodeResource(context.getResources(), R.drawable.mask); + int width = mask.getWidth(); + int height = mask.getHeight(); + Bitmap bitmapScale = Bitmap.createScaledBitmap(mBitmap, width, height, true); + +// Palette p = Palette.from(mBitmap).generate(); +// Palette.Swatch vibrant = p.getVibrantSwatch();//有活力的 +// int color = vibrant.getRgb(); //样本中的像素数量 + + Bitmap result = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(); + Paint paint = new Paint(); + + canvas.setBitmap(result); +// canvas.drawColor(color); + canvas.drawBitmap(mask, 0, 0, paint); +// paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); + canvas.drawBitmap(bitmapScale, 0, 0, paint); +// return result; + + Bitmap result2 = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); + Canvas canvas2 = new Canvas(); + Paint paint2 = new Paint(); + canvas2.setBitmap(result2); + canvas2.drawBitmap(mask, 0, 0, paint2); + paint2.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); + canvas2.drawBitmap(result, 0, 0, paint2); + return result2; + + +// Canvas mCanvas = new Canvas(); +// mCanvas.setBitmap(bgBitmap); +// Paint mPaint = new Paint(); +// RectF mRectM = new RectF(scaleM, scaleM, mBitmap.getWidth() - scaleM, mBitmap.getHeight() - scaleM); //设置剪裁圆角的区域 +// Rect mRect = new Rect(0, 0, mBitmap.getWidth(), mBitmap.getHeight()); +// RectF mRectF = mRectM; +// +// float roundPx = 15; //圆角半径 +// mPaint.setAntiAlias(true); +// //Log.d("wy"+TAG,"mBitmap.getWidth()="+mBitmap.getWidth()+", mBitmap.getHeight()="+mBitmap.getHeight()); +// mCanvas.drawRoundRect(mRectF, roundPx, roundPx, mPaint); +// mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); +// mCanvas.drawBitmap(mBitmap, mRect, mRect, mPaint); +// return bgBitmap; + } + + + +} \ No newline at end of file diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..1f6bb29 --- /dev/null +++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/app/src/main/res/drawable/background.xml b/app/src/main/res/drawable/background.xml new file mode 100644 index 0000000..179a42b --- /dev/null +++ b/app/src/main/res/drawable/background.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..0d025f9 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/mask.png b/app/src/main/res/drawable/mask.png new file mode 100644 index 0000000000000000000000000000000000000000..a108ec922d4b7f08f1c33648d07fd5f59f621db4 GIT binary patch literal 2119 zcmb_dYfuyC8V*T{phj#_Q&h?liUuUvT)3D(LP8RRNPq^cC?Z`pn-Cz`bhAi6tBtK^ z?2+k-N={Hv!|^b*id3t#a#1=~ZHQDVFeEYSf81NXQ@(zFlt~!9t_)JFcEALDK6e(g5W{~2l5b|-Y8<+ zYiVNudX0#&I!eV+nPf=5KB){tGRjgj;j%(lpkc&|fjEnh5HKJ(1Xv73Mzhc&Vm#Fq z5_^vuWB^Ygc%g{#EU7G2Iv_(a1c+isv0x525{MD7xl!E6<=hB>$Kmop4j<(5SzMlw zBM@?5S|Ah1Wpg|wO#)S_ z{|z-5rqE_wjl9VBFNMvSr6vSaBWAQ1gNcjNhIm4mgfa|)a1_f#(W1#NrstzLYR*SZ zfJ_E3SL=-$w8R|t6s}SUlZ|E^GQvo*T*M#**m}K2$W!p5WO6Bw%T0*laurfRq=2sw zNO^qz^2o$Ufozg1N8w@vV#Fu8nipLDv|P_57)(TDIfCgoAeuxBH2_a57V4+Zg)^<* zbFOCkT)5M6K_VH@bFY88=SdeaJf7{;)DnlOxkrq|uw%qj8yy|*l1S9nWVtlc^6g;t zg~EAj7AK-Drr^CFy_&vBUR}QTWjPL~|0<;$%V!0ROFpOy(DBEYGGBf9oJz6@(AF%Y zi^muZ0|}MwOyOL`yxFPMCkyCN{hiIBitg(lH(xjGYA}D#e~4v@%XN`il5y_4>W4GNp{$~-KblAK0kFRxv74gdWlZy+=a;npG3eZ zKfdno4sxqPf8R-dz>KK~ESF{volW!pWaP>Bt?$Mx8luClZt>MD@d$j4XDw=9sJ_b# z#QQejaHZ*PwI``C+}uK(e@nK{)Dc3 zU!CsRF45WF!`EaL4R&s0Lk}xjaG$&_EP8?OiHrT0i@O3(S`KbFJe>CL(2mQkRW3@H z@RWaT1i9D0eIM>UztVq2UG|wGxaZ<-{1QF$#=#w(X4U1r*3=Nco|+4>>SFJ;AC<>` zsFA!g$aJm!snfq!=ge?X0yrzYm+63(=FK&aQsQma)lb$km0G9xrgibCMRyv6C^%Wr zdtkx#uhp)VTQJ%QWp01h4C>MITIVmLB5M_?XLkg9$6~uI7pTN&lZVFezvA{NPxcwGo?cPKY~wUm~#;S{C^T@ zhf%jCj^~k2)e#k)p)T~8@2Cq85~hP%mg+axHKLxUIQ+m7gL`@5*Jh8tSt_O5b~~c) zzwY-+(4`qSZ`M5C>4Q7Oz|#KeV}(vM_i;s!3?w@3E(=v^f#dm=>w%Cj`}W-9+m5-; z`OSBHa$SIhJ6j1_pJZ?;0 zFG&+wXK(DX?7us+({}iH#v6scD|7v>tLJpV!A(aNH?-bu53zA`o9afpbu~w6W2cl& zeLFtgR9`o^<&w|71^?I?F|3)-+{m + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..eca70cf --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..eca70cf --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..898f3ed59ac9f3248734a00e5902736c9367d455 GIT binary patch literal 2963 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 JPDHLkV1g@XpTGbB literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_home.png b/app/src/main/res/mipmap-hdpi/ic_launcher_home.png new file mode 100644 index 0000000000000000000000000000000000000000..161402b34abf68a5d3b11d765358e7c3f78b3a47 GIT binary patch literal 5998 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 bXnBCINtt||z+%Q_NFchsgf{1xvBv literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..dffca3601eba7bf5f409bdd520820e2eb5122c75 GIT binary patch literal 4905 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 lV%Z2*hu);6rydA(}wUDXPCF_W1vnaRBK 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..14ed0af35023e4f1901cf03487b6c524257b8483 GIT binary patch literal 6895 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..b0907cac3bfd8fbfdc46e1108247f0a1055387ec GIT binary patch literal 6387 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..d8ae03154975f397f8ed1b84f2d4bf9783ecfa26 GIT binary patch literal 10413 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 XdJ+W}DiIkV00000NkvXXu0mjfKBlg6 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..2c18de9e66108411737e910f5c1972476f03ddbf GIT binary patch literal 9128 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 I20H400LcNok^lez literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..beed3cdd2c32af5114a7dc70b9ef5b698eb8797e GIT binary patch literal 15132 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/values-sw1024dp/dimens.xml b/app/src/main/res/values-sw1024dp/dimens.xml new file mode 100644 index 0000000..b629e60 --- /dev/null +++ b/app/src/main/res/values-sw1024dp/dimens.xml @@ -0,0 +1,419 @@ + + + @dimen/dp_15 + -170.6667dp + -85.3333dp + -56.8889dp + -34.1333dp + -28.4444dp + -22.7556dp + -14.2222dp + -5.6889dp + -2.8444dp + 0.0000dp + 0.2844dp + 1.4222dp + 2.8444dp + 4.2667dp + 5.6889dp + 7.1111dp + 8.5333dp + 9.9556dp + 11.3778dp + 12.8000dp + 14.2222dp + 17.0667dp + 19.9111dp + 22.7556dp + 25.6000dp + 28.4444dp + 31.2889dp + 34.1333dp + 36.9778dp + 39.8222dp + 42.6667dp + 45.5111dp + 48.3556dp + 51.2000dp + 54.0444dp + 56.8889dp + 59.7333dp + 62.5778dp + 65.4222dp + 68.2667dp + 71.1111dp + 73.9556dp + 76.8000dp + 79.6444dp + 82.4889dp + 85.3333dp + 88.1778dp + 91.0222dp + 93.8667dp + 96.7111dp + 99.5556dp + 102.4000dp + 105.2444dp + 108.0889dp + 110.9333dp + 113.7778dp + 116.6222dp + 119.4667dp + 122.3111dp + 125.1556dp + 128.0000dp + 130.8444dp + 133.6889dp + 136.5333dp + 139.3778dp + 142.2222dp + 145.0667dp + 147.9111dp + 150.7556dp + 153.6000dp + 156.4444dp + 159.2889dp + 162.1333dp + 164.9778dp + 167.8222dp + 170.6667dp + 173.5111dp + 176.3556dp + 179.2000dp + 182.0444dp + 184.8889dp + 187.7333dp + 190.5778dp + 193.4222dp + 196.2667dp + 199.1111dp + 201.9556dp + 204.8000dp + 207.6444dp + 210.4889dp + 213.3333dp + 216.1778dp + 219.0222dp + 221.8667dp + 224.7111dp + 227.5556dp + 230.4000dp + 233.2444dp + 236.0889dp + 238.9333dp + 241.7778dp + 244.6222dp + 247.4667dp + 250.3111dp + 253.1556dp + 256.0000dp + 258.8444dp + 261.6889dp + 264.5333dp + 267.3778dp + 270.2222dp + 273.0667dp + 275.9111dp + 278.7556dp + 281.6000dp + 284.4444dp + 287.2889dp + 290.1333dp + 292.9778dp + 295.8222dp + 298.6667dp + 301.5111dp + 304.3556dp + 307.2000dp + 310.0444dp + 312.8889dp + 315.7333dp + 318.5778dp + 321.4222dp + 324.2667dp + 327.1111dp + 329.9556dp + 332.8000dp + 335.6444dp + 338.4889dp + 341.3333dp + 344.1778dp + 347.0222dp + 349.8667dp + 352.7111dp + 355.5556dp + 358.4000dp + 361.2444dp + 364.0889dp + 366.9333dp + 369.7778dp + 372.6222dp + 375.4667dp + 378.3111dp + 381.1556dp + 384.0000dp + 386.8444dp + 389.6889dp + 392.5333dp + 395.3778dp + 398.2222dp + 401.0667dp + 403.9111dp + 406.7556dp + 409.6000dp + 412.4444dp + 415.2889dp + 418.1333dp + 420.9778dp + 423.8222dp + 426.6667dp + 429.5111dp + 432.3556dp + 435.2000dp + 438.0444dp + 440.8889dp + 443.7333dp + 446.5778dp + 449.4222dp + 452.2667dp + 455.1111dp + 457.9556dp + 460.8000dp + 463.6444dp + 466.4889dp + 469.3333dp + 472.1778dp + 475.0222dp + 477.8667dp + 480.7111dp + 483.5556dp + 486.4000dp + 489.2444dp + 492.0889dp + 494.9333dp + 497.7778dp + 500.6222dp + 503.4667dp + 506.3111dp + 509.1556dp + 512.0000dp + 514.8444dp + 517.6889dp + 520.5333dp + 523.3778dp + 526.2222dp + 529.0667dp + 531.9111dp + 534.7556dp + 537.6000dp + 540.4444dp + 543.2889dp + 546.1333dp + 548.9778dp + 551.8222dp + 554.6667dp + 557.5111dp + 560.3556dp + 563.2000dp + 566.0444dp + 568.8889dp + 571.7333dp + 574.5778dp + 577.4222dp + 580.2667dp + 583.1111dp + 585.9556dp + 588.8000dp + 591.6444dp + 594.4889dp + 597.3333dp + 600.1778dp + 603.0222dp + 605.8667dp + 608.7111dp + 611.5556dp + 614.4000dp + 617.2444dp + 620.0889dp + 622.9333dp + 625.7778dp + 628.6222dp + 631.4667dp + 634.3111dp + 637.1556dp + 640.0000dp + 642.8444dp + 645.6889dp + 648.5333dp + 651.3778dp + 654.2222dp + 657.0667dp + 659.9111dp + 662.7556dp + 665.6000dp + 668.4444dp + 671.2889dp + 674.1333dp + 676.9778dp + 679.8222dp + 682.6667dp + 685.5111dp + 688.3556dp + 691.2000dp + 694.0444dp + 696.8889dp + 699.7333dp + 702.5778dp + 705.4222dp + 708.2667dp + 711.1111dp + 713.9556dp + 716.8000dp + 719.6444dp + 722.4889dp + 725.3333dp + 728.1778dp + 731.0222dp + 733.8667dp + 736.7111dp + 739.5556dp + 742.4000dp + 745.2444dp + 748.0889dp + 750.9333dp + 753.7778dp + 756.6222dp + 759.4667dp + 762.3111dp + 765.1556dp + 768.0000dp + 770.8444dp + 773.6889dp + 776.5333dp + 779.3778dp + 782.2222dp + 785.0667dp + 787.9111dp + 790.7556dp + 793.6000dp + 796.4444dp + 799.2889dp + 802.1333dp + 804.9778dp + 807.8222dp + 810.6667dp + 813.5111dp + 816.3556dp + 819.2000dp + 822.0444dp + 824.8889dp + 827.7333dp + 830.5778dp + 833.4222dp + 836.2667dp + 839.1111dp + 841.9556dp + 844.8000dp + 847.6444dp + 850.4889dp + 853.3333dp + 856.1778dp + 859.0222dp + 861.8667dp + 864.7111dp + 867.5556dp + 870.4000dp + 873.2444dp + 876.0889dp + 878.9333dp + 881.7778dp + 884.6222dp + 887.4667dp + 890.3111dp + 893.1556dp + 896.0000dp + 898.8444dp + 901.6889dp + 904.5333dp + 907.3778dp + 910.2222dp + 913.0667dp + 915.9111dp + 918.7556dp + 921.6000dp + 924.4444dp + 927.2889dp + 930.1333dp + 932.9778dp + 935.8222dp + 938.6667dp + 941.5111dp + 944.3556dp + 947.2000dp + 950.0444dp + 952.8889dp + 955.7333dp + 958.5778dp + 961.4222dp + 964.2667dp + 967.1111dp + 969.9556dp + 972.8000dp + 975.6444dp + 978.4889dp + 981.3333dp + 984.1778dp + 987.0222dp + 989.8667dp + 992.7111dp + 995.5556dp + 998.4000dp + 1001.2444dp + 1004.0889dp + 1006.9333dp + 1009.7778dp + 1012.6222dp + 1015.4667dp + 1018.3111dp + 1021.1556dp + 1024.0000dp + 1038.2222dp + 1052.4444dp + 1137.7778dp + 1166.2222dp + 1200.3556dp + 1342.5778dp + 1422.2222dp + 1706.6667dp + 1820.4444dp + 2048.0000dp + 17.0667sp + 19.9111sp + 22.7556sp + 25.6000sp + 28.4444sp + 31.2889sp + 34.1333sp + 36.9778sp + 39.8222sp + 42.6667sp + 45.5111sp + 48.3556sp + 51.2000sp + 54.0444sp + 56.8889sp + 59.7333sp + 62.5778sp + 65.4222sp + 68.2667sp + 71.1111sp + 79.6444sp + 85.3333sp + 91.0222sp + 96.7111sp + 102.4000sp + 108.0889sp + 113.7778sp + 119.4667sp + 136.5333sp + diff --git a/app/src/main/res/values-sw1280dp/dimens.xml b/app/src/main/res/values-sw1280dp/dimens.xml new file mode 100644 index 0000000..d690618 --- /dev/null +++ b/app/src/main/res/values-sw1280dp/dimens.xml @@ -0,0 +1,419 @@ + + + @dimen/dp_15 + -213.3333dp + -106.6667dp + -71.1111dp + -42.6667dp + -35.5556dp + -28.4444dp + -17.7778dp + -7.1111dp + -3.5556dp + 0.0000dp + 0.3556dp + 1.7778dp + 3.5556dp + 5.3333dp + 7.1111dp + 8.8889dp + 10.6667dp + 12.4444dp + 14.2222dp + 16.0000dp + 17.7778dp + 21.3333dp + 24.8889dp + 28.4444dp + 32.0000dp + 35.5556dp + 39.1111dp + 42.6667dp + 46.2222dp + 49.7778dp + 53.3333dp + 56.8889dp + 60.4444dp + 64.0000dp + 67.5556dp + 71.1111dp + 74.6667dp + 78.2222dp + 81.7778dp + 85.3333dp + 88.8889dp + 92.4444dp + 96.0000dp + 99.5556dp + 103.1111dp + 106.6667dp + 110.2222dp + 113.7778dp + 117.3333dp + 120.8889dp + 124.4444dp + 128.0000dp + 131.5556dp + 135.1111dp + 138.6667dp + 142.2222dp + 145.7778dp + 149.3333dp + 152.8889dp + 156.4444dp + 160.0000dp + 163.5556dp + 167.1111dp + 170.6667dp + 174.2222dp + 177.7778dp + 181.3333dp + 184.8889dp + 188.4444dp + 192.0000dp + 195.5556dp + 199.1111dp + 202.6667dp + 206.2222dp + 209.7778dp + 213.3333dp + 216.8889dp + 220.4444dp + 224.0000dp + 227.5556dp + 231.1111dp + 234.6667dp + 238.2222dp + 241.7778dp + 245.3333dp + 248.8889dp + 252.4444dp + 256.0000dp + 259.5556dp + 263.1111dp + 266.6667dp + 270.2222dp + 273.7778dp + 277.3333dp + 280.8889dp + 284.4444dp + 288.0000dp + 291.5556dp + 295.1111dp + 298.6667dp + 302.2222dp + 305.7778dp + 309.3333dp + 312.8889dp + 316.4444dp + 320.0000dp + 323.5556dp + 327.1111dp + 330.6667dp + 334.2222dp + 337.7778dp + 341.3333dp + 344.8889dp + 348.4444dp + 352.0000dp + 355.5556dp + 359.1111dp + 362.6667dp + 366.2222dp + 369.7778dp + 373.3333dp + 376.8889dp + 380.4444dp + 384.0000dp + 387.5556dp + 391.1111dp + 394.6667dp + 398.2222dp + 401.7778dp + 405.3333dp + 408.8889dp + 412.4444dp + 416.0000dp + 419.5556dp + 423.1111dp + 426.6667dp + 430.2222dp + 433.7778dp + 437.3333dp + 440.8889dp + 444.4444dp + 448.0000dp + 451.5556dp + 455.1111dp + 458.6667dp + 462.2222dp + 465.7778dp + 469.3333dp + 472.8889dp + 476.4444dp + 480.0000dp + 483.5556dp + 487.1111dp + 490.6667dp + 494.2222dp + 497.7778dp + 501.3333dp + 504.8889dp + 508.4444dp + 512.0000dp + 515.5556dp + 519.1111dp + 522.6667dp + 526.2222dp + 529.7778dp + 533.3333dp + 536.8889dp + 540.4444dp + 544.0000dp + 547.5556dp + 551.1111dp + 554.6667dp + 558.2222dp + 561.7778dp + 565.3333dp + 568.8889dp + 572.4444dp + 576.0000dp + 579.5556dp + 583.1111dp + 586.6667dp + 590.2222dp + 593.7778dp + 597.3333dp + 600.8889dp + 604.4444dp + 608.0000dp + 611.5556dp + 615.1111dp + 618.6667dp + 622.2222dp + 625.7778dp + 629.3333dp + 632.8889dp + 636.4444dp + 640.0000dp + 643.5556dp + 647.1111dp + 650.6667dp + 654.2222dp + 657.7778dp + 661.3333dp + 664.8889dp + 668.4444dp + 672.0000dp + 675.5556dp + 679.1111dp + 682.6667dp + 686.2222dp + 689.7778dp + 693.3333dp + 696.8889dp + 700.4444dp + 704.0000dp + 707.5556dp + 711.1111dp + 714.6667dp + 718.2222dp + 721.7778dp + 725.3333dp + 728.8889dp + 732.4444dp + 736.0000dp + 739.5556dp + 743.1111dp + 746.6667dp + 750.2222dp + 753.7778dp + 757.3333dp + 760.8889dp + 764.4444dp + 768.0000dp + 771.5556dp + 775.1111dp + 778.6667dp + 782.2222dp + 785.7778dp + 789.3333dp + 792.8889dp + 796.4444dp + 800.0000dp + 803.5556dp + 807.1111dp + 810.6667dp + 814.2222dp + 817.7778dp + 821.3333dp + 824.8889dp + 828.4444dp + 832.0000dp + 835.5556dp + 839.1111dp + 842.6667dp + 846.2222dp + 849.7778dp + 853.3333dp + 856.8889dp + 860.4444dp + 864.0000dp + 867.5556dp + 871.1111dp + 874.6667dp + 878.2222dp + 881.7778dp + 885.3333dp + 888.8889dp + 892.4444dp + 896.0000dp + 899.5556dp + 903.1111dp + 906.6667dp + 910.2222dp + 913.7778dp + 917.3333dp + 920.8889dp + 924.4444dp + 928.0000dp + 931.5556dp + 935.1111dp + 938.6667dp + 942.2222dp + 945.7778dp + 949.3333dp + 952.8889dp + 956.4444dp + 960.0000dp + 963.5556dp + 967.1111dp + 970.6667dp + 974.2222dp + 977.7778dp + 981.3333dp + 984.8889dp + 988.4444dp + 992.0000dp + 995.5556dp + 999.1111dp + 1002.6667dp + 1006.2222dp + 1009.7778dp + 1013.3333dp + 1016.8889dp + 1020.4444dp + 1024.0000dp + 1027.5556dp + 1031.1111dp + 1034.6667dp + 1038.2222dp + 1041.7778dp + 1045.3333dp + 1048.8889dp + 1052.4444dp + 1056.0000dp + 1059.5556dp + 1063.1111dp + 1066.6667dp + 1070.2222dp + 1073.7778dp + 1077.3333dp + 1080.8889dp + 1084.4444dp + 1088.0000dp + 1091.5556dp + 1095.1111dp + 1098.6667dp + 1102.2222dp + 1105.7778dp + 1109.3333dp + 1112.8889dp + 1116.4444dp + 1120.0000dp + 1123.5556dp + 1127.1111dp + 1130.6667dp + 1134.2222dp + 1137.7778dp + 1141.3333dp + 1144.8889dp + 1148.4444dp + 1152.0000dp + 1155.5556dp + 1159.1111dp + 1162.6667dp + 1166.2222dp + 1169.7778dp + 1173.3333dp + 1176.8889dp + 1180.4444dp + 1184.0000dp + 1187.5556dp + 1191.1111dp + 1194.6667dp + 1198.2222dp + 1201.7778dp + 1205.3333dp + 1208.8889dp + 1212.4444dp + 1216.0000dp + 1219.5556dp + 1223.1111dp + 1226.6667dp + 1230.2222dp + 1233.7778dp + 1237.3333dp + 1240.8889dp + 1244.4444dp + 1248.0000dp + 1251.5556dp + 1255.1111dp + 1258.6667dp + 1262.2222dp + 1265.7778dp + 1269.3333dp + 1272.8889dp + 1276.4444dp + 1280.0000dp + 1297.7778dp + 1315.5556dp + 1422.2222dp + 1457.7778dp + 1500.4444dp + 1678.2222dp + 1777.7778dp + 2133.3333dp + 2275.5556dp + 2560.0000dp + 21.3333sp + 24.8889sp + 28.4444sp + 32.0000sp + 35.5556sp + 39.1111sp + 42.6667sp + 46.2222sp + 49.7778sp + 53.3333sp + 56.8889sp + 60.4444sp + 64.0000sp + 67.5556sp + 71.1111sp + 74.6667sp + 78.2222sp + 81.7778sp + 85.3333sp + 88.8889sp + 99.5556sp + 106.6667sp + 113.7778sp + 120.8889sp + 128.0000sp + 135.1111sp + 142.2222sp + 149.3333sp + 170.6667sp + diff --git a/app/src/main/res/values-sw1365dp/dimens.xml b/app/src/main/res/values-sw1365dp/dimens.xml new file mode 100644 index 0000000..5a0e4e0 --- /dev/null +++ b/app/src/main/res/values-sw1365dp/dimens.xml @@ -0,0 +1,419 @@ + + + @dimen/dp_15 + -227.5000dp + -113.7500dp + -75.8333dp + -45.5000dp + -37.9167dp + -30.3333dp + -18.9583dp + -7.5833dp + -3.7917dp + 0.0000dp + 0.3792dp + 1.8958dp + 3.7917dp + 5.6875dp + 7.5833dp + 9.4792dp + 11.3750dp + 13.2708dp + 15.1667dp + 17.0625dp + 18.9583dp + 22.7500dp + 26.5417dp + 30.3333dp + 34.1250dp + 37.9167dp + 41.7083dp + 45.5000dp + 49.2917dp + 53.0833dp + 56.8750dp + 60.6667dp + 64.4583dp + 68.2500dp + 72.0417dp + 75.8333dp + 79.6250dp + 83.4167dp + 87.2083dp + 91.0000dp + 94.7917dp + 98.5833dp + 102.3750dp + 106.1667dp + 109.9583dp + 113.7500dp + 117.5417dp + 121.3333dp + 125.1250dp + 128.9167dp + 132.7083dp + 136.5000dp + 140.2917dp + 144.0833dp + 147.8750dp + 151.6667dp + 155.4583dp + 159.2500dp + 163.0417dp + 166.8333dp + 170.6250dp + 174.4167dp + 178.2083dp + 182.0000dp + 185.7917dp + 189.5833dp + 193.3750dp + 197.1667dp + 200.9583dp + 204.7500dp + 208.5417dp + 212.3333dp + 216.1250dp + 219.9167dp + 223.7083dp + 227.5000dp + 231.2917dp + 235.0833dp + 238.8750dp + 242.6667dp + 246.4583dp + 250.2500dp + 254.0417dp + 257.8333dp + 261.6250dp + 265.4167dp + 269.2083dp + 273.0000dp + 276.7917dp + 280.5833dp + 284.3750dp + 288.1667dp + 291.9583dp + 295.7500dp + 299.5417dp + 303.3333dp + 307.1250dp + 310.9167dp + 314.7083dp + 318.5000dp + 322.2917dp + 326.0833dp + 329.8750dp + 333.6667dp + 337.4583dp + 341.2500dp + 345.0417dp + 348.8333dp + 352.6250dp + 356.4167dp + 360.2083dp + 364.0000dp + 367.7917dp + 371.5833dp + 375.3750dp + 379.1667dp + 382.9583dp + 386.7500dp + 390.5417dp + 394.3333dp + 398.1250dp + 401.9167dp + 405.7083dp + 409.5000dp + 413.2917dp + 417.0833dp + 420.8750dp + 424.6667dp + 428.4583dp + 432.2500dp + 436.0417dp + 439.8333dp + 443.6250dp + 447.4167dp + 451.2083dp + 455.0000dp + 458.7917dp + 462.5833dp + 466.3750dp + 470.1667dp + 473.9583dp + 477.7500dp + 481.5417dp + 485.3333dp + 489.1250dp + 492.9167dp + 496.7083dp + 500.5000dp + 504.2917dp + 508.0833dp + 511.8750dp + 515.6667dp + 519.4583dp + 523.2500dp + 527.0417dp + 530.8333dp + 534.6250dp + 538.4167dp + 542.2083dp + 546.0000dp + 549.7917dp + 553.5833dp + 557.3750dp + 561.1667dp + 564.9583dp + 568.7500dp + 572.5417dp + 576.3333dp + 580.1250dp + 583.9167dp + 587.7083dp + 591.5000dp + 595.2917dp + 599.0833dp + 602.8750dp + 606.6667dp + 610.4583dp + 614.2500dp + 618.0417dp + 621.8333dp + 625.6250dp + 629.4167dp + 633.2083dp + 637.0000dp + 640.7917dp + 644.5833dp + 648.3750dp + 652.1667dp + 655.9583dp + 659.7500dp + 663.5417dp + 667.3333dp + 671.1250dp + 674.9167dp + 678.7083dp + 682.5000dp + 686.2917dp + 690.0833dp + 693.8750dp + 697.6667dp + 701.4583dp + 705.2500dp + 709.0417dp + 712.8333dp + 716.6250dp + 720.4167dp + 724.2083dp + 728.0000dp + 731.7917dp + 735.5833dp + 739.3750dp + 743.1667dp + 746.9583dp + 750.7500dp + 754.5417dp + 758.3333dp + 762.1250dp + 765.9167dp + 769.7083dp + 773.5000dp + 777.2917dp + 781.0833dp + 784.8750dp + 788.6667dp + 792.4583dp + 796.2500dp + 800.0417dp + 803.8333dp + 807.6250dp + 811.4167dp + 815.2083dp + 819.0000dp + 822.7917dp + 826.5833dp + 830.3750dp + 834.1667dp + 837.9583dp + 841.7500dp + 845.5417dp + 849.3333dp + 853.1250dp + 856.9167dp + 860.7083dp + 864.5000dp + 868.2917dp + 872.0833dp + 875.8750dp + 879.6667dp + 883.4583dp + 887.2500dp + 891.0417dp + 894.8333dp + 898.6250dp + 902.4167dp + 906.2083dp + 910.0000dp + 913.7917dp + 917.5833dp + 921.3750dp + 925.1667dp + 928.9583dp + 932.7500dp + 936.5417dp + 940.3333dp + 944.1250dp + 947.9167dp + 951.7083dp + 955.5000dp + 959.2917dp + 963.0833dp + 966.8750dp + 970.6667dp + 974.4583dp + 978.2500dp + 982.0417dp + 985.8333dp + 989.6250dp + 993.4167dp + 997.2083dp + 1001.0000dp + 1004.7917dp + 1008.5833dp + 1012.3750dp + 1016.1667dp + 1019.9583dp + 1023.7500dp + 1027.5417dp + 1031.3333dp + 1035.1250dp + 1038.9167dp + 1042.7083dp + 1046.5000dp + 1050.2917dp + 1054.0833dp + 1057.8750dp + 1061.6667dp + 1065.4583dp + 1069.2500dp + 1073.0417dp + 1076.8333dp + 1080.6250dp + 1084.4167dp + 1088.2083dp + 1092.0000dp + 1095.7917dp + 1099.5833dp + 1103.3750dp + 1107.1667dp + 1110.9583dp + 1114.7500dp + 1118.5417dp + 1122.3333dp + 1126.1250dp + 1129.9167dp + 1133.7083dp + 1137.5000dp + 1141.2917dp + 1145.0833dp + 1148.8750dp + 1152.6667dp + 1156.4583dp + 1160.2500dp + 1164.0417dp + 1167.8333dp + 1171.6250dp + 1175.4167dp + 1179.2083dp + 1183.0000dp + 1186.7917dp + 1190.5833dp + 1194.3750dp + 1198.1667dp + 1201.9583dp + 1205.7500dp + 1209.5417dp + 1213.3333dp + 1217.1250dp + 1220.9167dp + 1224.7083dp + 1228.5000dp + 1232.2917dp + 1236.0833dp + 1239.8750dp + 1243.6667dp + 1247.4583dp + 1251.2500dp + 1255.0417dp + 1258.8333dp + 1262.6250dp + 1266.4167dp + 1270.2083dp + 1274.0000dp + 1277.7917dp + 1281.5833dp + 1285.3750dp + 1289.1667dp + 1292.9583dp + 1296.7500dp + 1300.5417dp + 1304.3333dp + 1308.1250dp + 1311.9167dp + 1315.7083dp + 1319.5000dp + 1323.2917dp + 1327.0833dp + 1330.8750dp + 1334.6667dp + 1338.4583dp + 1342.2500dp + 1346.0417dp + 1349.8333dp + 1353.6250dp + 1357.4167dp + 1361.2083dp + 1365.0000dp + 1383.9583dp + 1402.9167dp + 1516.6667dp + 1554.5833dp + 1600.0833dp + 1789.6667dp + 1895.8333dp + 2275.0000dp + 2426.6667dp + 2730.0000dp + 22.7500sp + 26.5417sp + 30.3333sp + 34.1250sp + 37.9167sp + 41.7083sp + 45.5000sp + 49.2917sp + 53.0833sp + 56.8750sp + 60.6667sp + 64.4583sp + 68.2500sp + 72.0417sp + 75.8333sp + 79.6250sp + 83.4167sp + 87.2083sp + 91.0000sp + 94.7917sp + 106.1667sp + 113.7500sp + 121.3333sp + 128.9167sp + 136.5000sp + 144.0833sp + 151.6667sp + 159.2500sp + 182.0000sp + diff --git a/app/src/main/res/values-sw320dp/dimens.xml b/app/src/main/res/values-sw320dp/dimens.xml new file mode 100644 index 0000000..554264f --- /dev/null +++ b/app/src/main/res/values-sw320dp/dimens.xml @@ -0,0 +1,419 @@ + + + @dimen/dp_15 + -53.3333dp + -26.6667dp + -17.7778dp + -10.6667dp + -8.8889dp + -7.1111dp + -4.4444dp + -1.7778dp + -0.8889dp + 0.0000dp + 0.0889dp + 0.4444dp + 0.8889dp + 1.3333dp + 1.7778dp + 2.2222dp + 2.6667dp + 3.1111dp + 3.5556dp + 4.0000dp + 4.4444dp + 5.3333dp + 6.2222dp + 7.1111dp + 8.0000dp + 8.8889dp + 9.7778dp + 10.6667dp + 11.5556dp + 12.4444dp + 13.3333dp + 14.2222dp + 15.1111dp + 16.0000dp + 16.8889dp + 17.7778dp + 18.6667dp + 19.5556dp + 20.4444dp + 21.3333dp + 22.2222dp + 23.1111dp + 24.0000dp + 24.8889dp + 25.7778dp + 26.6667dp + 27.5556dp + 28.4444dp + 29.3333dp + 30.2222dp + 31.1111dp + 32.0000dp + 32.8889dp + 33.7778dp + 34.6667dp + 35.5556dp + 36.4444dp + 37.3333dp + 38.2222dp + 39.1111dp + 40.0000dp + 40.8889dp + 41.7778dp + 42.6667dp + 43.5556dp + 44.4444dp + 45.3333dp + 46.2222dp + 47.1111dp + 48.0000dp + 48.8889dp + 49.7778dp + 50.6667dp + 51.5556dp + 52.4444dp + 53.3333dp + 54.2222dp + 55.1111dp + 56.0000dp + 56.8889dp + 57.7778dp + 58.6667dp + 59.5556dp + 60.4444dp + 61.3333dp + 62.2222dp + 63.1111dp + 64.0000dp + 64.8889dp + 65.7778dp + 66.6667dp + 67.5556dp + 68.4444dp + 69.3333dp + 70.2222dp + 71.1111dp + 72.0000dp + 72.8889dp + 73.7778dp + 74.6667dp + 75.5556dp + 76.4444dp + 77.3333dp + 78.2222dp + 79.1111dp + 80.0000dp + 80.8889dp + 81.7778dp + 82.6667dp + 83.5556dp + 84.4444dp + 85.3333dp + 86.2222dp + 87.1111dp + 88.0000dp + 88.8889dp + 89.7778dp + 90.6667dp + 91.5556dp + 92.4444dp + 93.3333dp + 94.2222dp + 95.1111dp + 96.0000dp + 96.8889dp + 97.7778dp + 98.6667dp + 99.5556dp + 100.4444dp + 101.3333dp + 102.2222dp + 103.1111dp + 104.0000dp + 104.8889dp + 105.7778dp + 106.6667dp + 107.5556dp + 108.4444dp + 109.3333dp + 110.2222dp + 111.1111dp + 112.0000dp + 112.8889dp + 113.7778dp + 114.6667dp + 115.5556dp + 116.4444dp + 117.3333dp + 118.2222dp + 119.1111dp + 120.0000dp + 120.8889dp + 121.7778dp + 122.6667dp + 123.5556dp + 124.4444dp + 125.3333dp + 126.2222dp + 127.1111dp + 128.0000dp + 128.8889dp + 129.7778dp + 130.6667dp + 131.5556dp + 132.4444dp + 133.3333dp + 134.2222dp + 135.1111dp + 136.0000dp + 136.8889dp + 137.7778dp + 138.6667dp + 139.5556dp + 140.4444dp + 141.3333dp + 142.2222dp + 143.1111dp + 144.0000dp + 144.8889dp + 145.7778dp + 146.6667dp + 147.5556dp + 148.4444dp + 149.3333dp + 150.2222dp + 151.1111dp + 152.0000dp + 152.8889dp + 153.7778dp + 154.6667dp + 155.5556dp + 156.4444dp + 157.3333dp + 158.2222dp + 159.1111dp + 160.0000dp + 160.8889dp + 161.7778dp + 162.6667dp + 163.5556dp + 164.4444dp + 165.3333dp + 166.2222dp + 167.1111dp + 168.0000dp + 168.8889dp + 169.7778dp + 170.6667dp + 171.5556dp + 172.4444dp + 173.3333dp + 174.2222dp + 175.1111dp + 176.0000dp + 176.8889dp + 177.7778dp + 178.6667dp + 179.5556dp + 180.4444dp + 181.3333dp + 182.2222dp + 183.1111dp + 184.0000dp + 184.8889dp + 185.7778dp + 186.6667dp + 187.5556dp + 188.4444dp + 189.3333dp + 190.2222dp + 191.1111dp + 192.0000dp + 192.8889dp + 193.7778dp + 194.6667dp + 195.5556dp + 196.4444dp + 197.3333dp + 198.2222dp + 199.1111dp + 200.0000dp + 200.8889dp + 201.7778dp + 202.6667dp + 203.5556dp + 204.4444dp + 205.3333dp + 206.2222dp + 207.1111dp + 208.0000dp + 208.8889dp + 209.7778dp + 210.6667dp + 211.5556dp + 212.4444dp + 213.3333dp + 214.2222dp + 215.1111dp + 216.0000dp + 216.8889dp + 217.7778dp + 218.6667dp + 219.5556dp + 220.4444dp + 221.3333dp + 222.2222dp + 223.1111dp + 224.0000dp + 224.8889dp + 225.7778dp + 226.6667dp + 227.5556dp + 228.4444dp + 229.3333dp + 230.2222dp + 231.1111dp + 232.0000dp + 232.8889dp + 233.7778dp + 234.6667dp + 235.5556dp + 236.4444dp + 237.3333dp + 238.2222dp + 239.1111dp + 240.0000dp + 240.8889dp + 241.7778dp + 242.6667dp + 243.5556dp + 244.4444dp + 245.3333dp + 246.2222dp + 247.1111dp + 248.0000dp + 248.8889dp + 249.7778dp + 250.6667dp + 251.5556dp + 252.4444dp + 253.3333dp + 254.2222dp + 255.1111dp + 256.0000dp + 256.8889dp + 257.7778dp + 258.6667dp + 259.5556dp + 260.4444dp + 261.3333dp + 262.2222dp + 263.1111dp + 264.0000dp + 264.8889dp + 265.7778dp + 266.6667dp + 267.5556dp + 268.4444dp + 269.3333dp + 270.2222dp + 271.1111dp + 272.0000dp + 272.8889dp + 273.7778dp + 274.6667dp + 275.5556dp + 276.4444dp + 277.3333dp + 278.2222dp + 279.1111dp + 280.0000dp + 280.8889dp + 281.7778dp + 282.6667dp + 283.5556dp + 284.4444dp + 285.3333dp + 286.2222dp + 287.1111dp + 288.0000dp + 288.8889dp + 289.7778dp + 290.6667dp + 291.5556dp + 292.4444dp + 293.3333dp + 294.2222dp + 295.1111dp + 296.0000dp + 296.8889dp + 297.7778dp + 298.6667dp + 299.5556dp + 300.4444dp + 301.3333dp + 302.2222dp + 303.1111dp + 304.0000dp + 304.8889dp + 305.7778dp + 306.6667dp + 307.5556dp + 308.4444dp + 309.3333dp + 310.2222dp + 311.1111dp + 312.0000dp + 312.8889dp + 313.7778dp + 314.6667dp + 315.5556dp + 316.4444dp + 317.3333dp + 318.2222dp + 319.1111dp + 320.0000dp + 324.4444dp + 328.8889dp + 355.5556dp + 364.4444dp + 375.1111dp + 419.5556dp + 444.4444dp + 533.3333dp + 568.8889dp + 640.0000dp + 5.3333sp + 6.2222sp + 7.1111sp + 8.0000sp + 8.8889sp + 9.7778sp + 10.6667sp + 11.5556sp + 12.4444sp + 13.3333sp + 14.2222sp + 15.1111sp + 16.0000sp + 16.8889sp + 17.7778sp + 18.6667sp + 19.5556sp + 20.4444sp + 21.3333sp + 22.2222sp + 24.8889sp + 26.6667sp + 28.4444sp + 30.2222sp + 32.0000sp + 33.7778sp + 35.5556sp + 37.3333sp + 42.6667sp + diff --git a/app/src/main/res/values-sw360dp/dimens.xml b/app/src/main/res/values-sw360dp/dimens.xml new file mode 100644 index 0000000..7a4ffaf --- /dev/null +++ b/app/src/main/res/values-sw360dp/dimens.xml @@ -0,0 +1,419 @@ + + + @dimen/dp_15 + -60.0000dp + -30.0000dp + -20.0000dp + -12.0000dp + -10.0000dp + -8.0000dp + -5.0000dp + -2.0000dp + -1.0000dp + 0.0000dp + 0.1000dp + 0.5000dp + 1.0000dp + 1.5000dp + 2.0000dp + 2.5000dp + 3.0000dp + 3.5000dp + 4.0000dp + 4.5000dp + 5.0000dp + 6.0000dp + 7.0000dp + 8.0000dp + 9.0000dp + 10.0000dp + 11.0000dp + 12.0000dp + 13.0000dp + 14.0000dp + 15.0000dp + 16.0000dp + 17.0000dp + 18.0000dp + 19.0000dp + 20.0000dp + 21.0000dp + 22.0000dp + 23.0000dp + 24.0000dp + 25.0000dp + 26.0000dp + 27.0000dp + 28.0000dp + 29.0000dp + 30.0000dp + 31.0000dp + 32.0000dp + 33.0000dp + 34.0000dp + 35.0000dp + 36.0000dp + 37.0000dp + 38.0000dp + 39.0000dp + 40.0000dp + 41.0000dp + 42.0000dp + 43.0000dp + 44.0000dp + 45.0000dp + 46.0000dp + 47.0000dp + 48.0000dp + 49.0000dp + 50.0000dp + 51.0000dp + 52.0000dp + 53.0000dp + 54.0000dp + 55.0000dp + 56.0000dp + 57.0000dp + 58.0000dp + 59.0000dp + 60.0000dp + 61.0000dp + 62.0000dp + 63.0000dp + 64.0000dp + 65.0000dp + 66.0000dp + 67.0000dp + 68.0000dp + 69.0000dp + 70.0000dp + 71.0000dp + 72.0000dp + 73.0000dp + 74.0000dp + 75.0000dp + 76.0000dp + 77.0000dp + 78.0000dp + 79.0000dp + 80.0000dp + 81.0000dp + 82.0000dp + 83.0000dp + 84.0000dp + 85.0000dp + 86.0000dp + 87.0000dp + 88.0000dp + 89.0000dp + 90.0000dp + 91.0000dp + 92.0000dp + 93.0000dp + 94.0000dp + 95.0000dp + 96.0000dp + 97.0000dp + 98.0000dp + 99.0000dp + 100.0000dp + 101.0000dp + 102.0000dp + 103.0000dp + 104.0000dp + 105.0000dp + 106.0000dp + 107.0000dp + 108.0000dp + 109.0000dp + 110.0000dp + 111.0000dp + 112.0000dp + 113.0000dp + 114.0000dp + 115.0000dp + 116.0000dp + 117.0000dp + 118.0000dp + 119.0000dp + 120.0000dp + 121.0000dp + 122.0000dp + 123.0000dp + 124.0000dp + 125.0000dp + 126.0000dp + 127.0000dp + 128.0000dp + 129.0000dp + 130.0000dp + 131.0000dp + 132.0000dp + 133.0000dp + 134.0000dp + 135.0000dp + 136.0000dp + 137.0000dp + 138.0000dp + 139.0000dp + 140.0000dp + 141.0000dp + 142.0000dp + 143.0000dp + 144.0000dp + 145.0000dp + 146.0000dp + 147.0000dp + 148.0000dp + 149.0000dp + 150.0000dp + 151.0000dp + 152.0000dp + 153.0000dp + 154.0000dp + 155.0000dp + 156.0000dp + 157.0000dp + 158.0000dp + 159.0000dp + 160.0000dp + 161.0000dp + 162.0000dp + 163.0000dp + 164.0000dp + 165.0000dp + 166.0000dp + 167.0000dp + 168.0000dp + 169.0000dp + 170.0000dp + 171.0000dp + 172.0000dp + 173.0000dp + 174.0000dp + 175.0000dp + 176.0000dp + 177.0000dp + 178.0000dp + 179.0000dp + 180.0000dp + 181.0000dp + 182.0000dp + 183.0000dp + 184.0000dp + 185.0000dp + 186.0000dp + 187.0000dp + 188.0000dp + 189.0000dp + 190.0000dp + 191.0000dp + 192.0000dp + 193.0000dp + 194.0000dp + 195.0000dp + 196.0000dp + 197.0000dp + 198.0000dp + 199.0000dp + 200.0000dp + 201.0000dp + 202.0000dp + 203.0000dp + 204.0000dp + 205.0000dp + 206.0000dp + 207.0000dp + 208.0000dp + 209.0000dp + 210.0000dp + 211.0000dp + 212.0000dp + 213.0000dp + 214.0000dp + 215.0000dp + 216.0000dp + 217.0000dp + 218.0000dp + 219.0000dp + 220.0000dp + 221.0000dp + 222.0000dp + 223.0000dp + 224.0000dp + 225.0000dp + 226.0000dp + 227.0000dp + 228.0000dp + 229.0000dp + 230.0000dp + 231.0000dp + 232.0000dp + 233.0000dp + 234.0000dp + 235.0000dp + 236.0000dp + 237.0000dp + 238.0000dp + 239.0000dp + 240.0000dp + 241.0000dp + 242.0000dp + 243.0000dp + 244.0000dp + 245.0000dp + 246.0000dp + 247.0000dp + 248.0000dp + 249.0000dp + 250.0000dp + 251.0000dp + 252.0000dp + 253.0000dp + 254.0000dp + 255.0000dp + 256.0000dp + 257.0000dp + 258.0000dp + 259.0000dp + 260.0000dp + 261.0000dp + 262.0000dp + 263.0000dp + 264.0000dp + 265.0000dp + 266.0000dp + 267.0000dp + 268.0000dp + 269.0000dp + 270.0000dp + 271.0000dp + 272.0000dp + 273.0000dp + 274.0000dp + 275.0000dp + 276.0000dp + 277.0000dp + 278.0000dp + 279.0000dp + 280.0000dp + 281.0000dp + 282.0000dp + 283.0000dp + 284.0000dp + 285.0000dp + 286.0000dp + 287.0000dp + 288.0000dp + 289.0000dp + 290.0000dp + 291.0000dp + 292.0000dp + 293.0000dp + 294.0000dp + 295.0000dp + 296.0000dp + 297.0000dp + 298.0000dp + 299.0000dp + 300.0000dp + 301.0000dp + 302.0000dp + 303.0000dp + 304.0000dp + 305.0000dp + 306.0000dp + 307.0000dp + 308.0000dp + 309.0000dp + 310.0000dp + 311.0000dp + 312.0000dp + 313.0000dp + 314.0000dp + 315.0000dp + 316.0000dp + 317.0000dp + 318.0000dp + 319.0000dp + 320.0000dp + 321.0000dp + 322.0000dp + 323.0000dp + 324.0000dp + 325.0000dp + 326.0000dp + 327.0000dp + 328.0000dp + 329.0000dp + 330.0000dp + 331.0000dp + 332.0000dp + 333.0000dp + 334.0000dp + 335.0000dp + 336.0000dp + 337.0000dp + 338.0000dp + 339.0000dp + 340.0000dp + 341.0000dp + 342.0000dp + 343.0000dp + 344.0000dp + 345.0000dp + 346.0000dp + 347.0000dp + 348.0000dp + 349.0000dp + 350.0000dp + 351.0000dp + 352.0000dp + 353.0000dp + 354.0000dp + 355.0000dp + 356.0000dp + 357.0000dp + 358.0000dp + 359.0000dp + 360.0000dp + 365.0000dp + 370.0000dp + 400.0000dp + 410.0000dp + 422.0000dp + 472.0000dp + 500.0000dp + 600.0000dp + 640.0000dp + 720.0000dp + 6.0000sp + 7.0000sp + 8.0000sp + 9.0000sp + 10.0000sp + 11.0000sp + 12.0000sp + 13.0000sp + 14.0000sp + 15.0000sp + 16.0000sp + 17.0000sp + 18.0000sp + 19.0000sp + 20.0000sp + 21.0000sp + 22.0000sp + 23.0000sp + 24.0000sp + 25.0000sp + 28.0000sp + 30.0000sp + 32.0000sp + 34.0000sp + 36.0000sp + 38.0000sp + 40.0000sp + 42.0000sp + 48.0000sp + diff --git a/app/src/main/res/values-sw384dp/dimens.xml b/app/src/main/res/values-sw384dp/dimens.xml new file mode 100644 index 0000000..af5661a --- /dev/null +++ b/app/src/main/res/values-sw384dp/dimens.xml @@ -0,0 +1,419 @@ + + + @dimen/dp_15 + -64.0000dp + -32.0000dp + -21.3333dp + -12.8000dp + -10.6667dp + -8.5333dp + -5.3333dp + -2.1333dp + -1.0667dp + 0.0000dp + 0.1067dp + 0.5333dp + 1.0667dp + 1.6000dp + 2.1333dp + 2.6667dp + 3.2000dp + 3.7333dp + 4.2667dp + 4.8000dp + 5.3333dp + 6.4000dp + 7.4667dp + 8.5333dp + 9.6000dp + 10.6667dp + 11.7333dp + 12.8000dp + 13.8667dp + 14.9333dp + 16.0000dp + 17.0667dp + 18.1333dp + 19.2000dp + 20.2667dp + 21.3333dp + 22.4000dp + 23.4667dp + 24.5333dp + 25.6000dp + 26.6667dp + 27.7333dp + 28.8000dp + 29.8667dp + 30.9333dp + 32.0000dp + 33.0667dp + 34.1333dp + 35.2000dp + 36.2667dp + 37.3333dp + 38.4000dp + 39.4667dp + 40.5333dp + 41.6000dp + 42.6667dp + 43.7333dp + 44.8000dp + 45.8667dp + 46.9333dp + 48.0000dp + 49.0667dp + 50.1333dp + 51.2000dp + 52.2667dp + 53.3333dp + 54.4000dp + 55.4667dp + 56.5333dp + 57.6000dp + 58.6667dp + 59.7333dp + 60.8000dp + 61.8667dp + 62.9333dp + 64.0000dp + 65.0667dp + 66.1333dp + 67.2000dp + 68.2667dp + 69.3333dp + 70.4000dp + 71.4667dp + 72.5333dp + 73.6000dp + 74.6667dp + 75.7333dp + 76.8000dp + 77.8667dp + 78.9333dp + 80.0000dp + 81.0667dp + 82.1333dp + 83.2000dp + 84.2667dp + 85.3333dp + 86.4000dp + 87.4667dp + 88.5333dp + 89.6000dp + 90.6667dp + 91.7333dp + 92.8000dp + 93.8667dp + 94.9333dp + 96.0000dp + 97.0667dp + 98.1333dp + 99.2000dp + 100.2667dp + 101.3333dp + 102.4000dp + 103.4667dp + 104.5333dp + 105.6000dp + 106.6667dp + 107.7333dp + 108.8000dp + 109.8667dp + 110.9333dp + 112.0000dp + 113.0667dp + 114.1333dp + 115.2000dp + 116.2667dp + 117.3333dp + 118.4000dp + 119.4667dp + 120.5333dp + 121.6000dp + 122.6667dp + 123.7333dp + 124.8000dp + 125.8667dp + 126.9333dp + 128.0000dp + 129.0667dp + 130.1333dp + 131.2000dp + 132.2667dp + 133.3333dp + 134.4000dp + 135.4667dp + 136.5333dp + 137.6000dp + 138.6667dp + 139.7333dp + 140.8000dp + 141.8667dp + 142.9333dp + 144.0000dp + 145.0667dp + 146.1333dp + 147.2000dp + 148.2667dp + 149.3333dp + 150.4000dp + 151.4667dp + 152.5333dp + 153.6000dp + 154.6667dp + 155.7333dp + 156.8000dp + 157.8667dp + 158.9333dp + 160.0000dp + 161.0667dp + 162.1333dp + 163.2000dp + 164.2667dp + 165.3333dp + 166.4000dp + 167.4667dp + 168.5333dp + 169.6000dp + 170.6667dp + 171.7333dp + 172.8000dp + 173.8667dp + 174.9333dp + 176.0000dp + 177.0667dp + 178.1333dp + 179.2000dp + 180.2667dp + 181.3333dp + 182.4000dp + 183.4667dp + 184.5333dp + 185.6000dp + 186.6667dp + 187.7333dp + 188.8000dp + 189.8667dp + 190.9333dp + 192.0000dp + 193.0667dp + 194.1333dp + 195.2000dp + 196.2667dp + 197.3333dp + 198.4000dp + 199.4667dp + 200.5333dp + 201.6000dp + 202.6667dp + 203.7333dp + 204.8000dp + 205.8667dp + 206.9333dp + 208.0000dp + 209.0667dp + 210.1333dp + 211.2000dp + 212.2667dp + 213.3333dp + 214.4000dp + 215.4667dp + 216.5333dp + 217.6000dp + 218.6667dp + 219.7333dp + 220.8000dp + 221.8667dp + 222.9333dp + 224.0000dp + 225.0667dp + 226.1333dp + 227.2000dp + 228.2667dp + 229.3333dp + 230.4000dp + 231.4667dp + 232.5333dp + 233.6000dp + 234.6667dp + 235.7333dp + 236.8000dp + 237.8667dp + 238.9333dp + 240.0000dp + 241.0667dp + 242.1333dp + 243.2000dp + 244.2667dp + 245.3333dp + 246.4000dp + 247.4667dp + 248.5333dp + 249.6000dp + 250.6667dp + 251.7333dp + 252.8000dp + 253.8667dp + 254.9333dp + 256.0000dp + 257.0667dp + 258.1333dp + 259.2000dp + 260.2667dp + 261.3333dp + 262.4000dp + 263.4667dp + 264.5333dp + 265.6000dp + 266.6667dp + 267.7333dp + 268.8000dp + 269.8667dp + 270.9333dp + 272.0000dp + 273.0667dp + 274.1333dp + 275.2000dp + 276.2667dp + 277.3333dp + 278.4000dp + 279.4667dp + 280.5333dp + 281.6000dp + 282.6667dp + 283.7333dp + 284.8000dp + 285.8667dp + 286.9333dp + 288.0000dp + 289.0667dp + 290.1333dp + 291.2000dp + 292.2667dp + 293.3333dp + 294.4000dp + 295.4667dp + 296.5333dp + 297.6000dp + 298.6667dp + 299.7333dp + 300.8000dp + 301.8667dp + 302.9333dp + 304.0000dp + 305.0667dp + 306.1333dp + 307.2000dp + 308.2667dp + 309.3333dp + 310.4000dp + 311.4667dp + 312.5333dp + 313.6000dp + 314.6667dp + 315.7333dp + 316.8000dp + 317.8667dp + 318.9333dp + 320.0000dp + 321.0667dp + 322.1333dp + 323.2000dp + 324.2667dp + 325.3333dp + 326.4000dp + 327.4667dp + 328.5333dp + 329.6000dp + 330.6667dp + 331.7333dp + 332.8000dp + 333.8667dp + 334.9333dp + 336.0000dp + 337.0667dp + 338.1333dp + 339.2000dp + 340.2667dp + 341.3333dp + 342.4000dp + 343.4667dp + 344.5333dp + 345.6000dp + 346.6667dp + 347.7333dp + 348.8000dp + 349.8667dp + 350.9333dp + 352.0000dp + 353.0667dp + 354.1333dp + 355.2000dp + 356.2667dp + 357.3333dp + 358.4000dp + 359.4667dp + 360.5333dp + 361.6000dp + 362.6667dp + 363.7333dp + 364.8000dp + 365.8667dp + 366.9333dp + 368.0000dp + 369.0667dp + 370.1333dp + 371.2000dp + 372.2667dp + 373.3333dp + 374.4000dp + 375.4667dp + 376.5333dp + 377.6000dp + 378.6667dp + 379.7333dp + 380.8000dp + 381.8667dp + 382.9333dp + 384.0000dp + 389.3333dp + 394.6667dp + 426.6667dp + 437.3333dp + 450.1333dp + 503.4667dp + 533.3333dp + 640.0000dp + 682.6667dp + 768.0000dp + 6.4000sp + 7.4667sp + 8.5333sp + 9.6000sp + 10.6667sp + 11.7333sp + 12.8000sp + 13.8667sp + 14.9333sp + 16.0000sp + 17.0667sp + 18.1333sp + 19.2000sp + 20.2667sp + 21.3333sp + 22.4000sp + 23.4667sp + 24.5333sp + 25.6000sp + 26.6667sp + 29.8667sp + 32.0000sp + 34.1333sp + 36.2667sp + 38.4000sp + 40.5333sp + 42.6667sp + 44.8000sp + 51.2000sp + diff --git a/app/src/main/res/values-sw392dp/dimens.xml b/app/src/main/res/values-sw392dp/dimens.xml new file mode 100644 index 0000000..07f6688 --- /dev/null +++ b/app/src/main/res/values-sw392dp/dimens.xml @@ -0,0 +1,419 @@ + + + @dimen/dp_15 + -65.4545dp + -32.7273dp + -21.8182dp + -13.0909dp + -10.9091dp + -8.7273dp + -5.4545dp + -2.1818dp + -1.0909dp + 0.0000dp + 0.1091dp + 0.5455dp + 1.0909dp + 1.6364dp + 2.1818dp + 2.7273dp + 3.2727dp + 3.8182dp + 4.3636dp + 4.9091dp + 5.4545dp + 6.5455dp + 7.6364dp + 8.7273dp + 9.8182dp + 10.9091dp + 12.0000dp + 13.0909dp + 14.1818dp + 15.2727dp + 16.3636dp + 17.4545dp + 18.5455dp + 19.6364dp + 20.7273dp + 21.8182dp + 22.9091dp + 24.0000dp + 25.0909dp + 26.1818dp + 27.2727dp + 28.3636dp + 29.4545dp + 30.5454dp + 31.6364dp + 32.7273dp + 33.8182dp + 34.9091dp + 36.0000dp + 37.0909dp + 38.1818dp + 39.2727dp + 40.3636dp + 41.4545dp + 42.5454dp + 43.6364dp + 44.7273dp + 45.8182dp + 46.9091dp + 48.0000dp + 49.0909dp + 50.1818dp + 51.2727dp + 52.3636dp + 53.4545dp + 54.5454dp + 55.6364dp + 56.7273dp + 57.8182dp + 58.9091dp + 60.0000dp + 61.0909dp + 62.1818dp + 63.2727dp + 64.3636dp + 65.4545dp + 66.5454dp + 67.6364dp + 68.7273dp + 69.8182dp + 70.9091dp + 72.0000dp + 73.0909dp + 74.1818dp + 75.2727dp + 76.3636dp + 77.4545dp + 78.5454dp + 79.6363dp + 80.7273dp + 81.8182dp + 82.9091dp + 84.0000dp + 85.0909dp + 86.1818dp + 87.2727dp + 88.3636dp + 89.4545dp + 90.5454dp + 91.6363dp + 92.7273dp + 93.8182dp + 94.9091dp + 96.0000dp + 97.0909dp + 98.1818dp + 99.2727dp + 100.3636dp + 101.4545dp + 102.5454dp + 103.6363dp + 104.7273dp + 105.8182dp + 106.9091dp + 108.0000dp + 109.0909dp + 110.1818dp + 111.2727dp + 112.3636dp + 113.4545dp + 114.5454dp + 115.6363dp + 116.7273dp + 117.8182dp + 118.9091dp + 120.0000dp + 121.0909dp + 122.1818dp + 123.2727dp + 124.3636dp + 125.4545dp + 126.5454dp + 127.6363dp + 128.7272dp + 129.8182dp + 130.9091dp + 132.0000dp + 133.0909dp + 134.1818dp + 135.2727dp + 136.3636dp + 137.4545dp + 138.5454dp + 139.6363dp + 140.7272dp + 141.8182dp + 142.9091dp + 144.0000dp + 145.0909dp + 146.1818dp + 147.2727dp + 148.3636dp + 149.4545dp + 150.5454dp + 151.6363dp + 152.7272dp + 153.8182dp + 154.9091dp + 156.0000dp + 157.0909dp + 158.1818dp + 159.2727dp + 160.3636dp + 161.4545dp + 162.5454dp + 163.6363dp + 164.7272dp + 165.8182dp + 166.9091dp + 168.0000dp + 169.0909dp + 170.1818dp + 171.2727dp + 172.3636dp + 173.4545dp + 174.5454dp + 175.6363dp + 176.7272dp + 177.8181dp + 178.9091dp + 180.0000dp + 181.0909dp + 182.1818dp + 183.2727dp + 184.3636dp + 185.4545dp + 186.5454dp + 187.6363dp + 188.7272dp + 189.8181dp + 190.9091dp + 192.0000dp + 193.0909dp + 194.1818dp + 195.2727dp + 196.3636dp + 197.4545dp + 198.5454dp + 199.6363dp + 200.7272dp + 201.8181dp + 202.9091dp + 204.0000dp + 205.0909dp + 206.1818dp + 207.2727dp + 208.3636dp + 209.4545dp + 210.5454dp + 211.6363dp + 212.7272dp + 213.8181dp + 214.9091dp + 216.0000dp + 217.0909dp + 218.1818dp + 219.2727dp + 220.3636dp + 221.4545dp + 222.5454dp + 223.6363dp + 224.7272dp + 225.8181dp + 226.9090dp + 228.0000dp + 229.0909dp + 230.1818dp + 231.2727dp + 232.3636dp + 233.4545dp + 234.5454dp + 235.6363dp + 236.7272dp + 237.8181dp + 238.9090dp + 240.0000dp + 241.0909dp + 242.1818dp + 243.2727dp + 244.3636dp + 245.4545dp + 246.5454dp + 247.6363dp + 248.7272dp + 249.8181dp + 250.9090dp + 252.0000dp + 253.0909dp + 254.1818dp + 255.2727dp + 256.3636dp + 257.4545dp + 258.5454dp + 259.6363dp + 260.7272dp + 261.8181dp + 262.9090dp + 264.0000dp + 265.0909dp + 266.1818dp + 267.2727dp + 268.3636dp + 269.4545dp + 270.5454dp + 271.6363dp + 272.7272dp + 273.8181dp + 274.9090dp + 275.9999dp + 277.0909dp + 278.1818dp + 279.2727dp + 280.3636dp + 281.4545dp + 282.5454dp + 283.6363dp + 284.7272dp + 285.8181dp + 286.9090dp + 287.9999dp + 289.0909dp + 290.1818dp + 291.2727dp + 292.3636dp + 293.4545dp + 294.5454dp + 295.6363dp + 296.7272dp + 297.8181dp + 298.9090dp + 299.9999dp + 301.0909dp + 302.1818dp + 303.2727dp + 304.3636dp + 305.4545dp + 306.5454dp + 307.6363dp + 308.7272dp + 309.8181dp + 310.9090dp + 311.9999dp + 313.0909dp + 314.1818dp + 315.2727dp + 316.3636dp + 317.4545dp + 318.5454dp + 319.6363dp + 320.7272dp + 321.8181dp + 322.9090dp + 323.9999dp + 325.0908dp + 326.1818dp + 327.2727dp + 328.3636dp + 329.4545dp + 330.5454dp + 331.6363dp + 332.7272dp + 333.8181dp + 334.9090dp + 335.9999dp + 337.0908dp + 338.1818dp + 339.2727dp + 340.3636dp + 341.4545dp + 342.5454dp + 343.6363dp + 344.7272dp + 345.8181dp + 346.9090dp + 347.9999dp + 349.0908dp + 350.1818dp + 351.2727dp + 352.3636dp + 353.4545dp + 354.5454dp + 355.6363dp + 356.7272dp + 357.8181dp + 358.9090dp + 359.9999dp + 361.0908dp + 362.1818dp + 363.2727dp + 364.3636dp + 365.4545dp + 366.5454dp + 367.6363dp + 368.7272dp + 369.8181dp + 370.9090dp + 371.9999dp + 373.0908dp + 374.1817dp + 375.2727dp + 376.3636dp + 377.4545dp + 378.5454dp + 379.6363dp + 380.7272dp + 381.8181dp + 382.9090dp + 383.9999dp + 385.0908dp + 386.1817dp + 387.2727dp + 388.3636dp + 389.4545dp + 390.5454dp + 391.6363dp + 392.7272dp + 398.1817dp + 403.6363dp + 436.3636dp + 447.2726dp + 460.3636dp + 514.9090dp + 545.4544dp + 654.5453dp + 698.1817dp + 785.4544dp + 6.5455sp + 7.6364sp + 8.7273sp + 9.8182sp + 10.9091sp + 12.0000sp + 13.0909sp + 14.1818sp + 15.2727sp + 16.3636sp + 17.4545sp + 18.5455sp + 19.6364sp + 20.7273sp + 21.8182sp + 22.9091sp + 24.0000sp + 25.0909sp + 26.1818sp + 27.2727sp + 30.5454sp + 32.7273sp + 34.9091sp + 37.0909sp + 39.2727sp + 41.4545sp + 43.6364sp + 45.8182sp + 52.3636sp + diff --git a/app/src/main/res/values-sw400dp/dimens.xml b/app/src/main/res/values-sw400dp/dimens.xml new file mode 100644 index 0000000..6ed8f9b --- /dev/null +++ b/app/src/main/res/values-sw400dp/dimens.xml @@ -0,0 +1,419 @@ + + + @dimen/dp_15 + -66.6667dp + -33.3333dp + -22.2222dp + -13.3333dp + -11.1111dp + -8.8889dp + -5.5556dp + -2.2222dp + -1.1111dp + 0.0000dp + 0.1111dp + 0.5556dp + 1.1111dp + 1.6667dp + 2.2222dp + 2.7778dp + 3.3333dp + 3.8889dp + 4.4444dp + 5.0000dp + 5.5556dp + 6.6667dp + 7.7778dp + 8.8889dp + 10.0000dp + 11.1111dp + 12.2222dp + 13.3333dp + 14.4444dp + 15.5556dp + 16.6667dp + 17.7778dp + 18.8889dp + 20.0000dp + 21.1111dp + 22.2222dp + 23.3333dp + 24.4444dp + 25.5556dp + 26.6667dp + 27.7778dp + 28.8889dp + 30.0000dp + 31.1111dp + 32.2222dp + 33.3333dp + 34.4444dp + 35.5556dp + 36.6667dp + 37.7778dp + 38.8889dp + 40.0000dp + 41.1111dp + 42.2222dp + 43.3333dp + 44.4444dp + 45.5556dp + 46.6667dp + 47.7778dp + 48.8889dp + 50.0000dp + 51.1111dp + 52.2222dp + 53.3333dp + 54.4444dp + 55.5556dp + 56.6667dp + 57.7778dp + 58.8889dp + 60.0000dp + 61.1111dp + 62.2222dp + 63.3333dp + 64.4444dp + 65.5556dp + 66.6667dp + 67.7778dp + 68.8889dp + 70.0000dp + 71.1111dp + 72.2222dp + 73.3333dp + 74.4444dp + 75.5556dp + 76.6667dp + 77.7778dp + 78.8889dp + 80.0000dp + 81.1111dp + 82.2222dp + 83.3333dp + 84.4444dp + 85.5556dp + 86.6667dp + 87.7778dp + 88.8889dp + 90.0000dp + 91.1111dp + 92.2222dp + 93.3333dp + 94.4444dp + 95.5556dp + 96.6667dp + 97.7778dp + 98.8889dp + 100.0000dp + 101.1111dp + 102.2222dp + 103.3333dp + 104.4444dp + 105.5556dp + 106.6667dp + 107.7778dp + 108.8889dp + 110.0000dp + 111.1111dp + 112.2222dp + 113.3333dp + 114.4444dp + 115.5556dp + 116.6667dp + 117.7778dp + 118.8889dp + 120.0000dp + 121.1111dp + 122.2222dp + 123.3333dp + 124.4444dp + 125.5556dp + 126.6667dp + 127.7778dp + 128.8889dp + 130.0000dp + 131.1111dp + 132.2222dp + 133.3333dp + 134.4444dp + 135.5556dp + 136.6667dp + 137.7778dp + 138.8889dp + 140.0000dp + 141.1111dp + 142.2222dp + 143.3333dp + 144.4444dp + 145.5556dp + 146.6667dp + 147.7778dp + 148.8889dp + 150.0000dp + 151.1111dp + 152.2222dp + 153.3333dp + 154.4444dp + 155.5556dp + 156.6667dp + 157.7778dp + 158.8889dp + 160.0000dp + 161.1111dp + 162.2222dp + 163.3333dp + 164.4444dp + 165.5556dp + 166.6667dp + 167.7778dp + 168.8889dp + 170.0000dp + 171.1111dp + 172.2222dp + 173.3333dp + 174.4444dp + 175.5556dp + 176.6667dp + 177.7778dp + 178.8889dp + 180.0000dp + 181.1111dp + 182.2222dp + 183.3333dp + 184.4444dp + 185.5556dp + 186.6667dp + 187.7778dp + 188.8889dp + 190.0000dp + 191.1111dp + 192.2222dp + 193.3333dp + 194.4444dp + 195.5556dp + 196.6667dp + 197.7778dp + 198.8889dp + 200.0000dp + 201.1111dp + 202.2222dp + 203.3333dp + 204.4444dp + 205.5556dp + 206.6667dp + 207.7778dp + 208.8889dp + 210.0000dp + 211.1111dp + 212.2222dp + 213.3333dp + 214.4444dp + 215.5556dp + 216.6667dp + 217.7778dp + 218.8889dp + 220.0000dp + 221.1111dp + 222.2222dp + 223.3333dp + 224.4444dp + 225.5556dp + 226.6667dp + 227.7778dp + 228.8889dp + 230.0000dp + 231.1111dp + 232.2222dp + 233.3333dp + 234.4444dp + 235.5556dp + 236.6667dp + 237.7778dp + 238.8889dp + 240.0000dp + 241.1111dp + 242.2222dp + 243.3333dp + 244.4444dp + 245.5556dp + 246.6667dp + 247.7778dp + 248.8889dp + 250.0000dp + 251.1111dp + 252.2222dp + 253.3333dp + 254.4444dp + 255.5556dp + 256.6667dp + 257.7778dp + 258.8889dp + 260.0000dp + 261.1111dp + 262.2222dp + 263.3333dp + 264.4444dp + 265.5556dp + 266.6667dp + 267.7778dp + 268.8889dp + 270.0000dp + 271.1111dp + 272.2222dp + 273.3333dp + 274.4444dp + 275.5556dp + 276.6667dp + 277.7778dp + 278.8889dp + 280.0000dp + 281.1111dp + 282.2222dp + 283.3333dp + 284.4444dp + 285.5556dp + 286.6667dp + 287.7778dp + 288.8889dp + 290.0000dp + 291.1111dp + 292.2222dp + 293.3333dp + 294.4444dp + 295.5556dp + 296.6667dp + 297.7778dp + 298.8889dp + 300.0000dp + 301.1111dp + 302.2222dp + 303.3333dp + 304.4444dp + 305.5556dp + 306.6667dp + 307.7778dp + 308.8889dp + 310.0000dp + 311.1111dp + 312.2222dp + 313.3333dp + 314.4444dp + 315.5556dp + 316.6667dp + 317.7778dp + 318.8889dp + 320.0000dp + 321.1111dp + 322.2222dp + 323.3333dp + 324.4444dp + 325.5556dp + 326.6667dp + 327.7778dp + 328.8889dp + 330.0000dp + 331.1111dp + 332.2222dp + 333.3333dp + 334.4444dp + 335.5556dp + 336.6667dp + 337.7778dp + 338.8889dp + 340.0000dp + 341.1111dp + 342.2222dp + 343.3333dp + 344.4444dp + 345.5556dp + 346.6667dp + 347.7778dp + 348.8889dp + 350.0000dp + 351.1111dp + 352.2222dp + 353.3333dp + 354.4444dp + 355.5556dp + 356.6667dp + 357.7778dp + 358.8889dp + 360.0000dp + 361.1111dp + 362.2222dp + 363.3333dp + 364.4444dp + 365.5556dp + 366.6667dp + 367.7778dp + 368.8889dp + 370.0000dp + 371.1111dp + 372.2222dp + 373.3333dp + 374.4444dp + 375.5556dp + 376.6667dp + 377.7778dp + 378.8889dp + 380.0000dp + 381.1111dp + 382.2222dp + 383.3333dp + 384.4444dp + 385.5556dp + 386.6667dp + 387.7778dp + 388.8889dp + 390.0000dp + 391.1111dp + 392.2222dp + 393.3333dp + 394.4444dp + 395.5556dp + 396.6667dp + 397.7778dp + 398.8889dp + 400.0000dp + 405.5556dp + 411.1111dp + 444.4444dp + 455.5556dp + 468.8889dp + 524.4444dp + 555.5556dp + 666.6667dp + 711.1111dp + 800.0000dp + 6.6667sp + 7.7778sp + 8.8889sp + 10.0000sp + 11.1111sp + 12.2222sp + 13.3333sp + 14.4444sp + 15.5556sp + 16.6667sp + 17.7778sp + 18.8889sp + 20.0000sp + 21.1111sp + 22.2222sp + 23.3333sp + 24.4444sp + 25.5556sp + 26.6667sp + 27.7778sp + 31.1111sp + 33.3333sp + 35.5556sp + 37.7778sp + 40.0000sp + 42.2222sp + 44.4444sp + 46.6667sp + 53.3333sp + diff --git a/app/src/main/res/values-sw410dp/dimens.xml b/app/src/main/res/values-sw410dp/dimens.xml new file mode 100644 index 0000000..c649a36 --- /dev/null +++ b/app/src/main/res/values-sw410dp/dimens.xml @@ -0,0 +1,419 @@ + + + @dimen/dp_15 + -68.3333dp + -34.1667dp + -22.7778dp + -13.6667dp + -11.3889dp + -9.1111dp + -5.6944dp + -2.2778dp + -1.1389dp + 0.0000dp + 0.1139dp + 0.5694dp + 1.1389dp + 1.7083dp + 2.2778dp + 2.8472dp + 3.4167dp + 3.9861dp + 4.5556dp + 5.1250dp + 5.6944dp + 6.8333dp + 7.9722dp + 9.1111dp + 10.2500dp + 11.3889dp + 12.5278dp + 13.6667dp + 14.8056dp + 15.9444dp + 17.0833dp + 18.2222dp + 19.3611dp + 20.5000dp + 21.6389dp + 22.7778dp + 23.9167dp + 25.0556dp + 26.1944dp + 27.3333dp + 28.4722dp + 29.6111dp + 30.7500dp + 31.8889dp + 33.0278dp + 34.1667dp + 35.3056dp + 36.4444dp + 37.5833dp + 38.7222dp + 39.8611dp + 41.0000dp + 42.1389dp + 43.2778dp + 44.4167dp + 45.5556dp + 46.6944dp + 47.8333dp + 48.9722dp + 50.1111dp + 51.2500dp + 52.3889dp + 53.5278dp + 54.6667dp + 55.8056dp + 56.9444dp + 58.0833dp + 59.2222dp + 60.3611dp + 61.5000dp + 62.6389dp + 63.7778dp + 64.9167dp + 66.0556dp + 67.1944dp + 68.3333dp + 69.4722dp + 70.6111dp + 71.7500dp + 72.8889dp + 74.0278dp + 75.1667dp + 76.3056dp + 77.4444dp + 78.5833dp + 79.7222dp + 80.8611dp + 82.0000dp + 83.1389dp + 84.2778dp + 85.4167dp + 86.5556dp + 87.6944dp + 88.8333dp + 89.9722dp + 91.1111dp + 92.2500dp + 93.3889dp + 94.5278dp + 95.6667dp + 96.8056dp + 97.9444dp + 99.0833dp + 100.2222dp + 101.3611dp + 102.5000dp + 103.6389dp + 104.7778dp + 105.9167dp + 107.0556dp + 108.1944dp + 109.3333dp + 110.4722dp + 111.6111dp + 112.7500dp + 113.8889dp + 115.0278dp + 116.1667dp + 117.3056dp + 118.4444dp + 119.5833dp + 120.7222dp + 121.8611dp + 123.0000dp + 124.1389dp + 125.2778dp + 126.4167dp + 127.5556dp + 128.6944dp + 129.8333dp + 130.9722dp + 132.1111dp + 133.2500dp + 134.3889dp + 135.5278dp + 136.6667dp + 137.8056dp + 138.9444dp + 140.0833dp + 141.2222dp + 142.3611dp + 143.5000dp + 144.6389dp + 145.7778dp + 146.9167dp + 148.0556dp + 149.1944dp + 150.3333dp + 151.4722dp + 152.6111dp + 153.7500dp + 154.8889dp + 156.0278dp + 157.1667dp + 158.3056dp + 159.4444dp + 160.5833dp + 161.7222dp + 162.8611dp + 164.0000dp + 165.1389dp + 166.2778dp + 167.4167dp + 168.5556dp + 169.6944dp + 170.8333dp + 171.9722dp + 173.1111dp + 174.2500dp + 175.3889dp + 176.5278dp + 177.6667dp + 178.8056dp + 179.9444dp + 181.0833dp + 182.2222dp + 183.3611dp + 184.5000dp + 185.6389dp + 186.7778dp + 187.9167dp + 189.0556dp + 190.1944dp + 191.3333dp + 192.4722dp + 193.6111dp + 194.7500dp + 195.8889dp + 197.0278dp + 198.1667dp + 199.3056dp + 200.4444dp + 201.5833dp + 202.7222dp + 203.8611dp + 205.0000dp + 206.1389dp + 207.2778dp + 208.4167dp + 209.5556dp + 210.6944dp + 211.8333dp + 212.9722dp + 214.1111dp + 215.2500dp + 216.3889dp + 217.5278dp + 218.6667dp + 219.8056dp + 220.9444dp + 222.0833dp + 223.2222dp + 224.3611dp + 225.5000dp + 226.6389dp + 227.7778dp + 228.9167dp + 230.0556dp + 231.1944dp + 232.3333dp + 233.4722dp + 234.6111dp + 235.7500dp + 236.8889dp + 238.0278dp + 239.1667dp + 240.3056dp + 241.4444dp + 242.5833dp + 243.7222dp + 244.8611dp + 246.0000dp + 247.1389dp + 248.2778dp + 249.4167dp + 250.5556dp + 251.6944dp + 252.8333dp + 253.9722dp + 255.1111dp + 256.2500dp + 257.3889dp + 258.5278dp + 259.6667dp + 260.8056dp + 261.9444dp + 263.0833dp + 264.2222dp + 265.3611dp + 266.5000dp + 267.6389dp + 268.7778dp + 269.9167dp + 271.0556dp + 272.1944dp + 273.3333dp + 274.4722dp + 275.6111dp + 276.7500dp + 277.8889dp + 279.0278dp + 280.1667dp + 281.3056dp + 282.4444dp + 283.5833dp + 284.7222dp + 285.8611dp + 287.0000dp + 288.1389dp + 289.2778dp + 290.4167dp + 291.5556dp + 292.6944dp + 293.8333dp + 294.9722dp + 296.1111dp + 297.2500dp + 298.3889dp + 299.5278dp + 300.6667dp + 301.8056dp + 302.9444dp + 304.0833dp + 305.2222dp + 306.3611dp + 307.5000dp + 308.6389dp + 309.7778dp + 310.9167dp + 312.0556dp + 313.1944dp + 314.3333dp + 315.4722dp + 316.6111dp + 317.7500dp + 318.8889dp + 320.0278dp + 321.1667dp + 322.3056dp + 323.4444dp + 324.5833dp + 325.7222dp + 326.8611dp + 328.0000dp + 329.1389dp + 330.2778dp + 331.4167dp + 332.5556dp + 333.6944dp + 334.8333dp + 335.9722dp + 337.1111dp + 338.2500dp + 339.3889dp + 340.5278dp + 341.6667dp + 342.8056dp + 343.9444dp + 345.0833dp + 346.2222dp + 347.3611dp + 348.5000dp + 349.6389dp + 350.7778dp + 351.9167dp + 353.0556dp + 354.1944dp + 355.3333dp + 356.4722dp + 357.6111dp + 358.7500dp + 359.8889dp + 361.0278dp + 362.1667dp + 363.3056dp + 364.4444dp + 365.5833dp + 366.7222dp + 367.8611dp + 369.0000dp + 370.1389dp + 371.2778dp + 372.4167dp + 373.5556dp + 374.6944dp + 375.8333dp + 376.9722dp + 378.1111dp + 379.2500dp + 380.3889dp + 381.5278dp + 382.6667dp + 383.8056dp + 384.9444dp + 386.0833dp + 387.2222dp + 388.3611dp + 389.5000dp + 390.6389dp + 391.7778dp + 392.9167dp + 394.0556dp + 395.1944dp + 396.3333dp + 397.4722dp + 398.6111dp + 399.7500dp + 400.8889dp + 402.0278dp + 403.1667dp + 404.3056dp + 405.4444dp + 406.5833dp + 407.7222dp + 408.8611dp + 410.0000dp + 415.6944dp + 421.3889dp + 455.5556dp + 466.9444dp + 480.6111dp + 537.5556dp + 569.4444dp + 683.3333dp + 728.8889dp + 820.0000dp + 6.8333sp + 7.9722sp + 9.1111sp + 10.2500sp + 11.3889sp + 12.5278sp + 13.6667sp + 14.8056sp + 15.9444sp + 17.0833sp + 18.2222sp + 19.3611sp + 20.5000sp + 21.6389sp + 22.7778sp + 23.9167sp + 25.0556sp + 26.1944sp + 27.3333sp + 28.4722sp + 31.8889sp + 34.1667sp + 36.4444sp + 38.7222sp + 41.0000sp + 43.2778sp + 45.5556sp + 47.8333sp + 54.6667sp + diff --git a/app/src/main/res/values-sw411dp/dimens.xml b/app/src/main/res/values-sw411dp/dimens.xml new file mode 100644 index 0000000..4241e41 --- /dev/null +++ b/app/src/main/res/values-sw411dp/dimens.xml @@ -0,0 +1,419 @@ + + + @dimen/dp_15 + -68.5714dp + -34.2857dp + -22.8571dp + -13.7143dp + -11.4286dp + -9.1429dp + -5.7143dp + -2.2857dp + -1.1429dp + 0.0000dp + 0.1143dp + 0.5714dp + 1.1429dp + 1.7143dp + 2.2857dp + 2.8571dp + 3.4286dp + 4.0000dp + 4.5714dp + 5.1429dp + 5.7143dp + 6.8571dp + 8.0000dp + 9.1429dp + 10.2857dp + 11.4286dp + 12.5714dp + 13.7143dp + 14.8571dp + 16.0000dp + 17.1429dp + 18.2857dp + 19.4286dp + 20.5714dp + 21.7143dp + 22.8571dp + 24.0000dp + 25.1429dp + 26.2857dp + 27.4286dp + 28.5714dp + 29.7143dp + 30.8571dp + 32.0000dp + 33.1429dp + 34.2857dp + 35.4286dp + 36.5714dp + 37.7143dp + 38.8571dp + 40.0000dp + 41.1428dp + 42.2857dp + 43.4286dp + 44.5714dp + 45.7143dp + 46.8571dp + 48.0000dp + 49.1428dp + 50.2857dp + 51.4286dp + 52.5714dp + 53.7143dp + 54.8571dp + 56.0000dp + 57.1428dp + 58.2857dp + 59.4286dp + 60.5714dp + 61.7143dp + 62.8571dp + 64.0000dp + 65.1428dp + 66.2857dp + 67.4286dp + 68.5714dp + 69.7143dp + 70.8571dp + 72.0000dp + 73.1428dp + 74.2857dp + 75.4286dp + 76.5714dp + 77.7143dp + 78.8571dp + 80.0000dp + 81.1428dp + 82.2857dp + 83.4286dp + 84.5714dp + 85.7143dp + 86.8571dp + 88.0000dp + 89.1428dp + 90.2857dp + 91.4286dp + 92.5714dp + 93.7143dp + 94.8571dp + 96.0000dp + 97.1428dp + 98.2857dp + 99.4286dp + 100.5714dp + 101.7143dp + 102.8571dp + 104.0000dp + 105.1428dp + 106.2857dp + 107.4286dp + 108.5714dp + 109.7143dp + 110.8571dp + 112.0000dp + 113.1428dp + 114.2857dp + 115.4286dp + 116.5714dp + 117.7143dp + 118.8571dp + 120.0000dp + 121.1428dp + 122.2857dp + 123.4285dp + 124.5714dp + 125.7143dp + 126.8571dp + 128.0000dp + 129.1428dp + 130.2857dp + 131.4285dp + 132.5714dp + 133.7143dp + 134.8571dp + 136.0000dp + 137.1428dp + 138.2857dp + 139.4285dp + 140.5714dp + 141.7143dp + 142.8571dp + 144.0000dp + 145.1428dp + 146.2857dp + 147.4285dp + 148.5714dp + 149.7143dp + 150.8571dp + 152.0000dp + 153.1428dp + 154.2857dp + 155.4285dp + 156.5714dp + 157.7143dp + 158.8571dp + 160.0000dp + 161.1428dp + 162.2857dp + 163.4285dp + 164.5714dp + 165.7143dp + 166.8571dp + 168.0000dp + 169.1428dp + 170.2857dp + 171.4285dp + 172.5714dp + 173.7143dp + 174.8571dp + 176.0000dp + 177.1428dp + 178.2857dp + 179.4285dp + 180.5714dp + 181.7143dp + 182.8571dp + 184.0000dp + 185.1428dp + 186.2857dp + 187.4285dp + 188.5714dp + 189.7143dp + 190.8571dp + 192.0000dp + 193.1428dp + 194.2857dp + 195.4285dp + 196.5714dp + 197.7143dp + 198.8571dp + 200.0000dp + 201.1428dp + 202.2857dp + 203.4285dp + 204.5714dp + 205.7142dp + 206.8571dp + 208.0000dp + 209.1428dp + 210.2857dp + 211.4285dp + 212.5714dp + 213.7142dp + 214.8571dp + 216.0000dp + 217.1428dp + 218.2857dp + 219.4285dp + 220.5714dp + 221.7142dp + 222.8571dp + 224.0000dp + 225.1428dp + 226.2857dp + 227.4285dp + 228.5714dp + 229.7142dp + 230.8571dp + 232.0000dp + 233.1428dp + 234.2857dp + 235.4285dp + 236.5714dp + 237.7142dp + 238.8571dp + 240.0000dp + 241.1428dp + 242.2857dp + 243.4285dp + 244.5714dp + 245.7142dp + 246.8571dp + 248.0000dp + 249.1428dp + 250.2857dp + 251.4285dp + 252.5714dp + 253.7142dp + 254.8571dp + 256.0000dp + 257.1428dp + 258.2857dp + 259.4285dp + 260.5714dp + 261.7142dp + 262.8571dp + 264.0000dp + 265.1428dp + 266.2857dp + 267.4285dp + 268.5714dp + 269.7142dp + 270.8571dp + 272.0000dp + 273.1428dp + 274.2857dp + 275.4285dp + 276.5714dp + 277.7142dp + 278.8571dp + 280.0000dp + 281.1428dp + 282.2857dp + 283.4285dp + 284.5714dp + 285.7142dp + 286.8571dp + 287.9999dp + 289.1428dp + 290.2857dp + 291.4285dp + 292.5714dp + 293.7142dp + 294.8571dp + 295.9999dp + 297.1428dp + 298.2857dp + 299.4285dp + 300.5714dp + 301.7142dp + 302.8571dp + 303.9999dp + 305.1428dp + 306.2857dp + 307.4285dp + 308.5714dp + 309.7142dp + 310.8571dp + 311.9999dp + 313.1428dp + 314.2857dp + 315.4285dp + 316.5714dp + 317.7142dp + 318.8571dp + 319.9999dp + 321.1428dp + 322.2857dp + 323.4285dp + 324.5714dp + 325.7142dp + 326.8571dp + 327.9999dp + 329.1428dp + 330.2857dp + 331.4285dp + 332.5714dp + 333.7142dp + 334.8571dp + 335.9999dp + 337.1428dp + 338.2857dp + 339.4285dp + 340.5714dp + 341.7142dp + 342.8571dp + 343.9999dp + 345.1428dp + 346.2857dp + 347.4285dp + 348.5714dp + 349.7142dp + 350.8571dp + 351.9999dp + 353.1428dp + 354.2857dp + 355.4285dp + 356.5714dp + 357.7142dp + 358.8571dp + 359.9999dp + 361.1428dp + 362.2857dp + 363.4285dp + 364.5714dp + 365.7142dp + 366.8571dp + 367.9999dp + 369.1428dp + 370.2856dp + 371.4285dp + 372.5714dp + 373.7142dp + 374.8571dp + 375.9999dp + 377.1428dp + 378.2856dp + 379.4285dp + 380.5714dp + 381.7142dp + 382.8571dp + 383.9999dp + 385.1428dp + 386.2856dp + 387.4285dp + 388.5714dp + 389.7142dp + 390.8571dp + 391.9999dp + 393.1428dp + 394.2856dp + 395.4285dp + 396.5714dp + 397.7142dp + 398.8571dp + 399.9999dp + 401.1428dp + 402.2856dp + 403.4285dp + 404.5714dp + 405.7142dp + 406.8571dp + 407.9999dp + 409.1428dp + 410.2856dp + 411.4285dp + 417.1428dp + 422.8571dp + 457.1428dp + 468.5713dp + 482.2856dp + 539.4285dp + 571.4285dp + 685.7142dp + 731.4284dp + 822.8570dp + 6.8571sp + 8.0000sp + 9.1429sp + 10.2857sp + 11.4286sp + 12.5714sp + 13.7143sp + 14.8571sp + 16.0000sp + 17.1429sp + 18.2857sp + 19.4286sp + 20.5714sp + 21.7143sp + 22.8571sp + 24.0000sp + 25.1429sp + 26.2857sp + 27.4286sp + 28.5714sp + 32.0000sp + 34.2857sp + 36.5714sp + 38.8571sp + 41.1428sp + 43.4286sp + 45.7143sp + 48.0000sp + 54.8571sp + diff --git a/app/src/main/res/values-sw432dp/dimens.xml b/app/src/main/res/values-sw432dp/dimens.xml new file mode 100644 index 0000000..5c42af7 --- /dev/null +++ b/app/src/main/res/values-sw432dp/dimens.xml @@ -0,0 +1,419 @@ + + + @dimen/dp_15 + -72.0000dp + -36.0000dp + -24.0000dp + -14.4000dp + -12.0000dp + -9.6000dp + -6.0000dp + -2.4000dp + -1.2000dp + 0.0000dp + 0.1200dp + 0.6000dp + 1.2000dp + 1.8000dp + 2.4000dp + 3.0000dp + 3.6000dp + 4.2000dp + 4.8000dp + 5.4000dp + 6.0000dp + 7.2000dp + 8.4000dp + 9.6000dp + 10.8000dp + 12.0000dp + 13.2000dp + 14.4000dp + 15.6000dp + 16.8000dp + 18.0000dp + 19.2000dp + 20.4000dp + 21.6000dp + 22.8000dp + 24.0000dp + 25.2000dp + 26.4000dp + 27.6000dp + 28.8000dp + 30.0000dp + 31.2000dp + 32.4000dp + 33.6000dp + 34.8000dp + 36.0000dp + 37.2000dp + 38.4000dp + 39.6000dp + 40.8000dp + 42.0000dp + 43.2000dp + 44.4000dp + 45.6000dp + 46.8000dp + 48.0000dp + 49.2000dp + 50.4000dp + 51.6000dp + 52.8000dp + 54.0000dp + 55.2000dp + 56.4000dp + 57.6000dp + 58.8000dp + 60.0000dp + 61.2000dp + 62.4000dp + 63.6000dp + 64.8000dp + 66.0000dp + 67.2000dp + 68.4000dp + 69.6000dp + 70.8000dp + 72.0000dp + 73.2000dp + 74.4000dp + 75.6000dp + 76.8000dp + 78.0000dp + 79.2000dp + 80.4000dp + 81.6000dp + 82.8000dp + 84.0000dp + 85.2000dp + 86.4000dp + 87.6000dp + 88.8000dp + 90.0000dp + 91.2000dp + 92.4000dp + 93.6000dp + 94.8000dp + 96.0000dp + 97.2000dp + 98.4000dp + 99.6000dp + 100.8000dp + 102.0000dp + 103.2000dp + 104.4000dp + 105.6000dp + 106.8000dp + 108.0000dp + 109.2000dp + 110.4000dp + 111.6000dp + 112.8000dp + 114.0000dp + 115.2000dp + 116.4000dp + 117.6000dp + 118.8000dp + 120.0000dp + 121.2000dp + 122.4000dp + 123.6000dp + 124.8000dp + 126.0000dp + 127.2000dp + 128.4000dp + 129.6000dp + 130.8000dp + 132.0000dp + 133.2000dp + 134.4000dp + 135.6000dp + 136.8000dp + 138.0000dp + 139.2000dp + 140.4000dp + 141.6000dp + 142.8000dp + 144.0000dp + 145.2000dp + 146.4000dp + 147.6000dp + 148.8000dp + 150.0000dp + 151.2000dp + 152.4000dp + 153.6000dp + 154.8000dp + 156.0000dp + 157.2000dp + 158.4000dp + 159.6000dp + 160.8000dp + 162.0000dp + 163.2000dp + 164.4000dp + 165.6000dp + 166.8000dp + 168.0000dp + 169.2000dp + 170.4000dp + 171.6000dp + 172.8000dp + 174.0000dp + 175.2000dp + 176.4000dp + 177.6000dp + 178.8000dp + 180.0000dp + 181.2000dp + 182.4000dp + 183.6000dp + 184.8000dp + 186.0000dp + 187.2000dp + 188.4000dp + 189.6000dp + 190.8000dp + 192.0000dp + 193.2000dp + 194.4000dp + 195.6000dp + 196.8000dp + 198.0000dp + 199.2000dp + 200.4000dp + 201.6000dp + 202.8000dp + 204.0000dp + 205.2000dp + 206.4000dp + 207.6000dp + 208.8000dp + 210.0000dp + 211.2000dp + 212.4000dp + 213.6000dp + 214.8000dp + 216.0000dp + 217.2000dp + 218.4000dp + 219.6000dp + 220.8000dp + 222.0000dp + 223.2000dp + 224.4000dp + 225.6000dp + 226.8000dp + 228.0000dp + 229.2000dp + 230.4000dp + 231.6000dp + 232.8000dp + 234.0000dp + 235.2000dp + 236.4000dp + 237.6000dp + 238.8000dp + 240.0000dp + 241.2000dp + 242.4000dp + 243.6000dp + 244.8000dp + 246.0000dp + 247.2000dp + 248.4000dp + 249.6000dp + 250.8000dp + 252.0000dp + 253.2000dp + 254.4000dp + 255.6000dp + 256.8000dp + 258.0000dp + 259.2000dp + 260.4000dp + 261.6000dp + 262.8000dp + 264.0000dp + 265.2000dp + 266.4000dp + 267.6000dp + 268.8000dp + 270.0000dp + 271.2000dp + 272.4000dp + 273.6000dp + 274.8000dp + 276.0000dp + 277.2000dp + 278.4000dp + 279.6000dp + 280.8000dp + 282.0000dp + 283.2000dp + 284.4000dp + 285.6000dp + 286.8000dp + 288.0000dp + 289.2000dp + 290.4000dp + 291.6000dp + 292.8000dp + 294.0000dp + 295.2000dp + 296.4000dp + 297.6000dp + 298.8000dp + 300.0000dp + 301.2000dp + 302.4000dp + 303.6000dp + 304.8000dp + 306.0000dp + 307.2000dp + 308.4000dp + 309.6000dp + 310.8000dp + 312.0000dp + 313.2000dp + 314.4000dp + 315.6000dp + 316.8000dp + 318.0000dp + 319.2000dp + 320.4000dp + 321.6000dp + 322.8000dp + 324.0000dp + 325.2000dp + 326.4000dp + 327.6000dp + 328.8000dp + 330.0000dp + 331.2000dp + 332.4000dp + 333.6000dp + 334.8000dp + 336.0000dp + 337.2000dp + 338.4000dp + 339.6000dp + 340.8000dp + 342.0000dp + 343.2000dp + 344.4000dp + 345.6000dp + 346.8000dp + 348.0000dp + 349.2000dp + 350.4000dp + 351.6000dp + 352.8000dp + 354.0000dp + 355.2000dp + 356.4000dp + 357.6000dp + 358.8000dp + 360.0000dp + 361.2000dp + 362.4000dp + 363.6000dp + 364.8000dp + 366.0000dp + 367.2000dp + 368.4000dp + 369.6000dp + 370.8000dp + 372.0000dp + 373.2000dp + 374.4000dp + 375.6000dp + 376.8000dp + 378.0000dp + 379.2000dp + 380.4000dp + 381.6000dp + 382.8000dp + 384.0000dp + 385.2000dp + 386.4000dp + 387.6000dp + 388.8000dp + 390.0000dp + 391.2000dp + 392.4000dp + 393.6000dp + 394.8000dp + 396.0000dp + 397.2000dp + 398.4000dp + 399.6000dp + 400.8000dp + 402.0000dp + 403.2000dp + 404.4000dp + 405.6000dp + 406.8000dp + 408.0000dp + 409.2000dp + 410.4000dp + 411.6000dp + 412.8000dp + 414.0000dp + 415.2000dp + 416.4000dp + 417.6000dp + 418.8000dp + 420.0000dp + 421.2000dp + 422.4000dp + 423.6000dp + 424.8000dp + 426.0000dp + 427.2000dp + 428.4000dp + 429.6000dp + 430.8000dp + 432.0000dp + 438.0000dp + 444.0000dp + 480.0000dp + 492.0000dp + 506.4000dp + 566.4000dp + 600.0000dp + 720.0000dp + 768.0000dp + 864.0000dp + 7.2000sp + 8.4000sp + 9.6000sp + 10.8000sp + 12.0000sp + 13.2000sp + 14.4000sp + 15.6000sp + 16.8000sp + 18.0000sp + 19.2000sp + 20.4000sp + 21.6000sp + 22.8000sp + 24.0000sp + 25.2000sp + 26.4000sp + 27.6000sp + 28.8000sp + 30.0000sp + 33.6000sp + 36.0000sp + 38.4000sp + 40.8000sp + 43.2000sp + 45.6000sp + 48.0000sp + 50.4000sp + 57.6000sp + diff --git a/app/src/main/res/values-sw480dp/dimens.xml b/app/src/main/res/values-sw480dp/dimens.xml new file mode 100644 index 0000000..484b952 --- /dev/null +++ b/app/src/main/res/values-sw480dp/dimens.xml @@ -0,0 +1,419 @@ + + + @dimen/dp_15 + -80.0000dp + -40.0000dp + -26.6667dp + -16.0000dp + -13.3333dp + -10.6667dp + -6.6667dp + -2.6667dp + -1.3333dp + 0.0000dp + 0.1333dp + 0.6667dp + 1.3333dp + 2.0000dp + 2.6667dp + 3.3333dp + 4.0000dp + 4.6667dp + 5.3333dp + 6.0000dp + 6.6667dp + 8.0000dp + 9.3333dp + 10.6667dp + 12.0000dp + 13.3333dp + 14.6667dp + 16.0000dp + 17.3333dp + 18.6667dp + 20.0000dp + 21.3333dp + 22.6667dp + 24.0000dp + 25.3333dp + 26.6667dp + 28.0000dp + 29.3333dp + 30.6667dp + 32.0000dp + 33.3333dp + 34.6667dp + 36.0000dp + 37.3333dp + 38.6667dp + 40.0000dp + 41.3333dp + 42.6667dp + 44.0000dp + 45.3333dp + 46.6667dp + 48.0000dp + 49.3333dp + 50.6667dp + 52.0000dp + 53.3333dp + 54.6667dp + 56.0000dp + 57.3333dp + 58.6667dp + 60.0000dp + 61.3333dp + 62.6667dp + 64.0000dp + 65.3333dp + 66.6667dp + 68.0000dp + 69.3333dp + 70.6667dp + 72.0000dp + 73.3333dp + 74.6667dp + 76.0000dp + 77.3333dp + 78.6667dp + 80.0000dp + 81.3333dp + 82.6667dp + 84.0000dp + 85.3333dp + 86.6667dp + 88.0000dp + 89.3333dp + 90.6667dp + 92.0000dp + 93.3333dp + 94.6667dp + 96.0000dp + 97.3333dp + 98.6667dp + 100.0000dp + 101.3333dp + 102.6667dp + 104.0000dp + 105.3333dp + 106.6667dp + 108.0000dp + 109.3333dp + 110.6667dp + 112.0000dp + 113.3333dp + 114.6667dp + 116.0000dp + 117.3333dp + 118.6667dp + 120.0000dp + 121.3333dp + 122.6667dp + 124.0000dp + 125.3333dp + 126.6667dp + 128.0000dp + 129.3333dp + 130.6667dp + 132.0000dp + 133.3333dp + 134.6667dp + 136.0000dp + 137.3333dp + 138.6667dp + 140.0000dp + 141.3333dp + 142.6667dp + 144.0000dp + 145.3333dp + 146.6667dp + 148.0000dp + 149.3333dp + 150.6667dp + 152.0000dp + 153.3333dp + 154.6667dp + 156.0000dp + 157.3333dp + 158.6667dp + 160.0000dp + 161.3333dp + 162.6667dp + 164.0000dp + 165.3333dp + 166.6667dp + 168.0000dp + 169.3333dp + 170.6667dp + 172.0000dp + 173.3333dp + 174.6667dp + 176.0000dp + 177.3333dp + 178.6667dp + 180.0000dp + 181.3333dp + 182.6667dp + 184.0000dp + 185.3333dp + 186.6667dp + 188.0000dp + 189.3333dp + 190.6667dp + 192.0000dp + 193.3333dp + 194.6667dp + 196.0000dp + 197.3333dp + 198.6667dp + 200.0000dp + 201.3333dp + 202.6667dp + 204.0000dp + 205.3333dp + 206.6667dp + 208.0000dp + 209.3333dp + 210.6667dp + 212.0000dp + 213.3333dp + 214.6667dp + 216.0000dp + 217.3333dp + 218.6667dp + 220.0000dp + 221.3333dp + 222.6667dp + 224.0000dp + 225.3333dp + 226.6667dp + 228.0000dp + 229.3333dp + 230.6667dp + 232.0000dp + 233.3333dp + 234.6667dp + 236.0000dp + 237.3333dp + 238.6667dp + 240.0000dp + 241.3333dp + 242.6667dp + 244.0000dp + 245.3333dp + 246.6667dp + 248.0000dp + 249.3333dp + 250.6667dp + 252.0000dp + 253.3333dp + 254.6667dp + 256.0000dp + 257.3333dp + 258.6667dp + 260.0000dp + 261.3333dp + 262.6667dp + 264.0000dp + 265.3333dp + 266.6667dp + 268.0000dp + 269.3333dp + 270.6667dp + 272.0000dp + 273.3333dp + 274.6667dp + 276.0000dp + 277.3333dp + 278.6667dp + 280.0000dp + 281.3333dp + 282.6667dp + 284.0000dp + 285.3333dp + 286.6667dp + 288.0000dp + 289.3333dp + 290.6667dp + 292.0000dp + 293.3333dp + 294.6667dp + 296.0000dp + 297.3333dp + 298.6667dp + 300.0000dp + 301.3333dp + 302.6667dp + 304.0000dp + 305.3333dp + 306.6667dp + 308.0000dp + 309.3333dp + 310.6667dp + 312.0000dp + 313.3333dp + 314.6667dp + 316.0000dp + 317.3333dp + 318.6667dp + 320.0000dp + 321.3333dp + 322.6667dp + 324.0000dp + 325.3333dp + 326.6667dp + 328.0000dp + 329.3333dp + 330.6667dp + 332.0000dp + 333.3333dp + 334.6667dp + 336.0000dp + 337.3333dp + 338.6667dp + 340.0000dp + 341.3333dp + 342.6667dp + 344.0000dp + 345.3333dp + 346.6667dp + 348.0000dp + 349.3333dp + 350.6667dp + 352.0000dp + 353.3333dp + 354.6667dp + 356.0000dp + 357.3333dp + 358.6667dp + 360.0000dp + 361.3333dp + 362.6667dp + 364.0000dp + 365.3333dp + 366.6667dp + 368.0000dp + 369.3333dp + 370.6667dp + 372.0000dp + 373.3333dp + 374.6667dp + 376.0000dp + 377.3333dp + 378.6667dp + 380.0000dp + 381.3333dp + 382.6667dp + 384.0000dp + 385.3333dp + 386.6667dp + 388.0000dp + 389.3333dp + 390.6667dp + 392.0000dp + 393.3333dp + 394.6667dp + 396.0000dp + 397.3333dp + 398.6667dp + 400.0000dp + 401.3333dp + 402.6667dp + 404.0000dp + 405.3333dp + 406.6667dp + 408.0000dp + 409.3333dp + 410.6667dp + 412.0000dp + 413.3333dp + 414.6667dp + 416.0000dp + 417.3333dp + 418.6667dp + 420.0000dp + 421.3333dp + 422.6667dp + 424.0000dp + 425.3333dp + 426.6667dp + 428.0000dp + 429.3333dp + 430.6667dp + 432.0000dp + 433.3333dp + 434.6667dp + 436.0000dp + 437.3333dp + 438.6667dp + 440.0000dp + 441.3333dp + 442.6667dp + 444.0000dp + 445.3333dp + 446.6667dp + 448.0000dp + 449.3333dp + 450.6667dp + 452.0000dp + 453.3333dp + 454.6667dp + 456.0000dp + 457.3333dp + 458.6667dp + 460.0000dp + 461.3333dp + 462.6667dp + 464.0000dp + 465.3333dp + 466.6667dp + 468.0000dp + 469.3333dp + 470.6667dp + 472.0000dp + 473.3333dp + 474.6667dp + 476.0000dp + 477.3333dp + 478.6667dp + 480.0000dp + 486.6667dp + 493.3333dp + 533.3333dp + 546.6667dp + 562.6667dp + 629.3333dp + 666.6667dp + 800.0000dp + 853.3333dp + 960.0000dp + 8.0000sp + 9.3333sp + 10.6667sp + 12.0000sp + 13.3333sp + 14.6667sp + 16.0000sp + 17.3333sp + 18.6667sp + 20.0000sp + 21.3333sp + 22.6667sp + 24.0000sp + 25.3333sp + 26.6667sp + 28.0000sp + 29.3333sp + 30.6667sp + 32.0000sp + 33.3333sp + 37.3333sp + 40.0000sp + 42.6667sp + 45.3333sp + 48.0000sp + 50.6667sp + 53.3333sp + 56.0000sp + 64.0000sp + diff --git a/app/src/main/res/values-sw533dp/dimens.xml b/app/src/main/res/values-sw533dp/dimens.xml new file mode 100644 index 0000000..684927b --- /dev/null +++ b/app/src/main/res/values-sw533dp/dimens.xml @@ -0,0 +1,419 @@ + + + @dimen/dp_15 + -88.8333dp + -44.4167dp + -29.6111dp + -17.7667dp + -14.8056dp + -11.8444dp + -7.4028dp + -2.9611dp + -1.4806dp + 0.0000dp + 0.1481dp + 0.7403dp + 1.4806dp + 2.2208dp + 2.9611dp + 3.7014dp + 4.4417dp + 5.1819dp + 5.9222dp + 6.6625dp + 7.4028dp + 8.8833dp + 10.3639dp + 11.8444dp + 13.3250dp + 14.8056dp + 16.2861dp + 17.7667dp + 19.2472dp + 20.7278dp + 22.2083dp + 23.6889dp + 25.1694dp + 26.6500dp + 28.1306dp + 29.6111dp + 31.0917dp + 32.5722dp + 34.0528dp + 35.5333dp + 37.0139dp + 38.4944dp + 39.9750dp + 41.4556dp + 42.9361dp + 44.4167dp + 45.8972dp + 47.3778dp + 48.8583dp + 50.3389dp + 51.8194dp + 53.3000dp + 54.7806dp + 56.2611dp + 57.7417dp + 59.2222dp + 60.7028dp + 62.1833dp + 63.6639dp + 65.1444dp + 66.6250dp + 68.1056dp + 69.5861dp + 71.0667dp + 72.5472dp + 74.0278dp + 75.5083dp + 76.9889dp + 78.4694dp + 79.9500dp + 81.4306dp + 82.9111dp + 84.3917dp + 85.8722dp + 87.3528dp + 88.8333dp + 90.3139dp + 91.7944dp + 93.2750dp + 94.7556dp + 96.2361dp + 97.7167dp + 99.1972dp + 100.6778dp + 102.1583dp + 103.6389dp + 105.1194dp + 106.6000dp + 108.0806dp + 109.5611dp + 111.0417dp + 112.5222dp + 114.0028dp + 115.4833dp + 116.9639dp + 118.4444dp + 119.9250dp + 121.4056dp + 122.8861dp + 124.3667dp + 125.8472dp + 127.3278dp + 128.8083dp + 130.2889dp + 131.7694dp + 133.2500dp + 134.7306dp + 136.2111dp + 137.6917dp + 139.1722dp + 140.6528dp + 142.1333dp + 143.6139dp + 145.0944dp + 146.5750dp + 148.0556dp + 149.5361dp + 151.0167dp + 152.4972dp + 153.9778dp + 155.4583dp + 156.9389dp + 158.4194dp + 159.9000dp + 161.3806dp + 162.8611dp + 164.3417dp + 165.8222dp + 167.3028dp + 168.7833dp + 170.2639dp + 171.7444dp + 173.2250dp + 174.7056dp + 176.1861dp + 177.6667dp + 179.1472dp + 180.6278dp + 182.1083dp + 183.5889dp + 185.0694dp + 186.5500dp + 188.0306dp + 189.5111dp + 190.9917dp + 192.4722dp + 193.9528dp + 195.4333dp + 196.9139dp + 198.3944dp + 199.8750dp + 201.3556dp + 202.8361dp + 204.3167dp + 205.7972dp + 207.2778dp + 208.7583dp + 210.2389dp + 211.7194dp + 213.2000dp + 214.6806dp + 216.1611dp + 217.6417dp + 219.1222dp + 220.6028dp + 222.0833dp + 223.5639dp + 225.0444dp + 226.5250dp + 228.0056dp + 229.4861dp + 230.9667dp + 232.4472dp + 233.9278dp + 235.4083dp + 236.8889dp + 238.3694dp + 239.8500dp + 241.3306dp + 242.8111dp + 244.2917dp + 245.7722dp + 247.2528dp + 248.7333dp + 250.2139dp + 251.6944dp + 253.1750dp + 254.6556dp + 256.1361dp + 257.6167dp + 259.0972dp + 260.5778dp + 262.0583dp + 263.5389dp + 265.0194dp + 266.5000dp + 267.9806dp + 269.4611dp + 270.9417dp + 272.4222dp + 273.9028dp + 275.3833dp + 276.8639dp + 278.3444dp + 279.8250dp + 281.3056dp + 282.7861dp + 284.2667dp + 285.7472dp + 287.2278dp + 288.7083dp + 290.1889dp + 291.6694dp + 293.1500dp + 294.6306dp + 296.1111dp + 297.5917dp + 299.0722dp + 300.5528dp + 302.0333dp + 303.5139dp + 304.9944dp + 306.4750dp + 307.9556dp + 309.4361dp + 310.9167dp + 312.3972dp + 313.8778dp + 315.3583dp + 316.8389dp + 318.3194dp + 319.8000dp + 321.2806dp + 322.7611dp + 324.2417dp + 325.7222dp + 327.2028dp + 328.6833dp + 330.1639dp + 331.6444dp + 333.1250dp + 334.6056dp + 336.0861dp + 337.5667dp + 339.0472dp + 340.5278dp + 342.0083dp + 343.4889dp + 344.9694dp + 346.4500dp + 347.9306dp + 349.4111dp + 350.8917dp + 352.3722dp + 353.8528dp + 355.3333dp + 356.8139dp + 358.2944dp + 359.7750dp + 361.2556dp + 362.7361dp + 364.2167dp + 365.6972dp + 367.1778dp + 368.6583dp + 370.1389dp + 371.6194dp + 373.1000dp + 374.5806dp + 376.0611dp + 377.5417dp + 379.0222dp + 380.5028dp + 381.9833dp + 383.4639dp + 384.9444dp + 386.4250dp + 387.9056dp + 389.3861dp + 390.8667dp + 392.3472dp + 393.8278dp + 395.3083dp + 396.7889dp + 398.2694dp + 399.7500dp + 401.2306dp + 402.7111dp + 404.1917dp + 405.6722dp + 407.1528dp + 408.6333dp + 410.1139dp + 411.5944dp + 413.0750dp + 414.5556dp + 416.0361dp + 417.5167dp + 418.9972dp + 420.4778dp + 421.9583dp + 423.4389dp + 424.9194dp + 426.4000dp + 427.8806dp + 429.3611dp + 430.8417dp + 432.3222dp + 433.8028dp + 435.2833dp + 436.7639dp + 438.2444dp + 439.7250dp + 441.2056dp + 442.6861dp + 444.1667dp + 445.6472dp + 447.1278dp + 448.6083dp + 450.0889dp + 451.5694dp + 453.0500dp + 454.5306dp + 456.0111dp + 457.4917dp + 458.9722dp + 460.4528dp + 461.9333dp + 463.4139dp + 464.8944dp + 466.3750dp + 467.8556dp + 469.3361dp + 470.8167dp + 472.2972dp + 473.7778dp + 475.2583dp + 476.7389dp + 478.2194dp + 479.7000dp + 481.1806dp + 482.6611dp + 484.1417dp + 485.6222dp + 487.1028dp + 488.5833dp + 490.0639dp + 491.5444dp + 493.0250dp + 494.5056dp + 495.9861dp + 497.4667dp + 498.9472dp + 500.4278dp + 501.9083dp + 503.3889dp + 504.8694dp + 506.3500dp + 507.8306dp + 509.3111dp + 510.7917dp + 512.2722dp + 513.7528dp + 515.2333dp + 516.7139dp + 518.1944dp + 519.6750dp + 521.1556dp + 522.6361dp + 524.1167dp + 525.5972dp + 527.0778dp + 528.5583dp + 530.0389dp + 531.5194dp + 533.0000dp + 540.4028dp + 547.8056dp + 592.2222dp + 607.0278dp + 624.7944dp + 698.8222dp + 740.2778dp + 888.3333dp + 947.5556dp + 1066.0000dp + 8.8833sp + 10.3639sp + 11.8444sp + 13.3250sp + 14.8056sp + 16.2861sp + 17.7667sp + 19.2472sp + 20.7278sp + 22.2083sp + 23.6889sp + 25.1694sp + 26.6500sp + 28.1306sp + 29.6111sp + 31.0917sp + 32.5722sp + 34.0528sp + 35.5333sp + 37.0139sp + 41.4556sp + 44.4167sp + 47.3778sp + 50.3389sp + 53.3000sp + 56.2611sp + 59.2222sp + 62.1833sp + 71.0667sp + diff --git a/app/src/main/res/values-sw592dp/dimens.xml b/app/src/main/res/values-sw592dp/dimens.xml new file mode 100644 index 0000000..dd4830e --- /dev/null +++ b/app/src/main/res/values-sw592dp/dimens.xml @@ -0,0 +1,419 @@ + + + @dimen/dp_15 + -98.6667dp + -49.3333dp + -32.8889dp + -19.7333dp + -16.4444dp + -13.1556dp + -8.2222dp + -3.2889dp + -1.6444dp + 0.0000dp + 0.1644dp + 0.8222dp + 1.6444dp + 2.4667dp + 3.2889dp + 4.1111dp + 4.9333dp + 5.7556dp + 6.5778dp + 7.4000dp + 8.2222dp + 9.8667dp + 11.5111dp + 13.1556dp + 14.8000dp + 16.4444dp + 18.0889dp + 19.7333dp + 21.3778dp + 23.0222dp + 24.6667dp + 26.3111dp + 27.9556dp + 29.6000dp + 31.2444dp + 32.8889dp + 34.5333dp + 36.1778dp + 37.8222dp + 39.4667dp + 41.1111dp + 42.7556dp + 44.4000dp + 46.0444dp + 47.6889dp + 49.3333dp + 50.9778dp + 52.6222dp + 54.2667dp + 55.9111dp + 57.5556dp + 59.2000dp + 60.8444dp + 62.4889dp + 64.1333dp + 65.7778dp + 67.4222dp + 69.0667dp + 70.7111dp + 72.3556dp + 74.0000dp + 75.6444dp + 77.2889dp + 78.9333dp + 80.5778dp + 82.2222dp + 83.8667dp + 85.5111dp + 87.1556dp + 88.8000dp + 90.4444dp + 92.0889dp + 93.7333dp + 95.3778dp + 97.0222dp + 98.6667dp + 100.3111dp + 101.9556dp + 103.6000dp + 105.2444dp + 106.8889dp + 108.5333dp + 110.1778dp + 111.8222dp + 113.4667dp + 115.1111dp + 116.7556dp + 118.4000dp + 120.0444dp + 121.6889dp + 123.3333dp + 124.9778dp + 126.6222dp + 128.2667dp + 129.9111dp + 131.5556dp + 133.2000dp + 134.8444dp + 136.4889dp + 138.1333dp + 139.7778dp + 141.4222dp + 143.0667dp + 144.7111dp + 146.3556dp + 148.0000dp + 149.6444dp + 151.2889dp + 152.9333dp + 154.5778dp + 156.2222dp + 157.8667dp + 159.5111dp + 161.1556dp + 162.8000dp + 164.4444dp + 166.0889dp + 167.7333dp + 169.3778dp + 171.0222dp + 172.6667dp + 174.3111dp + 175.9556dp + 177.6000dp + 179.2444dp + 180.8889dp + 182.5333dp + 184.1778dp + 185.8222dp + 187.4667dp + 189.1111dp + 190.7556dp + 192.4000dp + 194.0444dp + 195.6889dp + 197.3333dp + 198.9778dp + 200.6222dp + 202.2667dp + 203.9111dp + 205.5556dp + 207.2000dp + 208.8444dp + 210.4889dp + 212.1333dp + 213.7778dp + 215.4222dp + 217.0667dp + 218.7111dp + 220.3556dp + 222.0000dp + 223.6444dp + 225.2889dp + 226.9333dp + 228.5778dp + 230.2222dp + 231.8667dp + 233.5111dp + 235.1556dp + 236.8000dp + 238.4444dp + 240.0889dp + 241.7333dp + 243.3778dp + 245.0222dp + 246.6667dp + 248.3111dp + 249.9556dp + 251.6000dp + 253.2444dp + 254.8889dp + 256.5333dp + 258.1778dp + 259.8222dp + 261.4667dp + 263.1111dp + 264.7556dp + 266.4000dp + 268.0444dp + 269.6889dp + 271.3333dp + 272.9778dp + 274.6222dp + 276.2667dp + 277.9111dp + 279.5556dp + 281.2000dp + 282.8444dp + 284.4889dp + 286.1333dp + 287.7778dp + 289.4222dp + 291.0667dp + 292.7111dp + 294.3556dp + 296.0000dp + 297.6444dp + 299.2889dp + 300.9333dp + 302.5778dp + 304.2222dp + 305.8667dp + 307.5111dp + 309.1556dp + 310.8000dp + 312.4444dp + 314.0889dp + 315.7333dp + 317.3778dp + 319.0222dp + 320.6667dp + 322.3111dp + 323.9556dp + 325.6000dp + 327.2444dp + 328.8889dp + 330.5333dp + 332.1778dp + 333.8222dp + 335.4667dp + 337.1111dp + 338.7556dp + 340.4000dp + 342.0444dp + 343.6889dp + 345.3333dp + 346.9778dp + 348.6222dp + 350.2667dp + 351.9111dp + 353.5556dp + 355.2000dp + 356.8444dp + 358.4889dp + 360.1333dp + 361.7778dp + 363.4222dp + 365.0667dp + 366.7111dp + 368.3556dp + 370.0000dp + 371.6444dp + 373.2889dp + 374.9333dp + 376.5778dp + 378.2222dp + 379.8667dp + 381.5111dp + 383.1556dp + 384.8000dp + 386.4444dp + 388.0889dp + 389.7333dp + 391.3778dp + 393.0222dp + 394.6667dp + 396.3111dp + 397.9556dp + 399.6000dp + 401.2444dp + 402.8889dp + 404.5333dp + 406.1778dp + 407.8222dp + 409.4667dp + 411.1111dp + 412.7556dp + 414.4000dp + 416.0444dp + 417.6889dp + 419.3333dp + 420.9778dp + 422.6222dp + 424.2667dp + 425.9111dp + 427.5556dp + 429.2000dp + 430.8444dp + 432.4889dp + 434.1333dp + 435.7778dp + 437.4222dp + 439.0667dp + 440.7111dp + 442.3556dp + 444.0000dp + 445.6444dp + 447.2889dp + 448.9333dp + 450.5778dp + 452.2222dp + 453.8667dp + 455.5111dp + 457.1556dp + 458.8000dp + 460.4444dp + 462.0889dp + 463.7333dp + 465.3778dp + 467.0222dp + 468.6667dp + 470.3111dp + 471.9556dp + 473.6000dp + 475.2444dp + 476.8889dp + 478.5333dp + 480.1778dp + 481.8222dp + 483.4667dp + 485.1111dp + 486.7556dp + 488.4000dp + 490.0444dp + 491.6889dp + 493.3333dp + 494.9778dp + 496.6222dp + 498.2667dp + 499.9111dp + 501.5556dp + 503.2000dp + 504.8444dp + 506.4889dp + 508.1333dp + 509.7778dp + 511.4222dp + 513.0667dp + 514.7111dp + 516.3556dp + 518.0000dp + 519.6444dp + 521.2889dp + 522.9333dp + 524.5778dp + 526.2222dp + 527.8667dp + 529.5111dp + 531.1556dp + 532.8000dp + 534.4444dp + 536.0889dp + 537.7333dp + 539.3778dp + 541.0222dp + 542.6667dp + 544.3111dp + 545.9556dp + 547.6000dp + 549.2444dp + 550.8889dp + 552.5333dp + 554.1778dp + 555.8222dp + 557.4667dp + 559.1111dp + 560.7556dp + 562.4000dp + 564.0444dp + 565.6889dp + 567.3333dp + 568.9778dp + 570.6222dp + 572.2667dp + 573.9111dp + 575.5556dp + 577.2000dp + 578.8444dp + 580.4889dp + 582.1333dp + 583.7778dp + 585.4222dp + 587.0667dp + 588.7111dp + 590.3556dp + 592.0000dp + 600.2222dp + 608.4444dp + 657.7778dp + 674.2222dp + 693.9556dp + 776.1778dp + 822.2222dp + 986.6667dp + 1052.4444dp + 1184.0000dp + 9.8667sp + 11.5111sp + 13.1556sp + 14.8000sp + 16.4444sp + 18.0889sp + 19.7333sp + 21.3778sp + 23.0222sp + 24.6667sp + 26.3111sp + 27.9556sp + 29.6000sp + 31.2444sp + 32.8889sp + 34.5333sp + 36.1778sp + 37.8222sp + 39.4667sp + 41.1111sp + 46.0444sp + 49.3333sp + 52.6222sp + 55.9111sp + 59.2000sp + 62.4889sp + 65.7778sp + 69.0667sp + 78.9333sp + diff --git a/app/src/main/res/values-sw600dp/dimens.xml b/app/src/main/res/values-sw600dp/dimens.xml new file mode 100644 index 0000000..aa7fe0d --- /dev/null +++ b/app/src/main/res/values-sw600dp/dimens.xml @@ -0,0 +1,419 @@ + + + @dimen/dp_15 + -100.0000dp + -50.0000dp + -33.3333dp + -20.0000dp + -16.6667dp + -13.3333dp + -8.3333dp + -3.3333dp + -1.6667dp + 0.0000dp + 0.1667dp + 0.8333dp + 1.6667dp + 2.5000dp + 3.3333dp + 4.1667dp + 5.0000dp + 5.8333dp + 6.6667dp + 7.5000dp + 8.3333dp + 10.0000dp + 11.6667dp + 13.3333dp + 15.0000dp + 16.6667dp + 18.3333dp + 20.0000dp + 21.6667dp + 23.3333dp + 25.0000dp + 26.6667dp + 28.3333dp + 30.0000dp + 31.6667dp + 33.3333dp + 35.0000dp + 36.6667dp + 38.3333dp + 40.0000dp + 41.6667dp + 43.3333dp + 45.0000dp + 46.6667dp + 48.3333dp + 50.0000dp + 51.6667dp + 53.3333dp + 55.0000dp + 56.6667dp + 58.3333dp + 60.0000dp + 61.6667dp + 63.3333dp + 65.0000dp + 66.6667dp + 68.3333dp + 70.0000dp + 71.6667dp + 73.3333dp + 75.0000dp + 76.6667dp + 78.3333dp + 80.0000dp + 81.6667dp + 83.3333dp + 85.0000dp + 86.6667dp + 88.3333dp + 90.0000dp + 91.6667dp + 93.3333dp + 95.0000dp + 96.6667dp + 98.3333dp + 100.0000dp + 101.6667dp + 103.3333dp + 105.0000dp + 106.6667dp + 108.3333dp + 110.0000dp + 111.6667dp + 113.3333dp + 115.0000dp + 116.6667dp + 118.3333dp + 120.0000dp + 121.6667dp + 123.3333dp + 125.0000dp + 126.6667dp + 128.3333dp + 130.0000dp + 131.6667dp + 133.3333dp + 135.0000dp + 136.6667dp + 138.3333dp + 140.0000dp + 141.6667dp + 143.3333dp + 145.0000dp + 146.6667dp + 148.3333dp + 150.0000dp + 151.6667dp + 153.3333dp + 155.0000dp + 156.6667dp + 158.3333dp + 160.0000dp + 161.6667dp + 163.3333dp + 165.0000dp + 166.6667dp + 168.3333dp + 170.0000dp + 171.6667dp + 173.3333dp + 175.0000dp + 176.6667dp + 178.3333dp + 180.0000dp + 181.6667dp + 183.3333dp + 185.0000dp + 186.6667dp + 188.3333dp + 190.0000dp + 191.6667dp + 193.3333dp + 195.0000dp + 196.6667dp + 198.3333dp + 200.0000dp + 201.6667dp + 203.3333dp + 205.0000dp + 206.6667dp + 208.3333dp + 210.0000dp + 211.6667dp + 213.3333dp + 215.0000dp + 216.6667dp + 218.3333dp + 220.0000dp + 221.6667dp + 223.3333dp + 225.0000dp + 226.6667dp + 228.3333dp + 230.0000dp + 231.6667dp + 233.3333dp + 235.0000dp + 236.6667dp + 238.3333dp + 240.0000dp + 241.6667dp + 243.3333dp + 245.0000dp + 246.6667dp + 248.3333dp + 250.0000dp + 251.6667dp + 253.3333dp + 255.0000dp + 256.6667dp + 258.3333dp + 260.0000dp + 261.6667dp + 263.3333dp + 265.0000dp + 266.6667dp + 268.3333dp + 270.0000dp + 271.6667dp + 273.3333dp + 275.0000dp + 276.6667dp + 278.3333dp + 280.0000dp + 281.6667dp + 283.3333dp + 285.0000dp + 286.6667dp + 288.3333dp + 290.0000dp + 291.6667dp + 293.3333dp + 295.0000dp + 296.6667dp + 298.3333dp + 300.0000dp + 301.6667dp + 303.3333dp + 305.0000dp + 306.6667dp + 308.3333dp + 310.0000dp + 311.6667dp + 313.3333dp + 315.0000dp + 316.6667dp + 318.3333dp + 320.0000dp + 321.6667dp + 323.3333dp + 325.0000dp + 326.6667dp + 328.3333dp + 330.0000dp + 331.6667dp + 333.3333dp + 335.0000dp + 336.6667dp + 338.3333dp + 340.0000dp + 341.6667dp + 343.3333dp + 345.0000dp + 346.6667dp + 348.3333dp + 350.0000dp + 351.6667dp + 353.3333dp + 355.0000dp + 356.6667dp + 358.3333dp + 360.0000dp + 361.6667dp + 363.3333dp + 365.0000dp + 366.6667dp + 368.3333dp + 370.0000dp + 371.6667dp + 373.3333dp + 375.0000dp + 376.6667dp + 378.3333dp + 380.0000dp + 381.6667dp + 383.3333dp + 385.0000dp + 386.6667dp + 388.3333dp + 390.0000dp + 391.6667dp + 393.3333dp + 395.0000dp + 396.6667dp + 398.3333dp + 400.0000dp + 401.6667dp + 403.3333dp + 405.0000dp + 406.6667dp + 408.3333dp + 410.0000dp + 411.6667dp + 413.3333dp + 415.0000dp + 416.6667dp + 418.3333dp + 420.0000dp + 421.6667dp + 423.3333dp + 425.0000dp + 426.6667dp + 428.3333dp + 430.0000dp + 431.6667dp + 433.3333dp + 435.0000dp + 436.6667dp + 438.3333dp + 440.0000dp + 441.6667dp + 443.3333dp + 445.0000dp + 446.6667dp + 448.3333dp + 450.0000dp + 451.6667dp + 453.3333dp + 455.0000dp + 456.6667dp + 458.3333dp + 460.0000dp + 461.6667dp + 463.3333dp + 465.0000dp + 466.6667dp + 468.3333dp + 470.0000dp + 471.6667dp + 473.3333dp + 475.0000dp + 476.6667dp + 478.3333dp + 480.0000dp + 481.6667dp + 483.3333dp + 485.0000dp + 486.6667dp + 488.3333dp + 490.0000dp + 491.6667dp + 493.3333dp + 495.0000dp + 496.6667dp + 498.3333dp + 500.0000dp + 501.6667dp + 503.3333dp + 505.0000dp + 506.6667dp + 508.3333dp + 510.0000dp + 511.6667dp + 513.3333dp + 515.0000dp + 516.6667dp + 518.3333dp + 520.0000dp + 521.6667dp + 523.3333dp + 525.0000dp + 526.6667dp + 528.3333dp + 530.0000dp + 531.6667dp + 533.3333dp + 535.0000dp + 536.6667dp + 538.3333dp + 540.0000dp + 541.6667dp + 543.3333dp + 545.0000dp + 546.6667dp + 548.3333dp + 550.0000dp + 551.6667dp + 553.3333dp + 555.0000dp + 556.6667dp + 558.3333dp + 560.0000dp + 561.6667dp + 563.3333dp + 565.0000dp + 566.6667dp + 568.3333dp + 570.0000dp + 571.6667dp + 573.3333dp + 575.0000dp + 576.6667dp + 578.3333dp + 580.0000dp + 581.6667dp + 583.3333dp + 585.0000dp + 586.6667dp + 588.3333dp + 590.0000dp + 591.6667dp + 593.3333dp + 595.0000dp + 596.6667dp + 598.3333dp + 600.0000dp + 608.3333dp + 616.6667dp + 666.6667dp + 683.3333dp + 703.3333dp + 786.6667dp + 833.3333dp + 1000.0000dp + 1066.6667dp + 1200.0000dp + 10.0000sp + 11.6667sp + 13.3333sp + 15.0000sp + 16.6667sp + 18.3333sp + 20.0000sp + 21.6667sp + 23.3333sp + 25.0000sp + 26.6667sp + 28.3333sp + 30.0000sp + 31.6667sp + 33.3333sp + 35.0000sp + 36.6667sp + 38.3333sp + 40.0000sp + 41.6667sp + 46.6667sp + 50.0000sp + 53.3333sp + 56.6667sp + 60.0000sp + 63.3333sp + 66.6667sp + 70.0000sp + 80.0000sp + diff --git a/app/src/main/res/values-sw640dp/dimens.xml b/app/src/main/res/values-sw640dp/dimens.xml new file mode 100644 index 0000000..2ae3b80 --- /dev/null +++ b/app/src/main/res/values-sw640dp/dimens.xml @@ -0,0 +1,419 @@ + + + @dimen/dp_15 + -106.6667dp + -53.3333dp + -35.5556dp + -21.3333dp + -17.7778dp + -14.2222dp + -8.8889dp + -3.5556dp + -1.7778dp + 0.0000dp + 0.1778dp + 0.8889dp + 1.7778dp + 2.6667dp + 3.5556dp + 4.4444dp + 5.3333dp + 6.2222dp + 7.1111dp + 8.0000dp + 8.8889dp + 10.6667dp + 12.4444dp + 14.2222dp + 16.0000dp + 17.7778dp + 19.5556dp + 21.3333dp + 23.1111dp + 24.8889dp + 26.6667dp + 28.4444dp + 30.2222dp + 32.0000dp + 33.7778dp + 35.5556dp + 37.3333dp + 39.1111dp + 40.8889dp + 42.6667dp + 44.4444dp + 46.2222dp + 48.0000dp + 49.7778dp + 51.5556dp + 53.3333dp + 55.1111dp + 56.8889dp + 58.6667dp + 60.4444dp + 62.2222dp + 64.0000dp + 65.7778dp + 67.5556dp + 69.3333dp + 71.1111dp + 72.8889dp + 74.6667dp + 76.4444dp + 78.2222dp + 80.0000dp + 81.7778dp + 83.5556dp + 85.3333dp + 87.1111dp + 88.8889dp + 90.6667dp + 92.4444dp + 94.2222dp + 96.0000dp + 97.7778dp + 99.5556dp + 101.3333dp + 103.1111dp + 104.8889dp + 106.6667dp + 108.4444dp + 110.2222dp + 112.0000dp + 113.7778dp + 115.5556dp + 117.3333dp + 119.1111dp + 120.8889dp + 122.6667dp + 124.4444dp + 126.2222dp + 128.0000dp + 129.7778dp + 131.5556dp + 133.3333dp + 135.1111dp + 136.8889dp + 138.6667dp + 140.4444dp + 142.2222dp + 144.0000dp + 145.7778dp + 147.5556dp + 149.3333dp + 151.1111dp + 152.8889dp + 154.6667dp + 156.4444dp + 158.2222dp + 160.0000dp + 161.7778dp + 163.5556dp + 165.3333dp + 167.1111dp + 168.8889dp + 170.6667dp + 172.4444dp + 174.2222dp + 176.0000dp + 177.7778dp + 179.5556dp + 181.3333dp + 183.1111dp + 184.8889dp + 186.6667dp + 188.4444dp + 190.2222dp + 192.0000dp + 193.7778dp + 195.5556dp + 197.3333dp + 199.1111dp + 200.8889dp + 202.6667dp + 204.4444dp + 206.2222dp + 208.0000dp + 209.7778dp + 211.5556dp + 213.3333dp + 215.1111dp + 216.8889dp + 218.6667dp + 220.4444dp + 222.2222dp + 224.0000dp + 225.7778dp + 227.5556dp + 229.3333dp + 231.1111dp + 232.8889dp + 234.6667dp + 236.4444dp + 238.2222dp + 240.0000dp + 241.7778dp + 243.5556dp + 245.3333dp + 247.1111dp + 248.8889dp + 250.6667dp + 252.4444dp + 254.2222dp + 256.0000dp + 257.7778dp + 259.5556dp + 261.3333dp + 263.1111dp + 264.8889dp + 266.6667dp + 268.4444dp + 270.2222dp + 272.0000dp + 273.7778dp + 275.5556dp + 277.3333dp + 279.1111dp + 280.8889dp + 282.6667dp + 284.4444dp + 286.2222dp + 288.0000dp + 289.7778dp + 291.5556dp + 293.3333dp + 295.1111dp + 296.8889dp + 298.6667dp + 300.4444dp + 302.2222dp + 304.0000dp + 305.7778dp + 307.5556dp + 309.3333dp + 311.1111dp + 312.8889dp + 314.6667dp + 316.4444dp + 318.2222dp + 320.0000dp + 321.7778dp + 323.5556dp + 325.3333dp + 327.1111dp + 328.8889dp + 330.6667dp + 332.4444dp + 334.2222dp + 336.0000dp + 337.7778dp + 339.5556dp + 341.3333dp + 343.1111dp + 344.8889dp + 346.6667dp + 348.4444dp + 350.2222dp + 352.0000dp + 353.7778dp + 355.5556dp + 357.3333dp + 359.1111dp + 360.8889dp + 362.6667dp + 364.4444dp + 366.2222dp + 368.0000dp + 369.7778dp + 371.5556dp + 373.3333dp + 375.1111dp + 376.8889dp + 378.6667dp + 380.4444dp + 382.2222dp + 384.0000dp + 385.7778dp + 387.5556dp + 389.3333dp + 391.1111dp + 392.8889dp + 394.6667dp + 396.4444dp + 398.2222dp + 400.0000dp + 401.7778dp + 403.5556dp + 405.3333dp + 407.1111dp + 408.8889dp + 410.6667dp + 412.4444dp + 414.2222dp + 416.0000dp + 417.7778dp + 419.5556dp + 421.3333dp + 423.1111dp + 424.8889dp + 426.6667dp + 428.4444dp + 430.2222dp + 432.0000dp + 433.7778dp + 435.5556dp + 437.3333dp + 439.1111dp + 440.8889dp + 442.6667dp + 444.4444dp + 446.2222dp + 448.0000dp + 449.7778dp + 451.5556dp + 453.3333dp + 455.1111dp + 456.8889dp + 458.6667dp + 460.4444dp + 462.2222dp + 464.0000dp + 465.7778dp + 467.5556dp + 469.3333dp + 471.1111dp + 472.8889dp + 474.6667dp + 476.4444dp + 478.2222dp + 480.0000dp + 481.7778dp + 483.5556dp + 485.3333dp + 487.1111dp + 488.8889dp + 490.6667dp + 492.4444dp + 494.2222dp + 496.0000dp + 497.7778dp + 499.5556dp + 501.3333dp + 503.1111dp + 504.8889dp + 506.6667dp + 508.4444dp + 510.2222dp + 512.0000dp + 513.7778dp + 515.5556dp + 517.3333dp + 519.1111dp + 520.8889dp + 522.6667dp + 524.4444dp + 526.2222dp + 528.0000dp + 529.7778dp + 531.5556dp + 533.3333dp + 535.1111dp + 536.8889dp + 538.6667dp + 540.4444dp + 542.2222dp + 544.0000dp + 545.7778dp + 547.5556dp + 549.3333dp + 551.1111dp + 552.8889dp + 554.6667dp + 556.4444dp + 558.2222dp + 560.0000dp + 561.7778dp + 563.5556dp + 565.3333dp + 567.1111dp + 568.8889dp + 570.6667dp + 572.4444dp + 574.2222dp + 576.0000dp + 577.7778dp + 579.5556dp + 581.3333dp + 583.1111dp + 584.8889dp + 586.6667dp + 588.4444dp + 590.2222dp + 592.0000dp + 593.7778dp + 595.5556dp + 597.3333dp + 599.1111dp + 600.8889dp + 602.6667dp + 604.4444dp + 606.2222dp + 608.0000dp + 609.7778dp + 611.5556dp + 613.3333dp + 615.1111dp + 616.8889dp + 618.6667dp + 620.4444dp + 622.2222dp + 624.0000dp + 625.7778dp + 627.5556dp + 629.3333dp + 631.1111dp + 632.8889dp + 634.6667dp + 636.4444dp + 638.2222dp + 640.0000dp + 648.8889dp + 657.7778dp + 711.1111dp + 728.8889dp + 750.2222dp + 839.1111dp + 888.8889dp + 1066.6667dp + 1137.7778dp + 1280.0000dp + 10.6667sp + 12.4444sp + 14.2222sp + 16.0000sp + 17.7778sp + 19.5556sp + 21.3333sp + 23.1111sp + 24.8889sp + 26.6667sp + 28.4444sp + 30.2222sp + 32.0000sp + 33.7778sp + 35.5556sp + 37.3333sp + 39.1111sp + 40.8889sp + 42.6667sp + 44.4444sp + 49.7778sp + 53.3333sp + 56.8889sp + 60.4444sp + 64.0000sp + 67.5556sp + 71.1111sp + 74.6667sp + 85.3333sp + diff --git a/app/src/main/res/values-sw662dp/dimens.xml b/app/src/main/res/values-sw662dp/dimens.xml new file mode 100644 index 0000000..bc981ab --- /dev/null +++ b/app/src/main/res/values-sw662dp/dimens.xml @@ -0,0 +1,419 @@ + + + @dimen/dp_15 + -110.3333dp + -55.1667dp + -36.7778dp + -22.0667dp + -18.3889dp + -14.7111dp + -9.1944dp + -3.6778dp + -1.8389dp + 0.0000dp + 0.1839dp + 0.9194dp + 1.8389dp + 2.7583dp + 3.6778dp + 4.5972dp + 5.5167dp + 6.4361dp + 7.3556dp + 8.2750dp + 9.1944dp + 11.0333dp + 12.8722dp + 14.7111dp + 16.5500dp + 18.3889dp + 20.2278dp + 22.0667dp + 23.9056dp + 25.7444dp + 27.5833dp + 29.4222dp + 31.2611dp + 33.1000dp + 34.9389dp + 36.7778dp + 38.6167dp + 40.4556dp + 42.2944dp + 44.1333dp + 45.9722dp + 47.8111dp + 49.6500dp + 51.4889dp + 53.3278dp + 55.1667dp + 57.0056dp + 58.8444dp + 60.6833dp + 62.5222dp + 64.3611dp + 66.2000dp + 68.0389dp + 69.8778dp + 71.7167dp + 73.5556dp + 75.3944dp + 77.2333dp + 79.0722dp + 80.9111dp + 82.7500dp + 84.5889dp + 86.4278dp + 88.2667dp + 90.1056dp + 91.9444dp + 93.7833dp + 95.6222dp + 97.4611dp + 99.3000dp + 101.1389dp + 102.9778dp + 104.8167dp + 106.6556dp + 108.4944dp + 110.3333dp + 112.1722dp + 114.0111dp + 115.8500dp + 117.6889dp + 119.5278dp + 121.3667dp + 123.2056dp + 125.0444dp + 126.8833dp + 128.7222dp + 130.5611dp + 132.4000dp + 134.2389dp + 136.0778dp + 137.9167dp + 139.7556dp + 141.5944dp + 143.4333dp + 145.2722dp + 147.1111dp + 148.9500dp + 150.7889dp + 152.6278dp + 154.4667dp + 156.3056dp + 158.1444dp + 159.9833dp + 161.8222dp + 163.6611dp + 165.5000dp + 167.3389dp + 169.1778dp + 171.0167dp + 172.8556dp + 174.6944dp + 176.5333dp + 178.3722dp + 180.2111dp + 182.0500dp + 183.8889dp + 185.7278dp + 187.5667dp + 189.4056dp + 191.2444dp + 193.0833dp + 194.9222dp + 196.7611dp + 198.6000dp + 200.4389dp + 202.2778dp + 204.1167dp + 205.9556dp + 207.7944dp + 209.6333dp + 211.4722dp + 213.3111dp + 215.1500dp + 216.9889dp + 218.8278dp + 220.6667dp + 222.5056dp + 224.3444dp + 226.1833dp + 228.0222dp + 229.8611dp + 231.7000dp + 233.5389dp + 235.3778dp + 237.2167dp + 239.0556dp + 240.8944dp + 242.7333dp + 244.5722dp + 246.4111dp + 248.2500dp + 250.0889dp + 251.9278dp + 253.7667dp + 255.6056dp + 257.4444dp + 259.2833dp + 261.1222dp + 262.9611dp + 264.8000dp + 266.6389dp + 268.4778dp + 270.3167dp + 272.1556dp + 273.9944dp + 275.8333dp + 277.6722dp + 279.5111dp + 281.3500dp + 283.1889dp + 285.0278dp + 286.8667dp + 288.7056dp + 290.5444dp + 292.3833dp + 294.2222dp + 296.0611dp + 297.9000dp + 299.7389dp + 301.5778dp + 303.4167dp + 305.2556dp + 307.0944dp + 308.9333dp + 310.7722dp + 312.6111dp + 314.4500dp + 316.2889dp + 318.1278dp + 319.9667dp + 321.8056dp + 323.6444dp + 325.4833dp + 327.3222dp + 329.1611dp + 331.0000dp + 332.8389dp + 334.6778dp + 336.5167dp + 338.3556dp + 340.1944dp + 342.0333dp + 343.8722dp + 345.7111dp + 347.5500dp + 349.3889dp + 351.2278dp + 353.0667dp + 354.9056dp + 356.7444dp + 358.5833dp + 360.4222dp + 362.2611dp + 364.1000dp + 365.9389dp + 367.7778dp + 369.6167dp + 371.4556dp + 373.2944dp + 375.1333dp + 376.9722dp + 378.8111dp + 380.6500dp + 382.4889dp + 384.3278dp + 386.1667dp + 388.0056dp + 389.8444dp + 391.6833dp + 393.5222dp + 395.3611dp + 397.2000dp + 399.0389dp + 400.8778dp + 402.7167dp + 404.5556dp + 406.3944dp + 408.2333dp + 410.0722dp + 411.9111dp + 413.7500dp + 415.5889dp + 417.4278dp + 419.2667dp + 421.1056dp + 422.9444dp + 424.7833dp + 426.6222dp + 428.4611dp + 430.3000dp + 432.1389dp + 433.9778dp + 435.8167dp + 437.6556dp + 439.4944dp + 441.3333dp + 443.1722dp + 445.0111dp + 446.8500dp + 448.6889dp + 450.5278dp + 452.3667dp + 454.2056dp + 456.0444dp + 457.8833dp + 459.7222dp + 461.5611dp + 463.4000dp + 465.2389dp + 467.0778dp + 468.9167dp + 470.7556dp + 472.5944dp + 474.4333dp + 476.2722dp + 478.1111dp + 479.9500dp + 481.7889dp + 483.6278dp + 485.4667dp + 487.3056dp + 489.1444dp + 490.9833dp + 492.8222dp + 494.6611dp + 496.5000dp + 498.3389dp + 500.1778dp + 502.0167dp + 503.8556dp + 505.6944dp + 507.5333dp + 509.3722dp + 511.2111dp + 513.0500dp + 514.8889dp + 516.7278dp + 518.5667dp + 520.4056dp + 522.2444dp + 524.0833dp + 525.9222dp + 527.7611dp + 529.6000dp + 531.4389dp + 533.2778dp + 535.1167dp + 536.9556dp + 538.7944dp + 540.6333dp + 542.4722dp + 544.3111dp + 546.1500dp + 547.9889dp + 549.8278dp + 551.6667dp + 553.5056dp + 555.3444dp + 557.1833dp + 559.0222dp + 560.8611dp + 562.7000dp + 564.5389dp + 566.3778dp + 568.2167dp + 570.0556dp + 571.8944dp + 573.7333dp + 575.5722dp + 577.4111dp + 579.2500dp + 581.0889dp + 582.9278dp + 584.7667dp + 586.6056dp + 588.4444dp + 590.2833dp + 592.1222dp + 593.9611dp + 595.8000dp + 597.6389dp + 599.4778dp + 601.3167dp + 603.1556dp + 604.9944dp + 606.8333dp + 608.6722dp + 610.5111dp + 612.3500dp + 614.1889dp + 616.0278dp + 617.8667dp + 619.7056dp + 621.5444dp + 623.3833dp + 625.2222dp + 627.0611dp + 628.9000dp + 630.7389dp + 632.5778dp + 634.4167dp + 636.2556dp + 638.0944dp + 639.9333dp + 641.7722dp + 643.6111dp + 645.4500dp + 647.2889dp + 649.1278dp + 650.9667dp + 652.8056dp + 654.6444dp + 656.4833dp + 658.3222dp + 660.1611dp + 662.0000dp + 671.1944dp + 680.3889dp + 735.5556dp + 753.9444dp + 776.0111dp + 867.9556dp + 919.4444dp + 1103.3333dp + 1176.8889dp + 1324.0000dp + 11.0333sp + 12.8722sp + 14.7111sp + 16.5500sp + 18.3889sp + 20.2278sp + 22.0667sp + 23.9056sp + 25.7444sp + 27.5833sp + 29.4222sp + 31.2611sp + 33.1000sp + 34.9389sp + 36.7778sp + 38.6167sp + 40.4556sp + 42.2944sp + 44.1333sp + 45.9722sp + 51.4889sp + 55.1667sp + 58.8444sp + 62.5222sp + 66.2000sp + 69.8778sp + 73.5556sp + 77.2333sp + 88.2667sp + diff --git a/app/src/main/res/values-sw720dp/dimens.xml b/app/src/main/res/values-sw720dp/dimens.xml new file mode 100644 index 0000000..0c84204 --- /dev/null +++ b/app/src/main/res/values-sw720dp/dimens.xml @@ -0,0 +1,419 @@ + + + @dimen/dp_15 + -120.0000dp + -60.0000dp + -40.0000dp + -24.0000dp + -20.0000dp + -16.0000dp + -10.0000dp + -4.0000dp + -2.0000dp + 0.0000dp + 0.2000dp + 1.0000dp + 2.0000dp + 3.0000dp + 4.0000dp + 5.0000dp + 6.0000dp + 7.0000dp + 8.0000dp + 9.0000dp + 10.0000dp + 12.0000dp + 14.0000dp + 16.0000dp + 18.0000dp + 20.0000dp + 22.0000dp + 24.0000dp + 26.0000dp + 28.0000dp + 30.0000dp + 32.0000dp + 34.0000dp + 36.0000dp + 38.0000dp + 40.0000dp + 42.0000dp + 44.0000dp + 46.0000dp + 48.0000dp + 50.0000dp + 52.0000dp + 54.0000dp + 56.0000dp + 58.0000dp + 60.0000dp + 62.0000dp + 64.0000dp + 66.0000dp + 68.0000dp + 70.0000dp + 72.0000dp + 74.0000dp + 76.0000dp + 78.0000dp + 80.0000dp + 82.0000dp + 84.0000dp + 86.0000dp + 88.0000dp + 90.0000dp + 92.0000dp + 94.0000dp + 96.0000dp + 98.0000dp + 100.0000dp + 102.0000dp + 104.0000dp + 106.0000dp + 108.0000dp + 110.0000dp + 112.0000dp + 114.0000dp + 116.0000dp + 118.0000dp + 120.0000dp + 122.0000dp + 124.0000dp + 126.0000dp + 128.0000dp + 130.0000dp + 132.0000dp + 134.0000dp + 136.0000dp + 138.0000dp + 140.0000dp + 142.0000dp + 144.0000dp + 146.0000dp + 148.0000dp + 150.0000dp + 152.0000dp + 154.0000dp + 156.0000dp + 158.0000dp + 160.0000dp + 162.0000dp + 164.0000dp + 166.0000dp + 168.0000dp + 170.0000dp + 172.0000dp + 174.0000dp + 176.0000dp + 178.0000dp + 180.0000dp + 182.0000dp + 184.0000dp + 186.0000dp + 188.0000dp + 190.0000dp + 192.0000dp + 194.0000dp + 196.0000dp + 198.0000dp + 200.0000dp + 202.0000dp + 204.0000dp + 206.0000dp + 208.0000dp + 210.0000dp + 212.0000dp + 214.0000dp + 216.0000dp + 218.0000dp + 220.0000dp + 222.0000dp + 224.0000dp + 226.0000dp + 228.0000dp + 230.0000dp + 232.0000dp + 234.0000dp + 236.0000dp + 238.0000dp + 240.0000dp + 242.0000dp + 244.0000dp + 246.0000dp + 248.0000dp + 250.0000dp + 252.0000dp + 254.0000dp + 256.0000dp + 258.0000dp + 260.0000dp + 262.0000dp + 264.0000dp + 266.0000dp + 268.0000dp + 270.0000dp + 272.0000dp + 274.0000dp + 276.0000dp + 278.0000dp + 280.0000dp + 282.0000dp + 284.0000dp + 286.0000dp + 288.0000dp + 290.0000dp + 292.0000dp + 294.0000dp + 296.0000dp + 298.0000dp + 300.0000dp + 302.0000dp + 304.0000dp + 306.0000dp + 308.0000dp + 310.0000dp + 312.0000dp + 314.0000dp + 316.0000dp + 318.0000dp + 320.0000dp + 322.0000dp + 324.0000dp + 326.0000dp + 328.0000dp + 330.0000dp + 332.0000dp + 334.0000dp + 336.0000dp + 338.0000dp + 340.0000dp + 342.0000dp + 344.0000dp + 346.0000dp + 348.0000dp + 350.0000dp + 352.0000dp + 354.0000dp + 356.0000dp + 358.0000dp + 360.0000dp + 362.0000dp + 364.0000dp + 366.0000dp + 368.0000dp + 370.0000dp + 372.0000dp + 374.0000dp + 376.0000dp + 378.0000dp + 380.0000dp + 382.0000dp + 384.0000dp + 386.0000dp + 388.0000dp + 390.0000dp + 392.0000dp + 394.0000dp + 396.0000dp + 398.0000dp + 400.0000dp + 402.0000dp + 404.0000dp + 406.0000dp + 408.0000dp + 410.0000dp + 412.0000dp + 414.0000dp + 416.0000dp + 418.0000dp + 420.0000dp + 422.0000dp + 424.0000dp + 426.0000dp + 428.0000dp + 430.0000dp + 432.0000dp + 434.0000dp + 436.0000dp + 438.0000dp + 440.0000dp + 442.0000dp + 444.0000dp + 446.0000dp + 448.0000dp + 450.0000dp + 452.0000dp + 454.0000dp + 456.0000dp + 458.0000dp + 460.0000dp + 462.0000dp + 464.0000dp + 466.0000dp + 468.0000dp + 470.0000dp + 472.0000dp + 474.0000dp + 476.0000dp + 478.0000dp + 480.0000dp + 482.0000dp + 484.0000dp + 486.0000dp + 488.0000dp + 490.0000dp + 492.0000dp + 494.0000dp + 496.0000dp + 498.0000dp + 500.0000dp + 502.0000dp + 504.0000dp + 506.0000dp + 508.0000dp + 510.0000dp + 512.0000dp + 514.0000dp + 516.0000dp + 518.0000dp + 520.0000dp + 522.0000dp + 524.0000dp + 526.0000dp + 528.0000dp + 530.0000dp + 532.0000dp + 534.0000dp + 536.0000dp + 538.0000dp + 540.0000dp + 542.0000dp + 544.0000dp + 546.0000dp + 548.0000dp + 550.0000dp + 552.0000dp + 554.0000dp + 556.0000dp + 558.0000dp + 560.0000dp + 562.0000dp + 564.0000dp + 566.0000dp + 568.0000dp + 570.0000dp + 572.0000dp + 574.0000dp + 576.0000dp + 578.0000dp + 580.0000dp + 582.0000dp + 584.0000dp + 586.0000dp + 588.0000dp + 590.0000dp + 592.0000dp + 594.0000dp + 596.0000dp + 598.0000dp + 600.0000dp + 602.0000dp + 604.0000dp + 606.0000dp + 608.0000dp + 610.0000dp + 612.0000dp + 614.0000dp + 616.0000dp + 618.0000dp + 620.0000dp + 622.0000dp + 624.0000dp + 626.0000dp + 628.0000dp + 630.0000dp + 632.0000dp + 634.0000dp + 636.0000dp + 638.0000dp + 640.0000dp + 642.0000dp + 644.0000dp + 646.0000dp + 648.0000dp + 650.0000dp + 652.0000dp + 654.0000dp + 656.0000dp + 658.0000dp + 660.0000dp + 662.0000dp + 664.0000dp + 666.0000dp + 668.0000dp + 670.0000dp + 672.0000dp + 674.0000dp + 676.0000dp + 678.0000dp + 680.0000dp + 682.0000dp + 684.0000dp + 686.0000dp + 688.0000dp + 690.0000dp + 692.0000dp + 694.0000dp + 696.0000dp + 698.0000dp + 700.0000dp + 702.0000dp + 704.0000dp + 706.0000dp + 708.0000dp + 710.0000dp + 712.0000dp + 714.0000dp + 716.0000dp + 718.0000dp + 720.0000dp + 730.0000dp + 740.0000dp + 800.0000dp + 820.0000dp + 844.0000dp + 944.0000dp + 1000.0000dp + 1200.0000dp + 1280.0000dp + 1440.0000dp + 12.0000sp + 14.0000sp + 16.0000sp + 18.0000sp + 20.0000sp + 22.0000sp + 24.0000sp + 26.0000sp + 28.0000sp + 30.0000sp + 32.0000sp + 34.0000sp + 36.0000sp + 38.0000sp + 40.0000sp + 42.0000sp + 44.0000sp + 46.0000sp + 48.0000sp + 50.0000sp + 56.0000sp + 60.0000sp + 64.0000sp + 68.0000sp + 72.0000sp + 76.0000sp + 80.0000sp + 84.0000sp + 96.0000sp + diff --git a/app/src/main/res/values-sw768dp/dimens.xml b/app/src/main/res/values-sw768dp/dimens.xml new file mode 100644 index 0000000..cf6fa3b --- /dev/null +++ b/app/src/main/res/values-sw768dp/dimens.xml @@ -0,0 +1,419 @@ + + + @dimen/dp_15 + -128.0000dp + -64.0000dp + -42.6667dp + -25.6000dp + -21.3333dp + -17.0667dp + -10.6667dp + -4.2667dp + -2.1333dp + 0.0000dp + 0.2133dp + 1.0667dp + 2.1333dp + 3.2000dp + 4.2667dp + 5.3333dp + 6.4000dp + 7.4667dp + 8.5333dp + 9.6000dp + 10.6667dp + 12.8000dp + 14.9333dp + 17.0667dp + 19.2000dp + 21.3333dp + 23.4667dp + 25.6000dp + 27.7333dp + 29.8667dp + 32.0000dp + 34.1333dp + 36.2667dp + 38.4000dp + 40.5333dp + 42.6667dp + 44.8000dp + 46.9333dp + 49.0667dp + 51.2000dp + 53.3333dp + 55.4667dp + 57.6000dp + 59.7333dp + 61.8667dp + 64.0000dp + 66.1333dp + 68.2667dp + 70.4000dp + 72.5333dp + 74.6667dp + 76.8000dp + 78.9333dp + 81.0667dp + 83.2000dp + 85.3333dp + 87.4667dp + 89.6000dp + 91.7333dp + 93.8667dp + 96.0000dp + 98.1333dp + 100.2667dp + 102.4000dp + 104.5333dp + 106.6667dp + 108.8000dp + 110.9333dp + 113.0667dp + 115.2000dp + 117.3333dp + 119.4667dp + 121.6000dp + 123.7333dp + 125.8667dp + 128.0000dp + 130.1333dp + 132.2667dp + 134.4000dp + 136.5333dp + 138.6667dp + 140.8000dp + 142.9333dp + 145.0667dp + 147.2000dp + 149.3333dp + 151.4667dp + 153.6000dp + 155.7333dp + 157.8667dp + 160.0000dp + 162.1333dp + 164.2667dp + 166.4000dp + 168.5333dp + 170.6667dp + 172.8000dp + 174.9333dp + 177.0667dp + 179.2000dp + 181.3333dp + 183.4667dp + 185.6000dp + 187.7333dp + 189.8667dp + 192.0000dp + 194.1333dp + 196.2667dp + 198.4000dp + 200.5333dp + 202.6667dp + 204.8000dp + 206.9333dp + 209.0667dp + 211.2000dp + 213.3333dp + 215.4667dp + 217.6000dp + 219.7333dp + 221.8667dp + 224.0000dp + 226.1333dp + 228.2667dp + 230.4000dp + 232.5333dp + 234.6667dp + 236.8000dp + 238.9333dp + 241.0667dp + 243.2000dp + 245.3333dp + 247.4667dp + 249.6000dp + 251.7333dp + 253.8667dp + 256.0000dp + 258.1333dp + 260.2667dp + 262.4000dp + 264.5333dp + 266.6667dp + 268.8000dp + 270.9333dp + 273.0667dp + 275.2000dp + 277.3333dp + 279.4667dp + 281.6000dp + 283.7333dp + 285.8667dp + 288.0000dp + 290.1333dp + 292.2667dp + 294.4000dp + 296.5333dp + 298.6667dp + 300.8000dp + 302.9333dp + 305.0667dp + 307.2000dp + 309.3333dp + 311.4667dp + 313.6000dp + 315.7333dp + 317.8667dp + 320.0000dp + 322.1333dp + 324.2667dp + 326.4000dp + 328.5333dp + 330.6667dp + 332.8000dp + 334.9333dp + 337.0667dp + 339.2000dp + 341.3333dp + 343.4667dp + 345.6000dp + 347.7333dp + 349.8667dp + 352.0000dp + 354.1333dp + 356.2667dp + 358.4000dp + 360.5333dp + 362.6667dp + 364.8000dp + 366.9333dp + 369.0667dp + 371.2000dp + 373.3333dp + 375.4667dp + 377.6000dp + 379.7333dp + 381.8667dp + 384.0000dp + 386.1333dp + 388.2667dp + 390.4000dp + 392.5333dp + 394.6667dp + 396.8000dp + 398.9333dp + 401.0667dp + 403.2000dp + 405.3333dp + 407.4667dp + 409.6000dp + 411.7333dp + 413.8667dp + 416.0000dp + 418.1333dp + 420.2667dp + 422.4000dp + 424.5333dp + 426.6667dp + 428.8000dp + 430.9333dp + 433.0667dp + 435.2000dp + 437.3333dp + 439.4667dp + 441.6000dp + 443.7333dp + 445.8667dp + 448.0000dp + 450.1333dp + 452.2667dp + 454.4000dp + 456.5333dp + 458.6667dp + 460.8000dp + 462.9333dp + 465.0667dp + 467.2000dp + 469.3333dp + 471.4667dp + 473.6000dp + 475.7333dp + 477.8667dp + 480.0000dp + 482.1333dp + 484.2667dp + 486.4000dp + 488.5333dp + 490.6667dp + 492.8000dp + 494.9333dp + 497.0667dp + 499.2000dp + 501.3333dp + 503.4667dp + 505.6000dp + 507.7333dp + 509.8667dp + 512.0000dp + 514.1333dp + 516.2667dp + 518.4000dp + 520.5333dp + 522.6667dp + 524.8000dp + 526.9333dp + 529.0667dp + 531.2000dp + 533.3333dp + 535.4667dp + 537.6000dp + 539.7333dp + 541.8667dp + 544.0000dp + 546.1333dp + 548.2667dp + 550.4000dp + 552.5333dp + 554.6667dp + 556.8000dp + 558.9333dp + 561.0667dp + 563.2000dp + 565.3333dp + 567.4667dp + 569.6000dp + 571.7333dp + 573.8667dp + 576.0000dp + 578.1333dp + 580.2667dp + 582.4000dp + 584.5333dp + 586.6667dp + 588.8000dp + 590.9333dp + 593.0667dp + 595.2000dp + 597.3333dp + 599.4667dp + 601.6000dp + 603.7333dp + 605.8667dp + 608.0000dp + 610.1333dp + 612.2667dp + 614.4000dp + 616.5333dp + 618.6667dp + 620.8000dp + 622.9333dp + 625.0667dp + 627.2000dp + 629.3333dp + 631.4667dp + 633.6000dp + 635.7333dp + 637.8667dp + 640.0000dp + 642.1333dp + 644.2667dp + 646.4000dp + 648.5333dp + 650.6667dp + 652.8000dp + 654.9333dp + 657.0667dp + 659.2000dp + 661.3333dp + 663.4667dp + 665.6000dp + 667.7333dp + 669.8667dp + 672.0000dp + 674.1333dp + 676.2667dp + 678.4000dp + 680.5333dp + 682.6667dp + 684.8000dp + 686.9333dp + 689.0667dp + 691.2000dp + 693.3333dp + 695.4667dp + 697.6000dp + 699.7333dp + 701.8667dp + 704.0000dp + 706.1333dp + 708.2667dp + 710.4000dp + 712.5333dp + 714.6667dp + 716.8000dp + 718.9333dp + 721.0667dp + 723.2000dp + 725.3333dp + 727.4667dp + 729.6000dp + 731.7333dp + 733.8667dp + 736.0000dp + 738.1333dp + 740.2667dp + 742.4000dp + 744.5333dp + 746.6667dp + 748.8000dp + 750.9333dp + 753.0667dp + 755.2000dp + 757.3333dp + 759.4667dp + 761.6000dp + 763.7333dp + 765.8667dp + 768.0000dp + 778.6667dp + 789.3333dp + 853.3333dp + 874.6667dp + 900.2667dp + 1006.9333dp + 1066.6667dp + 1280.0000dp + 1365.3333dp + 1536.0000dp + 12.8000sp + 14.9333sp + 17.0667sp + 19.2000sp + 21.3333sp + 23.4667sp + 25.6000sp + 27.7333sp + 29.8667sp + 32.0000sp + 34.1333sp + 36.2667sp + 38.4000sp + 40.5333sp + 42.6667sp + 44.8000sp + 46.9333sp + 49.0667sp + 51.2000sp + 53.3333sp + 59.7333sp + 64.0000sp + 68.2667sp + 72.5333sp + 76.8000sp + 81.0667sp + 85.3333sp + 89.6000sp + 102.4000sp + diff --git a/app/src/main/res/values-sw800dp/dimens.xml b/app/src/main/res/values-sw800dp/dimens.xml new file mode 100644 index 0000000..84c7673 --- /dev/null +++ b/app/src/main/res/values-sw800dp/dimens.xml @@ -0,0 +1,419 @@ + + + @dimen/dp_15 + -133.3333dp + -66.6667dp + -44.4444dp + -26.6667dp + -22.2222dp + -17.7778dp + -11.1111dp + -4.4444dp + -2.2222dp + 0.0000dp + 0.2222dp + 1.1111dp + 2.2222dp + 3.3333dp + 4.4444dp + 5.5556dp + 6.6667dp + 7.7778dp + 8.8889dp + 10.0000dp + 11.1111dp + 13.3333dp + 15.5556dp + 17.7778dp + 20.0000dp + 22.2222dp + 24.4444dp + 26.6667dp + 28.8889dp + 31.1111dp + 33.3333dp + 35.5556dp + 37.7778dp + 40.0000dp + 42.2222dp + 44.4444dp + 46.6667dp + 48.8889dp + 51.1111dp + 53.3333dp + 55.5556dp + 57.7778dp + 60.0000dp + 62.2222dp + 64.4444dp + 66.6667dp + 68.8889dp + 71.1111dp + 73.3333dp + 75.5556dp + 77.7778dp + 80.0000dp + 82.2222dp + 84.4444dp + 86.6667dp + 88.8889dp + 91.1111dp + 93.3333dp + 95.5556dp + 97.7778dp + 100.0000dp + 102.2222dp + 104.4444dp + 106.6667dp + 108.8889dp + 111.1111dp + 113.3333dp + 115.5556dp + 117.7778dp + 120.0000dp + 122.2222dp + 124.4444dp + 126.6667dp + 128.8889dp + 131.1111dp + 133.3333dp + 135.5556dp + 137.7778dp + 140.0000dp + 142.2222dp + 144.4444dp + 146.6667dp + 148.8889dp + 151.1111dp + 153.3333dp + 155.5556dp + 157.7778dp + 160.0000dp + 162.2222dp + 164.4444dp + 166.6667dp + 168.8889dp + 171.1111dp + 173.3333dp + 175.5556dp + 177.7778dp + 180.0000dp + 182.2222dp + 184.4444dp + 186.6667dp + 188.8889dp + 191.1111dp + 193.3333dp + 195.5556dp + 197.7778dp + 200.0000dp + 202.2222dp + 204.4444dp + 206.6667dp + 208.8889dp + 211.1111dp + 213.3333dp + 215.5556dp + 217.7778dp + 220.0000dp + 222.2222dp + 224.4444dp + 226.6667dp + 228.8889dp + 231.1111dp + 233.3333dp + 235.5556dp + 237.7778dp + 240.0000dp + 242.2222dp + 244.4444dp + 246.6667dp + 248.8889dp + 251.1111dp + 253.3333dp + 255.5556dp + 257.7778dp + 260.0000dp + 262.2222dp + 264.4444dp + 266.6667dp + 268.8889dp + 271.1111dp + 273.3333dp + 275.5556dp + 277.7778dp + 280.0000dp + 282.2222dp + 284.4444dp + 286.6667dp + 288.8889dp + 291.1111dp + 293.3333dp + 295.5556dp + 297.7778dp + 300.0000dp + 302.2222dp + 304.4444dp + 306.6667dp + 308.8889dp + 311.1111dp + 313.3333dp + 315.5556dp + 317.7778dp + 320.0000dp + 322.2222dp + 324.4444dp + 326.6667dp + 328.8889dp + 331.1111dp + 333.3333dp + 335.5556dp + 337.7778dp + 340.0000dp + 342.2222dp + 344.4444dp + 346.6667dp + 348.8889dp + 351.1111dp + 353.3333dp + 355.5556dp + 357.7778dp + 360.0000dp + 362.2222dp + 364.4444dp + 366.6667dp + 368.8889dp + 371.1111dp + 373.3333dp + 375.5556dp + 377.7778dp + 380.0000dp + 382.2222dp + 384.4444dp + 386.6667dp + 388.8889dp + 391.1111dp + 393.3333dp + 395.5556dp + 397.7778dp + 400.0000dp + 402.2222dp + 404.4444dp + 406.6667dp + 408.8889dp + 411.1111dp + 413.3333dp + 415.5556dp + 417.7778dp + 420.0000dp + 422.2222dp + 424.4444dp + 426.6667dp + 428.8889dp + 431.1111dp + 433.3333dp + 435.5556dp + 437.7778dp + 440.0000dp + 442.2222dp + 444.4444dp + 446.6667dp + 448.8889dp + 451.1111dp + 453.3333dp + 455.5556dp + 457.7778dp + 460.0000dp + 462.2222dp + 464.4444dp + 466.6667dp + 468.8889dp + 471.1111dp + 473.3333dp + 475.5556dp + 477.7778dp + 480.0000dp + 482.2222dp + 484.4444dp + 486.6667dp + 488.8889dp + 491.1111dp + 493.3333dp + 495.5556dp + 497.7778dp + 500.0000dp + 502.2222dp + 504.4444dp + 506.6667dp + 508.8889dp + 511.1111dp + 513.3333dp + 515.5556dp + 517.7778dp + 520.0000dp + 522.2222dp + 524.4444dp + 526.6667dp + 528.8889dp + 531.1111dp + 533.3333dp + 535.5556dp + 537.7778dp + 540.0000dp + 542.2222dp + 544.4444dp + 546.6667dp + 548.8889dp + 551.1111dp + 553.3333dp + 555.5556dp + 557.7778dp + 560.0000dp + 562.2222dp + 564.4444dp + 566.6667dp + 568.8889dp + 571.1111dp + 573.3333dp + 575.5556dp + 577.7778dp + 580.0000dp + 582.2222dp + 584.4444dp + 586.6667dp + 588.8889dp + 591.1111dp + 593.3333dp + 595.5556dp + 597.7778dp + 600.0000dp + 602.2222dp + 604.4444dp + 606.6667dp + 608.8889dp + 611.1111dp + 613.3333dp + 615.5556dp + 617.7778dp + 620.0000dp + 622.2222dp + 624.4444dp + 626.6667dp + 628.8889dp + 631.1111dp + 633.3333dp + 635.5556dp + 637.7778dp + 640.0000dp + 642.2222dp + 644.4444dp + 646.6667dp + 648.8889dp + 651.1111dp + 653.3333dp + 655.5556dp + 657.7778dp + 660.0000dp + 662.2222dp + 664.4444dp + 666.6667dp + 668.8889dp + 671.1111dp + 673.3333dp + 675.5556dp + 677.7778dp + 680.0000dp + 682.2222dp + 684.4444dp + 686.6667dp + 688.8889dp + 691.1111dp + 693.3333dp + 695.5556dp + 697.7778dp + 700.0000dp + 702.2222dp + 704.4444dp + 706.6667dp + 708.8889dp + 711.1111dp + 713.3333dp + 715.5556dp + 717.7778dp + 720.0000dp + 722.2222dp + 724.4444dp + 726.6667dp + 728.8889dp + 731.1111dp + 733.3333dp + 735.5556dp + 737.7778dp + 740.0000dp + 742.2222dp + 744.4444dp + 746.6667dp + 748.8889dp + 751.1111dp + 753.3333dp + 755.5556dp + 757.7778dp + 760.0000dp + 762.2222dp + 764.4444dp + 766.6667dp + 768.8889dp + 771.1111dp + 773.3333dp + 775.5556dp + 777.7778dp + 780.0000dp + 782.2222dp + 784.4444dp + 786.6667dp + 788.8889dp + 791.1111dp + 793.3333dp + 795.5556dp + 797.7778dp + 800.0000dp + 811.1111dp + 822.2222dp + 888.8889dp + 911.1111dp + 937.7778dp + 1048.8889dp + 1111.1111dp + 1333.3333dp + 1422.2222dp + 1600.0000dp + 13.3333sp + 15.5556sp + 17.7778sp + 20.0000sp + 22.2222sp + 24.4444sp + 26.6667sp + 28.8889sp + 31.1111sp + 33.3333sp + 35.5556sp + 37.7778sp + 40.0000sp + 42.2222sp + 44.4444sp + 46.6667sp + 48.8889sp + 51.1111sp + 53.3333sp + 55.5556sp + 62.2222sp + 66.6667sp + 71.1111sp + 75.5556sp + 80.0000sp + 84.4444sp + 88.8889sp + 93.3333sp + 106.6667sp + diff --git a/app/src/main/res/values-sw811dp/dimens.xml b/app/src/main/res/values-sw811dp/dimens.xml new file mode 100644 index 0000000..2efc0dc --- /dev/null +++ b/app/src/main/res/values-sw811dp/dimens.xml @@ -0,0 +1,419 @@ + + + @dimen/dp_15 + -135.1667dp + -67.5833dp + -45.0556dp + -27.0333dp + -22.5278dp + -18.0222dp + -11.2639dp + -4.5056dp + -2.2528dp + 0.0000dp + 0.2253dp + 1.1264dp + 2.2528dp + 3.3792dp + 4.5056dp + 5.6319dp + 6.7583dp + 7.8847dp + 9.0111dp + 10.1375dp + 11.2639dp + 13.5167dp + 15.7694dp + 18.0222dp + 20.2750dp + 22.5278dp + 24.7806dp + 27.0333dp + 29.2861dp + 31.5389dp + 33.7917dp + 36.0444dp + 38.2972dp + 40.5500dp + 42.8028dp + 45.0556dp + 47.3083dp + 49.5611dp + 51.8139dp + 54.0667dp + 56.3194dp + 58.5722dp + 60.8250dp + 63.0778dp + 65.3306dp + 67.5833dp + 69.8361dp + 72.0889dp + 74.3417dp + 76.5944dp + 78.8472dp + 81.1000dp + 83.3528dp + 85.6056dp + 87.8583dp + 90.1111dp + 92.3639dp + 94.6167dp + 96.8694dp + 99.1222dp + 101.3750dp + 103.6278dp + 105.8806dp + 108.1333dp + 110.3861dp + 112.6389dp + 114.8917dp + 117.1444dp + 119.3972dp + 121.6500dp + 123.9028dp + 126.1556dp + 128.4083dp + 130.6611dp + 132.9139dp + 135.1667dp + 137.4194dp + 139.6722dp + 141.9250dp + 144.1778dp + 146.4306dp + 148.6833dp + 150.9361dp + 153.1889dp + 155.4417dp + 157.6944dp + 159.9472dp + 162.2000dp + 164.4528dp + 166.7056dp + 168.9583dp + 171.2111dp + 173.4639dp + 175.7167dp + 177.9694dp + 180.2222dp + 182.4750dp + 184.7278dp + 186.9806dp + 189.2333dp + 191.4861dp + 193.7389dp + 195.9917dp + 198.2444dp + 200.4972dp + 202.7500dp + 205.0028dp + 207.2556dp + 209.5083dp + 211.7611dp + 214.0139dp + 216.2667dp + 218.5194dp + 220.7722dp + 223.0250dp + 225.2778dp + 227.5306dp + 229.7833dp + 232.0361dp + 234.2889dp + 236.5417dp + 238.7944dp + 241.0472dp + 243.3000dp + 245.5528dp + 247.8056dp + 250.0583dp + 252.3111dp + 254.5639dp + 256.8167dp + 259.0694dp + 261.3222dp + 263.5750dp + 265.8278dp + 268.0806dp + 270.3333dp + 272.5861dp + 274.8389dp + 277.0917dp + 279.3444dp + 281.5972dp + 283.8500dp + 286.1028dp + 288.3556dp + 290.6083dp + 292.8611dp + 295.1139dp + 297.3667dp + 299.6194dp + 301.8722dp + 304.1250dp + 306.3778dp + 308.6306dp + 310.8833dp + 313.1361dp + 315.3889dp + 317.6417dp + 319.8944dp + 322.1472dp + 324.4000dp + 326.6528dp + 328.9056dp + 331.1583dp + 333.4111dp + 335.6639dp + 337.9167dp + 340.1694dp + 342.4222dp + 344.6750dp + 346.9278dp + 349.1806dp + 351.4333dp + 353.6861dp + 355.9389dp + 358.1917dp + 360.4444dp + 362.6972dp + 364.9500dp + 367.2028dp + 369.4556dp + 371.7083dp + 373.9611dp + 376.2139dp + 378.4667dp + 380.7194dp + 382.9722dp + 385.2250dp + 387.4778dp + 389.7306dp + 391.9833dp + 394.2361dp + 396.4889dp + 398.7417dp + 400.9944dp + 403.2472dp + 405.5000dp + 407.7528dp + 410.0056dp + 412.2583dp + 414.5111dp + 416.7639dp + 419.0167dp + 421.2694dp + 423.5222dp + 425.7750dp + 428.0278dp + 430.2806dp + 432.5333dp + 434.7861dp + 437.0389dp + 439.2917dp + 441.5444dp + 443.7972dp + 446.0500dp + 448.3028dp + 450.5556dp + 452.8083dp + 455.0611dp + 457.3139dp + 459.5667dp + 461.8194dp + 464.0722dp + 466.3250dp + 468.5778dp + 470.8306dp + 473.0833dp + 475.3361dp + 477.5889dp + 479.8417dp + 482.0944dp + 484.3472dp + 486.6000dp + 488.8528dp + 491.1056dp + 493.3583dp + 495.6111dp + 497.8639dp + 500.1167dp + 502.3694dp + 504.6222dp + 506.8750dp + 509.1278dp + 511.3806dp + 513.6333dp + 515.8861dp + 518.1389dp + 520.3917dp + 522.6444dp + 524.8972dp + 527.1500dp + 529.4028dp + 531.6556dp + 533.9083dp + 536.1611dp + 538.4139dp + 540.6667dp + 542.9194dp + 545.1722dp + 547.4250dp + 549.6778dp + 551.9306dp + 554.1833dp + 556.4361dp + 558.6889dp + 560.9417dp + 563.1944dp + 565.4472dp + 567.7000dp + 569.9528dp + 572.2056dp + 574.4583dp + 576.7111dp + 578.9639dp + 581.2167dp + 583.4694dp + 585.7222dp + 587.9750dp + 590.2278dp + 592.4806dp + 594.7333dp + 596.9861dp + 599.2389dp + 601.4917dp + 603.7444dp + 605.9972dp + 608.2500dp + 610.5028dp + 612.7556dp + 615.0083dp + 617.2611dp + 619.5139dp + 621.7667dp + 624.0194dp + 626.2722dp + 628.5250dp + 630.7778dp + 633.0306dp + 635.2833dp + 637.5361dp + 639.7889dp + 642.0417dp + 644.2944dp + 646.5472dp + 648.8000dp + 651.0528dp + 653.3056dp + 655.5583dp + 657.8111dp + 660.0639dp + 662.3167dp + 664.5694dp + 666.8222dp + 669.0750dp + 671.3278dp + 673.5806dp + 675.8333dp + 678.0861dp + 680.3389dp + 682.5917dp + 684.8444dp + 687.0972dp + 689.3500dp + 691.6028dp + 693.8556dp + 696.1083dp + 698.3611dp + 700.6139dp + 702.8667dp + 705.1194dp + 707.3722dp + 709.6250dp + 711.8778dp + 714.1306dp + 716.3833dp + 718.6361dp + 720.8889dp + 723.1417dp + 725.3944dp + 727.6472dp + 729.9000dp + 732.1528dp + 734.4056dp + 736.6583dp + 738.9111dp + 741.1639dp + 743.4167dp + 745.6694dp + 747.9222dp + 750.1750dp + 752.4278dp + 754.6806dp + 756.9333dp + 759.1861dp + 761.4389dp + 763.6917dp + 765.9444dp + 768.1972dp + 770.4500dp + 772.7028dp + 774.9556dp + 777.2083dp + 779.4611dp + 781.7139dp + 783.9667dp + 786.2194dp + 788.4722dp + 790.7250dp + 792.9778dp + 795.2306dp + 797.4833dp + 799.7361dp + 801.9889dp + 804.2417dp + 806.4944dp + 808.7472dp + 811.0000dp + 822.2639dp + 833.5278dp + 901.1111dp + 923.6389dp + 950.6722dp + 1063.3111dp + 1126.3889dp + 1351.6667dp + 1441.7778dp + 1622.0000dp + 13.5167sp + 15.7694sp + 18.0222sp + 20.2750sp + 22.5278sp + 24.7806sp + 27.0333sp + 29.2861sp + 31.5389sp + 33.7917sp + 36.0444sp + 38.2972sp + 40.5500sp + 42.8028sp + 45.0556sp + 47.3083sp + 49.5611sp + 51.8139sp + 54.0667sp + 56.3194sp + 63.0778sp + 67.5833sp + 72.0889sp + 76.5944sp + 81.1000sp + 85.6056sp + 90.1111sp + 94.6167sp + 108.1333sp + diff --git a/app/src/main/res/values-sw820dp/dimens.xml b/app/src/main/res/values-sw820dp/dimens.xml new file mode 100644 index 0000000..e1e21b6 --- /dev/null +++ b/app/src/main/res/values-sw820dp/dimens.xml @@ -0,0 +1,419 @@ + + + @dimen/dp_15 + -136.6667dp + -68.3333dp + -45.5556dp + -27.3333dp + -22.7778dp + -18.2222dp + -11.3889dp + -4.5556dp + -2.2778dp + 0.0000dp + 0.2278dp + 1.1389dp + 2.2778dp + 3.4167dp + 4.5556dp + 5.6944dp + 6.8333dp + 7.9722dp + 9.1111dp + 10.2500dp + 11.3889dp + 13.6667dp + 15.9444dp + 18.2222dp + 20.5000dp + 22.7778dp + 25.0556dp + 27.3333dp + 29.6111dp + 31.8889dp + 34.1667dp + 36.4444dp + 38.7222dp + 41.0000dp + 43.2778dp + 45.5556dp + 47.8333dp + 50.1111dp + 52.3889dp + 54.6667dp + 56.9444dp + 59.2222dp + 61.5000dp + 63.7778dp + 66.0556dp + 68.3333dp + 70.6111dp + 72.8889dp + 75.1667dp + 77.4444dp + 79.7222dp + 82.0000dp + 84.2778dp + 86.5556dp + 88.8333dp + 91.1111dp + 93.3889dp + 95.6667dp + 97.9444dp + 100.2222dp + 102.5000dp + 104.7778dp + 107.0556dp + 109.3333dp + 111.6111dp + 113.8889dp + 116.1667dp + 118.4444dp + 120.7222dp + 123.0000dp + 125.2778dp + 127.5556dp + 129.8333dp + 132.1111dp + 134.3889dp + 136.6667dp + 138.9444dp + 141.2222dp + 143.5000dp + 145.7778dp + 148.0556dp + 150.3333dp + 152.6111dp + 154.8889dp + 157.1667dp + 159.4444dp + 161.7222dp + 164.0000dp + 166.2778dp + 168.5556dp + 170.8333dp + 173.1111dp + 175.3889dp + 177.6667dp + 179.9444dp + 182.2222dp + 184.5000dp + 186.7778dp + 189.0556dp + 191.3333dp + 193.6111dp + 195.8889dp + 198.1667dp + 200.4444dp + 202.7222dp + 205.0000dp + 207.2778dp + 209.5556dp + 211.8333dp + 214.1111dp + 216.3889dp + 218.6667dp + 220.9444dp + 223.2222dp + 225.5000dp + 227.7778dp + 230.0556dp + 232.3333dp + 234.6111dp + 236.8889dp + 239.1667dp + 241.4444dp + 243.7222dp + 246.0000dp + 248.2778dp + 250.5556dp + 252.8333dp + 255.1111dp + 257.3889dp + 259.6667dp + 261.9444dp + 264.2222dp + 266.5000dp + 268.7778dp + 271.0556dp + 273.3333dp + 275.6111dp + 277.8889dp + 280.1667dp + 282.4444dp + 284.7222dp + 287.0000dp + 289.2778dp + 291.5556dp + 293.8333dp + 296.1111dp + 298.3889dp + 300.6667dp + 302.9444dp + 305.2222dp + 307.5000dp + 309.7778dp + 312.0556dp + 314.3333dp + 316.6111dp + 318.8889dp + 321.1667dp + 323.4444dp + 325.7222dp + 328.0000dp + 330.2778dp + 332.5556dp + 334.8333dp + 337.1111dp + 339.3889dp + 341.6667dp + 343.9444dp + 346.2222dp + 348.5000dp + 350.7778dp + 353.0556dp + 355.3333dp + 357.6111dp + 359.8889dp + 362.1667dp + 364.4444dp + 366.7222dp + 369.0000dp + 371.2778dp + 373.5556dp + 375.8333dp + 378.1111dp + 380.3889dp + 382.6667dp + 384.9444dp + 387.2222dp + 389.5000dp + 391.7778dp + 394.0556dp + 396.3333dp + 398.6111dp + 400.8889dp + 403.1667dp + 405.4444dp + 407.7222dp + 410.0000dp + 412.2778dp + 414.5556dp + 416.8333dp + 419.1111dp + 421.3889dp + 423.6667dp + 425.9444dp + 428.2222dp + 430.5000dp + 432.7778dp + 435.0556dp + 437.3333dp + 439.6111dp + 441.8889dp + 444.1667dp + 446.4444dp + 448.7222dp + 451.0000dp + 453.2778dp + 455.5556dp + 457.8333dp + 460.1111dp + 462.3889dp + 464.6667dp + 466.9444dp + 469.2222dp + 471.5000dp + 473.7778dp + 476.0556dp + 478.3333dp + 480.6111dp + 482.8889dp + 485.1667dp + 487.4444dp + 489.7222dp + 492.0000dp + 494.2778dp + 496.5556dp + 498.8333dp + 501.1111dp + 503.3889dp + 505.6667dp + 507.9444dp + 510.2222dp + 512.5000dp + 514.7778dp + 517.0556dp + 519.3333dp + 521.6111dp + 523.8889dp + 526.1667dp + 528.4444dp + 530.7222dp + 533.0000dp + 535.2778dp + 537.5556dp + 539.8333dp + 542.1111dp + 544.3889dp + 546.6667dp + 548.9444dp + 551.2222dp + 553.5000dp + 555.7778dp + 558.0556dp + 560.3333dp + 562.6111dp + 564.8889dp + 567.1667dp + 569.4444dp + 571.7222dp + 574.0000dp + 576.2778dp + 578.5556dp + 580.8333dp + 583.1111dp + 585.3889dp + 587.6667dp + 589.9444dp + 592.2222dp + 594.5000dp + 596.7778dp + 599.0556dp + 601.3333dp + 603.6111dp + 605.8889dp + 608.1667dp + 610.4444dp + 612.7222dp + 615.0000dp + 617.2778dp + 619.5556dp + 621.8333dp + 624.1111dp + 626.3889dp + 628.6667dp + 630.9444dp + 633.2222dp + 635.5000dp + 637.7778dp + 640.0556dp + 642.3333dp + 644.6111dp + 646.8889dp + 649.1667dp + 651.4444dp + 653.7222dp + 656.0000dp + 658.2778dp + 660.5556dp + 662.8333dp + 665.1111dp + 667.3889dp + 669.6667dp + 671.9444dp + 674.2222dp + 676.5000dp + 678.7778dp + 681.0556dp + 683.3333dp + 685.6111dp + 687.8889dp + 690.1667dp + 692.4444dp + 694.7222dp + 697.0000dp + 699.2778dp + 701.5556dp + 703.8333dp + 706.1111dp + 708.3889dp + 710.6667dp + 712.9444dp + 715.2222dp + 717.5000dp + 719.7778dp + 722.0556dp + 724.3333dp + 726.6111dp + 728.8889dp + 731.1667dp + 733.4444dp + 735.7222dp + 738.0000dp + 740.2778dp + 742.5556dp + 744.8333dp + 747.1111dp + 749.3889dp + 751.6667dp + 753.9444dp + 756.2222dp + 758.5000dp + 760.7778dp + 763.0556dp + 765.3333dp + 767.6111dp + 769.8889dp + 772.1667dp + 774.4444dp + 776.7222dp + 779.0000dp + 781.2778dp + 783.5556dp + 785.8333dp + 788.1111dp + 790.3889dp + 792.6667dp + 794.9444dp + 797.2222dp + 799.5000dp + 801.7778dp + 804.0556dp + 806.3333dp + 808.6111dp + 810.8889dp + 813.1667dp + 815.4444dp + 817.7222dp + 820.0000dp + 831.3889dp + 842.7778dp + 911.1111dp + 933.8889dp + 961.2222dp + 1075.1111dp + 1138.8889dp + 1366.6667dp + 1457.7778dp + 1640.0000dp + 13.6667sp + 15.9444sp + 18.2222sp + 20.5000sp + 22.7778sp + 25.0556sp + 27.3333sp + 29.6111sp + 31.8889sp + 34.1667sp + 36.4444sp + 38.7222sp + 41.0000sp + 43.2778sp + 45.5556sp + 47.8333sp + 50.1111sp + 52.3889sp + 54.6667sp + 56.9444sp + 63.7778sp + 68.3333sp + 72.8889sp + 77.4444sp + 82.0000sp + 86.5556sp + 91.1111sp + 95.6667sp + 109.3333sp + diff --git a/app/src/main/res/values-sw960dp/dimens.xml b/app/src/main/res/values-sw960dp/dimens.xml new file mode 100644 index 0000000..8cee169 --- /dev/null +++ b/app/src/main/res/values-sw960dp/dimens.xml @@ -0,0 +1,419 @@ + + + @dimen/dp_15 + -160.0000dp + -80.0000dp + -53.3333dp + -32.0000dp + -26.6667dp + -21.3333dp + -13.3333dp + -5.3333dp + -2.6667dp + 0.0000dp + 0.2667dp + 1.3333dp + 2.6667dp + 4.0000dp + 5.3333dp + 6.6667dp + 8.0000dp + 9.3333dp + 10.6667dp + 12.0000dp + 13.3333dp + 16.0000dp + 18.6667dp + 21.3333dp + 24.0000dp + 26.6667dp + 29.3333dp + 32.0000dp + 34.6667dp + 37.3333dp + 40.0000dp + 42.6667dp + 45.3333dp + 48.0000dp + 50.6667dp + 53.3333dp + 56.0000dp + 58.6667dp + 61.3333dp + 64.0000dp + 66.6667dp + 69.3333dp + 72.0000dp + 74.6667dp + 77.3333dp + 80.0000dp + 82.6667dp + 85.3333dp + 88.0000dp + 90.6667dp + 93.3333dp + 96.0000dp + 98.6667dp + 101.3333dp + 104.0000dp + 106.6667dp + 109.3333dp + 112.0000dp + 114.6667dp + 117.3333dp + 120.0000dp + 122.6667dp + 125.3333dp + 128.0000dp + 130.6667dp + 133.3333dp + 136.0000dp + 138.6667dp + 141.3333dp + 144.0000dp + 146.6667dp + 149.3333dp + 152.0000dp + 154.6667dp + 157.3333dp + 160.0000dp + 162.6667dp + 165.3333dp + 168.0000dp + 170.6667dp + 173.3333dp + 176.0000dp + 178.6667dp + 181.3333dp + 184.0000dp + 186.6667dp + 189.3333dp + 192.0000dp + 194.6667dp + 197.3333dp + 200.0000dp + 202.6667dp + 205.3333dp + 208.0000dp + 210.6667dp + 213.3333dp + 216.0000dp + 218.6667dp + 221.3333dp + 224.0000dp + 226.6667dp + 229.3333dp + 232.0000dp + 234.6667dp + 237.3333dp + 240.0000dp + 242.6667dp + 245.3333dp + 248.0000dp + 250.6667dp + 253.3333dp + 256.0000dp + 258.6667dp + 261.3333dp + 264.0000dp + 266.6667dp + 269.3333dp + 272.0000dp + 274.6667dp + 277.3333dp + 280.0000dp + 282.6667dp + 285.3333dp + 288.0000dp + 290.6667dp + 293.3333dp + 296.0000dp + 298.6667dp + 301.3333dp + 304.0000dp + 306.6667dp + 309.3333dp + 312.0000dp + 314.6667dp + 317.3333dp + 320.0000dp + 322.6667dp + 325.3333dp + 328.0000dp + 330.6667dp + 333.3333dp + 336.0000dp + 338.6667dp + 341.3333dp + 344.0000dp + 346.6667dp + 349.3333dp + 352.0000dp + 354.6667dp + 357.3333dp + 360.0000dp + 362.6667dp + 365.3333dp + 368.0000dp + 370.6667dp + 373.3333dp + 376.0000dp + 378.6667dp + 381.3333dp + 384.0000dp + 386.6667dp + 389.3333dp + 392.0000dp + 394.6667dp + 397.3333dp + 400.0000dp + 402.6667dp + 405.3333dp + 408.0000dp + 410.6667dp + 413.3333dp + 416.0000dp + 418.6667dp + 421.3333dp + 424.0000dp + 426.6667dp + 429.3333dp + 432.0000dp + 434.6667dp + 437.3333dp + 440.0000dp + 442.6667dp + 445.3333dp + 448.0000dp + 450.6667dp + 453.3333dp + 456.0000dp + 458.6667dp + 461.3333dp + 464.0000dp + 466.6667dp + 469.3333dp + 472.0000dp + 474.6667dp + 477.3333dp + 480.0000dp + 482.6667dp + 485.3333dp + 488.0000dp + 490.6667dp + 493.3333dp + 496.0000dp + 498.6667dp + 501.3333dp + 504.0000dp + 506.6667dp + 509.3333dp + 512.0000dp + 514.6667dp + 517.3333dp + 520.0000dp + 522.6667dp + 525.3333dp + 528.0000dp + 530.6667dp + 533.3333dp + 536.0000dp + 538.6667dp + 541.3333dp + 544.0000dp + 546.6667dp + 549.3333dp + 552.0000dp + 554.6667dp + 557.3333dp + 560.0000dp + 562.6667dp + 565.3333dp + 568.0000dp + 570.6667dp + 573.3333dp + 576.0000dp + 578.6667dp + 581.3333dp + 584.0000dp + 586.6667dp + 589.3333dp + 592.0000dp + 594.6667dp + 597.3333dp + 600.0000dp + 602.6667dp + 605.3333dp + 608.0000dp + 610.6667dp + 613.3333dp + 616.0000dp + 618.6667dp + 621.3333dp + 624.0000dp + 626.6667dp + 629.3333dp + 632.0000dp + 634.6667dp + 637.3333dp + 640.0000dp + 642.6667dp + 645.3333dp + 648.0000dp + 650.6667dp + 653.3333dp + 656.0000dp + 658.6667dp + 661.3333dp + 664.0000dp + 666.6667dp + 669.3333dp + 672.0000dp + 674.6667dp + 677.3333dp + 680.0000dp + 682.6667dp + 685.3333dp + 688.0000dp + 690.6667dp + 693.3333dp + 696.0000dp + 698.6667dp + 701.3333dp + 704.0000dp + 706.6667dp + 709.3333dp + 712.0000dp + 714.6667dp + 717.3333dp + 720.0000dp + 722.6667dp + 725.3333dp + 728.0000dp + 730.6667dp + 733.3333dp + 736.0000dp + 738.6667dp + 741.3333dp + 744.0000dp + 746.6667dp + 749.3333dp + 752.0000dp + 754.6667dp + 757.3333dp + 760.0000dp + 762.6667dp + 765.3333dp + 768.0000dp + 770.6667dp + 773.3333dp + 776.0000dp + 778.6667dp + 781.3333dp + 784.0000dp + 786.6667dp + 789.3333dp + 792.0000dp + 794.6667dp + 797.3333dp + 800.0000dp + 802.6667dp + 805.3333dp + 808.0000dp + 810.6667dp + 813.3333dp + 816.0000dp + 818.6667dp + 821.3333dp + 824.0000dp + 826.6667dp + 829.3333dp + 832.0000dp + 834.6667dp + 837.3333dp + 840.0000dp + 842.6667dp + 845.3333dp + 848.0000dp + 850.6667dp + 853.3333dp + 856.0000dp + 858.6667dp + 861.3333dp + 864.0000dp + 866.6667dp + 869.3333dp + 872.0000dp + 874.6667dp + 877.3333dp + 880.0000dp + 882.6667dp + 885.3333dp + 888.0000dp + 890.6667dp + 893.3333dp + 896.0000dp + 898.6667dp + 901.3333dp + 904.0000dp + 906.6667dp + 909.3333dp + 912.0000dp + 914.6667dp + 917.3333dp + 920.0000dp + 922.6667dp + 925.3333dp + 928.0000dp + 930.6667dp + 933.3333dp + 936.0000dp + 938.6667dp + 941.3333dp + 944.0000dp + 946.6667dp + 949.3333dp + 952.0000dp + 954.6667dp + 957.3333dp + 960.0000dp + 973.3333dp + 986.6667dp + 1066.6667dp + 1093.3333dp + 1125.3333dp + 1258.6667dp + 1333.3333dp + 1600.0000dp + 1706.6667dp + 1920.0000dp + 16.0000sp + 18.6667sp + 21.3333sp + 24.0000sp + 26.6667sp + 29.3333sp + 32.0000sp + 34.6667sp + 37.3333sp + 40.0000sp + 42.6667sp + 45.3333sp + 48.0000sp + 50.6667sp + 53.3333sp + 56.0000sp + 58.6667sp + 61.3333sp + 64.0000sp + 66.6667sp + 74.6667sp + 80.0000sp + 85.3333sp + 90.6667sp + 96.0000sp + 101.3333sp + 106.6667sp + 112.0000sp + 128.0000sp + diff --git a/app/src/main/res/values-sw961dp/dimens.xml b/app/src/main/res/values-sw961dp/dimens.xml new file mode 100644 index 0000000..bec6f70 --- /dev/null +++ b/app/src/main/res/values-sw961dp/dimens.xml @@ -0,0 +1,419 @@ + + + @dimen/dp_15 + -160.1667dp + -80.0833dp + -53.3889dp + -32.0333dp + -26.6944dp + -21.3556dp + -13.3472dp + -5.3389dp + -2.6694dp + 0.0000dp + 0.2669dp + 1.3347dp + 2.6694dp + 4.0042dp + 5.3389dp + 6.6736dp + 8.0083dp + 9.3431dp + 10.6778dp + 12.0125dp + 13.3472dp + 16.0167dp + 18.6861dp + 21.3556dp + 24.0250dp + 26.6944dp + 29.3639dp + 32.0333dp + 34.7028dp + 37.3722dp + 40.0417dp + 42.7111dp + 45.3806dp + 48.0500dp + 50.7194dp + 53.3889dp + 56.0583dp + 58.7278dp + 61.3972dp + 64.0667dp + 66.7361dp + 69.4056dp + 72.0750dp + 74.7444dp + 77.4139dp + 80.0833dp + 82.7528dp + 85.4222dp + 88.0917dp + 90.7611dp + 93.4306dp + 96.1000dp + 98.7694dp + 101.4389dp + 104.1083dp + 106.7778dp + 109.4472dp + 112.1167dp + 114.7861dp + 117.4556dp + 120.1250dp + 122.7944dp + 125.4639dp + 128.1333dp + 130.8028dp + 133.4722dp + 136.1417dp + 138.8111dp + 141.4806dp + 144.1500dp + 146.8194dp + 149.4889dp + 152.1583dp + 154.8278dp + 157.4972dp + 160.1667dp + 162.8361dp + 165.5056dp + 168.1750dp + 170.8444dp + 173.5139dp + 176.1833dp + 178.8528dp + 181.5222dp + 184.1917dp + 186.8611dp + 189.5306dp + 192.2000dp + 194.8694dp + 197.5389dp + 200.2083dp + 202.8778dp + 205.5472dp + 208.2167dp + 210.8861dp + 213.5556dp + 216.2250dp + 218.8944dp + 221.5639dp + 224.2333dp + 226.9028dp + 229.5722dp + 232.2417dp + 234.9111dp + 237.5806dp + 240.2500dp + 242.9194dp + 245.5889dp + 248.2583dp + 250.9278dp + 253.5972dp + 256.2667dp + 258.9361dp + 261.6056dp + 264.2750dp + 266.9444dp + 269.6139dp + 272.2833dp + 274.9528dp + 277.6222dp + 280.2917dp + 282.9611dp + 285.6306dp + 288.3000dp + 290.9694dp + 293.6389dp + 296.3083dp + 298.9778dp + 301.6472dp + 304.3167dp + 306.9861dp + 309.6556dp + 312.3250dp + 314.9944dp + 317.6639dp + 320.3333dp + 323.0028dp + 325.6722dp + 328.3417dp + 331.0111dp + 333.6806dp + 336.3500dp + 339.0194dp + 341.6889dp + 344.3583dp + 347.0278dp + 349.6972dp + 352.3667dp + 355.0361dp + 357.7056dp + 360.3750dp + 363.0444dp + 365.7139dp + 368.3833dp + 371.0528dp + 373.7222dp + 376.3917dp + 379.0611dp + 381.7306dp + 384.4000dp + 387.0694dp + 389.7389dp + 392.4083dp + 395.0778dp + 397.7472dp + 400.4167dp + 403.0861dp + 405.7556dp + 408.4250dp + 411.0944dp + 413.7639dp + 416.4333dp + 419.1028dp + 421.7722dp + 424.4417dp + 427.1111dp + 429.7806dp + 432.4500dp + 435.1194dp + 437.7889dp + 440.4583dp + 443.1278dp + 445.7972dp + 448.4667dp + 451.1361dp + 453.8056dp + 456.4750dp + 459.1444dp + 461.8139dp + 464.4833dp + 467.1528dp + 469.8222dp + 472.4917dp + 475.1611dp + 477.8306dp + 480.5000dp + 483.1694dp + 485.8389dp + 488.5083dp + 491.1778dp + 493.8472dp + 496.5167dp + 499.1861dp + 501.8556dp + 504.5250dp + 507.1944dp + 509.8639dp + 512.5333dp + 515.2028dp + 517.8722dp + 520.5417dp + 523.2111dp + 525.8806dp + 528.5500dp + 531.2194dp + 533.8889dp + 536.5583dp + 539.2278dp + 541.8972dp + 544.5667dp + 547.2361dp + 549.9056dp + 552.5750dp + 555.2444dp + 557.9139dp + 560.5833dp + 563.2528dp + 565.9222dp + 568.5917dp + 571.2611dp + 573.9306dp + 576.6000dp + 579.2694dp + 581.9389dp + 584.6083dp + 587.2778dp + 589.9472dp + 592.6167dp + 595.2861dp + 597.9556dp + 600.6250dp + 603.2944dp + 605.9639dp + 608.6333dp + 611.3028dp + 613.9722dp + 616.6417dp + 619.3111dp + 621.9806dp + 624.6500dp + 627.3194dp + 629.9889dp + 632.6583dp + 635.3278dp + 637.9972dp + 640.6667dp + 643.3361dp + 646.0056dp + 648.6750dp + 651.3444dp + 654.0139dp + 656.6833dp + 659.3528dp + 662.0222dp + 664.6917dp + 667.3611dp + 670.0306dp + 672.7000dp + 675.3694dp + 678.0389dp + 680.7083dp + 683.3778dp + 686.0472dp + 688.7167dp + 691.3861dp + 694.0556dp + 696.7250dp + 699.3944dp + 702.0639dp + 704.7333dp + 707.4028dp + 710.0722dp + 712.7417dp + 715.4111dp + 718.0806dp + 720.7500dp + 723.4194dp + 726.0889dp + 728.7583dp + 731.4278dp + 734.0972dp + 736.7667dp + 739.4361dp + 742.1056dp + 744.7750dp + 747.4444dp + 750.1139dp + 752.7833dp + 755.4528dp + 758.1222dp + 760.7917dp + 763.4611dp + 766.1306dp + 768.8000dp + 771.4694dp + 774.1389dp + 776.8083dp + 779.4778dp + 782.1472dp + 784.8167dp + 787.4861dp + 790.1556dp + 792.8250dp + 795.4944dp + 798.1639dp + 800.8333dp + 803.5028dp + 806.1722dp + 808.8417dp + 811.5111dp + 814.1806dp + 816.8500dp + 819.5194dp + 822.1889dp + 824.8583dp + 827.5278dp + 830.1972dp + 832.8667dp + 835.5361dp + 838.2056dp + 840.8750dp + 843.5444dp + 846.2139dp + 848.8833dp + 851.5528dp + 854.2222dp + 856.8917dp + 859.5611dp + 862.2306dp + 864.9000dp + 867.5694dp + 870.2389dp + 872.9083dp + 875.5778dp + 878.2472dp + 880.9167dp + 883.5861dp + 886.2556dp + 888.9250dp + 891.5944dp + 894.2639dp + 896.9333dp + 899.6028dp + 902.2722dp + 904.9417dp + 907.6111dp + 910.2806dp + 912.9500dp + 915.6194dp + 918.2889dp + 920.9583dp + 923.6278dp + 926.2972dp + 928.9667dp + 931.6361dp + 934.3056dp + 936.9750dp + 939.6444dp + 942.3139dp + 944.9833dp + 947.6528dp + 950.3222dp + 952.9917dp + 955.6611dp + 958.3306dp + 961.0000dp + 974.3472dp + 987.6944dp + 1067.7778dp + 1094.4722dp + 1126.5056dp + 1259.9778dp + 1334.7222dp + 1601.6667dp + 1708.4444dp + 1922.0000dp + 16.0167sp + 18.6861sp + 21.3556sp + 24.0250sp + 26.6944sp + 29.3639sp + 32.0333sp + 34.7028sp + 37.3722sp + 40.0417sp + 42.7111sp + 45.3806sp + 48.0500sp + 50.7194sp + 53.3889sp + 56.0583sp + 58.7278sp + 61.3972sp + 64.0667sp + 66.7361sp + 74.7444sp + 80.0833sp + 85.4222sp + 90.7611sp + 96.1000sp + 101.4389sp + 106.7778sp + 112.1167sp + 128.1333sp + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..69b2233 --- /dev/null +++ b/app/src/main/res/values/colors.xml @@ -0,0 +1,6 @@ + + + #008577 + #00574B + #D81B60 + diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml new file mode 100644 index 0000000..f026464 --- /dev/null +++ b/app/src/main/res/values/dimens.xml @@ -0,0 +1,427 @@ + + + + + @dimen/dp_15 + + + + -60dp + -30dp + -20dp + -12dp + -10dp + -8dp + -5dp + -2dp + -1dp + 0dp + 0.1dp + 0.5dp + 1dp + 1.5dp + 2dp + 2.5dp + 3dp + 3.5dp + 4dp + 4.5dp + 5dp + 6dp + 7dp + 8dp + 9dp + 10dp + 11dp + 12dp + 13dp + 14dp + 15dp + 16dp + 17dp + 18dp + 19dp + 20dp + 21dp + 22dp + 23dp + 24dp + 25dp + 26dp + 27dp + 28dp + 29dp + 30dp + 31dp + 32dp + 33dp + 34dp + 35dp + 36dp + 37dp + 38dp + 39dp + 40dp + 41dp + 42dp + 43dp + 44dp + 45dp + 46dp + 47dp + 48dp + 49dp + 50dp + 51dp + 52dp + 53dp + 54dp + 55dp + 56dp + 57dp + 58dp + 59dp + 60dp + 61dp + 62dp + 63dp + 64dp + 65dp + 66dp + 67dp + 68dp + 69dp + 70dp + 71dp + 72dp + 73dp + 74dp + 75dp + 76dp + 77dp + 78dp + 79dp + 80dp + 81dp + 82dp + 83dp + 84dp + 85dp + 86dp + 87dp + 88dp + 89dp + 90dp + 91dp + 92dp + 93dp + 94dp + 95dp + 96dp + 97dp + 98dp + 99dp + 100dp + 101dp + 102dp + 103dp + 104dp + 105dp + 106dp + 107dp + 108dp + 109dp + 110dp + 111dp + 112dp + 113dp + 114dp + 115dp + 116dp + 117dp + 118dp + 119dp + 120dp + 121dp + 122dp + 123dp + 124dp + 125dp + 126dp + 127dp + 128dp + 129dp + 130dp + 131dp + 132dp + 133dp + 134dp + 135dp + 136dp + 137dp + 138dp + 139dp + 140dp + 141dp + 142dp + 143dp + 144dp + 145dp + 146dp + 147dp + 148dp + 149dp + 150dp + 151dp + 152dp + 153dp + 154dp + 155dp + 156dp + 157dp + 158dp + 159dp + 160dp + 161dp + 162dp + 163dp + 164dp + 165dp + 166dp + 167dp + 168dp + 169dp + 170dp + 171dp + 172dp + 173dp + 174dp + 175dp + 176dp + 177dp + 178dp + 179dp + 180dp + 181dp + 182dp + 183dp + 184dp + 185dp + 186dp + 187dp + 188dp + 189dp + 190dp + 191dp + 192dp + 193dp + 194dp + 195dp + 196dp + 197dp + 198dp + 199dp + 200dp + 201dp + 202dp + 203dp + 204dp + 205dp + 206dp + 207dp + 208dp + 209dp + 210dp + 211dp + 212dp + 213dp + 214dp + 215dp + 216dp + 217dp + 218dp + 219dp + 220dp + 221dp + 222dp + 223dp + 224dp + 225dp + 226dp + 227dp + 228dp + 229dp + 230dp + 231dp + 232dp + 233dp + 234dp + 235dp + 236dp + 237dp + 238dp + 239dp + 240dp + 241dp + 242dp + 243dp + 244dp + 245dp + 246dp + 247dp + 248dp + 249dp + 250dp + 251dp + 252dp + 253dp + 254dp + 255dp + 256dp + 257dp + 258dp + 259dp + 260dp + 261dp + 262dp + 263dp + 264dp + 265dp + 266dp + 267dp + 268dp + 269dp + 270dp + 271dp + 272dp + 273dp + 274dp + 275dp + 276dp + 277dp + 278dp + 279dp + 280dp + 281dp + 282dp + 283dp + 284dp + 285dp + 286dp + 287dp + 288dp + 289dp + 290dp + 291dp + 292dp + 293dp + 294dp + 295dp + 296dp + 297dp + 298dp + 299dp + 300dp + 301dp + 302dp + 303dp + 304dp + 305dp + 306dp + 307dp + 308dp + 309dp + 310dp + 311dp + 312dp + 313dp + 314dp + 315dp + 316dp + 317dp + 318dp + 319dp + 320dp + 321dp + 322dp + 323dp + 324dp + 325dp + 326dp + 327dp + 328dp + 329dp + 330dp + 331dp + 332dp + 333dp + 334dp + 335dp + 336dp + 337dp + 338dp + 339dp + 340dp + 341dp + 342dp + 343dp + 344dp + 345dp + 346dp + 347dp + 348dp + 349dp + 350dp + 351dp + 352dp + 353dp + 354dp + 355dp + 356dp + 357dp + 358dp + 359dp + 360dp + 365dp + 370dp + 400dp + 410dp + 422dp + 472dp + 500dp + 600dp + 640dp + 720dp + + + 6sp + 7sp + 8sp + 9sp + 10sp + 11sp + 12sp + 13sp + 14sp + 15sp + 16sp + 17sp + 18sp + 19sp + 20sp + 21sp + 22sp + 23sp + 24sp + 25sp + 28sp + 30sp + 32sp + 34sp + 36sp + 38sp + 40sp + 42sp + 48sp + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..818e054 --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,6 @@ + + 设备信息 + 打开 + 打开失败! + 请输入应用名称或关键字 + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..0eb88fe --- /dev/null +++ b/app/src/main/res/values/styles.xml @@ -0,0 +1,11 @@ + + + + + + diff --git a/app/src/main/res/xml/file_paths.xml b/app/src/main/res/xml/file_paths.xml new file mode 100644 index 0000000..c6e50a7 --- /dev/null +++ b/app/src/main/res/xml/file_paths.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..fb516be --- /dev/null +++ b/build.gradle @@ -0,0 +1,27 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + repositories { + google() + jcenter() + + } + dependencies { + classpath 'com.android.tools.build:gradle:3.5.2' + + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +allprojects { + repositories { + google() + jcenter() + + } +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..f6b961fd5a86aa5fbfe90f707c3138408be7c718 GIT binary patch literal 54329 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

<5G2M1WZP5 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 F{|7XC?P&l2 literal 0 HcmV?d00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..56df4d5 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Wed Dec 11 16:07:23 CST 2019 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip diff --git a/screenMatch.properties b/screenMatch.properties new file mode 100644 index 0000000..0d4bdb6 --- /dev/null +++ b/screenMatch.properties @@ -0,0 +1,54 @@ +############################################################################ +# Start with '#' is annotate. # +# In front of '=' is key, cannot be modified. # +# More information to visit: # +# http://blog.csdn.net/fesdgasdgasdg/article/details/52325590 # +# http://download.csdn.net/detail/fesdgasdgasdg/9913744 # +# https://github.com/mengzhinan/PhoneScreenMatch # +############################################################################ +# +# You need to refresh or reopen the project every time you modify the configuration, +# or you can't get the latest configuration parameters. +# +############################################################################# +# +# Base dp value for screen match. Cut the screen into [base_dp] parts. +# Data type is double. System default value is 360. +# I advise you not to modify the value, be careful !!!!!!!!! _^_ *_* +base_dp=360 +# Also need to match the phone screen of [match_dp]. +# If you have another dp values. +# System default values is 320,360,384,392.7272,400,410,411.4285,432,480,533,592,600,640,662,720,768,800,811,820,960,961,1024,1280,1365 +match_dp= +# If you not wanna to match dp values above. Write some above values here, append value with "," . +# For example: 811,961,1365 +ignore_dp= +# They're not android module name. If has moresplit with , Symbol. +# If you set, it will not show in SelectDialog. +# If you have, write here and append value with "," . +# For example: testLibrary,commonModule +# System default values is .gradle, gradle, .idea, build, .git +ignore_module_name= +# Use which module under the values/dimen.xml file to do the base file, +# and generated dimen.xml file store in this module? +# Default value is 'app'. +match_module=app +# Don't show select dialog again when use this plugin. +# System screen match will use the last selected module name or default module name. +# You can give value true or false. Default value is false. +not_show_dialog=false +# Do you want to generate the default example dimens.xml file? +# In path of .../projectName/screenMatch_example_dimens.xml, It does not affect your project code. +# You can give value true or false. Default value is false. +not_create_default_dimens=false +# Does the font scale the same size as the DP? May not be accuracy. +# You can give value true or false. Default value is true. Also need scaled. +is_match_font_sp=true +# Do you want to create values-wXXXdp folder or values-swXXXdp folder ? +# I suggest you create values-swXXXdp folder, +# because I had a problem when I was working on the horizontal screen adapter. +# values-swXXXdp folder can solve my problem. +# If you want create values-swXXXdp folder, set "create_values_sw_folder=true", +# otherwise set "create_values_sw_folder=true". +# Default values is true. +create_values_sw_folder=true diff --git a/screenMatch_example_dimens.xml b/screenMatch_example_dimens.xml new file mode 100644 index 0000000..026f490 --- /dev/null +++ b/screenMatch_example_dimens.xml @@ -0,0 +1,431 @@ + + + + + @dimen/dp_15 + + + + -60dp + -30dp + -20dp + -12dp + -10dp + -8dp + -5dp + -2dp + -1dp + 0dp + 0.1dp + 0.5dp + 1dp + 1.5dp + 2dp + 2.5dp + 3dp + 3.5dp + 4dp + 4.5dp + 5dp + 6dp + 7dp + 7.5dp + 8dp + 9dp + 10dp + 11dp + 12dp + 13dp + 14dp + 15dp + 16dp + 17dp + 18dp + 19dp + 20dp + 21dp + 22dp + 23dp + 24dp + 25dp + 26dp + 27dp + 28dp + 29dp + 30dp + 31dp + 32dp + 33dp + 34dp + 35dp + 36dp + 37dp + 38dp + 39dp + 40dp + 41dp + 42dp + 43dp + 44dp + 45dp + 46dp + 47dp + 48dp + 49dp + 50dp + 51dp + 52dp + 53dp + 54dp + 55dp + 56dp + 57dp + 58dp + 59dp + 60dp + 61dp + 62dp + 63dp + 64dp + 65dp + 66dp + 67dp + 68dp + 69dp + 70dp + 71dp + 72dp + 73dp + 74dp + 75dp + 76dp + 77dp + 78dp + 79dp + 80dp + 81dp + 82dp + 83dp + 84dp + 85dp + 86dp + 87dp + 88dp + 89dp + 90dp + 91dp + 92dp + 93dp + 94dp + 95dp + 96dp + 97dp + 98dp + 99dp + 100dp + 101dp + 102dp + 103dp + 104dp + 104.5dp + 105dp + 106dp + 107dp + 108dp + 109dp + 110dp + 111dp + 112dp + 113dp + 114dp + 115dp + 116dp + 117dp + 118dp + 119dp + 120dp + 121dp + 122dp + 123dp + 124dp + 125dp + 126dp + 127dp + 128dp + 129dp + 130dp + 131dp + 132dp + 133dp + 134dp + 134.5dp + 135dp + 136dp + 137dp + 138dp + 139dp + 140dp + 141dp + 142dp + 143dp + 144dp + 145dp + 146dp + 147dp + 148dp + 149dp + 150dp + 151dp + 152dp + 153dp + 154dp + 155dp + 156dp + 157dp + 158dp + 159dp + 160dp + 161dp + 162dp + 163dp + 164dp + 165dp + 166dp + 167dp + 168dp + 169dp + 170dp + 171dp + 172dp + 173dp + 174dp + 175dp + 176dp + 177dp + 178dp + 179dp + 180dp + 181dp + 182dp + 183dp + 184dp + 185dp + 186dp + 187dp + 188dp + 189dp + 190dp + 191dp + 191.25dp + 192dp + 193dp + 194dp + 195dp + 196dp + 197dp + 198dp + 199dp + 200dp + 201dp + 202dp + 203dp + 204dp + 205dp + 206dp + 207dp + 208dp + 209dp + 210dp + 211dp + 212dp + 213dp + 214dp + 215dp + 216dp + 217dp + 218dp + 219dp + 220dp + 221dp + 222dp + 223dp + 224dp + 225dp + 226dp + 227dp + 228dp + 229dp + 230dp + 231dp + 232dp + 233dp + 234dp + 235dp + 236dp + 237dp + 238dp + 239dp + 240dp + 241dp + 242dp + 243dp + 244dp + 245dp + 246dp + 247dp + 248dp + 249dp + 250dp + 251dp + 252dp + 253dp + 254dp + 255dp + 256dp + 257dp + 258dp + 259dp + 260dp + 261dp + 262dp + 263dp + 264dp + 265dp + 266dp + 267dp + 268dp + 269dp + 270dp + 271dp + 272dp + 273dp + 274dp + 275dp + 276dp + 277dp + 278dp + 279dp + 280dp + 281dp + 282dp + 283dp + 284dp + 285dp + 286dp + 287dp + 288dp + 289dp + 290dp + 291dp + 292dp + 293dp + 294dp + 295dp + 296dp + 297dp + 298dp + 299dp + 300dp + 301dp + 302dp + 303dp + 304dp + 305dp + 306dp + 307dp + 308dp + 309dp + 310dp + 311dp + 312dp + 313dp + 314dp + 315dp + 316dp + 317dp + 318dp + 319dp + 320dp + 321dp + 322dp + 323dp + 324dp + 325dp + 326dp + 327dp + 328dp + 329dp + 330dp + 331dp + 332dp + 333dp + 334dp + 335dp + 336dp + 337dp + 338dp + 339dp + 340dp + 341dp + 342dp + 343dp + 344dp + 345dp + 346dp + 347dp + 348dp + 349dp + 350dp + 351dp + 352dp + 353dp + 354dp + 355dp + 356dp + 357dp + 358dp + 359dp + 360dp + 365dp + 370dp + 400dp + 410dp + 422dp + 472dp + 500dp + 600dp + 640dp + 720dp + + + 6sp + 7sp + 8sp + 9sp + 10sp + 11sp + 12sp + 13sp + 14sp + 15sp + 16sp + 17sp + 18sp + 19sp + 20sp + 21sp + 22sp + 23sp + 24sp + 25sp + 28sp + 30sp + 32sp + 34sp + 36sp + 38sp + 40sp + 42sp + 48sp + + diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..7777f09 --- /dev/null +++ b/settings.gradle @@ -0,0 +1,2 @@ +include ':app' +rootProject.name='设备信息'