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

Desafio Mobile Android - Marcos Renann #51

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
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
26 changes: 26 additions & 0 deletions .github/workflows/job_lint_debug.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
name: Lint debug

on:
workflow_call:

jobs:
lint:
name: Linting debug variant
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3

- uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '17'

- name: Setup Gradle
uses: gradle/gradle-build-action@v2

- name: Make gradlew executable
run: chmod +x ./gradlew

- name: Execute Gradle command - lintDebug
run: ./gradlew lintDebug
26 changes: 26 additions & 0 deletions .github/workflows/job_test_debug.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
name: Test debug

on:
workflow_call:

jobs:
run_tests:
name: Testing debug variant
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3

- uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '17'

- name: Setup Gradle
uses: gradle/gradle-build-action@v2

- name: Make gradlew executable
run: chmod +x ./gradlew

- name: Execute Gradle command - testDebugUnitTest
run: ./gradlew testDebugUnitTest
19 changes: 19 additions & 0 deletions .github/workflows/operation_test_lint_debug.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
name: On Pull Request Opened or Commit to Dev

on:
pull_request:
branches:
- dev
- master # Trigger when a PR is opened to the 'dev' or 'main' branch
push:
branches:
- dev # Trigger when a commit is pushed directly to the 'dev' branch

jobs:
lint:
name: Lint Debug Variant
uses: ./.github/workflows/job_lint_debug.yml

test:
name: Test Debug Variant
uses: ./.github/workflows/job_test_debug.yml
68 changes: 68 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
*.iml
.gradle
/local.properties
.idea/shelf
/confluence/target
/dependencies/repo
/android.tests.dependencies
/dependencies/android.tests.dependencies
/dist
/local
/gh-pages
/ideaSDK
/clionSDK
/android-studio/sdk
out/
/tmp
/intellij
workspace.xml
*.versionsBackup
/idea/testData/debugger/tinyApp/classes*
/jps-plugin/testData/kannotator
/js/js.translator/testData/out/
/js/js.translator/testData/out-min/
/js/js.translator/testData/out-pir/
.gradle/
build/
!**/src/**/build
!**/test/**/build
!**/testData/**/*.iml
.idea/artifacts
.idea/remote-targets.xml
.idea/libraries/Gradle*.xml
.idea/libraries/Maven*.xml
.idea/modules
.idea/runConfigurations/JPS_*.xml
.idea/runConfigurations/_JPS_*.xml
.idea/runConfigurations/PILL_*.xml
.idea/runConfigurations/_FP_*.xml
.idea/runConfigurations/_MT_*.xml
.idea/libraries
.idea/modules.xml
.idea/gradle.xml
.idea/compiler.xml
.idea/inspectionProfiles/profiles_settings.xml
.idea/.name
.idea/jarRepositories.xml
.idea/csv-plugin.xml
.idea/libraries-with-intellij-classes.xml
.idea/misc.xml
.idea/protoeditor.xml
.idea/uiDesigner.xml
node_modules/
.rpt2_cache/
buildSrcTmp/
distTmp/
outTmp/
/test.output
/kotlin-native/dist
kotlin-ide/
.kotlin/
.teamcity/
.DS_Store
/build
/captures
.externalNativeBuild
.cxx
local.properties
api.properties
1 change: 1 addition & 0 deletions app/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/build
128 changes: 128 additions & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
import org.jlleitschuh.gradle.ktlint.reporter.ReporterType
import java.util.Properties

plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.compose)
alias(libs.plugins.ktlint)
alias(libs.plugins.detekt)
alias(libs.plugins.ksp)
}

val apiPropertiesFile = rootProject.file("api.properties")
val apiProperties = Properties()
if (apiPropertiesFile.exists()) apiProperties.load(apiPropertiesFile.inputStream())

