diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt index 9f029926..c770efe4 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt @@ -29,7 +29,6 @@ import androidx.preference.PreferenceManager import com.google.android.material.navigation.NavigationView import org.koin.android.ext.android.inject import org.koin.androidx.viewmodel.ext.android.viewModel -import org.koin.java.KoinJavaComponent.inject import org.moire.ultrasonic.R import org.moire.ultrasonic.data.ActiveServerProvider import org.moire.ultrasonic.data.ActiveServerProvider.Companion.isOffline @@ -151,7 +150,12 @@ class NavigationActivity : AppCompatActivity() { showWelcomeScreen = showWelcomeScreen and !areServersMigrated loadSettings() - showInfoDialog(showWelcomeScreen) + + // This is a first run with only the demo entry inside the database + // We set the active server to the demo one and show the welcome dialog + if (showWelcomeScreen) { + showWelcomeDialog() + } nowPlayingEventListener = object : NowPlayingEventListener { override fun onDismissNowPlaying() { @@ -313,19 +317,27 @@ class NavigationActivity : AppCompatActivity() { finish() } - private fun showInfoDialog(show: Boolean) { + private fun showWelcomeDialog() { if (!infoDialogDisplayed) { infoDialogDisplayed = true - if (show) { - AlertDialog.Builder(this) - .setIcon(android.R.drawable.ic_dialog_info) - .setTitle(R.string.main_welcome_title) - .setMessage(R.string.main_welcome_text) - .setPositiveButton(R.string.common_ok) { dialog, _ -> - dialog.dismiss() - findNavController(R.id.nav_host_fragment).navigate(R.id.settingsFragment) - }.show() - } + + AlertDialog.Builder(this) + .setIcon(android.R.drawable.ic_dialog_info) + .setTitle(R.string.main_welcome_title) + .setMessage(R.string.main_welcome_text_demo) + .setNegativeButton(R.string.main_welcome_cancel) { dialog, _ -> + // Go to the settings screen + dialog.dismiss() + findNavController(R.id.nav_host_fragment).navigate(R.id.settingsFragment) + } + .setPositiveButton(R.string.common_ok) { dialog, _ -> + // Add the demo server + val activeServerProvider: ActiveServerProvider by inject() + val demoIndex = serverSettingsModel.addDemoServer() + activeServerProvider.setActiveServerByIndex(demoIndex) + findNavController(R.id.nav_host_fragment).navigate(R.id.mainFragment) + dialog.dismiss() + }.show() } } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/AppPermanentStorageModule.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/AppPermanentStorageModule.kt index 1b430ae1..0758ade8 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/AppPermanentStorageModule.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/AppPermanentStorageModule.kt @@ -12,6 +12,7 @@ import org.moire.ultrasonic.fragment.ServerSettingsModel import org.moire.ultrasonic.util.Util const val SP_NAME = "Default_SP" +const val DB_FILENAME = "ultrasonic-database" /** * This Koin module contains registration of classes related to permanent storage @@ -23,11 +24,10 @@ val appPermanentStorage = module { Room.databaseBuilder( androidContext(), AppDatabase::class.java, - "ultrasonic-database" + DB_FILENAME ) .addMigrations(MIGRATION_1_2) .addMigrations(MIGRATION_2_3) - .fallbackToDestructiveMigrationOnDowngrade() .build() } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/ServerSettingsModel.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/ServerSettingsModel.kt index af33133c..ad8499bf 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/ServerSettingsModel.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/ServerSettingsModel.kt @@ -11,6 +11,8 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking +import org.moire.ultrasonic.R +import org.moire.ultrasonic.app.UApp import org.moire.ultrasonic.data.ActiveServerProvider import org.moire.ultrasonic.data.ServerSetting import org.moire.ultrasonic.data.ServerSettingDao @@ -25,20 +27,6 @@ class ServerSettingsModel( application: Application ) : AndroidViewModel(application) { - companion object { - private const val PREFERENCES_KEY_SERVER_MIGRATED = "serverMigrated" - // These constants were removed from Constants.java as they are deprecated and only used here - private const val PREFERENCES_KEY_JUKEBOX_BY_DEFAULT = "jukeboxEnabled" - private const val PREFERENCES_KEY_SERVER_NAME = "serverName" - private const val PREFERENCES_KEY_SERVER_URL = "serverUrl" - private const val PREFERENCES_KEY_ACTIVE_SERVERS = "activeServers" - private const val PREFERENCES_KEY_USERNAME = "username" - private const val PREFERENCES_KEY_PASSWORD = "password" - private const val PREFERENCES_KEY_ALLOW_SELF_SIGNED_CERTIFICATE = "allowSSCertificate" - private const val PREFERENCES_KEY_LDAP_SUPPORT = "enableLdapSupport" - private const val PREFERENCES_KEY_MUSIC_FOLDER_ID = "musicFolderId" - } - private val appScope = CoroutineScope(SupervisorJob() + Dispatchers.IO) /** @@ -67,8 +55,8 @@ class ServerSettingsModel( repository.insert(newServerSetting) index++ Timber.i( - "Imported server from Preferences to Database:" + - " ${newServerSetting.name}" + "Imported server from Preferences to Database: %s", + newServerSetting.name ) } } @@ -187,6 +175,23 @@ class ServerSettingsModel( } } + /** + * Inserts a new Setting into the database + * @return The id of the demo server + */ + fun addDemoServer(): Int { + val demo = DEMO_SERVER_CONFIG.copy() + + runBlocking { + demo.index = (repository.count() ?: 0) + 1 + demo.id = (repository.getMaxId() ?: 0) + 1 + repository.insert(demo) + Timber.d("Added demo server") + } + + return demo.id + } + /** * Reads up a Server Setting stored in the obsolete Preferences */ @@ -262,4 +267,36 @@ class ServerSettingsModel( editor.putBoolean(PREFERENCES_KEY_SERVER_MIGRATED + preferenceId, true) editor.apply() } + + companion object { + private const val PREFERENCES_KEY_SERVER_MIGRATED = "serverMigrated" + // These constants were removed from Constants.java as they are deprecated and only used here + private const val PREFERENCES_KEY_JUKEBOX_BY_DEFAULT = "jukeboxEnabled" + private const val PREFERENCES_KEY_SERVER_NAME = "serverName" + private const val PREFERENCES_KEY_SERVER_URL = "serverUrl" + private const val PREFERENCES_KEY_ACTIVE_SERVERS = "activeServers" + private const val PREFERENCES_KEY_USERNAME = "username" + private const val PREFERENCES_KEY_PASSWORD = "password" + private const val PREFERENCES_KEY_ALLOW_SELF_SIGNED_CERTIFICATE = "allowSSCertificate" + private const val PREFERENCES_KEY_LDAP_SUPPORT = "enableLdapSupport" + private const val PREFERENCES_KEY_MUSIC_FOLDER_ID = "musicFolderId" + + private val DEMO_SERVER_CONFIG = ServerSetting( + id = 0, + index = 0, + name = UApp.applicationContext().getString(R.string.server_menu_demo), + url = "https://demo.ampache.dev", + userName = "ultrasonic_demo", + password = "W7DumQ3ZUR89Se3", + jukeboxByDefault = false, + allowSelfSignedCertificate = false, + ldapSupport = false, + musicFolderId = null, + minimumApiVersion = "1.13.0", + chatSupport = true, + bookmarkSupport = true, + shareSupport = true, + podcastSupport = true + ) + } } diff --git a/ultrasonic/src/main/res/values-cs/strings.xml b/ultrasonic/src/main/res/values-cs/strings.xml index 55ba92ac..cf782340 100644 --- a/ultrasonic/src/main/res/values-cs/strings.xml +++ b/ultrasonic/src/main/res/values-cs/strings.xml @@ -101,7 +101,6 @@ Označené hvězdičkou Skladby Videa - Vítejte v aplikaci Ultrasonic! Aplikace není ještě nakonfigurována. Poté co nastavíte svůj osobní server (dostupný na subsonic.org), vyberte Správa serverů v Nastavení a připojte aplikaci. Vítejte! O aplikaci Další diff --git a/ultrasonic/src/main/res/values-de/strings.xml b/ultrasonic/src/main/res/values-de/strings.xml index aab075fe..cd69a241 100644 --- a/ultrasonic/src/main/res/values-de/strings.xml +++ b/ultrasonic/src/main/res/values-de/strings.xml @@ -100,7 +100,6 @@ Mit Stern Titel Filme - Willkommen bei Ultrasonic! Die App ist zurzeit unkonfiguriert. Nachdem du deinen Server konfiguriert hast (siehe subsonic.org), bitte Server hinzufügen in den Einstellungen klicken um die Verbindun herzustellen. Willkommen Über Allgemein diff --git a/ultrasonic/src/main/res/values-es/strings.xml b/ultrasonic/src/main/res/values-es/strings.xml index 35192166..14d90c1c 100644 --- a/ultrasonic/src/main/res/values-es/strings.xml +++ b/ultrasonic/src/main/res/values-es/strings.xml @@ -111,7 +111,6 @@ Me gusta Canciones Vídeos - Te damos la bienvenida a Ultrasonic! La aplicación no está configurada actualmente. Después de que hayas configurado tu servidor personal (disponible desde subsonic.org), por favor haz click en Administrar servidores en Configuración para conectarte con él. ¡Saludos! Acerca de Común diff --git a/ultrasonic/src/main/res/values-fr/strings.xml b/ultrasonic/src/main/res/values-fr/strings.xml index 5bc3b7b7..94a63970 100644 --- a/ultrasonic/src/main/res/values-fr/strings.xml +++ b/ultrasonic/src/main/res/values-fr/strings.xml @@ -101,7 +101,6 @@ Favoris Titres Vidéos - Bienvenue dans Ultrasonic ! L\'application n\'est pas configurée. Après avoir configuré votre serveur personnel (disponible à partir de subsonic.org), veuillez accéder aux Paramètres et modifier la configuration pour vous y connecter. Bienvenue ! À propos Général diff --git a/ultrasonic/src/main/res/values-hu/strings.xml b/ultrasonic/src/main/res/values-hu/strings.xml index 5476f2c3..41490785 100644 --- a/ultrasonic/src/main/res/values-hu/strings.xml +++ b/ultrasonic/src/main/res/values-hu/strings.xml @@ -111,7 +111,6 @@ Csillaggal megjelölt Dalok Videók - Üdvözli az Ultrasonic! Az alkalmazás még nincs beállítva. Miután konfigurálta saját kiszolgálóját (elérhető: subsonic.org), húzza balról jobbra az oldalsávot, lépjen be a Beállítások menüpontba, és adja meg csatlakozási adatokat! Üdvözlet! Névjegy Általános diff --git a/ultrasonic/src/main/res/values-nl/strings.xml b/ultrasonic/src/main/res/values-nl/strings.xml index 9cd9fd00..8d5ee1a3 100644 --- a/ultrasonic/src/main/res/values-nl/strings.xml +++ b/ultrasonic/src/main/res/values-nl/strings.xml @@ -111,7 +111,6 @@ Favorieten Nummers Video\'s - Welkom bij Ultrasonic! De app is nog niet ingesteld. Nadat je je persoonlijke server hebt opgezet (beschikbaar op subsonic.org), kun je naar de Instellingen gaan en drukken op Server toevoegen. Welkom! Over Algemeen diff --git a/ultrasonic/src/main/res/values-pl/strings.xml b/ultrasonic/src/main/res/values-pl/strings.xml index 4f7b15d1..1eee490b 100644 --- a/ultrasonic/src/main/res/values-pl/strings.xml +++ b/ultrasonic/src/main/res/values-pl/strings.xml @@ -100,7 +100,6 @@ Ulubione Utwory Klipy wideo - Witaj w Ultrasonic! Obecnie aplikacja nie jest skonfigurowana. Jeśli masz uruchomiony własny serwer (dostępny na subsonic.org), proszę wybrać Dodaj serwer w Ustawieniach aby się z nim połączyć. Witaj! O aplikacji Wspólne diff --git a/ultrasonic/src/main/res/values-pt-rBR/strings.xml b/ultrasonic/src/main/res/values-pt-rBR/strings.xml index 903d7b6a..e4a8bdbf 100644 --- a/ultrasonic/src/main/res/values-pt-rBR/strings.xml +++ b/ultrasonic/src/main/res/values-pt-rBR/strings.xml @@ -101,7 +101,6 @@ Favoritas Músicas Vídeos - Bem-vindo ao Ultrasonic! O aplicativo ainda não está configurado. Após configurar seu servidor pessoal (disponível em subsonic.org), clique em Adicionar Servidor em Configurações para a conexão. Bem-vindo! Sobre Comum diff --git a/ultrasonic/src/main/res/values-pt/strings.xml b/ultrasonic/src/main/res/values-pt/strings.xml index 8fb5bb12..f4919701 100644 --- a/ultrasonic/src/main/res/values-pt/strings.xml +++ b/ultrasonic/src/main/res/values-pt/strings.xml @@ -100,7 +100,6 @@ Favoritas Músicas Vídeos - Bem-vindo ao Ultrasonic! O aplicativo ainda não está configurado. Após configurar seu servidor pessoal (disponível em subsonic.org), clique em Adicionar Servidor em Configurações para a conexão. Bem-vindo! Sobre Comum diff --git a/ultrasonic/src/main/res/values/strings.xml b/ultrasonic/src/main/res/values/strings.xml index 62556828..3ed173d2 100644 --- a/ultrasonic/src/main/res/values/strings.xml +++ b/ultrasonic/src/main/res/values/strings.xml @@ -1,5 +1,5 @@ - + Loading… A network error occurred. Please check the server address or try again later. @@ -111,8 +111,9 @@ Starred Songs Videos - Welcome to Ultrasonic! The app is currently not configured. After you\'ve set up your personal server (available from subsonic.org), please click Manage Servers in Settings to connect to it. - Welcome! + To use Ultrasonic with your own music you will need your own server. \n\n➤ In case you want to try out the app first, it can add a demo server now. \n\n➤ Otherwise you can configure your server in the settings. + Welcome to Ultrasonic! + Take me to the settings About Common Deleted playlist %s @@ -348,7 +349,7 @@ 0.00 GB 0 KB 0.00 MB - -:-- + -:-- 0:00 MX Player is not installed. Get it for free on Play Store, or change video settings. Get MX Player @@ -449,6 +450,7 @@ Authentication Advanced settings One or more features were disabled because the server doesn\'t support them.\nYou can run this test again anytime. + Demo Server 1 song diff --git a/ultrasonic/src/main/res/xml/settings.xml b/ultrasonic/src/main/res/xml/settings.xml index ce724706..bb25965a 100644 --- a/ultrasonic/src/main/res/xml/settings.xml +++ b/ultrasonic/src/main/res/xml/settings.xml @@ -70,13 +70,13 @@ a:key="playbackControlSettings" app:iconSpaceReserved="false">