* Create main.yml

* Run ktlintFormat

* Don't error on translation lint issues

* Fix lint error about POST_NOTIFICATIONS permission

* Increase memory limit to speedup the build

* Only build debug

* refactor: rename `main.yml` to `build.yaml`

* lint: error on `ExtraTranslation`

---------

Co-authored-by: Jarne Demeulemeester <jarnedemeulemeester@gmail.com>
This commit is contained in:
js6pak 2023-02-11 12:01:02 +01:00 committed by GitHub
parent a2e581bc91
commit 5f7b7eaf63
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
23 changed files with 70 additions and 27 deletions

29
.github/workflows/build.yaml vendored Normal file
View file

@ -0,0 +1,29 @@
name: Build
on:
push:
pull_request:
jobs:
build:
name: Build
runs-on: ubuntu-22.04
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Validate Gradle Wrapper
uses: gradle/wrapper-validation-action@v1
- name: Set up JDK 11
uses: actions/setup-java@v3
with:
java-version: 11
distribution: temurin
- name: Setup Gradle
uses: gradle/gradle-build-action@v2
- name: Build with Gradle
run: ./gradlew lintDebug ktlintCheck assembleDebug
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: phone-universal-debug.apk
path: ./app/phone/build/outputs/apk/debug/phone-universal-debug.apk

View file

@ -2,6 +2,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-feature android:name="android.hardware.wifi" android:required="false" />

View file

@ -4,8 +4,8 @@ import android.app.Application
import androidx.appcompat.app.AppCompatDelegate
import com.google.android.material.color.DynamicColors
import dagger.hilt.android.HiltAndroidApp
import timber.log.Timber
import javax.inject.Inject
import timber.log.Timber
@HiltAndroidApp
class BaseApplication : Application() {

View file

@ -113,4 +113,4 @@ class DownloadEpisodeListAdapter(
class OnClickListener(val clickListener: (item: PlayerItem) -> Unit) {
fun onClick(item: PlayerItem) = clickListener(item)
}
}
}

View file

@ -15,11 +15,11 @@ import androidx.lifecycle.repeatOnLifecycle
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import dagger.hilt.android.AndroidEntryPoint
import dev.jdtech.jellyfin.AppPreferences
import dev.jdtech.jellyfin.R
import dev.jdtech.jellyfin.adapters.UserLoginListAdapter
import dev.jdtech.jellyfin.database.ServerDatabaseDao
import dev.jdtech.jellyfin.databinding.FragmentLoginBinding
import dev.jdtech.jellyfin.AppPreferences
import dev.jdtech.jellyfin.R
import dev.jdtech.jellyfin.viewmodels.LoginViewModel
import javax.inject.Inject
import kotlinx.coroutines.launch

View file

@ -7,8 +7,8 @@ import androidx.navigation.fragment.findNavController
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import dagger.hilt.android.AndroidEntryPoint
import dev.jdtech.jellyfin.R
import dev.jdtech.jellyfin.AppPreferences
import dev.jdtech.jellyfin.R
import javax.inject.Inject
@AndroidEntryPoint

View file

@ -12,4 +12,4 @@ fun Fragment.checkIfLoginRequired(error: String?) {
findNavController().navigate(AppNavigationDirections.actionGlobalLoginFragment(reLogin = true))
}
}
}
}

View file

@ -1,3 +1,5 @@
import com.android.build.api.dsl.CommonExtension
// Top-level build file where you can add configuration options common to all sub-projects/modules.
@Suppress("DSL_SCOPE_VIOLATION") // False positive
plugins {
@ -18,6 +20,17 @@ allprojects {
google()
mavenCentral()
}
val configureAndroid = { _: AppliedPlugin ->
extensions.configure<CommonExtension<*, *, *, *>>("android") {
lint {
informational += "MissingTranslation"
}
}
}
pluginManager.withPlugin("com.android.library", configureAndroid)
pluginManager.withPlugin("com.android.application", configureAndroid)
}
tasks.create<Delete>("clean") {

View file

@ -6,9 +6,9 @@ import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import dev.jdtech.jellyfin.AppPreferences
import dev.jdtech.jellyfin.api.JellyfinApi
import dev.jdtech.jellyfin.database.ServerDatabaseDao
import dev.jdtech.jellyfin.AppPreferences
import javax.inject.Singleton
@Module

View file

@ -11,8 +11,8 @@ import dev.jdtech.jellyfin.models.SortBy
import dev.jdtech.jellyfin.viewmodels.LibraryViewModel
import java.lang.IllegalStateException
import java.util.UUID
import org.jellyfin.sdk.model.api.SortOrder
import javax.inject.Inject
import org.jellyfin.sdk.model.api.SortOrder
@AndroidEntryPoint
class SortDialogFragment(

View file

@ -1,7 +1,7 @@
package dev.jdtech.jellyfin.models
import org.jellyfin.sdk.model.api.BaseItemDto
import java.util.UUID
import org.jellyfin.sdk.model.api.BaseItemDto
sealed class EpisodeItem {
abstract val id: UUID
@ -13,4 +13,4 @@ sealed class EpisodeItem {
data class Episode(val episode: BaseItemDto) : EpisodeItem() {
override val id = episode.id
}
}
}

View file

@ -2,8 +2,8 @@ package dev.jdtech.jellyfin.models
data class ExceptionUiText(
val uiText: UiText
): Exception()
) : Exception()
data class ExceptionUiTexts(
val uiTexts: Collection<UiText>
): Exception()
) : Exception()

