Add customizable device name (#61)
* Add ability to name your device * Update device name real time * Remove unnecessary deviceInfo and apiClientFactory Co-authored-by: Jarne Demeulemeester <32322857+jarnedemeulemeester@users.noreply.github.com>
This commit is contained in:
parent
d0673bc82b
commit
8c90031165
6 changed files with 73 additions and 6 deletions
|
@ -2,10 +2,20 @@ package dev.jdtech.jellyfin.api
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import dev.jdtech.jellyfin.BuildConfig
|
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.createJellyfin
|
||||||
import org.jellyfin.sdk.model.ClientInfo
|
import org.jellyfin.sdk.model.ClientInfo
|
||||||
import java.util.*
|
import java.util.UUID
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Jellyfin API class using org.jellyfin.sdk:jellyfin-platform-android
|
* Jellyfin API class using org.jellyfin.sdk:jellyfin-platform-android
|
||||||
|
@ -15,14 +25,20 @@ import java.util.*
|
||||||
* @constructor Creates a new [JellyfinApi] instance
|
* @constructor Creates a new [JellyfinApi] instance
|
||||||
*/
|
*/
|
||||||
class JellyfinApi(androidContext: Context, baseUrl: String) {
|
class JellyfinApi(androidContext: Context, baseUrl: String) {
|
||||||
|
|
||||||
val jellyfin = createJellyfin {
|
val jellyfin = createJellyfin {
|
||||||
clientInfo =
|
clientInfo = ClientInfo(
|
||||||
ClientInfo(name = androidContext.applicationInfo.loadLabel(androidContext.packageManager).toString(), version = BuildConfig.VERSION_NAME)
|
name = androidContext.applicationInfo.loadLabel(androidContext.packageManager)
|
||||||
|
.toString(),
|
||||||
|
version = BuildConfig.VERSION_NAME
|
||||||
|
)
|
||||||
context = androidContext
|
context = androidContext
|
||||||
}
|
}
|
||||||
|
|
||||||
val api = jellyfin.createApi(baseUrl = baseUrl)
|
val api = jellyfin.createApi(baseUrl = baseUrl)
|
||||||
var userId: UUID? = null
|
var userId: UUID? = null
|
||||||
|
|
||||||
|
val devicesApi = api.devicesApi
|
||||||
val systemApi = api.systemApi
|
val systemApi = api.systemApi
|
||||||
val userApi = api.userApi
|
val userApi = api.userApi
|
||||||
val viewsApi = api.userViewsApi
|
val viewsApi = api.userViewsApi
|
||||||
|
|
|
@ -3,14 +3,25 @@ package dev.jdtech.jellyfin.fragments
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Bundle
|
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.navigation.fragment.findNavController
|
||||||
|
import androidx.preference.EditTextPreference
|
||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.Preference
|
import androidx.preference.Preference
|
||||||
import androidx.preference.PreferenceFragmentCompat
|
import androidx.preference.PreferenceFragmentCompat
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import dev.jdtech.jellyfin.R
|
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?) {
|
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
||||||
setPreferencesFromResource(R.xml.fragment_settings, rootKey)
|
setPreferencesFromResource(R.xml.fragment_settings, rootKey)
|
||||||
|
|
||||||
|
@ -41,5 +52,10 @@ class SettingsFragment : PreferenceFragmentCompat() {
|
||||||
findNavController().navigate(SettingsFragmentDirections.actionSettingsFragmentToAboutLibraries())
|
findNavController().navigate(SettingsFragmentDirections.actionSettingsFragmentToAboutLibraries())
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
findPreference<EditTextPreference>("deviceName")?.setOnPreferenceChangeListener { _, name ->
|
||||||
|
viewModel.updateDeviceName(name.toString())
|
||||||
|
true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -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))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -48,6 +48,8 @@
|
||||||
<string name="settings_category_player">Přehrávač</string>
|
<string name="settings_category_player">Přehrávač</string>
|
||||||
<string name="manage_servers">Spravovat servery</string>
|
<string name="manage_servers">Spravovat servery</string>
|
||||||
<string name="settings_category_appearance">Vzhled</string>
|
<string name="settings_category_appearance">Vzhled</string>
|
||||||
|
<string name="settings_category_device">Zařízení</string>
|
||||||
|
<string name="device_name">Název zařízení</string>
|
||||||
<string name="theme">Téma</string>
|
<string name="theme">Téma</string>
|
||||||
<string name="error_preparing_player_items">Chyba při načítání přehrávání.</string>
|
<string name="error_preparing_player_items">Chyba při načítání přehrávání.</string>
|
||||||
<string name="view_details">Zobrazit detaily</string>
|
<string name="view_details">Zobrazit detaily</string>
|
||||||
|
|
|
@ -50,6 +50,8 @@
|
||||||
<string name="settings_category_player">Player</string>
|
<string name="settings_category_player">Player</string>
|
||||||
<string name="manage_servers">Manage servers</string>
|
<string name="manage_servers">Manage servers</string>
|
||||||
<string name="settings_category_appearance">Appearance</string>
|
<string name="settings_category_appearance">Appearance</string>
|
||||||
|
<string name="settings_category_device">Device</string>
|
||||||
|
<string name="device_name">Device name</string>
|
||||||
<string name="theme">Theme</string>
|
<string name="theme">Theme</string>
|
||||||
<string name="error_preparing_player_items">Error preparing player items.</string>
|
<string name="error_preparing_player_items">Error preparing player items.</string>
|
||||||
<string name="view_details">View details</string>
|
<string name="view_details">View details</string>
|
||||||
|
|
|
@ -55,6 +55,13 @@
|
||||||
app:summary="@string/force_software_decoding_summary"/>
|
app:summary="@string/force_software_decoding_summary"/>
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
|
<PreferenceCategory app:title="@string/settings_category_device">
|
||||||
|
<EditTextPreference
|
||||||
|
app:key="deviceName"
|
||||||
|
app:title="@string/device_name"
|
||||||
|
app:useSimpleSummaryProvider="true"/>
|
||||||
|
</PreferenceCategory>
|
||||||
|
|
||||||
<PreferenceCategory app:title="@string/about">
|
<PreferenceCategory app:title="@string/about">
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
|
|
Loading…
Reference in a new issue