Merge 3.10

This commit is contained in:
Vishal Nehra
2024-04-19 02:09:34 +05:30
19 changed files with 396 additions and 238 deletions
+111 -104
View File
@@ -4,10 +4,11 @@ apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-parcelize'
apply plugin: 'com.hiya.jacoco-android'
apply plugin: "com.starter.easylauncher"
apply plugin: 'com.google.devtools.ksp'
android {
namespace "com.amaze.filemanager"
compileSdk 33
compileSdk libs.versions.compileSdk.get().toInteger()
packagingOptions {
resources {
excludes += ['proguard-project.txt', 'project.properties', 'META-INF/LICENSE.txt', 'META-INF/LICENSE', 'META-INF/NOTICE.txt', 'META-INF/NOTICE', 'META-INF/DEPENDENCIES.txt', 'META-INF/DEPENDENCIES']
@@ -17,8 +18,8 @@ android {
defaultConfig {
applicationId "com.amaze.filemanager"
minSdkVersion 19
targetSdkVersion 33
minSdkVersion libs.versions.minSdk.get().toInteger()
targetSdkVersion libs.versions.targetSdk.get().toInteger()
versionCode 121
versionName "3.10"
multiDexEnabled true
@@ -49,6 +50,7 @@ android {
buildConfigField "String", "CRYPTO_IV", "\"LxbHiJhhUXcj\""
buildConfigField "String", "FTP_SERVER_KEYSTORE_PASSWORD", "\"vishal007\""
debuggable true //For "debug" banner on icon
enableUnitTestCoverage true
}
release {
@@ -63,6 +65,7 @@ android {
buildFeatures {
viewBinding true
buildConfig true
}
flavorDimensions = ['static']
@@ -80,6 +83,13 @@ android {
}
}
dependenciesInfo {
// Disables dependency metadata when building APKs.
includeInApk = false
// Disables dependency metadata when building Android App Bundles.
includeInBundle = false
}
sourceSets {
test.java.srcDirs += '../testShared/src/test/java'
}
@@ -107,154 +117,148 @@ android {
dependencies {
modules {
module("org.bouncycastle:bcprov-jdk15on") {
replacedBy("org.bouncycastle:bcprov-jdk18on")
}
module("org.bouncycastle:bcpkix-jdk15on") {
replacedBy("org.bouncycastle:bcpkix-jdk18on")
}
module("org.bouncycastle:bcprov-jdk15to18") {
replacedBy("org.bouncycastle:bcprov-jdk15on")
replacedBy("org.bouncycastle:bcprov-jdk18on")
}
module("org.bouncycastle:bcpkix-jdk15to18") {
replacedBy("org.bouncycastle:bcpkix-jdk15on")
replacedBy("org.bouncycastle:bcpkix-jdk18on")
}
}
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.readystatesoftware.systembartint:systembartint:1.0.3'
implementation libs.systembarTint
implementation 'androidx.vectordrawable:vectordrawable-animated:1.1.0'
implementation 'androidx.legacy:legacy-support-v13:1.0.0'
implementation "com.google.android.material:material:$androidMaterialVersion"
implementation "androidx.fragment:fragment-ktx:$androidXFragmentVersion"
implementation "androidx.appcompat:appcompat:$androidXAppCompatVersion"
implementation 'androidx.palette:palette-ktx:1.0.0'
implementation 'androidx.cardview:cardview:1.0.0'
implementation "androidx.room:room-runtime:$roomVersion"
playImplementation "com.android.billingclient:billing:$androidBillingVersion"
kapt "androidx.room:room-compiler:$roomVersion"
// RxJava support for Room
implementation "androidx.room:room-rxjava2:$roomVersion"
kapt "androidx.annotation:annotation:$androidXAnnotationVersion"
implementation libs.androidX.vectordrawable.animated
implementation libs.androidX.legacySupportV13
implementation libs.androidX.material
implementation libs.androidX.fragment
implementation libs.androidX.appcompat
implementation libs.androidX.preference
implementation libs.androidX.core
implementation libs.androidX.palette
implementation libs.androidX.cardview
implementation libs.androidX.constraintLayout
implementation libs.androidx.multidex //Multiple dex files
implementation libs.room.runtime
implementation libs.room.rxjava2
implementation "androidx.preference:preference-ktx:$androidXPrefVersion"
ksp libs.room.compiler
ksp libs.androidX.annotation
//For tests
testImplementation "junit:junit:$junitVersion"//tests the app logic
testImplementation "org.robolectric:robolectric:$robolectricVersion"//tests android interaction
testImplementation "org.robolectric:shadows-httpclient:$robolectricVersion"//tests android interaction
testImplementation "androidx.test:core:$androidXTestVersion"
testImplementation "androidx.test:runner:$androidXTestRunnerVersion"
testImplementation "androidx.test:rules:$androidXTestVersion"
testImplementation "androidx.test.ext:junit:$androidXTestExtVersion"
testImplementation "androidx.fragment:fragment-testing:$androidXFragmentVersion"
testImplementation "org.mockito:mockito-core:$mockitoVersion"
testImplementation "org.mockito:mockito-inline:$mockitoInlineVersion"
testImplementation "org.mockito.kotlin:mockito-kotlin:$mockitoKotlinVersion"
testImplementation "org.apache.sshd:sshd-core:1.7.0"
testImplementation "org.awaitility:awaitility:$awaitilityVersion"
testImplementation "org.jsoup:jsoup:$jsoupVersion"
testImplementation "androidx.room:room-migration:$roomVersion"
testImplementation "io.mockk:mockk:$mockkVersion"
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$kotlinxCoroutineTestVersion"
testImplementation "androidx.arch.core:core-testing:$androidXArchCoreTestVersion"
testImplementation libs.junit//tests the app logic
testImplementation libs.robolectric//tests android interaction
testImplementation libs.robolectric.shadows.httpclient//tests android interaction
testImplementation libs.androidX.test.core
testImplementation libs.androidX.test.runner
testImplementation libs.androidX.test.rules
testImplementation libs.androidX.test.ext.junit
testImplementation libs.androidX.fragment.testing
testImplementation libs.mockito.core
testImplementation libs.mockito.inline
testImplementation libs.mockito.kotlin
testImplementation libs.apache.sshd
testImplementation libs.awaitility
testImplementation libs.jsoup
testImplementation libs.room.migration
testImplementation libs.mockk
testImplementation libs.kotlin.coroutine.test
testImplementation libs.androidX.core.testing
kspTest libs.auto.service
testImplementation 'ch.qos.logback:logback-classic:1.4.14'
kaptTest "com.google.auto.service:auto-service:1.1.1"
androidTestImplementation "junit:junit:$junitVersion"//tests the app logic
androidTestImplementation "androidx.test.espresso:espresso-core:$espressoVersion"
androidTestImplementation "androidx.test:core:$androidXTestVersion"
androidTestImplementation "androidx.test:runner:$androidXTestVersion"
androidTestImplementation "androidx.test:rules:$androidXTestVersion"
androidTestImplementation "androidx.test.ext:junit:$androidXTestExtVersion"
androidTestImplementation "androidx.test.uiautomator:uiautomator:$uiAutomatorVersion"
androidTestImplementation "androidx.fragment:fragment-testing:$androidXFragmentVersion"
androidTestImplementation "commons-net:commons-net:$commonsNetVersion"
androidTestImplementation "org.awaitility:awaitility:$awaitilityVersion"
androidTestImplementation libs.junit //tests the app logic
androidTestImplementation libs.androidX.test.expresso
androidTestImplementation libs.androidX.test.core
androidTestImplementation libs.androidX.test.runner
androidTestImplementation libs.androidX.test.rules
androidTestImplementation libs.androidX.test.ext.junit
androidTestImplementation libs.androidX.test.uiautomator
androidTestImplementation libs.androidX.fragment.testing
androidTestImplementation libs.commons.net
androidTestImplementation libs.awaitility
//Detect memory leaks
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.7'
debugImplementation libs.leakcanary.android
implementation "org.apache.commons:commons-compress:$commonsCompressVersion"
implementation libs.commons.compress
playImplementation "com.github.junrar:junrar:$junrarVersion"
implementation libs.materialdialogs.core
implementation libs.materialdialogs.commons
implementation "com.afollestad.material-dialogs:core:$materialDialogsVersion"
implementation "com.afollestad.material-dialogs:commons:$materialDialogsVersion"
implementation libs.apache.mina.core
implementation libs.apache.ftpserver.ftplet.api
implementation libs.apache.ftpserver.core
// https://mvnrepository.com/artifact/org.apache.mina/mina-core
implementation group: 'org.apache.mina', name: 'mina-core', version: '2.0.16'
implementation libs.eventbus
//implementation files('libs/ftplet-api-1.1.0-SNAPSHOT.jar')
// https://mvnrepository.com/artifact/org.apache.ftpserver/ftplet-api
implementation "org.apache.ftpserver:ftplet-api:$ftpserverVersion"
implementation libs.libsu.core
implementation libs.libsu.io
//implementation files('libs/ftpserver-core-1.1.0-SNAPSHOT.jar')
// https://mvnrepository.com/artifact/org.apache.ftpserver/ftpserver-core
implementation "org.apache.ftpserver:ftpserver-core:$ftpserverVersion"
playImplementation libs.cloudrail.si.android
playImplementation libs.junrar
playImplementation libs.google.play.billing
implementation 'org.greenrobot:eventbus:3.3.1'
implementation libs.mpAndroidChart//Nice charts and graphs
implementation "com.github.topjohnwu.libsu:core:${libsuVersion}"
implementation "com.github.topjohnwu.libsu:io:${libsuVersion}"
playImplementation 'com.cloudrail:cloudrail-si-android:2.22.4'
implementation 'com.github.PhilJay:MPAndroidChart:v3.0.2'//Nice charts and graphs
implementation 'com.github.npgall:concurrent-trees:2.6.1'//Concurrent tries
implementation libs.concurrent.trees//Concurrent tries
//SFTP
implementation "com.hierynomus:sshj:$sshjVersion"
implementation libs.sshj
//smb
implementation "eu.agno3.jcifs:jcifs-ng:$jcifsVersion"
implementation libs.jcifs.ng
//FTP
implementation "commons-net:commons-net:$commonsNetVersion"
implementation libs.commons.net
//OkHttp
implementation "com.squareup.okhttp3:okhttp:$okHttpVersion"
implementation libs.okhttp
implementation "org.bouncycastle:bcpkix-jdk15on:$bouncyCastleVersion"
implementation "org.bouncycastle:bcprov-jdk15on:$bouncyCastleVersion"
implementation libs.bcpkix.jdk18on
implementation libs.bcprov.jdk18on
//Glide: loads icons seemlessly
implementation "com.github.bumptech.glide:glide:$glideVersion"
implementation ("com.github.bumptech.glide:recyclerview-integration:$glideVersion") {
implementation libs.glide
implementation (libs.glide.recyclerView) {
// Excludes the support library because it's already included by Glide.
transitive = false
}
kapt "com.github.bumptech.glide:compiler:$glideVersion"
ksp libs.glide.ksp
implementation "com.leinardi.android:speed-dial:$fabSpeedDialVersion"
implementation libs.speedDial
//Simple library show
implementation('com.mikepenz:aboutlibraries:6.1.1@aar') {
implementation(libs.aboutLibraries) {
transitive = true
}
implementation 'androidx.multidex:multidex:2.0.1'//Multiple dex files
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
//zip4j: support password-protected zips
implementation "net.lingala.zip4j:zip4j:$zip4jVersion"
implementation libs.zip4j
implementation 'org.tukaani:xz:1.9'
implementation libs.xz
implementation "io.reactivex.rxjava2:rxandroid:$rxAndroidVersion"
implementation libs.rxandroid
// Because RxAndroid releases are few and far between, it is recommended you also
// explicitly depend on RxJava's latest version for bug fixes and new features.
// (see https://github.com/ReactiveX/RxJava/releases for latest 3.x.x version)
implementation "io.reactivex.rxjava2:rxjava:$rxJavaVersion"
implementation libs.rxjava
implementation project(':commons_compress_7z')
implementation project(':file_operations')
implementation project(':portscanner')
implementation "androidx.core:core-ktx:$androidXCoreVersion"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation "ch.acra:acra-core:5.7.0"
implementation 'org.slf4j:slf4j-api:2.0.7'
implementation "com.github.tony19:logback-android:$logbackAndroidVersion"
testImplementation 'ch.qos.logback:logback-classic:1.2.11'
implementation 'com.google.code.gson:gson:2.9.1'
implementation 'com.github.TeamAmaze:AmazeTrashBin:1.0.10'
implementation libs.kotlin.stdlib.jdk8
implementation libs.acra.core
implementation libs.slf4j.api
implementation libs.logback.android
testImplementation libs.logback.classic
implementation libs.gson
implementation libs.amaze.trashBin
}
kotlin {
@@ -297,12 +301,15 @@ clean.dependsOn supportOldLangCodes
clean.mustRunAfter supportOldLangCodes
jacoco {
toolVersion = "${jacocoVersion}"
toolVersion = libs.versions.jacoco.get()
}
jacocoAndroidUnitTestReport {
html.enabled true
xml.enabled true
tasks.withType(JacocoReport).configureEach {
reports {
csv.required.set(false)
html.required.set(true)
xml.required.set(true)
}
}
tasks.withType(Test).configureEach {
@@ -92,7 +92,7 @@ class CryptUtilEspressoTest {
CryptUtil(
AppConfig.getInstance(),
HybridFileParcelable(targetFile.absolutePath).also {
it.size = targetFile.length()
it.setSize(targetFile.length())
},
Environment.getExternalStorageDirectory().absolutePath,
ProgressHandler(),
@@ -136,7 +136,7 @@ class CryptUtilEspressoTest {
CryptUtil(
AppConfig.getInstance(),
HybridFileParcelable(targetFile.absolutePath).also {
it.size = targetFile.length()
it.setSize(targetFile.length())
},
Environment.getExternalStorageDirectory().absolutePath,
ProgressHandler(),
+1 -1
View File
@@ -57,7 +57,7 @@
android:requestLegacyExternalStorage="true"
android:banner="@drawable/about_header"
android:localeConfig="@xml/locales_config"
android:usesCleartextTraffic="true">
android:networkSecurityConfig="@xml/network_security_config">
<activity
android:exported="true"
@@ -23,7 +23,6 @@ package com.amaze.filemanager.adapters;
import java.util.ArrayList;
import java.util.List;
import com.amaze.filemanager.GlideApp;
import com.amaze.filemanager.R;
import com.amaze.filemanager.adapters.data.CompressedObjectParcelable;
import com.amaze.filemanager.adapters.holders.CompressedItemViewHolder;
@@ -39,6 +38,7 @@ import com.amaze.filemanager.ui.theme.AppTheme;
import com.amaze.filemanager.ui.views.CircleGradientDrawable;
import com.amaze.filemanager.utils.AnimUtils;
import com.amaze.filemanager.utils.Utils;
import com.bumptech.glide.Glide;
import android.app.Activity;
import android.content.Context;
@@ -240,7 +240,7 @@ public class CompressedExplorerAdapter extends RecyclerView.Adapter<CompressedIt
compressedExplorerFragment.getResources().getDisplayMetrics()));
if (rowItem.type == CompressedObjectParcelable.TYPE_GOBACK) {
GlideApp.with(compressedExplorerFragment)
Glide.with(compressedExplorerFragment)
.load(R.drawable.ic_arrow_left_white_24dp)
.into(holder.genericIcon);
gradientDrawable.setColor(Utils.getColor(context, R.color.goback_item));
@@ -248,9 +248,7 @@ public class CompressedExplorerAdapter extends RecyclerView.Adapter<CompressedIt
holder.txtDesc.setText("");
holder.date.setText(R.string.goback);
} else {
GlideApp.with(compressedExplorerFragment)
.load(rowItem.iconData.image)
.into(holder.genericIcon);
Glide.with(compressedExplorerFragment).load(rowItem.iconData.image).into(holder.genericIcon);
if (compressedExplorerFragment.showLastModified)
holder.date.setText(Utils.getDate(context, rowItem.date));
@@ -38,7 +38,6 @@ import java.util.Objects;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.amaze.filemanager.GlideApp;
import com.amaze.filemanager.R;
import com.amaze.filemanager.adapters.data.IconDataParcelable;
import com.amaze.filemanager.adapters.data.LayoutElementParcelable;
@@ -69,6 +68,7 @@ import com.amaze.filemanager.utils.AnimUtils;
import com.amaze.filemanager.utils.GlideConstants;
import com.amaze.filemanager.utils.MainActivityActionMode;
import com.amaze.filemanager.utils.Utils;
import com.bumptech.glide.Glide;
import com.bumptech.glide.integration.recyclerview.RecyclerViewPreloader;
import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.engine.GlideException;
@@ -616,7 +616,7 @@ public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
preloader =
new RecyclerViewPreloader<>(
GlideApp.with(mainFragment),
Glide.with(mainFragment),
modelProvider,
sizeProvider,
GlideConstants.MAX_PRELOAD_FILES);
@@ -807,10 +807,10 @@ public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
});
// clear previously cached icon
GlideApp.with(mainFragment).clear(holder.genericIcon);
GlideApp.with(mainFragment).clear(holder.pictureIcon);
GlideApp.with(mainFragment).clear(holder.apkIcon);
GlideApp.with(mainFragment).clear(holder.baseItemView);
Glide.with(mainFragment).clear(holder.genericIcon);
Glide.with(mainFragment).clear(holder.pictureIcon);
Glide.with(mainFragment).clear(holder.apkIcon);
Glide.with(mainFragment).clear(holder.baseItemView);
holder.baseItemView.setOnClickListener(
v -> {
@@ -1023,10 +1023,10 @@ public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
// view is a grid view
// clear previously cached icon
GlideApp.with(mainFragment).clear(holder.genericIcon);
GlideApp.with(mainFragment).clear(holder.iconLayout);
GlideApp.with(mainFragment).clear(holder.imageView1);
GlideApp.with(mainFragment).clear(holder.baseItemView);
Glide.with(mainFragment).clear(holder.genericIcon);
Glide.with(mainFragment).clear(holder.iconLayout);
Glide.with(mainFragment).clear(holder.imageView1);
Glide.with(mainFragment).clear(holder.baseItemView);
holder.checkImageViewGrid.setColorFilter(accentColor);
holder.baseItemView.setOnClickListener(
@@ -1061,7 +1061,7 @@ public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
holder.genericIcon.setImageResource(R.drawable.ic_doc_apk_white);
}
} else {
GlideApp.with(mainFragment).load(rowItem.iconData.image).into(holder.genericIcon);
Glide.with(mainFragment).load(rowItem.iconData.image).into(holder.genericIcon);
}
if (holder.genericIcon.getVisibility() == View.VISIBLE) {
@@ -1275,7 +1275,7 @@ public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
OnImageProcessed errorListener) {
if (iconData.isImageBroken()) {
viewHolder.genericIcon.setVisibility(View.VISIBLE);
GlideApp.with(mainFragment)
Glide.with(mainFragment)
.load(R.drawable.ic_broken_image_white_24dp)
.into(viewHolder.genericIcon);
GradientDrawable gradientDrawable = (GradientDrawable) viewHolder.genericIcon.getBackground();
@@ -1286,7 +1286,7 @@ public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
}
viewHolder.genericIcon.setVisibility(View.VISIBLE);
GlideApp.with(mainFragment).load(iconData.loadingImage).into(viewHolder.genericIcon);
Glide.with(mainFragment).load(iconData.loadingImage).into(viewHolder.genericIcon);
GradientDrawable gradientDrawable = (GradientDrawable) viewHolder.genericIcon.getBackground();
RequestListener<Drawable> requestListener =
@@ -1298,7 +1298,7 @@ public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
new Handler(
msg -> {
viewHolder.genericIcon.setVisibility(View.VISIBLE);
GlideApp.with(mainFragment)
Glide.with(mainFragment)
.load(R.drawable.ic_broken_image_white_24dp)
.into(viewHolder.genericIcon);
return false;
@@ -1344,7 +1344,7 @@ public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
viewHolder.genericIcon.setVisibility(View.VISIBLE);
iconBackground.setBackgroundColor(grey_color);
GlideApp.with(mainFragment)
Glide.with(mainFragment)
.load(R.drawable.ic_broken_image_white_24dp)
.into(viewHolder.genericIcon);
view.setVisibility(View.INVISIBLE);
@@ -1357,7 +1357,7 @@ public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
getBoolean(PREFERENCE_USE_CIRCULAR_IMAGES) ? viewHolder.genericIcon : viewHolder.iconLayout;
viewHolder.genericIcon.setVisibility(View.VISIBLE);
GlideApp.with(mainFragment).load(iconData.loadingImage).into(viewHolder.genericIcon);
Glide.with(mainFragment).load(iconData.loadingImage).into(viewHolder.genericIcon);
view.setVisibility(View.INVISIBLE);
RequestListener<Drawable> requestListener =
@@ -1368,7 +1368,7 @@ public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
iconBackground.setBackgroundColor(grey_color);
new Handler(
msg -> {
GlideApp.with(mainFragment)
Glide.with(mainFragment)
.load(R.drawable.ic_broken_image_white_24dp)
.into(viewHolder.genericIcon);
return false;
@@ -27,9 +27,8 @@ import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.amaze.filemanager.GlideApp;
import com.amaze.filemanager.GlideRequest;
import com.amaze.filemanager.R;
import com.bumptech.glide.Glide;
import com.bumptech.glide.ListPreloader;
import com.bumptech.glide.RequestBuilder;
@@ -51,12 +50,12 @@ public class AppsAdapterPreloadModel implements ListPreloader.PreloadModelProvid
private final Logger LOG = LoggerFactory.getLogger(AppsAdapterPreloadModel.class);
private Context mContext;
private GlideRequest<Drawable> request;
private RequestBuilder<Drawable> request;
private List<String> items;
private boolean isBottomSheet;
public AppsAdapterPreloadModel(Fragment f, boolean isBottomSheet) {
request = GlideApp.with(f).asDrawable().fitCenter();
request = Glide.with(f).asDrawable().fitCenter();
this.mContext = f.requireContext();
this.isBottomSheet = isBottomSheet;
}
@@ -23,9 +23,8 @@ package com.amaze.filemanager.adapters.glide;
import java.util.Collections;
import java.util.List;
import com.amaze.filemanager.GlideApp;
import com.amaze.filemanager.GlideRequest;
import com.amaze.filemanager.adapters.data.IconDataParcelable;
import com.bumptech.glide.Glide;
import com.bumptech.glide.ListPreloader;
import com.bumptech.glide.RequestBuilder;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
@@ -43,12 +42,12 @@ public class RecyclerPreloadModelProvider
implements ListPreloader.PreloadModelProvider<IconDataParcelable> {
private final List<IconDataParcelable> urisToLoad;
private final GlideRequest<Drawable> request;
private final RequestBuilder<Drawable> request;
public RecyclerPreloadModelProvider(
@NonNull Fragment fragment, @NonNull List<IconDataParcelable> uris, boolean isCircled) {
urisToLoad = uris;
GlideRequest<Drawable> incompleteRequest = GlideApp.with(fragment).asDrawable();
RequestBuilder<Drawable> incompleteRequest = Glide.with(fragment).asDrawable();
if (isCircled) {
request = incompleteRequest.circleCrop();
@@ -34,7 +34,6 @@ import android.view.ViewGroup
import android.widget.Toast
import androidx.preference.PreferenceManager
import androidx.recyclerview.widget.LinearLayoutManager
import com.amaze.filemanager.GlideApp
import com.amaze.filemanager.R
import com.amaze.filemanager.adapters.AppsRecyclerAdapter
import com.amaze.filemanager.adapters.data.AppDataParcelable
@@ -55,6 +54,7 @@ import com.amaze.filemanager.ui.provider.UtilitiesProvider
import com.amaze.filemanager.ui.startActivityCatchingSecurityException
import com.amaze.filemanager.ui.views.ThemedTextView
import com.amaze.filemanager.utils.GlideConstants
import com.bumptech.glide.Glide
import com.bumptech.glide.integration.recyclerview.RecyclerViewPreloader
import com.bumptech.glide.util.ViewPreloadSizeProvider
import org.slf4j.Logger
@@ -321,7 +321,7 @@ class OpenFileDialogFragment : BaseBottomSheetFragment(), AdjustListViewForTv<Ap
val sizeProvider = ViewPreloadSizeProvider<String>()
var preloader =
RecyclerViewPreloader(
GlideApp.with(this),
Glide.with(this),
modelProvider,
sizeProvider,
GlideConstants.MAX_PRELOAD_FILES,
@@ -32,7 +32,6 @@ import android.text.Editable
import android.text.InputFilter
import android.text.TextUtils
import android.text.TextWatcher
import android.view.LayoutInflater
import android.view.View
import android.widget.AdapterView
import android.widget.ArrayAdapter
@@ -55,6 +54,7 @@ import com.amaze.filemanager.fileoperations.filesystem.OpenMode
import com.amaze.filemanager.filesystem.ftp.NetCopyClientConnectionPool
import com.amaze.filemanager.filesystem.ftp.NetCopyClientConnectionPool.FTPS_URI_PREFIX
import com.amaze.filemanager.filesystem.ftp.NetCopyClientConnectionPool.FTP_URI_PREFIX
import com.amaze.filemanager.filesystem.ftp.NetCopyClientConnectionPool.SSH_DEFAULT_PORT
import com.amaze.filemanager.filesystem.ftp.NetCopyClientConnectionPool.SSH_URI_PREFIX
import com.amaze.filemanager.filesystem.ftp.NetCopyClientUtils
import com.amaze.filemanager.filesystem.ftp.NetCopyConnectionInfo.Companion.COLON
@@ -82,7 +82,6 @@ import java.io.BufferedReader
import java.lang.ref.WeakReference
import java.security.KeyPair
import java.security.PublicKey
import java.util.*
import java.util.concurrent.Callable
/** SSH/SFTP connection setup dialog. */
@@ -130,7 +129,7 @@ class SftpConnectDialog : DialogFragment() {
@Suppress("ComplexMethod")
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
ctx = WeakReference(activity)
binding = SftpDialogBinding.inflate(LayoutInflater.from(context))
binding = SftpDialogBinding.inflate(layoutInflater)
val utilsProvider: UtilitiesProvider = AppConfig.getInstance().utilsProvider
val edit = requireArguments().getBoolean(ARG_EDIT, false)
@@ -813,7 +812,13 @@ class SftpConnectDialog : DialogFragment() {
prefix = getProtocolPrefixFromDropdownSelection(),
connectionName = binding.connectionET.text.toString(),
hostname = binding.ipET.text.toString(),
port = binding.portET.text.toString().toInt(),
port = binding.portET.text.toString().let {
if (it.isEmpty() || it.isBlank()) {
SSH_DEFAULT_PORT
} else {
it.toInt()
}
},
defaultPath = binding.defaultPathET.text.toString(),
username = binding.usernameET.text.toString().urlEncoded(),
password =
@@ -30,7 +30,6 @@ import java.util.List;
import java.util.Objects;
import com.afollestad.materialdialogs.MaterialDialog;
import com.amaze.filemanager.GlideApp;
import com.amaze.filemanager.R;
import com.amaze.filemanager.adapters.AppsRecyclerAdapter;
import com.amaze.filemanager.adapters.data.AppDataParcelable;
@@ -43,6 +42,7 @@ import com.amaze.filemanager.ui.theme.AppTheme;
import com.amaze.filemanager.ui.views.FastScroller;
import com.amaze.filemanager.utils.GlideConstants;
import com.amaze.filemanager.utils.Utils;
import com.bumptech.glide.Glide;
import com.bumptech.glide.integration.recyclerview.RecyclerViewPreloader;
import com.bumptech.glide.util.ViewPreloadSizeProvider;
@@ -113,10 +113,7 @@ public class AppsListFragment extends Fragment
ViewPreloadSizeProvider<String> sizeProvider = new ViewPreloadSizeProvider<>();
preloader =
new RecyclerViewPreloader<>(
GlideApp.with(this),
modelProvider,
sizeProvider,
GlideConstants.MAX_PRELOAD_APPSADAPTER);
Glide.with(this), modelProvider, sizeProvider, GlideConstants.MAX_PRELOAD_APPSADAPTER);
linearLayoutManager = new LinearLayoutManager(getContext());
updateViews(mainActivity, utilsProvider);
@@ -21,6 +21,8 @@
package com.amaze.filemanager.utils
import android.content.Context
import android.os.Build
import android.os.Build.VERSION_CODES.N
import androidx.appcompat.app.AppCompatDelegate
import androidx.core.os.LocaleListCompat
import com.amaze.filemanager.R
@@ -50,6 +52,12 @@ fun Context.getLocaleListFromXml(): LocaleListCompat {
e.printStackTrace()
}
// Remove locale tags that would produce same locale on Android N or above
if (Build.VERSION.SDK_INT >= N) {
tagsList.remove("id")
tagsList.remove("he")
}
return LocaleListCompat.forLanguageTags(tagsList.joinToString(","))
}
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="false">127.0.0.1</domain>
</domain-config>
</network-security-config>
@@ -51,7 +51,12 @@ import kotlin.random.Random
* Tests for [UiPrefsFragment].
*/
@Config(
sdk = [Build.VERSION_CODES.KITKAT, Build.VERSION_CODES.P, Build.VERSION_CODES.R],
sdk = [
Build.VERSION_CODES.KITKAT,
Build.VERSION_CODES.N,
Build.VERSION_CODES.P,
Build.VERSION_CODES.R
],
shadows = [
ShadowMultiDex::class,
ShadowStorageManager::class,
+2 -42
View File
@@ -2,48 +2,7 @@
buildscript {
ext {
kotlin_version = "1.8.0"
robolectricVersion = '4.9'
glideVersion = '4.11.0'
sshjVersion = '0.35.0'
jcifsVersion = '2.1.9'
fabSpeedDialVersion = '3.1.1'
roomVersion = '2.5.0'
bouncyCastleVersion = '1.70'
awaitilityVersion = "3.1.6"
androidXCoreVersion = "1.7.0"
androidMaterialVersion = "1.5.0" // Upgrade to 1.5 requires targetSdkVersion 31
androidXFragmentVersion = "1.5.6"
androidXAppCompatVersion = "1.6.1"
androidXAnnotationVersion = "1.5.0"
androidXPrefVersion = "1.2.1"
androidXTestVersion = "1.5.0"
androidXTestRunnerVersion = "1.5.2"
androidXTestExtVersion = "1.1.5"
androidXArchCoreTestVersion = "2.2.0"
kotlinxCoroutineTestVersion = "1.7.3"
uiAutomatorVersion = "2.2.0"
junitVersion = "4.13.2"
slf4jVersion = "1.7.25"
mockitoVersion = "4.11.0"
mockitoInlineVersion = "4.11.0"
mockitoKotlinVersion = "4.1.0"
androidBillingVersion = "5.0.0"
junrarVersion = "7.4.0"
zip4jVersion = "2.6.4"
espressoVersion = "3.5.1"
materialDialogsVersion = "0.9.6.0"
jacocoVersion = "0.8.7"
commonsCompressVersion = "1.22"
libsuVersion = "3.2.1"
mockkVersion = "1.12.2"
logbackAndroidVersion = "3.0.0"
commonsNetVersion = "3.8.0"
ftpserverVersion = "1.1.1"
jsoupVersion = "1.13.1"
rxAndroidVersion = "2.1.1"
rxJavaVersion = "2.2.9"
okHttpVersion = "4.9.0"
kotlin_version = "1.9.10"
}
repositories {
google()
@@ -63,6 +22,7 @@ buildscript {
plugins {
id "com.diffplug.spotless" version "6.25.0"
id "com.google.devtools.ksp" version "1.9.10-1.0.13" apply false
}
allprojects {
+10 -6
View File
@@ -2,11 +2,11 @@ apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
android {
compileSdk 33
compileSdk libs.versions.compileSdk.get().toInteger()
defaultConfig {
minSdkVersion 19
minSdkVersion libs.versions.minSdk.get().toInteger()
targetSdkVersion libs.versions.targetSdk.get().toInteger()
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
@@ -17,11 +17,15 @@ android {
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard.cfg'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
}
dependencies {
implementation "org.apache.commons:commons-compress:$commonsCompressVersion"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'org.tukaani:xz:1.9'
implementation libs.commons.compress
implementation libs.kotlin.stdlib.jdk8
implementation libs.xz
}
+37 -34
View File
@@ -1,11 +1,12 @@
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'com.google.devtools.ksp'
android {
compileSdk 33
compileSdk libs.versions.compileSdk.get().toInteger()
defaultConfig {
minSdkVersion 19
minSdkVersion libs.versions.minSdk.get().toInteger()
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles "consumer-rules.pro"
@@ -61,59 +62,61 @@ kotlin {
dependencies {
modules {
module("org.bouncycastle:bcprov-jdk15on") {
replacedBy("org.bouncycastle:bcprov-jdk18on")
}
module("org.bouncycastle:bcpkix-jdk15on") {
replacedBy("org.bouncycastle:bcpkix-jdk18on")
}
module("org.bouncycastle:bcprov-jdk15to18") {
replacedBy("org.bouncycastle:bcprov-jdk15on")
replacedBy("org.bouncycastle:bcprov-jdk18on")
}
module("org.bouncycastle:bcpkix-jdk15to18") {
replacedBy("org.bouncycastle:bcpkix-jdk15on")
replacedBy("org.bouncycastle:bcpkix-jdk18on")
}
}
implementation "org.apache.commons:commons-compress:$commonsCompressVersion"
implementation libs.commons.compress
//zip4j: support password-protected zips
implementation "net.lingala.zip4j:zip4j:$zip4jVersion"
implementation libs.zip4j
implementation project(':commons_compress_7z')
//SFTP
implementation "com.hierynomus:sshj:$sshjVersion"
implementation libs.sshj
//smb
implementation "eu.agno3.jcifs:jcifs-ng:$jcifsVersion"
implementation libs.jcifs.ng
implementation 'androidx.multidex:multidex:2.0.1'//Multiple dex files
implementation libs.androidx.multidex //Multiple dex files
//TODO some libs are not needed
//For tests
testImplementation "junit:junit:$junitVersion"//tests the app logic
testImplementation "org.robolectric:robolectric:$robolectricVersion"//tests android interaction
testImplementation "org.robolectric:shadows-httpclient:$robolectricVersion"//tests android interaction
testImplementation "androidx.test:core:$androidXTestVersion"
testImplementation "androidx.test:runner:$androidXTestVersion"
testImplementation "androidx.test:rules:$androidXTestVersion"
testImplementation "androidx.test.ext:junit:$androidXTestExtVersion"
testImplementation libs.junit //tests the app logic
testImplementation libs.robolectric //tests android interaction
testImplementation libs.robolectric.shadows.httpclient //tests android interaction
testImplementation libs.androidX.test.core
testImplementation libs.androidX.test.runner
testImplementation libs.androidX.test.rules
testImplementation libs.androidX.test.ext.junit
//testImplementation 'androidx.test.uiautomator:uiautomator:2.2.0'
testImplementation "org.mockito:mockito-core:$mockitoVersion"
testImplementation "org.apache.sshd:sshd-core:1.7.0"
testImplementation "org.awaitility:awaitility:$awaitilityVersion"
testImplementation 'org.jsoup:jsoup:1.11.2'
testAnnotationProcessor "com.google.auto.service:auto-service:1.0-rc4"
testImplementation libs.mockito.core
testImplementation libs.apache.sshd
testImplementation libs.awaitility
testImplementation libs.jsoup
kspTest libs.auto.service
androidTestImplementation "junit:junit:$junitVersion"//tests the app logic
androidTestImplementation "androidx.test.espresso:espresso-core:$espressoVersion"
androidTestImplementation "androidx.test:core:$androidXTestVersion"
androidTestImplementation "androidx.test:runner:$androidXTestVersion"
androidTestImplementation "androidx.test:rules:$androidXTestVersion"
androidTestImplementation "androidx.test.ext:junit:$androidXTestExtVersion"
androidTestImplementation "commons-net:commons-net:$commonsNetVersion"
androidTestImplementation "org.awaitility:awaitility:$awaitilityVersion"
androidTestImplementation libs.junit //tests the app logic
androidTestImplementation libs.androidX.test.expresso
androidTestImplementation libs.androidX.test.core
androidTestImplementation libs.androidX.test.runner
androidTestImplementation libs.androidX.test.rules
androidTestImplementation libs.androidX.test.ext.junit
androidTestImplementation libs.commons.net
androidTestImplementation libs.awaitility
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation 'androidx.appcompat:appcompat:1.2.0'
testImplementation "junit:junit:$junitVersion"
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation "androidx.test.espresso:espresso-core:$espressoVersion"
implementation libs.androidX.appcompat
}
+167
View File
@@ -0,0 +1,167 @@
[versions]
compileSdk = "33"
minSdk = "19"
targetSdk = "33"
kotlin = "1.9.10"
legacySupportV13 = "1.0.0"
systembartint = "1.0.3"
robolectric = "4.9"
glide = "4.14.2"
sshj = "0.35.0"
jcifs = "2.1.9"
eventbus = "3.3.1"
fabSpeedDial = "3.1.1"
room = "2.5.2"
bouncyCastle = "1.76"
awaitility = "3.1.6"
androidXCore = "1.7.0"
androidMaterial = "1.5.0" # Upgrade to 1.5 requires targetSdk 31
androidXFragment = "1.5.6"
androidXAppCompat = "1.6.1"
androidXAnnotation = "1.7.1"
androidXPref = "1.2.1"
androidXPalette = "1.0.0"
androidXCardView = "1.0.0"
androidXConstraintLayout = "1.1.3"
androidXTest = "1.5.0"
androidXTestRunner = "1.5.2"
androidXTestExt = "1.1.5"
androidXArchCoreTest = "2.2.0"
androidXMultidex = "2.0.1"
autoService = "1.0-rc4"
kotlinxCoroutineTest = "1.7.3"
kotlinStdlibJdk8 = "1.9.20"
uiAutomator = "2.2.0"
junit = "4.13.2"
slf4j = "2.0.7"
apacheSshd = "1.7.0"
apacheMina = "2.0.16"
mockito = "4.11.0"
mockitoInline = "4.11.0"
mockitoKotlin = "4.1.0"
androidBilling = "5.0.0"
cloudrailSiAndroid = "2.22.4"
junrar = "7.4.0"
vectordrawableAnimated = "1.1.0"
xz = "1.9"
zip4j = "2.6.4"
espresso = "3.5.1"
materialDialogs = "0.9.6.0"
jacoco = "0.8.11"
commonsCompress = "1.22"
libsu = "3.2.1"
mockk = "1.12.2"
logbackAndroid = "3.0.0"
logbackClassic = "1.2.11"
commonsNet = "3.8.0"
ftpserver = "1.1.1"
jsoup = "1.13.1"
gson = "2.9.1"
rxAndroid = "2.1.1"
rxJava = "2.2.9"
okHttp = "4.9.0"
acraCore = "5.7.0"
leakcanaryAndroid = "2.7"
mpAndroidChart = "v3.0.2"
concurrentTrees = "2.6.1"
aboutLibraries = "6.1.1"
amazeTrashBin = "1.0.10"
[libraries]
androidX-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "androidXAppCompat" }
androidX-constraintLayout = { module = "androidx.constraintlayout:constraintlayout", version.ref = "androidXConstraintLayout" }
androidX-core = { module = "androidx.core:core-ktx", version.ref = "androidXCore" }
androidX-cardview = { module = "androidx.cardview:cardview", version.ref = "androidXCardView" }
androidX-core-testing = { module = "androidx.arch.core:core-testing", version.ref = "androidXArchCoreTest" }
androidX-fragment = { module = "androidx.fragment:fragment-ktx", version.ref = "androidXFragment"}
androidX-fragment-testing = { module = "androidx.fragment:fragment-testing", version.ref = "androidXFragment"}
androidX-material = { module = "com.google.android.material:material", version.ref = "androidMaterial" }
androidX-legacySupportV13 = { module = "androidx.legacy:legacy-support-v13", version.ref = "legacySupportV13" }
androidX-annotation = { module = "androidx.annotation:annotation", version.ref = "androidXAnnotation" }
androidx-multidex = { module = "androidx.multidex:multidex", version.ref = "androidXMultidex" }
androidX-palette = { module = "androidx.palette:palette-ktx", version.ref = "androidXPalette" }
androidX-preference = { module = "androidx.preference:preference-ktx", version.ref = "androidXPref" }
androidX-vectordrawable-animated = { module = "androidx.vectordrawable:vectordrawable-animated", version.ref = "vectordrawableAnimated" }
androidX-test-core = { module = "androidx.test:core", version.ref = "androidXTest" }
androidX-test-runner = { module = "androidx.test:runner", version.ref = "androidXTestRunner" }
androidX-test-rules = { module = "androidx.test:rules", version.ref = "androidXTest" }
androidX-test-expresso = { module = "androidx.test.espresso:espresso-core", version.ref = "espresso" }
androidX-test-ext-junit = { module = "androidx.test.ext:junit", version.ref = "androidXTestExt" }
androidX-test-uiautomator = { module = "androidx.test.uiautomator:uiautomator", version.ref = "uiAutomator" }
auto-service = { module = "com.google.auto.service:auto-service", version.ref = "autoService" }
bcpkix-jdk18on = { module = "org.bouncycastle:bcpkix-jdk18on", version.ref = "bouncyCastle" }
bcprov-jdk18on = { module = "org.bouncycastle:bcprov-jdk18on", version.ref = "bouncyCastle" }
apache-mina-core = { module = "org.apache.mina:mina-core", version.ref = "apacheMina" }
apache-sshd = { module = "org.apache.sshd:sshd-core", version.ref = "apacheSshd" }
apache-ftpserver-ftplet-api = { module = "org.apache.ftpserver:ftplet-api", version.ref = "ftpserver" }
apache-ftpserver-core = { module = "org.apache.ftpserver:ftpserver-core", version.ref = "ftpserver" }
google-play-billing = { module = "com.android.billingclient:billing", version.ref = "androidBilling" }
cloudrail-si-android = { module = "com.cloudrail:cloudrail-si-android", version.ref = "cloudrailSiAndroid" }
eventbus = { module = "org.greenrobot:eventbus", version.ref = "eventbus" }
concurrent-trees = { module = "com.github.npgall:concurrent-trees", version.ref = "concurrentTrees" }
gson = { module = "com.google.code.gson:gson", version.ref = "gson" }
jsoup = { module = "org.jsoup:jsoup", version.ref = "jsoup" }
kotlin-stdlib-jdk8 = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk8", version.ref = "kotlinStdlibJdk8" }
kotlin-coroutine-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "kotlinxCoroutineTest" }
libsu-core = { module = "com.github.topjohnwu.libsu:core", version.ref = "libsu" }
libsu-io = { module = "com.github.topjohnwu.libsu:io", version.ref = "libsu" }
slf4j-api = { module = "org.slf4j:slf4j-api", version.ref = "slf4j" }
logback-android = { module = "com.github.tony19:logback-android", version.ref = "logbackAndroid" }
logback-classic = { module = "ch.qos.logback:logback-classic", version.ref = "logbackClassic" }
room-runtime = { module = "androidx.room:room-runtime", version.ref = "room" }
room-rxjava2 = { module = "androidx.room:room-rxjava2", version.ref = "room" }
room-compiler = { module = "androidx.room:room-compiler", version.ref = "room" }
room-migration = { module = "androidx.room:room-migration", version.ref = "room" }
commons-compress = { module = "org.apache.commons:commons-compress", version.ref = "commonsCompress" }
commons-net = { module = "commons-net:commons-net", version.ref = "commonsNet" }
materialdialogs-core = { module = "com.afollestad.material-dialogs:core", version.ref = "materialDialogs" }
materialdialogs-commons = { module = "com.afollestad.material-dialogs:commons", version.ref = "materialDialogs" }
mpAndroidChart = { module = "com.github.PhilJay:MPAndroidChart", version.ref = "mpAndroidChart" }
aboutLibraries = { module = "com.mikepenz:aboutlibraries", version.ref = "aboutLibraries" }
jcifs-ng = { module = "eu.agno3.jcifs:jcifs-ng", version.ref = "jcifs" }
speedDial = { module = "com.leinardi.android:speed-dial", version.ref = "fabSpeedDial" }
sshj = { module = "com.hierynomus:sshj", version.ref = "sshj" }
okhttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okHttp" }
junit = { module = "junit:junit", version.ref = "junit" }
awaitility = { module = "org.awaitility:awaitility", version.ref = "awaitility" }
mockito-core = { module = "org.mockito:mockito-core", version.ref = "mockito" }
mockito-inline = { module = "org.mockito:mockito-inline", version.ref = "mockitoInline" }
mockito-kotlin = { module = "org.mockito.kotlin:mockito-kotlin", version.ref = "mockitoKotlin" }
mockk = { module = "io.mockk:mockk", version.ref = "mockk" }
robolectric = { module = "org.robolectric:robolectric", version.ref = "robolectric" }
robolectric-shadows-httpclient = { module = "org.robolectric:shadows-httpclient", version.ref = "robolectric" }
glide = { module = "com.github.bumptech.glide:glide", version.ref = "glide" }
glide-recyclerView = { module = "com.github.bumptech.glide:recyclerview-integration", version.ref = "glide" }
glide-ksp = { module = "com.github.bumptech.glide:ksp", version.ref = "glide" }
systembarTint = { module = "com.readystatesoftware.systembartint:systembartint", version.ref = "systembartint" }
rxandroid = { module = "io.reactivex.rxjava2:rxandroid", version.ref = "rxAndroid" }
rxjava = { module = "io.reactivex.rxjava2:rxjava", version.ref = "rxJava" }
xz = { module = "org.tukaani:xz", version.ref = "xz" }
zip4j = { module = "net.lingala.zip4j:zip4j", version.ref = "zip4j" }
junrar = { module = "com.github.junrar:junrar", version.ref = "junrar" }
acra-core = { module = "ch.acra:acra-core", version.ref = "acraCore" }
leakcanary-android = { module = "com.squareup.leakcanary:leakcanary-android", version.ref = "leakcanaryAndroid" }
amaze-trashBin = { module = "com.github.TeamAmaze:AmazeTrashBin", version.ref = "amazeTrashBin" }
+1 -1
View File
@@ -1,6 +1,6 @@
#Sat May 22 22:20:14 ART 2021
distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
+6 -6
View File
@@ -5,11 +5,11 @@ apply plugin: 'kotlin-parcelize'
android {
namespace 'com.stealthcopter.networktools'
compileSdk 33
compileSdk libs.versions.compileSdk.get().toInteger()
defaultConfig {
minSdk 14
targetSdk 33
minSdk libs.versions.minSdk.get().toInteger()
targetSdk libs.versions.targetSdk.get().toInteger()
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles "consumer-rules.pro"
@@ -32,10 +32,10 @@ kotlin {
}
dependencies {
implementation "io.reactivex.rxjava2:rxandroid:$rxAndroidVersion"
implementation libs.rxandroid
// Because RxAndroid releases are few and far between, it is recommended you also
// explicitly depend on RxJava's latest version for bug fixes and new features.
// (see https://github.com/ReactiveX/RxJava/releases for latest 3.x.x version)
implementation "io.reactivex.rxjava2:rxjava:$rxJavaVersion"
testImplementation "junit:junit:$junitVersion"
implementation libs.rxjava
testImplementation libs.junit
}