android {
namespace = "com.mrenann.globoplay"
compileSdk = 35

defaultConfig {
applicationId = "com.mrenann.globoplay"
minSdk = 24
targetSdk = 35
versionCode = 1
versionName = "1.0"

testInstrumentationRunner = "com.mrenann.globoplay.InstrumentationTestRunner"

buildConfigField("String", "API_KEY", "${apiProperties["TMDB_KEY"]}")
buildConfigField("String", "BASE_URL", "${apiProperties["TMDB_URL"]}")
buildConfigField("String", "BASE_IMAGE_URL", "${apiProperties["TMDB_IMAGE_URL"]}")
}

buildTypes {
release {
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro",
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = "11"
}
buildFeatures {
compose = true
buildConfig = true
}
}

ktlint {
android = true
ignoreFailures = false
reporters {
reporter(ReporterType.PLAIN)
reporter(ReporterType.SARIF)
reporter(ReporterType.CHECKSTYLE)
}
}

dependencies {

implementation(libs.androidx.core.ktx)
implementation(libs.androidx.lifecycle.runtime.ktx)
implementation(libs.androidx.activity.compose)
implementation(platform(libs.androidx.compose.bom))
implementation(libs.androidx.ui)
implementation(libs.androidx.ui.graphics)
implementation(libs.androidx.ui.tooling.preview)
implementation(libs.androidx.material3)

implementation(libs.code.gson)
implementation(libs.retrofit)
implementation(libs.retrofit.converter.gson)

implementation(platform(libs.okhttp.bom))
implementation(libs.okhttp)
implementation(libs.logging.interceptor)

implementation(platform(libs.koin.bom))
implementation(libs.koin.core)
implementation(libs.koin.android)
implementation(libs.koin.compose)
testImplementation(libs.koin.test)
testImplementation(libs.koin.test.junit4)
testImplementation(libs.koin.test.android)

implementation(libs.voyager.navigator)
implementation(libs.voyager.tabNavigator)
implementation(libs.voyager.koin)

implementation(libs.androidx.paging.common.android)
implementation(libs.androidx.paging.compose.android)

implementation(libs.coil.compose)
implementation(libs.coil.network.okhttp)

implementation(libs.androidx.room)
implementation(libs.androidx.room.ktx)
implementation(libs.androidx.splashscreen)
implementation(libs.composeIcons.evaIcons)

ksp(libs.androidx.room.compiler)
implementation(libs.truth)
androidTestImplementation(libs.androidx.core.testing)
androidTestImplementation(libs.kotlinx.coroutines.test)
androidTestImplementation(libs.truth)
testImplementation(libs.mockito.core)
androidTestImplementation(libs.mockito.android)
testImplementation(libs.mockito.inline)



testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
androidTestImplementation(platform(libs.androidx.compose.bom))
androidTestImplementation(libs.androidx.ui.test.junit4)
debugImplementation(libs.androidx.ui.tooling)
debugImplementation(libs.androidx.ui.test.manifest)
testImplementation(kotlin("test"))
}
32 changes: 32 additions & 0 deletions app/proguard-rules.pro
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
##---------------Begin: proguard configuration for Gson ----------
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature

# For using GSON @Expose annotation
-keepattributes *Annotation*

# Gson specific classes
-dontwarn sun.misc.**
#-keep class com.google.gson.stream.** { *; }

# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.** { <fields>; }

# Prevent proguard from stripping interface information from TypeAdapter, TypeAdapterFactory,
# JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter)
-keep class * extends com.google.gson.TypeAdapter
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer

# Prevent R8 from leaving Data object members always null
-keepclassmembers,allowobfuscation class * {
@com.google.gson.annotations.SerializedName <fields>;
}

# Retain generic signatures of TypeToken and its subclasses with R8 version 3.0 and higher.
-keep,allowobfuscation,allowshrinking class com.google.gson.reflect.TypeToken
-keep,allowobfuscation,allowshrinking class * extends com.google.gson.reflect.TypeToken

##---------------End: proguard configuration for Gson ----------
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.mrenann.globoplay

import android.app.Application
import android.content.Context
import androidx.test.runner.AndroidJUnitRunner

class InstrumentationTestRunner : AndroidJUnitRunner() {
override fun newApplication(
classLoader: ClassLoader?,
className: String?,
context: Context?
): Application {
return super.newApplication(classLoader, TestApplication::class.java.name, context)
}
}
32 changes: 32 additions & 0 deletions app/src/androidTest/java/com/mrenann/globoplay/KoinTestRule.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.mrenann.globoplay

import androidx.test.platform.app.InstrumentationRegistry
import org.junit.rules.TestWatcher
import org.junit.runner.Description
import org.koin.android.ext.koin.androidContext
import org.koin.core.context.GlobalContext.getKoinApplicationOrNull
import org.koin.core.context.loadKoinModules
import org.koin.core.context.startKoin
import org.koin.core.context.unloadKoinModules
import org.koin.core.module.Module


class KoinTestRule(
private val modules: List<Module>
) : TestWatcher() {
override fun starting(description: Description) {

if (getKoinApplicationOrNull() == null) {
startKoin {
androidContext(InstrumentationRegistry.getInstrumentation().targetContext.applicationContext)
modules(modules)
}
} else {
loadKoinModules(modules)
}
}

override fun finished(description: Description) {
unloadKoinModules(modules)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.mrenann.globoplay

import android.app.Application

class TestApplication : Application()
Loading