mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-04-14 11:46:32 +00:00
show new loading view in more places
This commit is contained in:
parent
90524ea4b9
commit
fd19fe6ede
48 changed files with 365 additions and 266 deletions
|
|
@ -116,7 +116,7 @@ dependencies {
|
|||
implementation "com.google.accompanist:accompanist-systemuicontroller:$accompanist_version"
|
||||
implementation 'com.google.android.play:core:1.10.3'
|
||||
|
||||
implementation 'androidx.activity:activity-compose:1.7.2'
|
||||
implementation 'androidx.activity:activity-compose:1.8.0'
|
||||
implementation "androidx.compose.runtime:runtime-livedata:$compose_version"
|
||||
implementation "androidx.compose.material:material:$compose_version"
|
||||
implementation "androidx.compose.animation:animation:$compose_version"
|
||||
|
|
|
|||
|
|
@ -82,6 +82,11 @@
|
|||
android:layout_height="0dp"
|
||||
android:layout_weight="1" />
|
||||
|
||||
<androidx.compose.ui.platform.ComposeView
|
||||
android:id="@+id/progress_view"
|
||||
android:layout_width="60dp"
|
||||
android:layout_height="60dp" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/restart_button"
|
||||
style="@style/HabiticaButton.Maroon"
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ import com.habitrpg.android.habitica.databinding.MountImageviewBinding
|
|||
import com.habitrpg.android.habitica.models.inventory.Food
|
||||
import com.habitrpg.android.habitica.models.inventory.Pet
|
||||
import com.habitrpg.android.habitica.ui.activities.BaseActivity
|
||||
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.views.BackgroundScene
|
||||
import com.habitrpg.android.habitica.ui.views.SnackbarActivity
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ import com.habitrpg.android.habitica.databinding.PetImageviewBinding
|
|||
import com.habitrpg.android.habitica.models.inventory.Egg
|
||||
import com.habitrpg.android.habitica.models.inventory.HatchingPotion
|
||||
import com.habitrpg.android.habitica.models.user.Items
|
||||
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.views.BackgroundScene
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||
import com.habitrpg.common.habitica.extensions.layoutInflater
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ import androidx.savedstate.setViewTreeSavedStateRegistryOwner
|
|||
import com.habitrpg.android.habitica.HabiticaBaseApplication
|
||||
import com.habitrpg.android.habitica.databinding.MountImageviewBinding
|
||||
import com.habitrpg.android.habitica.ui.activities.BaseActivity
|
||||
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.views.BackgroundScene
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||
import com.habitrpg.common.habitica.extensions.dpToPx
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ import com.habitrpg.android.habitica.databinding.PetImageviewBinding
|
|||
import com.habitrpg.android.habitica.models.inventory.Food
|
||||
import com.habitrpg.android.habitica.models.inventory.Pet
|
||||
import com.habitrpg.android.habitica.ui.activities.BaseActivity
|
||||
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.views.BackgroundScene
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||
import com.habitrpg.common.habitica.extensions.dpToPx
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ import android.widget.FrameLayout
|
|||
import android.widget.RelativeLayout
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.data.InventoryRepository
|
||||
|
|
@ -24,16 +23,14 @@ import com.habitrpg.android.habitica.helpers.HitType
|
|||
import com.habitrpg.android.habitica.helpers.ReviewManager
|
||||
import com.habitrpg.android.habitica.ui.fragments.purchases.EventOutcomeSubscriptionBottomSheetFragment
|
||||
import com.habitrpg.android.habitica.ui.fragments.purchases.EventOutcomeSubscriptionBottomSheetFragment.Companion.EVENT_ARMOIRE_OPENED
|
||||
import com.habitrpg.android.habitica.ui.fragments.purchases.SubscriptionBottomSheetFragment
|
||||
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
||||
import com.habitrpg.android.habitica.ui.views.ads.AdButton
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaBottomSheetDialog
|
||||
import com.habitrpg.android.habitica.ui.views.progress.HabiticaCircularProgressView
|
||||
import com.habitrpg.common.habitica.views.HabiticaCircularProgressView
|
||||
import com.habitrpg.common.habitica.extensions.dpToPx
|
||||
import com.habitrpg.common.habitica.extensions.loadImage
|
||||
import com.habitrpg.common.habitica.helpers.Animations
|
||||
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
||||
import com.habitrpg.common.habitica.helpers.MainNavigationController
|
||||
import com.habitrpg.common.habitica.helpers.launchCatching
|
||||
import com.plattysoft.leonids.ParticleSystem
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ import com.habitrpg.android.habitica.helpers.EventCategory
|
|||
import com.habitrpg.android.habitica.helpers.HitType
|
||||
import com.habitrpg.common.habitica.helpers.MainNavigationController
|
||||
import com.habitrpg.android.habitica.helpers.PurchaseHandler
|
||||
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
||||
import com.habitrpg.android.habitica.ui.views.CurrencyText
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaButton
|
||||
|
|
|
|||
|
|
@ -32,6 +32,8 @@ import com.habitrpg.common.habitica.extensions.fromHtml
|
|||
import com.habitrpg.common.habitica.helpers.Animations
|
||||
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
||||
import com.habitrpg.common.habitica.helpers.launchCatching
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.common.habitica.views.HabiticaCircularProgressView
|
||||
import com.plattysoft.leonids.ParticleSystem
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import kotlinx.coroutines.MainScope
|
||||
|
|
@ -144,8 +146,14 @@ class DeathActivity : BaseActivity(), SnackbarActivity {
|
|||
putLong("last_sub_revive", Date().time)
|
||||
}
|
||||
lifecycleScope.launchCatching {
|
||||
delay(300)
|
||||
binding.reviveSubscriberWrapper.startAnimation(Animations.fadeOutAnimation())
|
||||
binding.restartButton.startAnimation(Animations.fadeOutAnimation())
|
||||
binding.progressView.startAnimation(Animations.fadeInAnimation())
|
||||
binding.progressView.setContent {
|
||||
HabiticaTheme {
|
||||
HabiticaCircularProgressView()
|
||||
}
|
||||
}
|
||||
}
|
||||
lifecycleScope.launch(ExceptionHandler.coroutine()) {
|
||||
userRepository.updateUser("stats.hp", 1)
|
||||
|
|
@ -162,6 +170,14 @@ class DeathActivity : BaseActivity(), SnackbarActivity {
|
|||
|
||||
binding.restartButton.setOnClickListener {
|
||||
binding.restartButton.isEnabled = false
|
||||
binding.reviveSubscriberWrapper.startAnimation(Animations.fadeOutAnimation())
|
||||
binding.restartButton.startAnimation(Animations.fadeOutAnimation())
|
||||
binding.progressView.startAnimation(Animations.fadeInAnimation())
|
||||
binding.progressView.setContent {
|
||||
HabiticaTheme {
|
||||
HabiticaCircularProgressView()
|
||||
}
|
||||
}
|
||||
lifecycleScope.launch(ExceptionHandler.coroutine()) {
|
||||
val brokenItem = userRepository.revive()
|
||||
if (brokenItem != null) {
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ import com.habitrpg.android.habitica.models.user.Permission
|
|||
import com.habitrpg.android.habitica.models.user.Stats
|
||||
import com.habitrpg.android.habitica.ui.adapter.social.AchievementProfileAdapter
|
||||
import com.habitrpg.android.habitica.ui.fragments.ReportBottomSheetFragment
|
||||
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.views.AppHeaderView
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.SnackbarDisplayType
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import android.app.NotificationChannel
|
|||
import android.app.NotificationManager
|
||||
import android.appwidget.AppWidgetManager
|
||||
import android.content.ComponentName
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageManager
|
||||
import android.content.res.Configuration
|
||||
|
|
@ -18,7 +17,6 @@ import androidx.activity.result.contract.ActivityResultContracts
|
|||
import androidx.activity.viewModels
|
||||
import androidx.annotation.RequiresApi
|
||||
import androidx.appcompat.app.ActionBarDrawerToggle
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.height
|
||||
|
|
@ -30,14 +28,12 @@ import androidx.compose.runtime.livedata.observeAsState
|
|||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.platform.ComposeView
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.core.view.children
|
||||
import androidx.core.view.setPadding
|
||||
import androidx.drawerlayout.widget.DrawerLayout
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.lifecycle.setViewTreeLifecycleOwner
|
||||
import androidx.navigation.NavDestination
|
||||
import androidx.navigation.findNavController
|
||||
import androidx.navigation.fragment.NavHostFragment
|
||||
|
|
@ -68,17 +64,17 @@ import com.habitrpg.android.habitica.interactors.CheckClassSelectionUseCase
|
|||
import com.habitrpg.android.habitica.interactors.DisplayItemDropUseCase
|
||||
import com.habitrpg.android.habitica.interactors.NotifyUserUseCase
|
||||
import com.habitrpg.android.habitica.interactors.ShareAvatarUseCase
|
||||
import com.habitrpg.android.habitica.interactors.SharePetUseCase
|
||||
import com.habitrpg.android.habitica.models.TutorialStep
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import com.habitrpg.android.habitica.models.user.UserQuestStatus
|
||||
import com.habitrpg.android.habitica.ui.TutorialView
|
||||
import com.habitrpg.android.habitica.ui.fragments.NavigationDrawerFragment
|
||||
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.theme.colors
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.viewmodels.MainActivityViewModel
|
||||
import com.habitrpg.android.habitica.ui.viewmodels.NotificationsViewModel
|
||||
import com.habitrpg.android.habitica.ui.views.AppHeaderView
|
||||
import com.habitrpg.android.habitica.ui.views.ComposableAvatarView
|
||||
import com.habitrpg.common.habitica.views.ComposableAvatarView
|
||||
import com.habitrpg.android.habitica.ui.views.GroupPlanMemberList
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaButton
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
|
||||
|
|
|
|||
|
|
@ -50,7 +50,10 @@ import com.habitrpg.android.habitica.models.tasks.Task
|
|||
import com.habitrpg.android.habitica.models.tasks.TaskGroupPlan
|
||||
import com.habitrpg.android.habitica.ui.helpers.ToolbarColorHelper
|
||||
import com.habitrpg.android.habitica.ui.helpers.dismissKeyboard
|
||||
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.theme.colors
|
||||
import com.habitrpg.android.habitica.ui.theme.textPrimaryFor
|
||||
import com.habitrpg.android.habitica.ui.theme.windowBackgroundFor
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
||||
import com.habitrpg.android.habitica.ui.viewmodels.TaskFormViewModel
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||
|
|
|
|||
|
|
@ -50,7 +50,13 @@ import com.habitrpg.android.habitica.data.UserRepository
|
|||
import com.habitrpg.common.habitica.helpers.MainNavigationController
|
||||
import com.habitrpg.android.habitica.helpers.TaskDescriptionBuilder
|
||||
import com.habitrpg.android.habitica.models.members.Member
|
||||
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.theme.colors
|
||||
import com.habitrpg.android.habitica.ui.theme.contentBackgroundFor
|
||||
import com.habitrpg.android.habitica.ui.theme.primaryBackgroundFor
|
||||
import com.habitrpg.android.habitica.ui.theme.textPrimaryFor
|
||||
import com.habitrpg.android.habitica.ui.theme.textSecondaryFor
|
||||
import com.habitrpg.android.habitica.ui.theme.windowBackgroundFor
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.viewmodels.BaseViewModel
|
||||
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
||||
import com.habitrpg.android.habitica.ui.views.CompletedAt
|
||||
|
|
|
|||
|
|
@ -35,7 +35,8 @@ import com.habitrpg.common.habitica.helpers.MainNavigationController
|
|||
import com.habitrpg.android.habitica.models.inventory.Equipment
|
||||
import com.habitrpg.android.habitica.ui.activities.BaseActivity
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
|
||||
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.theme.colors
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
||||
import com.habitrpg.android.habitica.ui.views.SegmentedControl
|
||||
import com.habitrpg.android.habitica.ui.views.equipment.AvatarCustomizationOverviewView
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ import com.habitrpg.android.habitica.ui.activities.GiftGemsActivity
|
|||
import com.habitrpg.android.habitica.ui.fragments.BaseFragment
|
||||
import com.habitrpg.android.habitica.ui.fragments.PromoInfoFragment
|
||||
import com.habitrpg.android.habitica.ui.helpers.dismissKeyboard
|
||||
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||
import com.habitrpg.android.habitica.ui.views.promo.BirthdayBanner
|
||||
import com.habitrpg.common.habitica.extensions.isUsingNightModeResources
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ import com.habitrpg.android.habitica.models.user.User
|
|||
import com.habitrpg.android.habitica.ui.activities.GiftSubscriptionActivity
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseFragment
|
||||
import com.habitrpg.android.habitica.ui.fragments.PromoInfoFragment
|
||||
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||
import com.habitrpg.android.habitica.ui.views.promo.BirthdayBanner
|
||||
import com.habitrpg.android.habitica.ui.views.subscriptions.SubscriptionOptionView
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ import com.habitrpg.android.habitica.ui.activities.MainActivity
|
|||
import com.habitrpg.android.habitica.ui.fragments.BaseFragment
|
||||
import com.habitrpg.android.habitica.ui.fragments.inventory.items.ItemDialogFragment
|
||||
import com.habitrpg.android.habitica.ui.helpers.dismissKeyboard
|
||||
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.viewHolders.GroupMemberViewHolder
|
||||
import com.habitrpg.android.habitica.ui.viewmodels.PartyViewModel
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
|
||||
|
|
|
|||
|
|
@ -55,7 +55,8 @@ import com.habitrpg.android.habitica.databinding.FragmentComposeBinding
|
|||
import com.habitrpg.common.habitica.helpers.MainNavigationController
|
||||
import com.habitrpg.android.habitica.models.invitations.InviteResponse
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseFragment
|
||||
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.theme.colors
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.viewmodels.BaseViewModel
|
||||
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
||||
import com.habitrpg.android.habitica.ui.views.LoadingButtonState
|
||||
|
|
|
|||
|
|
@ -60,13 +60,14 @@ import com.habitrpg.android.habitica.helpers.HitType
|
|||
import com.habitrpg.android.habitica.models.invitations.InviteResponse
|
||||
import com.habitrpg.android.habitica.models.members.Member
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseFragment
|
||||
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.theme.colors
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.viewmodels.BaseViewModel
|
||||
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
||||
import com.habitrpg.android.habitica.ui.views.LoadingButton
|
||||
import com.habitrpg.android.habitica.ui.views.LoadingButtonState
|
||||
import com.habitrpg.android.habitica.ui.views.LoadingButtonType
|
||||
import com.habitrpg.android.habitica.ui.views.progress.HabiticaCircularProgressView
|
||||
import com.habitrpg.common.habitica.views.HabiticaCircularProgressView
|
||||
import com.habitrpg.android.habitica.ui.views.progress.HabiticaPullRefreshIndicator
|
||||
import com.habitrpg.android.habitica.ui.views.social.PartySeekingListItem
|
||||
import com.habitrpg.common.habitica.helpers.launchCatching
|
||||
|
|
|
|||
|
|
@ -1,222 +1,83 @@
|
|||
package com.habitrpg.android.habitica.ui.theme
|
||||
|
||||
import androidx.compose.foundation.isSystemInDarkTheme
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material.MaterialTheme
|
||||
import androidx.compose.material.Shapes
|
||||
import androidx.compose.material.Typography
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalLayoutDirection
|
||||
import androidx.compose.ui.res.colorResource
|
||||
import androidx.compose.ui.text.TextStyle
|
||||
import androidx.compose.ui.text.font.FontFamily
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import androidx.core.content.ContextCompat
|
||||
import com.google.accompanist.themeadapter.material.createMdcTheme
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.models.tasks.Task
|
||||
import com.habitrpg.common.habitica.extensions.getThemeColor
|
||||
import com.habitrpg.common.habitica.theme.HabiticaColors
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
|
||||
|
||||
@Composable
|
||||
fun HabiticaTheme(
|
||||
content: @Composable () -> Unit
|
||||
) {
|
||||
val context = LocalContext.current
|
||||
val layoutDirection = LocalLayoutDirection.current
|
||||
val (colors, _, _) = createMdcTheme(
|
||||
context = context,
|
||||
layoutDirection = layoutDirection,
|
||||
setTextColors = true
|
||||
)
|
||||
MaterialTheme(
|
||||
colors = colors ?: MaterialTheme.colors,
|
||||
typography = Typography(
|
||||
defaultFontFamily = FontFamily.Default,
|
||||
h1 = TextStyle(
|
||||
fontWeight = FontWeight.Medium,
|
||||
fontSize = 20.sp,
|
||||
letterSpacing = (0.05).sp
|
||||
),
|
||||
h2 = TextStyle(
|
||||
fontWeight = FontWeight.Normal,
|
||||
fontSize = 28.sp,
|
||||
letterSpacing = (0.05).sp
|
||||
),
|
||||
subtitle1 = TextStyle(
|
||||
fontWeight = FontWeight.Medium,
|
||||
fontSize = 16.sp
|
||||
),
|
||||
subtitle2 = TextStyle(
|
||||
fontWeight = FontWeight.Normal,
|
||||
fontSize = 16.sp,
|
||||
letterSpacing = 0.1.sp
|
||||
),
|
||||
body1 = TextStyle(
|
||||
fontWeight = FontWeight.Medium,
|
||||
fontSize = 14.sp,
|
||||
letterSpacing = 0.35.sp,
|
||||
lineHeight = 16.sp
|
||||
),
|
||||
body2 = TextStyle(
|
||||
fontWeight = FontWeight.Normal,
|
||||
fontSize = 14.sp,
|
||||
letterSpacing = 0.2.sp,
|
||||
lineHeight = 16.sp
|
||||
),
|
||||
button = TextStyle(
|
||||
fontWeight = FontWeight.Medium,
|
||||
fontSize = 14.sp,
|
||||
letterSpacing = 1.25.sp
|
||||
),
|
||||
caption = TextStyle(
|
||||
fontWeight = FontWeight.Bold,
|
||||
fontSize = 12.sp
|
||||
),
|
||||
overline = TextStyle(
|
||||
fontWeight = FontWeight.Medium,
|
||||
fontSize = 10.sp,
|
||||
letterSpacing = 1.5.sp
|
||||
)
|
||||
),
|
||||
shapes = Shapes(
|
||||
RoundedCornerShape(4.dp),
|
||||
RoundedCornerShape(8.dp),
|
||||
RoundedCornerShape(12.dp)
|
||||
),
|
||||
content = content
|
||||
)
|
||||
fun HabiticaColors.textPrimaryFor(task: Task?): Color {
|
||||
return colorResource((if (isSystemInDarkTheme()) task?.extraExtraLightTaskColor else task?.extraDarkTaskColor) ?: R.color.text_primary)
|
||||
}
|
||||
|
||||
val Typography.caption1
|
||||
get() = caption
|
||||
val Typography.caption2
|
||||
get() = TextStyle(
|
||||
fontWeight = FontWeight.Medium,
|
||||
fontSize = 12.sp,
|
||||
letterSpacing = 0.4.sp
|
||||
)
|
||||
val Typography.caption3
|
||||
get() = TextStyle(
|
||||
fontWeight = FontWeight.Medium,
|
||||
fontSize = 12.sp,
|
||||
letterSpacing = 0.3.sp,
|
||||
lineHeight = 14.sp
|
||||
)
|
||||
val Typography.caption4
|
||||
get() = TextStyle(
|
||||
fontWeight = FontWeight.Normal,
|
||||
fontSize = 12.sp,
|
||||
letterSpacing = 0.35.sp
|
||||
)
|
||||
val Typography.subtitle3
|
||||
get() = TextStyle(
|
||||
fontWeight = FontWeight.Normal,
|
||||
fontSize = 16.sp,
|
||||
letterSpacing = 0.15.sp
|
||||
)
|
||||
|
||||
object HabiticaTheme {
|
||||
val typography: Typography
|
||||
@Composable
|
||||
get() = MaterialTheme.typography
|
||||
|
||||
val shapes: Shapes
|
||||
@Composable
|
||||
get() = MaterialTheme.shapes
|
||||
|
||||
val colors: HabiticaColors
|
||||
@Composable
|
||||
get() {
|
||||
val context = LocalContext.current
|
||||
return HabiticaColors(
|
||||
windowBackground = Color(context.getThemeColor(R.attr.colorWindowBackground)),
|
||||
contentBackground = Color(context.getThemeColor(R.attr.colorContentBackground)),
|
||||
contentBackgroundOffset = Color(context.getThemeColor(R.attr.colorContentBackgroundOffset)),
|
||||
offsetBackground = Color(context.getThemeColor(R.attr.colorOffsetBackground)),
|
||||
textPrimary = Color(context.getThemeColor(R.attr.textColorPrimary)),
|
||||
textSecondary = Color(context.getThemeColor(R.attr.textColorSecondary)),
|
||||
textTertiary = Color(ContextCompat.getColor(context, R.color.text_ternary)),
|
||||
textQuad = Color(ContextCompat.getColor(context, R.color.text_quad)),
|
||||
textDimmed = Color(ContextCompat.getColor(context, R.color.text_dimmed)),
|
||||
tintedUiMain = Color(context.getThemeColor(R.attr.tintedUiMain)),
|
||||
tintedUiSub = Color(context.getThemeColor(R.attr.tintedUiSub)),
|
||||
tintedUiDetails = Color(context.getThemeColor(R.attr.tintedUiDetails)),
|
||||
pixelArtBackground = Color(context.getThemeColor(R.attr.colorContentBackground)),
|
||||
errorBackground = Color(ContextCompat.getColor(context, R.color.background_red)),
|
||||
errorColor = Color(ContextCompat.getColor(context, R.color.text_red)),
|
||||
successBackground = Color(ContextCompat.getColor(context, R.color.background_green)),
|
||||
successColor = Color(ContextCompat.getColor(context, R.color.text_green))
|
||||
)
|
||||
}
|
||||
@Composable
|
||||
fun HabiticaColors.textSecondaryFor(task: Task?): Color {
|
||||
return colorResource((if (isSystemInDarkTheme()) task?.extraLightTaskColor else task?.lowSaturationTaskColor) ?: R.color.brand_sub_text)
|
||||
}
|
||||
|
||||
class HabiticaColors(
|
||||
val windowBackground: Color,
|
||||
val contentBackground: Color,
|
||||
val contentBackgroundOffset: Color,
|
||||
val offsetBackground: Color,
|
||||
val textPrimary: Color,
|
||||
val textSecondary: Color,
|
||||
val textTertiary: Color,
|
||||
val textQuad: Color,
|
||||
val textDimmed: Color,
|
||||
val tintedUiMain: Color,
|
||||
val tintedUiSub: Color,
|
||||
val tintedUiDetails: Color,
|
||||
val pixelArtBackground: Color,
|
||||
val errorBackground: Color,
|
||||
val errorColor: Color,
|
||||
val successBackground: Color,
|
||||
val successColor: Color
|
||||
) {
|
||||
@Composable
|
||||
fun HabiticaColors.primaryBackgroundFor(task: Task?): Color {
|
||||
return colorResource((if (isSystemInDarkTheme()) task?.mediumTaskColor else task?.lightTaskColor) ?: R.color.brand_400)
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun textPrimaryFor(task: Task?): Color {
|
||||
return colorResource((if (isSystemInDarkTheme()) task?.extraExtraLightTaskColor else task?.extraDarkTaskColor) ?: R.color.text_primary)
|
||||
}
|
||||
@Composable
|
||||
fun HabiticaColors.windowBackgroundFor(task: Task?): Color {
|
||||
return (if (isSystemInDarkTheme()) task?.extraExtraDarkTaskColor else task?.extraExtraLightTaskColor)?.let { colorResource(it) } ?: windowBackground
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun textSecondaryFor(task: Task?): Color {
|
||||
return colorResource((if (isSystemInDarkTheme()) task?.extraLightTaskColor else task?.lowSaturationTaskColor) ?: R.color.brand_sub_text)
|
||||
}
|
||||
@Composable
|
||||
fun HabiticaColors.contentBackgroundFor(task: Task?): Color {
|
||||
return (if (isSystemInDarkTheme()) task?.darkestTaskColor else task?.lightestTaskColor)?.let { colorResource(it) } ?: windowBackground
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun primaryBackgroundFor(task: Task?): Color {
|
||||
return colorResource((if (isSystemInDarkTheme()) task?.mediumTaskColor else task?.lightTaskColor) ?: R.color.brand_400)
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun windowBackgroundFor(task: Task?): Color {
|
||||
return (if (isSystemInDarkTheme()) task?.extraExtraDarkTaskColor else task?.extraExtraLightTaskColor)?.let { colorResource(it) } ?: windowBackground
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun contentBackgroundFor(task: Task?): Color {
|
||||
return (if (isSystemInDarkTheme()) task?.darkestTaskColor else task?.lightestTaskColor)?.let { colorResource(it) } ?: windowBackground
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun pixelArtBackground(hasIcon: Boolean): Color {
|
||||
return if (isSystemInDarkTheme()) {
|
||||
colorResource(if (hasIcon) R.color.gray_200 else R.color.gray_5)
|
||||
} else {
|
||||
colorResource(if (hasIcon) R.color.content_background else R.color.content_background_offset)
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun basicTextColor(): Color {
|
||||
return colorResource(R.color.gray200_gray400)
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun basicButtonColor(): Color {
|
||||
return colorResource(R.color.gray700_gray10)
|
||||
@Composable
|
||||
fun HabiticaColors.pixelArtBackground(hasIcon: Boolean): Color {
|
||||
return if (isSystemInDarkTheme()) {
|
||||
colorResource(if (hasIcon) R.color.gray_200 else R.color.gray_5)
|
||||
} else {
|
||||
colorResource(if (hasIcon) R.color.content_background else R.color.content_background_offset)
|
||||
}
|
||||
}
|
||||
|
||||
class HabiticaTypography
|
||||
@Composable
|
||||
fun HabiticaColors.basicTextColor(): Color {
|
||||
return colorResource(R.color.gray200_gray400)
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun HabiticaColors.basicButtonColor(): Color {
|
||||
return colorResource(R.color.gray700_gray10)
|
||||
}
|
||||
|
||||
val HabiticaTheme.colors: HabiticaColors
|
||||
@Composable
|
||||
get() {
|
||||
val context = LocalContext.current
|
||||
return HabiticaColors(
|
||||
windowBackground = Color(context.getThemeColor(R.attr.colorWindowBackground)),
|
||||
contentBackground = Color(context.getThemeColor(R.attr.colorContentBackground)),
|
||||
contentBackgroundOffset = Color(context.getThemeColor(R.attr.colorContentBackgroundOffset)),
|
||||
offsetBackground = Color(context.getThemeColor(R.attr.colorOffsetBackground)),
|
||||
textPrimary = Color(context.getThemeColor(R.attr.textColorPrimary)),
|
||||
textSecondary = Color(context.getThemeColor(R.attr.textColorSecondary)),
|
||||
textTertiary = Color(ContextCompat.getColor(context, R.color.text_ternary)),
|
||||
textQuad = Color(ContextCompat.getColor(context, R.color.text_quad)),
|
||||
textDimmed = Color(ContextCompat.getColor(context, R.color.text_dimmed)),
|
||||
tintedUiMain = Color(context.getThemeColor(R.attr.tintedUiMain)),
|
||||
tintedUiSub = Color(context.getThemeColor(R.attr.tintedUiSub)),
|
||||
tintedUiDetails = Color(context.getThemeColor(R.attr.tintedUiDetails)),
|
||||
pixelArtBackground = Color(context.getThemeColor(R.attr.colorContentBackground)),
|
||||
errorBackground = Color(ContextCompat.getColor(context, R.color.background_red)),
|
||||
errorColor = Color(ContextCompat.getColor(context, R.color.text_red)),
|
||||
successBackground = Color(ContextCompat.getColor(context, R.color.background_green)),
|
||||
successColor = Color(ContextCompat.getColor(context, R.color.text_green))
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -62,7 +62,11 @@ import com.habitrpg.android.habitica.models.user.Purchases
|
|||
import com.habitrpg.android.habitica.models.user.Stats
|
||||
import com.habitrpg.android.habitica.models.user.SubscriptionPlan
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.theme.basicButtonColor
|
||||
import com.habitrpg.android.habitica.ui.theme.basicTextColor
|
||||
import com.habitrpg.android.habitica.ui.theme.colors
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.common.habitica.views.ComposableAvatarView
|
||||
import com.habitrpg.shared.habitica.models.Avatar
|
||||
import kotlin.random.Random
|
||||
|
||||
|
|
|
|||
|
|
@ -32,7 +32,8 @@ import androidx.compose.ui.unit.dp
|
|||
import androidx.fragment.app.Fragment
|
||||
import com.google.accompanist.systemuicontroller.rememberSystemUiController
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.theme.colors
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
|
|
|
|||
|
|
@ -33,7 +33,9 @@ import com.habitrpg.android.habitica.models.social.Group
|
|||
import com.habitrpg.android.habitica.models.user.Authentication
|
||||
import com.habitrpg.android.habitica.models.user.Profile
|
||||
import com.habitrpg.android.habitica.models.user.Stats
|
||||
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.theme.colors
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.common.habitica.views.ComposableAvatarView
|
||||
import kotlin.random.Random
|
||||
|
||||
@Composable
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ import androidx.compose.ui.text.font.FontWeight
|
|||
import androidx.compose.ui.unit.TextUnit
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
|
||||
@Composable
|
||||
fun HabiticaButton(
|
||||
|
|
|
|||
|
|
@ -42,7 +42,8 @@ import androidx.compose.ui.unit.Dp
|
|||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.theme.colors
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.common.habitica.helpers.NumberAbbreviator
|
||||
import java.text.NumberFormat
|
||||
|
||||
|
|
|
|||
|
|
@ -51,7 +51,8 @@ import androidx.compose.ui.tooling.preview.Preview
|
|||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.theme.colors
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ import androidx.compose.ui.graphics.Color
|
|||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import com.habitrpg.common.habitica.views.ComposableAvatarView
|
||||
import com.habitrpg.shared.habitica.models.Avatar
|
||||
|
||||
@Composable
|
||||
|
|
|
|||
|
|
@ -1,7 +1,12 @@
|
|||
package com.habitrpg.android.habitica.ui.views.dialogs
|
||||
|
||||
import android.content.Context
|
||||
import com.habitrpg.android.habitica.R
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.ComposeView
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.common.habitica.views.HabiticaCircularProgressView
|
||||
import com.habitrpg.common.habitica.extensions.dpToPx
|
||||
|
||||
class HabiticaProgressDialog(context: Context) : HabiticaAlertDialog(context) {
|
||||
|
|
@ -13,7 +18,13 @@ class HabiticaProgressDialog(context: Context) : HabiticaAlertDialog(context) {
|
|||
|
||||
fun show(context: Context, title: String?, dialogWidth: Int = 300): HabiticaProgressDialog {
|
||||
val dialog = HabiticaProgressDialog(context)
|
||||
dialog.setAdditionalContentView(R.layout.circular_progress)
|
||||
val composeView = ComposeView(context)
|
||||
dialog.setAdditionalContentView(composeView)
|
||||
composeView.setContent {
|
||||
HabiticaTheme {
|
||||
HabiticaCircularProgressView(Modifier.size(60.dp))
|
||||
}
|
||||
}
|
||||
dialog.dialogWidth = dialogWidth.dpToPx(context)
|
||||
dialog.setTitle(title)
|
||||
dialog.enqueue()
|
||||
|
|
|
|||
|
|
@ -26,8 +26,10 @@ import androidx.compose.ui.unit.dp
|
|||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.models.user.Outfit
|
||||
import com.habitrpg.android.habitica.models.user.Preferences
|
||||
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.theme.caption2
|
||||
import com.habitrpg.android.habitica.ui.theme.colors
|
||||
import com.habitrpg.android.habitica.ui.theme.pixelArtBackground
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.common.habitica.theme.caption2
|
||||
import com.habitrpg.android.habitica.ui.views.PixelArtView
|
||||
|
||||
@Composable
|
||||
|
|
|
|||
|
|
@ -14,7 +14,8 @@ import androidx.compose.ui.text.style.TextAlign
|
|||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.theme.colors
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaButton
|
||||
|
||||
@Composable
|
||||
|
|
|
|||
|
|
@ -23,7 +23,9 @@ import androidx.compose.ui.Modifier
|
|||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.theme.colors
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.common.habitica.views.HabiticaCircularProgressView
|
||||
import java.lang.Float.min
|
||||
|
||||
@OptIn(ExperimentalMaterialApi::class)
|
||||
|
|
|
|||
|
|
@ -35,9 +35,10 @@ import com.habitrpg.android.habitica.models.user.ContributorInfo
|
|||
import com.habitrpg.android.habitica.models.user.Profile
|
||||
import com.habitrpg.android.habitica.models.user.Stats
|
||||
import com.habitrpg.android.habitica.ui.fragments.social.party.InviteButton
|
||||
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.theme.colors
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.views.ClassText
|
||||
import com.habitrpg.android.habitica.ui.views.ComposableAvatarView
|
||||
import com.habitrpg.common.habitica.views.ComposableAvatarView
|
||||
import com.habitrpg.android.habitica.ui.views.ComposableUsernameLabel
|
||||
import com.habitrpg.android.habitica.ui.views.LoadingButtonState
|
||||
import com.habitrpg.common.habitica.extensions.toLocale
|
||||
|
|
|
|||
|
|
@ -49,7 +49,8 @@ import androidx.compose.ui.unit.sp
|
|||
import androidx.compose.ui.zIndex
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.interactors.ShareMountUseCase
|
||||
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.theme.colors
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.views.BackgroundScene
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaButton
|
||||
import com.habitrpg.common.habitica.helpers.launchCatching
|
||||
|
|
|
|||
|
|
@ -69,7 +69,8 @@ import com.habitrpg.android.habitica.interactors.ShareMountUseCase
|
|||
import com.habitrpg.android.habitica.interactors.SharePetUseCase
|
||||
import com.habitrpg.android.habitica.models.inventory.Food
|
||||
import com.habitrpg.android.habitica.models.inventory.Pet
|
||||
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.theme.colors
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.views.BackgroundScene
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaButton
|
||||
import com.habitrpg.android.habitica.ui.views.PixelArtView
|
||||
|
|
|
|||
|
|
@ -27,7 +27,8 @@ import androidx.compose.ui.unit.dp
|
|||
import androidx.compose.ui.unit.sp
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.models.Assignable
|
||||
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.theme.colors
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.views.CompletedAt
|
||||
import com.habitrpg.android.habitica.ui.views.UserRow
|
||||
import java.util.Date
|
||||
|
|
|
|||
|
|
@ -39,7 +39,8 @@ import androidx.compose.ui.tooling.preview.Preview
|
|||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.theme.colors
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.common.habitica.extensions.getThemeColor
|
||||
|
||||
@Composable
|
||||
|
|
|
|||
|
|
@ -41,7 +41,8 @@ import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
|||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.theme.colors
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import com.habitrpg.common.habitica.extensions.getThemeColor
|
||||
import com.habitrpg.common.habitica.extensions.nameRes
|
||||
|
|
|
|||
|
|
@ -33,7 +33,8 @@ import androidx.compose.ui.unit.Dp
|
|||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.theme.colors
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.common.habitica.extensions.getThemeColor
|
||||
|
||||
data class LabeledValue<V>(val label: String, val value: V)
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ buildscript {
|
|||
amplitude_version = '1.6.1'
|
||||
appcompat_version = '1.6.1'
|
||||
coil_version = '2.4.0'
|
||||
compose_version = '1.5.2'
|
||||
compose_version = '1.5.4'
|
||||
core_ktx_version = '1.12.0'
|
||||
coroutines_version = '1.7.2'
|
||||
daggerhilt_version = '2.47'
|
||||
|
|
@ -25,7 +25,7 @@ buildscript {
|
|||
markwon_version = '4.6.2'
|
||||
mockk_version = '1.13.4'
|
||||
moshi_version = '1.15.0'
|
||||
navigation_version = '2.7.3'
|
||||
navigation_version = '2.7.4'
|
||||
okhttp_version = '4.11.0'
|
||||
paging_version = '3.2.1'
|
||||
play_wearables_version = '18.1.0'
|
||||
|
|
|
|||
|
|
@ -37,6 +37,11 @@ android {
|
|||
|
||||
buildFeatures {
|
||||
viewBinding = true
|
||||
compose = true
|
||||
}
|
||||
|
||||
composeOptions {
|
||||
kotlinCompilerExtensionVersion = "1.5.3"
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
|
|
@ -84,7 +89,9 @@ android {
|
|||
}
|
||||
|
||||
val core_ktx_version: String by rootExtra
|
||||
val accompanist_version: String by rootExtra
|
||||
val appcompat_version: String by rootExtra
|
||||
val compose_version: String by rootExtra
|
||||
val markwon_version: String by rootExtra
|
||||
val coil_version: String by rootExtra
|
||||
val mockk_version: String by rootExtra
|
||||
|
|
@ -111,7 +118,7 @@ dependencies {
|
|||
implementation("androidx.recyclerview:recyclerview:1.3.1")
|
||||
implementation("androidx.navigation:navigation-common-ktx:$navigation_version")
|
||||
implementation("androidx.navigation:navigation-runtime-ktx:$navigation_version")
|
||||
implementation("com.google.android.material:material:1.9.0")
|
||||
implementation("com.google.android.material:material:1.10.0")
|
||||
|
||||
testImplementation("io.mockk:mockk:$mockk_version")
|
||||
testImplementation("io.mockk:mockk-android:$mockk_version")
|
||||
|
|
@ -124,6 +131,15 @@ dependencies {
|
|||
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
|
||||
androidTestImplementation("org.jetbrains.kotlin:kotlin-reflect:$kotlin_version")
|
||||
|
||||
implementation("androidx.activity:activity-compose:1.8.0")
|
||||
implementation("androidx.compose.runtime:runtime-livedata:$compose_version")
|
||||
implementation("androidx.compose.material:material:$compose_version")
|
||||
implementation("androidx.compose.animation:animation:$compose_version")
|
||||
implementation("androidx.compose.ui:ui-text-google-fonts:$compose_version")
|
||||
implementation("androidx.compose.ui:ui-tooling:$compose_version")
|
||||
implementation("androidx.compose.material3:material3:1.1.2")
|
||||
implementation("com.google.accompanist:accompanist-themeadapter-material:$accompanist_version")
|
||||
|
||||
implementation(project(":shared"))
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,12 +4,18 @@ import android.view.View
|
|||
import android.view.ViewGroup
|
||||
import android.view.animation.AlphaAnimation
|
||||
import android.widget.ProgressBar
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.ComposeView
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.habitrpg.android.habitica.extensions.inflate
|
||||
import com.habitrpg.common.habitica.R
|
||||
import com.habitrpg.common.habitica.databinding.EmptyItemBinding
|
||||
import com.habitrpg.common.habitica.databinding.FailedItemBinding
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.common.habitica.views.HabiticaCircularProgressView
|
||||
|
||||
data class EmptyItem(
|
||||
var title: String,
|
||||
|
|
@ -87,7 +93,8 @@ class RecyclerViewStateAdapter(val showLoadingAsEmpty: Boolean = false) : Recycl
|
|||
animation1.duration = 300
|
||||
animation1.startOffset = 500
|
||||
animation1.fillAfter = true
|
||||
view.findViewById<ProgressBar>(R.id.compose_view).setContent {
|
||||
view.findViewById<ComposeView>(R.id.compose_view).startAnimation(animation1)
|
||||
view.findViewById<ComposeView>(R.id.compose_view).setContent {
|
||||
HabiticaTheme {
|
||||
HabiticaCircularProgressView(Modifier.size(60.dp))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,146 @@
|
|||
package com.habitrpg.common.habitica.theme
|
||||
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material.MaterialTheme
|
||||
import androidx.compose.material.Shapes
|
||||
import androidx.compose.material.Typography
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalLayoutDirection
|
||||
import androidx.compose.ui.text.TextStyle
|
||||
import androidx.compose.ui.text.font.FontFamily
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import com.google.accompanist.themeadapter.material.createMdcTheme
|
||||
|
||||
@Composable
|
||||
fun HabiticaTheme(
|
||||
content: @Composable () -> Unit
|
||||
) {
|
||||
val context = LocalContext.current
|
||||
val layoutDirection = LocalLayoutDirection.current
|
||||
val (colors, _, _) = createMdcTheme(
|
||||
context = context,
|
||||
layoutDirection = layoutDirection,
|
||||
setTextColors = true
|
||||
)
|
||||
MaterialTheme(
|
||||
colors = colors ?: MaterialTheme.colors,
|
||||
typography = Typography(
|
||||
defaultFontFamily = FontFamily.Default,
|
||||
h1 = TextStyle(
|
||||
fontWeight = FontWeight.Medium,
|
||||
fontSize = 20.sp,
|
||||
letterSpacing = (0.05).sp
|
||||
),
|
||||
h2 = TextStyle(
|
||||
fontWeight = FontWeight.Normal,
|
||||
fontSize = 28.sp,
|
||||
letterSpacing = (0.05).sp
|
||||
),
|
||||
subtitle1 = TextStyle(
|
||||
fontWeight = FontWeight.Medium,
|
||||
fontSize = 16.sp
|
||||
),
|
||||
subtitle2 = TextStyle(
|
||||
fontWeight = FontWeight.Normal,
|
||||
fontSize = 16.sp,
|
||||
letterSpacing = 0.1.sp
|
||||
),
|
||||
body1 = TextStyle(
|
||||
fontWeight = FontWeight.Medium,
|
||||
fontSize = 14.sp,
|
||||
letterSpacing = 0.35.sp,
|
||||
lineHeight = 16.sp
|
||||
),
|
||||
body2 = TextStyle(
|
||||
fontWeight = FontWeight.Normal,
|
||||
fontSize = 14.sp,
|
||||
letterSpacing = 0.2.sp,
|
||||
lineHeight = 16.sp
|
||||
),
|
||||
button = TextStyle(
|
||||
fontWeight = FontWeight.Medium,
|
||||
fontSize = 14.sp,
|
||||
letterSpacing = 1.25.sp
|
||||
),
|
||||
caption = TextStyle(
|
||||
fontWeight = FontWeight.Bold,
|
||||
fontSize = 12.sp
|
||||
),
|
||||
overline = TextStyle(
|
||||
fontWeight = FontWeight.Medium,
|
||||
fontSize = 10.sp,
|
||||
letterSpacing = 1.5.sp
|
||||
)
|
||||
),
|
||||
shapes = Shapes(
|
||||
RoundedCornerShape(4.dp),
|
||||
RoundedCornerShape(8.dp),
|
||||
RoundedCornerShape(12.dp)
|
||||
),
|
||||
content = content
|
||||
)
|
||||
}
|
||||
|
||||
val Typography.caption1
|
||||
get() = caption
|
||||
val Typography.caption2
|
||||
get() = TextStyle(
|
||||
fontWeight = FontWeight.Medium,
|
||||
fontSize = 12.sp,
|
||||
letterSpacing = 0.4.sp
|
||||
)
|
||||
val Typography.caption3
|
||||
get() = TextStyle(
|
||||
fontWeight = FontWeight.Medium,
|
||||
fontSize = 12.sp,
|
||||
letterSpacing = 0.3.sp,
|
||||
lineHeight = 14.sp
|
||||
)
|
||||
val Typography.caption4
|
||||
get() = TextStyle(
|
||||
fontWeight = FontWeight.Normal,
|
||||
fontSize = 12.sp,
|
||||
letterSpacing = 0.35.sp
|
||||
)
|
||||
val Typography.subtitle3
|
||||
get() = TextStyle(
|
||||
fontWeight = FontWeight.Normal,
|
||||
fontSize = 16.sp,
|
||||
letterSpacing = 0.15.sp
|
||||
)
|
||||
|
||||
object HabiticaTheme {
|
||||
val typography: Typography
|
||||
@Composable
|
||||
get() = MaterialTheme.typography
|
||||
|
||||
val shapes: Shapes
|
||||
@Composable
|
||||
get() = MaterialTheme.shapes
|
||||
}
|
||||
|
||||
class HabiticaColors(
|
||||
val windowBackground: Color,
|
||||
val contentBackground: Color,
|
||||
val contentBackgroundOffset: Color,
|
||||
val offsetBackground: Color,
|
||||
val textPrimary: Color,
|
||||
val textSecondary: Color,
|
||||
val textTertiary: Color,
|
||||
val textQuad: Color,
|
||||
val textDimmed: Color,
|
||||
val tintedUiMain: Color,
|
||||
val tintedUiSub: Color,
|
||||
val tintedUiDetails: Color,
|
||||
val pixelArtBackground: Color,
|
||||
val errorBackground: Color,
|
||||
val errorColor: Color,
|
||||
val successBackground: Color,
|
||||
val successColor: Color
|
||||
)
|
||||
|
||||
class HabiticaTypography
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.habitrpg.android.habitica.ui.views
|
||||
package com.habitrpg.common.habitica.views
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.habitrpg.android.habitica.ui.views.progress
|
||||
package com.habitrpg.common.habitica.views
|
||||
|
||||
import androidx.compose.animation.core.CubicBezierEasing
|
||||
import androidx.compose.animation.core.animateFloat
|
||||
|
|
@ -28,7 +28,7 @@ import androidx.compose.ui.res.colorResource
|
|||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.Dp
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.common.habitica.R
|
||||
|
||||
@Composable
|
||||
fun HabiticaCircularProgressView(
|
||||
|
|
@ -2,10 +2,10 @@
|
|||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
<ProgressBar
|
||||
android:id="@+id/loading_indicator"
|
||||
<androidx.compose.ui.platform.ComposeView
|
||||
android:id="@+id/compose_view"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
/>
|
||||
</FrameLayout>
|
||||
</FrameLayout>
|
||||
|
|
|
|||
|
|
@ -162,5 +162,14 @@
|
|||
<color name="material_card_background_inverse_color">@color/gray_5</color>
|
||||
<color name="divider_color">@color/gray_500</color>
|
||||
|
||||
<color name="background_red">@color/red_100</color>
|
||||
<color name="background_orange">@color/orange_100</color>
|
||||
<color name="background_yellow">@color/yellow_100</color>
|
||||
<color name="background_green">@color/green_100</color>
|
||||
<color name="background_blue">@color/blue_100</color>
|
||||
<color name="background_teal">@color/teal_100</color>
|
||||
<color name="background_brand">@color/brand_300</color>
|
||||
<color name="background_brand_30">#4D6033B5</color>
|
||||
|
||||
<color name="dim_background">#40BDA8FF</color>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -1,9 +1,10 @@
|
|||
New in 4.3:
|
||||
It’s easier than ever to party up with our newest feature: Look for Party and Find Members!
|
||||
- Solo players can let Party leaders know they want an invite by going to Menu > Party and tapping ‘Look for Party’
|
||||
- Party leaders can see players looking for Party by tapping ‘Find Members’ on the Party screen and send invites
|
||||
- Can gift Gems by username
|
||||
- Bailey notification will show title
|
||||
- Selecting a class is more consistent
|
||||
- Chat notifications open Party
|
||||
- Other various fixes
|
||||
|
||||
- Pets just got cuter! Tap a Pet or Mount to see them in an environment that changes each month.
|
||||
- Pets bounce when fed
|
||||
- New Subscriber benefit: Buy one Armoire, get another free!
|
||||
- New Subscriber benefit: Get a second chance at life once a day when you run out of HP!
|
||||
- Tap your avatar to share your latest looks at any time
|
||||
- See answers to common Quest mechanic questions under your active Quest
|
||||
- Updated Quest interface
|
||||
- The Quest shop now shows a check by completed Quests
|
||||
|
|
@ -1,2 +1,2 @@
|
|||
NAME=4.3
|
||||
CODE=6691
|
||||
CODE=6701
|
||||
Loading…
Reference in a new issue