From 2e90993a53f5b5ec4b5debf7357a0d8b8f2f35b3 Mon Sep 17 00:00:00 2001 From: Zakhar Timoshenko Date: Sun, 24 Dec 2023 15:33:38 +0300 Subject: [PATCH] 0.3 --- app/build.gradle.kts | 14 +- app/proguard-rules.pro | 28 ++- app/src/main/AndroidManifest.xml | 4 +- app/src/main/assets/database/ridebus_v3.db | Bin 3620864 -> 3620864 bytes .../ridebus/data/database/dao/ScheduleDao.kt | 2 +- .../xtimms/ridebus/ui/main/MainActivity.kt | 34 ++- .../xtimms/ridebus/ui/more/AboutController.kt | 150 ------------ .../xtimms/ridebus/ui/more/MoreController.kt | 6 - .../ridebus/ui/schedule/SchedulePresenter.kt | 10 +- .../setting/SettingsAppearanceController.kt | 24 -- .../ui/setting/SettingsMainController.kt | 226 +++++++++++++++--- app/src/main/res/menu/main.xml | 13 + app/src/main/res/menu/main_nav.xml | 5 - app/src/main/res/values/strings.xml | 2 + app/standard/release/output-metadata.json | 16 +- build.gradle.kts | 2 +- buildSrc/src/main/kotlin/AndroidConfig.kt | 6 +- buildSrc/src/main/kotlin/Dependencies.kt | 4 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 19 files changed, 297 insertions(+), 251 deletions(-) delete mode 100644 app/src/main/java/org/xtimms/ridebus/ui/more/AboutController.kt create mode 100644 app/src/main/res/menu/main.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 6c55ca1..c8167f1 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -31,7 +31,7 @@ android { applicationId = "org.xtimms.ridebus" minSdk = AndroidConfig.minSdk targetSdk = AndroidConfig.targetSdk - versionCode = 3 + versionCode = 4 versionName = "0.3" buildConfigField("String", "COMMIT_COUNT", "\"${getCommitCount()}\"") @@ -113,7 +113,7 @@ android { } } - packagingOptions { + packaging { resources.excludes.addAll( listOf( "META-INF/DEPENDENCIES", @@ -134,6 +134,7 @@ android { buildFeatures { viewBinding = true + buildConfig = true // Disable some unused things aidl = false @@ -161,7 +162,7 @@ dependencies { implementation(kotlin("reflect", version = BuildPluginsVersion.KOTLIN)) - val coroutinesVersion = "1.6.4" + val coroutinesVersion = "1.7.3" implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion") @@ -191,9 +192,6 @@ dependencies { // Job scheduling implementation("androidx.work:work-runtime-ktx:2.7.1") implementation("com.google.guava:guava:31.1-android") - implementation( - "com.github.Koitharu.pausing-coroutine-dispatcher:pausing-coroutine-dispatcher:5213d53420" - ) // Network implementation("com.squareup.retrofit2:retrofit:2.9.0") @@ -233,7 +231,7 @@ dependencies { implementation("io.github.reactivecircus.flowbinding:flowbinding-viewpager:$flowbindingVersion") // UI libraries - implementation("com.google.android.material:material:1.8.0") + implementation("com.google.android.material:material:1.10.0") implementation("com.github.arkon.FlexibleAdapter:flexible-adapter:c8013533") implementation("com.github.arkon.FlexibleAdapter:flexible-adapter-ui:c8013533") implementation("dev.chrisbanes.insetter:insetter:0.6.1") @@ -292,7 +290,7 @@ tasks { "-opt-in=kotlinx.coroutines.InternalCoroutinesApi", "-opt-in=kotlinx.serialization.ExperimentalSerializationApi", "-opt-in=coil.annotation.ExperimentalCoilApi", - "-Xjvm-default=enable" + "-Xjvm-default=all" ) } diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 75d9438..0cc4f98 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -1,4 +1,3 @@ -# Keep extension's common dependencies -keep,allowoptimization class org.xtimms.ridebus.** { public protected *; } -keep,allowoptimization class androidx.preference.** { *; } -keep,allowoptimization class kotlin.** { public protected *; } @@ -11,6 +10,7 @@ -keep,allowoptimization class com.github.salomonbrys.kotson.** { public protected *; } -keep,allowoptimization class com.squareup.duktape.** { public protected *; } -keep,allowoptimization class uy.kohesive.injekt.** { public protected *; } +-keep,allowoptimization class com.yandex.** { public protected *; } ##---------------Begin: proguard configuration for RxJava 1.x ---------- -dontwarn sun.misc.** @@ -61,4 +61,28 @@ -keepclassmembers class kotlinx.serialization.** { ; } -##---------------End: proguard configuration for kotlinx.serialization ---------- \ No newline at end of file +##---------------End: proguard configuration for kotlinx.serialization ---------- + +# This is generated automatically by the Android Gradle plugin. +-dontwarn androidx.car.app.SurfaceCallback +-dontwarn androidx.car.app.SurfaceContainer +-dontwarn androidx.window.extensions.WindowExtensions +-dontwarn androidx.window.extensions.WindowExtensionsProvider +-dontwarn androidx.window.extensions.layout.DisplayFeature +-dontwarn androidx.window.extensions.layout.FoldingFeature +-dontwarn androidx.window.extensions.layout.WindowLayoutComponent +-dontwarn androidx.window.extensions.layout.WindowLayoutInfo +-dontwarn androidx.window.sidecar.SidecarDeviceState +-dontwarn androidx.window.sidecar.SidecarDisplayFeature +-dontwarn androidx.window.sidecar.SidecarInterface$SidecarCallback +-dontwarn androidx.window.sidecar.SidecarInterface +-dontwarn androidx.window.sidecar.SidecarProvider +-dontwarn androidx.window.sidecar.SidecarWindowLayoutInfo +-dontwarn com.oracle.svm.core.annotate.AutomaticFeature +-dontwarn com.oracle.svm.core.annotate.Delete +-dontwarn com.oracle.svm.core.annotate.Substitute +-dontwarn com.oracle.svm.core.annotate.TargetClass +-dontwarn com.oracle.svm.core.configure.ResourcesRegistry +-dontwarn org.graalvm.nativeimage.ImageSingletons +-dontwarn org.graalvm.nativeimage.hosted.Feature$BeforeAnalysisAccess +-dontwarn org.graalvm.nativeimage.hosted.Feature \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2c35405..04bc602 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -10,7 +10,7 @@ - + @@ -47,10 +47,12 @@ aXhR>Z<;_{^~`Gp0^g^w`5%KVX0I;qf{z|rIK~cg#*L(hovd=wz&DY<-Oxs^e!?= zJ<$izyU|h>ngv7ab6NA{ve+M_Wf-kr$Pg?ksz&bHZ8SjBsi= zKI{&|upGQM^5A?i?&Jf5S;358YA`u6fnpyq zLrf9?Dy?A>=*6F?0f9B_I396 z?ThTi_L=r6_B{I_dzQV6J=yNH>$bz+=Wp^3f1KaTZ{s)c<@{pa=4bI!cs!pU%=h8D z@X5TF*SJ%DqueP!UcR^d)AIG@<>iaZ=atVcpISb;d}w*U@*d@(^0wu1<)~a{e`as6 z4ts*#&wj>Mu?6ghY#BR}eTyw(7_w|xX>7@omL=pMuy1gLL32@#)u2oUoRSrjlZr&L zEr_%PFr2<<3iQilyiP|&-AF&wq}wvt+N6sine-L7M<%@mj%3nPU?q~RG!{b0WJ{Cm z4$CASR}eI4ivpvb?gFE2V>K4Sl}XbiI|DN5Dlpu~6d3Le|#dVd4BBM5- zR4FH6%xX26IE7nHC3fLfMP+=HbgQI1N|Z`iK`MhPu|^5Xn5tb?X~>wf?Cf;jn6*Jxbtq)+mW&>r72hb*NfjD>8yX)%xlvL6NVF z5)?V3C=#gF=^Dql9zNW@T)6pg`%>ZNtJcCI!$ZxdjglVO`eNbbsn)4QhJx2AqXZS7 zJW5dU7m6ZEwNBEQjxSMWLE$D*=EPBgGA9&eq-q^sWC--&aigSLwT>Mn=)hwN;tr|S z(W3-q=8qDTnFkW<5$WPMN9indr>k0@FWeklfg?u=DmY@4pn}6k39j^EnxMR+T62pG z8|6PYN(N->(89}>twVrm{=3Z~+4?Mq#!9vhHnWiT(&rQyP5+F+4Wxg% z!0U=wpO&{oMdZ+R69?vbCe}@!>O6V7TmHTzuJ@W|BP| zX=;ISq$$S5ldVCMj2nGxa)D9fqynSH?VVCgH+>h^YCDrI;X}eeV?n~l=z=R{YobZU zEx$FP!01XN5w1Yd{vsVCa+?C>KLsK>~K>!6xkE-cqU8;oAK4o)T43*kDlW#q!O<6+s#^}=#(oR<*{ z*T#8~U{E*M4bdXKpq|31kXTSMhdYS{uv0}3l2#C|aM>cQARMAOBo&0kuxOD|pc+TW z7U_h<{CB8M(h2f$&^FQuV7rRbat*Fbk}VPmN{`0N7KsF5iTX(+2vhfyL=dLlB!wXC z;ErYlg0lwhd`2KRs|~9-7YGZari?&vR_#(oA2_RYE29paMZL<1183n_Wwe2_pjR1b z;B+_7l>v2n+bE+9oT&-Q2m@zwk}|q5z?qn;a$P_HcNdlG0%2DfRp88SuHJIeDVEi| z_#2b&wI*CVXK)4n|2%k4+>jVSI8BSyeTf02VRcAi{Ah@IkKvMFfKIe5f~MO?8YrK-6htF)nff#&LP)hfw3)q zDSk12wD?$r-#_8EJ${Svn}pvg{HEZU@MhSF_+5+NmH17-?>ziyp>jTcZTxyyFW+$7 zrCV6}s%a~%nKog)v_85!IzRue=~-x<8pXT0WyXS6f>%&x8exBxPsbTg*xS$B4|ptL zED&A=_6dt~#kmD`4sZ@AF#i+((x^iZ@eT8$;$Wzn~zR&+*mVsu0_C)zujt`}2dA{l-Zz8$_6J`+A1{xbYY z_@nT9;YDFPJUcusJU0AXxPLe^+$kIgw+t&G58e;n3|93;V4 zgD(U}1qTKD=yg|r5H|zQ|EvFwzsY~jU+>@Tul29j%dT(uU-!S{AMYRLAK-u7EW7Hy z@cx2j*Gt|L-hJL}-i_W5u;@C^JKHezTOOP(ChOWo~u4kZ>o-ZT-~c~Q#YvP z>JoLHI$NEpj#i&l`>Gjubn3$b%o$1EcALAOERT{0%Dv^V++J=atCEZN#2ca`o)Gto zpNUoChi0vHhFBnu6m!JhV!D_t`a}bd=^u_PwB)$>P1fKeB`{1HPutj zubn%bo1LqjWzGdo?0nfd-Z{+K-`Ud{awa%q9SnQ>U3-)LoW0(@+y1G2gMFp_UHbw% zwokWDw2!bqWABYs)u7#HH*A-G@L#N|=JA90te8*7s;ZBV;j;Wu`R(#=%1@UcD&JZD zarxTv73B-di_2%}mDM5T+2vi!Q_96|9DfmmgvbU8y7DV-*Gu+K>9G{NJ0Mp~yy1VUn`NjP3+BzKt6 z5uUL#k~^J&hlh;xPGc$#=|kIG2$G*bgIBhk}k&=}G@ogq<%L{Ad| zFH$}2B~(VLr!!o5k?v{YbgPVnPZN7kW=8p5D?78|jPa42|?fcnr#n^hJ2y$&BFkTK}2g9?Jhe|lg+>d2W>kQ%!2GnxpG)l?dPy2z=*?SO({ z{HOaDZWWb&s>s0fN%t!VW<&bP!Yfqi>>?w8*S-bu;k8fUg+Vc^$nfA5?_DrV{&cUx zO{w$~MFu8+`tgEb@~1NkFQL*siwsQubdQ2K7*o3!1W(NAZXg&SUK3YySB-_&l<5p7 z&eOZPWx9*;8H159y}%eQ!v;5cWV*A#b@+U&z_@NZ8C-+Ujs>=5I%F{JE$I#ghW|8! zD=`{3wIJOhouaYuDl#23$#^16Cl?rXPBNH!fBOPs3~py|fb@X^BYj(g={ig-Fw!Rw z#{I|hkTKq5s9~A*7Z?pC-Jp)ciYq1A&=`#%(I8CMgET{9_>*K1M%XMR#n2dKNia0V zfk`h2V|kRuBp90D3Xon9rYolPLRf-fkQ=!WtclXOS_mR(E*5a=!UZ>K0fNzE)IzW^ z$jQ|LZex&RC6WuBQO9kS^dcwSDkZ(hiLFu+jGUBJ zN{XRL4P{6&a)QZ7nvoM!K%$WorQ(!iLo>QDlWyb$ek2?@!GTCQG=UbUBpo?{8%ak_ z&{d=znnXh?89h0~(h^dSJSS2K>4zpU)FdGVK_5_GCq_X83lXw23Ic*?qEQeKL``!A zL6J};Mn42YTrDyB0RpdFKj0Op#K?zWKD>;42o_@{mKgm&78;Q22d)TWX^9aK5V#ou z0YTNdfS_tmB}P63!_#46;Hvl^FRD&>xf`{m|VZ5y2z@$qD>OLNpQR zPZE)w^s9taBqu0CDv}c=6Os|#okArfBRa#yVMs@Ef+F)YiE*MXqO+tWI?I6{sYy;6 zDj_-1#2yfd78J~iZjop`0mK8JkrROsSz^>gG~tq~i4aYhMMB{FmkdzQ^pfD+k#to5>kkASaF=UbvN=6hdAr;XW=_DeA5k*T# zL^MXsnlyxPT*HMS4bd40!IOqiod`ISf>3f5ha~~g7!i095RFj}$%n?MhSWo2R72`P z)l_9d+Cj-!WG5sY8l&i*gmM296_h3E&>84XQVzn1q9sN+L^MGrxo{vIg=Z8#C~Jg+ z9?TLW90HFMi4hJF!ruso2od_vg+qu?COgp-rDFx?A0r$hKv^Rk0%5l#7Y-o;nHb#= zK3t4!2t0cxxolVhf$7BPhQM=ZVst}z@G-g}JXD$Mh7evX6QdiV*lnTa{LN;IOpI(` zqedoLHsB)vX5U37Ml}Ssyb_}tLjI?#5nL8Dr&pgj#=k%TBOBP+`7bwNjA{r3=l&n} zV036v{BJg4{yuv!J0tGF>i^9qOk&i+WwnMvBx5N*vSjl$VwLr8Y-B@g>q#Sb-f8VJ za>{CJ^T_-&td+c67GjO~vGqQ7DVLYtE6*&AgjRF6HD6q3-HJ&1#((HH{$CtE82k78 zI(gM2>o<4pwr2WW)&eK?*Ryr}LH?k>zBG;hn*SPhfIq+=fbHYI;=h6&%kSs+!&dlx z{61KL9nyO#GQ(bEFQWV+_5ynW_DuFXdmeTndyXM0!WOV+*|V_o*)!}J*tzU!_B8Aq zwvlawoz0$N@lyaZ*#@=&b~@JdPr^>ap6L^?1MG43IBXw#j6DWBmOaWIg{`plY(1=C zkFZBzOYC9xu)p4Vk3Ga5g5As>WH=#f6Zr-wvMfXJ)ix8{Q`Co zyMx^UdnWri`#J1F1SWn4yMW!!Zik)EZezE>&SgJkKZTvc*0Qy*vst``tpS+He!_kN zJDvTQ{TOx{yOrGvJHS@6)v$f+7Iq8lSavhJ8McD`^gQGY=`}b{Rnm=yOv!GyPmCND`D@C*){AMfOTvITLHV4UCpkBU4_l+ zAHuF=SFx*Lm$NI`m9Wd$57-Z2m$2n*IqdoD`|SI$i`e(r_h8RtSFkH!7qZLQ<**Cb zzp#ISozE^~m%+|um$FM?=U^**8SJdtY=n&f%tRFDyRg&QQnnO!8oPvD0z1GiW*5Wu zv5VM6uw&VU>_XTITf&yW3iciLosszuS_^qJ*IG7m{qL;VF@+VuX7hjL{|Y;kzsui+ zozCCk@4!yuf8>9J9pG>Cw_*GEX1*DAEdK-l18jxA#ovMz2wlAiTjFoOVEw@ECMps7P#fvTHM5jf^M2AGPqg|t^QGe8oyzsB#JK=A`XTwLryAX!G zHoPKS5~ktT!jr>!;lbg);jVbor9W(jUhvo8o#3~@v%w?5UBQ~*N5K`rk|6z?AncT2 zn>gqSl>cx3AN|+-XZ(l!b^dC9g@394EkDMaFUR|H{ZILO_&fL${c(Qem%TrGzxQ7B z9!CiFcJC(dDsRNQz&qFbvUj{U*ZY*Whqr?_-fMbFeWW(4SJVdQ_5a};|4$Bo=ls}t z9k3omW)K|{t6=`*B3)z%HE_khszCq8`$3*tqx_X~oo@*9R!DCfn3;6UZa z42cFo?lB}JvbG@PcAX&sk?$Geqdnyd4e^F?{^hJ-*yJdG%@9R?=mFh0MLC~0L{iS2 zf}j)1dl@3A**hEJQnRs%3BHxQYVo zC4;NLPv*FS&SbwbxB>k097i}^c5{wHG=g1iFr{Cbm%KF zy{sO9Y&N9U3-XE~)g3@K7!tZ5=mC6sSs+1vW{8iwq;-=a9_3tVh$6Do5ZOfkTj%Q* z^wt>gIXSLkbI)36Fr^=t<4Pa!T!Sfn{~SkzXXZF0pPdY*^nn})l)k0GlwJWw|M&Wo z!Sf6s8Kw7f>><5`S%5z5^(eiQV~NInFrS~|>-U>XQ|0G}S_)865phIkn8r6EHU zk}vXDqV=c_Crf)S5T6@eX)Ifh8e$>)5P z3ChXme3iMBvz>8s=x&f-?`n;1AauP^Srzx$vcBA+TEY37IbRKF{^xVP8W7IseAOqc z=e(%m1zGk0RU@i&hxkQaqohf-I>&mlU89>&VO6w;U1o^BUtrGTQ(+O^RB*X5{=h z$bCdNj*=aVXDwk!EWk>CG0epom)No z2hh=xp!?G9Id&<12ZPJNnDgZ0P}Ggd7&(TXMpu3GFk`an(Qf!GC6ASSfkWHGk?7MF`G zF{l=s*mjd4(6cy?Z3_^!*o3y5%$_DQ6E|yOBPOHBHqNtI1E#<>VZ2!R#(pvsJbb>G*W9Du@YY$6c%fmPfOZ6@i#=b{7KeDl_5iF4}0# zOgOuX(I$Ex&PEw*u4X2l-GxB6%1k)Bi%F0Zi=ztch@Vgp7vy*ly8m=BY$InB&&J7g zAsCe%Yj6#iqS=&=H@z~7W)rReQ!txwgie`faEP9!NH(Phz!b

;qFAo3ID0!`Q%L z82j%!kWB;`CX(IdcFD{{vb&sql~E)cpE_%z-4x5#q=837soNvo*nc zW|;|R*PCd$31`)2V#W|<6u!X~0!cY9^Fmr2LFhFKob zw(8j1%qXOdPmQ*^GKy(yQpcMOduk$T^ezU)v~>o(7(qd8O|V~{nW%QHs|WpW!rHYu z`rm}LYuF~vOjx@{XKKRQwF+KOFk$T)!r+++Yu6%FnuoRV`WU9zPBCvRE3$AC$SAh0bKGH-QE)paI9rNt=LFZA!rPiSXuFAT z*YKugmdCfPDs~q#6W^{@mB!MuvD+P|-ErF;q|0_kwL4zBx}RFF#&6XDU!*4jlI5u}gpH?c~ZIwzTu2h^YTYBe^Pb<@w-1F?pC%c)H+YxY{ z9SO%f-Fv2v-yoA++uCsHzQ?OLuOGP^=i$fh#5sAi2j}dO3vvG0=G$?8>Y+Pu-nnTl z&iR89=lj1qfb+)t`*7~M?=qbIx`%T|+85#DFqv7A$K|{7i2RfMo&2@@xqM3gKt3Qh z$XnzpIV2a$d5Ij9Q)IVnkwN^=`2F~3{91egGdLw!@dO7-4v@`l~v^mP6b%!IH@^EQ5KO786U)UMSku|$S$Fia7qUzl0%<80Sdo`?9#7E+o zcwHP2FNodZY4Jnxpx7X87AwUvu|S+Hri&giT5$d^{ysm-5Aomg=lL)BQ~WW$k+0`B z@T>Sm{5*aJ?;m*+gOA83gVU0sU~zD6FgxfCI)XTG=yCcEJxpJrFVVep2mKL!h^BNc zy_Q~17t?d;EIOHvr4g-=CGMCIGlgU^Tk&6G3 zf6RZ~Kj6RM@AjYexB8p>#J|PA#=q2G=zqzdk@%bpPXi=)Uc~<{ofgbf0r~xZB*#Zr#1ZUE{8BFLKX! z&%#4Cf9@w0hdWNS+RN)-qFReNyneRTlGo2ljNx6pex}ug*UvDTq4O85Mu#sL9blk2 zR-^Br)q>Y&8%_IpeU{bjygt)tG9c;$(D)OH+uAGYGmLXvV5VEs+%M{aSyNeDw8-&xUr~Dwvnh+)F)XJ;_fGw2CYI- zKh*}RQq+5_5g6Hoiq&IO}{i)4)W>QK!E4zT0=3Z(=g~#QSZNlcYsilX^qv8sXW_Y14Lx^m@X9A z&F;1a+0E8lgY0H^S%d6mcUn_x7ug-wAi3G?4I?n;I_r?#Y;D8z@a(qIFhOIH-D(5K zZgxw?Az8LyVW67bJJ34XET^Z36`Je@jQW+lD*1%9>G_e}y%zFjrdBGD&3L zw5AzzUePePx8>F}b@A--(lG8eiEPLQYVAC`%m$L0$S$=J)QfDHHR^d>(lAnF7h4nI zSzlz0dLZ9u7-aD4)~E;aHERT#Eo~S)kR{qA+!db47TXZVOSQ-vhE5kY3{t(&ngEdn z4TIq>u!i=F?0jnonw@71QR)4vH7dPdfl=Q-PFitCU$&u^4w22brWwhaR~p7iv&hc1 zfhKgB+b~GaIo8zBO!1~1xrUolz$uNKF0!*4rc-2R(!_+~*&3 z48}I>;UqwU4SP6I2{!EER3+H3hf|ec!yZmmehqs#RrxL1gUr*U84u6Ehtps5B#3>S-834f`zXm{@s{ASdmG2)_2{r)Y zR3+E|h*Ond10d$M37%;HF=aB%ABVZ4@vSicg29*20EoGx5HSFPLBs%vxvc{t6XyMc z!+Wj)grTt-!yo3hU^Rw6FnA1xKQO2^hCeX4ZOtDn2R~dg10Wc@6$U^s7{CAs2Fpn* z`k^ovKX6h*AeeTMY64+6;3PE&Vs5Qpqy|ASXl4)uBSmTu#9TQbQiC9vUXdCE!JwHz z5KI#AR3ixYjff!-b7Rb-34|5IT_QCIf{{Gc2tt=wq=rDujnKsq2nMY*fzT=vsR0mk zL$opgf=Mv40T3J(U;xD2D%u$U!JwH25LQ#g(3(IPx++owAm$2mF#v)=7Y!hE5$K`` zgf2p)8bAmn9DNLdn9Gq*Lm(KmGX!ETLp}|GV0uJq2n2&ZhCncarRhlx}J2=m~j zP7Q%z&_xr-N#O8!4T6}9@|_w4!L*9hAc(o7m!%3poH?wWrwTy$bUNeY z{BVb{Hl8Z@sLP}0@Kmv<)IB^^=qWW8n<(-qGYaD<@RST(OlRLChct}Egw-Hag>a7x|9Q^lK7V|Yayr4y9ARMDmk2$m|?sPUV5s#v2g zH(?11HKp$7sUl6OF{T1dsWFV=OsO%9!i*ZGiKl0p%QbXWh*3>y=&A_AQGZwseHCF; zK%$WXOsUaG@uk#gqwrE{d}kD0l#bC}!KKt_uh>#*$x=lYwT76diYw}Jgp??(lp0;9 z*?A+hS5#5$Bc3Xzs5T+mD5R7c!z-ecTJD}3Y<4#9VXw}o7oU#*_};{k;`j@WLLbhv z_{0W5`S}a|S?YUm{Vp8O;P|QeOz?Rx4zbU<~vrN|W7W zH*~ks{)N8U+Zd;`d(1rs-Kn%Q>!?Ca;q#7^13^;{`7 zfuWd}iZE1irGi#`AxlLE7;3n>MtZk@;EYcqHdr}C&Z)2|Y#ggGFE|mr7aR!=2K$4( z!H!^C@Nkd@YlCZp%gfD%S;1tp+3+!ammZ-9>3(cB?4;Z1!!)Do=xTZeT}tQELE1+< zsiZFXn7m8=Ob(Kl$v*N7d4hbO+)vh%8_CsV8Cgi2bM~>hVve(L9b3(ovn6aE8!UGq zI!H_$|G58-f7pM;f60H&|B3&&|2_X+f33gTzrtVY&-VxYKEKnKzU!Uv-t&%l2fh8? zUT??9^INYMN}9n4$@El0EPVJDA8J=JZpi{tOd%l7O2TupdM?1TC4@?uofu7 zTA==Ff!eDD>Mlfr$xw9lB@|pOP;9k8q16IaRtr>EEl^#xKw;GaMO6zFR4q_UwLmG= z0(Ddi6j3D>(Hu2YUqS)Z0@YIsR8B2WHnl*_)B*)l3slQeut8^J-xF)uqfSyc_Xs`P{Z;)chy0FQewiHo`bO2mE0t=Cj(C!TjVT z_GLb|Z5j20Tm1ihnewhb>unhn@1c>w+u5>xTh13Z26^G+g_{>%Uif)I@`C0CF0#Df zc_H$mnipYSM0pYCh0KduUNq%Jb6&LMMQdJ+%8Su?(Uuou@}fO2#^yywUUcTgxV-4f zi|)J_pBEGI;*`AT$%|9-Vq#uQ%8SW)(VG{2c`+p~rsl @Transaction - @Query("SELECT schedule._id AS id, schedule.route_id AS routeId, schedule.type_day AS typeDay, strftime('%H:%M', 'now', 'localtime', 'start of day', schedule.hour || ' hours', schedule.minute || ' minutes', routeStops.shift_hour || ' hours', routeStops.shift_minute || ' minutes') AS arrivalTime FROM schedule, routeStops WHERE (routeStops.route_id = :routeId AND schedule.route_id = :routeId AND routeStops.stop_id = :stopId AND schedule.type_day = :typeDay) ORDER BY schedule.hour, schedule.minute") + @Query("SELECT schedule._id AS id, schedule.route_id AS routeId, schedule.type_day AS typeDay, strftime('%H:%M', 'now', 'localtime', 'start of day', schedule.hour || ' hours', schedule.minute || ' minutes', routeStops.shift_hour || ' hours', routeStops.shift_minute || ' minutes') AS arrivalTime FROM schedule, routeStops WHERE (routeStops.route_id = :routeId AND schedule.route_id = :routeId AND routeStops.stop_id = :stopId AND schedule.type_day = :typeDay) ORDER BY schedule.hour, schedule.minute ASC") fun observeArrivalTime(typeDay: Int, routeId: Int, stopId: Int): Flow> @Query("SELECT DISTINCT hour FROM schedule where route_id = :routeId and type_day = :typeDay") diff --git a/app/src/main/java/org/xtimms/ridebus/ui/main/MainActivity.kt b/app/src/main/java/org/xtimms/ridebus/ui/main/MainActivity.kt index f912122..f809ace 100644 --- a/app/src/main/java/org/xtimms/ridebus/ui/main/MainActivity.kt +++ b/app/src/main/java/org/xtimms/ridebus/ui/main/MainActivity.kt @@ -8,6 +8,8 @@ import android.graphics.Color import android.os.Build import android.os.Bundle import android.view.Gravity +import android.view.Menu +import android.view.MenuItem import android.view.ViewGroup import androidx.core.animation.doOnEnd import androidx.core.app.ActivityCompat @@ -45,7 +47,6 @@ import org.xtimms.ridebus.ui.base.controller.* import org.xtimms.ridebus.ui.favourite.FavouritesController import org.xtimms.ridebus.ui.main.welcome.WelcomeDialogController import org.xtimms.ridebus.ui.more.CriticalDatabaseUpdateDialogController -import org.xtimms.ridebus.ui.more.MoreController import org.xtimms.ridebus.ui.more.NewScheduleDialogController import org.xtimms.ridebus.ui.more.NewUpdateDialogController import org.xtimms.ridebus.ui.routes.RoutesTabbedController @@ -154,15 +155,6 @@ class MainActivity : BaseActivity() { R.id.nav_routes -> router.setRoot(RoutesTabbedController(), id) R.id.nav_stops -> router.setRoot(StopsController(), id) R.id.nav_favourites -> router.setRoot(FavouritesController(), id) - R.id.nav_more -> router.setRoot(MoreController(), id) - } - } else if (!isHandlingShortcut) { - when (id) { - R.id.nav_more -> { - if (router.backstackSize == 1) { - router.pushController(SettingsMainController().withFadeTransaction()) - } - } } } true @@ -241,6 +233,28 @@ class MainActivity : BaseActivity() { .launchIn(lifecycleScope) } + override fun onCreateOptionsMenu(menu: Menu?): Boolean { + super.onCreateOptionsMenu(menu) + menuInflater.inflate(R.menu.main, menu) + return true + } + + override fun onPrepareOptionsMenu(menu: Menu?): Boolean { + if (menu == null) { + return false + } + menu.findItem(R.id.action_settings)?.isVisible = router.backstack.lastOrNull()?.controller is RootController + return super.onPrepareOptionsMenu(menu) + } + + override fun onOptionsItemSelected(item: MenuItem): Boolean = when (item.itemId) { + R.id.action_settings -> { + router.pushController(SettingsMainController().withFadeTransaction()) + true + } + else -> super.onOptionsItemSelected(item) + } + /** * Sets custom splash screen exit animation on devices prior to Android 12. * diff --git a/app/src/main/java/org/xtimms/ridebus/ui/more/AboutController.kt b/app/src/main/java/org/xtimms/ridebus/ui/more/AboutController.kt deleted file mode 100644 index 2b687b1..0000000 --- a/app/src/main/java/org/xtimms/ridebus/ui/more/AboutController.kt +++ /dev/null @@ -1,150 +0,0 @@ -package org.xtimms.ridebus.ui.more - -import androidx.preference.PreferenceScreen -import logcat.LogPriority -import org.xtimms.ridebus.BuildConfig -import org.xtimms.ridebus.R -import org.xtimms.ridebus.data.updater.app.AppUpdateChecker -import org.xtimms.ridebus.data.updater.app.AppUpdateResult -import org.xtimms.ridebus.data.updater.app.RELEASE_URL -import org.xtimms.ridebus.ui.base.controller.NoAppBarElevationController -import org.xtimms.ridebus.ui.base.controller.openInBrowser -import org.xtimms.ridebus.ui.base.controller.withFadeTransaction -import org.xtimms.ridebus.ui.more.licenses.LicensesController -import org.xtimms.ridebus.ui.more.sources.UsedSourcesController -import org.xtimms.ridebus.ui.setting.SettingsController -import org.xtimms.ridebus.util.CrashLogUtil -import org.xtimms.ridebus.util.lang.launchNow -import org.xtimms.ridebus.util.lang.toDateTimestampString -import org.xtimms.ridebus.util.preference.add -import org.xtimms.ridebus.util.preference.onClick -import org.xtimms.ridebus.util.preference.preference -import org.xtimms.ridebus.util.preference.titleRes -import org.xtimms.ridebus.util.system.copyToClipboard -import org.xtimms.ridebus.util.system.logcat -import org.xtimms.ridebus.util.system.toast -import java.text.DateFormat -import java.text.SimpleDateFormat -import java.util.* - -const val YANDEX_MAPS_TERMS_OF_USE = "https://yandex.ru/legal/maps_termsofuse" - -class AboutController : SettingsController(), NoAppBarElevationController { - - private val updateChecker by lazy { AppUpdateChecker() } - - private val dateFormat: DateFormat = preferences.dateFormat() - - override fun setupPreferenceScreen(screen: PreferenceScreen) = screen.apply { - titleRes = R.string.pref_category_about - - add(AboutHeaderPreference(context)) - - preference { - key = "pref_about_build_info" - titleRes = R.string.build_info - summary = "${getFormattedBuildTime()} (${BuildConfig.COMMIT_SHA})" - } - preference { - key = "pref_about_database_version" - titleRes = R.string.database_version - summary = preferences.databaseVersion().get() - } - preference { - key = "pref_about_copy_debug_info" - titleRes = R.string.copy_debug_info - onClick { - activity?.let { - val deviceInfo = CrashLogUtil(it).getDebugInfo() - it.copyToClipboard("Debug information", deviceInfo) - } - } - } - if (BuildConfig.INCLUDE_UPDATER) { - preference { - key = "pref_about_check_for_updates" - titleRes = R.string.check_for_updates - - onClick { checkVersion() } - } - } - if (!BuildConfig.DEBUG) { - preference { - key = "pref_about_whats_new" - titleRes = R.string.whats_new - - onClick { - openInBrowser(RELEASE_URL) - } - } - } - preference { - key = "pref_sources_used" - titleRes = R.string.pref_sources_used - onClick { - router.pushController(UsedSourcesController().withFadeTransaction()) - } - } - preference { - key = "pref_yandex_maps_terms_of_use" - titleRes = R.string.yandex_maps_terms_of_use - - onClick { - openInBrowser(YANDEX_MAPS_TERMS_OF_USE) - } - } - preference { - key = "pref_about_licenses" - titleRes = R.string.licenses - onClick { - router.pushController(LicensesController().withFadeTransaction()) - } - } - - add(AboutLinksPreference(context)) - } - - /** - * Checks version and shows a user prompt if an update is available. - */ - private fun checkVersion() { - if (activity == null) return - - checkNotNull(activity).toast(R.string.update_check_look_for_updates) - - launchNow { - try { - when (val result = updateChecker.checkForUpdate(checkNotNull(activity), isUserPrompt = true)) { - is AppUpdateResult.NewUpdate -> { - NewUpdateDialogController(result).showDialog(router) - } - is AppUpdateResult.NoNewUpdate -> { - activity?.toast(R.string.update_check_no_new_updates) - } - } - } catch (error: Exception) { - activity?.toast(error.message) - logcat(LogPriority.ERROR, error) - } - } - } - - private fun getFormattedBuildTime(): String { - return try { - val inputDf = SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'", Locale.US) - inputDf.timeZone = TimeZone.getTimeZone("UTC") - val buildTime = inputDf.parse(BuildConfig.BUILD_TIME) - - val outputDf = DateFormat.getDateTimeInstance( - DateFormat.MEDIUM, - DateFormat.SHORT, - Locale.getDefault() - ) - outputDf.timeZone = TimeZone.getDefault() - - checkNotNull(buildTime).toDateTimestampString(dateFormat) - } catch (e: Exception) { - BuildConfig.BUILD_TIME - } - } -} diff --git a/app/src/main/java/org/xtimms/ridebus/ui/more/MoreController.kt b/app/src/main/java/org/xtimms/ridebus/ui/more/MoreController.kt index 72d7c5c..83b687b 100644 --- a/app/src/main/java/org/xtimms/ridebus/ui/more/MoreController.kt +++ b/app/src/main/java/org/xtimms/ridebus/ui/more/MoreController.kt @@ -91,12 +91,6 @@ class MoreController : iconTint = tintColor onClick { router.pushController(SettingsMainController().withFadeTransaction()) } } - preference { - iconRes = R.drawable.ic_info - iconTint = tintColor - titleRes = R.string.pref_category_about - onClick { router.pushController(AboutController().withFadeTransaction()) } - } /*preference { iconRes = R.drawable.ic_help iconTint = tintColor diff --git a/app/src/main/java/org/xtimms/ridebus/ui/schedule/SchedulePresenter.kt b/app/src/main/java/org/xtimms/ridebus/ui/schedule/SchedulePresenter.kt index 5581649..5e9222a 100644 --- a/app/src/main/java/org/xtimms/ridebus/ui/schedule/SchedulePresenter.kt +++ b/app/src/main/java/org/xtimms/ridebus/ui/schedule/SchedulePresenter.kt @@ -41,8 +41,14 @@ class SchedulePresenter( val (hour, minute) = item.arrivalTime?.split(':') ?: continue rows.getOrPut(hour.toInt()) { TreeSet() }.add(minute.toInt()) } - rows.entries.map { - ScheduleRow(it.key, it.value, time) + val sortedRows = rows.map { + val hour = it.key + val minutes = it.value + Pair(hour, minutes) + }.sortedBy { it.first } + + sortedRows.map { + ScheduleRow(it.first, it.second, time) } }.flowOn(Dispatchers.Default) .onEach { view?.setSchedule(it) } diff --git a/app/src/main/java/org/xtimms/ridebus/ui/setting/SettingsAppearanceController.kt b/app/src/main/java/org/xtimms/ridebus/ui/setting/SettingsAppearanceController.kt index a55e731..bbfff12 100644 --- a/app/src/main/java/org/xtimms/ridebus/ui/setting/SettingsAppearanceController.kt +++ b/app/src/main/java/org/xtimms/ridebus/ui/setting/SettingsAppearanceController.kt @@ -7,7 +7,6 @@ import androidx.core.app.ActivityCompat import androidx.preference.PreferenceScreen import kotlinx.coroutines.flow.launchIn import org.xtimms.ridebus.R -import org.xtimms.ridebus.data.preference.PreferenceKeys import org.xtimms.ridebus.data.preference.PreferenceValues import org.xtimms.ridebus.util.preference.* import org.xtimms.ridebus.util.system.DeviceUtil @@ -127,29 +126,6 @@ class SettingsAppearanceController : SettingsController() { } } } - - preferenceCategory { - titleRes = R.string.pref_category_timestamps - - listPreference { - key = PreferenceKeys.dateFormat - titleRes = R.string.pref_date_format - entryValues = arrayOf("", "MM/dd/yy", "dd/MM/yy", "yyyy-MM-dd", "dd MMM yyyy", "MMM dd, yyyy") - - val now = Date().time - entries = entryValues.map { value -> - val formattedDate = preferences.dateFormat(value.toString()).format(now) - if (value == "") { - "${context.getString(R.string.system_default)} ($formattedDate)" - } else { - "$value ($formattedDate)" - } - }.toTypedArray() - - defaultValue = "" - summary = "%s" - } - } } override fun onSaveViewState(view: View, outState: Bundle) { diff --git a/app/src/main/java/org/xtimms/ridebus/ui/setting/SettingsMainController.kt b/app/src/main/java/org/xtimms/ridebus/ui/setting/SettingsMainController.kt index 8de022e..f9da8cf 100644 --- a/app/src/main/java/org/xtimms/ridebus/ui/setting/SettingsMainController.kt +++ b/app/src/main/java/org/xtimms/ridebus/ui/setting/SettingsMainController.kt @@ -5,48 +5,176 @@ import android.view.MenuInflater import android.view.MenuItem import androidx.appcompat.widget.SearchView import androidx.preference.PreferenceScreen +import logcat.LogPriority +import org.xtimms.ridebus.BuildConfig import org.xtimms.ridebus.R +import org.xtimms.ridebus.data.database.RideBusDatabase +import org.xtimms.ridebus.data.updater.app.AppUpdateChecker +import org.xtimms.ridebus.data.updater.app.AppUpdateResult +import org.xtimms.ridebus.data.updater.app.RELEASE_URL +import org.xtimms.ridebus.data.updater.database.DatabaseUpdateJob +import org.xtimms.ridebus.ui.base.controller.openInBrowser import org.xtimms.ridebus.ui.base.controller.withFadeTransaction +import org.xtimms.ridebus.ui.more.AboutLinksPreference +import org.xtimms.ridebus.ui.more.NewUpdateDialogController +import org.xtimms.ridebus.ui.more.licenses.LicensesController +import org.xtimms.ridebus.ui.more.sources.UsedSourcesController import org.xtimms.ridebus.ui.setting.search.SettingsSearchController +import org.xtimms.ridebus.util.CrashLogUtil +import org.xtimms.ridebus.util.lang.launchNow +import org.xtimms.ridebus.util.lang.toDateTimestampString import org.xtimms.ridebus.util.preference.* +import org.xtimms.ridebus.util.system.copyToClipboard import org.xtimms.ridebus.util.system.getResourceColor +import org.xtimms.ridebus.util.system.logcat +import org.xtimms.ridebus.util.system.toast +import uy.kohesive.injekt.injectLazy +import java.text.DateFormat +import java.text.SimpleDateFormat +import java.util.Locale +import java.util.TimeZone + +const val YANDEX_MAPS_TERMS_OF_USE = "https://yandex.ru/legal/maps_termsofuse" class SettingsMainController : SettingsController() { + private val database: RideBusDatabase by injectLazy() + private val updateChecker by lazy { AppUpdateChecker() } + private val dateFormat: DateFormat = preferences.dateFormat() + override fun setupPreferenceScreen(screen: PreferenceScreen) = screen.apply { titleRes = R.string.label_settings val tintColor = context.getResourceColor(androidx.appcompat.R.attr.colorAccent) - preference { - iconRes = R.drawable.ic_tune - iconTint = tintColor - titleRes = R.string.pref_category_general - onClick { navigateTo(SettingsGeneralController()) } - } - preference { - iconRes = R.drawable.ic_brush - iconTint = tintColor - titleRes = R.string.pref_category_appearance - onClick { navigateTo(SettingsAppearanceController()) } - } - preference { - iconRes = R.drawable.ic_schedule - iconTint = tintColor - titleRes = R.string.pref_category_schedule - onClick { navigateTo(SettingsScheduleController()) } + preferenceCategory { + titleRes = R.string.important_settings + + switchPreference { + bindTo(preferences.autoUpdateSchedule()) + titleRes = R.string.automatic_schedule_updates + summaryRes = R.string.automatic_schedule_updates_summary + iconRes = R.drawable.ic_database_update + iconTint = tintColor + + onChange { newValue -> + val checked = newValue as Boolean + DatabaseUpdateJob.setupTask(checkNotNull(activity), checked) + true + } + } + + listPreference { + bindTo(preferences.city()) + iconRes = R.drawable.ic_city + iconTint = tintColor + titleRes = R.string.city + entriesName = database.cityDao().getCitiesNames().map { it }.toTypedArray() + entryValues = database.cityDao().getCitiesIds().map { it.toString() }.toTypedArray() + summary = "%s" + } } - preference { - iconRes = R.drawable.ic_accessibility - iconTint = tintColor - titleRes = R.string.pref_category_accessibility - onClick { navigateTo(SettingsAccessibilityController()) } + + preferenceCategory { + titleRes = R.string.settings_categories + + preference { + iconRes = R.drawable.ic_tune + iconTint = tintColor + titleRes = R.string.pref_category_general + onClick { navigateTo(SettingsGeneralController()) } + } + preference { + iconRes = R.drawable.ic_brush + iconTint = tintColor + titleRes = R.string.pref_category_appearance + onClick { navigateTo(SettingsAppearanceController()) } + } + preference { + iconRes = R.drawable.ic_schedule + iconTint = tintColor + titleRes = R.string.pref_category_schedule + onClick { navigateTo(SettingsScheduleController()) } + } + preference { + iconRes = R.drawable.ic_accessibility + iconTint = tintColor + titleRes = R.string.pref_category_accessibility + onClick { navigateTo(SettingsAccessibilityController()) } + } + preference { + iconRes = R.drawable.ic_code + iconTint = tintColor + titleRes = R.string.pref_category_advanced + onClick { navigateTo(SettingsAdvancedController()) } + } } - preference { - iconRes = R.drawable.ic_code - iconTint = tintColor - titleRes = R.string.pref_category_advanced - onClick { navigateTo(SettingsAdvancedController()) } + + preferenceCategory { + titleRes = R.string.pref_category_about + + preference { + key = "pref_about_build_info" + titleRes = R.string.build_info + summary = "${getFormattedBuildTime()} (${BuildConfig.COMMIT_SHA})" + } + preference { + key = "pref_about_database_version" + titleRes = R.string.database_version + summary = preferences.databaseVersion().get() + } + preference { + key = "pref_about_copy_debug_info" + titleRes = R.string.copy_debug_info + onClick { + activity?.let { + val deviceInfo = CrashLogUtil(it).getDebugInfo() + it.copyToClipboard("Debug information", deviceInfo) + } + } + } + if (BuildConfig.INCLUDE_UPDATER) { + preference { + key = "pref_about_check_for_updates" + titleRes = R.string.check_for_updates + + onClick { checkVersion() } + } + } + if (!BuildConfig.DEBUG) { + preference { + key = "pref_about_whats_new" + titleRes = R.string.whats_new + + onClick { + openInBrowser(RELEASE_URL) + } + } + } + preference { + key = "pref_sources_used" + titleRes = R.string.pref_sources_used + onClick { + router.pushController(UsedSourcesController().withFadeTransaction()) + } + } + preference { + key = "pref_yandex_maps_terms_of_use" + titleRes = R.string.yandex_maps_terms_of_use + + onClick { + openInBrowser(YANDEX_MAPS_TERMS_OF_USE) + } + } + preference { + key = "pref_about_licenses" + titleRes = R.string.licenses + onClick { + router.pushController(LicensesController().withFadeTransaction()) + } + } + + add(AboutLinksPreference(context)) } } @@ -80,4 +208,48 @@ class SettingsMainController : SettingsController() { } ) } + + /** + * Checks version and shows a user prompt if an update is available. + */ + private fun checkVersion() { + if (activity == null) return + + checkNotNull(activity).toast(R.string.update_check_look_for_updates) + + launchNow { + try { + when (val result = updateChecker.checkForUpdate(checkNotNull(activity), isUserPrompt = true)) { + is AppUpdateResult.NewUpdate -> { + NewUpdateDialogController(result).showDialog(router) + } + is AppUpdateResult.NoNewUpdate -> { + activity?.toast(R.string.update_check_no_new_updates) + } + } + } catch (error: Exception) { + activity?.toast(error.message) + logcat(LogPriority.ERROR, error) + } + } + } + + private fun getFormattedBuildTime(): String { + return try { + val inputDf = SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'", Locale.US) + inputDf.timeZone = TimeZone.getTimeZone("UTC") + val buildTime = inputDf.parse(BuildConfig.BUILD_TIME) + + val outputDf = DateFormat.getDateTimeInstance( + DateFormat.MEDIUM, + DateFormat.SHORT, + Locale.getDefault() + ) + outputDf.timeZone = TimeZone.getDefault() + + checkNotNull(buildTime).toDateTimestampString(dateFormat) + } catch (e: Exception) { + BuildConfig.BUILD_TIME + } + } } diff --git a/app/src/main/res/menu/main.xml b/app/src/main/res/menu/main.xml new file mode 100644 index 0000000..a76ee1c --- /dev/null +++ b/app/src/main/res/menu/main.xml @@ -0,0 +1,13 @@ + +

+ + + + \ No newline at end of file diff --git a/app/src/main/res/menu/main_nav.xml b/app/src/main/res/menu/main_nav.xml index 4a11a59..c5b7600 100644 --- a/app/src/main/res/menu/main_nav.xml +++ b/app/src/main/res/menu/main_nav.xml @@ -16,9 +16,4 @@ android:icon="@drawable/ic_favourite_selector" android:title="@string/title_favourite" /> - - \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8e1e6f4..2cd7d91 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -247,4 +247,6 @@ Done in %1$s with %2$s error Done in %1$s with %2$s errors + Categories of settings + Important settings \ No newline at end of file diff --git a/app/standard/release/output-metadata.json b/app/standard/release/output-metadata.json index 76b6bec..ced82ca 100644 --- a/app/standard/release/output-metadata.json +++ b/app/standard/release/output-metadata.json @@ -20,52 +20,52 @@ "filters": [ { "filterType": "ABI", - "value": "armeabi-v7a" + "value": "x86_64" } ], "attributes": [], "versionCode": 3, "versionName": "0.3", - "outputFile": "app-standard-armeabi-v7a-release.apk" + "outputFile": "app-standard-x86_64-release.apk" }, { "type": "ONE_OF_MANY", "filters": [ { "filterType": "ABI", - "value": "arm64-v8a" + "value": "x86" } ], "attributes": [], "versionCode": 3, "versionName": "0.3", - "outputFile": "app-standard-arm64-v8a-release.apk" + "outputFile": "app-standard-x86-release.apk" }, { "type": "ONE_OF_MANY", "filters": [ { "filterType": "ABI", - "value": "x86" + "value": "arm64-v8a" } ], "attributes": [], "versionCode": 3, "versionName": "0.3", - "outputFile": "app-standard-x86-release.apk" + "outputFile": "app-standard-arm64-v8a-release.apk" }, { "type": "ONE_OF_MANY", "filters": [ { "filterType": "ABI", - "value": "x86_64" + "value": "armeabi-v7a" } ], "attributes": [], "versionCode": 3, "versionName": "0.3", - "outputFile": "app-standard-x86_64-release.apk" + "outputFile": "app-standard-armeabi-v7a-release.apk" } ], "elementType": "File" diff --git a/build.gradle.kts b/build.gradle.kts index 1630a17..5e43b18 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -33,5 +33,5 @@ buildscript { } tasks.register("clean", Delete::class) { - delete(rootProject.buildDir) + delete(rootProject.layout.buildDirectory) } diff --git a/buildSrc/src/main/kotlin/AndroidConfig.kt b/buildSrc/src/main/kotlin/AndroidConfig.kt index c06fb37..154152d 100644 --- a/buildSrc/src/main/kotlin/AndroidConfig.kt +++ b/buildSrc/src/main/kotlin/AndroidConfig.kt @@ -1,6 +1,6 @@ object AndroidConfig { - const val compileSdk = 33 - const val minSdk = 21 - const val targetSdk = 31 + const val compileSdk = 34 + const val minSdk = 23 + const val targetSdk = 34 const val ndk = "22.1.7171670" } \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/Dependencies.kt b/buildSrc/src/main/kotlin/Dependencies.kt index 7376b98..dc7821a 100644 --- a/buildSrc/src/main/kotlin/Dependencies.kt +++ b/buildSrc/src/main/kotlin/Dependencies.kt @@ -1,6 +1,6 @@ object BuildPluginsVersion { - const val AGP = "7.2.2" - const val KOTLIN = "1.7.10" + const val AGP = "8.1.1" + const val KOTLIN = "1.9.10" const val KOTLINTER = "3.11.1" const val ABOUTLIB_PLUGIN = "8.9.4" } \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 4b3a401..f5b5552 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Tue Jun 22 04:33:46 MSK 2021 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME