diff --git a/AndroidManifest-common.xml b/AndroidManifest-common.xml
index a0608b2..1f20d85 100644
--- a/AndroidManifest-common.xml
+++ b/AndroidManifest-common.xml
@@ -215,6 +215,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ android:exported="true" >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/alarm_pressed_background.xml b/res/drawable/alarm_pressed_background.xml
new file mode 100644
index 0000000..6390975
--- /dev/null
+++ b/res/drawable/alarm_pressed_background.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/default_botton_bg.xml b/res/drawable/default_botton_bg.xml
new file mode 100644
index 0000000..0abdaac
--- /dev/null
+++ b/res/drawable/default_botton_bg.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/notice_voice_background.xml b/res/drawable/notice_voice_background.xml
new file mode 100644
index 0000000..374644b
--- /dev/null
+++ b/res/drawable/notice_voice_background.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/ok_background.xml b/res/drawable/ok_background.xml
new file mode 100644
index 0000000..11166a6
--- /dev/null
+++ b/res/drawable/ok_background.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/tv_times_bg_loop.xml b/res/drawable/tv_times_bg_loop.xml
new file mode 100644
index 0000000..01b3f5b
--- /dev/null
+++ b/res/drawable/tv_times_bg_loop.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/tv_times_bg_offday.xml b/res/drawable/tv_times_bg_offday.xml
new file mode 100644
index 0000000..8aad1c6
--- /dev/null
+++ b/res/drawable/tv_times_bg_offday.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/tv_times_bg_once.xml b/res/drawable/tv_times_bg_once.xml
new file mode 100644
index 0000000..2469bdb
--- /dev/null
+++ b/res/drawable/tv_times_bg_once.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/tv_times_bg_reserve.xml b/res/drawable/tv_times_bg_reserve.xml
new file mode 100644
index 0000000..cd88b40
--- /dev/null
+++ b/res/drawable/tv_times_bg_reserve.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/tv_times_bg_work.xml b/res/drawable/tv_times_bg_work.xml
new file mode 100644
index 0000000..5cbb751
--- /dev/null
+++ b/res/drawable/tv_times_bg_work.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/voice_background.xml b/res/drawable/voice_background.xml
new file mode 100644
index 0000000..3553c8d
--- /dev/null
+++ b/res/drawable/voice_background.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/activity_alarm.xml b/res/layout/activity_alarm.xml
new file mode 100644
index 0000000..ff4c8cc
--- /dev/null
+++ b/res/layout/activity_alarm.xml
@@ -0,0 +1,295 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/activity_notice.xml b/res/layout/activity_notice.xml
new file mode 100644
index 0000000..159516f
--- /dev/null
+++ b/res/layout/activity_notice.xml
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/activity_notice_info.xml b/res/layout/activity_notice_info.xml
new file mode 100644
index 0000000..5ad0993
--- /dev/null
+++ b/res/layout/activity_notice_info.xml
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/item_alarm.xml b/res/layout/item_alarm.xml
new file mode 100644
index 0000000..5feb982
--- /dev/null
+++ b/res/layout/item_alarm.xml
@@ -0,0 +1,179 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/layout_jzstd_notitle.xml b/res/layout/layout_jzstd_notitle.xml
new file mode 100644
index 0000000..c7e690a
--- /dev/null
+++ b/res/layout/layout_jzstd_notitle.xml
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/raw/ni.mp3 b/res/raw/ni.mp3
new file mode 100644
index 0000000..68f3449
Binary files /dev/null and b/res/raw/ni.mp3 differ
diff --git a/res/values-sw1024dp/dimens.xml b/res/values-sw1024dp/dimens.xml
new file mode 100644
index 0000000..210e6b0
--- /dev/null
+++ b/res/values-sw1024dp/dimens.xml
@@ -0,0 +1,427 @@
+
+
+ 45.5111dp
+ 45.5111dp
+ 51.2000sp
+ 28.4444dp
+ -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
+ 2.8444sp
+ 5.6889sp
+ 8.5333sp
+ 11.3778sp
+ 14.2222sp
+ 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/res/values-sw1280dp/dimens.xml b/res/values-sw1280dp/dimens.xml
new file mode 100644
index 0000000..efaccc6
--- /dev/null
+++ b/res/values-sw1280dp/dimens.xml
@@ -0,0 +1,427 @@
+
+
+ 56.8889dp
+ 56.8889dp
+ 64.0000sp
+ 35.5556dp
+ -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
+ 3.5556sp
+ 7.1111sp
+ 10.6667sp
+ 14.2222sp
+ 17.7778sp
+ 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/res/values-sw1365dp/dimens.xml b/res/values-sw1365dp/dimens.xml
new file mode 100644
index 0000000..b109d54
--- /dev/null
+++ b/res/values-sw1365dp/dimens.xml
@@ -0,0 +1,427 @@
+
+
+ 60.6667dp
+ 60.6667dp
+ 68.2500sp
+ 37.9167dp
+ -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
+ 3.7917sp
+ 7.5833sp
+ 11.3750sp
+ 15.1667sp
+ 18.9583sp
+ 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/res/values-sw320dp/dimens.xml b/res/values-sw320dp/dimens.xml
new file mode 100644
index 0000000..016af4e
--- /dev/null
+++ b/res/values-sw320dp/dimens.xml
@@ -0,0 +1,427 @@
+
+
+ 14.2222dp
+ 14.2222dp
+ 16.0000sp
+ 8.8889dp
+ -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
+ 0.8889sp
+ 1.7778sp
+ 2.6667sp
+ 3.5556sp
+ 4.4444sp
+ 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/res/values-sw360dp/dimens.xml b/res/values-sw360dp/dimens.xml
new file mode 100644
index 0000000..d235b06
--- /dev/null
+++ b/res/values-sw360dp/dimens.xml
@@ -0,0 +1,427 @@
+
+
+ 16.0000dp
+ 16.0000dp
+ 18.0000sp
+ 10.0000dp
+ -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
+ 1.0000sp
+ 2.0000sp
+ 3.0000sp
+ 4.0000sp
+ 5.0000sp
+ 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/res/values-sw362dp/dimens.xml b/res/values-sw362dp/dimens.xml
new file mode 100644
index 0000000..bf56c40
--- /dev/null
+++ b/res/values-sw362dp/dimens.xml
@@ -0,0 +1,427 @@
+
+
+ 16.1006dp
+ 16.1006dp
+ 18.1132sp
+ 10.0629dp
+ -60.3773dp
+ -30.1887dp
+ -20.1258dp
+ -12.0755dp
+ -10.0629dp
+ -8.0503dp
+ -5.0314dp
+ -2.0126dp
+ -1.0063dp
+ 0.0000dp
+ 0.1006dp
+ 0.5031dp
+ 1.0063dp
+ 1.5094dp
+ 2.0126dp
+ 2.5157dp
+ 3.0189dp
+ 3.5220dp
+ 4.0252dp
+ 4.5283dp
+ 5.0314dp
+ 6.0377dp
+ 7.0440dp
+ 8.0503dp
+ 9.0566dp
+ 10.0629dp
+ 11.0692dp
+ 12.0755dp
+ 13.0818dp
+ 14.0880dp
+ 15.0943dp
+ 16.1006dp
+ 17.1069dp
+ 18.1132dp
+ 19.1195dp
+ 20.1258dp
+ 21.1321dp
+ 22.1384dp
+ 23.1447dp
+ 24.1509dp
+ 25.1572dp
+ 26.1635dp
+ 27.1698dp
+ 28.1761dp
+ 29.1824dp
+ 30.1887dp
+ 31.1950dp
+ 32.2013dp
+ 33.2075dp
+ 34.2138dp
+ 35.2201dp
+ 36.2264dp
+ 37.2327dp
+ 38.2390dp
+ 39.2453dp
+ 40.2516dp
+ 41.2579dp
+ 42.2641dp
+ 43.2704dp
+ 44.2767dp
+ 45.2830dp
+ 46.2893dp
+ 47.2956dp
+ 48.3019dp
+ 49.3082dp
+ 50.3145dp
+ 51.3207dp
+ 52.3270dp
+ 53.3333dp
+ 54.3396dp
+ 55.3459dp
+ 56.3522dp
+ 57.3585dp
+ 58.3648dp
+ 59.3711dp
+ 60.3773dp
+ 61.3836dp
+ 62.3899dp
+ 63.3962dp
+ 64.4025dp
+ 65.4088dp
+ 66.4151dp
+ 67.4214dp
+ 68.4277dp
+ 69.4340dp
+ 70.4402dp
+ 71.4465dp
+ 72.4528dp
+ 73.4591dp
+ 74.4654dp
+ 75.4717dp
+ 76.4780dp
+ 77.4843dp
+ 78.4906dp
+ 79.4968dp
+ 80.5031dp
+ 81.5094dp
+ 82.5157dp
+ 83.5220dp
+ 84.5283dp
+ 85.5346dp
+ 86.5409dp
+ 87.5472dp
+ 88.5534dp
+ 89.5597dp
+ 90.5660dp
+ 91.5723dp
+ 92.5786dp
+ 93.5849dp
+ 94.5912dp
+ 95.5975dp
+ 96.6038dp
+ 97.6100dp
+ 98.6163dp
+ 99.6226dp
+ 100.6289dp
+ 101.6352dp
+ 102.6415dp
+ 103.6478dp
+ 104.6541dp
+ 105.6604dp
+ 106.6667dp
+ 107.6729dp
+ 108.6792dp
+ 109.6855dp
+ 110.6918dp
+ 111.6981dp
+ 112.7044dp
+ 113.7107dp
+ 114.7170dp
+ 115.7233dp
+ 116.7295dp
+ 117.7358dp
+ 118.7421dp
+ 119.7484dp
+ 120.7547dp
+ 121.7610dp
+ 122.7673dp
+ 123.7736dp
+ 124.7799dp
+ 125.7861dp
+ 126.7924dp
+ 127.7987dp
+ 128.8050dp
+ 129.8113dp
+ 130.8176dp
+ 131.8239dp
+ 132.8302dp
+ 133.8365dp
+ 134.8427dp
+ 135.8490dp
+ 136.8553dp
+ 137.8616dp
+ 138.8679dp
+ 139.8742dp
+ 140.8805dp
+ 141.8868dp
+ 142.8931dp
+ 143.8994dp
+ 144.9056dp
+ 145.9119dp
+ 146.9182dp
+ 147.9245dp
+ 148.9308dp
+ 149.9371dp
+ 150.9434dp
+ 151.9497dp
+ 152.9560dp
+ 153.9622dp
+ 154.9685dp
+ 155.9748dp
+ 156.9811dp
+ 157.9874dp
+ 158.9937dp
+ 160.0000dp
+ 161.0063dp
+ 162.0126dp
+ 163.0188dp
+ 164.0251dp
+ 165.0314dp
+ 166.0377dp
+ 167.0440dp
+ 168.0503dp
+ 169.0566dp
+ 170.0629dp
+ 171.0692dp
+ 172.0754dp
+ 173.0817dp
+ 174.0880dp
+ 175.0943dp
+ 176.1006dp
+ 177.1069dp
+ 178.1132dp
+ 179.1195dp
+ 180.1258dp
+ 181.1320dp
+ 182.1383dp
+ 183.1446dp
+ 184.1509dp
+ 185.1572dp
+ 186.1635dp
+ 187.1698dp
+ 188.1761dp
+ 189.1824dp
+ 190.1887dp
+ 191.1949dp
+ 192.2012dp
+ 193.2075dp
+ 194.2138dp
+ 195.2201dp
+ 196.2264dp
+ 197.2327dp
+ 198.2390dp
+ 199.2453dp
+ 200.2515dp
+ 201.2578dp
+ 202.2641dp
+ 203.2704dp
+ 204.2767dp
+ 205.2830dp
+ 206.2893dp
+ 207.2956dp
+ 208.3019dp
+ 209.3081dp
+ 210.3144dp
+ 211.3207dp
+ 212.3270dp
+ 213.3333dp
+ 214.3396dp
+ 215.3459dp
+ 216.3522dp
+ 217.3585dp
+ 218.3647dp
+ 219.3710dp
+ 220.3773dp
+ 221.3836dp
+ 222.3899dp
+ 223.3962dp
+ 224.4025dp
+ 225.4088dp
+ 226.4151dp
+ 227.4214dp
+ 228.4276dp
+ 229.4339dp
+ 230.4402dp
+ 231.4465dp
+ 232.4528dp
+ 233.4591dp
+ 234.4654dp
+ 235.4717dp
+ 236.4780dp
+ 237.4842dp
+ 238.4905dp
+ 239.4968dp
+ 240.5031dp
+ 241.5094dp
+ 242.5157dp
+ 243.5220dp
+ 244.5283dp
+ 245.5346dp
+ 246.5408dp
+ 247.5471dp
+ 248.5534dp
+ 249.5597dp
+ 250.5660dp
+ 251.5723dp
+ 252.5786dp
+ 253.5849dp
+ 254.5912dp
+ 255.5974dp
+ 256.6037dp
+ 257.6100dp
+ 258.6163dp
+ 259.6226dp
+ 260.6289dp
+ 261.6352dp
+ 262.6415dp
+ 263.6478dp
+ 264.6541dp
+ 265.6603dp
+ 266.6666dp
+ 267.6729dp
+ 268.6792dp
+ 269.6855dp
+ 270.6918dp
+ 271.6981dp
+ 272.7044dp
+ 273.7107dp
+ 274.7169dp
+ 275.7232dp
+ 276.7295dp
+ 277.7358dp
+ 278.7421dp
+ 279.7484dp
+ 280.7547dp
+ 281.7610dp
+ 282.7673dp
+ 283.7735dp
+ 284.7798dp
+ 285.7861dp
+ 286.7924dp
+ 287.7987dp
+ 288.8050dp
+ 289.8113dp
+ 290.8176dp
+ 291.8239dp
+ 292.8301dp
+ 293.8364dp
+ 294.8427dp
+ 295.8490dp
+ 296.8553dp
+ 297.8616dp
+ 298.8679dp
+ 299.8742dp
+ 300.8805dp
+ 301.8868dp
+ 302.8930dp
+ 303.8993dp
+ 304.9056dp
+ 305.9119dp
+ 306.9182dp
+ 307.9245dp
+ 308.9308dp
+ 309.9371dp
+ 310.9434dp
+ 311.9496dp
+ 312.9559dp
+ 313.9622dp
+ 314.9685dp
+ 315.9748dp
+ 316.9811dp
+ 317.9874dp
+ 318.9937dp
+ 320.0000dp
+ 321.0062dp
+ 322.0125dp
+ 323.0188dp
+ 324.0251dp
+ 325.0314dp
+ 326.0377dp
+ 327.0440dp
+ 328.0503dp
+ 329.0566dp
+ 330.0628dp
+ 331.0691dp
+ 332.0754dp
+ 333.0817dp
+ 334.0880dp
+ 335.0943dp
+ 336.1006dp
+ 337.1069dp
+ 338.1132dp
+ 339.1194dp
+ 340.1257dp
+ 341.1320dp
+ 342.1383dp
+ 343.1446dp
+ 344.1509dp
+ 345.1572dp
+ 346.1635dp
+ 347.1698dp
+ 348.1761dp
+ 349.1823dp
+ 350.1886dp
+ 351.1949dp
+ 352.2012dp
+ 353.2075dp
+ 354.2138dp
+ 355.2201dp
+ 356.2264dp
+ 357.2327dp
+ 358.2389dp
+ 359.2452dp
+ 360.2515dp
+ 361.2578dp
+ 362.2641dp
+ 367.2955dp
+ 372.3270dp
+ 402.5157dp
+ 412.5786dp
+ 424.6540dp
+ 474.9685dp
+ 503.1446dp
+ 603.7735dp
+ 644.0251dp
+ 724.5282dp
+ 1.0063sp
+ 2.0126sp
+ 3.0189sp
+ 4.0252sp
+ 5.0314sp
+ 6.0377sp
+ 7.0440sp
+ 8.0503sp
+ 9.0566sp
+ 10.0629sp
+ 11.0692sp
+ 12.0755sp
+ 13.0818sp
+ 14.0880sp
+ 15.0943sp
+ 16.1006sp
+ 17.1069sp
+ 18.1132sp
+ 19.1195sp
+ 20.1258sp
+ 21.1321sp
+ 22.1384sp
+ 23.1447sp
+ 24.1509sp
+ 25.1572sp
+ 28.1761sp
+ 30.1887sp
+ 32.2013sp
+ 34.2138sp
+ 36.2264sp
+ 38.2390sp
+ 40.2516sp
+ 42.2641sp
+ 48.3019sp
+
diff --git a/res/values-sw384dp/dimens.xml b/res/values-sw384dp/dimens.xml
new file mode 100644
index 0000000..4cfeee5
--- /dev/null
+++ b/res/values-sw384dp/dimens.xml
@@ -0,0 +1,427 @@
+
+
+ 17.0667dp
+ 17.0667dp
+ 19.2000sp
+ 10.6667dp
+ -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
+ 1.0667sp
+ 2.1333sp
+ 3.2000sp
+ 4.2667sp
+ 5.3333sp
+ 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/res/values-sw392dp/dimens.xml b/res/values-sw392dp/dimens.xml
new file mode 100644
index 0000000..07ab6b6
--- /dev/null
+++ b/res/values-sw392dp/dimens.xml
@@ -0,0 +1,427 @@
+
+
+ 17.4545dp
+ 17.4545dp
+ 19.6364sp
+ 10.9091dp
+ -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
+ 1.0909sp
+ 2.1818sp
+ 3.2727sp
+ 4.3636sp
+ 5.4545sp
+ 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/res/values-sw400dp/dimens.xml b/res/values-sw400dp/dimens.xml
new file mode 100644
index 0000000..1866b65
--- /dev/null
+++ b/res/values-sw400dp/dimens.xml
@@ -0,0 +1,427 @@
+
+
+ 17.7778dp
+ 17.7778dp
+ 20.0000sp
+ 11.1111dp
+ -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
+ 1.1111sp
+ 2.2222sp
+ 3.3333sp
+ 4.4444sp
+ 5.5556sp
+ 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/res/values-sw410dp/dimens.xml b/res/values-sw410dp/dimens.xml
new file mode 100644
index 0000000..2667a21
--- /dev/null
+++ b/res/values-sw410dp/dimens.xml
@@ -0,0 +1,427 @@
+
+
+ 18.2222dp
+ 18.2222dp
+ 20.5000sp
+ 11.3889dp
+ -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
+ 1.1389sp
+ 2.2778sp
+ 3.4167sp
+ 4.5556sp
+ 5.6944sp
+ 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/res/values-sw411dp/dimens.xml b/res/values-sw411dp/dimens.xml
new file mode 100644
index 0000000..1db36d1
--- /dev/null
+++ b/res/values-sw411dp/dimens.xml
@@ -0,0 +1,427 @@
+
+
+ 18.2857dp
+ 18.2857dp
+ 20.5714sp
+ 11.4286dp
+ -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
+ 1.1429sp
+ 2.2857sp
+ 3.4286sp
+ 4.5714sp
+ 5.7143sp
+ 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/res/values-sw432dp/dimens.xml b/res/values-sw432dp/dimens.xml
new file mode 100644
index 0000000..4e0944f
--- /dev/null
+++ b/res/values-sw432dp/dimens.xml
@@ -0,0 +1,427 @@
+
+
+ 19.2000dp
+ 19.2000dp
+ 21.6000sp
+ 12.0000dp
+ -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
+ 1.2000sp
+ 2.4000sp
+ 3.6000sp
+ 4.8000sp
+ 6.0000sp
+ 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/res/values-sw451dp/dimens.xml b/res/values-sw451dp/dimens.xml
new file mode 100644
index 0000000..77dd464
--- /dev/null
+++ b/res/values-sw451dp/dimens.xml
@@ -0,0 +1,427 @@
+
+
+ 20.0784dp
+ 20.0784dp
+ 22.5882sp
+ 12.5490dp
+ -75.2941dp
+ -37.6471dp
+ -25.0980dp
+ -15.0588dp
+ -12.5490dp
+ -10.0392dp
+ -6.2745dp
+ -2.5098dp
+ -1.2549dp
+ 0.0000dp
+ 0.1255dp
+ 0.6275dp
+ 1.2549dp
+ 1.8824dp
+ 2.5098dp
+ 3.1373dp
+ 3.7647dp
+ 4.3922dp
+ 5.0196dp
+ 5.6471dp
+ 6.2745dp
+ 7.5294dp
+ 8.7843dp
+ 10.0392dp
+ 11.2941dp
+ 12.5490dp
+ 13.8039dp
+ 15.0588dp
+ 16.3137dp
+ 17.5686dp
+ 18.8235dp
+ 20.0784dp
+ 21.3333dp
+ 22.5882dp
+ 23.8431dp
+ 25.0980dp
+ 26.3529dp
+ 27.6078dp
+ 28.8627dp
+ 30.1176dp
+ 31.3725dp
+ 32.6275dp
+ 33.8824dp
+ 35.1373dp
+ 36.3922dp
+ 37.6471dp
+ 38.9020dp
+ 40.1569dp
+ 41.4118dp
+ 42.6667dp
+ 43.9216dp
+ 45.1765dp
+ 46.4314dp
+ 47.6863dp
+ 48.9412dp
+ 50.1961dp
+ 51.4510dp
+ 52.7059dp
+ 53.9608dp
+ 55.2157dp
+ 56.4706dp
+ 57.7255dp
+ 58.9804dp
+ 60.2353dp
+ 61.4902dp
+ 62.7451dp
+ 64.0000dp
+ 65.2549dp
+ 66.5098dp
+ 67.7647dp
+ 69.0196dp
+ 70.2745dp
+ 71.5294dp
+ 72.7843dp
+ 74.0392dp
+ 75.2941dp
+ 76.5490dp
+ 77.8039dp
+ 79.0588dp
+ 80.3137dp
+ 81.5686dp
+ 82.8235dp
+ 84.0784dp
+ 85.3333dp
+ 86.5882dp
+ 87.8431dp
+ 89.0980dp
+ 90.3529dp
+ 91.6078dp
+ 92.8627dp
+ 94.1176dp
+ 95.3725dp
+ 96.6274dp
+ 97.8824dp
+ 99.1373dp
+ 100.3922dp
+ 101.6471dp
+ 102.9020dp
+ 104.1569dp
+ 105.4118dp
+ 106.6667dp
+ 107.9216dp
+ 109.1765dp
+ 110.4314dp
+ 111.6863dp
+ 112.9412dp
+ 114.1961dp
+ 115.4510dp
+ 116.7059dp
+ 117.9608dp
+ 119.2157dp
+ 120.4706dp
+ 121.7255dp
+ 122.9804dp
+ 124.2353dp
+ 125.4902dp
+ 126.7451dp
+ 128.0000dp
+ 129.2549dp
+ 130.5098dp
+ 131.7647dp
+ 133.0196dp
+ 134.2745dp
+ 135.5294dp
+ 136.7843dp
+ 138.0392dp
+ 139.2941dp
+ 140.5490dp
+ 141.8039dp
+ 143.0588dp
+ 144.3137dp
+ 145.5686dp
+ 146.8235dp
+ 148.0784dp
+ 149.3333dp
+ 150.5882dp
+ 151.8431dp
+ 153.0980dp
+ 154.3529dp
+ 155.6078dp
+ 156.8627dp
+ 158.1176dp
+ 159.3725dp
+ 160.6274dp
+ 161.8824dp
+ 163.1373dp
+ 164.3922dp
+ 165.6471dp
+ 166.9020dp
+ 168.1569dp
+ 169.4118dp
+ 170.6667dp
+ 171.9216dp
+ 173.1765dp
+ 174.4314dp
+ 175.6863dp
+ 176.9412dp
+ 178.1961dp
+ 179.4510dp
+ 180.7059dp
+ 181.9608dp
+ 183.2157dp
+ 184.4706dp
+ 185.7255dp
+ 186.9804dp
+ 188.2353dp
+ 189.4902dp
+ 190.7451dp
+ 192.0000dp
+ 193.2549dp
+ 194.5098dp
+ 195.7647dp
+ 197.0196dp
+ 198.2745dp
+ 199.5294dp
+ 200.7843dp
+ 202.0392dp
+ 203.2941dp
+ 204.5490dp
+ 205.8039dp
+ 207.0588dp
+ 208.3137dp
+ 209.5686dp
+ 210.8235dp
+ 212.0784dp
+ 213.3333dp
+ 214.5882dp
+ 215.8431dp
+ 217.0980dp
+ 218.3529dp
+ 219.6078dp
+ 220.8627dp
+ 222.1176dp
+ 223.3725dp
+ 224.6274dp
+ 225.8824dp
+ 227.1373dp
+ 228.3922dp
+ 229.6471dp
+ 230.9020dp
+ 232.1569dp
+ 233.4118dp
+ 234.6667dp
+ 235.9216dp
+ 237.1765dp
+ 238.4314dp
+ 239.6863dp
+ 240.9412dp
+ 242.1961dp
+ 243.4510dp
+ 244.7059dp
+ 245.9608dp
+ 247.2157dp
+ 248.4706dp
+ 249.7255dp
+ 250.9804dp
+ 252.2353dp
+ 253.4902dp
+ 254.7451dp
+ 256.0000dp
+ 257.2549dp
+ 258.5098dp
+ 259.7647dp
+ 261.0196dp
+ 262.2745dp
+ 263.5294dp
+ 264.7843dp
+ 266.0392dp
+ 267.2941dp
+ 268.5490dp
+ 269.8039dp
+ 271.0588dp
+ 272.3137dp
+ 273.5686dp
+ 274.8235dp
+ 276.0784dp
+ 277.3333dp
+ 278.5882dp
+ 279.8431dp
+ 281.0980dp
+ 282.3529dp
+ 283.6078dp
+ 284.8627dp
+ 286.1176dp
+ 287.3725dp
+ 288.6274dp
+ 289.8823dp
+ 291.1373dp
+ 292.3922dp
+ 293.6471dp
+ 294.9020dp
+ 296.1569dp
+ 297.4118dp
+ 298.6667dp
+ 299.9216dp
+ 301.1765dp
+ 302.4314dp
+ 303.6863dp
+ 304.9412dp
+ 306.1961dp
+ 307.4510dp
+ 308.7059dp
+ 309.9608dp
+ 311.2157dp
+ 312.4706dp
+ 313.7255dp
+ 314.9804dp
+ 316.2353dp
+ 317.4902dp
+ 318.7451dp
+ 320.0000dp
+ 321.2549dp
+ 322.5098dp
+ 323.7647dp
+ 325.0196dp
+ 326.2745dp
+ 327.5294dp
+ 328.7843dp
+ 330.0392dp
+ 331.2941dp
+ 332.5490dp
+ 333.8039dp
+ 335.0588dp
+ 336.3137dp
+ 337.5686dp
+ 338.8235dp
+ 340.0784dp
+ 341.3333dp
+ 342.5882dp
+ 343.8431dp
+ 345.0980dp
+ 346.3529dp
+ 347.6078dp
+ 348.8627dp
+ 350.1176dp
+ 351.3725dp
+ 352.6274dp
+ 353.8823dp
+ 355.1373dp
+ 356.3922dp
+ 357.6471dp
+ 358.9020dp
+ 360.1569dp
+ 361.4118dp
+ 362.6667dp
+ 363.9216dp
+ 365.1765dp
+ 366.4314dp
+ 367.6863dp
+ 368.9412dp
+ 370.1961dp
+ 371.4510dp
+ 372.7059dp
+ 373.9608dp
+ 375.2157dp
+ 376.4706dp
+ 377.7255dp
+ 378.9804dp
+ 380.2353dp
+ 381.4902dp
+ 382.7451dp
+ 384.0000dp
+ 385.2549dp
+ 386.5098dp
+ 387.7647dp
+ 389.0196dp
+ 390.2745dp
+ 391.5294dp
+ 392.7843dp
+ 394.0392dp
+ 395.2941dp
+ 396.5490dp
+ 397.8039dp
+ 399.0588dp
+ 400.3137dp
+ 401.5686dp
+ 402.8235dp
+ 404.0784dp
+ 405.3333dp
+ 406.5882dp
+ 407.8431dp
+ 409.0980dp
+ 410.3529dp
+ 411.6078dp
+ 412.8627dp
+ 414.1176dp
+ 415.3725dp
+ 416.6274dp
+ 417.8823dp
+ 419.1372dp
+ 420.3922dp
+ 421.6471dp
+ 422.9020dp
+ 424.1569dp
+ 425.4118dp
+ 426.6667dp
+ 427.9216dp
+ 429.1765dp
+ 430.4314dp
+ 431.6863dp
+ 432.9412dp
+ 434.1961dp
+ 435.4510dp
+ 436.7059dp
+ 437.9608dp
+ 439.2157dp
+ 440.4706dp
+ 441.7255dp
+ 442.9804dp
+ 444.2353dp
+ 445.4902dp
+ 446.7451dp
+ 448.0000dp
+ 449.2549dp
+ 450.5098dp
+ 451.7647dp
+ 458.0392dp
+ 464.3137dp
+ 501.9608dp
+ 514.5098dp
+ 529.5686dp
+ 592.3137dp
+ 627.4510dp
+ 752.9412dp
+ 803.1372dp
+ 903.5294dp
+ 1.2549sp
+ 2.5098sp
+ 3.7647sp
+ 5.0196sp
+ 6.2745sp
+ 7.5294sp
+ 8.7843sp
+ 10.0392sp
+ 11.2941sp
+ 12.5490sp
+ 13.8039sp
+ 15.0588sp
+ 16.3137sp
+ 17.5686sp
+ 18.8235sp
+ 20.0784sp
+ 21.3333sp
+ 22.5882sp
+ 23.8431sp
+ 25.0980sp
+ 26.3529sp
+ 27.6078sp
+ 28.8627sp
+ 30.1176sp
+ 31.3725sp
+ 35.1373sp
+ 37.6471sp
+ 40.1569sp
+ 42.6667sp
+ 45.1765sp
+ 47.6863sp
+ 50.1961sp
+ 52.7059sp
+ 60.2353sp
+
diff --git a/res/values-sw480dp/dimens.xml b/res/values-sw480dp/dimens.xml
new file mode 100644
index 0000000..0ea4160
--- /dev/null
+++ b/res/values-sw480dp/dimens.xml
@@ -0,0 +1,427 @@
+
+
+ 21.3333dp
+ 21.3333dp
+ 24.0000sp
+ 13.3333dp
+ -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
+ 1.3333sp
+ 2.6667sp
+ 4.0000sp
+ 5.3333sp
+ 6.6667sp
+ 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/res/values-sw533dp/dimens.xml b/res/values-sw533dp/dimens.xml
new file mode 100644
index 0000000..3c84c90
--- /dev/null
+++ b/res/values-sw533dp/dimens.xml
@@ -0,0 +1,427 @@
+
+
+ 23.6889dp
+ 23.6889dp
+ 26.6500sp
+ 14.8056dp
+ -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
+ 1.4806sp
+ 2.9611sp
+ 4.4417sp
+ 5.9222sp
+ 7.4028sp
+ 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/res/values-sw540dp/dimens.xml b/res/values-sw540dp/dimens.xml
new file mode 100644
index 0000000..b5737e8
--- /dev/null
+++ b/res/values-sw540dp/dimens.xml
@@ -0,0 +1,427 @@
+
+
+ 24.0000dp
+ 24.0000dp
+ 27.0000sp
+ 15.0000dp
+ -90.0000dp
+ -45.0000dp
+ -30.0000dp
+ -18.0000dp
+ -15.0000dp
+ -12.0000dp
+ -7.5000dp
+ -3.0000dp
+ -1.5000dp
+ 0.0000dp
+ 0.1500dp
+ 0.7500dp
+ 1.5000dp
+ 2.2500dp
+ 3.0000dp
+ 3.7500dp
+ 4.5000dp
+ 5.2500dp
+ 6.0000dp
+ 6.7500dp
+ 7.5000dp
+ 9.0000dp
+ 10.5000dp
+ 12.0000dp
+ 13.5000dp
+ 15.0000dp
+ 16.5000dp
+ 18.0000dp
+ 19.5000dp
+ 21.0000dp
+ 22.5000dp
+ 24.0000dp
+ 25.5000dp
+ 27.0000dp
+ 28.5000dp
+ 30.0000dp
+ 31.5000dp
+ 33.0000dp
+ 34.5000dp
+ 36.0000dp
+ 37.5000dp
+ 39.0000dp
+ 40.5000dp
+ 42.0000dp
+ 43.5000dp
+ 45.0000dp
+ 46.5000dp
+ 48.0000dp
+ 49.5000dp
+ 51.0000dp
+ 52.5000dp
+ 54.0000dp
+ 55.5000dp
+ 57.0000dp
+ 58.5000dp
+ 60.0000dp
+ 61.5000dp
+ 63.0000dp
+ 64.5000dp
+ 66.0000dp
+ 67.5000dp
+ 69.0000dp
+ 70.5000dp
+ 72.0000dp
+ 73.5000dp
+ 75.0000dp
+ 76.5000dp
+ 78.0000dp
+ 79.5000dp
+ 81.0000dp
+ 82.5000dp
+ 84.0000dp
+ 85.5000dp
+ 87.0000dp
+ 88.5000dp
+ 90.0000dp
+ 91.5000dp
+ 93.0000dp
+ 94.5000dp
+ 96.0000dp
+ 97.5000dp
+ 99.0000dp
+ 100.5000dp
+ 102.0000dp
+ 103.5000dp
+ 105.0000dp
+ 106.5000dp
+ 108.0000dp
+ 109.5000dp
+ 111.0000dp
+ 112.5000dp
+ 114.0000dp
+ 115.5000dp
+ 117.0000dp
+ 118.5000dp
+ 120.0000dp
+ 121.5000dp
+ 123.0000dp
+ 124.5000dp
+ 126.0000dp
+ 127.5000dp
+ 129.0000dp
+ 130.5000dp
+ 132.0000dp
+ 133.5000dp
+ 135.0000dp
+ 136.5000dp
+ 138.0000dp
+ 139.5000dp
+ 141.0000dp
+ 142.5000dp
+ 144.0000dp
+ 145.5000dp
+ 147.0000dp
+ 148.5000dp
+ 150.0000dp
+ 151.5000dp
+ 153.0000dp
+ 154.5000dp
+ 156.0000dp
+ 157.5000dp
+ 159.0000dp
+ 160.5000dp
+ 162.0000dp
+ 163.5000dp
+ 165.0000dp
+ 166.5000dp
+ 168.0000dp
+ 169.5000dp
+ 171.0000dp
+ 172.5000dp
+ 174.0000dp
+ 175.5000dp
+ 177.0000dp
+ 178.5000dp
+ 180.0000dp
+ 181.5000dp
+ 183.0000dp
+ 184.5000dp
+ 186.0000dp
+ 187.5000dp
+ 189.0000dp
+ 190.5000dp
+ 192.0000dp
+ 193.5000dp
+ 195.0000dp
+ 196.5000dp
+ 198.0000dp
+ 199.5000dp
+ 201.0000dp
+ 202.5000dp
+ 204.0000dp
+ 205.5000dp
+ 207.0000dp
+ 208.5000dp
+ 210.0000dp
+ 211.5000dp
+ 213.0000dp
+ 214.5000dp
+ 216.0000dp
+ 217.5000dp
+ 219.0000dp
+ 220.5000dp
+ 222.0000dp
+ 223.5000dp
+ 225.0000dp
+ 226.5000dp
+ 228.0000dp
+ 229.5000dp
+ 231.0000dp
+ 232.5000dp
+ 234.0000dp
+ 235.5000dp
+ 237.0000dp
+ 238.5000dp
+ 240.0000dp
+ 241.5000dp
+ 243.0000dp
+ 244.5000dp
+ 246.0000dp
+ 247.5000dp
+ 249.0000dp
+ 250.5000dp
+ 252.0000dp
+ 253.5000dp
+ 255.0000dp
+ 256.5000dp
+ 258.0000dp
+ 259.5000dp
+ 261.0000dp
+ 262.5000dp
+ 264.0000dp
+ 265.5000dp
+ 267.0000dp
+ 268.5000dp
+ 270.0000dp
+ 271.5000dp
+ 273.0000dp
+ 274.5000dp
+ 276.0000dp
+ 277.5000dp
+ 279.0000dp
+ 280.5000dp
+ 282.0000dp
+ 283.5000dp
+ 285.0000dp
+ 286.5000dp
+ 288.0000dp
+ 289.5000dp
+ 291.0000dp
+ 292.5000dp
+ 294.0000dp
+ 295.5000dp
+ 297.0000dp
+ 298.5000dp
+ 300.0000dp
+ 301.5000dp
+ 303.0000dp
+ 304.5000dp
+ 306.0000dp
+ 307.5000dp
+ 309.0000dp
+ 310.5000dp
+ 312.0000dp
+ 313.5000dp
+ 315.0000dp
+ 316.5000dp
+ 318.0000dp
+ 319.5000dp
+ 321.0000dp
+ 322.5000dp
+ 324.0000dp
+ 325.5000dp
+ 327.0000dp
+ 328.5000dp
+ 330.0000dp
+ 331.5000dp
+ 333.0000dp
+ 334.5000dp
+ 336.0000dp
+ 337.5000dp
+ 339.0000dp
+ 340.5000dp
+ 342.0000dp
+ 343.5000dp
+ 345.0000dp
+ 346.5000dp
+ 348.0000dp
+ 349.5000dp
+ 351.0000dp
+ 352.5000dp
+ 354.0000dp
+ 355.5000dp
+ 357.0000dp
+ 358.5000dp
+ 360.0000dp
+ 361.5000dp
+ 363.0000dp
+ 364.5000dp
+ 366.0000dp
+ 367.5000dp
+ 369.0000dp
+ 370.5000dp
+ 372.0000dp
+ 373.5000dp
+ 375.0000dp
+ 376.5000dp
+ 378.0000dp
+ 379.5000dp
+ 381.0000dp
+ 382.5000dp
+ 384.0000dp
+ 385.5000dp
+ 387.0000dp
+ 388.5000dp
+ 390.0000dp
+ 391.5000dp
+ 393.0000dp
+ 394.5000dp
+ 396.0000dp
+ 397.5000dp
+ 399.0000dp
+ 400.5000dp
+ 402.0000dp
+ 403.5000dp
+ 405.0000dp
+ 406.5000dp
+ 408.0000dp
+ 409.5000dp
+ 411.0000dp
+ 412.5000dp
+ 414.0000dp
+ 415.5000dp
+ 417.0000dp
+ 418.5000dp
+ 420.0000dp
+ 421.5000dp
+ 423.0000dp
+ 424.5000dp
+ 426.0000dp
+ 427.5000dp
+ 429.0000dp
+ 430.5000dp
+ 432.0000dp
+ 433.5000dp
+ 435.0000dp
+ 436.5000dp
+ 438.0000dp
+ 439.5000dp
+ 441.0000dp
+ 442.5000dp
+ 444.0000dp
+ 445.5000dp
+ 447.0000dp
+ 448.5000dp
+ 450.0000dp
+ 451.5000dp
+ 453.0000dp
+ 454.5000dp
+ 456.0000dp
+ 457.5000dp
+ 459.0000dp
+ 460.5000dp
+ 462.0000dp
+ 463.5000dp
+ 465.0000dp
+ 466.5000dp
+ 468.0000dp
+ 469.5000dp
+ 471.0000dp
+ 472.5000dp
+ 474.0000dp
+ 475.5000dp
+ 477.0000dp
+ 478.5000dp
+ 480.0000dp
+ 481.5000dp
+ 483.0000dp
+ 484.5000dp
+ 486.0000dp
+ 487.5000dp
+ 489.0000dp
+ 490.5000dp
+ 492.0000dp
+ 493.5000dp
+ 495.0000dp
+ 496.5000dp
+ 498.0000dp
+ 499.5000dp
+ 501.0000dp
+ 502.5000dp
+ 504.0000dp
+ 505.5000dp
+ 507.0000dp
+ 508.5000dp
+ 510.0000dp
+ 511.5000dp
+ 513.0000dp
+ 514.5000dp
+ 516.0000dp
+ 517.5000dp
+ 519.0000dp
+ 520.5000dp
+ 522.0000dp
+ 523.5000dp
+ 525.0000dp
+ 526.5000dp
+ 528.0000dp
+ 529.5000dp
+ 531.0000dp
+ 532.5000dp
+ 534.0000dp
+ 535.5000dp
+ 537.0000dp
+ 538.5000dp
+ 540.0000dp
+ 547.5000dp
+ 555.0000dp
+ 600.0000dp
+ 615.0000dp
+ 633.0000dp
+ 708.0000dp
+ 750.0000dp
+ 900.0000dp
+ 960.0000dp
+ 1080.0000dp
+ 1.5000sp
+ 3.0000sp
+ 4.5000sp
+ 6.0000sp
+ 7.5000sp
+ 9.0000sp
+ 10.5000sp
+ 12.0000sp
+ 13.5000sp
+ 15.0000sp
+ 16.5000sp
+ 18.0000sp
+ 19.5000sp
+ 21.0000sp
+ 22.5000sp
+ 24.0000sp
+ 25.5000sp
+ 27.0000sp
+ 28.5000sp
+ 30.0000sp
+ 31.5000sp
+ 33.0000sp
+ 34.5000sp
+ 36.0000sp
+ 37.5000sp
+ 42.0000sp
+ 45.0000sp
+ 48.0000sp
+ 51.0000sp
+ 54.0000sp
+ 57.0000sp
+ 60.0000sp
+ 63.0000sp
+ 72.0000sp
+
diff --git a/res/values-sw592dp/dimens.xml b/res/values-sw592dp/dimens.xml
new file mode 100644
index 0000000..ee22ce5
--- /dev/null
+++ b/res/values-sw592dp/dimens.xml
@@ -0,0 +1,427 @@
+
+
+ 26.3111dp
+ 26.3111dp
+ 29.6000sp
+ 16.4444dp
+ -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
+ 1.6444sp
+ 3.2889sp
+ 4.9333sp
+ 6.5778sp
+ 8.2222sp
+ 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/res/values-sw600dp/dimens.xml b/res/values-sw600dp/dimens.xml
index ead666c..6fe9ef4 100644
--- a/res/values-sw600dp/dimens.xml
+++ b/res/values-sw600dp/dimens.xml
@@ -24,4 +24,429 @@
-1000dp
+
+ 26.6667dp
+ 26.6667dp
+ 30.0000sp
+ 16.6667dp
+ -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
+ 1.6667sp
+ 3.3333sp
+ 5.0000sp
+ 6.6667sp
+ 8.3333sp
+ 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/res/values-sw640dp/dimens.xml b/res/values-sw640dp/dimens.xml
new file mode 100644
index 0000000..fb79c43
--- /dev/null
+++ b/res/values-sw640dp/dimens.xml
@@ -0,0 +1,427 @@
+
+
+ 28.4444dp
+ 28.4444dp
+ 32.0000sp
+ 17.7778dp
+ -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
+ 1.7778sp
+ 3.5556sp
+ 5.3333sp
+ 7.1111sp
+ 8.8889sp
+ 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/res/values-sw662dp/dimens.xml b/res/values-sw662dp/dimens.xml
new file mode 100644
index 0000000..c310c6d
--- /dev/null
+++ b/res/values-sw662dp/dimens.xml
@@ -0,0 +1,427 @@
+
+
+ 29.4222dp
+ 29.4222dp
+ 33.1000sp
+ 18.3889dp
+ -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
+ 1.8389sp
+ 3.6778sp
+ 5.5167sp
+ 7.3556sp
+ 9.1944sp
+ 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/res/values-sw720dp/dimens.xml b/res/values-sw720dp/dimens.xml
index 691219a..fe9b1eb 100644
--- a/res/values-sw720dp/dimens.xml
+++ b/res/values-sw720dp/dimens.xml
@@ -25,4 +25,429 @@
13dp
32dp
+
+ 32.0000dp
+ 32.0000dp
+ 36.0000sp
+ 20.0000dp
+ -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
+ 2.0000sp
+ 4.0000sp
+ 6.0000sp
+ 8.0000sp
+ 10.0000sp
+ 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/res/values-sw768dp/dimens.xml b/res/values-sw768dp/dimens.xml
new file mode 100644
index 0000000..df01fc7
--- /dev/null
+++ b/res/values-sw768dp/dimens.xml
@@ -0,0 +1,427 @@
+
+
+ 34.1333dp
+ 34.1333dp
+ 38.4000sp
+ 21.3333dp
+ -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
+ 2.1333sp
+ 4.2667sp
+ 6.4000sp
+ 8.5333sp
+ 10.6667sp
+ 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/res/values-sw800dp/dimens.xml b/res/values-sw800dp/dimens.xml
new file mode 100644
index 0000000..74ef70d
--- /dev/null
+++ b/res/values-sw800dp/dimens.xml
@@ -0,0 +1,427 @@
+
+
+ 35.5556dp
+ 35.5556dp
+ 40.0000sp
+ 22.2222dp
+ -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
+ 2.2222sp
+ 4.4444sp
+ 6.6667sp
+ 8.8889sp
+ 11.1111sp
+ 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/res/values-sw811dp/dimens.xml b/res/values-sw811dp/dimens.xml
new file mode 100644
index 0000000..9afc313
--- /dev/null
+++ b/res/values-sw811dp/dimens.xml
@@ -0,0 +1,427 @@
+
+
+ 36.0444dp
+ 36.0444dp
+ 40.5500sp
+ 22.5278dp
+ -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
+ 2.2528sp
+ 4.5056sp
+ 6.7583sp
+ 9.0111sp
+ 11.2639sp
+ 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/res/values-sw820dp/dimens.xml b/res/values-sw820dp/dimens.xml
new file mode 100644
index 0000000..226311a
--- /dev/null
+++ b/res/values-sw820dp/dimens.xml
@@ -0,0 +1,427 @@
+
+
+ 36.4444dp
+ 36.4444dp
+ 41.0000sp
+ 22.7778dp
+ -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
+ 2.2778sp
+ 4.5556sp
+ 6.8333sp
+ 9.1111sp
+ 11.3889sp
+ 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/res/values-sw960dp/dimens.xml b/res/values-sw960dp/dimens.xml
new file mode 100644
index 0000000..9620cd6
--- /dev/null
+++ b/res/values-sw960dp/dimens.xml
@@ -0,0 +1,427 @@
+
+
+ 42.6667dp
+ 42.6667dp
+ 48.0000sp
+ 26.6667dp
+ -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
+ 2.6667sp
+ 5.3333sp
+ 8.0000sp
+ 10.6667sp
+ 13.3333sp
+ 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/res/values-sw961dp/dimens.xml b/res/values-sw961dp/dimens.xml
new file mode 100644
index 0000000..8edc9ea
--- /dev/null
+++ b/res/values-sw961dp/dimens.xml
@@ -0,0 +1,427 @@
+
+
+ 42.7111dp
+ 42.7111dp
+ 48.0500sp
+ 26.6944dp
+ -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
+ 2.6694sp
+ 5.3389sp
+ 8.0083sp
+ 10.6778sp
+ 13.3472sp
+ 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/res/values/attrs.xml b/res/values/attrs.xml
index 69b8c8a..c7122f9 100644
--- a/res/values/attrs.xml
+++ b/res/values/attrs.xml
@@ -171,4 +171,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 59bb8e2..73c2379 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -45,5 +45,11 @@
#4880ff
#CD000000
+ #EFEFEF
+ #ffffff
+ #000000
+ #0480FF
+ #cecece
+ #00D56B
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 4bcb8a7..0641cd0 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -235,4 +235,429 @@
8dp
+
+
+
+ -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
+
+
+ 1sp
+ 2sp
+ 3sp
+ 4sp
+ 5sp
+ 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/res/values/strings.xml b/res/values/strings.xml
index f78f839..6b2acdd 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -24,6 +24,7 @@
Launcher3
管控桌面
+ 爱心闹钟
文件夹
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 797cd9a..14ea85b 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -239,4 +239,46 @@
- true
+
+
+
+
+
+
diff --git a/res/xml/device_profiles.xml b/res/xml/device_profiles.xml
index 73b1e28..a7dd159 100644
--- a/res/xml/device_profiles.xml
+++ b/res/xml/device_profiles.xml
@@ -135,7 +135,7 @@
launcher:name="Large Phone"
launcher:minWidthDps="406"
launcher:minHeightDps="694"
- launcher:iconImageSize="80"
+ launcher:iconImageSize="75"
launcher:iconTextSize="14.4"
launcher:canBeDefault="true" />
diff --git a/settings.gradle b/settings.gradle
index 10d03a7..4c087ff 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,3 +1,3 @@
-include ':IconLoader'
+include ':IconLoader', ':niceimageview'
project(':IconLoader').projectDir = new File(rootDir, 'iconloaderlib')
rootProject.name='酷信桌面'
\ No newline at end of file
diff --git a/src/com/uiuipad/os/Launcher.java b/src/com/uiuipad/os/Launcher.java
index 54698b9..a8dc7f9 100644
--- a/src/com/uiuipad/os/Launcher.java
+++ b/src/com/uiuipad/os/Launcher.java
@@ -521,6 +521,7 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns,
Log.e("AliyunPush", "init cloudchannel failed -- errorcode:" + errorCode + " -- errorMessage:" + errorMessage);
}
});
+ NetInterfaceManager.getInstance().getAlarmClock();
}
MainService.MainBinder mMainBinder;
diff --git a/src/com/uiuipad/os/alarm/AlarmActivity.java b/src/com/uiuipad/os/alarm/AlarmActivity.java
new file mode 100644
index 0000000..0466fba
--- /dev/null
+++ b/src/com/uiuipad/os/alarm/AlarmActivity.java
@@ -0,0 +1,255 @@
+package com.uiuipad.os.alarm;
+
+import android.content.Intent;
+import android.util.Log;
+import android.view.View;
+import android.widget.ImageView;
+
+import androidx.annotation.NonNull;
+import androidx.constraintlayout.widget.ConstraintLayout;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.trello.rxlifecycle4.RxLifecycle;
+import com.trello.rxlifecycle4.android.ActivityEvent;
+import com.uiuipad.os.R;
+import com.uiuipad.os.network.NetInterfaceManager;
+import com.uiuipad.os.uiuiutils.ToastUtil;
+
+import java.util.List;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
+
+public class AlarmActivity extends BaseActivity implements AlarmContact.AlarmView {
+ private static final String TAG = AlarmActivity.class.getSimpleName();
+
+ @BindView(R.id.cl_exit)
+ ConstraintLayout cl_exit;
+ @BindView(R.id.cl_all)
+ ConstraintLayout cl_all;
+ @BindView(R.id.cl_medicine)
+ ConstraintLayout cl_medicine;
+ @BindView(R.id.cl_look)
+ ConstraintLayout cl_look;
+ @BindView(R.id.cl_reserve)
+ ConstraintLayout cl_reserve;
+
+ @BindView(R.id.rv_data)
+ RecyclerView rv_data;
+ @BindView(R.id.cl_nodata)
+ ConstraintLayout cl_nodata;
+
+ @BindView(R.id.imageView2)
+ ImageView imageView2;
+ @BindView(R.id.imageView4)
+ ImageView imageView4;
+ @BindView(R.id.imageView6)
+ ImageView imageView6;
+ @BindView(R.id.imageView8)
+ ImageView imageView8;
+
+ @BindView(R.id.iv_add)
+ ImageView iv_add;
+
+ private AlarmPresenter mPresenter;
+ private AlarmAdapter mAlarmAdapter;
+
+ /**
+ * 设置布局
+ */
+ @Override
+ public int getLayoutId() {
+ return R.layout.activity_alarm;
+ }
+
+ /**
+ * 初始化视图
+ */
+ @Override
+ public void initView() {
+ ButterKnife.bind(this);
+ mPresenter = new AlarmPresenter(this);
+ mPresenter.attachView(this);
+ mPresenter.setLifecycle(lifecycleSubject);
+
+ mAlarmAdapter = new AlarmAdapter();
+ mAlarmAdapter.setOnLongClickListener(new AlarmAdapter.OnLongClickListener() {
+ @Override
+ public void onLongClick(AlarmClockData alarmClockData) {
+// showDialog(alarmClockData);
+ }
+ });
+ rv_data.setLayoutManager(new LinearLayoutManager(AlarmActivity.this));
+ rv_data.setAdapter(mAlarmAdapter);
+ switchItem(0);
+ cl_exit.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ finish();
+ }
+ });
+ cl_all.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ switchItem(0);
+ mPresenter.getAlarmClock(0);
+ }
+ });
+ cl_medicine.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ switchItem(1);
+ mPresenter.getAlarmClock(1);
+ }
+ });
+ cl_look.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ switchItem(2);
+ mPresenter.getAlarmClock(2);
+ }
+ });
+ cl_reserve.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ switchItem(3);
+ mPresenter.getAlarmClock(3);
+ }
+ });
+
+ iv_add.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+// startActivity(new Intent(AlarmActivity.this, AlarmClockAddActivity.class));
+ }
+ });
+ }
+
+ /**
+ * 初始化数据
+ */
+ @Override
+ public void initData() {
+ mPresenter.getAlarmClock(0);
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ mPresenter.getAlarmClock();
+ }
+
+ private void switchItem(int position) {
+ cl_all.setBackground(null);
+ cl_medicine.setBackground(null);
+ cl_look.setBackground(null);
+ cl_reserve.setBackground(null);
+ imageView2.setImageDrawable(null);
+ imageView4.setImageDrawable(null);
+ imageView6.setImageDrawable(null);
+ imageView8.setImageDrawable(null);
+
+ switch (position) {
+ case 0:
+ default:
+ cl_all.setBackground(getDrawable(R.drawable.alarm_pressed_background));
+ imageView2.setImageDrawable(getDrawable(R.drawable.icon_touch));
+ break;
+ case 1:
+ cl_medicine.setBackground(getDrawable(R.drawable.alarm_pressed_background));
+ imageView4.setImageDrawable(getDrawable(R.drawable.icon_touch));
+ break;
+ case 2:
+ cl_look.setBackground(getDrawable(R.drawable.alarm_pressed_background));
+ imageView6.setImageDrawable(getDrawable(R.drawable.icon_touch));
+ break;
+ case 3:
+ cl_reserve.setBackground(getDrawable(R.drawable.alarm_pressed_background));
+ imageView8.setImageDrawable(getDrawable(R.drawable.icon_touch));
+ break;
+ }
+ }
+
+
+// private void showDialog(AlarmClockData alarmClockData) {
+// DeleteDialog dialog = new DeleteDialog(this);
+// dialog.setTitle("提醒")
+// .setMessage("是否要删除本次闹钟")
+// .setPositive("确定")
+// .setNegtive("取消")
+// .setOnClickBottomListener(new DeleteDialog.OnClickBottomListener() {
+// @Override
+// public void onPositiveClick() {
+// deleteAlarm(alarmClockData);
+// dialog.dismiss();
+// }
+//
+// @Override
+// public void onNegtiveClick() {
+// dialog.dismiss();
+// }
+// });
+// dialog.show();
+// }
+
+// private void deleteAlarm(AlarmClockData alarmClockData) {
+// if (alarmClockData.isIs_local()) {
+// alarmClockData.setDeleted(true);
+// AlarmUtils.getInstance().deleteAlarmClock(alarmClockData);
+// } else {
+// NetInterfaceManager.getInstance().deleteAlarmClockObservable(alarmClockData.getId())
+// .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY))
+// .subscribe(new Observer() {
+// @Override
+// public void onSubscribe(@NonNull Disposable d) {
+// Log.e("deleteAlarm", "onSubscribe: ");
+// }
+//
+// @Override
+// public void onNext(@NonNull BaseResponse baseResponse) {
+// Log.e("deleteAlarm", "onNext: " + baseResponse);
+// if (baseResponse.code == 200) {
+// AlarmUtils.getInstance().deleteAlarmClock(alarmClockData);
+// ToastUtil.show("删除成功");
+// } else {
+// ToastUtil.show("删除失败:" + baseResponse.msg);
+// }
+// }
+//
+// @Override
+// public void onError(@NonNull Throwable e) {
+// Log.e("deleteAlarm", "onError: " + e.getMessage());
+// alarmClockData.setDeleted(true);
+// AlarmUtils.getInstance().updateAlarmClock(alarmClockData);
+// onComplete();
+// }
+//
+// @Override
+// public void onComplete() {
+// Log.e("deleteAlarm", "onComplete: ");
+// mPresenter.getAlarmClock(0);
+// }
+// });
+// }
+// }
+
+
+ @Override
+ public void setAlarmClock(List alarmClockData) {
+ if (alarmClockData == null || alarmClockData.size() == 0) {
+ mAlarmAdapter.setAlarmClockData(null);
+// swipeRefreshLayout.setRefreshing(false);
+ cl_nodata.setVisibility(View.VISIBLE);
+ rv_data.setVisibility(View.GONE);
+ ToastUtil.show("没有数据");
+ } else {
+ mAlarmAdapter.setAlarmClockData(alarmClockData);
+// swipeRefreshLayout.setRefreshing(false);
+ cl_nodata.setVisibility(View.GONE);
+ rv_data.setVisibility(View.VISIBLE);
+ }
+ }
+}
diff --git a/src/com/uiuipad/os/alarm/AlarmAdapter.java b/src/com/uiuipad/os/alarm/AlarmAdapter.java
new file mode 100644
index 0000000..c3e6078
--- /dev/null
+++ b/src/com/uiuipad/os/alarm/AlarmAdapter.java
@@ -0,0 +1,286 @@
+package com.uiuipad.os.alarm;
+
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.media.AudioAttributes;
+import android.media.MediaPlayer;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.constraintlayout.widget.ConstraintLayout;
+import androidx.fragment.app.FragmentActivity;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
+import com.bumptech.glide.request.RequestOptions;
+import com.uiuipad.os.R;
+import com.uiuipad.os.uiuiutils.FFmpegUtils;
+import com.uiuipad.os.uiuiutils.ScreenUtils;
+import com.uiuipad.os.uiuiutils.Utils;
+
+import java.io.File;
+import java.io.IOException;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.regex.Pattern;
+
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
+
+public class AlarmAdapter extends RecyclerView.Adapter {
+
+ private FragmentActivity mContext;
+ private List mAlarmClockData;
+ private OnLongClickListener mOnLongClickListener;
+
+ public void setAlarmClockData(List alarmClockData) {
+ this.mAlarmClockData = alarmClockData;
+ notifyDataSetChanged();
+ }
+
+ public void setOnLongClickListener(OnLongClickListener onLongClickListener) {
+ this.mOnLongClickListener = onLongClickListener;
+ }
+
+ public interface OnLongClickListener {
+ void onLongClick(AlarmClockData alarmClockData);
+ }
+
+ @NonNull
+ @Override
+ public holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ mContext = (FragmentActivity) parent.getContext();
+ return new AlarmAdapter.holder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_alarm, parent, false));
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull holder holder, int position) {
+ AlarmClockData alarmClockData = mAlarmClockData.get(position);
+ switch (alarmClockData.getType()) {
+ case AlarmUtils.ONCE:
+ try {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+ Date date = sdf.parse(alarmClockData.getTime());
+ SimpleDateFormat hours = new SimpleDateFormat("HH:mm");
+ String time = hours.format(date);
+ holder.tv_time.setText(time);
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+ holder.tv_remind_type.setText("一次");
+ holder.tv_remind_type.setBackgroundResource(R.drawable.tv_times_bg_once);
+ break;
+ case AlarmUtils.LOOP:
+ holder.tv_time.setText(alarmClockData.getTime());
+ holder.tv_remind_type.setText("每天");
+ holder.tv_remind_type.setBackgroundResource(R.drawable.tv_times_bg_loop);
+ break;
+ case AlarmUtils.WORKING_DAY:
+ holder.tv_time.setText(alarmClockData.getTime());
+ holder.tv_remind_type.setText("周一至周五");
+ holder.tv_remind_type.setBackgroundResource(R.drawable.tv_times_bg_work);
+ break;
+ case AlarmUtils.OFF_DAY:
+ holder.tv_time.setText(alarmClockData.getTime());
+ holder.tv_remind_type.setText("周六至周日");
+ holder.tv_remind_type.setBackgroundResource(R.drawable.tv_times_bg_offday);
+ break;
+ default:
+ }
+ String title = alarmClockData.getTitle();
+ if (TextUtils.isEmpty(title)) {
+ holder.tv_title.setText("无标题");
+ } else {
+ holder.tv_title.setText(title);
+ }
+ int is_onoff = alarmClockData.getIs_onoff();
+ holder.toggleButton2.setDisable(true);
+ if (is_onoff == 1) {
+ holder.tv_status.setText("已开启");
+ holder.toggleButton2.setToggleOn(false);
+ } else {
+ holder.tv_status.setText("已关闭");
+ holder.toggleButton2.setToggleOff(false);
+ }
+// int type = alarmClockData.getClazz();
+// switch (type){
+// case 1:
+// default:
+// holder.iv_type.setImageDrawable(mContext.getDrawable(R.drawable.icon_alarm_medicine));
+// break;
+// case 2:
+// holder.iv_type.setImageDrawable(mContext.getDrawable(R.drawable.icon_alarm_look));
+// break;
+// case 3:
+// holder.iv_type.setImageDrawable(mContext.getDrawable(R.drawable.icon_alarm_reserve));
+// break;
+// }
+ String voice = alarmClockData.getVoice();
+ if (TextUtils.isEmpty(voice)) {
+ holder.cl_voice.setVisibility(View.GONE);
+ } else {
+ holder.cl_voice.setVisibility(View.VISIBLE);
+ MediaPlayer mMediaPlayer = new MediaPlayer();
+ mMediaPlayer.setAudioAttributes(
+ new AudioAttributes.Builder()
+ .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
+ .build()
+ );
+ mMediaPlayer.setOnCompletionListener(mp -> Log.e("setOnCompletionListener", "onCompletion: "));
+ mMediaPlayer.setOnPreparedListener(mp -> Log.e("setOnPreparedListener", "onPrepared: "));
+ mMediaPlayer.setOnErrorListener((mp, what, extra) -> false);
+ //设置音频文件到MediaPlayer对象中
+ try {
+ mMediaPlayer.setDataSource(voice);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ //让MediaPlayer对象准备,用这个方法防止加载时耗时导致anr
+ mMediaPlayer.prepareAsync();
+ FFmpegUtils.getDurationInMilliseconds(voice, new Observer() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@NonNull Integer integer) {
+ holder.tv_voice.setText(integer + "秒");
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ holder.cl_voice.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mMediaPlayer.start();
+ }
+ });
+ }
+ String fileUrl = alarmClockData.getFile();
+ if (TextUtils.isEmpty(fileUrl)) {
+ holder.cl_vp.setVisibility(View.GONE);
+ } else {
+ holder.cl_vp.setVisibility(View.VISIBLE);
+ if (isImgUrl(fileUrl)) {
+ holder.imageView.setVisibility(View.VISIBLE);
+ holder.jz_video.setVisibility(View.GONE);
+ if (!mContext.isDestroyed()) {
+ RequestOptions options = new RequestOptions().transform(new RoundedCorners(ScreenUtils.dip2px(mContext, 16F)));
+ Glide.with(mContext).load(fileUrl).apply(options).into(holder.imageView);
+ }
+ } else {
+ holder.imageView.setVisibility(View.GONE);
+ holder.jz_video.setVisibility(View.VISIBLE);
+ String fileName = Utils.getFileNamefromURL(fileUrl);
+ File file = new File(Utils.getDownLoadPath(mContext) + fileName);
+ String path;
+ if (file.exists() && !file.isDirectory()) {
+ path = file.getAbsolutePath();
+ } else {
+ path = fileUrl;
+ }
+ holder.jz_video.setUp(path, "");
+ holder.jz_video.startButton.setImageDrawable(mContext.getDrawable(R.drawable.play));
+ FFmpegUtils.loadVideoScreenshot(path, new Observer() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@NonNull Bitmap bitmap) {
+ if (!mContext.isDestroyed()) {
+ RequestOptions options = new RequestOptions().transform(new RoundedCorners(ScreenUtils.dip2px(mContext, 16F)));
+ Glide.with(mContext).load(bitmap).apply(options).into(holder.jz_video.posterImageView);
+// Glide.with(mContext).load(bitmap).into(holder.imageView);
+ }
+ holder.jz_video.startButton.setImageDrawable(mContext.getDrawable(R.drawable.play));
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+
+ }
+ }
+ holder.root.setOnLongClickListener(new View.OnLongClickListener() {
+ @Override
+ public boolean onLongClick(View view) {
+ mOnLongClickListener.onLongClick(alarmClockData);
+ return false;
+ }
+ });
+ holder.root.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+// Intent intent = new Intent(mContext, AlarmClockEditActivity.class);
+// intent.putExtra("id", alarmClockData.getId());
+// mContext.startActivity(intent);
+ }
+ });
+
+ }
+
+ private Pattern mCompile = Pattern.compile(".*?(gif|jpeg|png|jpg|bmp|webp)");
+
+ private boolean isImgUrl(String url) {
+ if (TextUtils.isEmpty(url) || url.trim().length() == 0) {
+ return false;
+ }
+ return mCompile.matcher(url).matches();
+ }
+
+ @Override
+ public int getItemCount() {
+ return mAlarmClockData == null ? 0 : mAlarmClockData.size();
+ }
+
+ class holder extends RecyclerView.ViewHolder {
+ TextView tv_time, tv_remind_type, tv_title, tv_voice, tv_status;
+ ConstraintLayout cl_voice, cl_vp, root;
+ JzvdStdRound jz_video;
+ ImageView imageView,iv_type;
+ ToggleButton toggleButton2;
+
+ public holder(@NonNull View itemView) {
+ super(itemView);
+ tv_time = itemView.findViewById(R.id.tv_time);
+ tv_remind_type = itemView.findViewById(R.id.tv_remind_type);
+ tv_title = itemView.findViewById(R.id.tv_title);
+ tv_voice = itemView.findViewById(R.id.tv_voice);
+ cl_voice = itemView.findViewById(R.id.cl_voice);
+ cl_vp = itemView.findViewById(R.id.cl_vp);
+ root = itemView.findViewById(R.id.root);
+ jz_video = itemView.findViewById(R.id.jz_video);
+ imageView = itemView.findViewById(R.id.imageView);
+ iv_type = itemView.findViewById(R.id.iv_type);
+ tv_status = itemView.findViewById(R.id.tv_status);
+ toggleButton2 = itemView.findViewById(R.id.toggleButton2);
+ }
+ }
+}
diff --git a/src/com/uiuipad/os/alarm/AlarmClockData.java b/src/com/uiuipad/os/alarm/AlarmClockData.java
new file mode 100644
index 0000000..891d8a4
--- /dev/null
+++ b/src/com/uiuipad/os/alarm/AlarmClockData.java
@@ -0,0 +1,201 @@
+package com.uiuipad.os.alarm;
+
+import android.text.TextUtils;
+import android.util.Log;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonParser;
+
+import java.io.Serializable;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Objects;
+
+public class AlarmClockData implements Serializable {
+ private static final long serialVersionUID = -5856502480745183157L;
+
+ int id;
+ int type;//类型 1一次 2循环 3周一到周五 4 周六周日
+ String time;//"2021-11-15 18:33:23",//时间格式化字符串,循环类型是18:33:23
+ String title;//标题
+ String voice;//语音文件地址
+ String voice_md5;
+ String file;//图片或视频文件地址
+ String file_md5;
+ int remind_type;
+ int is_onoff;//0关闭 1开启
+
+ boolean finished = false;
+ boolean is_local = false;
+ boolean edited = false;
+ boolean deleted = false;
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public String getTime() {
+ return time;
+ }
+
+ public void setTime(String time) {
+ this.time = time;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public String getVoice() {
+ return voice;
+ }
+
+ public void setVoice(String voice) {
+ this.voice = voice;
+ }
+
+ public String getVoice_md5() {
+ return voice_md5;
+ }
+
+ public void setVoice_md5(String voice_md5) {
+ this.voice_md5 = voice_md5;
+ }
+
+ public String getFile() {
+ return file;
+ }
+
+ public void setFile(String file) {
+ this.file = file;
+ }
+
+ public String getFile_md5() {
+ return file_md5;
+ }
+
+ public void setFile_md5(String file_md5) {
+ this.file_md5 = file_md5;
+ }
+
+ public boolean isFinished() {
+ return finished;
+ }
+
+ public void setFinished(boolean finished) {
+ this.finished = finished;
+ }
+
+ public int getRemind_type() {
+ return remind_type;
+ }
+
+ public void setRemind_type(int remind_type) {
+ this.remind_type = remind_type;
+ }
+
+ public int getIs_onoff() {
+ return is_onoff;
+ }
+
+ public void setIs_onoff(int is_onoff) {
+ this.is_onoff = is_onoff;
+ }
+
+ public boolean isIs_local() {
+ return is_local;
+ }
+
+ public void setIs_local(boolean is_local) {
+ this.is_local = is_local;
+ }
+
+ public boolean isEdited() {
+ return edited;
+ }
+
+ public void setEdited(boolean edited) {
+ this.edited = edited;
+ }
+
+ public boolean isDeleted() {
+ return deleted;
+ }
+
+ public void setDeleted(boolean deleted) {
+ this.deleted = deleted;
+ }
+
+ public long getTimeStamp() {
+ if (TextUtils.isEmpty(time)) {
+ return 0L;
+ }
+ if (time.length() == 5) {
+ String[] timeSplit = time.split(":");
+ int hour = Integer.parseInt(timeSplit[0]);
+ int minute = Integer.parseInt(timeSplit[1]);
+ Calendar c = Calendar.getInstance();
+ c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH),
+ c.get(Calendar.DAY_OF_MONTH), hour, minute, 0);
+ long mTimeInfo = c.getTimeInMillis();
+ Log.e("AlarmClockData", "getTimeStamp: " + mTimeInfo);
+ long actualTime = mTimeInfo > System.currentTimeMillis() ? mTimeInfo : mTimeInfo + AlarmUtils.ONE_DAY_TIME;
+ return actualTime;
+ } else {
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ try {
+ Date date = simpleDateFormat.parse(time);
+ long timestamp = date.getTime();
+ return timestamp;
+ } catch (ParseException e) {
+ return System.currentTimeMillis();
+ }
+ }
+ }
+
+
+ @NonNull
+ @Override
+ public String toString() {
+ return JsonParser.parseString(new Gson().toJson(this)).getAsJsonObject().toString();
+ }
+
+ @Override
+ public boolean equals(@Nullable Object obj) {
+ if (obj == null) return false;
+ if (!(obj instanceof AlarmClockData)) return false;
+ if (id != ((AlarmClockData) obj).id) return false;
+ if (type != ((AlarmClockData) obj).type) return false;
+ if (!Objects.equals(time, ((AlarmClockData) obj).time)) return false;
+ if (!Objects.equals(title, ((AlarmClockData) obj).title)) return false;
+ if (!Objects.equals(voice, ((AlarmClockData) obj).voice)) return false;
+ if (!Objects.equals(voice_md5, ((AlarmClockData) obj).voice_md5)) return false;
+ if (!Objects.equals(file, ((AlarmClockData) obj).file)) return false;
+ if (!Objects.equals(file_md5, ((AlarmClockData) obj).file_md5)) return false;
+ if (remind_type != ((AlarmClockData) obj).remind_type) return false;
+ if (is_onoff != ((AlarmClockData) obj).is_onoff) return false;
+
+ return true;
+ }
+}
diff --git a/src/com/uiuipad/os/alarm/AlarmContact.java b/src/com/uiuipad/os/alarm/AlarmContact.java
new file mode 100644
index 0000000..49573cc
--- /dev/null
+++ b/src/com/uiuipad/os/alarm/AlarmContact.java
@@ -0,0 +1,15 @@
+package com.uiuipad.os.alarm;
+
+import java.util.List;
+
+public class AlarmContact {
+ public interface Presenter extends BasePresenter {
+ void getAlarmClock();
+ void getAlarmClock(int type);
+ }
+
+ public interface AlarmView extends BaseView {
+ void setAlarmClock(List alarmClockData);
+
+ }
+}
diff --git a/src/com/uiuipad/os/alarm/AlarmOpenHelper.java b/src/com/uiuipad/os/alarm/AlarmOpenHelper.java
new file mode 100644
index 0000000..c3ec3f8
--- /dev/null
+++ b/src/com/uiuipad/os/alarm/AlarmOpenHelper.java
@@ -0,0 +1,77 @@
+package com.uiuipad.os.alarm;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
+
+import java.io.File;
+
+public class AlarmOpenHelper extends SQLiteOpenHelper {
+
+ public static final int DATABASE_VERSION = 2;
+ public static final String DATABASE_NAME = "AlarmDatabase.db";
+ // public static final String DATABASE_FILE_NAME = Environment.getExternalStorageDirectory().getPath() + File.separator + DATABASE_NAME;
+ public static final String DATABASE_FILE_NAME = File.separator + DATABASE_NAME;
+
+ public static final String TABLE_ALARM = " AlarmTable";
+
+ public static final String KEY_ID = "id";
+ public static final String KEY_TYPE = "type";
+ public static final String KEY_TIME = "time";
+ public static final String KEY_TITLE = "title";
+ public static final String KEY_VOICE = "voice";
+ public static final String KEY_VOICE_MD5 = "voice_md5";
+ public static final String KEY_FILE = "file";
+ public static final String KEY_FILE_MD5 = "file_md5";
+ public static final String KEY_REMIND_TYPE = "remind_type";
+ public static final String KEY_IS_ONOFF = "is_onoff";
+
+ public static final String KEY_FINISHED = "finished";
+ public static final String KEY_IS_LOCAL = "is_local";
+ public static final String KEY_EDITED = "edited";
+ public static final String KEY_DELETED = "deleted";
+
+
+ String CREATE_ALARM_TABLE = "CREATE TABLE IF NOT EXISTS" + TABLE_ALARM +
+ "("
+ + KEY_ID + " INTEGER PRIMARY KEY,"
+ + KEY_TYPE + " INTEGER,"
+ + KEY_TIME + " TEXT,"
+ + KEY_TITLE + " TEXT,"
+ + KEY_VOICE + " TEXT,"
+ + KEY_VOICE_MD5 + " TEXT,"
+ + KEY_FILE + " TEXT,"
+ + KEY_FILE_MD5 + " TEXT,"
+ + KEY_REMIND_TYPE + " INTEGER,"
+ + KEY_IS_ONOFF + " INTEGER,"
+
+ + KEY_FINISHED + " BOOLEAN DEFAULT 0,"
+ + KEY_IS_LOCAL + " BOOLEAN DEFAULT 0,"
+ + KEY_EDITED + " BOOLEAN DEFAULT 0,"
+ + KEY_DELETED + " BOOLEAN DEFAULT 0"
+ + ")";
+
+ public AlarmOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
+ super(context, name, factory, version);
+ }
+
+ @Override
+ public void onCreate(SQLiteDatabase db) {
+ db.execSQL(CREATE_ALARM_TABLE);
+ }
+
+ @Override
+ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+ switch (oldVersion + 1) {
+ case 1:
+ db.execSQL(CREATE_ALARM_TABLE); // 执行修改表,添加字段的逻辑。
+ case 2:
+ String sql = "ALTER TABLE " + TABLE_ALARM + " ADD COLUMN " + KEY_EDITED + " BOOLEAN DEFAULT 0";
+ db.execSQL(sql);
+ String sql2 = "ALTER TABLE " + TABLE_ALARM + " ADD COLUMN " + KEY_DELETED + " BOOLEAN DEFAULT 0";
+ db.execSQL(sql2);
+ String sql3 = "ALTER TABLE " + TABLE_ALARM + " ADD COLUMN " + KEY_FILE_MD5 + " TEXT";
+ db.execSQL(sql3);
+ }
+ }
+}
diff --git a/src/com/uiuipad/os/alarm/AlarmPresenter.java b/src/com/uiuipad/os/alarm/AlarmPresenter.java
new file mode 100644
index 0000000..9fc55b9
--- /dev/null
+++ b/src/com/uiuipad/os/alarm/AlarmPresenter.java
@@ -0,0 +1,98 @@
+package com.uiuipad.os.alarm;
+
+import android.content.Context;
+import android.util.Log;
+
+import com.trello.rxlifecycle4.android.ActivityEvent;
+import com.uiuipad.os.network.NetInterfaceManager;
+import com.uiuipad.os.network.bean.BaseResponse;
+
+import java.util.List;
+
+import io.reactivex.rxjava3.annotations.NonNull;
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
+import io.reactivex.rxjava3.subjects.BehaviorSubject;
+
+public class AlarmPresenter implements AlarmContact.Presenter {
+
+ private AlarmContact.AlarmView mView;
+ private Context mContext;
+
+ AlarmPresenter(Context context) {
+ this.mContext = context;
+ }
+
+ private BehaviorSubject lifecycle;
+
+ void setLifecycle(BehaviorSubject lifecycle) {
+ this.lifecycle = lifecycle;
+ }
+
+ public BehaviorSubject getLifecycle() {
+ return lifecycle;
+ }
+
+ @Override
+ public void attachView(@NonNull AlarmContact.AlarmView view) {
+ this.mView = view;
+ }
+
+ @Override
+ public void detachView() {
+ this.mView = null;
+ }
+
+
+ @Override
+ public void getAlarmClock() {
+ NetInterfaceManager.getInstance().getAlarmClock(true, getLifecycle(), new NetInterfaceManager.AlarmClockCallback() {
+ @Override
+ public void setAlarmClock(List alarmClockList) {
+ if (alarmClockList.size() == 0) {
+ setAlarmClockEmpty();
+ } else {
+
+ }
+ }
+
+ @Override
+ public void setAlarmClockEmpty() {
+
+ }
+
+ @Override
+ public void onError() {
+
+ }
+ });
+ }
+
+ @Override
+ public void getAlarmClock(int type) {
+ NetInterfaceManager.getInstance().getAlarmClockObservable()
+ .subscribe(new Observer>>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("getAlarmClock", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull BaseResponse> listBaseResponse) {
+ Log.e("getAlarmClock", "onNext: " + listBaseResponse);
+ mView.setAlarmClock(listBaseResponse.data);
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("getAlarmClock", "onError: " + e.getMessage());
+ onComplete();
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("getAlarmClock", "onComplete: ");
+ }
+ });
+ }
+}
diff --git a/src/com/uiuipad/os/alarm/AlarmUtils.java b/src/com/uiuipad/os/alarm/AlarmUtils.java
new file mode 100644
index 0000000..41d870f
--- /dev/null
+++ b/src/com/uiuipad/os/alarm/AlarmUtils.java
@@ -0,0 +1,843 @@
+package com.uiuipad.os.alarm;
+
+import android.annotation.SuppressLint;
+import android.app.AlarmManager;
+import android.app.PendingIntent;
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.Intent;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.arialyy.aria.core.Aria;
+import com.blankj.utilcode.util.FileUtils;
+import com.uiuipad.os.service.MainService;
+import com.uiuipad.os.uiuiutils.Utils;
+
+import java.io.File;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.TimeZone;
+
+public class AlarmUtils {
+ private static final String TAG = AlarmUtils.class.getSimpleName();
+
+ @SuppressLint("StaticFieldLeak")
+ private static AlarmUtils sInstance;
+ private Context mContext;
+ private AlarmManager mAlarmManager;
+ private SQLiteDatabase mDatabase;
+ private AlarmOpenHelper mAlarmOpenHelper;
+ private HashSet pendingIntents;
+
+ public static final int ONE_DAY_TIME = 1000 * 60 * 60 * 24;
+
+ /*一次性*/
+ public static final int ONCE = 1;
+ /*每天*/
+ public static final int LOOP = 2;
+ /*周一到周五*/
+ public static final int WORKING_DAY = 3;
+ /*休息日*/
+ public static final int OFF_DAY = 4;
+
+ private AlarmUtils(Context context) {
+ this.mContext = context;
+// this.mAlarmOpenHelper = new AlarmOpenHelper(context, AlarmOpenHelper.DATABASE_NAME, null, AlarmOpenHelper.DATABASE_VERSION);
+ this.mAlarmOpenHelper = new AlarmOpenHelper(context, mContext.getExternalCacheDir() + AlarmOpenHelper.DATABASE_FILE_NAME, null, AlarmOpenHelper.DATABASE_VERSION);
+ this.mDatabase = mAlarmOpenHelper.getWritableDatabase();
+ this.mAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
+ }
+
+ public static void init(Context context) {
+ if (context == null) {
+ throw new RuntimeException("context is NULL");
+ }
+ if (sInstance == null) {
+ sInstance = new AlarmUtils(context);
+ }
+ }
+
+ public static AlarmUtils getInstance() {
+ if (sInstance == null) {
+ throw new IllegalStateException("You must be init AlarmUtils first");
+ }
+ return sInstance;
+ }
+
+ private void openDatabase() {
+// if (mDatabase == null || !mDatabase.isOpen()) {
+// mDatabase = mAlarmOpenHelper.getWritableDatabase();
+// }
+ }
+
+ private ContentValues getValuesFromAlarmClock(AlarmClockData alarmClockData) {
+ ContentValues values = new ContentValues();
+ values.put(AlarmOpenHelper.KEY_ID, alarmClockData.getId());
+ values.put(AlarmOpenHelper.KEY_TYPE, alarmClockData.getType());
+ values.put(AlarmOpenHelper.KEY_TIME, alarmClockData.getTime());
+ values.put(AlarmOpenHelper.KEY_TITLE, alarmClockData.getTitle());
+ values.put(AlarmOpenHelper.KEY_VOICE, alarmClockData.getVoice());
+ values.put(AlarmOpenHelper.KEY_VOICE_MD5, alarmClockData.getVoice_md5());
+ values.put(AlarmOpenHelper.KEY_FILE, alarmClockData.getFile());
+ values.put(AlarmOpenHelper.KEY_FILE_MD5, alarmClockData.getFile_md5());
+ values.put(AlarmOpenHelper.KEY_REMIND_TYPE, alarmClockData.getRemind_type());
+ values.put(AlarmOpenHelper.KEY_IS_ONOFF, alarmClockData.getIs_onoff());
+
+ values.put(AlarmOpenHelper.KEY_FINISHED, alarmClockData.isFinished());
+ values.put(AlarmOpenHelper.KEY_IS_LOCAL, alarmClockData.isIs_local());
+ values.put(AlarmOpenHelper.KEY_EDITED, alarmClockData.isEdited());
+ values.put(AlarmOpenHelper.KEY_DELETED, alarmClockData.isDeleted());
+ return values;
+ }
+
+ /**
+ * 增加数据
+ *
+ * @param alarmClockData
+ * @return
+ */
+ public boolean addAlarmClock(AlarmClockData alarmClockData) {
+ openDatabase();
+ ContentValues values = getValuesFromAlarmClock(alarmClockData);
+ long id = 0;
+ mDatabase.beginTransaction();
+ try {
+ id = mDatabase.insertWithOnConflict(AlarmOpenHelper.TABLE_ALARM, null, values, SQLiteDatabase.CONFLICT_REPLACE);
+ mDatabase.setTransactionSuccessful();
+ } catch (Exception e) {
+ Log.e(TAG, "addAlarmClock: " + e.getMessage());
+ } finally {
+ mDatabase.endTransaction();
+ }
+ setAlarm(alarmClockData);
+ return id > 0;
+ }
+
+
+ /**
+ * 更新数据
+ *
+ * @param alarmClockData
+ * @return
+ */
+ public boolean updateAlarmClock(AlarmClockData alarmClockData) {
+ openDatabase();
+ AlarmClockData old = getDatabaseSingleAlarm(alarmClockData);
+ if (old != null) {
+ PendingIntent pendingIntent = getPendingIntent(old);
+ if (pendingIntent != null) {
+ mAlarmManager.cancel(pendingIntent);
+ }
+ }
+ ContentValues values = getValuesFromAlarmClock(alarmClockData);
+ long id = 0;
+ mDatabase.beginTransaction();
+ try {
+ id = mDatabase.insertWithOnConflict(AlarmOpenHelper.TABLE_ALARM, null, values, SQLiteDatabase.CONFLICT_REPLACE);
+ mDatabase.setTransactionSuccessful();
+ } catch (Exception e) {
+ Log.e(TAG, "updateAlarmClock: " + e.getMessage());
+ } finally {
+ mDatabase.endTransaction();
+ }
+ setAlarm(alarmClockData);
+ return id > 0;
+ }
+
+ public boolean updateAlarmClock(AlarmClockData alarmClockData, int newId) {
+ openDatabase();
+ int oldId = alarmClockData.getId();
+ AlarmClockData old = getDatabaseSingleAlarm(alarmClockData);
+ if (old != null) {
+// deleteAlarmClock(oldId);
+ PendingIntent pendingIntent = getPendingIntent(old);
+ if (pendingIntent != null) {
+ mAlarmManager.cancel(pendingIntent);
+ }
+ }
+ alarmClockData.setId(newId);
+ ContentValues values = getValuesFromAlarmClock(alarmClockData);
+ long id = 0;
+ mDatabase.beginTransaction();
+ try {
+ id = mDatabase.update(AlarmOpenHelper.TABLE_ALARM, values, "id=" + oldId, null);
+ mDatabase.setTransactionSuccessful();
+ } catch (Exception e) {
+ Log.e(TAG, "updateAlarmClock: " + e.getMessage());
+ } finally {
+ mDatabase.endTransaction();
+ }
+ setAlarm(alarmClockData);
+ return id > 0;
+ }
+
+ /**
+ * 批量插入数据
+ *
+ * @param list
+ */
+ public void insertAlarmClockList(List list) {
+ openDatabase();
+ List contentValuesList = new ArrayList<>();
+ for (AlarmClockData alarmClockData : list) {
+ ContentValues values = getValuesFromAlarmClock(alarmClockData);
+ contentValuesList.add(values);
+ }
+ mDatabase.beginTransaction();
+ try {
+ for (ContentValues v : contentValuesList) {
+ mDatabase.insertWithOnConflict(AlarmOpenHelper.TABLE_ALARM, null, v, SQLiteDatabase.CONFLICT_REPLACE);
+ }
+ mDatabase.setTransactionSuccessful();
+ } catch (Exception e) {
+ Log.e(TAG, "insertListValues: " + e.getMessage());
+ } finally {
+ mDatabase.endTransaction();
+ }
+ }
+
+ /**
+ * 删除数据
+ *
+ * @param alarmClockData
+ * @return
+ */
+ public boolean deleteAlarmClock(AlarmClockData alarmClockData) {
+ if (alarmClockData == null) {
+ return true;
+ }
+ PendingIntent pendingIntent = getPendingIntent(alarmClockData);
+ if (pendingIntent != null) {
+ mAlarmManager.cancel(pendingIntent);
+ }
+ return deleteAlarmClock(alarmClockData.getId());
+ }
+
+ public boolean deleteAlarmClock(int RowID) {
+ openDatabase();
+ long id = 0;
+ mDatabase.beginTransaction();
+ try {
+ id = mDatabase.delete(AlarmOpenHelper.TABLE_ALARM, " id =" + RowID, null);
+ mDatabase.setTransactionSuccessful();
+ } catch (Exception e) {
+ Log.e(TAG, "deleteAlarmClock: " + e.getMessage());
+ } finally {
+ mDatabase.endTransaction();
+ }
+ return id > 0;
+ }
+
+ /**
+ * 删除所有闹钟
+ */
+ public void deleteAllAlarmClock() {
+ HashSet pendingIntents = getOldPendingIntentsSet();
+ Iterator pendingIntentIterator = pendingIntents.iterator();
+ while (pendingIntentIterator.hasNext()) {
+ PendingIntent pendingIntent = pendingIntentIterator.next();
+ mAlarmManager.cancel(pendingIntent);
+ pendingIntentIterator.remove();
+ }
+ List alarmClockData = getDatabaseAlarms();
+ for (AlarmClockData data : alarmClockData) {
+ deleteAlarmClock(data.getId());
+ }
+ }
+
+ /**
+ * 获取所有Alarm
+ *
+ * @return
+ */
+ public List getDatabaseAlarms() {
+ openDatabase();
+ List list = new ArrayList<>();
+ String selectQuery = "SELECT * FROM " + AlarmOpenHelper.TABLE_ALARM;
+ Cursor cursor = mDatabase.rawQuery(selectQuery, null);
+ if (cursor.moveToFirst()) {
+ do {
+ AlarmClockData alarmClockData = new AlarmClockData();
+ alarmClockData.setId(Integer.parseInt(cursor.getString(0)));
+ alarmClockData.setType(cursor.getInt(1));
+ alarmClockData.setTime(cursor.getString(2));
+ alarmClockData.setTitle(cursor.getString(3));
+ alarmClockData.setVoice(cursor.getString(4));
+ alarmClockData.setVoice_md5(cursor.getString(5));
+ alarmClockData.setFile(cursor.getString(6));
+ alarmClockData.setFile_md5(cursor.getString(7));
+ alarmClockData.setRemind_type(cursor.getInt(8));
+ alarmClockData.setIs_onoff(cursor.getInt(9));
+ alarmClockData.setFinished(cursor.getInt(10) == 1);
+ alarmClockData.setIs_local(cursor.getInt(11) == 1);
+ alarmClockData.setEdited(cursor.getInt(12) == 1);
+ alarmClockData.setDeleted(cursor.getInt(13) == 1);
+ list.add(alarmClockData);
+ } while (cursor.moveToNext());
+ }
+ cursor.close();
+ return list;
+ }
+
+ /**
+ * @return 获取单个闹钟
+ */
+ public AlarmClockData getDatabaseSingleAlarm(AlarmClockData data) {
+ openDatabase();
+ List list = new ArrayList<>();
+ String selectQuery = "SELECT * FROM " + AlarmOpenHelper.TABLE_ALARM + " where id =" + data.getId();
+ Cursor cursor = mDatabase.rawQuery(selectQuery, null);
+ if (cursor.moveToFirst()) {
+ do {
+ AlarmClockData alarmClockData = new AlarmClockData();
+ alarmClockData.setId(Integer.parseInt(cursor.getString(0)));
+ alarmClockData.setType(cursor.getInt(1));
+ alarmClockData.setTime(cursor.getString(2));
+ alarmClockData.setTitle(cursor.getString(3));
+ alarmClockData.setVoice(cursor.getString(4));
+ alarmClockData.setVoice_md5(cursor.getString(5));
+ alarmClockData.setFile(cursor.getString(6));
+ alarmClockData.setFile_md5(cursor.getString(7));
+ alarmClockData.setRemind_type(cursor.getInt(8));
+ alarmClockData.setIs_onoff(cursor.getInt(9));
+ alarmClockData.setFinished(cursor.getInt(10) == 1);
+ alarmClockData.setIs_local(cursor.getInt(11) == 1);
+ alarmClockData.setEdited(cursor.getInt(12) == 1);
+ alarmClockData.setDeleted(cursor.getInt(13) == 1);
+ list.add(alarmClockData);
+ } while (cursor.moveToNext());
+ }
+ cursor.close();
+ return list.size() == 0 ? null : list.get(0);
+ }
+
+ public AlarmClockData getDatabaseSingleAlarm(int id) {
+ openDatabase();
+ List list = new ArrayList<>();
+ String selectQuery = "SELECT * FROM " + AlarmOpenHelper.TABLE_ALARM + " where id =" + id;
+ Cursor cursor = mDatabase.rawQuery(selectQuery, null);
+ if (cursor.moveToFirst()) {
+ do {
+ AlarmClockData alarmClockData = new AlarmClockData();
+ alarmClockData.setId(Integer.parseInt(cursor.getString(0)));
+ alarmClockData.setType(cursor.getInt(1));
+ alarmClockData.setTime(cursor.getString(2));
+ alarmClockData.setTitle(cursor.getString(3));
+ alarmClockData.setVoice(cursor.getString(4));
+ alarmClockData.setVoice_md5(cursor.getString(5));
+ alarmClockData.setFile(cursor.getString(6));
+ alarmClockData.setFile_md5(cursor.getString(7));
+ alarmClockData.setRemind_type(cursor.getInt(8));
+ alarmClockData.setIs_onoff(cursor.getInt(9));
+ alarmClockData.setFinished(cursor.getInt(10) == 1);
+ alarmClockData.setIs_local(cursor.getInt(11) == 1);
+ alarmClockData.setEdited(cursor.getInt(12) == 1);
+ alarmClockData.setDeleted(cursor.getInt(13) == 1);
+ list.add(alarmClockData);
+ } while (cursor.moveToNext());
+ }
+ cursor.close();
+ return list.size() == 0 ? null : list.get(0);
+ }
+
+ public List getDeletedAlarm() {
+ openDatabase();
+ List list = new ArrayList<>();
+ String selectQuery = "SELECT * FROM " + AlarmOpenHelper.TABLE_ALARM + " where deleted = 1";
+ Cursor cursor = mDatabase.rawQuery(selectQuery, null);
+ if (cursor.moveToFirst()) {
+ do {
+ AlarmClockData alarmClockData = new AlarmClockData();
+ alarmClockData.setId(Integer.parseInt(cursor.getString(0)));
+ alarmClockData.setType(cursor.getInt(1));
+ alarmClockData.setTime(cursor.getString(2));
+ alarmClockData.setTitle(cursor.getString(3));
+ alarmClockData.setVoice(cursor.getString(4));
+ alarmClockData.setVoice_md5(cursor.getString(5));
+ alarmClockData.setFile(cursor.getString(6));
+ alarmClockData.setFile_md5(cursor.getString(7));
+ alarmClockData.setRemind_type(cursor.getInt(8));
+ alarmClockData.setIs_onoff(cursor.getInt(9));
+ alarmClockData.setFinished(cursor.getInt(10) == 1);
+ alarmClockData.setIs_local(cursor.getInt(11) == 1);
+ alarmClockData.setEdited(cursor.getInt(12) == 1);
+ alarmClockData.setDeleted(cursor.getInt(13) == 1);
+ list.add(alarmClockData);
+ } while (cursor.moveToNext());
+ }
+ cursor.close();
+ return list;
+ }
+
+ public List getLocalAddAlarm() {
+ openDatabase();
+ List list = new ArrayList<>();
+ String selectQuery = "SELECT * FROM " + AlarmOpenHelper.TABLE_ALARM + " where is_local = 1";
+ Cursor cursor = mDatabase.rawQuery(selectQuery, null);
+ if (cursor.moveToFirst()) {
+ do {
+ AlarmClockData alarmClockData = new AlarmClockData();
+ alarmClockData.setId(Integer.parseInt(cursor.getString(0)));
+ alarmClockData.setType(cursor.getInt(1));
+ alarmClockData.setTime(cursor.getString(2));
+ alarmClockData.setTitle(cursor.getString(3));
+ alarmClockData.setVoice(cursor.getString(4));
+ alarmClockData.setVoice_md5(cursor.getString(5));
+ alarmClockData.setFile(cursor.getString(6));
+ alarmClockData.setFile_md5(cursor.getString(7));
+ alarmClockData.setRemind_type(cursor.getInt(8));
+ alarmClockData.setIs_onoff(cursor.getInt(9));
+ alarmClockData.setFinished(cursor.getInt(10) == 1);
+ alarmClockData.setIs_local(cursor.getInt(11) == 1);
+ alarmClockData.setEdited(cursor.getInt(12) == 1);
+ alarmClockData.setDeleted(cursor.getInt(13) == 1);
+ list.add(alarmClockData);
+ } while (cursor.moveToNext());
+ }
+ cursor.close();
+ return list;
+ }
+
+
+ /**
+ * 设置闹钟列表
+ *
+ * @param data
+ */
+ public void setAlarmClockData(List data) {
+ if (pendingIntents == null) {
+ pendingIntents = getOldPendingIntentsSet();
+ }
+ Iterator pendingIntentIterator = pendingIntents.iterator();
+ while (pendingIntentIterator.hasNext()) {
+ PendingIntent pendingIntent = pendingIntentIterator.next();
+ mAlarmManager.cancel(pendingIntent);
+ pendingIntentIterator.remove();
+ }
+ List newData = mergeData(data);
+ for (AlarmClockData clockData : newData) {
+ setAlarm(clockData);
+ checkResource(clockData.getFile());
+ }
+ insertAlarmClockList(newData);
+ }
+
+ /**
+ * @param url 下载资源
+ */
+ private void checkResource(String url) {
+ if (TextUtils.isEmpty(url)) {
+ return;
+ }
+ String fileName = url.substring(url.lastIndexOf("/") + 1, url.length());
+ String realPath = Utils.getDownLoadPath(mContext) + fileName;
+ File file = new File(realPath);
+ if (!file.exists()) {
+ Aria.download(this)
+ .load(url) //读取下载地址
+ .setFilePath(Utils.getDownLoadPath(mContext) + fileName)
+ .create(); //启动下载}
+ }
+ }
+
+ /**
+ * 合并闹钟列表,删除不存在闹钟
+ *
+ * @param newAlarmClockDataList
+ * @return 新增的闹钟
+ */
+ private List mergeData(List newAlarmClockDataList) {
+ HashMap alarmClockDataMap = new HashMap<>();
+ if (newAlarmClockDataList != null) {
+ for (AlarmClockData alarmClockData : newAlarmClockDataList) {
+ alarmClockDataMap.put(alarmClockData.getId(), alarmClockData);
+ }
+ }
+ HashMap oldData = getOldDataMap();
+ List deleteData = new ArrayList<>();
+ for (Map.Entry entry : oldData.entrySet()) {
+ if (alarmClockDataMap.get(entry.getKey()) == null) {
+ deleteData.add(entry.getValue());
+ }
+ }
+ for (AlarmClockData alarmClockData : deleteData) {
+ if (alarmClockData.isIs_local() || alarmClockData.deleted) {
+ Log.e(TAG, "mergeData: skip " + alarmClockData.getId());
+ continue;
+ }
+ deleteAlarmClock(alarmClockData);
+ }
+
+ List newData = new ArrayList<>();
+ if (newAlarmClockDataList == null) {
+ return newData;
+ }
+ for (AlarmClockData alarm : newAlarmClockDataList) {
+ AlarmClockData oldAlarm = oldData.get(alarm.getId());
+ if (oldAlarm == null) {
+ newData.add(alarm);
+ } else {
+ if (oldAlarm.equals(alarm)) {
+ newData.add(oldAlarm);
+ } else {
+ newData.add(alarm);
+ }
+ }
+ }
+ return newData;
+ }
+
+ /**
+ * 更新完成状态
+ *
+ * @param alarmClockData
+ * @return
+ */
+ public boolean updateAlarmFinished(AlarmClockData alarmClockData) {
+ openDatabase();
+ ContentValues values = getValuesFromAlarmClock(alarmClockData);
+ long id = 0;
+ mDatabase.beginTransaction();
+ try {
+ id = mDatabase.update(AlarmOpenHelper.TABLE_ALARM, values, AlarmOpenHelper.KEY_ID + "=?", new String[]{String.valueOf(alarmClockData.getId())});
+ mDatabase.setTransactionSuccessful();
+ } catch (Exception e) {
+ Log.e(TAG, "updateAlarmFinished: " + e.getMessage());
+ } finally {
+ mDatabase.endTransaction();
+ }
+ return id > 0;
+ }
+
+ public List getOldData() {
+ List alarmClockData = new ArrayList<>();
+ List dataBaseAlarms = getDatabaseAlarms();
+ if (dataBaseAlarms != null && dataBaseAlarms.size() != 0) {
+ alarmClockData.addAll(dataBaseAlarms);
+ }
+ return alarmClockData;
+ }
+
+ public HashMap getOldDataMap() {
+ List alarmClockData = getOldData();
+ HashMap hashMap = new HashMap<>();
+ if (alarmClockData.size() != 0) {
+ for (AlarmClockData clockData : alarmClockData) {
+ hashMap.put(clockData.getId(), clockData);
+ }
+ }
+ return hashMap;
+ }
+
+ /**
+ * 获取最近一次的闹钟
+ *
+ * @return
+ */
+ public AlarmClockData getRecentAlarmClock() {
+ List alarmClockData = getDatabaseAlarms();
+ if (alarmClockData == null || alarmClockData.size() == 0) {
+ return null;
+ } else {
+ Collections.sort(alarmClockData, new Comparator() {
+ @Override
+ public int compare(AlarmClockData o1, AlarmClockData o2) {
+ if ((o1.getTimeStamp()) <= (o2.getTimeStamp())) {
+ return 0;
+ } else {
+ return -1;
+ }
+ }
+ });
+ return alarmClockData.get(0);
+ }
+ }
+
+ private HashSet getOldPendingIntentsSet() {
+ HashSet pendingIntents = new HashSet<>();
+ HashMap data = getOldDataMap();
+ for (AlarmClockData alarmClockData : data.values()) {
+ pendingIntents.add(getPendingIntent(alarmClockData));
+ }
+ return pendingIntents;
+ }
+
+ /**
+ * 获取已设置闹钟的PendingIntent
+ *
+ * @param alarmClock
+ * @return
+ */
+ private PendingIntent getPendingIntent(AlarmClockData alarmClock) {
+ Intent intent = new Intent(MainService.ALARMWAKEUP);
+ intent.putExtra("title", alarmClock.getTitle());
+ intent.putExtra("id", alarmClock.getId());
+ PendingIntent startPendingIntent = PendingIntent.getBroadcast(mContext, alarmClock.getId(), intent, PendingIntent.FLAG_CANCEL_CURRENT);
+ return startPendingIntent;
+ }
+
+ private long getTimestamp(String timeString) {
+ if (TextUtils.isEmpty(timeString)) {
+ return 0;
+ }
+ if (timeString.length() == 5) {
+ String[] timeSplit = timeString.split(":");
+ int hour = Integer.parseInt(timeSplit[0]);
+ int minute = Integer.parseInt(timeSplit[1]);
+ Calendar c = Calendar.getInstance();
+ int year = c.get(Calendar.YEAR);
+ int month = c.get(Calendar.MONTH);
+ int day = c.get(Calendar.DAY_OF_MONTH);
+ c.set(year, month, day, hour, minute, 0);
+ long mTimeInfo = c.getTimeInMillis();
+ Log.e(TAG, "getTimestamp: " + mTimeInfo);
+// long actualTime = mTimeInfo > System.currentTimeMillis() ? mTimeInfo : mTimeInfo + ONE_DAY_TIME;
+ return mTimeInfo;
+ } else {
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+ try {
+ Date date = simpleDateFormat.parse(timeString);
+ long timestamp = date.getTime();
+ Log.e(TAG, "getTimestamp2: " + timestamp);
+ return timestamp;
+ } catch (ParseException e) {
+ return System.currentTimeMillis();
+ }
+ }
+ }
+
+ private long getZeroTiemstamp() {
+ //设置时区
+ Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT+8"));
+ calendar.set(Calendar.HOUR_OF_DAY, 0);
+ calendar.set(Calendar.MINUTE, 0);
+ calendar.set(Calendar.SECOND, 0);
+ long zeroTime = calendar.getTimeInMillis();
+ Log.e(TAG, "getZeroTiemstamp: " + zeroTime);
+ return zeroTime;
+ }
+
+
+ /**
+ * 设置闹钟
+ *
+ * @param alarm
+ */
+ public void setAlarm(AlarmClockData alarm) {
+ if (pendingIntents == null) {
+ pendingIntents = getOldPendingIntentsSet();
+ }
+ int id = alarm.getId();
+ int type = alarm.getType();
+ String timeString = alarm.getTime();
+ String title = alarm.getTitle();
+ Log.e(TAG, "setAlarm: " + title);
+ long timeStamp = getTimestamp(timeString);
+ Log.e(TAG, "setAlarm: " + timeStamp);
+ boolean finished = alarm.isFinished();
+ String voiceUrl = alarm.getVoice();
+ String voiceMd5 = alarm.getVoice_md5();
+ if (!TextUtils.isEmpty(voiceUrl)) {
+ ariaDownload(voiceUrl, voiceMd5);
+ }
+ String fileUrl = alarm.getFile();
+ String fileMd5 = alarm.getFile_md5();
+ if (!TextUtils.isEmpty(fileUrl)) {
+ ariaDownload(fileUrl, fileMd5);
+ }
+ switch (type) {
+ case ONCE:
+ if (!finished) {
+ if (timeStamp < System.currentTimeMillis()) {
+ Intent intent = new Intent(MainService.ALARMWAKEUP);
+ intent.putExtra("title", title);
+ intent.putExtra("id", id);
+ mContext.sendBroadcast(intent);
+ } else {
+ setOnceAlarm(MainService.ALARMWAKEUP, title, id, timeStamp);
+ }
+ }
+ break;
+ case LOOP:
+ setDayLoopAlarm(MainService.ALARMWAKEUP, title, id, timeString);
+ break;
+ case WORKING_DAY:
+ setWorkDayAlarm(MainService.ALARMWAKEUP, title, id, timeString);
+ break;
+ case OFF_DAY:
+ setOffDayAlarm(MainService.ALARMWAKEUP, title, id, timeString);
+ break;
+ default:
+ }
+ }
+
+ /**
+ * @param action
+ * @param requestCode
+ * @param timestamp 设置一次性闹钟
+ */
+ public void setOnceAlarm(String action, String extra, int requestCode, long timestamp) {
+ Intent intent = new Intent(action);
+ intent.putExtra("title", extra);
+ intent.putExtra("id", requestCode);
+ PendingIntent startPendingIntent = PendingIntent.getBroadcast(mContext, requestCode, intent, PendingIntent.FLAG_CANCEL_CURRENT);
+ pendingIntents.add(startPendingIntent);
+ mAlarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, timestamp, startPendingIntent);
+ Log.e(TAG, "setOnceAlarm: " + "id: " + requestCode + " title: " + extra + " timeString: " + timestamp);
+ }
+
+ /**
+ * @param action
+ * @param requestCode
+ * @param timeString 设置循环周期为一天的闹钟
+ */
+ public void setDayLoopAlarm(String action, String extra, int requestCode, String timeString) {
+ long timestamp = getTimestamp(timeString);
+ if (System.currentTimeMillis() > timestamp) {
+ timestamp += AlarmManager.INTERVAL_DAY;
+ }
+ Intent intent = new Intent(action);
+ intent.putExtra("title", extra);
+ intent.putExtra("id", requestCode);
+ PendingIntent startPendingIntent = PendingIntent.getBroadcast(mContext, requestCode, intent, PendingIntent.FLAG_CANCEL_CURRENT);
+ pendingIntents.add(startPendingIntent);
+ mAlarmManager.setExact(AlarmManager.RTC_WAKEUP, timestamp, startPendingIntent);
+ Log.e(TAG, "setDayLoopAlarm: " + "title: " + extra + " timeString: " + timestamp);
+// setLoopAlarm(action, extra, requestCode, AlarmManager.INTERVAL_DAY, timestamp);
+ }
+
+ /**
+ * @param action
+ * @param requestCode
+ * @param timestamp 设置循环周期为一小时的闹钟
+ */
+ public void setHourLoopAlarm(String action, String extra, int requestCode, long timestamp) {
+ setLoopAlarm(action, extra, requestCode, AlarmManager.INTERVAL_HOUR, timestamp);
+ }
+
+ /**
+ * @param action
+ * @param requestCode
+ * @param intervalMillis
+ * @param timestamp 循环闹钟
+ */
+ public void setLoopAlarm(String action, String extra, int requestCode, long intervalMillis, long timestamp) {
+ Intent intent = new Intent(action);
+ intent.putExtra("title", extra);
+ intent.putExtra("id", requestCode);
+ PendingIntent startPendingIntent = PendingIntent.getBroadcast(mContext, requestCode, intent, PendingIntent.FLAG_CANCEL_CURRENT);
+ pendingIntents.add(startPendingIntent);
+ mAlarmManager.setWindow(AlarmManager.RTC_WAKEUP, timestamp, intervalMillis, startPendingIntent);
+ Log.e(TAG, "setLoopAlarm: " + "title: " + extra + " timeString: " + timestamp);
+ }
+
+ public void setWorkDayAlarm(String action, String extra, int requestCode, String timeString) {
+ long timestamp = getTimestamp(timeString);
+ Calendar calendar = Calendar.getInstance();
+ int day_of_week = calendar.get(Calendar.DAY_OF_WEEK) - 1;
+ switch (day_of_week) {
+ case 6:
+ case 7:
+ timestamp += (8 - day_of_week) * AlarmManager.INTERVAL_DAY;
+ break;
+ default:
+ if (System.currentTimeMillis() > timestamp) {
+ timestamp += AlarmManager.INTERVAL_DAY;
+ }
+ break;
+ }
+ Intent intent = new Intent(action);
+ intent.putExtra("title", extra);
+ intent.putExtra("id", requestCode);
+ PendingIntent startPendingIntent = PendingIntent.getBroadcast(mContext, requestCode, intent, PendingIntent.FLAG_CANCEL_CURRENT);
+ pendingIntents.add(startPendingIntent);
+ mAlarmManager.setExact(AlarmManager.RTC_WAKEUP, timestamp, startPendingIntent);
+ Log.e(TAG, "setWorkDayAlarm: " + "title: " + extra + " timeString: " + timestamp);
+ }
+
+ public void setOffDayAlarm(String action, String extra, int requestCode, String timeString) {
+ long timestamp = getTimestamp(timeString);
+ Calendar calendar = Calendar.getInstance();
+ int day_of_week = calendar.get(Calendar.DAY_OF_WEEK) - 1;
+ switch (day_of_week) {
+ case 6:
+ if (System.currentTimeMillis() > timestamp) {
+ timestamp += AlarmManager.INTERVAL_DAY;
+ }
+ break;
+ case 7:
+ break;
+ default:
+ timestamp += (6 - day_of_week) * AlarmManager.INTERVAL_DAY;
+ break;
+ }
+ Intent intent = new Intent(action);
+ intent.putExtra("title", extra);
+ intent.putExtra("id", requestCode);
+ PendingIntent startPendingIntent = PendingIntent.getBroadcast(mContext, requestCode, intent, PendingIntent.FLAG_CANCEL_CURRENT);
+ pendingIntents.add(startPendingIntent);
+ mAlarmManager.setExact(AlarmManager.RTC_WAKEUP, timestamp, startPendingIntent);
+ Log.e(TAG, "setOffDayAlarm: " + "title: " + extra + " timeString: " + timestamp);
+ }
+
+
+ public void ariaDownload(String url, String md5) {
+ String fileName = Utils.getFileNamefromURL(url);
+ File file = new File(Utils.getDownLoadPath(mContext) + fileName);
+ if (file.exists() && !file.isDirectory()) {
+ String fileMD5 = FileUtils.getFileMD5ToString(file);
+ Log.e("ariaDownload", "fileOnlineMD5=" + md5);
+ Log.e("ariaDownload", "fileMD5=" + fileMD5);
+ if (!md5.equalsIgnoreCase(fileMD5)) {
+ Aria.download(this)
+ .load(url) //读取下载地址
+ .setFilePath(Utils.getDownLoadPath(mContext) + fileName)
+// .ignoreFilePathOccupy()
+ .setExtendField(md5)
+ .create(); //启动下载}
+ } else {
+ Log.e("ariaDownload", "fileName = " + fileName + " exists");
+ }
+ } else {
+ Aria.download(this)
+ .load(url) //读取下载地址
+ .setFilePath(Utils.getDownLoadPath(mContext) + fileName)
+// .ignoreFilePathOccupy()
+ .setExtendField(md5)
+ .create(); //启动下载}
+ }
+ }
+
+ public void ariaDownload(String url) {
+ if (Utils.isLocalPath(url)) {
+ return;
+ }
+ String fileName = Utils.getFileNamefromURL(url);
+ File file = new File(Utils.getDownLoadPath(mContext) + fileName);
+ if (file.exists() && !file.isDirectory()) {
+ String fileMD5 = FileUtils.getFileMD5ToString(file);
+ Log.e("ariaDownload", "fileMD5=" + fileMD5);
+ Log.e("ariaDownload", "fileName = " + fileName + " exists");
+ } else {
+ Aria.download(this)
+ .load(url) //读取下载地址
+ .setFilePath(Utils.getDownLoadPath(mContext) + fileName)
+ .create(); //启动下载}
+ }
+ }
+
+
+}
diff --git a/src/com/uiuipad/os/alarm/BaseActivity.java b/src/com/uiuipad/os/alarm/BaseActivity.java
new file mode 100644
index 0000000..e102398
--- /dev/null
+++ b/src/com/uiuipad/os/alarm/BaseActivity.java
@@ -0,0 +1,129 @@
+package com.uiuipad.os.alarm;
+
+import android.os.Bundle;
+
+import androidx.annotation.CallSuper;
+import androidx.annotation.CheckResult;
+import androidx.annotation.ContentView;
+import androidx.annotation.LayoutRes;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.trello.rxlifecycle4.LifecycleProvider;
+import com.trello.rxlifecycle4.LifecycleTransformer;
+import com.trello.rxlifecycle4.RxLifecycle;
+import com.trello.rxlifecycle4.android.ActivityEvent;
+import com.trello.rxlifecycle4.android.RxLifecycleAndroid;
+import com.uiuipad.os.R;
+import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX;
+
+import io.reactivex.rxjava3.core.Observable;
+import io.reactivex.rxjava3.subjects.BehaviorSubject;
+
+
+public abstract class BaseActivity extends AppCompatActivity implements LifecycleProvider {
+ public final BehaviorSubject lifecycleSubject = BehaviorSubject.create();
+
+ public BaseActivity() {
+ super();
+ }
+
+ @ContentView
+ public BaseActivity(@LayoutRes int contentLayoutId) {
+ super(contentLayoutId);
+ }
+
+ @Override
+ @NonNull
+ @CheckResult
+ public final Observable lifecycle() {
+ return lifecycleSubject.hide();
+ }
+
+ @Override
+ @NonNull
+ @CheckResult
+ public final LifecycleTransformer bindUntilEvent(@NonNull ActivityEvent event) {
+ return RxLifecycle.bindUntilEvent(lifecycleSubject, event);
+ }
+
+ @Override
+ @NonNull
+ @CheckResult
+ public final LifecycleTransformer bindToLifecycle() {
+ return RxLifecycleAndroid.bindActivity(lifecycleSubject);
+ }
+
+ @Override
+ @CallSuper
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ lifecycleSubject.onNext(ActivityEvent.CREATE);
+// StatusBarUtil.init(this);
+ UltimateBarX.statusBar(this)
+ .transparent()
+ .colorRes(R.color.white)
+// .light(true)
+ .apply();
+ UltimateBarX.navigationBar(this)
+ .transparent()
+ .colorRes(R.color.white)
+// .light(true)
+ .apply();
+ setContentView(this.getLayoutId());
+ initView();
+ initData();
+ }
+
+ /**
+ * 设置布局
+ */
+ public abstract int getLayoutId();
+
+ /**
+ * 初始化视图
+ */
+ public abstract void initView();
+
+
+ /**
+ * 初始化数据
+ */
+ public abstract void initData();
+
+ @Override
+ @CallSuper
+ protected void onStart() {
+ super.onStart();
+ lifecycleSubject.onNext(ActivityEvent.START);
+ }
+
+ @Override
+ @CallSuper
+ protected void onResume() {
+ super.onResume();
+ lifecycleSubject.onNext(ActivityEvent.RESUME);
+ }
+
+ @Override
+ @CallSuper
+ protected void onPause() {
+ lifecycleSubject.onNext(ActivityEvent.PAUSE);
+ super.onPause();
+ }
+
+ @Override
+ @CallSuper
+ protected void onStop() {
+ lifecycleSubject.onNext(ActivityEvent.STOP);
+ super.onStop();
+ }
+
+ @Override
+ @CallSuper
+ protected void onDestroy() {
+ lifecycleSubject.onNext(ActivityEvent.DESTROY);
+ super.onDestroy();
+ }
+}
diff --git a/src/com/uiuipad/os/alarm/BasePresenter.java b/src/com/uiuipad/os/alarm/BasePresenter.java
new file mode 100644
index 0000000..9c33bbb
--- /dev/null
+++ b/src/com/uiuipad/os/alarm/BasePresenter.java
@@ -0,0 +1,10 @@
+package com.uiuipad.os.alarm;
+
+import androidx.annotation.NonNull;
+
+public interface BasePresenter {
+
+ void attachView(@NonNull V view);
+
+ void detachView();
+}
diff --git a/src/com/uiuipad/os/alarm/BaseView.java b/src/com/uiuipad/os/alarm/BaseView.java
new file mode 100644
index 0000000..34e1ed0
--- /dev/null
+++ b/src/com/uiuipad/os/alarm/BaseView.java
@@ -0,0 +1,4 @@
+package com.uiuipad.os.alarm;
+
+public interface BaseView {
+}
diff --git a/src/com/uiuipad/os/alarm/JzvdStdAssert.java b/src/com/uiuipad/os/alarm/JzvdStdAssert.java
new file mode 100644
index 0000000..1f20fb7
--- /dev/null
+++ b/src/com/uiuipad/os/alarm/JzvdStdAssert.java
@@ -0,0 +1,84 @@
+package com.uiuipad.os.alarm;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.util.Log;
+
+import cn.jzvd.JzvdStd;
+
+
+public class JzvdStdAssert extends JzvdStd {
+ private onVideoCompletionListener onVideoCompletionListener;
+ private ScreenOrientationChangeListener changeListener;
+ private GotoFullScreenListener gotoFullScreenListener;
+
+ public JzvdStdAssert(Context context) {
+ super(context);
+ }
+
+ public JzvdStdAssert(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+
+ @Override
+ public void onPrepared() {
+ Log.e("onStateChanged", "onPrepared");
+ state = STATE_PREPARED;
+ if (!preloading) {
+ mediaInterface.start();
+ preloading = false;
+ }
+ onStatePlaying();
+ }
+
+
+ @Override
+ public void onCompletion() {
+ super.onCompletion();
+ if (onVideoCompletionListener != null) {
+ onVideoCompletionListener.onVideoComplet();
+ }
+ Log.e("onStateChanged", "onCompletion");
+ }
+
+ public void setOnCompletionListener(onVideoCompletionListener listener) {
+ this.onVideoCompletionListener = listener;
+ }
+
+ public void setScreenOrientationChangeListener(ScreenOrientationChangeListener listener) {
+ this.changeListener = listener;
+ }
+
+ public void setGotoFullScreenListener(GotoFullScreenListener listener) {
+ this.gotoFullScreenListener = listener;
+ }
+
+ @Override
+ public void gotoNormalScreen() {
+ super.gotoNormalScreen();
+ changeListener.onOrientationChange();
+ }
+
+ @Override
+ public void gotoFullscreen() {
+ super.gotoFullscreen();
+ gotoFullScreenListener.onGotoFullScreen();
+ }
+
+ //视频播放完成回调
+ public interface onVideoCompletionListener {
+ void onVideoComplet();
+ }
+
+ //退出全屏回调
+ public interface ScreenOrientationChangeListener {
+ void onOrientationChange();
+ }
+
+ //进入全屏回调
+ public interface GotoFullScreenListener {
+ void onGotoFullScreen();
+ }
+
+}
diff --git a/src/com/uiuipad/os/alarm/JzvdStdRound.java b/src/com/uiuipad/os/alarm/JzvdStdRound.java
new file mode 100644
index 0000000..b752056
--- /dev/null
+++ b/src/com/uiuipad/os/alarm/JzvdStdRound.java
@@ -0,0 +1,92 @@
+package com.uiuipad.os.alarm;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.PaintFlagsDrawFilter;
+import android.graphics.Path;
+import android.graphics.RectF;
+import android.util.AttributeSet;
+
+import com.uiuipad.os.R;
+
+import cn.jzvd.JzvdStd;
+
+public class JzvdStdRound extends JzvdStd {
+
+ private int radius;
+ private int leftTopRadius;
+ private int rightTopRadius;
+ private int rightBottomRadius;
+ private int leftBottomRadius;
+
+ public JzvdStdRound(Context context) {
+ super(context);
+ }
+ public JzvdStdRound(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ initAttrs(context, attrs);
+ }
+
+ @Override
+ public int getLayoutId() {
+ return R.layout.layout_jzstd_notitle;
+ }
+
+ void initAttrs(Context context, AttributeSet attrs) {
+ TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.JzvdStdRound);
+ radius = a.getDimensionPixelSize(R.styleable.JzvdStdRound_radius, 0);
+ leftTopRadius = a.getDimensionPixelSize(R.styleable.JzvdStdRound_left_top_radius, 0);
+ rightTopRadius = a.getDimensionPixelSize(R.styleable.JzvdStdRound_right_top_radius, 0);
+ rightBottomRadius = a.getDimensionPixelSize(R.styleable.JzvdStdRound_right_bottom_radius, 0);
+ leftBottomRadius = a.getDimensionPixelSize(R.styleable.JzvdStdRound_left_bottom_radius, 0);
+ }
+
+
+ public void setRadius(int radius){
+ this.radius = radius;
+ invalidate();
+ }
+
+ public void setLeftTopRadius(int leftTopRadius) {
+ this.leftTopRadius = leftTopRadius;
+ invalidate();
+ }
+
+
+ public void setRightTopRadius(int rightTopRadius) {
+ this.rightTopRadius = rightTopRadius;
+ invalidate();
+ }
+
+
+ public void setRightBottomRadius(int rightBottomRadius) {
+ this.rightBottomRadius = rightBottomRadius;
+ invalidate();
+ }
+
+ public void setLeftBottomRadius(int leftBottomRadius) {
+ this.leftBottomRadius = leftBottomRadius;
+ invalidate();
+ }
+
+ @Override
+ protected void dispatchDraw(Canvas canvas) {
+ Path path = new Path();
+ if (radius > 0) {
+ path.addRoundRect(new RectF(0, 0, getMeasuredWidth(), getMeasuredHeight()),
+ radius, radius, Path.Direction.CW);
+ } else {
+ path.addRoundRect(new RectF(0, 0, getMeasuredWidth(), getMeasuredHeight()),
+ new float[]{leftTopRadius, leftTopRadius, rightTopRadius, rightTopRadius,
+ rightBottomRadius, rightBottomRadius, leftBottomRadius, leftBottomRadius},
+ Path.Direction.CW);
+ canvas.setDrawFilter(new PaintFlagsDrawFilter(0,
+ Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG));
+ }
+ canvas.clipPath(path);
+ super.dispatchDraw(canvas);
+ }
+}
+
diff --git a/src/com/uiuipad/os/alarm/NoticeActivity.java b/src/com/uiuipad/os/alarm/NoticeActivity.java
new file mode 100644
index 0000000..baed140
--- /dev/null
+++ b/src/com/uiuipad/os/alarm/NoticeActivity.java
@@ -0,0 +1,99 @@
+package com.uiuipad.os.alarm;
+
+import android.content.Context;
+import android.content.Intent;
+import android.media.AudioManager;
+import android.media.MediaPlayer;
+import android.os.Bundle;
+import android.os.PowerManager;
+import android.os.Vibrator;
+import android.view.View;
+import android.widget.TextView;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.uiuipad.os.R;
+import com.uiuipad.os.uiuiutils.WakeUpUtils;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import cn.jzvd.Jzvd;
+
+public class NoticeActivity extends AppCompatActivity {
+ private String TAG = NoticeActivity.class.getSimpleName();
+
+ @BindView(R.id.positive)
+ TextView positive;
+
+ private int mId;
+ private MediaPlayer mMediaPlayer;
+ private PowerManager mPowerManager;
+ private PowerManager.WakeLock mWakeLock;
+ private AudioManager mAudioManager;
+
+ private Vibrator mVibrator;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_notice);
+ ButterKnife.bind(this);
+
+ Intent intent = getIntent();
+ mId = intent.getIntExtra("id", -1);
+
+ mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
+ mWakeLock = mPowerManager.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK, "WakeAndLock");
+ mVibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
+ mWakeLock.acquire(60 * 1000L);
+ long[] pattern = {1000, 5000, 1000, 5000};
+ mVibrator.vibrate(pattern, 0);
+ WakeUpUtils.wakeUpAndUnlockScreen(this);
+
+ mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
+ int maxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
+ mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, maxVolume, AudioManager.FLAG_PLAY_SOUND);
+
+ mMediaPlayer = MediaPlayer.create(this, R.raw.ni);
+ mMediaPlayer.setLooping(true);
+ // 开始播放
+ mMediaPlayer.start();
+
+ positive.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ Intent noticeIntent = new Intent(NoticeActivity.this, NoticeInfoActivity.class);
+ noticeIntent.putExtra("id", mId);
+ startActivity(noticeIntent);
+
+ finish();
+ }
+ });
+ }
+
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ if (mMediaPlayer != null) {
+ if (mMediaPlayer.isPlaying()) {
+ mMediaPlayer.stop();
+ }
+ mMediaPlayer.release();
+ mMediaPlayer = null;
+ }
+ }
+
+ @Override
+ public void onBackPressed() {
+ if (Jzvd.backPress()) {
+ return;
+ }
+ super.onBackPressed();
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ }
+}
diff --git a/src/com/uiuipad/os/alarm/NoticeInfoActivity.java b/src/com/uiuipad/os/alarm/NoticeInfoActivity.java
new file mode 100644
index 0000000..02e04a7
--- /dev/null
+++ b/src/com/uiuipad/os/alarm/NoticeInfoActivity.java
@@ -0,0 +1,264 @@
+package com.uiuipad.os.alarm;
+
+import android.content.Context;
+import android.content.Intent;
+import android.media.AudioManager;
+import android.media.MediaPlayer;
+import android.os.Bundle;
+import android.os.PowerManager;
+import android.os.Vibrator;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.View;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.constraintlayout.widget.ConstraintLayout;
+
+import com.blankj.utilcode.util.FileUtils;
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
+import com.bumptech.glide.request.RequestOptions;
+import com.uiuipad.os.R;
+import com.uiuipad.os.network.NetInterfaceManager;
+import com.uiuipad.os.network.bean.BaseResponse;
+import com.uiuipad.os.uiuiutils.FileUtil;
+import com.uiuipad.os.uiuiutils.ScreenUtils;
+import com.uiuipad.os.uiuiutils.Utils;
+import com.uiuipad.os.uiuiutils.WakeUpUtils;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.net.URI;
+import java.util.HashMap;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import cn.jzvd.JZDataSource;
+import cn.jzvd.Jzvd;
+import io.reactivex.rxjava3.annotations.NonNull;
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
+
+public class NoticeInfoActivity extends AppCompatActivity {
+ private String TAG = NoticeInfoActivity.class.getSimpleName();
+
+ @BindView(R.id.tv_title)
+ TextView tv_title;
+ @BindView(R.id.bt_ok)
+ Button bt_ok;
+ @BindView(R.id.cl_voice)
+ ConstraintLayout cl_voice;
+ @BindView(R.id.cl_vp)
+ ConstraintLayout cl_vp;
+ @BindView(R.id.jz_video)
+ JzvdStdAssert jz_video;
+ @BindView(R.id.imageView)
+ ImageView imageView;
+
+ private AlarmClockData mAlarmClockData;
+ private int mId;
+ private MediaPlayer mMediaPlayer;
+ private PowerManager mPowerManager;
+ private PowerManager.WakeLock mWakeLock;
+ private AudioManager mAudioManager;
+
+ private Vibrator mVibrator;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_notice_info);
+ ButterKnife.bind(this);
+ Intent intent = getIntent();
+ mId = intent.getIntExtra("id", -1);
+
+ mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
+ mWakeLock = mPowerManager.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK, "WakeAndLock");
+ mVibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
+
+ mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
+ int maxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
+ mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, maxVolume, AudioManager.FLAG_PLAY_SOUND);
+
+ mMediaPlayer = new MediaPlayer();
+
+ if (mId == -1) {
+ finish();
+ } else {
+ mWakeLock.acquire(60 * 1000L);
+ long[] pattern = {1000, 5000, 1000, 5000};
+ mVibrator.vibrate(pattern, 0);
+ WakeUpUtils.wakeUpAndUnlockScreen(this);
+
+ HashMap oldData = AlarmUtils.getInstance().getOldDataMap();
+ mAlarmClockData = oldData.get(mId);
+ if (mAlarmClockData == null) {
+ finish();
+ }
+ Log.e(TAG, "onCreate: " + mAlarmClockData);
+ showPic(mAlarmClockData);
+ jz_video.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ showData(mAlarmClockData);
+ }
+ }, 123);
+ }
+ }
+
+ private void showPic(AlarmClockData alarmClockData) {
+ tv_title.setText(alarmClockData.getTitle());
+ bt_ok.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ HashMap oldData = AlarmUtils.getInstance().getOldDataMap();
+ AlarmClockData alarm = oldData.get(mId);
+ if (alarm != null) {
+ alarm.setFinished(true);
+ AlarmUtils.getInstance().updateAlarmFinished(alarm);
+ }
+ NetInterfaceManager.getInstance()
+ .getUpdateAlarmClockObservable(alarmClockData.getId())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("showData", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull BaseResponse baseResponse) {
+ Log.e("showData", "onNext: " + baseResponse);
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("showData", "onError: " + e.getMessage());
+ onComplete();
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("showData", "onComplete: ");
+ finish();
+ }
+ });
+
+ }
+ });
+ String voiceUrl = alarmClockData.getVoice();
+ String voicemd5 = alarmClockData.getVoice_md5();
+ if (!TextUtils.isEmpty(voiceUrl)) {
+ cl_voice.setVisibility(View.VISIBLE);
+ String fileName = Utils.getFileNamefromURL(voiceUrl);
+ File file = new File(Utils.getDownLoadPath(NoticeInfoActivity.this) + fileName);
+ String fileMD5 = FileUtils.getFileMD5ToString(file);
+// if (!md5.equals(fileMD5)) {
+// // TODO: 2021/12/16
+// } else {
+ try {
+ // 切歌之前先重置,释放掉之前的资源
+ mMediaPlayer.reset();
+ FileInputStream fis = new FileInputStream(file);
+ mMediaPlayer.setDataSource(fis.getFD());
+ // 设置播放源
+// mediaPlayer.setDataSource(file.getAbsolutePath());
+ // 开始播放前的准备工作,加载多媒体资源,获取相关信息
+ mMediaPlayer.prepare();
+ // 开始播放
+ mMediaPlayer.start();
+ } catch (IOException e) {
+ e.printStackTrace();
+ Log.e(TAG, "showData: " + e.getMessage());
+ }
+// }
+ } else {
+ cl_voice.setVisibility(View.GONE);
+ }
+ String filePath = alarmClockData.getFile();
+ RequestOptions options = new RequestOptions().transform(new RoundedCorners(ScreenUtils.dip2px(this, 16F)));
+ String fileName = filePath.substring(filePath.lastIndexOf("/") + 1, filePath.length());
+ String realPath = Utils.getDownLoadPath(NoticeInfoActivity.this) + fileName;
+ File file = new File(realPath);
+ if (file.exists()) {
+ Glide.with(NoticeInfoActivity.this).load(file).apply(options).error(R.drawable.icon_nodata).into(imageView);
+ } else {
+ Glide.with(NoticeInfoActivity.this).load(filePath).apply(options).error(R.drawable.icon_nodata).into(imageView);
+ }
+ }
+
+
+ private void showData(AlarmClockData alarmClockData) {
+ String filePath = alarmClockData.getFile();
+ if (!TextUtils.isEmpty(filePath)) {
+ cl_vp.setVisibility(View.VISIBLE);
+ String fileType = FileUtil.getFileType(filePath);
+ Log.e(TAG, "showData: " + fileType);
+ if (FileUtil.isPictureFile(fileType)) {
+ jz_video.setVisibility(View.GONE);
+ imageView.setVisibility(View.VISIBLE);
+ RequestOptions options = new RequestOptions().transform(new RoundedCorners(ScreenUtils.dip2px(this, 16F)));
+ String fileName = filePath.substring(filePath.lastIndexOf("/") + 1, filePath.length());
+ String realPath = Utils.getDownLoadPath(NoticeInfoActivity.this) + fileName;
+ File file = new File(realPath);
+ if (file.exists()) {
+ Glide.with(NoticeInfoActivity.this).load(file).apply(options).error(R.drawable.icon_nodata).into(imageView);
+ } else {
+ Glide.with(NoticeInfoActivity.this).load(filePath).apply(options).error(R.drawable.icon_nodata).into(imageView);
+ }
+ } else if (FileUtil.isVideoFile(fileType)) {
+ jz_video.setVisibility(View.VISIBLE);
+ imageView.setVisibility(View.GONE);
+ String fileName = filePath.substring(filePath.lastIndexOf("/") + 1, filePath.length());
+ String realPath = Utils.getDownLoadPath(NoticeInfoActivity.this) + fileName;
+ File file = new File(realPath);
+ JZDataSource jzDataSource;
+ if (!file.exists()) {
+ jzDataSource = new JZDataSource(filePath, "");
+ Log.e(TAG, "showData: not exists");
+ } else {
+ Log.e(TAG, "showData: exists " + file);
+ URI uri = file.toURI();
+ jzDataSource = new JZDataSource(uri.toString(), "");
+ }
+ jzDataSource.looping = true;
+ jz_video.setUp(jzDataSource, Jzvd.SCREEN_NORMAL);
+ jz_video.startPreloading();
+ jz_video.startVideoAfterPreloading();
+ jz_video.startVideo();
+ }
+ } else {
+ cl_vp.setVisibility(View.GONE);
+ }
+
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ if (mMediaPlayer != null) {
+ if (mMediaPlayer.isPlaying()) {
+ mMediaPlayer.stop();
+ }
+ mMediaPlayer.release();
+ mMediaPlayer = null;
+ }
+ }
+
+ @Override
+ public void onBackPressed() {
+ if (Jzvd.backPress()) {
+ return;
+ }
+ super.onBackPressed();
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ Jzvd.releaseAllVideos();
+ }
+}
diff --git a/src/com/uiuipad/os/alarm/ToggleButton.java b/src/com/uiuipad/os/alarm/ToggleButton.java
new file mode 100644
index 0000000..a859688
--- /dev/null
+++ b/src/com/uiuipad/os/alarm/ToggleButton.java
@@ -0,0 +1,347 @@
+package com.uiuipad.os.alarm;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.RectF;
+import android.util.AttributeSet;
+import android.util.TypedValue;
+import android.view.View;
+
+import com.facebook.rebound.SimpleSpringListener;
+import com.facebook.rebound.Spring;
+import com.facebook.rebound.SpringConfig;
+import com.facebook.rebound.SpringSystem;
+import com.facebook.rebound.SpringUtil;
+import com.uiuipad.os.R;
+
+public class ToggleButton extends View {
+ private SpringSystem springSystem;
+ private Spring spring;
+ /**
+ *
+ */
+ private float radius;
+ /**
+ * 开启颜色
+ */
+ private int onColor = Color.parseColor("#3D54D9");
+ /**
+ * 关闭颜色
+ */
+ private int offBorderColor = Color.parseColor("#e7e4e4");
+ /**
+ * 灰色带颜色
+ */
+ private int offColor = Color.parseColor("#ffffff");
+ /**
+ * 手柄颜色
+ */
+ private int spotColor = Color.parseColor("#ffffff");
+ /**
+ * 边框颜色
+ */
+ private int borderColor = offBorderColor;
+ /**
+ * 画笔
+ */
+ private Paint paint;
+ /**
+ * 开关状态
+ */
+ private boolean toggleOn = false;
+ /**
+ * 边框大小
+ */
+ private int borderWidth = 2;
+ /**
+ * 垂直中心
+ */
+ private float centerY;
+ /**
+ * 按钮的开始和结束位置
+ */
+ private float startX, endX;
+ /**
+ * 手柄X位置的最小和最大值
+ */
+ private float spotMinX, spotMaxX;
+ /**
+ * 手柄大小
+ */
+ private int spotSize;
+ /**
+ * 手柄X位置
+ */
+ private float spotX;
+ /**
+ * 关闭时内部灰色带高度
+ */
+ private float offLineWidth;
+ /**
+ *
+ */
+ private RectF rect = new RectF();
+ /**
+ * 默认使用动画
+ */
+ private boolean defaultAnimate = true;
+ /**
+ * 是否默认处于打开状态
+ */
+ private boolean isDefaultOn = false;
+ /**
+ * 禁止点击
+ */
+ private boolean disable = false;
+
+ private OnToggleChanged listener;
+
+ public void setDisable(boolean dis) {
+ this.disable = dis;
+ }
+
+ private ToggleButton(Context context) {
+ super(context);
+ }
+
+ public ToggleButton(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ setup(attrs);
+ }
+
+ public ToggleButton(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ setup(attrs);
+ }
+
+ @Override
+ protected void onDetachedFromWindow() {
+ super.onDetachedFromWindow();
+ spring.removeListener(springListener);
+ }
+
+ @Override
+ public void onAttachedToWindow() {
+ super.onAttachedToWindow();
+ spring.addListener(springListener);
+ }
+
+ public void setup(AttributeSet attrs) {
+ paint = new Paint(Paint.ANTI_ALIAS_FLAG);
+ paint.setStyle(Paint.Style.FILL);
+ paint.setStrokeCap(Paint.Cap.ROUND);
+ springSystem = SpringSystem.create();
+ spring = springSystem.createSpring();
+ spring.setSpringConfig(SpringConfig.fromOrigamiTensionAndFriction(50, 7));
+ this.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View arg0) {
+ if (disable) {
+
+ } else {
+ toggle(defaultAnimate);
+ }
+ }
+ });
+ TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.ToggleButton);
+ offBorderColor = typedArray.getColor(R.styleable.ToggleButton_tbOffBorderColor, offBorderColor);
+ onColor = typedArray.getColor(R.styleable.ToggleButton_tbOnColor, onColor);
+ spotColor = typedArray.getColor(R.styleable.ToggleButton_tbSpotColor, spotColor);
+ offColor = typedArray.getColor(R.styleable.ToggleButton_tbOffColor, offColor);
+ borderWidth = typedArray.getDimensionPixelSize(R.styleable.ToggleButton_tbBorderWidth, borderWidth);
+ defaultAnimate = typedArray.getBoolean(R.styleable.ToggleButton_tbAnimate, defaultAnimate);
+ isDefaultOn = typedArray.getBoolean(R.styleable.ToggleButton_tbAsDefaultOn, isDefaultOn);
+ typedArray.recycle();
+ borderColor = offBorderColor;
+ if (isDefaultOn) {
+ toggleOn();
+ }
+ }
+
+ public void toggle() {
+ toggle(true);
+ }
+
+ public void toggle(boolean animate) {
+ toggleOn = !toggleOn;
+ takeEffect(animate);
+ if (listener != null) {
+ listener.onToggle(toggleOn);
+ }
+ }
+
+ public void toggleOn() {
+ setToggleOn();
+ if (listener != null) {
+ listener.onToggle(toggleOn);
+ }
+ }
+
+ public void toggleOff() {
+ setToggleOff();
+ if (listener != null) {
+ listener.onToggle(toggleOn);
+ }
+ }
+
+ /**
+ * 设置显示成打开样式,不会触发toggle事件
+ */
+ public void setToggleOn() {
+ setToggleOn(true);
+ }
+
+ /**
+ * @param animate asd
+ */
+ public void setToggleOn(boolean animate) {
+ toggleOn = true;
+ takeEffect(animate);
+ }
+
+ /**
+ * 设置显示成关闭样式,不会触发toggle事件
+ */
+ public void setToggleOff() {
+ setToggleOff(true);
+ }
+
+ public void setToggleOff(boolean animate) {
+ toggleOn = false;
+ takeEffect(animate);
+ }
+
+ public int isToggleOn() {
+ return toggleOn ? 1 : 0;
+ }
+
+ private void takeEffect(boolean animate) {
+ if (animate) {
+ spring.setEndValue(toggleOn ? 1 : 0);
+ } else {
+//这里没有调用spring,所以spring里的当前值没有变更,这里要设置一下,同步两边的当前值
+ spring.setCurrentValue(toggleOn ? 1 : 0);
+ calculateEffect(toggleOn ? 1 : 0);
+ }
+ }
+
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ final int widthMode = MeasureSpec.getMode(widthMeasureSpec);
+ final int heightMode = MeasureSpec.getMode(heightMeasureSpec);
+ int widthSize = MeasureSpec.getSize(widthMeasureSpec);
+ int heightSize = MeasureSpec.getSize(heightMeasureSpec);
+ Resources r = Resources.getSystem();
+ if (widthMode == MeasureSpec.UNSPECIFIED || widthMode == MeasureSpec.AT_MOST) {
+ widthSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50, r.getDisplayMetrics());
+ widthMeasureSpec = MeasureSpec.makeMeasureSpec(widthSize, MeasureSpec.EXACTLY);
+ }
+ if (heightMode == MeasureSpec.UNSPECIFIED || heightSize == MeasureSpec.AT_MOST) {
+ heightSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 30, r.getDisplayMetrics());
+ heightMeasureSpec = MeasureSpec.makeMeasureSpec(heightSize, MeasureSpec.EXACTLY);
+ }
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ }
+
+ @Override
+ protected void onLayout(boolean changed, int left, int top, int right,
+ int bottom) {
+ super.onLayout(changed, left, top, right, bottom);
+ final int width = getWidth();
+ final int height = getHeight();
+ radius = Math.min(width, height) * 0.5f;
+ centerY = radius;
+ startX = radius;
+ endX = width - radius;
+ spotMinX = startX + borderWidth;
+ spotMaxX = endX - borderWidth;
+ spotSize = height - 4 * borderWidth;
+ spotX = toggleOn ? spotMaxX : spotMinX;
+ offLineWidth = 0;
+ }
+
+ SimpleSpringListener springListener = new SimpleSpringListener() {
+ @Override
+ public void onSpringUpdate(Spring spring) {
+ final double value = spring.getCurrentValue();
+ calculateEffect(value);
+ }
+ };
+
+ private int clamp(int value, int low, int high) {
+ return Math.min(Math.max(value, low), high);
+ }
+
+ @Override
+ public void draw(Canvas canvas) {
+//
+ super.draw(canvas);
+ rect.set(0, 0, getWidth(), getHeight());
+ paint.setColor(borderColor);
+ canvas.drawRoundRect(rect, radius, radius, paint);
+ if (offLineWidth > 0) {
+ final float cy = offLineWidth * 0.5f;
+ rect.set(spotX - cy, centerY - cy, endX + cy, centerY + cy);
+// paint.setColor(offColor);
+ canvas.drawRoundRect(rect, cy, cy, paint);
+ }
+ rect.set(spotX - 1 - radius, centerY - radius, spotX + 1.1f + radius, centerY + radius);
+ paint.setColor(borderColor);
+ canvas.drawRoundRect(rect, radius, radius, paint);
+ final float spotR = spotSize * 0.5f;
+ rect.set(spotX - spotR, centerY - spotR, spotX + spotR, centerY + spotR);
+ paint.setColor(spotColor);
+ canvas.drawRoundRect(rect, spotR, spotR, paint);
+ }
+
+ /**
+ * @param value
+ */
+ private void calculateEffect(final double value) {
+ final float mapToggleX = (float) SpringUtil.mapValueFromRangeToRange(value, 0, 1, spotMinX, spotMaxX);
+ spotX = mapToggleX;
+ float mapOffLineWidth = (float) SpringUtil.mapValueFromRangeToRange(1 - value, 0, 1, 10, spotSize);
+ offLineWidth = mapOffLineWidth;
+ final int fb = Color.blue(onColor);
+ final int fr = Color.red(onColor);
+ final int fg = Color.green(onColor);
+ final int tb = Color.blue(offBorderColor);
+ final int tr = Color.red(offBorderColor);
+ final int tg = Color.green(offBorderColor);
+ int sb = (int) SpringUtil.mapValueFromRangeToRange(1 - value, 0, 1, fb, tb);
+ int sr = (int) SpringUtil.mapValueFromRangeToRange(1 - value, 0, 1, fr, tr);
+ int sg = (int) SpringUtil.mapValueFromRangeToRange(1 - value, 0, 1, fg, tg);
+ sb = clamp(sb, 0, 255);
+ sr = clamp(sr, 0, 255);
+ sg = clamp(sg, 0, 255);
+ borderColor = Color.rgb(sr, sg, sb);
+ postInvalidate();
+ }
+
+ /**
+ * @author ThinkPad
+ */
+ public interface OnToggleChanged {
+ /**
+ * @param on = =
+ */
+ public void onToggle(boolean on);
+ }
+
+ public void setOnToggleChanged(OnToggleChanged onToggleChanged) {
+ listener = onToggleChanged;
+ }
+
+ public boolean isAnimate() {
+ return defaultAnimate;
+ }
+
+ public void setAnimate(boolean animate) {
+ this.defaultAnimate = animate;
+ }
+}
\ No newline at end of file
diff --git a/src/com/uiuipad/os/base/BaseApplication.java b/src/com/uiuipad/os/base/BaseApplication.java
index 798f102..dac6cb3 100644
--- a/src/com/uiuipad/os/base/BaseApplication.java
+++ b/src/com/uiuipad/os/base/BaseApplication.java
@@ -4,6 +4,7 @@ import android.app.Application;
import android.util.Log;
import com.tencent.bugly.crashreport.CrashReport;
+import com.uiuipad.os.alarm.AlarmUtils;
import com.uiuipad.os.manager.AppUsedTimeUtils;
import com.uiuipad.os.manager.ConnectManager;
import com.uiuipad.os.manager.RunningAppManager;
@@ -37,6 +38,7 @@ public class BaseApplication extends Application {
AppUsedTimeUtils.init(this);
RunningAppManager.init(this);
TimeControlManager.init(this);
+ AlarmUtils.init(this);
CrashReport.initCrashReport(getApplicationContext(), "55d55ba689", false);
CrashReport.setDeviceId(this, Utils.getSerial(this));
diff --git a/src/com/uiuipad/os/disklrucache/CacheHelper.java b/src/com/uiuipad/os/disklrucache/CacheHelper.java
index 704b1fa..24de8ab 100644
--- a/src/com/uiuipad/os/disklrucache/CacheHelper.java
+++ b/src/com/uiuipad/os/disklrucache/CacheHelper.java
@@ -451,7 +451,11 @@ public class CacheHelper {
String cachePath;
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())
|| !Environment.isExternalStorageRemovable()) {
- cachePath = context.getExternalCacheDir().getPath();
+ if (context.getExternalCacheDir() != null) {
+ cachePath = context.getExternalCacheDir().getPath();
+ } else {
+ cachePath = context.getCacheDir().getPath();
+ }
} else {
cachePath = context.getCacheDir().getPath();
}
diff --git a/src/com/uiuipad/os/manager/RunningAppManager.java b/src/com/uiuipad/os/manager/RunningAppManager.java
index 4de5865..299d283 100644
--- a/src/com/uiuipad/os/manager/RunningAppManager.java
+++ b/src/com/uiuipad/os/manager/RunningAppManager.java
@@ -666,6 +666,11 @@ public class RunningAppManager {
this.add("com.sprd.engineermode");
this.add("com.teclast.update");
this.add("com.incar.update");
+ this.add("com.uiui.sn");
+ this.add("com.uiui.videoplayer");
+ this.add("com.uiui.appstore");
+ this.add("com.uiui.browser");
+ this.add("com.uiui.aios");
}};
/**
@@ -675,6 +680,7 @@ public class RunningAppManager {
* @return
*/
public boolean inControlTime(String pkg) {
+ //白名单默认可用
if (allowPackage.contains(pkg)) {
return false;
}
@@ -687,6 +693,7 @@ public class RunningAppManager {
}
boolean havaConfigure = TimeControlManager.getInstance().havaConfigure(pkg);
TimeManageSn machineControl = TimeControlManager.getInstance().getGlobalMachineControl();
+ //没有激活或者没有绑定可用
if (machineControl == null) {
return false;
}
@@ -694,31 +701,12 @@ public class RunningAppManager {
if (havaConfigure) {
//有单独设置 不管是分类整机还是其他都是这个设置
TimeManageApp appTimeControl = TimeControlManager.getInstance().getAppTimeControl(pkg);
-// if (appTimeControl.getIs_control() == 0) {
-// ToastUtil.show("应用已被禁用");
-// Log.e(TAG, "inControlTime: " + "应用已被禁用");
-// return true;
-// }
+ //始终可用应用
if (appTimeControl.getUse_type() == 0) {
Log.e(TAG, "inControlTime: " + "应用始终可用");
return false;
}
-
Log.e(TAG, "inControlTime: globalRemainingTime = " + globalRemainingTime);
- if (appTimeControl.getUse_type() != 3) {
- if (globalRemainingTime <= 0) {
-// if (machineControl != null) {
-// if (machineControl.getIs_part() == 0 && machineControl.getIs_quota() == 0) {
-// Log.e(TAG, "inControlTime: is_part = 0 is_quota = 0");
-// //整机额度和时间段关闭不管控
-// return false;
-// }
-// } else {
- ToastUtil.show("今日可使用时间已用完");
- return true;
-// }
- }
- }
//打开时间段管控
if (appTimeControl.getTime_part() != null && appTimeControl.getTime_part().size() != 0) {
boolean inControlTime = inControlTime(machineControl, appTimeControl);
@@ -729,15 +717,10 @@ public class RunningAppManager {
Log.e(TAG, "inControlTime: " + "该应用" + partTime2String(appTimeControl));
return true;
} else {
-// if (appTimeControl.getIs_quota() == 0) {
-// //要求设置了管控时间段没有设置使用额度也可以使用
-// return false;
-// }
if (getAppRemainingTime(pkg) <= 0) {
//没有剩余时间
ToastUtil.show("该应用今日可使用时间已用完");
Log.e(TAG, "inControlTime: " + "该应用今日可使用时间已用完");
-
return true;
} else {
return false;
@@ -745,10 +728,6 @@ public class RunningAppManager {
}
} else {
//关闭时间段管控关闭额度开关为不管控
-// if (appTimeControl.getIs_quota() == 0) {
-// Log.e(TAG, "inControlTime: " + "没有使用额度");
-// return false;
-// }
if (getAppRemainingTime(pkg) <= 0) {
//没有剩余时间
ToastUtil.show("该应用今日可使用时间已用完");
@@ -761,33 +740,6 @@ public class RunningAppManager {
} else {
//没有配置可以直接使用
return false;
-// //根据整机
-// if (machineControl == null) {
-// return false;
-// }
-// if (globalRemainingTime <= 0) {
-//// if (machineControl.getIs_part() == 0 && machineControl.getIs_quota() == 0) {
-//// Log.e(TAG, "inControlTime: is_part = 0 is_quota = 0");
-//// //整机额度和时间段关闭不管控
-//// return false;
-//// }
-// }
-//// if (machineControl.is_quota == 1) {
-// if (isControl == 1) {
-// if (haveUseTime(machineControl.getWork_time(), machineControl.getRest_time(), machineControl.getToday_time())) {
-// return false;
-// } else {
-// boolean inControlTime = inControlTime(machineControl);
-// if (inControlTime) {
-// Log.i(TAG, "inControlTime: " + "应用在管控时间段不能打开" + machineControl.getTime_part().toString());
-// ToastUtil.show("该应用" + partTime2String(machineControl));
-// }
-// return inControlTime;
-// }
-// } else {
-// //关闭整机额度开关 始终可用
-// return false;
-// }
}
}
@@ -862,14 +814,6 @@ public class RunningAppManager {
} else {
remainTime.setTotalTime(appTimeControl.getRest_time());
}
-// if (appTimeControl.getIs_control() == 0) {
-// remainTime.setDisableType(1);
-// remainTime.setContent("应用已被禁用");
-// return remainTime.toString();
-// }
-// if (appTimeControl.getUse_type() == 0) {
-// return "";
-// }
//打开时间段管控
if (appTimeControl.getTime_part() != null && appTimeControl.getTime_part().size() != 0) {
boolean inControlTime = inControlTime(machineControl, appTimeControl);
@@ -879,10 +823,6 @@ public class RunningAppManager {
remainTime.setContent("该应用" + partTime2String(appTimeControl));
return remainTime.getContent();
} else {
-// if (appTimeControl.getIs_quota() == 0) {
-// //要求设置了管控时间段没有设置使用额度也可以使用
-// return "";
-// }
if (getAppRemainingTime(pkg) <= 0) {
//没有剩余时间
if (inWeekDay()) {
@@ -907,9 +847,6 @@ public class RunningAppManager {
}
}
} else {
-// if (appTimeControl.getIs_quota() == 0) {
-// return "";
-// }
if (getAppRemainingTime(pkg) <= 0) {
//没有剩余时间
if (appTimeControl.getUse_type() == 1) {
@@ -924,7 +861,7 @@ public class RunningAppManager {
remainTime.setContent("该应用今日可使用时间已用完");
return remainTime.getContent();
}
- return "";
+ return "该应用今日可使用时间已用完";
}
} else {
//根据整机
@@ -936,7 +873,6 @@ public class RunningAppManager {
} else {
remainTime.setTotalTime(machineControl.getRest_time());
}
-// if (machineControl.is_quota == 1) {
if (haveUseTime(machineControl.getWork_time(), machineControl.getRest_time(), machineControl.getToday_time())) {
return "";
} else {
@@ -949,10 +885,6 @@ public class RunningAppManager {
return "";
}
}
-// } else {
-// //关闭整机额度开关 始终可用
-// return "";
-// }
}
}
diff --git a/src/com/uiuipad/os/model/LoaderTask.java b/src/com/uiuipad/os/model/LoaderTask.java
index a952da4..2198eea 100644
--- a/src/com/uiuipad/os/model/LoaderTask.java
+++ b/src/com/uiuipad/os/model/LoaderTask.java
@@ -314,12 +314,13 @@ public class LoaderTask implements Runnable {
ArrayList added = new ArrayList();
synchronized (this) {
for (LauncherActivityInfo app : apps) {
- Log.e("verifyApplications", "AllAPP: " + app.getApplicationInfo().packageName);
- if (BuildConfig.APPLICATION_ID.equals(app.getApplicationInfo().packageName)
- || "com.ygyb.yischool".equals(app.getApplicationInfo().packageName)
+ Log.e("verifyApplications", "AllAPP: pkg = " + app.getApplicationInfo().packageName);
+ Log.e("verifyApplications", "AllAPP: className = " + app.getComponentName().getClassName());
+ if ("com.ygyb.yischool".equals(app.getApplicationInfo().packageName)
|| "com.cube.setlauncherdef".equals(app.getApplicationInfo().packageName)
|| "com.iflytek.speechcloud".equals(app.getApplicationInfo().packageName)
|| "com.oirsdfg89.flg".equals(app.getApplicationInfo().packageName)
+ || "com.uiuipad.os.Launcher".equals(app.getComponentName().getClassName())
)
continue;
if (is_control == 1) {
diff --git a/src/com/uiuipad/os/network/NetInterfaceManager.java b/src/com/uiuipad/os/network/NetInterfaceManager.java
index 9e0a3dc..99c49e9 100644
--- a/src/com/uiuipad/os/network/NetInterfaceManager.java
+++ b/src/com/uiuipad/os/network/NetInterfaceManager.java
@@ -2,12 +2,22 @@ package com.uiuipad.os.network;
import android.annotation.SuppressLint;
import android.content.Context;
+import android.util.Log;
import com.tencent.mmkv.MMKV;
+import com.trello.rxlifecycle4.RxLifecycle;
+import com.trello.rxlifecycle4.android.ActivityEvent;
+import com.trello.rxlifecycle4.android.FragmentEvent;
+import com.uiuipad.os.alarm.AlarmClockData;
+import com.uiuipad.os.alarm.AlarmUtils;
import com.uiuipad.os.disklrucache.CacheHelper;
+import com.uiuipad.os.gson.GsonUtils;
import com.uiuipad.os.network.api.TimeManageAppApi;
import com.uiuipad.os.network.api.TimeManageSnApi;
import com.uiuipad.os.network.api.UploadAppUseLogApi;
+import com.uiuipad.os.network.api.alarmclock.AlarmClockApi;
+import com.uiuipad.os.network.api.alarmclock.AlarmClockByIdApi;
+import com.uiuipad.os.network.api.alarmclock.UpdateAlarmClockApi;
import com.uiuipad.os.network.bean.BaseResponse;
import com.uiuipad.os.network.bean.TimeManageApp;
import com.uiuipad.os.network.bean.TimeManageSn;
@@ -18,10 +28,15 @@ import java.io.File;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
+import io.reactivex.rxjava3.annotations.NonNull;
import io.reactivex.rxjava3.core.Observable;
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.schedulers.Schedulers;
+import io.reactivex.rxjava3.subjects.BehaviorSubject;
import okhttp3.Cache;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
@@ -130,4 +145,118 @@ public class NetInterfaceManager {
.observeOn(AndroidSchedulers.mainThread());
}
+ public Observable>> getAlarmClockObservable() {
+ return mRetrofit.create(AlarmClockApi.class)
+ .getAlarmClock(Utils.getSerial(mContext))
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
+ }
+
+ public Observable getUpdateAlarmClockObservable(int id) {
+ return mRetrofit.create(UpdateAlarmClockApi.class)
+ .updateAlarmClock(Utils.getSerial(mContext),id)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
+ }
+
+ public Observable getAlarmClockByIdObservable(int id) {
+ return mRetrofit.create(AlarmClockByIdApi.class)
+ .alarmClockById(Utils.getSerial(mContext),id)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
+ }
+
+
+
+ public interface AlarmClockCallback {
+ void setAlarmClock(List alarmClockList);
+
+ void setAlarmClockEmpty();
+
+ void onError();
+ }
+
+
+ public void getAlarmClock(boolean refresh, BehaviorSubject lifecycle, AlarmClockCallback callback) {
+ getAlarmClock(lifecycle, callback);
+ }
+
+ public void getAlarmClock(BehaviorSubject lifecycle, AlarmClockCallback callback) {
+ getAlarmClockObservable()
+ .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY))
+ .subscribe(getAlarmClockObserver(callback));
+ }
+
+ public void getAlarmClockFragment(BehaviorSubject lifecycle, AlarmClockCallback callback) {
+ getAlarmClockObservable()
+ .compose(RxLifecycle.bindUntilEvent(lifecycle, FragmentEvent.DESTROY))
+ .subscribe(getAlarmClockObserver(callback));
+ }
+
+ public void getAlarmClock(AlarmClockCallback callback) {
+ getAlarmClockObservable()
+ .subscribe(getAlarmClockObserver(callback));
+ }
+
+ public void getAlarmClock() {
+ getAlarmClockObservable()
+ .subscribe(getAlarmClockObserver(null));
+ }
+
+ public Observer>> getAlarmClockObserver(AlarmClockCallback callback) {
+ return new Observer>>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("getAlarmClockObserver", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull BaseResponse> listBaseResponse) {
+ Log.e("getAlarmClockObserver", "onNext: ");
+ if (listBaseResponse.code == 200) {
+ List alarmClockData = listBaseResponse.data;
+ if (alarmClockData != null && alarmClockData.size() != 0) {
+ AlarmUtils.getInstance().setAlarmClockData(alarmClockData);
+ mMMKV.encode(UrlAddress.GET_ALARM_CLOCK, GsonUtils.toJSONString(alarmClockData));
+// if (callback != null) {
+// callback.setAlarmClock(alarmClockData);
+// }
+ } else {
+ AlarmUtils.getInstance().deleteAllAlarmClock();
+ AlarmUtils.getInstance().setAlarmClockData(null);
+ mMMKV.encode(UrlAddress.GET_ALARM_CLOCK, "");
+// if (callback != null) {
+// callback.setAlarmClockEmpty();
+// }
+ }
+ } else {
+ AlarmUtils.getInstance().deleteAllAlarmClock();
+ AlarmUtils.getInstance().setAlarmClockData(null);
+ mMMKV.encode(UrlAddress.GET_ALARM_CLOCK, "");
+// if (callback != null) {
+// callback.setAlarmClockEmpty();
+// }
+ }
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("getAlarmClockObserver", "onError: " + e.getMessage());
+ if (callback != null) callback.onError();
+ onComplete();
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("getAlarmClockObserver", "onComplete: ");
+ List list = AlarmUtils.getInstance().getOldData();
+ if (list == null || list.size() == 0) {
+ if (callback != null) callback.setAlarmClockEmpty();
+ } else {
+ List filter = list.stream().filter(alarmClockData -> !alarmClockData.isDeleted()).collect(Collectors.toList());
+ if (callback != null) callback.setAlarmClock(filter);
+ }
+ }
+ };
+ }
}
diff --git a/src/com/uiuipad/os/network/UrlAddress.java b/src/com/uiuipad/os/network/UrlAddress.java
index 9973a64..84770be 100644
--- a/src/com/uiuipad/os/network/UrlAddress.java
+++ b/src/com/uiuipad/os/network/UrlAddress.java
@@ -13,4 +13,14 @@ public class UrlAddress {
public static final String GET_TIME_MANAGE_SN = "equipment/timeManage/getTimeManageSn";
/*获取应用时间管控*/
public static final String GET_TIME_MANAGE_APP = "equipment/timeManage/getTimeManageApp";
+
+ /*
+ * 闹钟
+ * */
+ /*获取闹钟*/
+ public static final String GET_ALARM_CLOCK = "equipment/alarmClock/getAlarmClock";
+ /*闹钟完成调用*/
+ public static final String UPDATE_ALARM_CLOCK = "equipment/alarmClock/updateAlarmClock";
+ /*编号查询闹钟*/
+ public static final String ALARM_CLOCK_BY_ID = "equipment/alarmClock/alarmClockById";
}
\ No newline at end of file
diff --git a/src/com/uiuipad/os/network/api/alarmclock/AlarmClockApi.java b/src/com/uiuipad/os/network/api/alarmclock/AlarmClockApi.java
new file mode 100644
index 0000000..4924636
--- /dev/null
+++ b/src/com/uiuipad/os/network/api/alarmclock/AlarmClockApi.java
@@ -0,0 +1,18 @@
+package com.uiuipad.os.network.api.alarmclock;
+
+import com.uiuipad.os.alarm.AlarmClockData;
+import com.uiuipad.os.network.UrlAddress;
+import com.uiuipad.os.network.bean.BaseResponse;
+
+import java.util.List;
+
+import io.reactivex.rxjava3.core.Observable;
+import retrofit2.http.GET;
+import retrofit2.http.Query;
+
+public interface AlarmClockApi {
+ @GET(UrlAddress.GET_ALARM_CLOCK)
+ Observable>> getAlarmClock(
+ @Query("sn") String sn
+ );
+}
diff --git a/src/com/uiuipad/os/network/api/alarmclock/AlarmClockByIdApi.java b/src/com/uiuipad/os/network/api/alarmclock/AlarmClockByIdApi.java
new file mode 100644
index 0000000..f194baa
--- /dev/null
+++ b/src/com/uiuipad/os/network/api/alarmclock/AlarmClockByIdApi.java
@@ -0,0 +1,16 @@
+package com.uiuipad.os.network.api.alarmclock;
+
+import com.uiuipad.os.network.UrlAddress;
+import com.uiuipad.os.network.bean.BaseResponse;
+
+import io.reactivex.rxjava3.core.Observable;
+import retrofit2.http.GET;
+import retrofit2.http.Query;
+
+public interface AlarmClockByIdApi {
+ @GET(UrlAddress.ALARM_CLOCK_BY_ID)
+ Observable alarmClockById(
+ @Query("sn") String sn,
+ @Query("id") int id
+ );
+}
diff --git a/src/com/uiuipad/os/network/api/alarmclock/UpdateAlarmClockApi.java b/src/com/uiuipad/os/network/api/alarmclock/UpdateAlarmClockApi.java
new file mode 100644
index 0000000..192bfd9
--- /dev/null
+++ b/src/com/uiuipad/os/network/api/alarmclock/UpdateAlarmClockApi.java
@@ -0,0 +1,18 @@
+package com.uiuipad.os.network.api.alarmclock;
+
+import com.uiuipad.os.network.UrlAddress;
+import com.uiuipad.os.network.bean.BaseResponse;
+
+import io.reactivex.rxjava3.core.Observable;
+import retrofit2.http.Field;
+import retrofit2.http.FormUrlEncoded;
+import retrofit2.http.POST;
+
+public interface UpdateAlarmClockApi {
+ @FormUrlEncoded
+ @POST(UrlAddress.UPDATE_ALARM_CLOCK)
+ Observable updateAlarmClock(
+ @Field("sn") String sn,
+ @Field("id") int id
+ );
+}
diff --git a/src/com/uiuipad/os/network/bean/NewestAppUpdateResult.java b/src/com/uiuipad/os/network/bean/NewestAppUpdateResult.java
deleted file mode 100644
index a6b729a..0000000
--- a/src/com/uiuipad/os/network/bean/NewestAppUpdateResult.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package com.uiuipad.os.network.bean;
-
-import androidx.annotation.NonNull;
-
-import com.google.gson.Gson;
-import com.google.gson.JsonParser;
-import com.google.gson.annotations.SerializedName;
-
-import java.io.Serializable;
-
-public class NewestAppUpdateResult implements Serializable {
- private static final long serialVersionUID = -934484906663584753L;
-
- long id ;
- String url;
- int version_code;
- String app_name;
- @SerializedName("package")
- String app_package;
- String app_md5;
-
- public long getId() {
- return id;
- }
-
- public void setId(long id) {
- this.id = id;
- }
-
- public String getApp_name() {
- return app_name;
- }
-
- public void setApp_name(String app_name) {
- this.app_name = app_name;
- }
-
- public String getApp_package() {
- return app_package;
- }
-
- public void setApp_package(String app_package) {
- this.app_package = app_package;
- }
-
- public int getVersion_code() {
- return version_code;
- }
-
- public void setVersion_code(int version_code) {
- this.version_code = version_code;
- }
-
- public String getApp_md5() {
- return app_md5;
- }
-
- public void setApp_md5(String app_md5) {
- this.app_md5 = app_md5;
- }
-
- public String getUrl() {
- return url;
- }
-
- public void setUrl(String url) {
- this.url = url;
- }
-
- @NonNull
- @Override
- public String toString() {
- return JsonParser.parseString(new Gson().toJson(this)).getAsJsonObject().toString();
- }
-}
diff --git a/src/com/uiuipad/os/push/PushManager.java b/src/com/uiuipad/os/push/PushManager.java
index 0ba4f75..244cf34 100644
--- a/src/com/uiuipad/os/push/PushManager.java
+++ b/src/com/uiuipad/os/push/PushManager.java
@@ -4,12 +4,16 @@ import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
+import com.uiuipad.os.network.NetInterfaceManager;
import com.uiuipad.os.service.MainService;
import com.uiuipad.os.uiuiutils.ToastUtil;
public class PushManager {
private static final String TAG = PushManager.class.getSimpleName();
+ public static final String SET_ALARMCLOCK = "zuoyeos.action.change.alarmclaock";
+
+
@SuppressLint("StaticFieldLeak")
private static PushManager sInstance;
private Context mContext;
@@ -34,11 +38,20 @@ public class PushManager {
return sInstance;
}
+
+ /*设置闹钟*/
+ private static final String SET_ALARM = "17";
/*时间管控*/
private static final String TIME_MANAGEMENT = "28";
public void setPushContent(String title, String extras) {
switch (title) {
+ case SET_ALARM:
+ ToastUtil.betaShow("收到推送消息: 设置闹钟");
+ NetInterfaceManager.getInstance().getAlarmClock();
+ Intent intent = new Intent(SET_ALARMCLOCK);
+ mContext.sendBroadcast(intent);
+ break;
case TIME_MANAGEMENT:
ToastUtil.betaShow("收到管控:时间管控");
mContext.sendBroadcast(new Intent(MainService.REFRESH_ACTION));
diff --git a/src/com/uiuipad/os/service/MainService.java b/src/com/uiuipad/os/service/MainService.java
index e6bc843..03bce9a 100644
--- a/src/com/uiuipad/os/service/MainService.java
+++ b/src/com/uiuipad/os/service/MainService.java
@@ -7,6 +7,7 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.os.Binder;
import android.os.IBinder;
+import android.text.TextUtils;
import android.util.Log;
import com.blankj.utilcode.util.NetworkUtils;
@@ -15,6 +16,9 @@ import com.trello.rxlifecycle4.LifecycleTransformer;
import com.trello.rxlifecycle4.RxLifecycle;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.trello.rxlifecycle4.android.RxLifecycleAndroid;
+import com.uiuipad.os.alarm.AlarmClockData;
+import com.uiuipad.os.alarm.AlarmUtils;
+import com.uiuipad.os.alarm.NoticeActivity;
import com.uiuipad.os.uiuiutils.ApkUtils;
import com.arialyy.annotations.Download;
import com.arialyy.aria.core.Aria;
@@ -22,12 +26,17 @@ import com.arialyy.aria.core.task.DownloadTask;
import org.jetbrains.annotations.NotNull;
+import java.util.Calendar;
+import java.util.HashMap;
+
import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.subjects.BehaviorSubject;
public class MainService extends Service implements MainSContact.MainView, LifecycleProvider {
private String TAG = MainService.class.getSimpleName();
+ public static final String ALARMWAKEUP = "KUXIN_ALARM_WAKEUP";
+
public MainSPresenter mPresenter;
@@ -90,6 +99,7 @@ public class MainService extends Service implements MainSContact.MainView, Lifec
private void registerReceivers() {
registerTimeReceiver();
registerRefreshReceiver();
+ registerAlarmReceiver();
}
private void unregisterReceivers() {
@@ -99,6 +109,69 @@ public class MainService extends Service implements MainSContact.MainView, Lifec
if (mRefreshReceiver != null) {
unregisterReceiver(mRefreshReceiver);
}
+ if (alarmReceiver != null) {
+ unregisterReceiver(alarmReceiver);
+ }
+ }
+
+
+ private void registerAlarmReceiver() {
+ if (alarmReceiver == null) {
+ alarmReceiver = new AlarmReceiver();
+ }
+ IntentFilter filter = new IntentFilter();
+ filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
+ filter.addAction(ALARMWAKEUP);
+ registerReceiver(alarmReceiver, filter);
+ }
+
+ private AlarmReceiver alarmReceiver = new AlarmReceiver();
+
+ private class AlarmReceiver extends BroadcastReceiver {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ Log.e("AlarmReceiver", "onReceive: " + System.currentTimeMillis());
+ String action = intent.getAction();
+ if (TextUtils.isEmpty(action)) return;
+ Log.e("AlarmReceiver", "onReceive: " + action);
+ String title = intent.getStringExtra("title");
+ int code = intent.getIntExtra("id", -1);
+ Log.e("AlarmReceiver", "onReceive: title = " + title);
+ setNextAlarm(code);
+ if (ALARMWAKEUP.equals(action)) {
+ Intent noticeIntent = new Intent();
+ noticeIntent.putExtra("id", code);
+ noticeIntent.setClass(MainService.this, NoticeActivity.class);
+ noticeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ startActivity(noticeIntent);
+ }
+ }
+ }
+
+ public void setNextAlarm(int code) {
+ HashMap clockDataHashMap = AlarmUtils.getInstance().getOldDataMap();
+ AlarmClockData alarmClockData = clockDataHashMap.get(code);
+ Log.e(TAG, "setNextAlarm: " + alarmClockData);
+ if (alarmClockData != null) {
+ Calendar calendar = Calendar.getInstance();
+ int day_of_week = calendar.get(Calendar.DAY_OF_WEEK) - 1;
+ Log.e(TAG, "setNextAlarm: " + day_of_week);
+ switch (alarmClockData.getType()) {
+ case AlarmUtils.ONCE:
+ break;
+ case AlarmUtils.LOOP:
+ AlarmUtils.getInstance().setDayLoopAlarm(MainService.ALARMWAKEUP, alarmClockData.getTitle(), alarmClockData.getId(), alarmClockData.getTime());
+ break;
+ case AlarmUtils.WORKING_DAY:
+ if (day_of_week < 5 || day_of_week == 7) {
+ AlarmUtils.getInstance().setWorkDayAlarm(MainService.ALARMWAKEUP, alarmClockData.getTitle(), alarmClockData.getId(), alarmClockData.getTime());
+ }
+ break;
+ case AlarmUtils.OFF_DAY:
+ AlarmUtils.getInstance().setOffDayAlarm(MainService.ALARMWAKEUP, alarmClockData.getTitle(), alarmClockData.getId(), alarmClockData.getTime());
+ default:
+ }
+ }
}
private TimeChangedReceiver mTimeChangedReceiver;
diff --git a/src/com/uiuipad/os/touch/ItemClickHandler.java b/src/com/uiuipad/os/touch/ItemClickHandler.java
index 2d768ca..8b53068 100644
--- a/src/com/uiuipad/os/touch/ItemClickHandler.java
+++ b/src/com/uiuipad/os/touch/ItemClickHandler.java
@@ -113,8 +113,12 @@ public class ItemClickHandler {
// if (is_forbid(v.getContext(), packageName)) {
// return;
// }
+ Log.e("ItemClickHandler", "onClick: " + packageName);
if (RunningAppManager.getInstance().inControlTime(packageName)){
- ToastUtil.show(RunningAppManager.getInstance().getDisableContent(packageName));
+ String content = RunningAppManager.getInstance().getDisableContent(packageName);
+ if (!TextUtils.isEmpty(content)){
+ ToastUtil.show(content);
+ }
return;
}
//获取本地密码
@@ -123,7 +127,6 @@ public class ItemClickHandler {
Type type = new TypeToken>() {
}.getType();
List appPasswdBeans = new Gson().fromJson(ApplicationLock, type);
- Log.e("ItemClickHandler", "onClick: " + packageName);
if (appPasswdBeans == null) {
onClickAppShortcut(v, (WorkspaceItemInfo) tag, launcher, sourceContainer);
} else {
diff --git a/src/com/uiuipad/os/uiuiutils/FFmpegUtils.java b/src/com/uiuipad/os/uiuiutils/FFmpegUtils.java
new file mode 100644
index 0000000..cff6fff
--- /dev/null
+++ b/src/com/uiuipad/os/uiuiutils/FFmpegUtils.java
@@ -0,0 +1,56 @@
+package com.uiuipad.os.uiuiutils;
+
+import android.graphics.Bitmap;
+import android.util.Log;
+
+import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
+import io.reactivex.rxjava3.annotations.NonNull;
+import io.reactivex.rxjava3.core.Observable;
+import io.reactivex.rxjava3.core.ObservableEmitter;
+import io.reactivex.rxjava3.core.ObservableOnSubscribe;
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.schedulers.Schedulers;
+import wseemann.media.FFmpegMediaMetadataRetriever;
+
+public class FFmpegUtils {
+ /**
+ * 获取在线音频时间长度
+ *
+ * @param url
+ * @return
+ */
+ public static void getDurationInMilliseconds(String url, Observer observer) {
+ Observable.create(new ObservableOnSubscribe() {
+ @Override
+ public void subscribe(@NonNull ObservableEmitter emitter) throws Throwable {
+ long time = System.currentTimeMillis();
+ FFmpegMediaMetadataRetriever mmr = new FFmpegMediaMetadataRetriever();
+ mmr.setDataSource(url);
+ int duration = Integer.parseInt(mmr.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_DURATION));
+ Log.e("AudioUtils", "getDurationInMilliseconds: " + (System.currentTimeMillis() - time));
+ mmr.release();//释放资源
+ emitter.onNext(duration / 1000);
+ }
+ }).subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(observer);
+ }
+
+ public static void loadVideoScreenshot(String url, Observer observer) {
+ Observable.create(new ObservableOnSubscribe() {
+ @Override
+ public void subscribe(@NonNull ObservableEmitter emitter) throws Throwable {
+ FFmpegMediaMetadataRetriever mmr = new FFmpegMediaMetadataRetriever();
+ mmr.setDataSource(url);
+ mmr.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_ALBUM);
+ mmr.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_ARTIST);
+ Bitmap b = mmr.getFrameAtTime(2000000, FFmpegMediaMetadataRetriever.OPTION_CLOSEST); // frame at 2 seconds
+ byte[] artwork = mmr.getEmbeddedPicture();
+ mmr.release();
+ emitter.onNext(b);
+ }
+ }).subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(observer);
+ }
+}
diff --git a/src/com/uiuipad/os/uiuiutils/FileUtil.java b/src/com/uiuipad/os/uiuiutils/FileUtil.java
new file mode 100644
index 0000000..022c8e7
--- /dev/null
+++ b/src/com/uiuipad/os/uiuiutils/FileUtil.java
@@ -0,0 +1,109 @@
+package com.uiuipad.os.uiuiutils;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+import android.provider.MediaStore;
+import android.text.TextUtils;
+
+import java.io.File;
+import java.util.HashSet;
+
+public class FileUtil {
+ public static String getFileType(String url) {
+ if (url.indexOf("/") == -1) {
+ return url.substring(url.indexOf("."), url.length());
+ } else {
+ String fileName = url.substring(url.lastIndexOf("/"));
+ return fileName.substring(fileName.indexOf("."), fileName.length());
+ }
+ }
+
+ public static boolean isLocalPath(String path) {
+ return path.startsWith(File.separator);
+ }
+
+ private static HashSet videoFormat = new HashSet() {{
+ this.add(".mp4");
+ this.add(".avi");
+ this.add(".nkv");
+ this.add(".flv");
+ }};
+ private static HashSet pictureFormat = new HashSet() {{
+ this.add(".png");
+ this.add(".jpg");
+ this.add(".jpeg");
+ this.add(".bmp");
+ }};
+
+ public static boolean isVideoFile(String fileName) {
+ if (TextUtils.isEmpty(fileName)) {
+ return false;
+ } else {
+ if (!fileName.startsWith(".")) {
+ return videoFormat.contains(getFileType(fileName));
+ } else {
+ return videoFormat.contains(fileName);
+ }
+ }
+ }
+
+ public static boolean isPictureFile(String fileName) {
+ if (TextUtils.isEmpty(fileName)) {
+ return false;
+ } else {
+ if (!fileName.startsWith(".")) {
+ return pictureFormat.contains(getFileType(fileName));
+ } else {
+ return pictureFormat.contains(fileName);
+ }
+ }
+ }
+
+ public static File uriToFile(Uri uri, Context context) {
+ String path = null;
+ if ("file".equals(uri.getScheme())) {
+ path = uri.getEncodedPath();
+ if (path != null) {
+ path = Uri.decode(path);
+ ContentResolver cr = context.getContentResolver();
+ StringBuffer buff = new StringBuffer();
+ buff.append("(").append(MediaStore.Images.ImageColumns.DATA).append("=").append("'" + path + "'").append(")");
+ Cursor cur = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String[]{MediaStore.Images.ImageColumns._ID, MediaStore.Images.ImageColumns.DATA}, buff.toString(), null, null);
+ int index = 0;
+ int dataIdx = 0;
+ for (cur.moveToFirst(); !cur.isAfterLast(); cur.moveToNext()) {
+ index = cur.getColumnIndex(MediaStore.Images.ImageColumns._ID);
+ index = cur.getInt(index);
+ dataIdx = cur.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
+ path = cur.getString(dataIdx);
+ }
+ cur.close();
+ if (index == 0) {
+ } else {
+ Uri u = Uri.parse("content://media/external/images/media/" + index);
+ System.out.println("temp uri is :" + u);
+ }
+ }
+ if (path != null) {
+ return new File(path);
+ }
+ } else if ("content".equals(uri.getScheme())) {
+ // 4.2.2以后
+ String[] proj = {MediaStore.Images.Media.DATA};
+ Cursor cursor = context.getContentResolver().query(uri, proj, null, null, null);
+ if (cursor.moveToFirst()) {
+ int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
+ path = cursor.getString(columnIndex);
+ }
+ cursor.close();
+
+ return new File(path);
+ } else {
+ //Log.i(TAG, "Uri Scheme:" + uri.getScheme());
+ }
+ return null;
+ }
+
+}
diff --git a/src/com/uiuipad/os/uiuiutils/ScreenUtils.java b/src/com/uiuipad/os/uiuiutils/ScreenUtils.java
new file mode 100644
index 0000000..cf73832
--- /dev/null
+++ b/src/com/uiuipad/os/uiuiutils/ScreenUtils.java
@@ -0,0 +1,32 @@
+package com.uiuipad.os.uiuiutils;
+
+import android.content.Context;
+import android.content.res.Resources;
+
+public class ScreenUtils {
+ /**
+ * 根据手机的分辨率从 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 int dp2px(Resources resources, float dp) {
+ final float scale = resources.getDisplayMetrics().density;
+ return (int) (dp * scale + 0.5f);
+ }
+
+ public static int sp2px(Resources resources, float sp) {
+ final float scale = resources.getDisplayMetrics().scaledDensity;
+ return (int) (sp * scale);
+ }
+}
diff --git a/src/com/uiuipad/os/uiuiutils/Utils.java b/src/com/uiuipad/os/uiuiutils/Utils.java
index d19c343..db22af5 100644
--- a/src/com/uiuipad/os/uiuiutils/Utils.java
+++ b/src/com/uiuipad/os/uiuiutils/Utils.java
@@ -10,14 +10,18 @@ import android.content.pm.UserInfo;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Build;
+import android.os.Environment;
import android.os.RemoteException;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.Log;
+import androidx.core.content.ContextCompat;
+
import com.uiuipad.os.BuildConfig;
import java.io.BufferedReader;
+import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.Method;
@@ -334,4 +338,34 @@ public class Utils {
throw e.rethrowFromSystemServer();
}
}
+
+
+ public static File getDiskCacheDir(Context context, String uniqueName) {
+ String cachePath;
+ if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())
+ || !Environment.isExternalStorageRemovable()) {
+ if (context.getExternalCacheDir() != null) {
+ cachePath = context.getExternalCacheDir().getPath();
+ } else {
+ cachePath = context.getCacheDir().getPath();
+ }
+ } else {
+ cachePath = context.getCacheDir().getPath();
+ }
+ return new File(cachePath + File.separator + uniqueName);
+ }
+
+ public static String getDownLoadPath(Context context) {
+ String path = ContextCompat.getExternalFilesDirs(context, Environment.DIRECTORY_DOWNLOADS)[0].getAbsolutePath();
+ return path + File.separator;
+ }
+
+ public static boolean isLocalPath(String path) {
+ return path.startsWith(File.separator);
+ }
+
+ public static String getFileNamefromURL(String url) {
+ int position = url.lastIndexOf("/");
+ return url.substring(position + 1);
+ }
}
diff --git a/src/com/uiuipad/os/uiuiutils/WakeUpUtils.java b/src/com/uiuipad/os/uiuiutils/WakeUpUtils.java
new file mode 100644
index 0000000..b63743f
--- /dev/null
+++ b/src/com/uiuipad/os/uiuiutils/WakeUpUtils.java
@@ -0,0 +1,119 @@
+package com.uiuipad.os.uiuiutils;
+
+import android.annotation.SuppressLint;
+import android.app.Activity;
+import android.app.KeyguardManager;
+import android.content.Context;
+import android.os.Build;
+import android.os.PowerManager;
+import android.util.Log;
+import android.view.Window;
+import android.view.WindowManager;
+
+import androidx.annotation.RequiresApi;
+
+public class WakeUpUtils {
+
+ /**
+ * 唤醒手机屏幕并解锁
+ */
+ public static void wakeUpAndUnlock(Activity activity) {
+ // 获取电源管理器对象
+ PowerManager pm = (PowerManager) activity.getApplicationContext()
+ .getSystemService(Context.POWER_SERVICE);
+ boolean screenOn = pm.isScreenOn();
+ Log.d("WakeScreen0", "screenOn: " + screenOn);
+ if (!screenOn) {
+ // 获取PowerManager.WakeLock对象,后面的参数|表示同时传入两个值,最后的是LogCat里用的Tag
+ @SuppressLint("InvalidWakeLockTag") PowerManager.WakeLock wl = pm.newWakeLock(
+ PowerManager.ACQUIRE_CAUSES_WAKEUP |
+ PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "bright");
+ wl.acquire(10000); // 点亮屏幕
+ wl.release(); // 释放
+ }
+ // 屏幕解锁
+ KeyguardManager keyguardManager = (KeyguardManager) activity.getApplicationContext()
+ .getSystemService(Context.KEYGUARD_SERVICE);
+ KeyguardManager.KeyguardLock keyguardLock = keyguardManager.newKeyguardLock("unLock");
+ // 屏幕锁定
+// keyguardLock.reenableKeyguard();
+ keyguardLock.disableKeyguard(); // 解锁
+ unLockScreen(activity);
+ }
+
+ private static void unLockScreen(Activity activity) {
+ final Window win = activity.getWindow();
+ win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
+ | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
+
+ win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
+ | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
+ | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);
+ }
+
+ /**
+ * 唤醒手机屏幕并解锁
+ */
+ @RequiresApi(api = Build.VERSION_CODES.O)
+ public static void wakeUpAndUnlockScreen(Activity activity) {
+
+ Window win = activity.getWindow();
+ win.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
+ | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
+ | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
+
+ PowerManager pm = (PowerManager) activity.getSystemService(Context.POWER_SERVICE);
+ @SuppressLint("InvalidWakeLockTag")
+ PowerManager.WakeLock wakelock = pm.newWakeLock(
+ PowerManager.FULL_WAKE_LOCK
+ | PowerManager.ACQUIRE_CAUSES_WAKEUP, "xx");
+ wakelock.acquire();
+ wakelock.release();
+
+ KeyguardManager keyguardManager = (KeyguardManager) activity.getApplicationContext()
+ .getSystemService(Context.KEYGUARD_SERVICE);
+
+ if (activity == null) return;
+ keyguardManager.requestDismissKeyguard(activity, new KeyguardManager.KeyguardDismissCallback() {
+ @Override
+ public void onDismissError() {
+ super.onDismissError();
+ Log.d("xxx-->", "1 onDismissError");
+ }
+
+ @Override
+ public void onDismissSucceeded() {
+ super.onDismissSucceeded();
+ Log.d("xxx-->", "1 onDismissSucceeded");
+ }
+
+ @Override
+ public void onDismissCancelled() {
+ super.onDismissCancelled();
+ Log.d("xxx-->", "1 onDismissCancelled");
+ }
+ });
+
+ if (activity == null) return;
+ keyguardManager.requestDismissKeyguard(activity, new KeyguardManager.KeyguardDismissCallback() {
+ @Override
+ public void onDismissError() {
+ super.onDismissError();
+ Log.d("xxx-->", "2 onDismissError");
+ }
+
+ @Override
+ public void onDismissSucceeded() {
+ super.onDismissSucceeded();
+ Log.d("xxx-->", "2 onDismissSucceeded");
+ }
+
+ @Override
+ public void onDismissCancelled() {
+ super.onDismissCancelled();
+ Log.d("xxx-->", "2 onDismissCancelled");
+ }
+ });
+
+ }
+}