diff --git a/app/phone/src/main/java/dev/jdtech/jellyfin/MainActivity.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/MainActivity.kt
index 6df373d6..67af8850 100644
--- a/app/phone/src/main/java/dev/jdtech/jellyfin/MainActivity.kt
+++ b/app/phone/src/main/java/dev/jdtech/jellyfin/MainActivity.kt
@@ -6,6 +6,7 @@ import android.view.View
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope
+import androidx.lifecycle.viewModelScope
import androidx.navigation.NavController
import androidx.navigation.NavGraph
import androidx.navigation.fragment.NavHostFragment
@@ -22,9 +23,13 @@ import com.google.android.material.navigation.NavigationBarView
import dagger.hilt.android.AndroidEntryPoint
import dev.jdtech.jellyfin.database.ServerDatabaseDao
import dev.jdtech.jellyfin.databinding.ActivityMainBinding
+import dev.jdtech.jellyfin.repository.JellyfinRepository
+import dev.jdtech.jellyfin.utils.restart
import dev.jdtech.jellyfin.viewmodels.MainViewModel
import dev.jdtech.jellyfin.work.SyncWorker
+import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
+import timber.log.Timber
import javax.inject.Inject
import dev.jdtech.jellyfin.core.R as CoreR
@@ -38,6 +43,9 @@ class MainActivity : AppCompatActivity() {
@Inject
lateinit var database: ServerDatabaseDao
+ @Inject
+ lateinit var jellyfinRepository: JellyfinRepository;
+
@Inject
lateinit var appPreferences: AppPreferences
@@ -71,11 +79,15 @@ class MainActivity : AppCompatActivity() {
val navView: NavigationBarView = binding.navView as NavigationBarView
- if (appPreferences.offlineMode) {
+ 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
@@ -181,4 +193,19 @@ class MainActivity : AppCompatActivity() {
setTheme(CoreR.style.Theme_FindroidAMOLED)
}
}
+
+ private fun testServerConnection() {
+ val activity = this;
+ lifecycleScope.launch {
+ try {
+ jellyfinRepository.getPublicSystemInfo()
+ // Give the UI a chance to load
+ delay(100)
+ } catch (e: Exception) {
+ Timber.d("------------------- Failed to be online")
+ appPreferences.isOffline = true;
+ activity.restart();
+ }
+ }
+ }
}
diff --git a/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/SettingsFragment.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/SettingsFragment.kt
index 9e334ae7..54d3e2f0 100644
--- a/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/SettingsFragment.kt
+++ b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/SettingsFragment.kt
@@ -8,7 +8,9 @@ import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import dagger.hilt.android.AndroidEntryPoint
import dev.jdtech.jellyfin.AppPreferences
+import dev.jdtech.jellyfin.Constants
import dev.jdtech.jellyfin.utils.restart
+import timber.log.Timber
import javax.inject.Inject
import dev.jdtech.jellyfin.core.R as CoreR
diff --git a/core/src/main/java/dev/jdtech/jellyfin/di/RepositoryModule.kt b/core/src/main/java/dev/jdtech/jellyfin/di/RepositoryModule.kt
index e6d3299c..cc2e4add 100644
--- a/core/src/main/java/dev/jdtech/jellyfin/di/RepositoryModule.kt
+++ b/core/src/main/java/dev/jdtech/jellyfin/di/RepositoryModule.kt
@@ -47,8 +47,8 @@ object RepositoryModule {
jellyfinRepositoryOfflineImpl: JellyfinRepositoryOfflineImpl,
appPreferences: AppPreferences,
): JellyfinRepository {
- println("Creating new JellyfinRepository")
- return when (appPreferences.offlineMode) {
+ println("Creating new JellyfinRepository, is offline: ${appPreferences.isOffline}")
+ return when (appPreferences.isOffline) {
true -> jellyfinRepositoryOfflineImpl
false -> jellyfinRepositoryImpl
}
diff --git a/core/src/main/java/dev/jdtech/jellyfin/viewmodels/DownloadsViewModel.kt b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/DownloadsViewModel.kt
index 9321f676..4242c639 100644
--- a/core/src/main/java/dev/jdtech/jellyfin/viewmodels/DownloadsViewModel.kt
+++ b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/DownloadsViewModel.kt
@@ -44,7 +44,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 c78f6962..5acef130 100644
--- a/core/src/main/res/values/strings.xml
+++ b/core/src/main/res/values/strings.xml
@@ -177,4 +177,5 @@
Are you sure you want to cancel the download?
Stop download
By using Findroid you agree with the Privacy Policy which states that we do not collect any data
+ Turn on offline mode automatically
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/dev/jdtech/jellyfin/AppPreferences.kt b/preferences/src/main/java/dev/jdtech/jellyfin/AppPreferences.kt
index 8879736d..416b32a9 100644
--- a/preferences/src/main/java/dev/jdtech/jellyfin/AppPreferences.kt
+++ b/preferences/src/main/java/dev/jdtech/jellyfin/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/dev/jdtech/jellyfin/Constants.kt b/preferences/src/main/java/dev/jdtech/jellyfin/Constants.kt
index a9f5dda0..fc5f6e7a 100644
--- a/preferences/src/main/java/dev/jdtech/jellyfin/Constants.kt
+++ b/preferences/src/main/java/dev/jdtech/jellyfin/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"