Skip to content

Commit

Permalink
Merge branch 'an/develop' into an/refactor/pokemon-stats-animation
Browse files Browse the repository at this point in the history
  • Loading branch information
sh1mj1 committed Dec 19, 2024
2 parents c73f4d2 + 11b7b84 commit cfd8bae
Show file tree
Hide file tree
Showing 7 changed files with 86 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,15 @@ package poke.rogue.helper.presentation.dex

import android.content.res.Configuration
import android.os.Bundle
import android.view.animation.AnimationUtils
import androidx.appcompat.widget.Toolbar
import androidx.core.view.isGone
import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import org.koin.androidx.viewmodel.ext.android.viewModel
import poke.rogue.helper.R
import poke.rogue.helper.databinding.ActivityPokemonListBinding
Expand Down Expand Up @@ -58,6 +65,53 @@ class PokemonListActivity :
includeEdge = false,
),
)
addOnScrollListener(pokemonListScrollListener())
}
}

private fun pokemonListScrollListener() =
object : RecyclerView.OnScrollListener() {
override fun onScrolled(
recyclerView: RecyclerView,
dx: Int,
dy: Int,
) {
if (!recyclerView.canScrollVertically(-1)) {
hideScrollUpButton()
} else {
showScrollUpButton()
}
}

override fun onScrollStateChanged(
recyclerView: RecyclerView,
newState: Int,
) {
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
hideScrollUpButton()
}
}
}

private fun showScrollUpButton() {
val scrollUpButton = binding.btnPokeListScrollUp
if (scrollUpButton.isVisible) return
scrollUpButton.isVisible = true
scrollUpButton.startAnimation(AnimationUtils.loadAnimation(this, R.anim.fade_in))
}

private fun hideScrollUpButton() {
val scrollUpButton = binding.btnPokeListScrollUp
if (scrollUpButton.isGone) return
lifecycleScope.launch {
delay(300L)
scrollUpButton.isGone = true
scrollUpButton.startAnimation(
AnimationUtils.loadAnimation(
this@PokemonListActivity,
R.anim.fade_out,
),
)
}
}

Expand Down Expand Up @@ -128,6 +182,10 @@ class PokemonListActivity :
}

private fun initListeners() {
binding.btnPokeListScrollUp.setOnClickListener {
binding.rvPokemonList.scrollToPosition(0)
binding.appBarPokemonList.setExpanded(true, true)
}
binding.root.setOnClickListener {
hideKeyboard()
}
Expand Down
4 changes: 4 additions & 0 deletions android/app/src/main/res/anim/fade_in.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="300"
android:fromAlpha="0.0"
android:toAlpha="1.0" />
4 changes: 4 additions & 0 deletions android/app/src/main/res/anim/fade_out.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="300"
android:fromAlpha="1.0"
android:toAlpha="0.0" />
5 changes: 5 additions & 0 deletions android/app/src/main/res/drawable/ic_arrow_up_24.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#FFFFFF" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">

<path android:fillColor="@android:color/white" android:pathData="M4,12l1.41,1.41L11,7.83V20h2V7.83l5.58,5.59L20,12l-8,-8 -8,8z"/>

</vector>
15 changes: 15 additions & 0 deletions android/app/src/main/res/layout/activity_pokemon_list.xml
Original file line number Diff line number Diff line change
Expand Up @@ -154,5 +154,20 @@
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/btn_poke_list_scroll_up"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:backgroundTint="@color/poke_grey_60"
android:contentDescription="Scroll Up"
android:gravity="center"
android:src="@drawable/ic_arrow_up_24"
android:visibility="gone"
app:fabCustomSize="44dp"
app:iconSize="12dp"
app:layout_anchor="@id/rv_pokemon_list"
app:layout_anchorGravity="bottom|end"
tools:visibility="visible" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</layout>
14 changes: 0 additions & 14 deletions android/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,19 +1,5 @@
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

buildscript {
repositories {
google()
mavenCentral()
gradlePluginPortal()
}

dependencies {
classpath(libs.kotlin.gradleplugin)
classpath(libs.agp)
classpath(libs.ktlint)
}
}

plugins {
alias(libs.plugins.android.application) apply false
alias(libs.plugins.android.library) apply false
Expand Down
3 changes: 0 additions & 3 deletions android/gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,10 @@ mockk = "1.13.9"
firebaseCrashlyticsBuildtools = "3.0.2"

[libraries]
agp = { module = "com.android.tools.build:gradle", version.ref = "agp" }

# kotlin
balloon = { module = "com.github.skydoves:balloon", version.ref = "balloon" }
kotlin = { group = "org.jetbrains.kotlin", name = "kotlin-stdlib", version.ref = "kotlin" }
kotlin-gradleplugin = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" }
kotlin-serialization-json = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-json", version.ref = "kotlinx-serialization-json" }

# koin
Expand Down Expand Up @@ -127,7 +125,6 @@ mockk = { module = "io.mockk:mockk", version.ref = "mockk" }
mockk-webserver = { module = "com.squareup.okhttp3:mockwebserver", version.ref = "okhttp" }

# third party
ktlint = { module = "org.jlleitschuh.gradle:ktlint-gradle", version.ref = "ktlint" }
okhttp-bom = { module = "com.squareup.okhttp3:okhttp-bom", version.ref = "okhttp" }
okhttp = { module = "com.squareup.okhttp3:okhttp" }
okhttp-logging-interceptor = { module = "com.squareup.okhttp3:logging-interceptor" }
Expand Down

0 comments on commit cfd8bae

Please sign in to comment.