View file

@ -16,4 +16,4 @@ sealed class HomeItem {
}
abstract val id: UUID
}
}

View file

@ -4,14 +4,14 @@ import android.content.res.Resources
import androidx.annotation.StringRes
sealed class UiText {
data class DynamicString(val value: String): UiText()
data class DynamicString(val value: String) : UiText()
class StringResource(
@StringRes val resId: Int,
vararg val args: Any?
): UiText()
) : UiText()
fun asString(resources: Resources): String {
return when(this) {
return when (this) {
is DynamicString -> return value
is StringResource -> resources.getString(resId, args)
}

View file

@ -3,8 +3,9 @@ package dev.jdtech.jellyfin.viewmodels
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel
import dev.jdtech.jellyfin.core.R
import dev.jdtech.jellyfin.AppPreferences
import dev.jdtech.jellyfin.api.JellyfinApi
import dev.jdtech.jellyfin.core.R
import dev.jdtech.jellyfin.database.ServerDatabaseDao
import dev.jdtech.jellyfin.models.DiscoveredServer
import dev.jdtech.jellyfin.models.ExceptionUiText
@ -12,7 +13,6 @@ import dev.jdtech.jellyfin.models.ExceptionUiTexts
import dev.jdtech.jellyfin.models.Server
import dev.jdtech.jellyfin.models.ServerAddress
import dev.jdtech.jellyfin.models.UiText
import dev.jdtech.jellyfin.AppPreferences
import java.util.UUID
import javax.inject.Inject
import kotlinx.coroutines.CancellationException

View file

@ -5,8 +5,8 @@ import androidx.lifecycle.viewModelScope
import androidx.paging.PagingData
import androidx.paging.cachedIn
import dagger.hilt.android.lifecycle.HiltViewModel
import dev.jdtech.jellyfin.repository.JellyfinRepository
import dev.jdtech.jellyfin.models.SortBy
import dev.jdtech.jellyfin.repository.JellyfinRepository
import java.util.UUID
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow

View file

@ -3,12 +3,12 @@ package dev.jdtech.jellyfin.viewmodels
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel
import dev.jdtech.jellyfin.core.R
import dev.jdtech.jellyfin.AppPreferences
import dev.jdtech.jellyfin.api.JellyfinApi
import dev.jdtech.jellyfin.core.R
import dev.jdtech.jellyfin.database.ServerDatabaseDao
import dev.jdtech.jellyfin.models.UiText
import dev.jdtech.jellyfin.models.User
import dev.jdtech.jellyfin.AppPreferences
import javax.inject.Inject
import kotlin.Exception
import kotlinx.coroutines.Dispatchers

View file

@ -3,10 +3,10 @@ package dev.jdtech.jellyfin.viewmodels
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel
import dev.jdtech.jellyfin.AppPreferences
import dev.jdtech.jellyfin.api.JellyfinApi
import dev.jdtech.jellyfin.database.ServerDatabaseDao
import dev.jdtech.jellyfin.models.Server
import dev.jdtech.jellyfin.AppPreferences
import javax.inject.Inject
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableSharedFlow

View file

@ -1,8 +1,8 @@
package dev.jdtech.jellyfin.api
import android.content.Context
import dev.jdtech.jellyfin.data.BuildConfig
import dev.jdtech.jellyfin.Constants
import dev.jdtech.jellyfin.data.BuildConfig
import java.util.UUID
import org.jellyfin.sdk.api.client.HttpClientOptions
import org.jellyfin.sdk.api.client.extensions.devicesApi

View file

@ -6,7 +6,7 @@
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
org.gradle.jvmargs=-Xmx4096m -Dfile.encoding=UTF-8
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects

View file

@ -4,9 +4,9 @@ import android.app.Dialog
import android.os.Bundle
import androidx.fragment.app.DialogFragment
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import dev.jdtech.jellyfin.player.video.R
import dev.jdtech.jellyfin.mpv.MPVPlayer
import dev.jdtech.jellyfin.mpv.TrackType
import dev.jdtech.jellyfin.player.video.R
import dev.jdtech.jellyfin.viewmodels.PlayerActivityViewModel
import java.lang.IllegalStateException

View file

@ -4,4 +4,4 @@ enum class TrackType(val type: String) {
VIDEO("video"),
AUDIO("audio"),
SUBTITLE("sub")
}
}

View file

@ -7,10 +7,10 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import androidx.media3.common.MimeTypes
import dagger.hilt.android.lifecycle.HiltViewModel
import dev.jdtech.jellyfin.player.video.R
import dev.jdtech.jellyfin.database.DownloadDatabaseDao
import dev.jdtech.jellyfin.models.ExternalSubtitle
import dev.jdtech.jellyfin.models.PlayerItem
import dev.jdtech.jellyfin.player.video.R
import dev.jdtech.jellyfin.repository.JellyfinRepository
import dev.jdtech.jellyfin.utils.getDownloadPlayerItem
import dev.jdtech.jellyfin.utils.isItemAvailable