mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-04-14 11:46:32 +00:00
remove viewpagerindicator library
This commit is contained in:
parent
699a31fd52
commit
ee9bbf731e
14 changed files with 203 additions and 2061 deletions
|
|
@ -157,7 +157,6 @@ dependencies {
|
||||||
|
|
||||||
// IAP Handling / Verification
|
// IAP Handling / Verification
|
||||||
implementation(libs.billing)
|
implementation(libs.billing)
|
||||||
implementation(libs.viewPagerIndicator) { exclude(group = "com.google.android") }
|
|
||||||
|
|
||||||
implementation(libs.coil.compose)
|
implementation(libs.coil.compose)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,13 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<item android:state_selected="true" android:drawable="@drawable/indicator_diamond_selected" />
|
<item android:state_selected="true">
|
||||||
<item android:drawable="@drawable/indicator_diamond_unselected" />
|
<layer-list>
|
||||||
</selector>
|
<item android:drawable="@drawable/indicator_diamond_selected" android:height="24dp" />
|
||||||
|
</layer-list>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layer-list>
|
||||||
|
<item android:drawable="@drawable/indicator_diamond_unselected" android:height="24dp" />
|
||||||
|
</layer-list>
|
||||||
|
</item>
|
||||||
|
</selector>
|
||||||
|
|
|
||||||
|
|
@ -1,50 +1,58 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_height="match_parent"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
tools:background="@color/brand">
|
|
||||||
<androidx.viewpager.widget.ViewPager
|
|
||||||
android:id="@+id/viewPager"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent" />
|
|
||||||
<RelativeLayout
|
|
||||||
android:orientation="vertical" android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:fitsSystemWindows="true">
|
android:layout_width="match_parent"
|
||||||
<com.viewpagerindicator.IconPageIndicator
|
tools:background="@color/brand">
|
||||||
android:id="@+id/view_pager_indicator"
|
|
||||||
android:layout_height="wrap_content"
|
<androidx.viewpager2.widget.ViewPager2
|
||||||
android:layout_width="fill_parent"
|
android:id="@+id/viewPager"
|
||||||
android:layout_alignParentBottom="true"
|
android:layout_width="match_parent"
|
||||||
android:layout_marginBottom="16dp" />
|
android:layout_height="match_parent" />
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:fitsSystemWindows="true">
|
||||||
|
|
||||||
|
<com.google.android.material.tabs.TabLayout
|
||||||
|
android:id="@+id/view_pager_indicator"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_alignParentBottom="true"
|
||||||
|
app:tabGravity="center"
|
||||||
|
app:tabBackground="@drawable/indicator_diamond"
|
||||||
|
android:background="@color/transparent"
|
||||||
|
app:tabIndicator="@null" />
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/skip_button"
|
android:text="@string/skip_button"
|
||||||
android:id="@+id/skipButton"
|
android:id="@+id/skipButton"
|
||||||
android:layout_alignParentBottom="false"
|
android:layout_alignParentBottom="false"
|
||||||
android:layout_alignParentEnd="true"
|
android:layout_alignParentEnd="true"
|
||||||
android:layout_marginEnd="6dp"
|
android:layout_marginEnd="6dp"
|
||||||
android:layout_alignParentTop="true"
|
android:layout_alignParentTop="true"
|
||||||
android:layout_marginTop="@dimen/spacing_small"
|
android:layout_marginTop="@dimen/spacing_small"
|
||||||
android:textColor="@android:color/white"
|
android:textColor="@android:color/white"
|
||||||
android:background="@color/transparent" />
|
android:background="@color/transparent" />
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/intro_finish_button"
|
android:text="@string/intro_finish_button"
|
||||||
android:id="@+id/finishButton"
|
android:id="@+id/finishButton"
|
||||||
android:layout_alignParentBottom="true"
|
android:layout_alignParentBottom="true"
|
||||||
android:layout_alignParentEnd="true"
|
android:layout_alignParentEnd="true"
|
||||||
android:layout_marginEnd="12dp"
|
android:layout_marginEnd="12dp"
|
||||||
android:layout_marginBottom="6dp"
|
android:layout_marginBottom="6dp"
|
||||||
android:background="@color/transparent"
|
android:background="@color/transparent"
|
||||||
android:textColor="@android:color/white"
|
android:textColor="@android:color/white"
|
||||||
android:textSize="16sp"
|
android:textSize="16sp"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
tools:visibility="visible"/>
|
tools:visibility="visible" />
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|
|
||||||
|
|
@ -1,44 +1,52 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_width="match_parent" android:layout_height="match_parent"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
android:orientation="vertical">
|
|
||||||
|
|
||||||
<com.habitrpg.android.habitica.ui.views.FadingViewPager
|
|
||||||
android:id="@+id/viewPager"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="0dp"
|
android:layout_height="match_parent"
|
||||||
android:layout_weight="1"/>
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<androidx.viewpager2.widget.ViewPager2
|
||||||
|
android:id="@+id/viewPager"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:layout_weight="1" />
|
||||||
|
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:id="@+id/bottomBar"
|
android:id="@+id/bottomBar"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="56dp"
|
|
||||||
android:background="@color/background_brand"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
android:elevation="8dp">
|
|
||||||
<com.viewpagerindicator.IconPageIndicator
|
|
||||||
android:id="@+id/view_pager_indicator"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="56dp"
|
||||||
android:layout_centerInParent="true" />
|
android:background="@color/background_brand"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:elevation="8dp">
|
||||||
|
|
||||||
|
<com.google.android.material.tabs.TabLayout
|
||||||
|
android:id="@+id/view_pager_indicator"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_centerInParent="true"
|
||||||
|
app:tabBackground="@drawable/indicator_diamond"
|
||||||
|
android:background="@color/transparent"
|
||||||
|
app:tabIndicator="@null" />
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:id="@+id/previousButton"
|
android:id="@+id/previousButton"
|
||||||
android:drawableStart="@drawable/back_arrow_disabled"
|
android:drawableStart="@drawable/back_arrow_disabled"
|
||||||
android:background="@color/transparent"
|
android:background="@color/transparent"
|
||||||
android:drawablePadding="12dp"
|
android:drawablePadding="12dp"
|
||||||
android:textColor="@color/white"/>
|
android:textColor="@color/white" />
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/next_button"
|
android:text="@string/next_button"
|
||||||
android:id="@+id/nextButton"
|
android:id="@+id/nextButton"
|
||||||
android:drawablePadding="12dp"
|
android:drawablePadding="12dp"
|
||||||
android:textColor="@color/white"
|
android:textColor="@color/white"
|
||||||
android:drawableEnd="@drawable/forward_arrow_enabled"
|
android:drawableEnd="@drawable/forward_arrow_enabled"
|
||||||
android:background="@color/transparent"
|
android:background="@color/transparent"
|
||||||
android:layout_alignParentEnd="true"/>
|
android:layout_alignParentEnd="true" />
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<resources>
|
<resources>
|
||||||
|
|
||||||
<!-- Application theme. -->
|
<!-- Application theme. -->
|
||||||
<style name="AppTheme" parent="Theme.Material3.DayNight">
|
<style name="AppTheme" parent="Theme.Material3.DynamicColors.DayNight">
|
||||||
<item name="android:listSeparatorTextViewStyle">@style/MyOwnListSeperatorTextViewStyle
|
<item name="android:listSeparatorTextViewStyle">@style/MyOwnListSeperatorTextViewStyle
|
||||||
</item>
|
</item>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -94,9 +94,7 @@ abstract class BaseActivity : AppCompatActivity() {
|
||||||
|
|
||||||
private val defaultNavigationBarStyle by lazy {
|
private val defaultNavigationBarStyle by lazy {
|
||||||
SystemBarStyle.auto(ContextCompat.getColor(this, R.color.white_50_alpha),
|
SystemBarStyle.auto(ContextCompat.getColor(this, R.color.white_50_alpha),
|
||||||
ContextCompat.getColor(this, R.color.black_50_alpha),
|
ContextCompat.getColor(this, R.color.black_50_alpha))
|
||||||
{ _ -> true}
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
internal var navigationBarStyle: SystemBarStyle? = null
|
internal var navigationBarStyle: SystemBarStyle? = null
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,30 +4,26 @@ import android.content.Intent
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
|
||||||
import androidx.activity.SystemBarStyle
|
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.core.content.res.ResourcesCompat
|
import androidx.core.content.res.ResourcesCompat
|
||||||
import androidx.core.view.WindowCompat
|
import androidx.core.view.WindowCompat
|
||||||
import androidx.core.view.WindowInsetsCompat
|
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.FragmentManager
|
|
||||||
import androidx.fragment.app.FragmentStatePagerAdapter
|
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.viewpager.widget.ViewPager
|
import androidx.viewpager2.adapter.FragmentStateAdapter
|
||||||
|
import androidx.viewpager2.widget.ViewPager2
|
||||||
|
import com.google.android.material.tabs.TabLayoutMediator
|
||||||
import com.habitrpg.android.habitica.R
|
import com.habitrpg.android.habitica.R
|
||||||
import com.habitrpg.android.habitica.data.ContentRepository
|
import com.habitrpg.android.habitica.data.ContentRepository
|
||||||
import com.habitrpg.android.habitica.databinding.ActivityIntroBinding
|
import com.habitrpg.android.habitica.databinding.ActivityIntroBinding
|
||||||
import com.habitrpg.android.habitica.extensions.setNavigationBarDarkIcons
|
import com.habitrpg.android.habitica.extensions.setNavigationBarDarkIcons
|
||||||
import com.habitrpg.android.habitica.ui.fragments.setup.IntroFragment
|
import com.habitrpg.android.habitica.ui.fragments.setup.IntroFragment
|
||||||
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
||||||
import com.viewpagerindicator.IconPagerAdapter
|
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class IntroActivity : BaseActivity(), View.OnClickListener, ViewPager.OnPageChangeListener {
|
class IntroActivity : BaseActivity() {
|
||||||
private lateinit var binding: ActivityIntroBinding
|
private lateinit var binding: ActivityIntroBinding
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
|
|
@ -46,10 +42,9 @@ class IntroActivity : BaseActivity(), View.OnClickListener, ViewPager.OnPageChan
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
setupIntro()
|
setupIntro()
|
||||||
binding.viewPagerIndicator.setViewPager(binding.viewPager)
|
|
||||||
|
|
||||||
binding.skipButton.setOnClickListener(this)
|
binding.skipButton.setOnClickListener { finishIntro() }
|
||||||
binding.finishButton.setOnClickListener(this)
|
binding.finishButton.setOnClickListener { finishIntro() }
|
||||||
|
|
||||||
lifecycleScope.launch(ExceptionHandler.coroutine()) {
|
lifecycleScope.launch(ExceptionHandler.coroutine()) {
|
||||||
contentRepository.retrieveContent()
|
contentRepository.retrieveContent()
|
||||||
|
|
@ -69,13 +64,17 @@ class IntroActivity : BaseActivity(), View.OnClickListener, ViewPager.OnPageChan
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupIntro() {
|
private fun setupIntro() {
|
||||||
binding.viewPager.adapter = PagerAdapter(supportFragmentManager)
|
setViewPagerAdapter()
|
||||||
|
binding.viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
|
||||||
binding.viewPager.addOnPageChangeListener(this)
|
override fun onPageSelected(position: Int) {
|
||||||
}
|
super.onPageSelected(position)
|
||||||
|
if (position == 2) {
|
||||||
override fun onClick(v: View) {
|
binding.finishButton.visibility = View.VISIBLE
|
||||||
finishIntro()
|
} else {
|
||||||
|
binding.finishButton.visibility = View.GONE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun finishIntro() {
|
private fun finishIntro() {
|
||||||
|
|
@ -87,50 +86,21 @@ class IntroActivity : BaseActivity(), View.OnClickListener, ViewPager.OnPageChan
|
||||||
finish()
|
finish()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onPageScrolled(
|
private fun setViewPagerAdapter() {
|
||||||
position: Int,
|
val fragmentManager = supportFragmentManager
|
||||||
positionOffset: Float,
|
val viewPagerAdapter = object : FragmentStateAdapter(fragmentManager, lifecycle) {
|
||||||
positionOffsetPixels: Int
|
override fun createFragment(position: Int): Fragment {
|
||||||
) { // no-on
|
val fragment = IntroFragment()
|
||||||
}
|
configureFragment(fragment, position)
|
||||||
|
return fragment
|
||||||
override fun onPageSelected(position: Int) {
|
}
|
||||||
if (position == 2) {
|
|
||||||
binding.finishButton.visibility = View.VISIBLE
|
override fun getItemCount(): Int {
|
||||||
} else {
|
return 3
|
||||||
binding.finishButton.visibility = View.GONE
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onPageScrollStateChanged(state: Int) { // no-on
|
|
||||||
}
|
|
||||||
|
|
||||||
private inner class PagerAdapter(fm: FragmentManager) :
|
|
||||||
FragmentStatePagerAdapter(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT), IconPagerAdapter {
|
|
||||||
override fun getItem(position: Int): Fragment {
|
|
||||||
val fragment = IntroFragment()
|
|
||||||
configureFragment(fragment, position)
|
|
||||||
return fragment
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getIconResId(index: Int): Int {
|
|
||||||
return R.drawable.indicator_diamond
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getCount(): Int {
|
|
||||||
return 3
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun instantiateItem(
|
|
||||||
container: ViewGroup,
|
|
||||||
position: Int
|
|
||||||
): Any {
|
|
||||||
val item = super.instantiateItem(container, position)
|
|
||||||
if (item is IntroFragment) {
|
|
||||||
configureFragment(item, position)
|
|
||||||
}
|
}
|
||||||
return item
|
|
||||||
}
|
}
|
||||||
|
binding.viewPager.adapter = viewPagerAdapter
|
||||||
|
TabLayoutMediator(binding.viewPagerIndicator, binding.viewPager) { tab, position -> }.attach()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun configureFragment(
|
private fun configureFragment(
|
||||||
|
|
|
||||||
|
|
@ -1,23 +1,19 @@
|
||||||
package com.habitrpg.android.habitica.ui.activities
|
package com.habitrpg.android.habitica.ui.activities
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
import android.os.Build
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
|
||||||
import android.view.WindowInsetsController
|
|
||||||
import android.view.inputmethod.InputMethodManager
|
import android.view.inputmethod.InputMethodManager
|
||||||
import androidx.appcompat.content.res.AppCompatResources
|
import androidx.appcompat.content.res.AppCompatResources
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.core.content.edit
|
import androidx.core.content.edit
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.FragmentManager
|
|
||||||
import androidx.fragment.app.FragmentPagerAdapter
|
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
import androidx.viewpager.widget.ViewPager
|
import androidx.viewpager2.adapter.FragmentStateAdapter
|
||||||
|
import androidx.viewpager2.widget.ViewPager2
|
||||||
|
import com.google.android.material.tabs.TabLayoutMediator
|
||||||
import com.habitrpg.android.habitica.R
|
import com.habitrpg.android.habitica.R
|
||||||
import com.habitrpg.android.habitica.data.ApiClient
|
import com.habitrpg.android.habitica.data.ApiClient
|
||||||
import com.habitrpg.android.habitica.data.InventoryRepository
|
import com.habitrpg.android.habitica.data.InventoryRepository
|
||||||
|
|
@ -30,10 +26,8 @@ import com.habitrpg.android.habitica.models.user.User
|
||||||
import com.habitrpg.android.habitica.ui.fragments.setup.AvatarSetupFragment
|
import com.habitrpg.android.habitica.ui.fragments.setup.AvatarSetupFragment
|
||||||
import com.habitrpg.android.habitica.ui.fragments.setup.TaskSetupFragment
|
import com.habitrpg.android.habitica.ui.fragments.setup.TaskSetupFragment
|
||||||
import com.habitrpg.android.habitica.ui.fragments.setup.WelcomeFragment
|
import com.habitrpg.android.habitica.ui.fragments.setup.WelcomeFragment
|
||||||
import com.habitrpg.common.habitica.extensions.isUsingNightModeResources
|
|
||||||
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
||||||
import com.habitrpg.common.habitica.helpers.launchCatching
|
import com.habitrpg.common.habitica.helpers.launchCatching
|
||||||
import com.viewpagerindicator.IconPagerAdapter
|
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.FlowPreview
|
import kotlinx.coroutines.FlowPreview
|
||||||
import kotlinx.coroutines.flow.debounce
|
import kotlinx.coroutines.flow.debounce
|
||||||
|
|
@ -44,7 +38,7 @@ import javax.inject.Inject
|
||||||
import kotlin.time.Duration.Companion.milliseconds
|
import kotlin.time.Duration.Companion.milliseconds
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class SetupActivity : BaseActivity(), ViewPager.OnPageChangeListener {
|
class SetupActivity : BaseActivity() {
|
||||||
private lateinit var binding: ActivitySetupBinding
|
private lateinit var binding: ActivitySetupBinding
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
|
|
@ -66,7 +60,7 @@ class SetupActivity : BaseActivity(), ViewPager.OnPageChangeListener {
|
||||||
private val isLastPage: Boolean
|
private val isLastPage: Boolean
|
||||||
get() =
|
get() =
|
||||||
binding.viewPager.adapter == null || binding.viewPager.currentItem == (
|
binding.viewPager.adapter == null || binding.viewPager.currentItem == (
|
||||||
binding.viewPager.adapter?.count
|
binding.viewPager.adapter?.itemCount
|
||||||
?: 0
|
?: 0
|
||||||
) - 1
|
) - 1
|
||||||
|
|
||||||
|
|
@ -103,7 +97,7 @@ class SetupActivity : BaseActivity(), ViewPager.OnPageChangeListener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.viewPager.disableFading = true
|
binding.viewPager.isUserInputEnabled = false
|
||||||
|
|
||||||
binding.previousButton.setOnClickListener { previousClicked() }
|
binding.previousButton.setOnClickListener { previousClicked() }
|
||||||
binding.nextButton.setOnClickListener { nextClicked() }
|
binding.nextButton.setOnClickListener { nextClicked() }
|
||||||
|
|
@ -115,12 +109,26 @@ class SetupActivity : BaseActivity(), ViewPager.OnPageChangeListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupViewpager() {
|
private fun setupViewpager() {
|
||||||
val fragmentManager = supportFragmentManager
|
setViewPagerAdapter()
|
||||||
|
binding.viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
|
||||||
binding.viewPager.adapter = ViewPageAdapter(fragmentManager)
|
override fun onPageSelected(position: Int) {
|
||||||
|
super.onPageSelected(position)
|
||||||
binding.viewPager.addOnPageChangeListener(this)
|
when {
|
||||||
binding.viewPagerIndicator.setViewPager(binding.viewPager)
|
position == 0 -> {
|
||||||
|
setPreviousButtonEnabled(false)
|
||||||
|
binding.nextButton.text = getString(R.string.next_button)
|
||||||
|
}
|
||||||
|
isLastPage -> {
|
||||||
|
setPreviousButtonEnabled(true)
|
||||||
|
binding.nextButton.text = getString(R.string.finish)
|
||||||
|
}
|
||||||
|
else -> {
|
||||||
|
setPreviousButtonEnabled(true)
|
||||||
|
binding.nextButton.text = getString(R.string.next_button)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun nextClicked() {
|
private fun nextClicked() {
|
||||||
|
|
@ -147,7 +155,7 @@ class SetupActivity : BaseActivity(), ViewPager.OnPageChangeListener {
|
||||||
} else if (binding.viewPager.currentItem == 0) {
|
} else if (binding.viewPager.currentItem == 0) {
|
||||||
confirmNames(welcomeFragment?.displayName ?: "", welcomeFragment?.username ?: "")
|
confirmNames(welcomeFragment?.displayName ?: "", welcomeFragment?.username ?: "")
|
||||||
|
|
||||||
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as? InputMethodManager
|
val imm = getSystemService(INPUT_METHOD_SERVICE) as? InputMethodManager
|
||||||
imm?.hideSoftInputFromWindow(currentFocus?.windowToken, 0)
|
imm?.hideSoftInputFromWindow(currentFocus?.windowToken, 0)
|
||||||
}
|
}
|
||||||
binding.viewPager.currentItem = binding.viewPager.currentItem + 1
|
binding.viewPager.currentItem = binding.viewPager.currentItem + 1
|
||||||
|
|
@ -187,34 +195,6 @@ class SetupActivity : BaseActivity(), ViewPager.OnPageChangeListener {
|
||||||
binding.nextButton.setCompoundDrawablesWithIntrinsicBounds(null, null, rightDrawable, null)
|
binding.nextButton.setCompoundDrawablesWithIntrinsicBounds(null, null, rightDrawable, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onPageScrolled(
|
|
||||||
position: Int,
|
|
||||||
positionOffset: Float,
|
|
||||||
positionOffsetPixels: Int
|
|
||||||
) =
|
|
||||||
Unit
|
|
||||||
|
|
||||||
override fun onPageSelected(position: Int) {
|
|
||||||
when {
|
|
||||||
position == 0 -> {
|
|
||||||
this.setPreviousButtonEnabled(false)
|
|
||||||
binding.nextButton.text = this.getString(R.string.next_button)
|
|
||||||
}
|
|
||||||
|
|
||||||
isLastPage -> {
|
|
||||||
this.setPreviousButtonEnabled(true)
|
|
||||||
binding.nextButton.text = this.getString(R.string.finish)
|
|
||||||
}
|
|
||||||
|
|
||||||
else -> {
|
|
||||||
this.setPreviousButtonEnabled(true)
|
|
||||||
binding.nextButton.text = this.getString(R.string.next_button)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onPageScrollStateChanged(state: Int) = Unit
|
|
||||||
|
|
||||||
private var hasCompleted = false
|
private var hasCompleted = false
|
||||||
|
|
||||||
private fun onUserReceived(user: User?) {
|
private fun onUserReceived(user: User?) {
|
||||||
|
|
@ -255,67 +235,41 @@ class SetupActivity : BaseActivity(), ViewPager.OnPageChangeListener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private inner class ViewPageAdapter(fm: FragmentManager) :
|
private fun setViewPagerAdapter() {
|
||||||
FragmentPagerAdapter(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT), IconPagerAdapter {
|
val fragmentManager = supportFragmentManager
|
||||||
override fun getItem(position: Int): Fragment {
|
val viewPagerAdapter = object : FragmentStateAdapter(fragmentManager, lifecycle) {
|
||||||
return when (position) {
|
override fun createFragment(position: Int): Fragment {
|
||||||
1 -> {
|
return when (position) {
|
||||||
val fragment = AvatarSetupFragment()
|
1 -> {
|
||||||
fragment.activity = this@SetupActivity
|
val fragment = AvatarSetupFragment()
|
||||||
fragment.setUser(user)
|
fragment.activity = this@SetupActivity
|
||||||
fragment.width = binding.viewPager.width
|
fragment.setUser(user)
|
||||||
avatarSetupFragment = fragment
|
fragment.width = binding.viewPager.width
|
||||||
fragment
|
avatarSetupFragment = fragment
|
||||||
}
|
fragment
|
||||||
|
}
|
||||||
|
|
||||||
2 -> {
|
2 -> {
|
||||||
val fragment = TaskSetupFragment()
|
val fragment = TaskSetupFragment()
|
||||||
fragment.setUser(user)
|
fragment.setUser(user)
|
||||||
taskSetupFragment = fragment
|
taskSetupFragment = fragment
|
||||||
fragment
|
fragment
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
val fragment = WelcomeFragment()
|
val fragment = WelcomeFragment()
|
||||||
welcomeFragment = fragment
|
welcomeFragment = fragment
|
||||||
welcomeFragment?.onNameValid = { setNextButtonEnabled(it == true) }
|
welcomeFragment?.onNameValid = { setNextButtonEnabled(it == true) }
|
||||||
fragment
|
fragment
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
override fun instantiateItem(
|
override fun getItemCount(): Int {
|
||||||
container: ViewGroup,
|
return 3
|
||||||
position: Int
|
|
||||||
): Any {
|
|
||||||
val item = super.instantiateItem(container, position)
|
|
||||||
when (item) {
|
|
||||||
is AvatarSetupFragment -> {
|
|
||||||
avatarSetupFragment = item
|
|
||||||
item.activity = this@SetupActivity
|
|
||||||
item.setUser(user)
|
|
||||||
item.width = binding.viewPager.width
|
|
||||||
}
|
|
||||||
|
|
||||||
is TaskSetupFragment -> {
|
|
||||||
taskSetupFragment = item
|
|
||||||
item.setUser(user)
|
|
||||||
}
|
|
||||||
|
|
||||||
is WelcomeFragment -> {
|
|
||||||
welcomeFragment = item
|
|
||||||
item.onNameValid = { setNextButtonEnabled(it == true) }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return item
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getCount(): Int {
|
|
||||||
return 3
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getIconResId(index: Int): Int {
|
|
||||||
return R.drawable.indicator_diamond
|
|
||||||
}
|
}
|
||||||
|
binding.viewPager.adapter = viewPagerAdapter
|
||||||
|
TabLayoutMediator(binding.viewPagerIndicator, binding.viewPager) { tab, position -> }.attach()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -100,7 +100,7 @@ abstract class BaseMainFragment<VB : ViewBinding> : BaseFragment<VB>() {
|
||||||
view?.systemUiVisibility
|
view?.systemUiVisibility
|
||||||
window.setNavigationBarDarkIcons(false)
|
window.setNavigationBarDarkIcons(false)
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||||
window.isNavigationBarContrastEnforced = false
|
window.isNavigationBarContrastEnforced = true
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
windowInsetsController.isAppearanceLightNavigationBars = requireActivity().isUsingNightModeResources()
|
windowInsetsController.isAppearanceLightNavigationBars = requireActivity().isUsingNightModeResources()
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ import kotlinx.coroutines.flow.firstOrNull
|
||||||
import kotlinx.coroutines.flow.map
|
import kotlinx.coroutines.flow.map
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
import androidx.core.graphics.drawable.toDrawable
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class WelcomeFragment : BaseFragment<FragmentWelcomeBinding>() {
|
class WelcomeFragment : BaseFragment<FragmentWelcomeBinding>() {
|
||||||
|
|
@ -47,17 +48,14 @@ class WelcomeFragment : BaseFragment<FragmentWelcomeBinding>() {
|
||||||
|
|
||||||
private val checkmarkIcon: Drawable by lazy {
|
private val checkmarkIcon: Drawable by lazy {
|
||||||
context?.let {
|
context?.let {
|
||||||
BitmapDrawable(
|
HabiticaIconsHelper.imageOfCheckmark(
|
||||||
resources,
|
ContextCompat.getColor(it, R.color.green_50),
|
||||||
HabiticaIconsHelper.imageOfCheckmark(
|
1f
|
||||||
ContextCompat.getColor(it, R.color.green_50),
|
).toDrawable(resources)
|
||||||
1f
|
|
||||||
)
|
|
||||||
)
|
|
||||||
} ?: VectorDrawable()
|
} ?: VectorDrawable()
|
||||||
}
|
}
|
||||||
private val alertIcon: Drawable by lazy {
|
private val alertIcon: Drawable by lazy {
|
||||||
BitmapDrawable(resources, HabiticaIconsHelper.imageOfAlertIcon())
|
HabiticaIconsHelper.imageOfAlertIcon().toDrawable(resources)
|
||||||
}
|
}
|
||||||
val username: String
|
val username: String
|
||||||
get() = binding?.usernameEditText?.text?.toString() ?: ""
|
get() = binding?.usernameEditText?.text?.toString() ?: ""
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -3,7 +3,6 @@ package com.habitrpg.android.habitica.ui.views;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.Canvas;
|
import android.graphics.Canvas;
|
||||||
import android.graphics.Color;
|
|
||||||
import android.graphics.RectF;
|
import android.graphics.RectF;
|
||||||
|
|
||||||
import androidx.annotation.ColorInt;
|
import androidx.annotation.ColorInt;
|
||||||
|
|
@ -470,44 +469,6 @@ public class HabiticaIconsHelper {
|
||||||
return imageOfCaret;
|
return imageOfCaret;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Bitmap imageOfRageStrikeInactive = null;
|
|
||||||
|
|
||||||
public static Bitmap imageOfRageStrikeInactive() {
|
|
||||||
if (imageOfRageStrikeInactive != null)
|
|
||||||
return imageOfRageStrikeInactive;
|
|
||||||
|
|
||||||
imageOfRageStrikeInactive = Bitmap.createBitmap(scaleSize(63), scaleSize(82), Bitmap.Config.ARGB_8888);
|
|
||||||
Canvas canvas = new Canvas(imageOfRageStrikeInactive);
|
|
||||||
canvas.scale(displayDensity, displayDensity);
|
|
||||||
HabiticaIcons.drawRageStrikeInactive(canvas);
|
|
||||||
|
|
||||||
return imageOfRageStrikeInactive;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Bitmap imageOfRageStrikeActive(Context context, Bitmap rageStrikeNPC) {
|
|
||||||
Bitmap imageOfRageStrikeActive = Bitmap.createBitmap(scaleSize(63), scaleSize(82), Bitmap.Config.ARGB_8888);
|
|
||||||
Canvas canvas = new Canvas(imageOfRageStrikeActive);
|
|
||||||
canvas.scale(displayDensity, displayDensity);
|
|
||||||
HabiticaIcons.drawRageStrikeActive(canvas, context, rageStrikeNPC);
|
|
||||||
|
|
||||||
return imageOfRageStrikeActive;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Bitmap imageOfRage = null;
|
|
||||||
|
|
||||||
public static Bitmap imageOfRage() {
|
|
||||||
if (imageOfRage != null)
|
|
||||||
return imageOfRage;
|
|
||||||
|
|
||||||
int size = scaleSize(18);
|
|
||||||
imageOfRage = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
|
|
||||||
Canvas canvas = new Canvas(imageOfRage);
|
|
||||||
canvas.scale(displayDensity, displayDensity);
|
|
||||||
HabiticaIcons.drawRage(canvas);
|
|
||||||
|
|
||||||
return imageOfRage;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Bitmap imageOfLocked(@ColorInt int lockColor) {
|
public static Bitmap imageOfLocked(@ColorInt int lockColor) {
|
||||||
return imageOfLocked(lockColor, 15, 17);
|
return imageOfLocked(lockColor, 15, 17);
|
||||||
}
|
}
|
||||||
|
|
@ -670,15 +631,6 @@ public class HabiticaIconsHelper {
|
||||||
return imageOfHabitControlMinus;
|
return imageOfHabitControlMinus;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Bitmap imageOfGuildCrest(boolean isOwner, boolean isPublic, float memberCount, String memberCountLabel) {
|
|
||||||
Bitmap imageOfGuildCrest = Bitmap.createBitmap(scaleSize(40), scaleSize(38), Bitmap.Config.ARGB_8888);
|
|
||||||
Canvas canvas = new Canvas(imageOfGuildCrest);
|
|
||||||
canvas.scale(displayDensity, displayDensity);
|
|
||||||
HabiticaIcons.drawGuildCrest(canvas, isOwner, isPublic, memberCount, memberCountLabel);
|
|
||||||
|
|
||||||
return imageOfGuildCrest;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Bitmap imageOfGuildCrestMedium(float memberCount) {
|
public static Bitmap imageOfGuildCrestMedium(float memberCount) {
|
||||||
Bitmap imageOfGuildCrestMedium = Bitmap.createBitmap(scaleSize(30), scaleSize(34), Bitmap.Config.ARGB_8888);
|
Bitmap imageOfGuildCrestMedium = Bitmap.createBitmap(scaleSize(30), scaleSize(34), Bitmap.Config.ARGB_8888);
|
||||||
Canvas canvas = new Canvas(imageOfGuildCrestMedium);
|
Canvas canvas = new Canvas(imageOfGuildCrestMedium);
|
||||||
|
|
@ -688,12 +640,4 @@ public class HabiticaIconsHelper {
|
||||||
return imageOfGuildCrestMedium;
|
return imageOfGuildCrestMedium;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Bitmap imageOfGuildCrestSmall(float memberCount) {
|
|
||||||
Bitmap imageOfGuildCrestSmall = Bitmap.createBitmap(scaleSize(16), scaleSize(16), Bitmap.Config.ARGB_8888);
|
|
||||||
Canvas canvas = new Canvas(imageOfGuildCrestSmall);
|
|
||||||
canvas.scale(displayDensity, displayDensity);
|
|
||||||
HabiticaIcons.drawGuildCrestSmall(canvas, memberCount);
|
|
||||||
|
|
||||||
return imageOfGuildCrestSmall;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
android.enableJetifier=true
|
|
||||||
android.useAndroidX=true
|
android.useAndroidX=true
|
||||||
android.debug.obsoleteApi=true
|
android.debug.obsoleteApi=true
|
||||||
org.gradle.configureondemand=true
|
org.gradle.configureondemand=true
|
||||||
|
|
@ -11,4 +10,4 @@ android.nonTransitiveRClass=false
|
||||||
android.nonFinalResIds=false
|
android.nonFinalResIds=false
|
||||||
android.enableR8.fullMode=false
|
android.enableR8.fullMode=false
|
||||||
org.gradle.caching=true
|
org.gradle.caching=true
|
||||||
org.gradle.parallel=true
|
org.gradle.parallel=true
|
||||||
|
|
|
||||||
|
|
@ -22,14 +22,14 @@ coordinatorlayout = "1.2.0"
|
||||||
coreSplashscreen = "1.1.0-rc01"
|
coreSplashscreen = "1.1.0-rc01"
|
||||||
core_ktx = "1.15.0"
|
core_ktx = "1.15.0"
|
||||||
coroutines = "1.9.0"
|
coroutines = "1.9.0"
|
||||||
crashlytics = "3.0.2"
|
crashlytics = "3.0.3"
|
||||||
credentials = "1.3.0"
|
credentials = "1.3.0"
|
||||||
daggerhilt = "2.55"
|
daggerhilt = "2.55"
|
||||||
desuggar = "2.1.4"
|
desuggar = "2.1.4"
|
||||||
detekt = "1.19.0"
|
detekt = "1.19.0"
|
||||||
deviceNames = "2.1.1"
|
deviceNames = "2.1.1"
|
||||||
firebase-perf = "1.4.2"
|
firebase-perf = "1.4.2"
|
||||||
firebase_bom = "33.8.0"
|
firebase_bom = "33.9.0"
|
||||||
flexbox = "3.0.0"
|
flexbox = "3.0.0"
|
||||||
fragmentKtx = "1.8.5"
|
fragmentKtx = "1.8.5"
|
||||||
fragmentTesting = "1.8.5"
|
fragmentTesting = "1.8.5"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue