diff --git a/app/phone/src/main/java/com/nomadics9/ananas/MainActivity.kt b/app/phone/src/main/java/com/nomadics9/ananas/MainActivity.kt index 74a3c1a5..9ab4735b 100644 --- a/app/phone/src/main/java/com/nomadics9/ananas/MainActivity.kt +++ b/app/phone/src/main/java/com/nomadics9/ananas/MainActivity.kt @@ -4,6 +4,7 @@ import android.os.Bundle import android.view.View import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.lifecycleScope import androidx.navigation.NavController import androidx.navigation.NavGraph import androidx.navigation.fragment.NavHostFragment @@ -22,6 +23,10 @@ import com.nomadics9.ananas.database.ServerDatabaseDao import com.nomadics9.ananas.databinding.ActivityMainBinding import com.nomadics9.ananas.viewmodels.MainViewModel import com.nomadics9.ananas.work.SyncWorker +import com.nomadics9.ananas.repository.JellyfinRepository +import com.nomadics9.ananas.utils.restart +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch import javax.inject.Inject import com.nomadics9.ananas.core.R as CoreR @@ -35,6 +40,9 @@ class MainActivity : AppCompatActivity() { @Inject lateinit var database: ServerDatabaseDao + @Inject + lateinit var jellyfinRepository: JellyfinRepository + @Inject lateinit var appPreferences: AppPreferences @@ -68,10 +76,18 @@ class MainActivity : AppCompatActivity() { val navView: NavigationBarView = binding.navView as NavigationBarView if (appPreferences.offlineMode) { + appPreferences.isOffline = true + } + + if (appPreferences.isOffline) { navView.menu.clear() navView.inflateMenu(CoreR.menu.bottom_nav_menu_offline) } + if (!appPreferences.isOffline && appPreferences.autoOffline) { + testServerConnection() + } + setSupportActionBar(binding.mainToolbar) // Passing each menu ID as a set of Ids because each @@ -152,4 +168,18 @@ class MainActivity : AppCompatActivity() { setTheme(CoreR.style.ThemeOverlay_Findroid_Amoled) } } + + private fun testServerConnection() { + val activity = this + lifecycleScope.launch { + try { + jellyfinRepository.getPublicSystemInfo() + // Give the UI a chance to load + delay(100) + } catch (e: Exception) { + appPreferences.isOffline = true + activity.restart() + } + } + } } diff --git a/core/src/main/java/com/nomadics9/ananas/di/RepositoryModule.kt b/core/src/main/java/com/nomadics9/ananas/di/RepositoryModule.kt index a0a818fc..b3f7a9a8 100644 --- a/core/src/main/java/com/nomadics9/ananas/di/RepositoryModule.kt +++ b/core/src/main/java/com/nomadics9/ananas/di/RepositoryModule.kt @@ -48,7 +48,7 @@ object RepositoryModule { appPreferences: AppPreferences, ): JellyfinRepository { println("Creating new JellyfinRepository") - return when (appPreferences.offlineMode) { + return when (appPreferences.isOffline) { true -> jellyfinRepositoryOfflineImpl false -> jellyfinRepositoryImpl } diff --git a/core/src/main/java/com/nomadics9/ananas/viewmodels/DownloadsViewModel.kt b/core/src/main/java/com/nomadics9/ananas/viewmodels/DownloadsViewModel.kt index f967b91b..a91fc949 100644 --- a/core/src/main/java/com/nomadics9/ananas/viewmodels/DownloadsViewModel.kt +++ b/core/src/main/java/com/nomadics9/ananas/viewmodels/DownloadsViewModel.kt @@ -45,7 +45,7 @@ constructor( private fun testServerConnection() { viewModelScope.launch { try { - if (appPreferences.offlineMode) return@launch + if (appPreferences.isOffline) return@launch repository.getPublicSystemInfo() // Give the UI a chance to load delay(100) diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index 9ae2edb5..dd74b8c2 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -182,6 +182,7 @@ Are you sure you want to cancel the download? Stop download By using Ananas you agree with the Privacy Policy which states that we do not collect any data + Turn on offline mode automatically No servers found No users found Select user diff --git a/core/src/main/res/xml/fragment_settings_network.xml b/core/src/main/res/xml/fragment_settings_network.xml index 5e5bd8a2..173c0da9 100644 --- a/core/src/main/res/xml/fragment_settings_network.xml +++ b/core/src/main/res/xml/fragment_settings_network.xml @@ -1,5 +1,6 @@ - + + \ No newline at end of file diff --git a/preferences/src/main/java/com/nomadics9/ananas/AppPreferences.kt b/preferences/src/main/java/com/nomadics9/ananas/AppPreferences.kt index bc1d381c..1dcc1544 100644 --- a/preferences/src/main/java/com/nomadics9/ananas/AppPreferences.kt +++ b/preferences/src/main/java/com/nomadics9/ananas/AppPreferences.kt @@ -25,11 +25,27 @@ constructor( var offlineMode get() = sharedPreferences.getBoolean(Constants.PREF_OFFLINE_MODE, false) set(value) { + isOffline = value sharedPreferences.edit { putBoolean(Constants.PREF_OFFLINE_MODE, value) } } + var autoOffline + get() = sharedPreferences.getBoolean(Constants.PREF_AUTO_OFFLINE, false) + set(value) { + sharedPreferences.edit { + putBoolean(Constants.PREF_AUTO_OFFLINE, value) + } + } + + private var _isOffline = sharedPreferences.getBoolean(Constants.PREF_OFFLINE_MODE, false) + var isOffline + get() = _isOffline + set(value) { + _isOffline = value + } + // Appearance val theme get() = sharedPreferences.getString(Constants.PREF_THEME, null) val dynamicColors get() = sharedPreferences.getBoolean(Constants.PREF_DYNAMIC_COLORS, true) diff --git a/preferences/src/main/java/com/nomadics9/ananas/Constants.kt b/preferences/src/main/java/com/nomadics9/ananas/Constants.kt index a01f49db..6daf599d 100644 --- a/preferences/src/main/java/com/nomadics9/ananas/Constants.kt +++ b/preferences/src/main/java/com/nomadics9/ananas/Constants.kt @@ -12,6 +12,7 @@ object Constants { // pref const val PREF_CURRENT_SERVER = "pref_current_server" const val PREF_OFFLINE_MODE = "pref_offline_mode" + const val PREF_AUTO_OFFLINE = "pref_auto_offline" const val PREF_PLAYER_GESTURES = "pref_player_gestures" const val PREF_PLAYER_GESTURES_VB = "pref_player_gestures_vb" const val PREF_PLAYER_GESTURES_ZOOM = "pref_player_gestures_zoom"