diff --git a/app/src/main/java/com/amaze/filemanager/database/ExplorerDatabase.kt b/app/src/main/java/com/amaze/filemanager/database/ExplorerDatabase.kt index 52b6fea189..a949bf26a7 100644 --- a/app/src/main/java/com/amaze/filemanager/database/ExplorerDatabase.kt +++ b/app/src/main/java/com/amaze/filemanager/database/ExplorerDatabase.kt @@ -70,7 +70,7 @@ abstract class ExplorerDatabase : RoomDatabase() { companion object { private const val DATABASE_NAME = "explorer.db" - const val DATABASE_VERSION = 11 + const val DATABASE_VERSION = 12 const val TABLE_TAB = "tab" const val TABLE_CLOUD_PERSIST = "cloud" const val TABLE_ENCRYPTED = "encrypted" @@ -317,7 +317,7 @@ abstract class ExplorerDatabase : RoomDatabase() { } internal val MIGRATION_10_11: Migration = - object : Migration(10, DATABASE_VERSION) { + object : Migration(10, 11) { override fun migrate(database: SupportSQLiteDatabase) { database.execSQL( "UPDATE " + @@ -331,6 +331,104 @@ abstract class ExplorerDatabase : RoomDatabase() { } } + internal val MIGRATION_11_12: Migration = + object : Migration(11, DATABASE_VERSION) { + override fun migrate(database: SupportSQLiteDatabase) { + database.execSQL( + "CREATE TABLE " + + TEMP_TABLE_PREFIX + + TABLE_TAB + + "(" + + COLUMN_TAB_NO + + " INTEGER PRIMARY KEY NOT NULL, " + + COLUMN_PATH + + " TEXT NOT NULL, " + + COLUMN_HOME + + " TEXT NOT NULL)", + ) + database.execSQL( + "INSERT INTO " + + TEMP_TABLE_PREFIX + + TABLE_TAB + + "(" + + COLUMN_TAB_NO + + "," + + COLUMN_PATH + + "," + + COLUMN_HOME + + ")" + + " SELECT " + + COLUMN_TAB_NO + + "," + + COLUMN_PATH + + "," + + COLUMN_HOME + + " FROM " + + TABLE_TAB, + ) + database.execSQL("DROP TABLE $TABLE_TAB") + database.execSQL( + "ALTER TABLE $TEMP_TABLE_PREFIX$TABLE_TAB RENAME TO $TABLE_TAB", + ) + + database.execSQL( + "CREATE TABLE " + + TEMP_TABLE_PREFIX + + TABLE_ENCRYPTED + + "(" + + COLUMN_ENCRYPTED_ID + + " INTEGER PRIMARY KEY NOT NULL," + + COLUMN_ENCRYPTED_PATH + + " TEXT NOT NULL," + + COLUMN_ENCRYPTED_PASSWORD + + " TEXT NOT NULL)", + ) + database.execSQL( + "INSERT INTO " + + TEMP_TABLE_PREFIX + + TABLE_ENCRYPTED + + " SELECT * FROM " + + TABLE_ENCRYPTED, + ) + database.execSQL("DROP TABLE $TABLE_ENCRYPTED") + database.execSQL( + "ALTER TABLE " + + TEMP_TABLE_PREFIX + + TABLE_ENCRYPTED + + " RENAME TO " + + TABLE_ENCRYPTED, + ) + + database.execSQL( + "CREATE TABLE " + + TEMP_TABLE_PREFIX + + TABLE_CLOUD_PERSIST + + "(" + + COLUMN_CLOUD_ID + + " INTEGER PRIMARY KEY NOT NULL," + + COLUMN_CLOUD_SERVICE + + " INTEGER," + + COLUMN_CLOUD_PERSIST + + " TEXT NOT NULL)", + ) + database.execSQL( + "INSERT INTO " + + TEMP_TABLE_PREFIX + + TABLE_CLOUD_PERSIST + + " SELECT * FROM " + + TABLE_CLOUD_PERSIST, + ) + database.execSQL("DROP TABLE $TABLE_CLOUD_PERSIST") + database.execSQL( + "ALTER TABLE " + + TEMP_TABLE_PREFIX + + TABLE_CLOUD_PERSIST + + " RENAME TO " + + TABLE_CLOUD_PERSIST, + ) + } + } + /** * Initialize the database. Optionally, may provide a custom way to create the database * with supplied [Context]. @@ -354,6 +452,7 @@ abstract class ExplorerDatabase : RoomDatabase() { .addMigrations(MIGRATION_8_9) .addMigrations(MIGRATION_9_10) .addMigrations(MIGRATION_10_11) + .addMigrations(MIGRATION_11_12) .allowMainThreadQueries() .build() } diff --git a/app/src/main/java/com/amaze/filemanager/database/UtilitiesDatabase.kt b/app/src/main/java/com/amaze/filemanager/database/UtilitiesDatabase.kt index f2df627d27..cf6943d08f 100644 --- a/app/src/main/java/com/amaze/filemanager/database/UtilitiesDatabase.kt +++ b/app/src/main/java/com/amaze/filemanager/database/UtilitiesDatabase.kt @@ -110,7 +110,7 @@ abstract class UtilitiesDatabase : RoomDatabase() { companion object { private val logger = LoggerFactory.getLogger(UtilitiesDatabase::class.java) private const val DATABASE_NAME = "utilities.db" - const val DATABASE_VERSION = 6 + const val DATABASE_VERSION = 7 const val TABLE_HISTORY = "history" const val TABLE_HIDDEN = "hidden" const val TABLE_LIST = "list" @@ -136,7 +136,7 @@ abstract class UtilitiesDatabase : RoomDatabase() { COLUMN_ID + " INTEGER PRIMARY KEY," + COLUMN_PATH + - " TEXT UNIQUE" + + " TEXT UNIQUE NOT NULL" + ");" ) private const val queryHidden = ( @@ -146,7 +146,7 @@ abstract class UtilitiesDatabase : RoomDatabase() { COLUMN_ID + " INTEGER PRIMARY KEY," + COLUMN_PATH + - " TEXT UNIQUE" + + " TEXT UNIQUE NOT NULL" + ");" ) private const val queryList = ( @@ -156,7 +156,7 @@ abstract class UtilitiesDatabase : RoomDatabase() { COLUMN_ID + " INTEGER PRIMARY KEY," + COLUMN_PATH + - " TEXT UNIQUE" + + " TEXT UNIQUE NOT NULL" + ");" ) private const val queryGrid = ( @@ -166,7 +166,7 @@ abstract class UtilitiesDatabase : RoomDatabase() { COLUMN_ID + " INTEGER PRIMARY KEY," + COLUMN_PATH + - " TEXT UNIQUE" + + " TEXT UNIQUE NOT NULL" + ");" ) private const val queryBookmarks = ( @@ -176,9 +176,9 @@ abstract class UtilitiesDatabase : RoomDatabase() { COLUMN_ID + " INTEGER PRIMARY KEY," + COLUMN_NAME + - " TEXT," + + " TEXT NOT NULL," + COLUMN_PATH + - " TEXT UNIQUE" + + " TEXT UNIQUE NOT NULL" + ");" ) private const val querySmb = ( @@ -186,11 +186,11 @@ abstract class UtilitiesDatabase : RoomDatabase() { TABLE_SMB + " (" + COLUMN_ID + - " INTEGER PRIMARY KEY," + + " INTEGER PRIMARY KEY NOT NULL," + COLUMN_NAME + - " TEXT," + + " TEXT NOT NULL," + COLUMN_PATH + - " TEXT UNIQUE" + + " TEXT UNIQUE NOT NULL" + ");" ) private const val querySftp = ( @@ -198,11 +198,11 @@ abstract class UtilitiesDatabase : RoomDatabase() { TABLE_SFTP + " (" + COLUMN_ID + - " INTEGER PRIMARY KEY," + + " INTEGER PRIMARY KEY NOT NULL," + COLUMN_NAME + - " TEXT," + + " TEXT NOT NULL," + COLUMN_PATH + - " TEXT UNIQUE," + + " TEXT UNIQUE NOT NULL," + COLUMN_HOST_PUBKEY + " TEXT," + COLUMN_PRIVATE_KEY_NAME + @@ -481,7 +481,7 @@ abstract class UtilitiesDatabase : RoomDatabase() { } internal val MIGRATION_5_6: Migration = - object : Migration(5, DATABASE_VERSION) { + object : Migration(5, 6) { override fun migrate(database: SupportSQLiteDatabase) { val updateSqls: MutableList = ArrayList() updateSqls.addAll(migratePasswordInUris(database, TABLE_SMB)) @@ -492,6 +492,101 @@ abstract class UtilitiesDatabase : RoomDatabase() { } } + internal val MIGRATION_6_7: Migration = + object : Migration(6, DATABASE_VERSION) { + override fun migrate(database: SupportSQLiteDatabase) { + var backupTable = TEMP_TABLE_PREFIX + TABLE_BOOKMARKS + database.execSQL( + queryBookmarks + .replace(TABLE_BOOKMARKS, backupTable) + .replace("PRIMARY KEY,", "PRIMARY KEY NOT NULL,"), + ) + database.execSQL( + "INSERT INTO " + + backupTable + + "(" + + COLUMN_NAME + + "," + + COLUMN_PATH + + ") SELECT DISTINCT(" + + COLUMN_NAME + + "), " + + COLUMN_PATH + + " FROM " + + TABLE_BOOKMARKS, + ) + database.execSQL("DROP TABLE $TABLE_BOOKMARKS;") + database.execSQL("ALTER TABLE $backupTable RENAME TO $TABLE_BOOKMARKS;") + database.execSQL( + "CREATE UNIQUE INDEX 'bookmarks_idx' ON " + + TABLE_BOOKMARKS + + "(" + + COLUMN_NAME + + ", " + + COLUMN_PATH + + ");", + ) + backupTable = TEMP_TABLE_PREFIX + TABLE_GRID + database.execSQL( + queryGrid + .replace(TABLE_GRID, backupTable) + .replace("PRIMARY KEY,", "PRIMARY KEY NOT NULL,"), + ) + database.execSQL( + "INSERT INTO $backupTable SELECT * FROM $TABLE_GRID group by path;", + ) + database.execSQL("DROP TABLE $TABLE_GRID;") + database.execSQL("ALTER TABLE $backupTable RENAME TO $TABLE_GRID;") + backupTable = TEMP_TABLE_PREFIX + TABLE_HIDDEN + database.execSQL( + queryHidden + .replace(TABLE_HIDDEN, backupTable) + .replace("PRIMARY KEY,", "PRIMARY KEY NOT NULL,"), + ) + database.execSQL( + "INSERT INTO $backupTable SELECT * FROM $TABLE_HIDDEN group by path;", + ) + database.execSQL("DROP TABLE $TABLE_HIDDEN;") + database.execSQL("ALTER TABLE $backupTable RENAME TO $TABLE_HIDDEN;") + backupTable = TEMP_TABLE_PREFIX + TABLE_HISTORY + database.execSQL( + queryHistory + .replace(TABLE_HISTORY, backupTable) + .replace("PRIMARY KEY,", "PRIMARY KEY NOT NULL,"), + ) + database.execSQL( + "INSERT INTO $backupTable SELECT * FROM $TABLE_HISTORY group by path;", + ) + database.execSQL("DROP TABLE $TABLE_HISTORY;") + database.execSQL("ALTER TABLE $backupTable RENAME TO $TABLE_HISTORY;") + backupTable = TEMP_TABLE_PREFIX + TABLE_LIST + database.execSQL( + queryList + .replace(TABLE_LIST, backupTable) + .replace("PRIMARY KEY,", "PRIMARY KEY NOT NULL,"), + ) + database.execSQL( + "INSERT INTO $backupTable SELECT * FROM $TABLE_LIST group by path;", + ) + database.execSQL("DROP TABLE $TABLE_LIST;") + database.execSQL("ALTER TABLE $backupTable RENAME TO $TABLE_LIST;") + backupTable = TEMP_TABLE_PREFIX + TABLE_SMB + database.execSQL(querySmb.replace(TABLE_SMB, backupTable)) + database.execSQL( + "INSERT INTO $backupTable SELECT * FROM $TABLE_SMB group by path;", + ) + database.execSQL("DROP TABLE $TABLE_SMB;") + database.execSQL("ALTER TABLE $backupTable RENAME TO $TABLE_SMB;") + backupTable = TEMP_TABLE_PREFIX + TABLE_SFTP + database.execSQL(querySftp.replace(TABLE_SFTP, backupTable)) + database.execSQL( + "INSERT INTO $backupTable SELECT * FROM $TABLE_SFTP group by path;", + ) + database.execSQL("DROP TABLE $TABLE_SFTP;") + database.execSQL("ALTER TABLE $backupTable RENAME TO $TABLE_SFTP;") + } + } + /** * Initialize the database. Optionally, may provide a custom way to create the database * with supplied [Context]. @@ -512,6 +607,7 @@ abstract class UtilitiesDatabase : RoomDatabase() { MIGRATION_3_4, MIGRATION_4_5, MIGRATION_5_6, + MIGRATION_6_7, ) .build() } diff --git a/app/src/main/java/com/amaze/filemanager/database/UtilsHandler.kt b/app/src/main/java/com/amaze/filemanager/database/UtilsHandler.kt index ecb870645f..e57c222033 100644 --- a/app/src/main/java/com/amaze/filemanager/database/UtilsHandler.kt +++ b/app/src/main/java/com/amaze/filemanager/database/UtilsHandler.kt @@ -35,6 +35,7 @@ import com.amaze.filemanager.database.models.utilities.SmbEntry import com.googlecode.concurrenttrees.radix.ConcurrentRadixTree import com.googlecode.concurrenttrees.radix.node.concrete.DefaultCharArrayNodeFactory import com.googlecode.concurrenttrees.radix.node.concrete.voidvalue.VoidValue +import io.reactivex.Completable import io.reactivex.schedulers.Schedulers import org.slf4j.Logger import org.slf4j.LoggerFactory @@ -70,20 +71,18 @@ class UtilsHandler( * Main save method. */ @Suppress("ComplexMethod", "LongMethod") - fun saveToDatabase(operationData: OperationData) { - when (operationData.type) { + fun saveToDatabase(operationData: OperationData): Completable { + return when (operationData.type) { Operation.HIDDEN -> utilitiesDatabase .hiddenEntryDao() .insert(Hidden(operationData.path)) .subscribeOn(Schedulers.io()) - .subscribe() Operation.HISTORY -> utilitiesDatabase.historyEntryDao().run { deleteByPath(operationData.path) .andThen(insert(History(operationData.path))) .subscribeOn(Schedulers.io()) - .subscribe() } Operation.LIST -> utilitiesDatabase @@ -92,25 +91,21 @@ class UtilsHandler( com.amaze.filemanager.database.models.utilities.List(operationData.path), ) .subscribeOn(Schedulers.io()) - .subscribe() Operation.GRID -> utilitiesDatabase .gridEntryDao() .insert(Grid(operationData.path)) .subscribeOn(Schedulers.io()) - .subscribe() Operation.BOOKMARKS -> utilitiesDatabase .bookmarkEntryDao() .insert(Bookmark(operationData.name, operationData.path)) .subscribeOn(Schedulers.io()) - .subscribe() Operation.SMB -> utilitiesDatabase.smbEntryDao().run { deleteByNameAndPath(operationData.name, operationData.path) .andThen(insert(SmbEntry(operationData.name, operationData.path))) .subscribeOn(Schedulers.io()) - .subscribe() } Operation.SFTP -> utilitiesDatabase @@ -128,7 +123,6 @@ class UtilsHandler( ), ) .subscribeOn(Schedulers.io()) - .subscribe() } else -> throw IllegalStateException("Unidentified operation!") @@ -185,7 +179,7 @@ class UtilsHandler( File(sd, Environment.DIRECTORY_PICTURES).absolutePath, ) for (dir in dirs) { - saveToDatabase(OperationData(Operation.BOOKMARKS, File(dir).name, dir)) + saveToDatabase(OperationData(Operation.BOOKMARKS, File(dir).name, dir)).subscribe() } } @@ -208,7 +202,7 @@ class UtilsHandler( .subscribe { entry: SftpEntry -> entry.name = connectionName entry.path = path - entry.hostKey = hostKey + if (true == hostKey?.isNotEmpty()) entry.hostKey = hostKey if (sshKeyName != null && sshKey != null) { entry.sshKeyName = sshKeyName entry.sshKey = sshKey diff --git a/app/src/main/java/com/amaze/filemanager/database/models/explorer/CloudEntry.java b/app/src/main/java/com/amaze/filemanager/database/models/explorer/CloudEntry.java index b161593856..9afd7c15eb 100644 --- a/app/src/main/java/com/amaze/filemanager/database/models/explorer/CloudEntry.java +++ b/app/src/main/java/com/amaze/filemanager/database/models/explorer/CloudEntry.java @@ -26,6 +26,7 @@ import com.amaze.filemanager.database.typeconverters.OpenModeTypeConverter; import com.amaze.filemanager.fileoperations.filesystem.OpenMode; +import androidx.annotation.NonNull; import androidx.room.ColumnInfo; import androidx.room.Entity; import androidx.room.PrimaryKey; @@ -43,6 +44,7 @@ public class CloudEntry { @TypeConverters(OpenModeTypeConverter.class) private OpenMode serviceType; + @NonNull @ColumnInfo(name = ExplorerDatabase.COLUMN_CLOUD_PERSIST) @TypeConverters(EncryptedStringTypeConverter.class) private StringWrapper persistData; diff --git a/app/src/main/java/com/amaze/filemanager/database/models/explorer/EncryptedEntry.java b/app/src/main/java/com/amaze/filemanager/database/models/explorer/EncryptedEntry.java index 443f2c9d53..1cb911a0d4 100644 --- a/app/src/main/java/com/amaze/filemanager/database/models/explorer/EncryptedEntry.java +++ b/app/src/main/java/com/amaze/filemanager/database/models/explorer/EncryptedEntry.java @@ -24,6 +24,7 @@ import com.amaze.filemanager.database.models.StringWrapper; import com.amaze.filemanager.database.typeconverters.EncryptedStringTypeConverter; +import androidx.annotation.NonNull; import androidx.room.ColumnInfo; import androidx.room.Entity; import androidx.room.PrimaryKey; @@ -37,9 +38,11 @@ public class EncryptedEntry { @ColumnInfo(name = ExplorerDatabase.COLUMN_ENCRYPTED_ID) private int _id; + @NonNull @ColumnInfo(name = ExplorerDatabase.COLUMN_ENCRYPTED_PATH) private String path; + @NonNull @ColumnInfo(name = ExplorerDatabase.COLUMN_ENCRYPTED_PASSWORD) @TypeConverters(EncryptedStringTypeConverter.class) private StringWrapper password; diff --git a/app/src/main/java/com/amaze/filemanager/database/models/explorer/Tab.java b/app/src/main/java/com/amaze/filemanager/database/models/explorer/Tab.java index b824a0ce50..fc8f6b47c8 100644 --- a/app/src/main/java/com/amaze/filemanager/database/models/explorer/Tab.java +++ b/app/src/main/java/com/amaze/filemanager/database/models/explorer/Tab.java @@ -25,6 +25,7 @@ import android.content.SharedPreferences; +import androidx.annotation.NonNull; import androidx.room.ColumnInfo; import androidx.room.Entity; import androidx.room.PrimaryKey; @@ -37,9 +38,11 @@ public class Tab { @ColumnInfo(name = ExplorerDatabase.COLUMN_TAB_NO) public final int tabNumber; + @NonNull @ColumnInfo(name = ExplorerDatabase.COLUMN_PATH) public final String path; + @NonNull @ColumnInfo(name = ExplorerDatabase.COLUMN_HOME) public final String home; diff --git a/app/src/main/java/com/amaze/filemanager/database/models/utilities/OperationData.java b/app/src/main/java/com/amaze/filemanager/database/models/utilities/OperationData.java index dee0051065..4cfdeb2272 100644 --- a/app/src/main/java/com/amaze/filemanager/database/models/utilities/OperationData.java +++ b/app/src/main/java/com/amaze/filemanager/database/models/utilities/OperationData.java @@ -41,6 +41,7 @@ public abstract class OperationData { @ColumnInfo(name = UtilitiesDatabase.COLUMN_ID) public int _id; + @NonNull @ColumnInfo(name = UtilitiesDatabase.COLUMN_PATH) public String path; diff --git a/app/src/main/java/com/amaze/filemanager/database/models/utilities/OperationDataWithName.java b/app/src/main/java/com/amaze/filemanager/database/models/utilities/OperationDataWithName.java index a39390c48b..73d5543c0e 100644 --- a/app/src/main/java/com/amaze/filemanager/database/models/utilities/OperationDataWithName.java +++ b/app/src/main/java/com/amaze/filemanager/database/models/utilities/OperationDataWithName.java @@ -37,6 +37,7 @@ */ public abstract class OperationDataWithName extends OperationData { + @NonNull @ColumnInfo(name = UtilitiesDatabase.COLUMN_NAME) public String name; diff --git a/app/src/main/java/com/amaze/filemanager/database/models/utilities/SftpEntry.java b/app/src/main/java/com/amaze/filemanager/database/models/utilities/SftpEntry.java index d6d2e33081..bf1502be3a 100644 --- a/app/src/main/java/com/amaze/filemanager/database/models/utilities/SftpEntry.java +++ b/app/src/main/java/com/amaze/filemanager/database/models/utilities/SftpEntry.java @@ -25,6 +25,7 @@ import android.text.TextUtils; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.room.ColumnInfo; import androidx.room.Entity; @@ -36,16 +37,24 @@ @Entity(tableName = UtilitiesDatabase.TABLE_SFTP) public class SftpEntry extends OperationDataWithName { + @Nullable @ColumnInfo(name = UtilitiesDatabase.COLUMN_HOST_PUBKEY) public String hostKey; + @Nullable @ColumnInfo(name = UtilitiesDatabase.COLUMN_PRIVATE_KEY_NAME) public String sshKeyName; + @Nullable @ColumnInfo(name = UtilitiesDatabase.COLUMN_PRIVATE_KEY) public String sshKey; - public SftpEntry(String path, String name, String hostKey, String sshKeyName, String sshKey) { + public SftpEntry( + @NonNull String path, + @NonNull String name, + @Nullable String hostKey, + @Nullable String sshKeyName, + @Nullable String sshKey) { super(name, path); this.hostKey = hostKey; this.sshKeyName = sshKeyName; diff --git a/app/src/main/java/com/amaze/filemanager/ui/activities/MainActivity.java b/app/src/main/java/com/amaze/filemanager/ui/activities/MainActivity.java index 2e835df77c..56e4d8e472 100644 --- a/app/src/main/java/com/amaze/filemanager/ui/activities/MainActivity.java +++ b/app/src/main/java/com/amaze/filemanager/ui/activities/MainActivity.java @@ -2169,10 +2169,8 @@ public void addConnection( String[] s = new String[] {name, encryptedPath}; if (!edit) { if ((dataUtils.containsServer(encryptedPath)) == -1) { - Completable.fromRunnable( - () -> - utilsHandler.saveToDatabase( - new OperationData(UtilsHandler.Operation.SMB, name, encryptedPath))) + utilsHandler + .saveToDatabase(new OperationData(UtilsHandler.Operation.SMB, name, encryptedPath)) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe( diff --git a/app/src/main/java/com/amaze/filemanager/ui/dialogs/SftpConnectDialog.kt b/app/src/main/java/com/amaze/filemanager/ui/dialogs/SftpConnectDialog.kt index eeb9c7ad01..f3e9480377 100644 --- a/app/src/main/java/com/amaze/filemanager/ui/dialogs/SftpConnectDialog.kt +++ b/app/src/main/java/com/amaze/filemanager/ui/dialogs/SftpConnectDialog.kt @@ -733,7 +733,7 @@ class SftpConnectDialog : DialogFragment() { selectedParsedKeyPairName, getPemContents(), ), - ) + ).subscribe() val ma = (activity as MainActivity).currentMainFragment ma?.loadlist( encryptedPath, diff --git a/app/src/main/java/com/amaze/filemanager/ui/fragments/preferencefragments/BookmarksPrefsFragment.kt b/app/src/main/java/com/amaze/filemanager/ui/fragments/preferencefragments/BookmarksPrefsFragment.kt index 3ce9e62e85..6fd4e37439 100644 --- a/app/src/main/java/com/amaze/filemanager/ui/fragments/preferencefragments/BookmarksPrefsFragment.kt +++ b/app/src/main/java/com/amaze/filemanager/ui/fragments/preferencefragments/BookmarksPrefsFragment.kt @@ -140,7 +140,7 @@ class BookmarksPrefsFragment : BasePrefsFragment() { txtShortcutName.text.toString(), txtShortcutPath.text.toString(), ), - ) + ).subscribe() dialog.dismiss() } } diff --git a/app/src/test/java/com/amaze/filemanager/database/ExplorerDatabaseMigrationTest.kt b/app/src/test/java/com/amaze/filemanager/database/ExplorerDatabaseMigrationTest.kt index 69c1e48289..9d15688703 100644 --- a/app/src/test/java/com/amaze/filemanager/database/ExplorerDatabaseMigrationTest.kt +++ b/app/src/test/java/com/amaze/filemanager/database/ExplorerDatabaseMigrationTest.kt @@ -82,6 +82,7 @@ class ExplorerDatabaseMigrationTest { ExplorerDatabase.MIGRATION_8_9, ExplorerDatabase.MIGRATION_9_10, ExplorerDatabase.MIGRATION_10_11, + ExplorerDatabase.MIGRATION_11_12, ) .build() explorerDatabase.openHelper.writableDatabase @@ -109,6 +110,7 @@ class ExplorerDatabaseMigrationTest { ExplorerDatabase.MIGRATION_8_9, ExplorerDatabase.MIGRATION_9_10, ExplorerDatabase.MIGRATION_10_11, + ExplorerDatabase.MIGRATION_11_12, ) .build() explorerDatabase.openHelper.writableDatabase @@ -135,6 +137,7 @@ class ExplorerDatabaseMigrationTest { ExplorerDatabase.MIGRATION_8_9, ExplorerDatabase.MIGRATION_9_10, ExplorerDatabase.MIGRATION_10_11, + ExplorerDatabase.MIGRATION_11_12, ) .build() explorerDatabase.openHelper.writableDatabase @@ -212,6 +215,7 @@ class ExplorerDatabaseMigrationTest { ExplorerDatabase.MIGRATION_8_9, ExplorerDatabase.MIGRATION_9_10, ExplorerDatabase.MIGRATION_10_11, + ExplorerDatabase.MIGRATION_11_12, ).allowMainThreadQueries() .build() explorerDatabase.openHelper.writableDatabase @@ -320,6 +324,7 @@ class ExplorerDatabaseMigrationTest { ExplorerDatabase.MIGRATION_8_9, ExplorerDatabase.MIGRATION_9_10, ExplorerDatabase.MIGRATION_10_11, + ExplorerDatabase.MIGRATION_11_12, ) .allowMainThreadQueries() .build() diff --git a/app/src/test/java/com/amaze/filemanager/database/UtilitiesDatabaseMigrationTest.kt b/app/src/test/java/com/amaze/filemanager/database/UtilitiesDatabaseMigrationTest.kt index f3167fcaf0..a75e56dc37 100644 --- a/app/src/test/java/com/amaze/filemanager/database/UtilitiesDatabaseMigrationTest.kt +++ b/app/src/test/java/com/amaze/filemanager/database/UtilitiesDatabaseMigrationTest.kt @@ -89,6 +89,7 @@ class UtilitiesDatabaseMigrationTest { UtilitiesDatabase.MIGRATION_3_4, UtilitiesDatabase.MIGRATION_4_5, UtilitiesDatabase.MIGRATION_5_6, + UtilitiesDatabase.MIGRATION_6_7, ) .build() utilitiesDatabase.openHelper.writableDatabase @@ -100,7 +101,7 @@ class UtilitiesDatabaseMigrationTest { */ @Test @Suppress("ComplexMethod", "LongMethod", "StringLiteralDuplication") - fun testMigrationFrom5To6() { + fun testMigrationFrom5To7() { val db: SupportSQLiteDatabase = helper.createDatabase(TEST_DB, 5) val password1 = @@ -141,7 +142,7 @@ class UtilitiesDatabaseMigrationTest { UtilitiesDatabase::class.java, TEST_DB, ) - .addMigrations(UtilitiesDatabase.MIGRATION_5_6) + .addMigrations(UtilitiesDatabase.MIGRATION_5_6, UtilitiesDatabase.MIGRATION_6_7) .allowMainThreadQueries() .build() utilitiesDatabase.openHelper.writableDatabase diff --git a/app/src/test/java/com/amaze/filemanager/database/UtilsHandlerTest.kt b/app/src/test/java/com/amaze/filemanager/database/UtilsHandlerTest.kt index 7b8a5e433c..bcfc17521b 100644 --- a/app/src/test/java/com/amaze/filemanager/database/UtilsHandlerTest.kt +++ b/app/src/test/java/com/amaze/filemanager/database/UtilsHandlerTest.kt @@ -101,7 +101,7 @@ class UtilsHandlerTest { ) AppConfig.getInstance().run { utilsHandler.run { - saveToDatabase(o) + saveToDatabase(o).blockingAwait() val verify = smbList assertEquals(1, verify.size) assertEquals( @@ -137,8 +137,8 @@ class UtilsHandlerTest { ) AppConfig.getInstance().run { utilsHandler.run { - saveToDatabase(o) - saveToDatabase(o) + saveToDatabase(o).blockingAwait() + saveToDatabase(o).blockingAwait() val verify1 = smbList assertEquals(1, verify1.size) val verify2 = smbList @@ -164,10 +164,10 @@ class UtilsHandlerTest { val o = OperationData(UtilsHandler.Operation.HISTORY, "/storage/1234-5678/Documents") AppConfig.getInstance().run { utilsHandler.run { - saveToDatabase(o) - saveToDatabase(o) - saveToDatabase(o) - saveToDatabase(o) + saveToDatabase(o).blockingAwait() + saveToDatabase(o).blockingAwait() + saveToDatabase(o).blockingAwait() + saveToDatabase(o).blockingAwait() val verify = historyLinkedList assertEquals(1, verify.size) assertEquals(verify[0], o.path) @@ -223,9 +223,9 @@ class UtilsHandlerTest { ) AppConfig.getInstance().run { utilsHandler.run { - saveToDatabase(o) - saveToDatabase(o) - saveToDatabase(o) + saveToDatabase(o).blockingAwait() + saveToDatabase(o).blockingAwait() + saveToDatabase(o).blockingAwait() val verify = sftpList assertEquals(1, verify.size) assertEquals(o.name, verify[0][0]) @@ -261,9 +261,9 @@ class UtilsHandlerTest { ) AppConfig.getInstance().run { utilsHandler.run { - saveToDatabase(o) - saveToDatabase(o) - saveToDatabase(o) + saveToDatabase(o).blockingAwait() + saveToDatabase(o).blockingAwait() + saveToDatabase(o).blockingAwait() val verify = sftpList assertEquals(1, verify.size) assertEquals(o.name, verify[0][0]) diff --git a/app/src/test/java/com/amaze/filemanager/filesystem/ssh/test/TestUtils.kt b/app/src/test/java/com/amaze/filemanager/filesystem/ssh/test/TestUtils.kt index 35b1854a58..06ecc57b55 100644 --- a/app/src/test/java/com/amaze/filemanager/filesystem/ssh/test/TestUtils.kt +++ b/app/src/test/java/com/amaze/filemanager/filesystem/ssh/test/TestUtils.kt @@ -86,7 +86,7 @@ object TestUtils { null, null, ), - ) + ).blockingAwait() Shadows.shadowOf(Looper.getMainLooper()).idle() } @@ -133,7 +133,7 @@ object TestUtils { null, null, ), - ) + ).blockingAwait() } else { utilsHandler.saveToDatabase( OperationData( @@ -144,7 +144,7 @@ object TestUtils { "id_rsa", privateKeyContents, ), - ) + ).blockingAwait() } Shadows.shadowOf(Looper.getMainLooper()).idle() } diff --git a/app/src/test/java/com/amaze/filemanager/ui/activities/AbstractMainActivityTestBase.kt b/app/src/test/java/com/amaze/filemanager/ui/activities/AbstractMainActivityTestBase.kt index 307828c771..222a922236 100644 --- a/app/src/test/java/com/amaze/filemanager/ui/activities/AbstractMainActivityTestBase.kt +++ b/app/src/test/java/com/amaze/filemanager/ui/activities/AbstractMainActivityTestBase.kt @@ -73,7 +73,7 @@ abstract class AbstractMainActivityTestBase { @NonNull @JvmField @RequiresApi(Build.VERSION_CODES.R) - val allFilesPermissionRule = + val allFilesPermissionRule: GrantPermissionRule = GrantPermissionRule.grant(Manifest.permission.MANAGE_EXTERNAL_STORAGE) /** @@ -86,6 +86,7 @@ abstract class AbstractMainActivityTestBase { RxJavaPlugins.setIoSchedulerHandler { Schedulers.trampoline() } RxAndroidPlugins.reset() RxAndroidPlugins.setInitMainThreadSchedulerHandler { Schedulers.trampoline() } + RxAndroidPlugins.setMainThreadSchedulerHandler { Schedulers.trampoline() } ShadowSQLiteConnection.reset() } @@ -101,5 +102,7 @@ abstract class AbstractMainActivityTestBase { ), ).resetStorageVolumeList() } + RxAndroidPlugins.reset() + RxJavaPlugins.reset() } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6b1c16d97b..3aee489bcb 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -16,8 +16,8 @@ sshj = "0.39.0" jcifs = "2.1.10" eventbus = "3.3.1" fabSpeedDial = "3.3.0" -room = "2.5.2" -bouncyCastle = "1.77" +room = "2.6.1" +bouncyCastle = "1.78.1" awaitility = "3.1.6" androidXCore = "1.7.0" androidMaterial = "1.5.0" # Upgrade to 1.5 requires targetSdk 31 diff --git a/testShared/src/test/java/com/amaze/filemanager/test/ShadowPasswordUtilTest.java b/testShared/src/test/java/com/amaze/filemanager/test/ShadowPasswordUtilTest.java index c1f8919b50..47abfe7621 100644 --- a/testShared/src/test/java/com/amaze/filemanager/test/ShadowPasswordUtilTest.java +++ b/testShared/src/test/java/com/amaze/filemanager/test/ShadowPasswordUtilTest.java @@ -95,14 +95,16 @@ public void testWithUtilsHandler() { String fingerprint = "00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff"; String url = "ssh://test:test@127.0.0.1:22"; - utilsHandler.saveToDatabase( - new OperationData( - UtilsHandler.Operation.SFTP, - NetCopyClientUtils.INSTANCE.encryptFtpPathAsNecessary(url), - "Test", - fingerprint, - null, - null)); + utilsHandler + .saveToDatabase( + new OperationData( + UtilsHandler.Operation.SFTP, + NetCopyClientUtils.INSTANCE.encryptFtpPathAsNecessary(url), + "Test", + fingerprint, + null, + null)) + .blockingAwait(); await() .atMost(10, TimeUnit.SECONDS)