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 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
|
||||
|
|
|
@ -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<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="manage_servers">Spravovat servery</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="error_preparing_player_items">Chyba při načítání přehrávání.</string>
|
||||
<string name="view_details">Zobrazit detaily</string>
|
||||
|
|
|
@ -50,6 +50,8 @@
|
|||
<string name="settings_category_player">Player</string>
|
||||
<string name="manage_servers">Manage servers</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="error_preparing_player_items">Error preparing player items.</string>
|
||||
<string name="view_details">View details</string>
|
||||
|
|
|
@ -55,6 +55,13 @@
|
|||
app:summary="@string/force_software_decoding_summary"/>
|
||||
</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">
|
||||
|
||||
<Preference
|
||||
|
|
Loading…
Reference in a new issue