diff --git a/app/src/main/java/dev/jdtech/jellyfin/api/JellyfinApi.kt b/app/src/main/java/dev/jdtech/jellyfin/api/JellyfinApi.kt index 5b469423..568e5a03 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/api/JellyfinApi.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/api/JellyfinApi.kt @@ -2,10 +2,20 @@ package dev.jdtech.jellyfin.api import android.content.Context import dev.jdtech.jellyfin.BuildConfig -import org.jellyfin.sdk.api.client.extensions.* +import org.jellyfin.sdk.api.client.extensions.devicesApi +import org.jellyfin.sdk.api.client.extensions.itemsApi +import org.jellyfin.sdk.api.client.extensions.mediaInfoApi +import org.jellyfin.sdk.api.client.extensions.playStateApi +import org.jellyfin.sdk.api.client.extensions.sessionApi +import org.jellyfin.sdk.api.client.extensions.systemApi +import org.jellyfin.sdk.api.client.extensions.tvShowsApi +import org.jellyfin.sdk.api.client.extensions.userApi +import org.jellyfin.sdk.api.client.extensions.userLibraryApi +import org.jellyfin.sdk.api.client.extensions.userViewsApi +import org.jellyfin.sdk.api.client.extensions.videosApi import org.jellyfin.sdk.createJellyfin import org.jellyfin.sdk.model.ClientInfo -import java.util.* +import java.util.UUID /** * Jellyfin API class using org.jellyfin.sdk:jellyfin-platform-android @@ -15,14 +25,20 @@ import java.util.* * @constructor Creates a new [JellyfinApi] instance */ class JellyfinApi(androidContext: Context, baseUrl: String) { + val jellyfin = createJellyfin { - clientInfo = - ClientInfo(name = androidContext.applicationInfo.loadLabel(androidContext.packageManager).toString(), version = BuildConfig.VERSION_NAME) + clientInfo = ClientInfo( + name = androidContext.applicationInfo.loadLabel(androidContext.packageManager) + .toString(), + version = BuildConfig.VERSION_NAME + ) context = androidContext } + val api = jellyfin.createApi(baseUrl = baseUrl) var userId: UUID? = null + val devicesApi = api.devicesApi val systemApi = api.systemApi val userApi = api.userApi val viewsApi = api.userViewsApi diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/SettingsFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/SettingsFragment.kt index 79be8b10..88518220 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/SettingsFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/SettingsFragment.kt @@ -3,14 +3,25 @@ package dev.jdtech.jellyfin.fragments import android.content.Intent import android.net.Uri import android.os.Bundle -import androidx.appcompat.app.AppCompatDelegate.* +import androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM +import androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_NO +import androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_YES +import androidx.appcompat.app.AppCompatDelegate.setDefaultNightMode +import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController +import androidx.preference.EditTextPreference import androidx.preference.ListPreference import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat +import dagger.hilt.android.AndroidEntryPoint import dev.jdtech.jellyfin.R +import dev.jdtech.jellyfin.viewmodels.SettingsViewModel + +@AndroidEntryPoint +class SettingsFragment: PreferenceFragmentCompat() { + + private val viewModel: SettingsViewModel by viewModels() -class SettingsFragment : PreferenceFragmentCompat() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.fragment_settings, rootKey) @@ -41,5 +52,10 @@ class SettingsFragment : PreferenceFragmentCompat() { findNavController().navigate(SettingsFragmentDirections.actionSettingsFragmentToAboutLibraries()) true } + + findPreference("deviceName")?.setOnPreferenceChangeListener { _, name -> + viewModel.updateDeviceName(name.toString()) + true + } } } \ No newline at end of file diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/SettingsViewModel.kt b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/SettingsViewModel.kt new file mode 100644 index 00000000..8109ec71 --- /dev/null +++ b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/SettingsViewModel.kt @@ -0,0 +1,24 @@ +package dev.jdtech.jellyfin.viewmodels + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import dagger.hilt.android.lifecycle.HiltViewModel +import dev.jdtech.jellyfin.api.JellyfinApi +import kotlinx.coroutines.Dispatchers.IO +import kotlinx.coroutines.launch +import org.jellyfin.sdk.model.api.DeviceOptions +import javax.inject.Inject + +@HiltViewModel +internal class SettingsViewModel @Inject internal constructor( + private val api: JellyfinApi +) : ViewModel() { + + fun updateDeviceName(name: String) { + api.jellyfin.deviceInfo?.id?.let { id -> + viewModelScope.launch(IO) { + api.devicesApi.updateDeviceOptions(id, DeviceOptions(name)) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index c5c33547..26434c19 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -48,6 +48,8 @@ Přehrávač Spravovat servery Vzhled + Zařízení + Název zařízení Téma Chyba při načítání přehrávání. Zobrazit detaily diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 456b6b3d..09ea82de 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -50,6 +50,8 @@ Player Manage servers Appearance + Device + Device name Theme Error preparing player items. View details diff --git a/app/src/main/res/xml/fragment_settings.xml b/app/src/main/res/xml/fragment_settings.xml index ab68e6e3..5b53e488 100644 --- a/app/src/main/res/xml/fragment_settings.xml +++ b/app/src/main/res/xml/fragment_settings.xml @@ -55,6 +55,13 @@ app:summary="@string/force_software_decoding_summary"/> + + + +