From 3db0f57437c119e59d0ae409f612ca16a50f913d Mon Sep 17 00:00:00 2001 From: Jesper Winters Date: Fri, 27 Oct 2023 15:35:07 +0200 Subject: [PATCH 1/7] Add option to turn on offline mode automatically --- .../java/dev/jdtech/jellyfin/MainActivity.kt | 29 ++++++++++++++++++- .../jellyfin/fragments/SettingsFragment.kt | 2 ++ .../jdtech/jellyfin/di/RepositoryModule.kt | 4 +-- .../jellyfin/viewmodels/DownloadsViewModel.kt | 2 +- core/src/main/res/values/strings.xml | 1 + .../res/xml/fragment_settings_network.xml | 7 ++++- .../dev/jdtech/jellyfin/AppPreferences.kt | 16 ++++++++++ .../java/dev/jdtech/jellyfin/Constants.kt | 1 + 8 files changed, 57 insertions(+), 5 deletions(-) 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" From 689c5cff3fab7acb43a0d11f7db772d0ea8d5099 Mon Sep 17 00:00:00 2001 From: Jesper Winters Date: Fri, 27 Oct 2023 15:37:07 +0200 Subject: [PATCH 2/7] Clean up --- app/phone/src/main/java/dev/jdtech/jellyfin/MainActivity.kt | 3 --- .../java/dev/jdtech/jellyfin/fragments/SettingsFragment.kt | 2 -- core/src/main/java/dev/jdtech/jellyfin/di/RepositoryModule.kt | 2 +- 3 files changed, 1 insertion(+), 6 deletions(-) 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 67af8850..60e84ff4 100644 --- a/app/phone/src/main/java/dev/jdtech/jellyfin/MainActivity.kt +++ b/app/phone/src/main/java/dev/jdtech/jellyfin/MainActivity.kt @@ -6,7 +6,6 @@ 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 @@ -29,7 +28,6 @@ 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 @@ -202,7 +200,6 @@ class MainActivity : AppCompatActivity() { // 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 54d3e2f0..9e334ae7 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,9 +8,7 @@ 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 cc2e4add..4c603471 100644 --- a/core/src/main/java/dev/jdtech/jellyfin/di/RepositoryModule.kt +++ b/core/src/main/java/dev/jdtech/jellyfin/di/RepositoryModule.kt @@ -47,7 +47,7 @@ object RepositoryModule { jellyfinRepositoryOfflineImpl: JellyfinRepositoryOfflineImpl, appPreferences: AppPreferences, ): JellyfinRepository { - println("Creating new JellyfinRepository, is offline: ${appPreferences.isOffline}") + println("Creating new JellyfinRepository") return when (appPreferences.isOffline) { true -> jellyfinRepositoryOfflineImpl false -> jellyfinRepositoryImpl From 5b38bdb1c168c01ec3558c50980850fc9692e68f Mon Sep 17 00:00:00 2001 From: Jcuhfehl Date: Thu, 17 Aug 2023 11:57:54 +0200 Subject: [PATCH 3/7] Fix linting issues --- .../src/main/java/dev/jdtech/jellyfin/AppPreferences.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/preferences/src/main/java/dev/jdtech/jellyfin/AppPreferences.kt b/preferences/src/main/java/dev/jdtech/jellyfin/AppPreferences.kt index 416b32a9..fbb8f4b1 100644 --- a/preferences/src/main/java/dev/jdtech/jellyfin/AppPreferences.kt +++ b/preferences/src/main/java/dev/jdtech/jellyfin/AppPreferences.kt @@ -39,11 +39,11 @@ constructor( } } - private var _isOffline = sharedPreferences.getBoolean(Constants.PREF_OFFLINE_MODE, false); + private var _isOffline = sharedPreferences.getBoolean(Constants.PREF_OFFLINE_MODE, false) var isOffline - get() = _isOffline; + get() = _isOffline set(value) { - _isOffline = value; + _isOffline = value } // Appearance From 49d52f97136c8637affd7d991e76426cdceb23ed Mon Sep 17 00:00:00 2001 From: Jesper Winters Date: Fri, 27 Oct 2023 15:37:37 +0200 Subject: [PATCH 4/7] Fix linting issues --- .../src/main/java/dev/jdtech/jellyfin/MainActivity.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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 60e84ff4..c164f242 100644 --- a/app/phone/src/main/java/dev/jdtech/jellyfin/MainActivity.kt +++ b/app/phone/src/main/java/dev/jdtech/jellyfin/MainActivity.kt @@ -42,7 +42,7 @@ class MainActivity : AppCompatActivity() { lateinit var database: ServerDatabaseDao @Inject - lateinit var jellyfinRepository: JellyfinRepository; + lateinit var jellyfinRepository: JellyfinRepository @Inject lateinit var appPreferences: AppPreferences @@ -193,15 +193,15 @@ class MainActivity : AppCompatActivity() { } private fun testServerConnection() { - val activity = this; + 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(); + appPreferences.isOffline = true + activity.restart() } } } From b5f5a6eaeddc75d950dda46c230d5a7ce1c4044c Mon Sep 17 00:00:00 2001 From: Jesper Winters Date: Fri, 27 Oct 2023 15:49:20 +0200 Subject: [PATCH 5/7] Fix linting issue --- app/phone/src/main/java/dev/jdtech/jellyfin/MainActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 c164f242..5b9c1d2c 100644 --- a/app/phone/src/main/java/dev/jdtech/jellyfin/MainActivity.kt +++ b/app/phone/src/main/java/dev/jdtech/jellyfin/MainActivity.kt @@ -83,7 +83,7 @@ class MainActivity : AppCompatActivity() { } if (!appPreferences.isOffline && appPreferences.autoOffline) { - testServerConnection(); + testServerConnection() } setSupportActionBar(binding.mainToolbar) From da64c968bc07f8c0719535ba20a6e8a85358004e Mon Sep 17 00:00:00 2001 From: Freya Winters Date: Sat, 28 Oct 2023 13:38:09 +0200 Subject: [PATCH 6/7] Fix manual offline mode --- app/phone/src/main/java/dev/jdtech/jellyfin/MainActivity.kt | 4 ++++ 1 file changed, 4 insertions(+) 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 5b9c1d2c..5e808192 100644 --- a/app/phone/src/main/java/dev/jdtech/jellyfin/MainActivity.kt +++ b/app/phone/src/main/java/dev/jdtech/jellyfin/MainActivity.kt @@ -77,6 +77,10 @@ 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) From 216092888ad20e5f436674bcce4a6a7f509a0731 Mon Sep 17 00:00:00 2001 From: Freya Winters Date: Mon, 15 Jan 2024 09:02:01 +0100 Subject: [PATCH 7/7] Fix linting issue --- app/phone/src/main/java/dev/jdtech/jellyfin/MainActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 adc6a5f8..912322ad 100644 --- a/app/phone/src/main/java/dev/jdtech/jellyfin/MainActivity.kt +++ b/app/phone/src/main/java/dev/jdtech/jellyfin/MainActivity.kt @@ -78,7 +78,7 @@ class MainActivity : AppCompatActivity() { if (appPreferences.offlineMode) { appPreferences.isOffline = true } - + if (appPreferences.isOffline) { navView.menu.clear() navView.inflateMenu(CoreR.menu.bottom_nav_menu_offline)