diff --git a/mediadb/.gitignore b/mediadb/.gitignore
new file mode 100644
index 000000000..796b96d1c
--- /dev/null
+++ b/mediadb/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/mediadb/build.gradle b/mediadb/build.gradle
new file mode 100644
index 000000000..ff77bd2a8
--- /dev/null
+++ b/mediadb/build.gradle
@@ -0,0 +1,70 @@
+/*
+ * ************************************************************************
+ * build.gradle
+ * *************************************************************************
+ * Copyright © 2020 VLC authors and VideoLAN
+ * Author: Nicolas POMEPUY
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ * **************************************************************************
+ *
+ *
+ */
+
+apply plugin: 'com.android.library'
+apply plugin: 'kotlin-android'
+apply plugin: 'kotlin-kapt'
+apply plugin: 'kotlin-android-extensions'
+android {
+ compileSdkVersion 29
+ buildToolsVersion "29.0.2"
+
+
+ defaultConfig {
+ minSdkVersion 17
+ targetSdkVersion 29
+ versionCode 1
+ versionName "1.0"
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ consumerProguardFiles 'consumer-rules.pro'
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+
+}
+
+dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
+ implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
+ implementation 'androidx.appcompat:appcompat:1.1.0'
+ implementation 'androidx.core:core-ktx:1.1.0'
+ testImplementation 'junit:junit:4.12'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.1'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
+ //Room
+ implementation "androidx.room:room-runtime:$rootProject.ext.roomVersion"
+ kapt "androidx.room:room-compiler:$rootProject.ext.roomVersion"
+ implementation project(':tools')
+ implementation project(':resources')
+
+
+ implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$rootProject.ext.kotlinx_version"
+ implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$rootProject.ext.kotlinx_version"
+}
diff --git a/mediadb/consumer-rules.pro b/mediadb/consumer-rules.pro
new file mode 100644
index 000000000..e69de29bb
diff --git a/mediadb/proguard-rules.pro b/mediadb/proguard-rules.pro
new file mode 100644
index 000000000..f1b424510
--- /dev/null
+++ b/mediadb/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/mediadb/src/androidTest/java/org/videolan/vlc/mediadb/ExampleInstrumentedTest.kt b/mediadb/src/androidTest/java/org/videolan/vlc/mediadb/ExampleInstrumentedTest.kt
new file mode 100644
index 000000000..165c9c555
--- /dev/null
+++ b/mediadb/src/androidTest/java/org/videolan/vlc/mediadb/ExampleInstrumentedTest.kt
@@ -0,0 +1,48 @@
+/*
+ * ************************************************************************
+ * ExampleInstrumentedTest.kt
+ * *************************************************************************
+ * Copyright © 2020 VLC authors and VideoLAN
+ * Author: Nicolas POMEPUY
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ * **************************************************************************
+ *
+ *
+ */
+
+package org.videolan.vlc.mediadb
+
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.ext.junit.runners.AndroidJUnit4
+
+import org.junit.Test
+import org.junit.runner.RunWith
+
+import org.junit.Assert.*
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+@RunWith(AndroidJUnit4::class)
+class ExampleInstrumentedTest {
+ @Test
+ fun useAppContext() {
+ // Context of the app under test.
+ val appContext = InstrumentationRegistry.getInstrumentation().targetContext
+ assertEquals("org.videolan.vlc.mediadb.test", appContext.packageName)
+ }
+}
diff --git a/mediadb/src/main/AndroidManifest.xml b/mediadb/src/main/AndroidManifest.xml
new file mode 100644
index 000000000..789fe0609
--- /dev/null
+++ b/mediadb/src/main/AndroidManifest.xml
@@ -0,0 +1,26 @@
+
+
+
diff --git a/vlc-android/src/org/videolan/vlc/database/BrowserFavDao.kt b/mediadb/src/main/java/org/videolan/vlc/mediadb/BrowserFavDao.kt
similarity index 97%
rename from vlc-android/src/org/videolan/vlc/database/BrowserFavDao.kt
rename to mediadb/src/main/java/org/videolan/vlc/mediadb/BrowserFavDao.kt
index c18daecc1..c9e624d22 100644
--- a/vlc-android/src/org/videolan/vlc/database/BrowserFavDao.kt
+++ b/mediadb/src/main/java/org/videolan/vlc/mediadb/BrowserFavDao.kt
@@ -20,14 +20,13 @@
package org.videolan.vlc.database
+import android.net.Uri
import androidx.lifecycle.LiveData
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
-import android.net.Uri
-import org.videolan.vlc.database.models.BrowserFav
-
+import org.videolan.vlc.mediadb.models.BrowserFav
@Dao
interface BrowserFavDao {
diff --git a/mediadb/src/main/java/org/videolan/vlc/mediadb/Converters.kt b/mediadb/src/main/java/org/videolan/vlc/mediadb/Converters.kt
new file mode 100644
index 000000000..7188dfb0e
--- /dev/null
+++ b/mediadb/src/main/java/org/videolan/vlc/mediadb/Converters.kt
@@ -0,0 +1,67 @@
+/*
+ * ************************************************************************
+ * Converters.kt
+ * *************************************************************************
+ * Copyright © 2020 VLC authors and VideoLAN
+ * Author: Nicolas POMEPUY
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ * **************************************************************************
+ *
+ *
+ */
+
+/*******************************************************************************
+ * Converters.kt
+ * ****************************************************************************
+ * Copyright © 2018 VLC authors and VideoLAN
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ ******************************************************************************/
+
+package org.videolan.vlc.mediadb
+
+import android.net.Uri
+import androidx.room.TypeConverter
+import java.util.*
+
+class Converters {
+ @TypeConverter
+ fun uriToString(uri: Uri): String = uri.toString()
+
+ @TypeConverter
+ fun stringToUri(value: String): Uri = Uri.parse(value)
+
+ @TypeConverter
+ fun fromTimestamp(value: Long?): Date? {
+ return value?.let { Date(it) }
+ }
+
+ @TypeConverter
+ fun dateToTimestamp(date: Date?): Long? {
+ return date?.time?.toLong()
+ }
+}
\ No newline at end of file
diff --git a/vlc-android/src/org/videolan/vlc/database/CustomDirectoryDao.kt b/mediadb/src/main/java/org/videolan/vlc/mediadb/CustomDirectoryDao.kt
similarity index 89%
rename from vlc-android/src/org/videolan/vlc/database/CustomDirectoryDao.kt
rename to mediadb/src/main/java/org/videolan/vlc/mediadb/CustomDirectoryDao.kt
index c1548c638..83284072d 100644
--- a/vlc-android/src/org/videolan/vlc/database/CustomDirectoryDao.kt
+++ b/mediadb/src/main/java/org/videolan/vlc/mediadb/CustomDirectoryDao.kt
@@ -1,7 +1,7 @@
package org.videolan.vlc.database
import androidx.room.*
-import org.videolan.vlc.database.models.CustomDirectory
+import org.videolan.vlc.mediadb.models.CustomDirectory
@Dao
interface CustomDirectoryDao {
diff --git a/vlc-android/src/org/videolan/vlc/database/ExternalSubDao.kt b/mediadb/src/main/java/org/videolan/vlc/mediadb/ExternalSubDao.kt
similarity index 89%
rename from vlc-android/src/org/videolan/vlc/database/ExternalSubDao.kt
rename to mediadb/src/main/java/org/videolan/vlc/mediadb/ExternalSubDao.kt
index 6db42fc09..ed70a9375 100644
--- a/vlc-android/src/org/videolan/vlc/database/ExternalSubDao.kt
+++ b/mediadb/src/main/java/org/videolan/vlc/mediadb/ExternalSubDao.kt
@@ -21,9 +21,11 @@
package org.videolan.vlc.database
import androidx.lifecycle.LiveData
-import androidx.room.*
-import org.videolan.vlc.database.models.ExternalSub
-
+import androidx.room.Dao
+import androidx.room.Insert
+import androidx.room.OnConflictStrategy
+import androidx.room.Query
+import org.videolan.vlc.mediadb.models.ExternalSub
@Dao
interface ExternalSubDao {
diff --git a/vlc-android/src/org/videolan/vlc/database/MediaDatabase.kt b/mediadb/src/main/java/org/videolan/vlc/mediadb/MediaDatabase.kt
similarity index 67%
rename from vlc-android/src/org/videolan/vlc/database/MediaDatabase.kt
rename to mediadb/src/main/java/org/videolan/vlc/mediadb/MediaDatabase.kt
index 7b2edaa6b..9ffbad365 100644
--- a/vlc-android/src/org/videolan/vlc/database/MediaDatabase.kt
+++ b/mediadb/src/main/java/org/videolan/vlc/mediadb/MediaDatabase.kt
@@ -1,3 +1,27 @@
+/*
+ * ************************************************************************
+ * MediaDatabase.kt
+ * *************************************************************************
+ * Copyright © 2020 VLC authors and VideoLAN
+ * Author: Nicolas POMEPUY
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ * **************************************************************************
+ *
+ *
+ */
+
/*******************************************************************************
* MediaDatabase.kt
* ****************************************************************************
@@ -26,13 +50,13 @@ import androidx.room.Room
import androidx.room.RoomDatabase
import androidx.room.TypeConverters
import androidx.sqlite.db.SupportSQLiteDatabase
-import org.videolan.moviepedia.database.Converters
+import org.videolan.resources.AndroidDevices
import org.videolan.tools.SingletonHolder
-import org.videolan.vlc.database.models.BrowserFav
-import org.videolan.vlc.database.models.CustomDirectory
-import org.videolan.vlc.database.models.ExternalSub
-import org.videolan.vlc.database.models.Slave
-import org.videolan.vlc.util.AndroidDevices
+import org.videolan.vlc.mediadb.Converters
+import org.videolan.vlc.mediadb.models.BrowserFav
+import org.videolan.vlc.mediadb.models.CustomDirectory
+import org.videolan.vlc.mediadb.models.ExternalSub
+import org.videolan.vlc.mediadb.models.Slave
private const val DB_NAME = "vlc_database"
diff --git a/vlc-android/src/org/videolan/vlc/database/Migrations.kt b/mediadb/src/main/java/org/videolan/vlc/mediadb/Migrations.kt
similarity index 96%
rename from vlc-android/src/org/videolan/vlc/database/Migrations.kt
rename to mediadb/src/main/java/org/videolan/vlc/mediadb/Migrations.kt
index 89c9ccdaa..eb4432300 100644
--- a/vlc-android/src/org/videolan/vlc/database/Migrations.kt
+++ b/mediadb/src/main/java/org/videolan/vlc/mediadb/Migrations.kt
@@ -26,10 +26,10 @@ import androidx.sqlite.db.SupportSQLiteDatabase
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
+import org.videolan.resources.AndroidDevices
+import org.videolan.resources.TYPE_LOCAL_FAV
import org.videolan.resources.VLCCommonApplication
import org.videolan.tools.Settings
-import org.videolan.vlc.repository.BrowserFavRepository
-import org.videolan.vlc.util.AndroidDevices
private const val DIR_TABLE_NAME = "directories_table"
private const val MEDIA_TABLE_NAME = "media_table"
@@ -203,11 +203,13 @@ val migration_28_29 = object:Migration(28, 29) {
}
fun populateDB(context: Context) = GlobalScope.launch(Dispatchers.IO) {
- val favRepo = BrowserFavRepository.getInstance(context)
val uris = listOf(AndroidDevices.MediaFolders.EXTERNAL_PUBLIC_MOVIES_DIRECTORY_URI,
AndroidDevices.MediaFolders.EXTERNAL_PUBLIC_MUSIC_DIRECTORY_URI,
AndroidDevices.MediaFolders.EXTERNAL_PUBLIC_PODCAST_DIRECTORY_URI,
AndroidDevices.MediaFolders.EXTERNAL_PUBLIC_DOWNLOAD_DIRECTORY_URI,
AndroidDevices.MediaFolders.WHATSAPP_VIDEOS_FILE_URI)
- for (uri in uris) favRepo.addLocalFavItem(uri, uri.lastPathSegment ?: "")
+ val browserFavDao = MediaDatabase.getInstance(context).browserFavDao()
+
+ for (uri in uris) browserFavDao.insert(org.videolan.vlc.mediadb.models.BrowserFav(uri, TYPE_LOCAL_FAV, uri.lastPathSegment
+ ?: "", null))
}
\ No newline at end of file
diff --git a/vlc-android/src/org/videolan/vlc/database/SlaveDao.kt b/mediadb/src/main/java/org/videolan/vlc/mediadb/SlaveDao.kt
similarity index 96%
rename from vlc-android/src/org/videolan/vlc/database/SlaveDao.kt
rename to mediadb/src/main/java/org/videolan/vlc/mediadb/SlaveDao.kt
index bb44f9564..7b706b34d 100644
--- a/vlc-android/src/org/videolan/vlc/database/SlaveDao.kt
+++ b/mediadb/src/main/java/org/videolan/vlc/mediadb/SlaveDao.kt
@@ -24,7 +24,7 @@ import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
-import org.videolan.vlc.database.models.Slave
+import org.videolan.vlc.mediadb.models.Slave
@Dao
interface SlaveDao {
diff --git a/mediadb/src/main/java/org/videolan/vlc/mediadb/models/BrowserFav.kt b/mediadb/src/main/java/org/videolan/vlc/mediadb/models/BrowserFav.kt
new file mode 100644
index 000000000..55d8a7f95
--- /dev/null
+++ b/mediadb/src/main/java/org/videolan/vlc/mediadb/models/BrowserFav.kt
@@ -0,0 +1,63 @@
+/*
+ * ************************************************************************
+ * BrowserFav.kt
+ * *************************************************************************
+ * Copyright © 2020 VLC authors and VideoLAN
+ * Author: Nicolas POMEPUY
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ * **************************************************************************
+ *
+ *
+ */
+
+/*******************************************************************************
+ * BrowserFav.kt
+ * ****************************************************************************
+ * Copyright © 2018 VLC authors and VideoLAN
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ ******************************************************************************/
+
+package org.videolan.vlc.mediadb.models
+
+import android.net.Uri
+import androidx.room.ColumnInfo
+import androidx.room.Entity
+import androidx.room.PrimaryKey
+
+@Entity(tableName = "fav_table")
+data class BrowserFav(
+ @PrimaryKey
+ @ColumnInfo(name = "uri")
+ val uri: Uri,
+ @ColumnInfo(name = "type")
+ val type: Int,
+ @ColumnInfo(name = "title")
+ val title: String,
+ @ColumnInfo(name = "icon_url")
+ val iconUrl: String?
+)
diff --git a/vlc-android/src/org/videolan/vlc/database/models/CustomDirectory.kt b/mediadb/src/main/java/org/videolan/vlc/mediadb/models/CustomDirectory.kt
similarity index 78%
rename from vlc-android/src/org/videolan/vlc/database/models/CustomDirectory.kt
rename to mediadb/src/main/java/org/videolan/vlc/mediadb/models/CustomDirectory.kt
index 32079c0a3..c628655c3 100644
--- a/vlc-android/src/org/videolan/vlc/database/models/CustomDirectory.kt
+++ b/mediadb/src/main/java/org/videolan/vlc/mediadb/models/CustomDirectory.kt
@@ -1,4 +1,4 @@
-package org.videolan.vlc.database.models
+package org.videolan.vlc.mediadb.models
import androidx.room.Entity
import androidx.room.PrimaryKey
diff --git a/vlc-android/src/org/videolan/vlc/database/models/ExternalSub.kt b/mediadb/src/main/java/org/videolan/vlc/mediadb/models/ExternalSub.kt
similarity index 96%
rename from vlc-android/src/org/videolan/vlc/database/models/ExternalSub.kt
rename to mediadb/src/main/java/org/videolan/vlc/mediadb/models/ExternalSub.kt
index 4e621b394..00fbbc8e3 100644
--- a/vlc-android/src/org/videolan/vlc/database/models/ExternalSub.kt
+++ b/mediadb/src/main/java/org/videolan/vlc/mediadb/models/ExternalSub.kt
@@ -18,7 +18,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
******************************************************************************/
-package org.videolan.vlc.database.models
+package org.videolan.vlc.mediadb.models
import androidx.room.Entity
diff --git a/vlc-android/src/org/videolan/vlc/database/models/Slave.kt b/mediadb/src/main/java/org/videolan/vlc/mediadb/models/Slave.kt
similarity index 97%
rename from vlc-android/src/org/videolan/vlc/database/models/Slave.kt
rename to mediadb/src/main/java/org/videolan/vlc/mediadb/models/Slave.kt
index 9b88a6fa8..8411472fa 100644
--- a/vlc-android/src/org/videolan/vlc/database/models/Slave.kt
+++ b/mediadb/src/main/java/org/videolan/vlc/mediadb/models/Slave.kt
@@ -18,7 +18,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
******************************************************************************/
-package org.videolan.vlc.database.models
+package org.videolan.vlc.mediadb.models
import androidx.room.ColumnInfo
import androidx.room.Entity
diff --git a/mediadb/src/main/res/values/strings.xml b/mediadb/src/main/res/values/strings.xml
new file mode 100644
index 000000000..6ac5c7ccd
--- /dev/null
+++ b/mediadb/src/main/res/values/strings.xml
@@ -0,0 +1,27 @@
+
+
+
+ mediadb
+
diff --git a/vlc-android/src/org/videolan/vlc/database/models/BrowserFav.kt b/mediadb/src/test/java/org/videolan/vlc/mediadb/ExampleUnitTest.kt
similarity index 53%
rename from vlc-android/src/org/videolan/vlc/database/models/BrowserFav.kt
rename to mediadb/src/test/java/org/videolan/vlc/mediadb/ExampleUnitTest.kt
index 85a7bc5ad..f3a87a12b 100644
--- a/vlc-android/src/org/videolan/vlc/database/models/BrowserFav.kt
+++ b/mediadb/src/test/java/org/videolan/vlc/mediadb/ExampleUnitTest.kt
@@ -1,8 +1,9 @@
-/*******************************************************************************
- * BrowserFav.kt
- * ****************************************************************************
- * Copyright © 2018 VLC authors and VideoLAN
- *
+/*
+ * ************************************************************************
+ * ExampleUnitTest.kt
+ * *************************************************************************
+ * Copyright © 2020 VLC authors and VideoLAN
+ * Author: Nicolas POMEPUY
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
@@ -16,24 +17,25 @@
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- ******************************************************************************/
+ * **************************************************************************
+ *
+ *
+ */
-package org.videolan.vlc.database.models
+package org.videolan.vlc.mediadb
-import androidx.room.ColumnInfo
-import androidx.room.Entity
-import androidx.room.PrimaryKey
-import android.net.Uri
+import org.junit.Test
-@Entity(tableName = "fav_table")
-data class BrowserFav (
- @PrimaryKey
- @ColumnInfo(name = "uri")
- val uri: Uri,
- @ColumnInfo(name = "type")
- val type: Int,
- @ColumnInfo(name = "title")
- val title: String,
- @ColumnInfo(name = "icon_url")
- val iconUrl: String?
-)
+import org.junit.Assert.*
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+class ExampleUnitTest {
+ @Test
+ fun addition_isCorrect() {
+ assertEquals(4, 2 + 2)
+ }
+}
diff --git a/resources/build.gradle b/resources/build.gradle
index 8d7e80e2e..1f8e53605 100644
--- a/resources/build.gradle
+++ b/resources/build.gradle
@@ -22,12 +22,29 @@ android {
debug {
buildConfigField "String", "APP_ID", "\"${rootProject.ext.appId}.debug\""
}
+ dev {
+ initWith debug
+ matchingFallbacks = ['debug']
+ }
+
}
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.multidex:multidex:2.0.1'
+
+
+ implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$rootProject.ext.kotlinx_version"
+ implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$rootProject.ext.kotlinx_version"
+
+ devImplementation project(':libvlc')
+ devImplementation project(':medialibrary')
+ debugImplementation "org.videolan.android:libvlc-all:$rootProject.ext.libvlcVersion"
+ debugImplementation "org.videolan.android:medialibrary-all:$rootProject.ext.medialibraryVersion"
+
+ api project(':tools')
+
}
repositories {
mavenCentral()
diff --git a/vlc-android/src/org/videolan/vlc/util/AndroidDevices.kt b/resources/src/main/java/org/videolan/resources/AndroidDevices.kt
similarity index 95%
rename from vlc-android/src/org/videolan/vlc/util/AndroidDevices.kt
rename to resources/src/main/java/org/videolan/resources/AndroidDevices.kt
index 6f6f7408f..19c84de82 100644
--- a/vlc-android/src/org/videolan/vlc/util/AndroidDevices.kt
+++ b/resources/src/main/java/org/videolan/resources/AndroidDevices.kt
@@ -18,7 +18,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*/
-package org.videolan.vlc.util
+package org.videolan.resources
import android.annotation.TargetApi
import android.content.Context
@@ -34,11 +34,7 @@ import android.view.MotionEvent
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.ObsoleteCoroutinesApi
import org.videolan.libvlc.util.AndroidUtil
-import org.videolan.resources.VLCCommonApplication
-import java.io.BufferedReader
-import java.io.File
-import java.io.FileReader
-import java.io.IOException
+import java.io.*
import java.util.*
@ObsoleteCoroutinesApi
@@ -92,7 +88,7 @@ object AndroidDevices {
continue
}
if (startsWith(deviceWL, device) && (typeWL.contains(type) || startsWith(mountWL, mountpoint))) {
- val position = containsName(list, FileUtils.getFileNameFromPath(mountpoint))
+ val position = containsName(list, mountpoint.getFileNameFromPath())
if (position > -1) list.removeAt(position)
list.add(mountpoint)
}
@@ -100,7 +96,7 @@ object AndroidDevices {
}
} catch (ignored: IOException) {
} finally {
- Util.close(bufReader)
+ close(bufReader)
}
list.remove(EXTERNAL_PUBLIC_DIRECTORY)
return list
@@ -121,7 +117,7 @@ object AndroidDevices {
devicesWithoutNavBar.add("HTC One S")
devicesWithoutNavBar.add("HTC One X")
devicesWithoutNavBar.add("HTC One XL")
- hasNavBar = !devicesWithoutNavBar.contains(android.os.Build.MODEL)
+ hasNavBar = !devicesWithoutNavBar.contains(Build.MODEL)
val ctx = VLCCommonApplication.appContext
val pm = ctx.packageManager
hasTsp = pm == null || pm.hasSystemFeature("android.hardware.touchscreen")
@@ -216,4 +212,15 @@ object AndroidDevices {
}
}
+
+ fun close(closeable: Closeable?): Boolean {
+ if (closeable != null)
+ try {
+ closeable.close()
+ return true
+ } catch (e: IOException) {
+ }
+
+ return false
+ }
}
diff --git a/resources/src/main/java/org/videolan/resources/Constants.kt b/resources/src/main/java/org/videolan/resources/Constants.kt
index 43931c94d..e31881205 100644
--- a/resources/src/main/java/org/videolan/resources/Constants.kt
+++ b/resources/src/main/java/org/videolan/resources/Constants.kt
@@ -189,6 +189,5 @@ const val TYPE_LOCAL_FAV = 1
const val CRASH_ML_CTX = "crash_ml_ctx"
const val CRASH_ML_MSG = "crash_ml_msg"
-
-private fun String.buildPkgString() = "${BuildConfig.APP_ID}.$this"
+fun String.buildPkgString() = "${BuildConfig.APP_ID}.$this"
diff --git a/vlc-android/src/org/videolan/vlc/util/Strings.kt b/resources/src/main/java/org/videolan/resources/Strings.kt
similarity index 94%
rename from vlc-android/src/org/videolan/vlc/util/Strings.kt
rename to resources/src/main/java/org/videolan/resources/Strings.kt
index 20546133e..9073134aa 100644
--- a/vlc-android/src/org/videolan/vlc/util/Strings.kt
+++ b/resources/src/main/java/org/videolan/resources/Strings.kt
@@ -19,9 +19,9 @@
*/
@file:JvmName("Strings")
-package org.videolan.vlc.util
-import org.videolan.vlc.BuildConfig
+package org.videolan.resources
+
import java.text.DecimalFormat
private const val TAG = "VLC/UiTools/Strings"
@@ -62,4 +62,4 @@ fun String.removeFileProtocole(): String {
this
}
-fun String.buildPkgString() = "${BuildConfig.APPLICATION_ID}.$this"
+fun String.getFileNameFromPath() = substringBeforeLast('/')
diff --git a/settings.gradle b/settings.gradle
index 3983a053f..0d5c4203e 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,3 +1,3 @@
-include ':libvlc', ':api', ':medialibrary', ':tools', ':resources'
+include ':libvlc', ':api', ':medialibrary', ':tools', ':resources', ':mediadb'
include ':vlc-android'
include ':moviepedia'
diff --git a/tools/src/main/java/org/videolan/tools/Workers.kt b/tools/src/main/java/org/videolan/tools/Workers.kt
new file mode 100644
index 000000000..2cb220a8c
--- /dev/null
+++ b/tools/src/main/java/org/videolan/tools/Workers.kt
@@ -0,0 +1,46 @@
+/*
+ * ************************************************************************
+ * Workers.kt
+ * *************************************************************************
+ * Copyright © 2020 VLC authors and VideoLAN
+ * Author: Nicolas POMEPUY
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ * **************************************************************************
+ *
+ *
+ */
+
+package org.videolan.tools
+
+import android.os.Looper
+import kotlinx.coroutines.*
+
+fun runBackground(runnable: Runnable) {
+ if (Looper.myLooper() != Looper.getMainLooper()) runnable.run()
+ else AppScope.launch(Dispatchers.Default) { runnable.run() }
+}
+
+fun runOnMainThread(runnable: Runnable) {
+ AppScope.launch { runnable.run() }
+}
+
+fun runIO(runnable: Runnable) {
+ AppScope.launch(Dispatchers.IO) { runnable.run() }
+}
+
+object AppScope : CoroutineScope {
+ @ExperimentalCoroutinesApi
+ override val coroutineContext = Dispatchers.Main.immediate + SupervisorJob()
+}
\ No newline at end of file
diff --git a/vlc-android/androidTest/org/videolan/vlc/database/MigrationTest.kt b/vlc-android/androidTest/org/videolan/vlc/database/MigrationTest.kt
index fb940f8c3..7c47e8f48 100644
--- a/vlc-android/androidTest/org/videolan/vlc/database/MigrationTest.kt
+++ b/vlc-android/androidTest/org/videolan/vlc/database/MigrationTest.kt
@@ -37,9 +37,9 @@ import org.junit.runner.RunWith
import org.videolan.libvlc.interfaces.IMedia
import org.videolan.vlc.VLCApplication
import org.videolan.vlc.database.helpers.*
-import org.videolan.vlc.database.models.BrowserFav
-import org.videolan.vlc.database.models.ExternalSub
-import org.videolan.vlc.database.models.Slave
+import org.videolan.vlc.mediadb.models.BrowserFav
+import org.videolan.vlc.mediadb.models.ExternalSub
+import org.videolan.vlc.mediadb.models.Slave
import org.videolan.tools.Settings
import org.videolan.resources.TYPE_NETWORK_FAV
import org.videolan.vlc.util.TestUtil
@@ -84,9 +84,9 @@ class MigrationTest {
val migratedDb = getMigratedRoomDatabase(migration_26_27, migration_27_28, migration_28_29)
- val slave: Slave = migratedDb.slaveDao().get(slaveMedia1Path)[0]
- val exSub: List = getValue(migratedDb.externalSubDao().get(exSubMedia1Name))
- val fav: BrowserFav = migratedDb.browserFavDao().get(favUri)[0]
+ val slave: org.videolan.vlc.mediadb.models.Slave = migratedDb.slaveDao().get(slaveMedia1Path)[0]
+ val exSub: List = getValue(migratedDb.externalSubDao().get(exSubMedia1Name))
+ val fav: org.videolan.vlc.mediadb.models.BrowserFav = migratedDb.browserFavDao().get(favUri)[0]
assertEquals(slave.mediaPath, slaveMedia1Path)
assertEquals(slave.type, IMedia.Slave.Type.Subtitle)
@@ -126,7 +126,7 @@ class MigrationTest {
.build()
// close the database and release any stream resources when the test finishes
- migrationTestHelper.closeWhenFinished(database);
+ migrationTestHelper.closeWhenFinished(database)
return database
}
}
\ No newline at end of file
diff --git a/vlc-android/build.gradle b/vlc-android/build.gradle
index 8966acb96..529c78e4f 100644
--- a/vlc-android/build.gradle
+++ b/vlc-android/build.gradle
@@ -252,6 +252,7 @@ dependencies {
implementation project(':api')
implementation project(':tools')
implementation project(':resources')
+ implementation project(':mediadb')
// AppCompat
implementation "androidx.activity:activity-ktx:$rootProject.ext.androidxActivityVersion"
diff --git a/vlc-android/res/layout/playlist_item.xml b/vlc-android/res/layout/playlist_item.xml
index 5558db455..fb12d30d9 100644
--- a/vlc-android/res/layout/playlist_item.xml
+++ b/vlc-android/res/layout/playlist_item.xml
@@ -9,7 +9,7 @@
-
+
{
diff --git a/vlc-android/src/org/videolan/vlc/MediaSessionCallback.kt b/vlc-android/src/org/videolan/vlc/MediaSessionCallback.kt
index 35f7ae739..93cf041b9 100644
--- a/vlc-android/src/org/videolan/vlc/MediaSessionCallback.kt
+++ b/vlc-android/src/org/videolan/vlc/MediaSessionCallback.kt
@@ -12,7 +12,7 @@ import org.videolan.medialibrary.media.MediaLibraryItem
import org.videolan.resources.MEDIALIBRARY_PAGE_SIZE
import org.videolan.vlc.extensions.ExtensionsManager
import org.videolan.vlc.media.MediaSessionBrowser
-import org.videolan.vlc.util.AndroidDevices
+import org.videolan.resources.AndroidDevices
import org.videolan.vlc.util.VoiceSearchParams
import org.videolan.vlc.util.awaitMedialibraryStarted
import org.videolan.vlc.util.getFromMl
diff --git a/vlc-android/src/org/videolan/vlc/PlaybackService.kt b/vlc-android/src/org/videolan/vlc/PlaybackService.kt
index d8d2e3790..7abdb6bf3 100644
--- a/vlc-android/src/org/videolan/vlc/PlaybackService.kt
+++ b/vlc-android/src/org/videolan/vlc/PlaybackService.kt
@@ -57,6 +57,7 @@ import org.videolan.libvlc.util.AndroidUtil
import org.videolan.medialibrary.interfaces.Medialibrary
import org.videolan.medialibrary.interfaces.media.MediaWrapper
import org.videolan.resources.*
+import org.videolan.resources.AndroidDevices
import org.videolan.tools.Settings
import org.videolan.tools.safeOffer
import org.videolan.vlc.gui.helpers.AudioUtil
diff --git a/vlc-android/src/org/videolan/vlc/RecommendationsService.kt b/vlc-android/src/org/videolan/vlc/RecommendationsService.kt
index 52849da2d..f7be841be 100644
--- a/vlc-android/src/org/videolan/vlc/RecommendationsService.kt
+++ b/vlc-android/src/org/videolan/vlc/RecommendationsService.kt
@@ -34,10 +34,7 @@ import androidx.core.content.ContextCompat
import kotlinx.coroutines.*
import org.videolan.medialibrary.interfaces.Medialibrary
import org.videolan.medialibrary.interfaces.media.MediaWrapper
-import org.videolan.resources.PLAY_EXTRA_FROM_START
-import org.videolan.resources.PLAY_EXTRA_ITEM_LOCATION
-import org.videolan.resources.PLAY_EXTRA_ITEM_TITLE
-import org.videolan.resources.PLAY_FROM_VIDEOGRID
+import org.videolan.resources.*
import org.videolan.vlc.gui.helpers.BitmapUtil
import org.videolan.vlc.gui.video.VideoPlayerActivity
import org.videolan.vlc.util.*
diff --git a/vlc-android/src/org/videolan/vlc/RendererDelegate.kt b/vlc-android/src/org/videolan/vlc/RendererDelegate.kt
index 17dc75372..67109d29b 100644
--- a/vlc-android/src/org/videolan/vlc/RendererDelegate.kt
+++ b/vlc-android/src/org/videolan/vlc/RendererDelegate.kt
@@ -24,7 +24,7 @@ import org.videolan.libvlc.RendererDiscoverer
import org.videolan.libvlc.RendererItem
import org.videolan.resources.VLCCommonApplication
import org.videolan.tools.retry
-import org.videolan.vlc.util.AppScope
+import org.videolan.tools.AppScope
import org.videolan.vlc.util.LiveDataset
import org.videolan.vlc.util.VLCInstance
import org.videolan.vlc.util.isAppStarted
diff --git a/vlc-android/src/org/videolan/vlc/StartActivity.kt b/vlc-android/src/org/videolan/vlc/StartActivity.kt
index 196d48956..31b6049bd 100644
--- a/vlc-android/src/org/videolan/vlc/StartActivity.kt
+++ b/vlc-android/src/org/videolan/vlc/StartActivity.kt
@@ -41,6 +41,7 @@ import kotlinx.coroutines.launch
import org.videolan.libvlc.util.AndroidUtil
import org.videolan.medialibrary.MLServiceLocator
import org.videolan.resources.*
+import org.videolan.resources.AndroidDevices
import org.videolan.tools.BETA_WELCOME
import org.videolan.tools.Settings
import org.videolan.tools.awaitAppIsForegroung
diff --git a/vlc-android/src/org/videolan/vlc/StoragesMonitor.kt b/vlc-android/src/org/videolan/vlc/StoragesMonitor.kt
index 449a9d0cc..fe8cc6e61 100644
--- a/vlc-android/src/org/videolan/vlc/StoragesMonitor.kt
+++ b/vlc-android/src/org/videolan/vlc/StoragesMonitor.kt
@@ -11,8 +11,8 @@ import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.channels.actor
import kotlinx.coroutines.delay
import org.videolan.medialibrary.interfaces.Medialibrary
+import org.videolan.tools.AppScope
import org.videolan.vlc.gui.DialogActivity
-import org.videolan.vlc.util.AppScope
import org.videolan.vlc.util.getFromMl
import org.videolan.vlc.util.isAppStarted
import org.videolan.vlc.util.scanAllowed
diff --git a/vlc-android/src/org/videolan/vlc/TvReceiver.kt b/vlc-android/src/org/videolan/vlc/TvReceiver.kt
index 154527c76..bae5937ff 100644
--- a/vlc-android/src/org/videolan/vlc/TvReceiver.kt
+++ b/vlc-android/src/org/videolan/vlc/TvReceiver.kt
@@ -30,7 +30,7 @@ import android.media.tv.TvContract
import android.os.Build
import android.util.Log
import org.videolan.libvlc.util.AndroidUtil
-import org.videolan.vlc.util.AndroidDevices
+import org.videolan.resources.AndroidDevices
import org.videolan.vlc.util.launchChannelUpdate
import org.videolan.vlc.util.setChannel
diff --git a/vlc-android/src/org/videolan/vlc/VLCApplication.kt b/vlc-android/src/org/videolan/vlc/VLCApplication.kt
index 82bc6d9ee..fbb80b77d 100644
--- a/vlc-android/src/org/videolan/vlc/VLCApplication.kt
+++ b/vlc-android/src/org/videolan/vlc/VLCApplication.kt
@@ -48,7 +48,7 @@ import org.videolan.vlc.gui.SendCrashActivity
import org.videolan.vlc.gui.helpers.AudioUtil
import org.videolan.vlc.gui.helpers.BitmapCache
import org.videolan.vlc.gui.helpers.NotificationHelper
-import org.videolan.vlc.util.AppScope
+import org.videolan.tools.AppScope
import org.videolan.vlc.util.DialogDelegate
import org.videolan.vlc.util.SettingsMigration
import org.videolan.vlc.util.VLCInstance
diff --git a/vlc-android/src/org/videolan/vlc/gui/ContentActivity.kt b/vlc-android/src/org/videolan/vlc/gui/ContentActivity.kt
index f7cec0433..08e6c0050 100644
--- a/vlc-android/src/org/videolan/vlc/gui/ContentActivity.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/ContentActivity.kt
@@ -42,7 +42,7 @@ import org.videolan.vlc.gui.browser.ExtensionBrowser
import org.videolan.vlc.gui.dialogs.RenderersDialog
import org.videolan.vlc.gui.helpers.UiTools
import org.videolan.vlc.interfaces.Filterable
-import org.videolan.vlc.util.AndroidDevices
+import org.videolan.resources.AndroidDevices
import org.videolan.tools.Settings
import org.videolan.vlc.util.Util
diff --git a/vlc-android/src/org/videolan/vlc/gui/InfoActivity.kt b/vlc-android/src/org/videolan/vlc/gui/InfoActivity.kt
index f20412983..99fc521db 100644
--- a/vlc-android/src/org/videolan/vlc/gui/InfoActivity.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/InfoActivity.kt
@@ -32,6 +32,7 @@ import org.videolan.medialibrary.interfaces.media.Artist
import org.videolan.medialibrary.interfaces.media.MediaWrapper
import org.videolan.medialibrary.media.MediaLibraryItem
import org.videolan.resources.TAG_ITEM
+import org.videolan.resources.readableFileSize
import org.videolan.vlc.R
import org.videolan.vlc.databinding.InfoActivityBinding
import org.videolan.vlc.gui.browser.PathAdapter
diff --git a/vlc-android/src/org/videolan/vlc/gui/MainActivity.kt b/vlc-android/src/org/videolan/vlc/gui/MainActivity.kt
index cc2b5a4c9..059a95059 100644
--- a/vlc-android/src/org/videolan/vlc/gui/MainActivity.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/MainActivity.kt
@@ -37,10 +37,7 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.ObsoleteCoroutinesApi
import org.videolan.libvlc.util.AndroidUtil
import org.videolan.medialibrary.interfaces.Medialibrary
-import org.videolan.resources.ACTIVITY_RESULT_OPEN
-import org.videolan.resources.ACTIVITY_RESULT_PREFERENCES
-import org.videolan.resources.ACTIVITY_RESULT_SECONDARY
-import org.videolan.resources.EXTRA_TARGET
+import org.videolan.resources.*
import org.videolan.tools.*
import org.videolan.vlc.BuildConfig
import org.videolan.vlc.R
diff --git a/vlc-android/src/org/videolan/vlc/gui/PlaylistActivity.kt b/vlc-android/src/org/videolan/vlc/gui/PlaylistActivity.kt
index 622482e8b..7da4f59d6 100644
--- a/vlc-android/src/org/videolan/vlc/gui/PlaylistActivity.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/PlaylistActivity.kt
@@ -51,6 +51,7 @@ import org.videolan.medialibrary.interfaces.media.MediaWrapper
import org.videolan.medialibrary.interfaces.media.Playlist
import org.videolan.medialibrary.media.MediaLibraryItem
import org.videolan.resources.*
+import org.videolan.resources.AndroidDevices
import org.videolan.tools.isStarted
import org.videolan.vlc.BuildConfig
import org.videolan.vlc.R
diff --git a/vlc-android/src/org/videolan/vlc/gui/SecondaryActivity.kt b/vlc-android/src/org/videolan/vlc/gui/SecondaryActivity.kt
index 9e0ba8d5a..46c38fb75 100644
--- a/vlc-android/src/org/videolan/vlc/gui/SecondaryActivity.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/SecondaryActivity.kt
@@ -36,6 +36,7 @@ import kotlinx.coroutines.ObsoleteCoroutinesApi
import org.videolan.medialibrary.interfaces.Medialibrary
import org.videolan.resources.KEY_FOLDER
import org.videolan.resources.KEY_GROUP
+import org.videolan.resources.AndroidDevices
import org.videolan.tools.RESULT_RESCAN
import org.videolan.tools.RESULT_RESTART
import org.videolan.vlc.R
@@ -46,7 +47,6 @@ import org.videolan.vlc.gui.helpers.UiTools
import org.videolan.vlc.gui.tv.TvUtil
import org.videolan.vlc.gui.video.VideoGridFragment
import org.videolan.vlc.reloadLibrary
-import org.videolan.vlc.util.*
@ExperimentalCoroutinesApi
@ObsoleteCoroutinesApi
diff --git a/vlc-android/src/org/videolan/vlc/gui/SendCrashActivity.kt b/vlc-android/src/org/videolan/vlc/gui/SendCrashActivity.kt
index d4500c6a5..725bdebbe 100644
--- a/vlc-android/src/org/videolan/vlc/gui/SendCrashActivity.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/SendCrashActivity.kt
@@ -45,13 +45,15 @@ import org.videolan.medialibrary.interfaces.Medialibrary
import org.videolan.resources.CRASH_ML_CTX
import org.videolan.resources.CRASH_ML_MSG
import org.videolan.resources.VLCCommonApplication
+import org.videolan.resources.readableFileSize
import org.videolan.vlc.BuildConfig
import org.videolan.vlc.DebugLogService
import org.videolan.vlc.R
-import org.videolan.vlc.VLCApplication
import org.videolan.vlc.databinding.SendCrashActivityBinding
import org.videolan.vlc.gui.helpers.hf.StoragePermissionsDelegate.Companion.getStoragePermission
-import org.videolan.vlc.util.*
+import org.videolan.vlc.util.AppUtils
+import org.videolan.vlc.util.FileUtils
+import org.videolan.vlc.util.Permissions
import java.io.File
import java.lang.Runnable
diff --git a/vlc-android/src/org/videolan/vlc/gui/audio/BaseAudioBrowser.kt b/vlc-android/src/org/videolan/vlc/gui/audio/BaseAudioBrowser.kt
index c37152e4c..d75f6ddf3 100644
--- a/vlc-android/src/org/videolan/vlc/gui/audio/BaseAudioBrowser.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/audio/BaseAudioBrowser.kt
@@ -41,6 +41,7 @@ import kotlinx.coroutines.*
import org.videolan.medialibrary.interfaces.media.MediaWrapper
import org.videolan.medialibrary.media.MediaLibraryItem
import org.videolan.resources.*
+import org.videolan.resources.AndroidDevices
import org.videolan.tools.MultiSelectHelper
import org.videolan.tools.isStarted
import org.videolan.vlc.BuildConfig
diff --git a/vlc-android/src/org/videolan/vlc/gui/browser/BaseBrowserAdapter.kt b/vlc-android/src/org/videolan/vlc/gui/browser/BaseBrowserAdapter.kt
index 61f123a2b..9bb9ec4a0 100644
--- a/vlc-android/src/org/videolan/vlc/gui/browser/BaseBrowserAdapter.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/browser/BaseBrowserAdapter.kt
@@ -51,7 +51,7 @@ import org.videolan.vlc.gui.DiffUtilAdapter
import org.videolan.vlc.gui.helpers.MarqueeViewHolder
import org.videolan.vlc.gui.helpers.SelectorViewHolder
import org.videolan.vlc.gui.helpers.enableMarqueeEffect
-import org.videolan.vlc.util.AndroidDevices
+import org.videolan.resources.AndroidDevices
import org.videolan.tools.Settings
import org.videolan.resources.UPDATE_SELECTION
import java.util.*
diff --git a/vlc-android/src/org/videolan/vlc/gui/browser/BaseBrowserFragment.kt b/vlc-android/src/org/videolan/vlc/gui/browser/BaseBrowserFragment.kt
index 60c1c23bd..c549fb704 100644
--- a/vlc-android/src/org/videolan/vlc/gui/browser/BaseBrowserFragment.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/browser/BaseBrowserFragment.kt
@@ -68,7 +68,9 @@ import org.videolan.vlc.interfaces.IRefreshable
import org.videolan.vlc.media.MediaUtils
import org.videolan.vlc.media.PlaylistManager
import org.videolan.vlc.repository.BrowserFavRepository
-import org.videolan.vlc.util.*
+import org.videolan.vlc.util.Util
+import org.videolan.vlc.util.WeakHandler
+import org.videolan.vlc.util.isSchemeSupported
import org.videolan.vlc.viewmodels.browser.BrowserModel
import java.util.*
diff --git a/vlc-android/src/org/videolan/vlc/gui/browser/FileBrowserFragment.kt b/vlc-android/src/org/videolan/vlc/gui/browser/FileBrowserFragment.kt
index 854655bf7..f06b0a9bb 100644
--- a/vlc-android/src/org/videolan/vlc/gui/browser/FileBrowserFragment.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/browser/FileBrowserFragment.kt
@@ -40,14 +40,14 @@ import kotlinx.coroutines.withContext
import org.videolan.medialibrary.MLServiceLocator
import org.videolan.medialibrary.interfaces.media.MediaWrapper
import org.videolan.medialibrary.media.MediaLibraryItem
+import org.videolan.resources.AndroidDevices
+import org.videolan.resources.CTX_FAV_ADD
+import org.videolan.resources.removeFileProtocole
import org.videolan.vlc.ExternalMonitor
import org.videolan.vlc.R
import org.videolan.vlc.gui.helpers.MedialibraryUtils
import org.videolan.vlc.gui.helpers.hf.OtgAccess
-import org.videolan.vlc.util.AndroidDevices
-import org.videolan.resources.CTX_FAV_ADD
import org.videolan.vlc.util.FileUtils
-import org.videolan.vlc.util.removeFileProtocole
import org.videolan.vlc.viewmodels.browser.BrowserModel
import org.videolan.vlc.viewmodels.browser.TYPE_FILE
diff --git a/vlc-android/src/org/videolan/vlc/gui/browser/FilePickerFragment.kt b/vlc-android/src/org/videolan/vlc/gui/browser/FilePickerFragment.kt
index 820a4a0fb..3773996d5 100644
--- a/vlc-android/src/org/videolan/vlc/gui/browser/FilePickerFragment.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/browser/FilePickerFragment.kt
@@ -36,11 +36,11 @@ import kotlinx.coroutines.runBlocking
import org.videolan.medialibrary.MLServiceLocator
import org.videolan.medialibrary.interfaces.media.MediaWrapper
import org.videolan.medialibrary.media.MediaLibraryItem
+import org.videolan.resources.AndroidDevices
+import org.videolan.resources.removeFileProtocole
import org.videolan.vlc.R
import org.videolan.vlc.repository.DirectoryRepository
-import org.videolan.vlc.util.AndroidDevices
import org.videolan.vlc.util.FileUtils
-import org.videolan.vlc.util.removeFileProtocole
import org.videolan.vlc.viewmodels.browser.BrowserModel
import org.videolan.vlc.viewmodels.browser.TYPE_PICKER
diff --git a/vlc-android/src/org/videolan/vlc/gui/browser/MediaBrowserFragment.kt b/vlc-android/src/org/videolan/vlc/gui/browser/MediaBrowserFragment.kt
index d9f77925d..903bbb3c4 100644
--- a/vlc-android/src/org/videolan/vlc/gui/browser/MediaBrowserFragment.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/browser/MediaBrowserFragment.kt
@@ -56,9 +56,9 @@ import org.videolan.vlc.gui.helpers.hf.StoragePermissionsDelegate.Companion.getW
import org.videolan.vlc.gui.view.SwipeRefreshLayout
import org.videolan.vlc.interfaces.Filterable
import org.videolan.vlc.media.MediaUtils
-import org.videolan.vlc.util.AndroidDevices
-import org.videolan.vlc.util.FileUtils
+import org.videolan.resources.AndroidDevices
import org.videolan.resources.TAG_ITEM
+import org.videolan.vlc.util.FileUtils
import org.videolan.vlc.util.Util
import org.videolan.vlc.viewmodels.MedialibraryViewModel
import org.videolan.vlc.viewmodels.SortableModel
diff --git a/vlc-android/src/org/videolan/vlc/gui/browser/PathAdapter.kt b/vlc-android/src/org/videolan/vlc/gui/browser/PathAdapter.kt
index c609a98eb..d8c786fee 100644
--- a/vlc-android/src/org/videolan/vlc/gui/browser/PathAdapter.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/browser/PathAdapter.kt
@@ -11,7 +11,7 @@ import org.videolan.medialibrary.interfaces.media.MediaWrapper
import org.videolan.medialibrary.media.MediaLibraryItem
import org.videolan.vlc.BuildConfig
import org.videolan.vlc.R
-import org.videolan.vlc.util.AndroidDevices
+import org.videolan.resources.AndroidDevices
import org.videolan.vlc.viewmodels.browser.IPathOperationDelegate
import org.videolan.vlc.viewmodels.browser.PathOperationDelegate
diff --git a/vlc-android/src/org/videolan/vlc/gui/dialogs/ContextSheet.kt b/vlc-android/src/org/videolan/vlc/gui/dialogs/ContextSheet.kt
index 604b0dfab..cfee072f9 100644
--- a/vlc-android/src/org/videolan/vlc/gui/dialogs/ContextSheet.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/dialogs/ContextSheet.kt
@@ -31,10 +31,10 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_EXPANDED
import org.videolan.resources.*
+import org.videolan.resources.AndroidDevices
import org.videolan.tools.isStarted
import org.videolan.vlc.R
import org.videolan.vlc.databinding.ContextItemBinding
-import org.videolan.vlc.util.*
const val CTX_TITLE_KEY = "CTX_TITLE_KEY"
const val CTX_POSITION_KEY = "CTX_POSITION_KEY"
diff --git a/vlc-android/src/org/videolan/vlc/gui/dialogs/NetworkServerDialog.kt b/vlc-android/src/org/videolan/vlc/gui/dialogs/NetworkServerDialog.kt
index d4e80eb91..586287d33 100644
--- a/vlc-android/src/org/videolan/vlc/gui/dialogs/NetworkServerDialog.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/dialogs/NetworkServerDialog.kt
@@ -21,7 +21,7 @@ import org.videolan.vlc.R
import org.videolan.vlc.gui.DialogActivity
import org.videolan.vlc.gui.MainActivity
import org.videolan.vlc.repository.BrowserFavRepository
-import org.videolan.vlc.util.runIO
+import org.videolan.tools.runIO
class NetworkServerDialog : DialogFragment(), AdapterView.OnItemSelectedListener, TextWatcher, View.OnClickListener {
diff --git a/vlc-android/src/org/videolan/vlc/gui/dialogs/PlaybackSpeedDialog.kt b/vlc-android/src/org/videolan/vlc/gui/dialogs/PlaybackSpeedDialog.kt
index 86ab3a2c5..c886ddb37 100644
--- a/vlc-android/src/org/videolan/vlc/gui/dialogs/PlaybackSpeedDialog.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/dialogs/PlaybackSpeedDialog.kt
@@ -33,10 +33,10 @@ import androidx.core.content.ContextCompat
import androidx.lifecycle.Observer
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.ObsoleteCoroutinesApi
+import org.videolan.resources.formatRateString
import org.videolan.vlc.PlaybackService
import org.videolan.vlc.R
import org.videolan.vlc.gui.helpers.OnRepeatListener
-import org.videolan.vlc.util.formatRateString
@ObsoleteCoroutinesApi
@ExperimentalCoroutinesApi
diff --git a/vlc-android/src/org/videolan/vlc/gui/dialogs/SubtitleDownloadFragment.kt b/vlc-android/src/org/videolan/vlc/gui/dialogs/SubtitleDownloadFragment.kt
index 3537288b9..93b37ce5c 100644
--- a/vlc-android/src/org/videolan/vlc/gui/dialogs/SubtitleDownloadFragment.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/dialogs/SubtitleDownloadFragment.kt
@@ -12,11 +12,10 @@ import androidx.lifecycle.ViewModelProviders
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import org.videolan.vlc.R
-import org.videolan.vlc.VLCApplication
import org.videolan.vlc.databinding.SubtitleDownloadFragmentBinding
import org.videolan.vlc.gui.OnItemSelectListener
import org.videolan.vlc.gui.helpers.UiTools
-import org.videolan.vlc.util.AndroidDevices
+import org.videolan.resources.AndroidDevices
import org.videolan.tools.Settings
import org.videolan.vlc.viewmodels.SubtitlesModel
diff --git a/vlc-android/src/org/videolan/vlc/gui/dialogs/VlcLoginDialog.kt b/vlc-android/src/org/videolan/vlc/gui/dialogs/VlcLoginDialog.kt
index dee1d8782..c567dce5b 100644
--- a/vlc-android/src/org/videolan/vlc/gui/dialogs/VlcLoginDialog.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/dialogs/VlcLoginDialog.kt
@@ -25,18 +25,15 @@
package org.videolan.vlc.gui.dialogs
import android.content.Context
-import android.content.DialogInterface
-import android.content.Intent
import android.content.SharedPreferences
import android.os.Bundle
import android.view.View
import android.widget.EditText
-import androidx.localbroadcastmanager.content.LocalBroadcastManager
import org.videolan.libvlc.Dialog
import org.videolan.vlc.R
import org.videolan.vlc.databinding.VlcLoginDialogBinding
import org.videolan.vlc.gui.helpers.UiTools
-import org.videolan.vlc.util.AndroidDevices
+import org.videolan.resources.AndroidDevices
import org.videolan.tools.LOGIN_STORE
import org.videolan.tools.Settings
diff --git a/vlc-android/src/org/videolan/vlc/gui/helpers/AudioUtil.kt b/vlc-android/src/org/videolan/vlc/gui/helpers/AudioUtil.kt
index 20a22077a..8cb9b0b77 100644
--- a/vlc-android/src/org/videolan/vlc/gui/helpers/AudioUtil.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/helpers/AudioUtil.kt
@@ -38,9 +38,11 @@ import kotlinx.coroutines.ObsoleteCoroutinesApi
import org.videolan.libvlc.util.AndroidUtil
import org.videolan.medialibrary.interfaces.media.MediaWrapper
import org.videolan.resources.VLCCommonApplication
+import org.videolan.resources.AndroidDevices
+import org.videolan.tools.runIO
+import org.videolan.tools.runOnMainThread
import org.videolan.vlc.BuildConfig
import org.videolan.vlc.R
-import org.videolan.vlc.VLCApplication
import org.videolan.vlc.media.MediaUtils
import org.videolan.vlc.util.*
import java.io.*
diff --git a/vlc-android/src/org/videolan/vlc/gui/helpers/BitmapCache.kt b/vlc-android/src/org/videolan/vlc/gui/helpers/BitmapCache.kt
index bebe851a5..0c469bf52 100644
--- a/vlc-android/src/org/videolan/vlc/gui/helpers/BitmapCache.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/helpers/BitmapCache.kt
@@ -20,15 +20,13 @@
package org.videolan.vlc.gui.helpers
-import android.annotation.TargetApi
import android.content.res.Resources
import android.graphics.Bitmap
import android.graphics.BitmapFactory
-import android.os.Build
import android.util.Log
import androidx.collection.LruCache
+import org.videolan.resources.readableSize
import org.videolan.vlc.BuildConfig
-import org.videolan.vlc.util.readableSize
object BitmapCache {
private val mMemCache: LruCache
diff --git a/vlc-android/src/org/videolan/vlc/gui/helpers/ImageLoader.kt b/vlc-android/src/org/videolan/vlc/gui/helpers/ImageLoader.kt
index 66a3c1960..eefb85ef4 100644
--- a/vlc-android/src/org/videolan/vlc/gui/helpers/ImageLoader.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/helpers/ImageLoader.kt
@@ -39,7 +39,7 @@ import org.videolan.vlc.databinding.AudioBrowserCardItemBinding
import org.videolan.vlc.databinding.MediaBrowserTvItemBinding
import org.videolan.vlc.databinding.PlaylistItemBinding
import org.videolan.vlc.gui.tv.TvUtil
-import org.videolan.vlc.util.AppScope
+import org.videolan.tools.AppScope
import org.videolan.vlc.util.HttpImageLoader
import org.videolan.vlc.util.ThumbnailsProvider
import org.videolan.vlc.util.ThumbnailsProvider.obtainBitmap
diff --git a/vlc-android/src/org/videolan/vlc/gui/helpers/MedialibraryUtils.kt b/vlc-android/src/org/videolan/vlc/gui/helpers/MedialibraryUtils.kt
index 2a2f19cab..986feee92 100644
--- a/vlc-android/src/org/videolan/vlc/gui/helpers/MedialibraryUtils.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/helpers/MedialibraryUtils.kt
@@ -6,13 +6,9 @@ import android.content.Intent
import android.net.Uri
import androidx.core.content.ContextCompat
import org.videolan.medialibrary.interfaces.Medialibrary
-import org.videolan.resources.ACTION_DISCOVER
-import org.videolan.resources.ACTION_DISCOVER_DEVICE
-import org.videolan.resources.EXTRA_PATH
-import org.videolan.resources.VLCCommonApplication
+import org.videolan.resources.*
+import org.videolan.tools.runIO
import org.videolan.vlc.MediaParsingService
-import org.videolan.vlc.util.runIO
-import org.videolan.vlc.util.stripTrailingSlash
object MedialibraryUtils {
diff --git a/vlc-android/src/org/videolan/vlc/gui/helpers/NotificationHelper.kt b/vlc-android/src/org/videolan/vlc/gui/helpers/NotificationHelper.kt
index 6cf5ad905..4ccb30d00 100644
--- a/vlc-android/src/org/videolan/vlc/gui/helpers/NotificationHelper.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/helpers/NotificationHelper.kt
@@ -35,6 +35,7 @@ import androidx.core.app.NotificationCompat
import androidx.media.session.MediaButtonReceiver
import org.videolan.resources.ACTION_PAUSE_SCAN
import org.videolan.resources.ACTION_RESUME_SCAN
+import org.videolan.resources.AndroidDevices
import org.videolan.vlc.R
import org.videolan.vlc.StartActivity
import org.videolan.vlc.util.*
diff --git a/vlc-android/src/org/videolan/vlc/gui/helpers/PlayerOptionsDelegate.kt b/vlc-android/src/org/videolan/vlc/gui/helpers/PlayerOptionsDelegate.kt
index 7c7db4434..8aef27032 100644
--- a/vlc-android/src/org/videolan/vlc/gui/helpers/PlayerOptionsDelegate.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/helpers/PlayerOptionsDelegate.kt
@@ -25,6 +25,8 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import kotlinx.coroutines.*
import org.videolan.resources.*
+import org.videolan.resources.AndroidDevices
+import org.videolan.tools.AppScope
import org.videolan.tools.Settings
import org.videolan.vlc.PlaybackService
import org.videolan.vlc.R
diff --git a/vlc-android/src/org/videolan/vlc/gui/helpers/UiTools.kt b/vlc-android/src/org/videolan/vlc/gui/helpers/UiTools.kt
index 2e310e0ff..bef583412 100644
--- a/vlc-android/src/org/videolan/vlc/gui/helpers/UiTools.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/helpers/UiTools.kt
@@ -77,13 +77,13 @@ import org.videolan.tools.isStarted
import org.videolan.vlc.BuildConfig
import org.videolan.vlc.MediaParsingService
import org.videolan.vlc.R
-import org.videolan.vlc.VLCApplication
import org.videolan.vlc.gui.BaseActivity
import org.videolan.vlc.gui.browser.MediaBrowserFragment
import org.videolan.vlc.gui.dialogs.SavePlaylistDialog
import org.videolan.vlc.media.MediaUtils
import org.videolan.vlc.providers.medialibrary.MedialibraryProvider
-import org.videolan.vlc.util.*
+import org.videolan.vlc.util.FileUtils
+import org.videolan.vlc.util.LocalePair
import java.util.*
import kotlin.collections.ArrayList
import kotlin.collections.component1
diff --git a/vlc-android/src/org/videolan/vlc/gui/helpers/hf/StoragePermissionsDelegate.kt b/vlc-android/src/org/videolan/vlc/gui/helpers/hf/StoragePermissionsDelegate.kt
index 8864da81d..4a93935a4 100644
--- a/vlc-android/src/org/videolan/vlc/gui/helpers/hf/StoragePermissionsDelegate.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/helpers/hf/StoragePermissionsDelegate.kt
@@ -38,10 +38,12 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.videolan.libvlc.util.AndroidUtil
+import org.videolan.resources.AndroidDevices
import org.videolan.resources.EXTRA_FIRST_RUN
import org.videolan.resources.EXTRA_UPGRADE
import org.videolan.vlc.startMedialibrary
-import org.videolan.vlc.util.*
+import org.videolan.vlc.util.FileUtils
+import org.videolan.vlc.util.Permissions
import org.videolan.vlc.util.Permissions.canReadStorage
import videolan.org.commontools.LiveEvent
diff --git a/vlc-android/src/org/videolan/vlc/gui/helpers/hf/WriteExternalDelegate.kt b/vlc-android/src/org/videolan/vlc/gui/helpers/hf/WriteExternalDelegate.kt
index 5060b7093..c7e917887 100644
--- a/vlc-android/src/org/videolan/vlc/gui/helpers/hf/WriteExternalDelegate.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/helpers/hf/WriteExternalDelegate.kt
@@ -14,12 +14,11 @@ import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import kotlinx.coroutines.launch
import org.videolan.libvlc.util.AndroidUtil
+import org.videolan.resources.AndroidDevices
+import org.videolan.tools.AppScope
+import org.videolan.tools.Settings
import org.videolan.vlc.R
-import org.videolan.vlc.util.AndroidDevices
-import org.videolan.vlc.util.AppScope
import org.videolan.vlc.util.FileUtils
-import org.videolan.tools.Settings
-
class WriteExternalDelegate : BaseHeadlessFragment() {
private var storage : String? = null
diff --git a/vlc-android/src/org/videolan/vlc/gui/onboarding/OnboardingActivity.kt b/vlc-android/src/org/videolan/vlc/gui/onboarding/OnboardingActivity.kt
index 39fee6b8f..9e1ca9c2f 100644
--- a/vlc-android/src/org/videolan/vlc/gui/onboarding/OnboardingActivity.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/onboarding/OnboardingActivity.kt
@@ -17,10 +17,7 @@ import kotlinx.android.synthetic.main.activity_onboarding.*
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.ObsoleteCoroutinesApi
import kotlinx.coroutines.launch
-import org.videolan.resources.ACTIVITY_RESULT_PREFERENCES
-import org.videolan.resources.EXTRA_FIRST_RUN
-import org.videolan.resources.EXTRA_UPGRADE
-import org.videolan.resources.PREF_FIRST_RUN
+import org.videolan.resources.*
import org.videolan.tools.*
import org.videolan.vlc.BuildConfig
import org.videolan.vlc.MediaParsingService
diff --git a/vlc-android/src/org/videolan/vlc/gui/onboarding/OnboardingThemeFragment.kt b/vlc-android/src/org/videolan/vlc/gui/onboarding/OnboardingThemeFragment.kt
index e030a5e8d..6ecfb80a0 100644
--- a/vlc-android/src/org/videolan/vlc/gui/onboarding/OnboardingThemeFragment.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/onboarding/OnboardingThemeFragment.kt
@@ -11,7 +11,7 @@ import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import kotlinx.android.synthetic.main.onboarding_theme.*
import org.videolan.vlc.R
-import org.videolan.vlc.util.AndroidDevices
+import org.videolan.resources.AndroidDevices
class OnboardingThemeFragment : Fragment(), CompoundButton.OnCheckedChangeListener, View.OnClickListener {
diff --git a/vlc-android/src/org/videolan/vlc/gui/onboarding/OnboardingViewModel.kt b/vlc-android/src/org/videolan/vlc/gui/onboarding/OnboardingViewModel.kt
index caf12deaf..907726a9a 100644
--- a/vlc-android/src/org/videolan/vlc/gui/onboarding/OnboardingViewModel.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/onboarding/OnboardingViewModel.kt
@@ -5,10 +5,9 @@ import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProviders
-import org.videolan.vlc.util.AndroidDevices
+import org.videolan.resources.AndroidDevices
-
-class OnboardingViewModel() : ViewModel() {
+class OnboardingViewModel : ViewModel() {
var scanStorages = true
var customizeMediaFolders = false
var permissionGranted = false
diff --git a/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesAdvanced.kt b/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesAdvanced.kt
index 3c1f8bb8e..e9a67c70f 100644
--- a/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesAdvanced.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesAdvanced.kt
@@ -35,12 +35,12 @@ import androidx.preference.EditTextPreference
import androidx.preference.Preference
import kotlinx.coroutines.*
import org.videolan.medialibrary.interfaces.Medialibrary
+import org.videolan.resources.AndroidDevices
import org.videolan.vlc.BuildConfig
import org.videolan.vlc.R
import org.videolan.vlc.gui.DebugLogActivity
import org.videolan.vlc.gui.helpers.UiTools
import org.videolan.vlc.gui.helpers.hf.StoragePermissionsDelegate.Companion.getWritePermission
-import org.videolan.vlc.util.AndroidDevices
import org.videolan.vlc.util.FileUtils
import org.videolan.vlc.util.VLCInstance
import java.io.File
diff --git a/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesAudio.kt b/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesAudio.kt
index f9c4b79ff..db3ec5d91 100644
--- a/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesAudio.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesAudio.kt
@@ -33,7 +33,7 @@ import org.videolan.libvlc.util.AndroidUtil
import org.videolan.libvlc.util.HWDecoderUtil
import org.videolan.vlc.R
import org.videolan.tools.AUDIO_DUCKING
-import org.videolan.vlc.util.AndroidDevices
+import org.videolan.resources.AndroidDevices
import org.videolan.tools.RESUME_PLAYBACK
import org.videolan.vlc.util.VLCInstance
diff --git a/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesUi.kt b/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesUi.kt
index 455ff5dc3..7e5c6ff82 100644
--- a/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesUi.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesUi.kt
@@ -35,11 +35,10 @@ import androidx.preference.TwoStatePreference
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.ObsoleteCoroutinesApi
import org.videolan.medialibrary.interfaces.Medialibrary
+import org.videolan.resources.AndroidDevices
import org.videolan.tools.*
import org.videolan.vlc.R
import org.videolan.vlc.gui.helpers.UiTools
-import org.videolan.vlc.util.*
-
@ObsoleteCoroutinesApi
@ExperimentalCoroutinesApi
diff --git a/vlc-android/src/org/videolan/vlc/gui/tv/MainTvFragment.kt b/vlc-android/src/org/videolan/vlc/gui/tv/MainTvFragment.kt
index dfe45aa19..d3107e6a3 100644
--- a/vlc-android/src/org/videolan/vlc/gui/tv/MainTvFragment.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/tv/MainTvFragment.kt
@@ -38,6 +38,7 @@ import org.videolan.medialibrary.interfaces.Medialibrary
import org.videolan.medialibrary.interfaces.media.MediaWrapper
import org.videolan.medialibrary.media.DummyItem
import org.videolan.resources.*
+import org.videolan.resources.AndroidDevices
import org.videolan.vlc.BuildConfig
import org.videolan.vlc.R
import org.videolan.vlc.RecommendationsService
@@ -46,7 +47,6 @@ import org.videolan.vlc.gui.tv.TvUtil.metadataDiffCallback
import org.videolan.vlc.gui.tv.audioplayer.AudioPlayerActivity
import org.videolan.vlc.gui.tv.browser.VerticalGridActivity
import org.videolan.vlc.reloadLibrary
-import org.videolan.vlc.util.*
import org.videolan.vlc.viewmodels.tv.MainTvModel
import org.videolan.vlc.viewmodels.tv.MainTvModel.Companion.getMainTvModel
diff --git a/vlc-android/src/org/videolan/vlc/gui/tv/audioplayer/AudioPlayerActivity.kt b/vlc-android/src/org/videolan/vlc/gui/tv/audioplayer/AudioPlayerActivity.kt
index 760773676..984874a59 100644
--- a/vlc-android/src/org/videolan/vlc/gui/tv/audioplayer/AudioPlayerActivity.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/tv/audioplayer/AudioPlayerActivity.kt
@@ -48,7 +48,7 @@ import org.videolan.vlc.gui.helpers.MediaComparators
import org.videolan.vlc.gui.helpers.UiTools
import org.videolan.vlc.gui.tv.browser.BaseTvActivity
import org.videolan.vlc.media.MediaUtils
-import org.videolan.vlc.util.AndroidDevices
+import org.videolan.resources.AndroidDevices
import org.videolan.tools.Settings
import org.videolan.vlc.util.getScreenWidth
import org.videolan.vlc.viewmodels.PlayerState
diff --git a/vlc-android/src/org/videolan/vlc/gui/tv/preferences/PreferencesAdvanced.kt b/vlc-android/src/org/videolan/vlc/gui/tv/preferences/PreferencesAdvanced.kt
index 93f3b95df..7ef09a377 100644
--- a/vlc-android/src/org/videolan/vlc/gui/tv/preferences/PreferencesAdvanced.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/tv/preferences/PreferencesAdvanced.kt
@@ -37,12 +37,12 @@ import androidx.preference.EditTextPreference
import androidx.preference.Preference
import kotlinx.coroutines.*
import org.videolan.medialibrary.interfaces.Medialibrary
+import org.videolan.resources.AndroidDevices
import org.videolan.vlc.BuildConfig
import org.videolan.vlc.R
import org.videolan.vlc.gui.DebugLogActivity
import org.videolan.vlc.gui.helpers.UiTools
import org.videolan.vlc.gui.helpers.hf.StoragePermissionsDelegate.Companion.getWritePermission
-import org.videolan.vlc.util.AndroidDevices
import org.videolan.vlc.util.FileUtils
import org.videolan.vlc.util.VLCInstance
import java.io.File
diff --git a/vlc-android/src/org/videolan/vlc/gui/tv/preferences/PreferencesFragment.kt b/vlc-android/src/org/videolan/vlc/gui/tv/preferences/PreferencesFragment.kt
index c2e9c00c2..786af2ea3 100644
--- a/vlc-android/src/org/videolan/vlc/gui/tv/preferences/PreferencesFragment.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/tv/preferences/PreferencesFragment.kt
@@ -33,6 +33,7 @@ import androidx.preference.Preference
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.ObsoleteCoroutinesApi
import org.videolan.medialibrary.interfaces.Medialibrary
+import org.videolan.resources.AndroidDevices
import org.videolan.tools.KEY_VIDEO_APP_SWITCH
import org.videolan.tools.RESULT_RESTART
import org.videolan.tools.SCREEN_ORIENTATION
diff --git a/vlc-android/src/org/videolan/vlc/gui/tv/preferences/PreferencesUi.kt b/vlc-android/src/org/videolan/vlc/gui/tv/preferences/PreferencesUi.kt
index 3a8f68f8f..5edb39bf0 100644
--- a/vlc-android/src/org/videolan/vlc/gui/tv/preferences/PreferencesUi.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/tv/preferences/PreferencesUi.kt
@@ -32,11 +32,10 @@ import androidx.preference.Preference
import androidx.preference.TwoStatePreference
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.ObsoleteCoroutinesApi
+import org.videolan.resources.AndroidDevices
import org.videolan.tools.*
import org.videolan.vlc.R
import org.videolan.vlc.gui.helpers.UiTools
-import org.videolan.vlc.util.*
-
@ExperimentalCoroutinesApi
@ObsoleteCoroutinesApi
diff --git a/vlc-android/src/org/videolan/vlc/gui/tv/preferences/PreferencesVideo.kt b/vlc-android/src/org/videolan/vlc/gui/tv/preferences/PreferencesVideo.kt
index f11d6d5d8..f078e137e 100644
--- a/vlc-android/src/org/videolan/vlc/gui/tv/preferences/PreferencesVideo.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/tv/preferences/PreferencesVideo.kt
@@ -28,9 +28,9 @@ import android.os.Bundle
import androidx.preference.Preference
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.ObsoleteCoroutinesApi
+import org.videolan.resources.AndroidDevices
import org.videolan.tools.*
import org.videolan.vlc.R
-import org.videolan.vlc.util.*
@ExperimentalCoroutinesApi
@ObsoleteCoroutinesApi
diff --git a/vlc-android/src/org/videolan/vlc/gui/video/MediaInfoAdapter.kt b/vlc-android/src/org/videolan/vlc/gui/video/MediaInfoAdapter.kt
index 149a3fee3..849d57996 100644
--- a/vlc-android/src/org/videolan/vlc/gui/video/MediaInfoAdapter.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/video/MediaInfoAdapter.kt
@@ -27,10 +27,9 @@ import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
-import org.videolan.libvlc.Media
import org.videolan.libvlc.interfaces.IMedia
+import org.videolan.resources.readableSize
import org.videolan.vlc.R
-import org.videolan.vlc.util.readableSize
class MediaInfoAdapter : RecyclerView.Adapter() {
private lateinit var inflater: LayoutInflater
diff --git a/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.kt b/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.kt
index 1f600fe27..9dd9748f2 100644
--- a/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.kt
@@ -86,7 +86,6 @@ import org.videolan.tools.*
import org.videolan.vlc.*
import org.videolan.vlc.BuildConfig
import org.videolan.vlc.R
-import org.videolan.vlc.database.models.ExternalSub
import org.videolan.vlc.databinding.PlayerHudBinding
import org.videolan.vlc.databinding.PlayerHudRightBinding
import org.videolan.vlc.gui.MainActivity
@@ -221,8 +220,8 @@ open class VideoPlayerActivity : AppCompatActivity(), IPlaybackSettingsControlle
protected var isBenchmark = false
- private val addedExternalSubs = ArrayList()
- private var downloadedSubtitleLiveData: LiveData>? = null
+ private val addedExternalSubs = ArrayList()
+ private var downloadedSubtitleLiveData: LiveData>? = null
private var previousMediaPath: String? = null
private val isInteractive: Boolean
@@ -345,7 +344,7 @@ open class VideoPlayerActivity : AppCompatActivity(), IPlaybackSettingsControlle
private var enableSubs = true
- private val downloadedSubtitleObserver = Observer> { externalSubs ->
+ private val downloadedSubtitleObserver = Observer> { externalSubs ->
for (externalSub in externalSubs!!) {
if (!addedExternalSubs.contains(externalSub)) {
service?.addSubtitleTrack(externalSub.subtitlePath, currentSpuTrack == -2)
diff --git a/vlc-android/src/org/videolan/vlc/gui/video/VideoTouchDelegate.kt b/vlc-android/src/org/videolan/vlc/gui/video/VideoTouchDelegate.kt
index d038e69ab..7e510738b 100644
--- a/vlc-android/src/org/videolan/vlc/gui/video/VideoTouchDelegate.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/video/VideoTouchDelegate.kt
@@ -27,8 +27,8 @@ import org.videolan.medialibrary.Tools
import org.videolan.tools.setVisible
import org.videolan.vlc.BuildConfig
import org.videolan.vlc.R
-import org.videolan.vlc.util.AndroidDevices
-import org.videolan.vlc.util.AndroidDevices.isTv
+import org.videolan.resources.AndroidDevices
+import org.videolan.resources.AndroidDevices.isTv
import kotlin.math.abs
import kotlin.math.pow
import kotlin.math.roundToInt
diff --git a/vlc-android/src/org/videolan/vlc/gui/video/benchmark/BenchActivity.kt b/vlc-android/src/org/videolan/vlc/gui/video/benchmark/BenchActivity.kt
index 3c78ff11f..bc3a57568 100644
--- a/vlc-android/src/org/videolan/vlc/gui/video/benchmark/BenchActivity.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/video/benchmark/BenchActivity.kt
@@ -47,7 +47,7 @@ import kotlinx.coroutines.ObsoleteCoroutinesApi
import kotlinx.coroutines.launch
import org.videolan.libvlc.MediaPlayer
import org.videolan.vlc.PlaybackService
-import org.videolan.vlc.util.AppScope
+import org.videolan.tools.AppScope
import org.videolan.tools.Settings
import org.videolan.vlc.util.VLCInstance
import java.io.*
diff --git a/vlc-android/src/org/videolan/vlc/media/MediaUtils.kt b/vlc-android/src/org/videolan/vlc/media/MediaUtils.kt
index 625d14d4c..db220e976 100644
--- a/vlc-android/src/org/videolan/vlc/media/MediaUtils.kt
+++ b/vlc-android/src/org/videolan/vlc/media/MediaUtils.kt
@@ -27,6 +27,7 @@ import org.videolan.medialibrary.interfaces.media.*
import org.videolan.medialibrary.media.MediaLibraryItem
import org.videolan.resources.MEDIALIBRARY_PAGE_SIZE
import org.videolan.resources.VLCCommonApplication
+import org.videolan.tools.AppScope
import org.videolan.vlc.PlaybackService
import org.videolan.vlc.R
import org.videolan.vlc.gui.DialogActivity
diff --git a/vlc-android/src/org/videolan/vlc/media/PlaylistManager.kt b/vlc-android/src/org/videolan/vlc/media/PlaylistManager.kt
index 61157a849..2b44e9311 100644
--- a/vlc-android/src/org/videolan/vlc/media/PlaylistManager.kt
+++ b/vlc-android/src/org/videolan/vlc/media/PlaylistManager.kt
@@ -21,15 +21,11 @@ import org.videolan.libvlc.util.AndroidUtil
import org.videolan.medialibrary.MLServiceLocator
import org.videolan.medialibrary.interfaces.Medialibrary
import org.videolan.medialibrary.interfaces.media.MediaWrapper
-import org.videolan.resources.EXIT_PLAYER
-import org.videolan.resources.PLAYLIST_TYPE_AUDIO
-import org.videolan.resources.PLAY_FROM_SERVICE
-import org.videolan.resources.VLCCommonApplication
+import org.videolan.resources.*
import org.videolan.tools.*
import org.videolan.vlc.BuildConfig
import org.videolan.vlc.PlaybackService
import org.videolan.vlc.R
-import org.videolan.vlc.VLCApplication
import org.videolan.vlc.gui.video.VideoPlayerActivity
import org.videolan.vlc.util.*
import org.videolan.vlc.util.FileUtils
diff --git a/vlc-android/src/org/videolan/vlc/providers/BrowserProvider.kt b/vlc-android/src/org/videolan/vlc/providers/BrowserProvider.kt
index 9a7b62d84..69a8d90e3 100644
--- a/vlc-android/src/org/videolan/vlc/providers/BrowserProvider.kt
+++ b/vlc-android/src/org/videolan/vlc/providers/BrowserProvider.kt
@@ -40,6 +40,7 @@ import org.videolan.medialibrary.interfaces.Medialibrary
import org.videolan.medialibrary.interfaces.media.MediaWrapper
import org.videolan.medialibrary.media.MediaLibraryItem
import org.videolan.medialibrary.media.Storage
+import org.videolan.tools.AppScope
import org.videolan.tools.Settings
import org.videolan.vlc.R
import org.videolan.vlc.util.*
diff --git a/vlc-android/src/org/videolan/vlc/providers/FileBrowserProvider.kt b/vlc-android/src/org/videolan/vlc/providers/FileBrowserProvider.kt
index 872c61c85..f7c7601c6 100644
--- a/vlc-android/src/org/videolan/vlc/providers/FileBrowserProvider.kt
+++ b/vlc-android/src/org/videolan/vlc/providers/FileBrowserProvider.kt
@@ -37,12 +37,11 @@ import org.videolan.medialibrary.media.DummyItem
import org.videolan.medialibrary.media.MediaLibraryItem
import org.videolan.vlc.ExternalMonitor
import org.videolan.vlc.R
-import org.videolan.vlc.database.models.BrowserFav
import org.videolan.vlc.gui.helpers.hf.StoragePermissionsDelegate
import org.videolan.vlc.gui.helpers.hf.getDocumentFiles
import org.videolan.vlc.repository.BrowserFavRepository
import org.videolan.vlc.repository.DirectoryRepository
-import org.videolan.vlc.util.AndroidDevices
+import org.videolan.resources.AndroidDevices
import org.videolan.vlc.util.FileUtils
import org.videolan.vlc.util.LiveDataset
import org.videolan.vlc.util.convertFavorites
@@ -64,7 +63,8 @@ open class FileBrowserProvider(
private val showFavorites = url == null && !filePicker && this !is StorageProvider
private val favorites = if (url == null && !filePicker) BrowserFavRepository.getInstance(context).localFavorites else null
- private val favoritesObserver by lazy { Observer> {
+ private val favoritesObserver by lazy {
+ Observer> {
val favs = convertFavorites(it)
val data = dataset.value.toMutableList()
if (data.size > 1) {
diff --git a/vlc-android/src/org/videolan/vlc/providers/StorageProvider.kt b/vlc-android/src/org/videolan/vlc/providers/StorageProvider.kt
index da8e12fc2..4e82695ab 100644
--- a/vlc-android/src/org/videolan/vlc/providers/StorageProvider.kt
+++ b/vlc-android/src/org/videolan/vlc/providers/StorageProvider.kt
@@ -28,7 +28,7 @@ import org.videolan.medialibrary.media.MediaLibraryItem
import org.videolan.medialibrary.media.Storage
import org.videolan.vlc.R
import org.videolan.vlc.repository.DirectoryRepository
-import org.videolan.vlc.util.AndroidDevices
+import org.videolan.resources.AndroidDevices
import org.videolan.vlc.util.LiveDataset
import java.io.File
import java.util.*
diff --git a/vlc-android/src/org/videolan/vlc/repository/BrowserFavRepository.kt b/vlc-android/src/org/videolan/vlc/repository/BrowserFavRepository.kt
index 63e03197a..04dd23ae8 100644
--- a/vlc-android/src/org/videolan/vlc/repository/BrowserFavRepository.kt
+++ b/vlc-android/src/org/videolan/vlc/repository/BrowserFavRepository.kt
@@ -20,21 +20,20 @@
package org.videolan.vlc.repository
-import androidx.lifecycle.MediatorLiveData
import android.content.Context
import android.net.Uri
import androidx.annotation.WorkerThread
+import androidx.lifecycle.MediatorLiveData
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.videolan.medialibrary.interfaces.media.MediaWrapper
+import org.videolan.resources.TYPE_LOCAL_FAV
+import org.videolan.resources.TYPE_NETWORK_FAV
import org.videolan.tools.IOScopedObject
import org.videolan.tools.SingletonHolder
import org.videolan.vlc.ExternalMonitor
import org.videolan.vlc.database.BrowserFavDao
import org.videolan.vlc.database.MediaDatabase
-import org.videolan.vlc.database.models.BrowserFav
-import org.videolan.resources.TYPE_LOCAL_FAV
-import org.videolan.resources.TYPE_NETWORK_FAV
import org.videolan.vlc.util.convertFavorites
import java.util.*
@@ -48,11 +47,11 @@ class BrowserFavRepository(private val browserFavDao: BrowserFavDao) : IOScopedO
val localFavorites by lazy { browserFavDao.getAllLocalFavs() }
fun addNetworkFavItem(uri: Uri, title: String, iconUrl: String?) = launch {
- browserFavDao.insert(BrowserFav(uri, TYPE_NETWORK_FAV, title, iconUrl))
+ browserFavDao.insert(org.videolan.vlc.mediadb.models.BrowserFav(uri, TYPE_NETWORK_FAV, title, iconUrl))
}
fun addLocalFavItem(uri: Uri, title: String, iconUrl: String? = null) = launch {
- browserFavDao.insert(BrowserFav(uri, TYPE_LOCAL_FAV, title, iconUrl))
+ browserFavDao.insert(org.videolan.vlc.mediadb.models.BrowserFav(uri, TYPE_LOCAL_FAV, title, iconUrl))
}
val networkFavorites by lazy {
diff --git a/vlc-android/src/org/videolan/vlc/repository/DirectoryRepository.kt b/vlc-android/src/org/videolan/vlc/repository/DirectoryRepository.kt
index d93b6623a..59c54bc73 100644
--- a/vlc-android/src/org/videolan/vlc/repository/DirectoryRepository.kt
+++ b/vlc-android/src/org/videolan/vlc/repository/DirectoryRepository.kt
@@ -13,27 +13,26 @@ import org.videolan.tools.SingletonHolder
import org.videolan.vlc.R
import org.videolan.vlc.database.CustomDirectoryDao
import org.videolan.vlc.database.MediaDatabase
-import org.videolan.vlc.database.models.CustomDirectory
-import org.videolan.vlc.util.AndroidDevices
-import org.videolan.vlc.util.AndroidDevices.EXTERNAL_PUBLIC_DIRECTORY
+import org.videolan.resources.AndroidDevices
+import org.videolan.resources.AndroidDevices.EXTERNAL_PUBLIC_DIRECTORY
import org.videolan.vlc.util.FileUtils
import java.io.File
class DirectoryRepository (private val customDirectoryDao: CustomDirectoryDao) : IOScopedObject() {
fun addCustomDirectory(path: String): Job = launch {
- customDirectoryDao.insert(CustomDirectory(path))
+ customDirectoryDao.insert(org.videolan.vlc.mediadb.models.CustomDirectory(path))
}
suspend fun getCustomDirectories() = withContext(coroutineContext) {
try {
customDirectoryDao.getAll()
} catch (e: Exception) {
- emptyList()
+ emptyList()
}
}
- fun deleteCustomDirectory(path: String) = launch { customDirectoryDao.delete(CustomDirectory(path)) }
+ fun deleteCustomDirectory(path: String) = launch { customDirectoryDao.delete(org.videolan.vlc.mediadb.models.CustomDirectory(path)) }
suspend fun customDirectoryExists(path: String) = withContext(coroutineContext) { customDirectoryDao.get(path).isNotEmpty() }
diff --git a/vlc-android/src/org/videolan/vlc/repository/ExternalSubRepository.kt b/vlc-android/src/org/videolan/vlc/repository/ExternalSubRepository.kt
index 3a219adbf..3d6a2bf08 100644
--- a/vlc-android/src/org/videolan/vlc/repository/ExternalSubRepository.kt
+++ b/vlc-android/src/org/videolan/vlc/repository/ExternalSubRepository.kt
@@ -31,7 +31,7 @@ import kotlinx.coroutines.launch
import org.videolan.tools.SingletonHolder
import org.videolan.vlc.database.ExternalSubDao
import org.videolan.vlc.database.MediaDatabase
-import org.videolan.vlc.database.models.ExternalSub
+import org.videolan.vlc.mediadb.models.ExternalSub
import org.videolan.vlc.gui.dialogs.State
import org.videolan.vlc.gui.dialogs.SubtitleItem
import org.videolan.vlc.util.CoroutineContextProvider
@@ -46,13 +46,13 @@ class ExternalSubRepository(private val externalSubDao: ExternalSubDao, private
get() = _downloadingSubtitles as LiveData