Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update dependencies (November edition) #623

Merged
merged 3 commits into from
Nov 16, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 14 additions & 14 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,16 @@ plugins {
}

android {
compileSdkVersion(29)
// Explicitly specify ndk version for Azure
// Can be removed when version 4.1.x of the Android Gradle plugin is released
ndkVersion = "21.3.6528147"
compileSdkVersion(30)

defaultConfig {
// Android version targets
minSdkVersion(21)
targetSdkVersion(29)
targetSdkVersion(30)

// Release version
versionName = project.getVersionName()
versionCode = getVersionCode(versionName)
versionCode = getVersionCode(versionName!!)
}

compileOptions {
Expand Down Expand Up @@ -57,33 +54,36 @@ android {

dependencies {
// Jellyfin
implementation("org.jellyfin.apiclient:android:0.7.4")
implementation("org.jellyfin.apiclient:android:0.7.7")

// Kotlin
implementation(kotlin("stdlib-jdk8"))
implementation(kotlin("stdlib"))

val kotlinCoroutinesVersion = "1.3.3"
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlinCoroutinesVersion")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlinCoroutinesVersion")

// Android(x)
implementation("androidx.core:core-ktx:1.3.1")
implementation("androidx.core:core-ktx:1.3.2")
implementation("androidx.fragment:fragment-ktx:1.2.5")
val androidxLeanbackVersion = "1.1.0-alpha03"
val androidxLeanbackVersion = "1.1.0-alpha05"
implementation("androidx.leanback:leanback:$androidxLeanbackVersion")
implementation("androidx.leanback:leanback-preference:$androidxLeanbackVersion")
val androidxPreferenceVersion = "1.1.1"
implementation("androidx.preference:preference:$androidxPreferenceVersion")
implementation("androidx.preference:preference-ktx:$androidxPreferenceVersion")
implementation("androidx.appcompat:appcompat:1.2.0")
implementation("androidx.tvprovider:tvprovider:1.0.0")
implementation("androidx.constraintlayout:constraintlayout:1.1.3")
implementation("androidx.constraintlayout:constraintlayout:2.0.4")
implementation("androidx.recyclerview:recyclerview:1.1.0")
implementation("com.google.android:flexbox:2.0.1")

// Dependency Injection
val koinVersion = "2.1.6"
implementation("org.koin:koin-android-viewmodel:$koinVersion")
val koinVersion = "2.2.0"
implementation("org.koin:koin-android:$koinVersion")
implementation("org.koin:koin-androidx-viewmodel:$koinVersion")
implementation("org.koin:koin-androidx-fragment:$koinVersion")

// Lifecycle extensions
implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.2.0")

Expand All @@ -98,7 +98,7 @@ dependencies {
implementation("com.flaviofaria:kenburnsview:1.0.6")

// Crash Reporting
val acraVersion = "5.4.0"
val acraVersion = "5.7.0"
implementation("ch.acra:acra-http:$acraVersion")
implementation("ch.acra:acra-dialog:$acraVersion")
implementation("ch.acra:acra-limiter:$acraVersion")
Expand Down
12 changes: 6 additions & 6 deletions app/src/main/java/org/jellyfin/androidtv/JellyfinApplication.kt
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import org.jellyfin.androidtv.di.playbackModule
import org.jellyfin.androidtv.di.preferenceModule
import org.koin.android.ext.android.getKoin
import org.koin.android.ext.koin.androidContext
import org.koin.android.ext.koin.androidLogger
import org.koin.core.context.startKoin
import timber.log.Timber
import timber.log.Timber.DebugTree
Expand All @@ -34,10 +35,13 @@ class JellyfinApplication : TvApp() {
override fun onCreate() {
super.onCreate()

// Initialize the logging library
Timber.plant(DebugTree())
Timber.i("Application object created")

// Dependency Injection
startKoin {
// Temporary disabled until Koin is updated to 2.2 >=
// androidLogger()
androidLogger()
androidContext(this@JellyfinApplication)

modules(
Expand All @@ -51,10 +55,6 @@ class JellyfinApplication : TvApp() {
// Register lifecycle callbacks
getKoin().getAll<ActivityLifecycleCallbacks>().forEach(::registerActivityLifecycleCallbacks)

// Initialize the logging library
Timber.plant(DebugTree())
Timber.i("Application object created")

// Enable improved logging for leaking resources
// https://wh0.github.io/2020/08/12/closeguard.html
if (BuildConfig.DEBUG) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@ import org.koin.dsl.module

val activityLifecycleCallbacksModule = module {
single { AuthenticatedUserCallbacks() } bind Application.ActivityLifecycleCallbacks::class
single { AppThemeCallbacks() } bind Application.ActivityLifecycleCallbacks::class
single { AppThemeCallbacks(get()) } bind Application.ActivityLifecycleCallbacks::class
}
2 changes: 1 addition & 1 deletion app/src/main/java/org/jellyfin/androidtv/di/AppModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import org.jellyfin.apiclient.model.apiclient.ServerInfo
import org.jellyfin.apiclient.serialization.GsonJsonSerializer
import org.jellyfin.apiclient.serialization.ServerInfoDeserializer
import org.koin.android.ext.koin.androidApplication
import org.koin.android.viewmodel.dsl.viewModel
import org.koin.androidx.viewmodel.dsl.viewModel
import org.koin.core.qualifier.named
import org.koin.dsl.module

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,8 @@ import android.net.Uri
import android.os.Build
import androidx.core.content.res.ResourcesCompat
import androidx.core.graphics.drawable.toBitmap
import androidx.tvprovider.media.tv.Channel
import androidx.tvprovider.media.tv.ChannelLogoUtils
import androidx.tvprovider.media.tv.PreviewProgram
import androidx.tvprovider.media.tv.TvContractCompat
import androidx.tvprovider.media.tv.*
import androidx.tvprovider.media.tv.TvContractCompat.WatchNextPrograms
import androidx.tvprovider.media.tv.WatchNextProgram
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
Expand All @@ -30,15 +26,15 @@ import org.jellyfin.apiclient.model.dto.BaseItemDto
import org.jellyfin.apiclient.model.dto.ImageOptions
import org.jellyfin.apiclient.model.querying.ItemFields
import org.jellyfin.apiclient.model.querying.NextUpQuery
import org.koin.core.KoinComponent
import org.koin.core.inject

/**
* Manages channels on the android tv home screen
*
* More info: https://developer.android.com/training/tv/discovery/recommendations-channel
*/
class ChannelManager : KoinComponent {
class ChannelManager(
private val apiClient: ApiClient
) {
private companion object {
/**
* Amount of ticks found in a millisecond, used for calculation
Expand All @@ -47,7 +43,6 @@ class ChannelManager : KoinComponent {
}

private val application = TvApp.getApplication()
private val apiClient: ApiClient by inject()

/**
* Check if the app can use Leanback features and is API level 26 or higher
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
import org.jellyfin.apiclient.model.querying.ItemSortBy;
import org.jellyfin.apiclient.model.querying.ItemsResult;
import org.jellyfin.apiclient.model.querying.NextUpQuery;
import org.jellyfin.apiclient.serialization.GsonJsonSerializer;

import java.util.ArrayList;
import java.util.HashMap;
Expand Down Expand Up @@ -98,7 +99,7 @@ public void onActivityCreated(Bundle savedInstanceState) {
mApplication.setConfiguredAutoCredentials(new LogonCredentials(apiClient.getValue().getServerInfo(), TvApp.getApplication().getCurrentUser()));

// Init leanback home channels;
channelManager = new ChannelManager();
channelManager = new ChannelManager(get(ApiClient.class));

// Get auto bitrate
TvApp.getApplication().determineAutoBitrate();
Expand Down Expand Up @@ -145,7 +146,7 @@ public void onMessageReceived(CustomMessage message) {
}

nowPlaying = new HomeFragmentNowPlayingRow(getActivity());
liveTVRow = new HomeFragmentLiveTVRow(getActivity());
liveTVRow = new HomeFragmentLiveTVRow(getActivity(), get(GsonJsonSerializer.class));
footer = new HomeFragmentFooterRow(getActivity());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,7 @@ package org.jellyfin.androidtv.ui.home

import android.app.Activity
import android.content.Intent
import androidx.leanback.widget.ArrayObjectAdapter
import androidx.leanback.widget.HeaderItem
import androidx.leanback.widget.ListRow
import androidx.leanback.widget.OnItemViewClickedListener
import androidx.leanback.widget.Presenter
import androidx.leanback.widget.Row
import androidx.leanback.widget.RowPresenter
import androidx.leanback.widget.*
import org.jellyfin.androidtv.R
import org.jellyfin.androidtv.TvApp
import org.jellyfin.androidtv.constant.Extras
Expand All @@ -21,12 +15,11 @@ import org.jellyfin.androidtv.ui.presentation.CardPresenter
import org.jellyfin.androidtv.ui.presentation.GridButtonPresenter
import org.jellyfin.apiclient.model.dto.BaseItemDto
import org.jellyfin.apiclient.serialization.GsonJsonSerializer
import org.koin.core.KoinComponent
import org.koin.core.inject

class HomeFragmentLiveTVRow(val activity: Activity) : HomeFragmentRow(), OnItemViewClickedListener, KoinComponent {
private val serializer: GsonJsonSerializer by inject()

class HomeFragmentLiveTVRow(
private val activity: Activity,
private val serializer: GsonJsonSerializer
thornbill marked this conversation as resolved.
Show resolved Hide resolved
) : HomeFragmentRow(), OnItemViewClickedListener {
override fun addToRowsAdapter(cardPresenter: CardPresenter?, rowsAdapter: ArrayObjectAdapter) {
val header = HeaderItem(rowsAdapter.size().toLong(), activity.getString(R.string.pref_live_tv_cat))
val adapter = ArrayObjectAdapter(GridButtonPresenter())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,10 @@ import kotlinx.coroutines.withContext
import org.jellyfin.androidtv.util.apiclient.getItem
import org.jellyfin.apiclient.interaction.ApiClient
import org.jellyfin.apiclient.model.dto.ImageOptions
import org.koin.core.KoinComponent
import org.koin.core.inject
import org.koin.android.ext.android.inject
import timber.log.Timber

class NextUpActivity : FragmentActivity(), KoinComponent {
class NextUpActivity : FragmentActivity() {
private lateinit var fragment: NextUpFragment
private val apiClient: ApiClient by inject()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,17 @@ import android.widget.FrameLayout
import kotlinx.android.synthetic.main.fragment_next_up_buttons.view.*
import org.jellyfin.androidtv.R
import org.jellyfin.androidtv.preference.UserPreferences
import org.koin.core.KoinComponent
import org.koin.core.get
import org.koin.core.component.KoinApiExtension
import org.koin.core.component.KoinComponent
import org.koin.core.component.get

class NextUpButtons(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0, defStyle: Int = 0) : FrameLayout(context, attrs, defStyleAttr, defStyle), KoinComponent {
@KoinApiExtension
class NextUpButtons(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0,
defStyle: Int = 0
) : FrameLayout(context, attrs, defStyleAttr, defStyle), KoinComponent {
constructor(context: Context, attrs: AttributeSet) : this(context, attrs, 0, 0)

private var countdownTimer: CountDownTimer? = null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,24 +10,22 @@ import androidx.preference.PreferenceScreen
import org.jellyfin.androidtv.R
import org.jellyfin.androidtv.preference.UserPreferences
import org.jellyfin.androidtv.ui.preference.category.*
import org.jellyfin.androidtv.ui.preference.dsl.optionsScreen
import org.jellyfin.androidtv.ui.preference.custom.ButtonRemapDialogFragment
import org.jellyfin.androidtv.ui.preference.custom.ButtonRemapPreference
import org.jellyfin.apiclient.interaction.ApiClient
import org.koin.core.KoinComponent
import org.koin.core.get
import org.koin.core.inject
import org.jellyfin.androidtv.ui.preference.dsl.optionsScreen
import org.koin.android.ext.android.get
import org.koin.android.ext.android.inject

class UserPreferencesFragment : LeanbackSettingsFragmentCompat() {
class InnerUserPreferencesFragment : LeanbackPreferenceFragmentCompat(), KoinComponent {
class InnerUserPreferencesFragment : LeanbackPreferenceFragmentCompat() {
private val userPreferences: UserPreferences by inject()

override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
preferenceScreen = optionsScreen(requireContext()) {
setTitle(R.string.settings_title)

// Add all categories (using extension functions in the "category" subpackage)
authenticationCategory(userPreferences, get<ApiClient>())
authenticationCategory(userPreferences, get())
generalCategory(userPreferences)
playbackCategory(requireActivity(), userPreferences)
liveTvCategory(userPreferences)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,13 @@ import android.os.Bundle
import org.jellyfin.androidtv.preference.UserPreferences
import org.jellyfin.androidtv.preference.constant.AppTheme
import org.jellyfin.androidtv.ui.preference.PreferencesActivity
import org.koin.core.KoinComponent
import org.koin.core.inject
import timber.log.Timber

class AppThemeCallbacks : Application.ActivityLifecycleCallbacks, KoinComponent {
class AppThemeCallbacks(
private val userPreferences: UserPreferences
) : Application.ActivityLifecycleCallbacks {
private var lastTheme: AppTheme? = null
private var lastPreferencesTheme: AppTheme? = null
private val userPreferences: UserPreferences by inject()

override fun onActivityPaused(activity: Activity) {
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,12 @@ import org.jellyfin.androidtv.R
import org.jellyfin.androidtv.preference.UserPreferences
import org.jellyfin.androidtv.preference.constant.AppTheme
import org.jellyfin.androidtv.ui.preference.PreferencesActivity
import org.koin.core.KoinComponent
import org.koin.core.get
import org.koin.android.ext.android.get
import java.util.*

object ThemeManager : KoinComponent {
private fun showAprilFools(): Boolean {
val enableGreetings = get<UserPreferences>()[UserPreferences.seasonalGreetingsEnabled]
object ThemeManager {
private fun showAprilFools(userPreferences: UserPreferences): Boolean {
val enableGreetings = userPreferences[UserPreferences.seasonalGreetingsEnabled]
if (!enableGreetings) return false

val today = GregorianCalendar()
Expand All @@ -24,7 +23,7 @@ object ThemeManager : KoinComponent {
return R.style.Theme_Jellyfin_Preferences
}

if (showAprilFools()) {
if (showAprilFools(activity.get())) {
return R.style.Theme_Jellyfin_HotDogStand;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,7 @@ import androidx.annotation.DrawableRes
import androidx.core.view.updatePadding
import androidx.fragment.app.Fragment
import androidx.leanback.app.RowsSupportFragment
import androidx.leanback.widget.ArrayObjectAdapter
import androidx.leanback.widget.HeaderItem
import androidx.leanback.widget.ListRow
import androidx.leanback.widget.ListRowPresenter
import androidx.leanback.widget.OnItemViewClickedListener
import androidx.leanback.widget.Presenter
import androidx.leanback.widget.Row
import androidx.leanback.widget.RowPresenter
import androidx.leanback.widget.*
import androidx.lifecycle.Observer
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
Expand All @@ -25,7 +18,7 @@ import org.jellyfin.androidtv.data.model.ServerList
import org.jellyfin.androidtv.data.model.User
import org.jellyfin.androidtv.ui.GridButton
import org.jellyfin.androidtv.ui.presentation.GridButtonPresenter
import org.koin.android.viewmodel.ext.android.sharedViewModel
import org.koin.androidx.viewmodel.ext.android.sharedViewModel
import timber.log.Timber

class ListServerFragment : RowsSupportFragment() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,11 @@ import org.jellyfin.androidtv.util.apiclient.toUserDto
import org.jellyfin.apiclient.interaction.ApiClient
import org.jellyfin.apiclient.interaction.Response
import org.jellyfin.apiclient.model.dto.BaseItemDto
import org.koin.android.viewmodel.ext.android.viewModel
import org.koin.core.KoinComponent
import org.koin.core.inject
import org.koin.android.ext.android.inject
import org.koin.androidx.viewmodel.ext.android.viewModel
import timber.log.Timber

class StartupActivity : FragmentActivity(), KoinComponent {
class StartupActivity : FragmentActivity() {
companion object {
private const val NETWORK_PERMISSION = 1
const val ITEM_ID = "ItemId"
Expand Down Expand Up @@ -123,6 +122,8 @@ class StartupActivity : FragmentActivity(), KoinComponent {
}

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)

if (requestCode == NETWORK_PERMISSION) { // If request is cancelled, the result arrays are empty.
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted
Expand Down
Loading