diff --git a/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/activities/MainActivityTest.kt b/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/activities/MainActivityTest.kt index 900dbafe3..960e5e8e7 100644 --- a/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/activities/MainActivityTest.kt +++ b/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/activities/MainActivityTest.kt @@ -26,6 +26,7 @@ class MainActivityTest : ActivityTestCase() { val screen = MainActivityScreen() lateinit var scenario: ActivityScenario + @After fun cleanup() { scenario.close() diff --git a/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivityTest.kt b/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivityTest.kt index 2cff85672..fe8ab8314 100644 --- a/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivityTest.kt +++ b/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivityTest.kt @@ -26,7 +26,6 @@ import io.github.kakaocup.kakao.toolbar.KToolbar import io.mockk.coVerify import io.mockk.every import io.mockk.justRun -import io.mockk.mockk import io.mockk.mockkObject import io.mockk.slot import io.mockk.verify diff --git a/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragmentTest.kt b/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragmentTest.kt index e3a4091ae..7027d699b 100644 --- a/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragmentTest.kt +++ b/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragmentTest.kt @@ -26,9 +26,9 @@ class NavigationDrawerScreen : Screen() { val recycler: KRecyclerView = KRecyclerView({ withId(R.id.recyclerView) }, itemTypeBuilder = { - itemType(::SectionHeaderItem) - itemType(::MainItem) - }) + itemType(::SectionHeaderItem) + itemType(::MainItem) + }) } @LargeTest diff --git a/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragmentTest.kt b/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragmentTest.kt index 4fb4aee8a..8378b4f93 100644 --- a/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragmentTest.kt +++ b/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragmentTest.kt @@ -6,7 +6,6 @@ import android.widget.TextView import androidx.fragment.app.testing.launchFragmentInContainer import androidx.test.espresso.UiController import androidx.test.espresso.ViewAction -import com.habitrpg.android.habitica.HabiticaBaseApplication import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.databinding.FragmentRecyclerviewBinding import com.habitrpg.android.habitica.interactors.HatchPetUseCase @@ -25,7 +24,6 @@ import io.mockk.coEvery import io.mockk.coVerify import io.mockk.every import io.mockk.mockk -import io.mockk.mockkObject import io.mockk.spyk import kotlinx.coroutines.flow.flowOf import org.hamcrest.Matcher @@ -63,8 +61,8 @@ class ItemScreen : Screen() { val recycler: KRecyclerView = KRecyclerView({ withId(R.id.recyclerView) }, itemTypeBuilder = { - itemType(::ItemItem) - }) + itemType(::ItemItem) + }) } internal class ItemRecyclerFragmentTest : FragmentTestCase(false) { diff --git a/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/PetDetailFragmentTest.kt b/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/PetDetailFragmentTest.kt index 818af455b..fc8e9a6ab 100644 --- a/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/PetDetailFragmentTest.kt +++ b/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/PetDetailFragmentTest.kt @@ -2,13 +2,11 @@ package com.habitrpg.android.habitica.ui.fragments.inventory.stable import android.os.Bundle import androidx.fragment.app.testing.launchFragmentInContainer -import com.habitrpg.android.habitica.HabiticaBaseApplication import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.databinding.FragmentRecyclerviewBinding import com.habitrpg.android.habitica.interactors.FeedPetUseCase import com.habitrpg.android.habitica.models.user.OwnedItem import com.habitrpg.android.habitica.ui.fragments.FragmentTestCase -import com.habitrpg.android.habitica.ui.fragments.inventory.items.ItemDialogFragment import io.github.kakaocup.kakao.common.views.KView import io.github.kakaocup.kakao.recycler.KRecyclerView import io.github.kakaocup.kakao.screen.Screen @@ -18,7 +16,6 @@ import io.mockk.coEvery import io.mockk.coVerify import io.mockk.every import io.mockk.mockk -import io.mockk.mockkObject import io.mockk.spyk import kotlinx.coroutines.flow.flowOf import org.junit.Test @@ -27,9 +24,9 @@ class PetDetailScreen : Screen() { val recycler: KRecyclerView = KRecyclerView({ withId(R.id.recyclerView) }, itemTypeBuilder = { - itemType(::SectionItem) - itemType(::PetItem) - }) + itemType(::SectionItem) + itemType(::PetItem) + }) } internal class PetDetailRecyclerFragmentTest : diff --git a/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/StableRecyclerFragmentTest.kt b/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/StableRecyclerFragmentTest.kt index 455e5466f..fcfbee05a 100644 --- a/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/StableRecyclerFragmentTest.kt +++ b/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/StableRecyclerFragmentTest.kt @@ -33,9 +33,9 @@ class StableScreen : Screen() { val recycler: KRecyclerView = KRecyclerView({ withId(R.id.recyclerView) }, itemTypeBuilder = { - itemType(::SectionItem) - itemType(::PetItem) - }) + itemType(::SectionItem) + itemType(::PetItem) + }) } internal class StableRecyclerFragmentTest : FragmentTestCase(false) { diff --git a/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragmentTest.kt b/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragmentTest.kt index 73e5383fa..9bda37f92 100644 --- a/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragmentTest.kt +++ b/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragmentTest.kt @@ -31,8 +31,8 @@ class TaskListScreen : Screen() { val recycler: KRecyclerView = KRecyclerView({ withId(R.id.recyclerView) }, itemTypeBuilder = { - itemType(::TaskItem) - }) + itemType(::TaskItem) + }) } internal class TaskRecyclerViewFragmentTest : FragmentTestCase(false) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.kt index 0c7162ac8..bfb16112d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.kt @@ -48,14 +48,19 @@ import javax.inject.Inject abstract class HabiticaBaseApplication : Application(), Application.ActivityLifecycleCallbacks { @Inject internal lateinit var lazyApiHelper: ApiClient + @Inject internal lateinit var sharedPrefs: SharedPreferences + @Inject internal lateinit var analyticsManager: AnalyticsManager + @Inject internal lateinit var pushNotificationManager: PushNotificationManager + @Inject internal lateinit var authenticationHandler: AuthenticationHandler + /** * For better performance billing class should be used as singleton */ diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.kt index b10757d3f..f4f61dad2 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.kt @@ -59,6 +59,7 @@ interface ApiService { @GET("inbox/messages") suspend fun getInboxMessages(@Query("conversation") uuid: String, @Query("page") page: Int): HabitResponse> + @GET("inbox/conversations") suspend fun getInboxConversations(): HabitResponse> @@ -128,6 +129,7 @@ interface ApiService { @POST("tasks/{id}/score/{direction}") suspend fun postTaskDirection(@Path("id") id: String, @Path("direction") direction: String): HabitResponse + @POST("tasks/bulk-score") suspend fun bulkScoreTasks(@Body data: List>): HabitResponse @@ -139,6 +141,7 @@ interface ApiService { @POST("tasks/user") suspend fun createTask(@Body item: Task): HabitResponse + @POST("tasks/group/{groupId}") suspend fun createGroupTask(@Path("groupId") groupId: String, @Body item: Task): HabitResponse @@ -287,8 +290,10 @@ interface ApiService { suspend fun inviteToQuest(@Path("gid") groupId: String, @Path("questKey") questKey: String): HabitResponse @GET("groups/{gid}/invites") - suspend fun getGroupInvites(@Path("gid") groupId: String, - @Query("includeAllPublicFields") includeAllPublicFields: Boolean?): HabitResponse> + suspend fun getGroupInvites( + @Path("gid") groupId: String, + @Query("includeAllPublicFields") includeAllPublicFields: Boolean? + ): HabitResponse> @POST("groups/{gid}/quests/abort") suspend fun abortQuest(@Path("gid") groupId: String): HabitResponse diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.kt index c0c5810f0..be3d1ba84 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.kt @@ -279,6 +279,6 @@ interface ApiClient { suspend fun updateMember(memberID: String, updateData: Map): Member? suspend fun getHallMember(userId: String): Member? suspend fun markTaskNeedsWork(taskID: String, userID: String): Task? - suspend fun retrievePartySeekingUsers(page: Int) : List? + suspend fun retrievePartySeekingUsers(page: Int): List? suspend fun getGroupInvites(groupId: String, includeAllPublicFields: Boolean?): List? } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/UserRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/UserRepository.kt index a1496766b..4714ba5ce 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/UserRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/UserRepository.kt @@ -22,7 +22,7 @@ interface UserRepository : BaseRepository { fun getUser(userID: String): Flow suspend fun updateUser(updateData: Map): User? - suspend fun updateUser(key : String, value : Any?): User? + suspend fun updateUser(key: String, value: Any?): User? suspend fun retrieveUser(withTasks: Boolean = false, forced: Boolean = false, overrideExisting: Boolean = false): User? diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt index 2949f3546..2c5f0d765 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt @@ -378,7 +378,9 @@ class ApiClientImpl( override suspend fun validateSubscription(request: PurchaseValidationRequest): Any? { return if (lastSubscribeCall == null || Date().time - lastSubscribeCall.time > 60000) { process { apiService.validateSubscription(request) } - } else null + } else { + null + } } override suspend fun getHallMember(userId: String): Member? { @@ -629,7 +631,9 @@ class ApiClientImpl( // make sure a purchase attempt doesn't happen return if (lastPurchaseValidation == null || Date().time - lastPurchaseValidation.time > 5000) { return process { apiService.validatePurchase(request) } - } else null + } else { + null + } } override suspend fun changeCustomDayStart(updateObject: Map): User? { @@ -640,7 +644,7 @@ class ApiClientImpl( return process { apiService.markTaskNeedsWork(taskID, userID) } } - override suspend fun retrievePartySeekingUsers(page: Int) : List? { + override suspend fun retrievePartySeekingUsers(page: Int): List? { return process { apiService.retrievePartySeekingUsers(page) } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/BaseRepositoryImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/BaseRepositoryImpl.kt index 83f8b6744..d11783e47 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/BaseRepositoryImpl.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/BaseRepositoryImpl.kt @@ -9,10 +9,10 @@ import com.habitrpg.android.habitica.modules.AuthenticationHandler abstract class BaseRepositoryImpl( protected val localRepository: T, protected val apiClient: ApiClient, - protected val authenticationHandler : AuthenticationHandler + protected val authenticationHandler: AuthenticationHandler ) : BaseRepository { - val currentUserID : String + val currentUserID: String get() = authenticationHandler.currentUserID ?: "" override fun close() { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/FAQRepositoryImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/FAQRepositoryImpl.kt index d6c229a86..e09cbda95 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/FAQRepositoryImpl.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/FAQRepositoryImpl.kt @@ -8,16 +8,16 @@ import com.habitrpg.android.habitica.modules.AuthenticationHandler import kotlinx.coroutines.flow.Flow class FAQRepositoryImpl( - localRepository : FAQLocalRepository, - apiClient : ApiClient, - authenticationHandler : AuthenticationHandler + localRepository: FAQLocalRepository, + apiClient: ApiClient, + authenticationHandler: AuthenticationHandler ) : BaseRepositoryImpl(localRepository, apiClient, authenticationHandler), FAQRepository { - override fun getArticle(position : Int) : Flow { + override fun getArticle(position: Int): Flow { return localRepository.getArticle(position) } - override fun getArticles() : Flow> { + override fun getArticles(): Flow> { return localRepository.articles } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/InventoryRepositoryImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/InventoryRepositoryImpl.kt index cf537109d..f5ece205b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/InventoryRepositoryImpl.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/InventoryRepositoryImpl.kt @@ -52,7 +52,7 @@ class InventoryRepositoryImpl( return localRepository.getInAppRewards() } - override fun getInAppReward(key : String) : Flow { + override fun getInAppReward(key: String): Flow { return localRepository.getInAppReward(key) } @@ -120,7 +120,7 @@ class InventoryRepositoryImpl( } override fun getOwnedMounts(): Flow> { - return authenticationHandler.userIDFlow.flatMapLatest { localRepository.getOwnedMounts(it) } + return authenticationHandler.userIDFlow.flatMapLatest { localRepository.getOwnedMounts(it) } } override fun getPets(): Flow> { @@ -132,7 +132,7 @@ class InventoryRepositoryImpl( } override fun getOwnedPets(): Flow> { - return authenticationHandler.userIDFlow.flatMapLatest { localRepository.getOwnedPets(it) } + return authenticationHandler.userIDFlow.flatMapLatest { localRepository.getOwnedPets(it) } } override fun updateOwnedEquipment(user: User) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/SocialRepositoryImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/SocialRepositoryImpl.kt index 7d8af057f..ccbe6f786 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/SocialRepositoryImpl.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/SocialRepositoryImpl.kt @@ -53,11 +53,11 @@ class SocialRepositoryImpl( return apiClient.updateMember(memberID, mapOf(key to value)) } - override suspend fun retrievePartySeekingUsers(page: Int) : List? { + override suspend fun retrievePartySeekingUsers(page: Int): List? { return apiClient.retrievePartySeekingUsers(page) } - override fun getGroupMembership(id: String) = authenticationHandler.userIDFlow.flatMapLatest { localRepository.getGroupMembership(it, id) } + override fun getGroupMembership(id: String) = authenticationHandler.userIDFlow.flatMapLatest { localRepository.getGroupMembership(it, id) } override fun getGroupMemberships(): Flow> { return authenticationHandler.userIDFlow.flatMapLatest { localRepository.getGroupMemberships(it) } @@ -277,7 +277,6 @@ class SocialRepositoryImpl( override suspend fun retrievegroupInvites(id: String, includeAllPublicFields: Boolean) = apiClient.getGroupInvites(id, includeAllPublicFields) - override suspend fun retrieveMemberWithUsername(username: String?, fromHall: Boolean): Member? { if (username.isNullOrBlank()) { return null @@ -370,7 +369,9 @@ class SocialRepositoryImpl( override suspend fun getMemberAchievements(userId: String?): List? { return if (userId == null) { null - } else apiClient.getMemberAchievements(userId) + } else { + apiClient.getMemberAchievements(userId) + } } override suspend fun transferGems(giftedID: String, amount: Int): Void? { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TagRepositoryImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TagRepositoryImpl.kt index cf8d67770..90e3f6948 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TagRepositoryImpl.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TagRepositoryImpl.kt @@ -12,51 +12,51 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flatMapLatest class TagRepositoryImpl( - localRepository : TagLocalRepository, - apiClient : ApiClient, - authenticationHandler : AuthenticationHandler + localRepository: TagLocalRepository, + apiClient: ApiClient, + authenticationHandler: AuthenticationHandler ) : BaseRepositoryImpl(localRepository, apiClient, authenticationHandler), TagRepository { override fun getTags() = authenticationHandler.userIDFlow.flatMapLatest { getTags(it) } - override fun getTags(userId : String) : Flow> { + override fun getTags(userId: String): Flow> { return localRepository.getTags(userId) } - override suspend fun createTag(tag : Tag) : Tag? { + override suspend fun createTag(tag: Tag): Tag? { val savedTag = apiClient.createTag(tag) ?: return null savedTag.userId = currentUserID localRepository.save(savedTag) return savedTag } - override suspend fun updateTag(tag : Tag) : Tag? { + override suspend fun updateTag(tag: Tag): Tag? { val savedTag = apiClient.updateTag(tag.id, tag) ?: return null savedTag.userId = currentUserID localRepository.save(savedTag) return savedTag } - override suspend fun deleteTag(id : String) : Void? { + override suspend fun deleteTag(id: String): Void? { apiClient.deleteTag(id) localRepository.deleteTag(id) return null } - override suspend fun createTags(tags : Collection) : List { + override suspend fun createTags(tags: Collection): List { return tags.mapNotNull { createTag(it) } } - override suspend fun updateTags(tags : Collection) : List { + override suspend fun updateTags(tags: Collection): List { return tags.mapNotNull { updateTag(it) } } - override suspend fun deleteTags(tagIds : Collection) : List { + override suspend fun deleteTags(tagIds: Collection): List { return tagIds.mapNotNull { deleteTag(it) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.kt index bd8a29be0..c5da7118f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.kt @@ -36,7 +36,7 @@ import java.util.UUID class TaskRepositoryImpl( localRepository: TaskLocalRepository, apiClient: ApiClient, - authenticationHandler : AuthenticationHandler, + authenticationHandler: AuthenticationHandler, val appConfigManager: AppConfigManager, val analyticsManager: AnalyticsManager ) : BaseRepositoryImpl(localRepository, apiClient, authenticationHandler), TaskRepository { @@ -79,7 +79,9 @@ class TaskRepositoryImpl( ): TaskScoringResult? { val localData = if (user != null && appConfigManager.enableLocalTaskScoring()) { ScoreTaskLocallyInteractor.score(user, task, if (up) TaskDirection.UP else TaskDirection.DOWN) - } else null + } else { + null + } if (user != null && localData != null) { val stats = user.stats val result = TaskScoringResult(localData, stats) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt index 945e69602..d0df7a16c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt @@ -58,7 +58,7 @@ class UserRepositoryImpl( return mergeUser(oldUser, networkUser) } - private suspend fun updateUser(userID : String, key : String, value : Any?): User? { + private suspend fun updateUser(userID: String, key: String, value: Any?): User? { return updateUser(userID, mapOf(key to value)) } @@ -66,7 +66,7 @@ class UserRepositoryImpl( return updateUser(currentUserID, updateData) } - override suspend fun updateUser(key : String, value : Any?): User? { + override suspend fun updateUser(key: String, value: Any?): User? { return updateUser(currentUserID, key, value) } @@ -400,9 +400,11 @@ class UserRepositoryImpl( taskRepository.saveTasks(id, tasksOrder, tasks) } val members = apiClient.getGroupMembers(teamID, true) ?: return team - localRepository.save(members.map { - GroupMembership(it.id, id) - }) + localRepository.save( + members.map { + GroupMembership(it.id, id) + } + ) members.let { localRepository.save(members) } return team } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTaskLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTaskLocalRepository.kt index 7eea12fb9..1ab172d73 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTaskLocalRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTaskLocalRepository.kt @@ -29,7 +29,8 @@ class RealmTaskLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), private fun findTasks( taskType: TaskType, - ownerID: String): RealmResults { + ownerID: String + ): RealmResults { return realm.where(Task::class.java) .equalTo("typeValue", taskType.value) .equalTo("ownerID", ownerID) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/Activity-Extension.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/ActivityExtension.kt similarity index 100% rename from Habitica/src/main/java/com/habitrpg/android/habitica/extensions/Activity-Extension.kt rename to Habitica/src/main/java/com/habitrpg/android/habitica/extensions/ActivityExtension.kt diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/AlertDialog-Extensions.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/AlertDialogExtensions.kt similarity index 100% rename from Habitica/src/main/java/com/habitrpg/android/habitica/extensions/AlertDialog-Extensions.kt rename to Habitica/src/main/java/com/habitrpg/android/habitica/extensions/AlertDialogExtensions.kt diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/Animal-Extensions.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/AnimalExtensions.kt similarity index 100% rename from Habitica/src/main/java/com/habitrpg/android/habitica/extensions/Animal-Extensions.kt rename to Habitica/src/main/java/com/habitrpg/android/habitica/extensions/AnimalExtensions.kt diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/AttributeSet-Extentions.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/AttributeSetExtentions.kt similarity index 100% rename from Habitica/src/main/java/com/habitrpg/android/habitica/extensions/AttributeSet-Extentions.kt rename to Habitica/src/main/java/com/habitrpg/android/habitica/extensions/AttributeSetExtentions.kt diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/Bitmap-Extensions.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/BitmapExtensions.kt similarity index 100% rename from Habitica/src/main/java/com/habitrpg/android/habitica/extensions/Bitmap-Extensions.kt rename to Habitica/src/main/java/com/habitrpg/android/habitica/extensions/BitmapExtensions.kt diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/Date-Extensions.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/DateExtensions.kt similarity index 85% rename from Habitica/src/main/java/com/habitrpg/android/habitica/extensions/Date-Extensions.kt rename to Habitica/src/main/java/com/habitrpg/android/habitica/extensions/DateExtensions.kt index 3e647ca1f..1042c46e3 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/Date-Extensions.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/DateExtensions.kt @@ -43,16 +43,24 @@ fun Long.getAgoString(res: Resources): String { return when { diffMonths != 0L -> if (diffMonths == 1L) { res.getString(R.string.ago_1month) - } else res.getString(R.string.ago_months, diffMonths) + } else { + res.getString(R.string.ago_months, diffMonths) + } diffWeeks != 0L -> if (diffWeeks == 1L) { res.getString(R.string.ago_1week) - } else res.getString(R.string.ago_weeks, diffWeeks) + } else { + res.getString(R.string.ago_weeks, diffWeeks) + } diffDays != 0L -> if (diffDays == 1L) { res.getString(R.string.ago_1day) - } else res.getString(R.string.ago_days, diffDays) + } else { + res.getString(R.string.ago_days, diffDays) + } diffHours != 0L -> if (diffHours == 1L) { res.getString(R.string.ago_1hour) - } else res.getString(R.string.ago_hours, diffHours) + } else { + res.getString(R.string.ago_hours, diffHours) + } diffMinutes == 1L -> res.getString(R.string.ago_1Minute) else -> res.getString(R.string.ago_minutes, diffMinutes) } @@ -74,16 +82,24 @@ fun Long.getRemainingString(res: Resources): String { return when { diffMonths != 0L -> if (diffMonths == 1L) { res.getString(R.string.remaining_1month) - } else res.getString(R.string.remaining_months, diffMonths) + } else { + res.getString(R.string.remaining_months, diffMonths) + } diffWeeks != 0L -> if (diffWeeks == 1L) { res.getString(R.string.remaining_1week) - } else res.getString(R.string.remaining_weeks, diffWeeks) + } else { + res.getString(R.string.remaining_weeks, diffWeeks) + } diffDays != 0L -> if (diffDays == 1L) { res.getString(R.string.remaining_1day) - } else res.getString(R.string.remaining_days, diffDays) + } else { + res.getString(R.string.remaining_days, diffDays) + } diffHours != 0L -> if (diffHours == 1L) { res.getString(R.string.remaining_1hour) - } else res.getString(R.string.remaining_hours, diffHours) + } else { + res.getString(R.string.remaining_hours, diffHours) + } diffMinutes == 1L -> res.getString(R.string.remaining_1Minute) else -> res.getString(R.string.remaining_minutes, diffMinutes) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/JsonObject-Extensions.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/JsonObjectExtensions.kt similarity index 100% rename from Habitica/src/main/java/com/habitrpg/android/habitica/extensions/JsonObject-Extensions.kt rename to Habitica/src/main/java/com/habitrpg/android/habitica/extensions/JsonObjectExtensions.kt diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/PendingIntent-Extensions.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/PendingIntentExtensions.kt similarity index 100% rename from Habitica/src/main/java/com/habitrpg/android/habitica/extensions/PendingIntent-Extensions.kt rename to Habitica/src/main/java/com/habitrpg/android/habitica/extensions/PendingIntentExtensions.kt diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/Resources-Extensions.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/ResourcesExtensions.kt similarity index 100% rename from Habitica/src/main/java/com/habitrpg/android/habitica/extensions/Resources-Extensions.kt rename to Habitica/src/main/java/com/habitrpg/android/habitica/extensions/ResourcesExtensions.kt diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/TextWatcher-Extensions.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/TextWatcherExtensions.kt similarity index 100% rename from Habitica/src/main/java/com/habitrpg/android/habitica/extensions/TextWatcher-Extensions.kt rename to Habitica/src/main/java/com/habitrpg/android/habitica/extensions/TextWatcherExtensions.kt diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/Window-Extensions.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/WindowExtensions.kt similarity index 100% rename from Habitica/src/main/java/com/habitrpg/android/habitica/extensions/Window-Extensions.kt rename to Habitica/src/main/java/com/habitrpg/android/habitica/extensions/WindowExtensions.kt diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/ZonedDate-Extensions.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/ZonedDateExtensions.kt similarity index 93% rename from Habitica/src/main/java/com/habitrpg/android/habitica/extensions/ZonedDate-Extensions.kt rename to Habitica/src/main/java/com/habitrpg/android/habitica/extensions/ZonedDateExtensions.kt index 0d82905f1..a63dd8cb3 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/ZonedDate-Extensions.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/ZonedDateExtensions.kt @@ -14,7 +14,8 @@ import java.util.Locale fun String.parseToZonedDateTime(): ZonedDateTime? { val parsed: TemporalAccessor = formatter().parseBest( this, - ZonedDateTime::from, LocalDateTime::from + ZonedDateTime::from, + LocalDateTime::from ) return if (parsed is ZonedDateTime) { parsed @@ -40,4 +41,4 @@ fun formatter(): DateTimeFormatter = .appendPattern("['T'][' ']") .append(DateTimeFormatter.ISO_LOCAL_TIME) .appendPattern("[XX]") - .toFormatter() \ No newline at end of file + .toFormatter() diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/AdHandler.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/AdHandler.kt index c5750c7a1..ec589a6d3 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/AdHandler.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/AdHandler.kt @@ -171,7 +171,9 @@ class AdHandler(val activity: Activity, val type: AdType, val rewardAction: (Boo } RewardedAd.load( - activity, type.adUnitID, adRequest, + activity, + type.adUnitID, + adRequest, object : RewardedAdLoadCallback() { override fun onAdFailedToLoad(adError: LoadAdError) { FirebaseCrashlytics.getInstance().recordException(Throwable(adError.message)) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/Analytics.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/Analytics.kt index 51a0a3630..ba126646c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/Analytics.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/Analytics.kt @@ -30,7 +30,7 @@ enum class HitType(val key: String) { } object Analytics { - private lateinit var firebase : FirebaseAnalytics + private lateinit var firebase: FirebaseAnalytics private lateinit var amplitude: Amplitude @JvmOverloads diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationOpenHandler.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationOpenHandler.kt index e0162c652..8b2389d31 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationOpenHandler.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationOpenHandler.kt @@ -27,7 +27,6 @@ class NotificationOpenHandler { PushNotificationManager.G1G1_PROMO_KEY -> openGiftOneGetOneInfoScreen() else -> { intent.getStringExtra("openURL")?.let { - MainNavigationController.navigate(it) } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/PurchaseHandler.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/PurchaseHandler.kt index 80664e02e..d348d58c0 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/PurchaseHandler.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/PurchaseHandler.kt @@ -54,26 +54,26 @@ import kotlin.time.DurationUnit import kotlin.time.toDuration class PurchaseHandler( - private val context : Context, - private val analyticsManager : AnalyticsManager, - private val apiClient : ApiClient, - private val userViewModel : MainUserViewModel + private val context: Context, + private val analyticsManager: AnalyticsManager, + private val apiClient: ApiClient, + private val userViewModel: MainUserViewModel ) : PurchasesUpdatedListener, PurchasesResponseListener { private val billingClient = BillingClient.newBuilder(context).setListener(this).enablePendingPurchases().build() - override fun onPurchasesUpdated(result : BillingResult, purchases : MutableList?) { + override fun onPurchasesUpdated(result: BillingResult, purchases: MutableList?) { purchases?.let { processPurchases(result, it) } } override fun onQueryPurchasesResponse( - result : BillingResult, - purchases : MutableList + result: BillingResult, + purchases: MutableList ) { processPurchases(result, purchases) } - private fun processPurchases(result : BillingResult, purchases : List) { + private fun processPurchases(result: BillingResult, purchases: List) { when (result.responseCode) { BillingClient.BillingResponseCode.OK -> { val mostRecentSub = findMostRecentSubscription(purchases) @@ -86,9 +86,10 @@ class PurchaseHandler( purchase.products.firstOrNull() ) ) { - if (((plan.dateTerminated != null) == purchase.isAutoRenewing) - || mostRecentSub?.orderId != purchase.orderId - || purchase.purchaseToken == plan.customerId) { + if (((plan.dateTerminated != null) == purchase.isAutoRenewing) || + mostRecentSub?.orderId != purchase.orderId || + purchase.purchaseToken == plan.customerId + ) { continue } } @@ -124,12 +125,12 @@ class PurchaseHandler( startListening() } - private var billingClientState : BillingClientState = BillingClientState.UNINITIALIZED + private var billingClientState: BillingClientState = BillingClientState.UNINITIALIZED private enum class BillingClientState { UNINITIALIZED, READY, UNAVAILABLE, DISCONNECTED, CONNECTING; - val canMaybePurchase : Boolean + val canMaybePurchase: Boolean get() { return this == UNINITIALIZED || this == READY || this == CONNECTING } @@ -150,7 +151,7 @@ class PurchaseHandler( } billingClientState = BillingClientState.CONNECTING billingClient.startConnection(object : BillingClientStateListener { - override fun onBillingSetupFinished(billingResult : BillingResult) { + override fun onBillingSetupFinished(billingResult: BillingResult) { if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) { billingClientState = BillingClientState.READY MainScope().launchCatching { @@ -216,18 +217,18 @@ class PurchaseHandler( suspend fun getAllGiftSubscriptionProducts() = getSKUs(BillingClient.ProductType.INAPP, PurchaseTypes.allSubscriptionNoRenewTypes) - suspend fun getInAppPurchaseSKU(identifier : String) = + suspend fun getInAppPurchaseSKU(identifier: String) = getSKU(BillingClient.ProductType.INAPP, identifier) - private suspend fun getSKUs(type : String, identifiers : List) = + private suspend fun getSKUs(type: String, identifiers: List) = loadInventory(type, identifiers) ?: emptyList() - private suspend fun getSKU(type : String, identifier : String) : ProductDetails? { + private suspend fun getSKU(type: String, identifier: String): ProductDetails? { val inventory = loadInventory(type, listOf(identifier)) return inventory?.firstOrNull() } - private suspend fun loadInventory(type : String, skus : List) : List? { + private suspend fun loadInventory(type: String, skus: List): List? { retryUntil { if (billingClientState == BillingClientState.DISCONNECTED) { startListening() @@ -246,11 +247,11 @@ class PurchaseHandler( } fun purchase( - activity : Activity, - skuDetails : ProductDetails, - recipient : String? = null, - recipientUsername : String? = null, - isSaleGemPurchase : Boolean = false + activity: Activity, + skuDetails: ProductDetails, + recipient: String? = null, + recipientUsername: String? = null, + isSaleGemPurchase: Boolean = false ) { this.isSaleGemPurchase = isSaleGemPurchase recipient?.let { @@ -268,7 +269,7 @@ class PurchaseHandler( billingClient.launchBillingFlow(activity, flowParams) } - private suspend fun consume(purchase : Purchase, retries : Int = 4) { + private suspend fun consume(purchase: Purchase, retries: Int = 4) { retryUntil { billingClientState.canMaybePurchase && billingClient.isReady } val params = ConsumeParams.newBuilder().setPurchaseToken(purchase.purchaseToken).build() val result = billingClient.consumePurchase(params) @@ -276,7 +277,7 @@ class PurchaseHandler( delay(500) consume(purchase, retries - 1) } else if (result.billingResult.responseCode != BillingClient.BillingResponseCode.OK) { - //Throw an error to continue the flow + // Throw an error to continue the flow throw Exception("Failed to consume purchase after multiple attempts") } else { userViewModel.userRepository.retrieveUser(false, true) @@ -284,7 +285,7 @@ class PurchaseHandler( } private var processedPurchases = mutableSetOf() - private fun handle(purchase : Purchase) { + private fun handle(purchase: Purchase) { if (purchase.purchaseState != Purchase.PurchaseState.PURCHASED || processedPurchases.contains(purchase.orderId)) { return } @@ -302,7 +303,7 @@ class PurchaseHandler( consume(purchase) } displayGryphatriceConfirmationDialog(purchase, gift?.third) - } catch (throwable : Throwable) { + } catch (throwable: Throwable) { handleError(throwable, purchase) } } @@ -319,7 +320,7 @@ class PurchaseHandler( consume(purchase) } displayConfirmationDialog(purchase, gift?.third) - } catch (throwable : Throwable) { + } catch (throwable: Throwable) { handleError(throwable, purchase) } } @@ -336,7 +337,7 @@ class PurchaseHandler( consume(purchase) } displayConfirmationDialog(purchase, gift?.third) - } catch (throwable : Throwable) { + } catch (throwable: Throwable) { handleError(throwable, purchase) } } @@ -353,7 +354,7 @@ class PurchaseHandler( acknowledgePurchase(purchase) } displayConfirmationDialog(purchase) - } catch (throwable : Throwable) { + } catch (throwable: Throwable) { handleError(throwable, purchase) } } @@ -361,7 +362,7 @@ class PurchaseHandler( } } - private suspend fun acknowledgePurchase(purchase : Purchase, retries : Int = 4) { + private suspend fun acknowledgePurchase(purchase: Purchase, retries: Int = 4) { val params = AcknowledgePurchaseParams.newBuilder().setPurchaseToken(purchase.purchaseToken).build() val response = billingClient.acknowledgePurchase(params) @@ -371,13 +372,13 @@ class PurchaseHandler( } } - private fun processedPurchase(purchase : Purchase) { + private fun processedPurchase(purchase: Purchase) { MainScope().launch(ExceptionHandler.coroutine()) { userViewModel.userRepository.retrieveUser(false, true) } } - private fun buildValidationRequest(purchase : Purchase) : PurchaseValidationRequest { + private fun buildValidationRequest(purchase: Purchase): PurchaseValidationRequest { val validationRequest = PurchaseValidationRequest() validationRequest.sku = purchase.products.firstOrNull() validationRequest.transaction = Transaction() @@ -395,7 +396,7 @@ class PurchaseHandler( return validationRequest } - private fun handleError(throwable : Throwable, purchase : Purchase) { + private fun handleError(throwable: Throwable, purchase: Purchase) { when (throwable) { is HttpException -> { if (throwable.code() == 401) { @@ -422,24 +423,24 @@ class PurchaseHandler( FirebaseCrashlytics.getInstance().recordException(throwable) } - suspend fun checkForSubscription() : Purchase? { + suspend fun checkForSubscription(): Purchase? { val result = withContext(Dispatchers.IO) { val params = QueryPurchasesParams.newBuilder().setProductType(BillingClient.ProductType.SUBS) .build() billingClient.queryPurchasesAsync(params) } - val fallback : Purchase? = null + val fallback: Purchase? = null if (result.billingResult.responseCode == BillingClient.BillingResponseCode.OK) { return findMostRecentSubscription(result.purchasesList) } return fallback } - private fun findMostRecentSubscription(purchasesList : List) : Purchase? { + private fun findMostRecentSubscription(purchasesList: List): Purchase? { val purchases = purchasesList.filter { it.isAcknowledged }.sortedByDescending { it.purchaseTime } - var fallback : Purchase? = null + var fallback: Purchase? = null // If there is a subscription that is still active, prioritise that. Otherwise return the most recent one. for (purchase in purchases) { if (purchase.isAutoRenewing) { @@ -452,14 +453,14 @@ class PurchaseHandler( } private var alreadyTriedCancellation = false - suspend fun cancelSubscription() : User? { + suspend fun cancelSubscription(): User? { if (alreadyTriedCancellation) return null alreadyTriedCancellation = true apiClient.cancelSubscription() return userViewModel.userRepository.retrieveUser(false, true) } - private fun durationString(sku : String) : String { + private fun durationString(sku: String): String { return when (sku) { PurchaseTypes.Subscription1MonthNoRenew, PurchaseTypes.Subscription1Month -> "1" PurchaseTypes.Subscription3MonthNoRenew, PurchaseTypes.Subscription3Month -> "3" @@ -471,7 +472,7 @@ class PurchaseHandler( private var isSaleGemPurchase = false - private fun gemAmountString(sku : String) : String { + private fun gemAmountString(sku: String): String { if (isSaleGemPurchase) { isSaleGemPurchase = false return when (sku) { @@ -494,7 +495,7 @@ class PurchaseHandler( private val displayedConfirmations = mutableListOf() - private fun displayConfirmationDialog(purchase : Purchase, giftedTo : String? = null) { + private fun displayConfirmationDialog(purchase: Purchase, giftedTo: String? = null) { if (displayedConfirmations.contains(purchase.orderId)) { return } @@ -508,7 +509,9 @@ class PurchaseHandler( PurchaseTypes.allSubscriptionNoRenewTypes.contains(sku) -> { title = context.getString(R.string.gift_confirmation_title) context.getString( - R.string.gift_confirmation_text_sub, giftedTo, durationString(sku) + R.string.gift_confirmation_text_sub, + giftedTo, + durationString(sku) ) } @@ -517,7 +520,8 @@ class PurchaseHandler( context.getString(R.string.subscription_confirmation) } else { context.getString( - R.string.subscription_confirmation_multiple, durationString(sku) + R.string.subscription_confirmation_multiple, + durationString(sku) ) } } @@ -525,7 +529,9 @@ class PurchaseHandler( PurchaseTypes.allGemTypes.contains(sku) && giftedTo != null -> { title = context.getString(R.string.gift_confirmation_title) context.getString( - R.string.gift_confirmation_text_gems_new, giftedTo, gemAmountString(sku) + R.string.gift_confirmation_text_gems_new, + giftedTo, + gemAmountString(sku) ) } @@ -551,8 +557,8 @@ class PurchaseHandler( } private fun displayGryphatriceConfirmationDialog( - purchase : Purchase, - giftedTo : String? = null + purchase: Purchase, + giftedTo: String? = null ) { MainScope().launch(ExceptionHandler.coroutine()) { val application = (context as? HabiticaBaseApplication) @@ -580,15 +586,15 @@ class PurchaseHandler( companion object { private const val PENDING_GIFTS_KEY = "PENDING_GIFTS_DATED" - private var pendingGifts : MutableMap> = HashMap() - private var preferences : SharedPreferences? = null + private var pendingGifts: MutableMap> = HashMap() + private var preferences: SharedPreferences? = null - fun addGift(sku : String, userID : String, username : String) { + fun addGift(sku: String, userID: String, username: String) { pendingGifts[sku] = Triple(Date(), userID, username) savePendingGifts() } - private fun removeGift(sku : String?) : Triple? { + private fun removeGift(sku: String?): Triple? { val gift = pendingGifts.remove(sku) savePendingGifts() return gift @@ -605,11 +611,11 @@ class PurchaseHandler( } suspend fun retryUntil( - times : Int = Int.MAX_VALUE, - initialDelay : Long = 100, // 0.1 second - maxDelay : Long = 1000, // 1 second - factor : Double = 2.0, - block : suspend () -> Boolean + times: Int = Int.MAX_VALUE, + initialDelay: Long = 100, // 0.1 second + maxDelay: Long = 1000, // 1 second + factor: Double = 2.0, + block: suspend () -> Boolean ) { var currentDelay = initialDelay repeat(times - 1) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskAlarmManager.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskAlarmManager.kt index dfef3b127..909c1f83d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskAlarmManager.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskAlarmManager.kt @@ -31,7 +31,7 @@ import java.util.Date class TaskAlarmManager( private var context: Context, private var taskRepository: TaskRepository, - private var authenticationHandler : AuthenticationHandler + private var authenticationHandler: AuthenticationHandler ) { private val am: AlarmManager? = context.getSystemService(Context.ALARM_SERVICE) as? AlarmManager diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskDescriptionBuilder.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskDescriptionBuilder.kt index 6f2a4e561..46ee68fff 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskDescriptionBuilder.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskDescriptionBuilder.kt @@ -130,7 +130,8 @@ class TaskDescriptionBuilder(private val context: Context) { Frequency.WEEKLY -> context.resources.getQuantityString(R.plurals.repeat_weekly, everyX, everyX) Frequency.MONTHLY -> context.resources.getQuantityString( R.plurals.repeat_monthly, - everyX, everyX + everyX, + everyX ) Frequency.YEARLY -> context.resources.getQuantityString(R.plurals.repeat_yearly, everyX, everyX) null -> "" diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/GroupActivityNotification.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/GroupActivityNotification.kt index 9507d2914..b116c872f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/GroupActivityNotification.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/GroupActivityNotification.kt @@ -34,7 +34,9 @@ class GroupActivityNotification(context: Context, identifier: String?) : Habitic val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as? NotificationManager val existingNotifications = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { notificationManager?.activeNotifications?.filter { it.id == getNotificationID(data) } - } else null + } else { + null + } val oldMessages = existingNotifications?.firstOrNull()?.notification?.extras?.getBundle("messages")?.get("messages") as? ArrayList> ?: arrayListOf() for (oldMessage in oldMessages) { style = style.addMessage(makeMessageFromData(oldMessage)) @@ -75,7 +77,8 @@ class GroupActivityNotification(context: Context, identifier: String?) : Habitic intent.putExtra("NOTIFICATION_ID", notificationId) val replyPendingIntent: PendingIntent = PendingIntent.getBroadcast( - context, groupID.hashCode(), + context, + groupID.hashCode(), intent, withMutableFlag(PendingIntent.FLAG_UPDATE_CURRENT) ) @@ -83,7 +86,8 @@ class GroupActivityNotification(context: Context, identifier: String?) : Habitic val action: NotificationCompat.Action = NotificationCompat.Action.Builder( R.drawable.ic_send_grey_600_24dp, - context.getString(R.string.reply), replyPendingIntent + context.getString(R.string.reply), + replyPendingIntent ) .addRemoteInput(remoteInput) .build() diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedPrivateMessageLocalNotification.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedPrivateMessageLocalNotification.kt index d3c73f39d..0d65a2009 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedPrivateMessageLocalNotification.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/ReceivedPrivateMessageLocalNotification.kt @@ -19,7 +19,9 @@ class ReceivedPrivateMessageLocalNotification(context: Context, identifier: Stri val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as? NotificationManager val existingNotifications = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { notificationManager?.activeNotifications?.filter { it.id == getNotificationID(data) } - } else null + } else { + null + } val messageText = EmojiParser.parseEmojis(data["message"]?.trim { it <= ' ' }) val oldMessages = existingNotifications?.firstOrNull()?.notification?.extras?.getStringArrayList("messages") ?: arrayListOf() var style = NotificationCompat.InboxStyle() @@ -73,7 +75,8 @@ class ReceivedPrivateMessageLocalNotification(context: Context, identifier: Stri intent.putExtra("NOTIFICATION_ID", notificationId) val replyPendingIntent: PendingIntent = PendingIntent.getBroadcast( - context, senderID.hashCode(), + context, + senderID.hashCode(), intent, withMutableFlag(PendingIntent.FLAG_UPDATE_CURRENT) ) @@ -81,7 +84,8 @@ class ReceivedPrivateMessageLocalNotification(context: Context, identifier: Stri val action: NotificationCompat.Action = NotificationCompat.Action.Builder( R.drawable.ic_send_grey_600_24dp, - context.getString(R.string.reply), replyPendingIntent + context.getString(R.string.reply), + replyPendingIntent ) .addRemoteInput(remoteInput) .build() diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/BuyRewardUseCase.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/BuyRewardUseCase.kt index 9bb470426..29a1aec90 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/BuyRewardUseCase.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/BuyRewardUseCase.kt @@ -10,7 +10,7 @@ import javax.inject.Inject class BuyRewardUseCase @Inject constructor( private val taskRepository: TaskRepository, - private val soundManager: SoundManager, + private val soundManager: SoundManager ) : UseCase() { override suspend fun run(requestValues: RequestValues): TaskScoringResult? { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/DisplayItemDropUseCase.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/DisplayItemDropUseCase.kt index cd613438b..fd037c2f0 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/DisplayItemDropUseCase.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/DisplayItemDropUseCase.kt @@ -21,8 +21,9 @@ constructor(private val soundManager: SoundManager) : val snackbarText = StringBuilder(data?.drop?.dialog ?: "") if ((data?.questItemsFound ?: 0) > 0 && requestValues.showQuestItems) { - if (snackbarText.isNotEmpty()) + if (snackbarText.isNotEmpty()) { snackbarText.append('\n') + } snackbarText.append( requestValues.context.getString( R.string.quest_items_found, @@ -36,7 +37,9 @@ constructor(private val soundManager: SoundManager) : delay(3000L) HabiticaSnackbar.showSnackbar( requestValues.snackbarTargetView, - snackbarText, HabiticaSnackbar.SnackbarDisplayType.DROP, true + snackbarText, + HabiticaSnackbar.SnackbarDisplayType.DROP, + true ) soundManager.loadAndPlayAudio(SoundManager.SoundItemDrop) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/FeedPetUseCase.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/FeedPetUseCase.kt index d121d676b..b2640bbcf 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/FeedPetUseCase.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/FeedPetUseCase.kt @@ -19,7 +19,7 @@ import javax.inject.Inject class FeedPetUseCase @Inject constructor( - private val inventoryRepository: InventoryRepository, + private val inventoryRepository: InventoryRepository ) : UseCase() { override suspend fun run(requestValues: FeedPetUseCase.RequestValues): FeedResponse? { val feedResponse = inventoryRepository.feedPet(requestValues.pet, requestValues.food) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/InsufficientGemsUseCase.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/InsufficientGemsUseCase.kt index b43e5e0f3..df357a4d9 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/InsufficientGemsUseCase.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/InsufficientGemsUseCase.kt @@ -22,4 +22,4 @@ class InsufficientGemsUseCase @Inject constructor( } class RequestValues(val gemPrice: Int, val activity: Activity) : UseCase.RequestValues -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/LevelUpUseCase.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/LevelUpUseCase.kt index 751e16dcc..08223e653 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/LevelUpUseCase.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/LevelUpUseCase.kt @@ -52,7 +52,8 @@ constructor( HabiticaSnackbar.showSnackbar( requestValues.snackbarTargetView, requestValues.activity.getString(R.string.levelup_header, requestValues.newLevel), - HabiticaSnackbar.SnackbarDisplayType.SUCCESS, true + HabiticaSnackbar.SnackbarDisplayType.SUCCESS, + true ) return requestValues.user.stats } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/NotifyUserUseCase.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/NotifyUserUseCase.kt index b63f9f7f7..8b85cc598 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/NotifyUserUseCase.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/NotifyUserUseCase.kt @@ -74,7 +74,6 @@ constructor( questDamage: Double?, user: User? ): Pair { - var displayType = SnackbarDisplayType.SUCCESS val container = LinearLayout(context) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/TeamPlan.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/TeamPlan.kt index 84cd7c2ce..68c1a3229 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/TeamPlan.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/TeamPlan.kt @@ -10,8 +10,10 @@ open class TeamPlan : RealmObject(), BaseObject { var userID: String? = null var summary: String = "" + @SerializedName("leader") var leaderID: String? = null + // var managers: RealmList = RealmList() var isActive: Boolean = false diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/TutorialStep.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/TutorialStep.kt index b38e45add..f2b1d863e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/TutorialStep.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/TutorialStep.kt @@ -41,7 +41,7 @@ open class TutorialStep : RealmObject(), BaseMainObject { val flagPath: String get() = "flags.tutorial.$tutorialGroup.$identifier" - val linkFAQ : Boolean + val linkFAQ: Boolean get() { return identifier == "party" } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/WorldState.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/WorldState.kt index b3214dc10..62a704df4 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/WorldState.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/WorldState.kt @@ -18,6 +18,7 @@ open class WorldState : RealmObject(), BaseObject { var npcImageSuffix: String? = null var currentEvent: WorldStateEvent? = null + @SerializedName("currentEventList") var events: RealmList = RealmList() } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/auth/LocalAuthentication.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/auth/LocalAuthentication.kt index bf911ddc6..a61aa50bc 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/auth/LocalAuthentication.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/auth/LocalAuthentication.kt @@ -10,6 +10,7 @@ import io.realm.annotations.RealmClass open class LocalAuthentication : RealmObject(), BaseObject, AvatarLocalAuthentication { override var username: String? = null var email: String? = null + @SerializedName("has_password") var hasPassword: Boolean? = false } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Customization.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Customization.kt index 4be8fb2f2..8674dbe06 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Customization.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Customization.kt @@ -61,10 +61,12 @@ open class Customization : RealmObject(), BaseObject { "hair" -> { return if (identifier == "0") { "head_0" - } else when (this.category) { - "color" -> "hair_bangs_1_$identifier" - "flower" -> "hair_flower_$identifier" - else -> "hair_" + this.category + "_" + identifier + "_" + hairColor + } else { + when (this.category) { + "color" -> "hair_bangs_1_$identifier" + "flower" -> "hair_flower_$identifier" + else -> "hair_" + this.category + "_" + identifier + "_" + hairColor + } } } "background" -> return "background_$identifier" diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Equipment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Equipment.kt index 0f918ea1e..47025b88b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Equipment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Equipment.kt @@ -10,6 +10,7 @@ open class Equipment : RealmObject(), BaseMainObject { var value: Double = 0.toDouble() var type: String? = "" + @PrimaryKey var key: String? = "" var klass: String = "" @@ -20,6 +21,7 @@ open class Equipment : RealmObject(), BaseMainObject { var con: Int = 0 var str: Int = 0 var per: Int = 0 + @SerializedName("int") var _int: Int = 0 var owned: Boolean? = null diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Mount.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Mount.kt index 6f2f30cb3..178362698 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Mount.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Mount.kt @@ -11,13 +11,17 @@ open class Mount : RealmObject(), Animal { get() { return if (field.isBlank()) { key?.split("-")?.toTypedArray()?.get(0) ?: "" - } else field + } else { + field + } } override var color: String = "" get() { return if (field.isBlank()) { key?.split("-")?.toTypedArray()?.get(1) ?: "" - } else field + } else { + field + } } override var text: String? = null override var type: String? = null @@ -25,6 +29,7 @@ open class Mount : RealmObject(), Animal { @Ignore override var numberOwned: Int = 0 + @Ignore override var totalNumber: Int = 0 } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Pet.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Pet.kt index ae66e9716..ef90863c4 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Pet.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Pet.kt @@ -11,13 +11,17 @@ open class Pet : RealmObject(), Animal { get() { return if (field.isBlank()) { key?.split("-")?.toTypedArray()?.get(0) ?: "" - } else field + } else { + field + } } override var color: String = "" get() { return if (field.isBlank()) { key?.split("-")?.toTypedArray()?.get(1) ?: "" - } else field + } else { + field + } } override var text: String? = null override var type: String? = null @@ -25,6 +29,7 @@ open class Pet : RealmObject(), Animal { @Ignore override var numberOwned: Int = 0 + @Ignore override var totalNumber: Int = 0 } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/invitations/InviteResponse.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/invitations/InviteResponse.kt index d8d18be2f..9e5d5d7bf 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/invitations/InviteResponse.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/invitations/InviteResponse.kt @@ -1,5 +1,3 @@ package com.habitrpg.android.habitica.models.invitations -class InviteResponse { - -} +class InviteResponse diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/members/MemberPreferences.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/members/MemberPreferences.kt index 702634dc3..7b9344edd 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/members/MemberPreferences.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/members/MemberPreferences.kt @@ -26,7 +26,9 @@ open class MemberPreferences : } else { "chair_$field" } - } else null + } else { + null + } } var language: String? = null } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/responses/BulkTaskScoringData.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/responses/BulkTaskScoringData.kt index a4ebfc3e7..2e507ecd1 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/responses/BulkTaskScoringData.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/responses/BulkTaskScoringData.kt @@ -8,16 +8,20 @@ import com.habitrpg.shared.habitica.models.responses.TaskDirectionData class BulkTaskScoringData { @SerializedName("con") var constitution: Int? = null + @SerializedName("str") var strength: Int? = null + @SerializedName("per") var per: Int? = null + @SerializedName("int") var intelligence: Int? = null var training: Training? = null var buffs: Buffs? = null var points: Int? = null var lvl: Int? = null + @SerializedName("class") var habitClass: String? = null var gp: Double? = null diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/shops/ShopItem.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/shops/ShopItem.kt index 40f0dcb46..23a5b8cc4 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/shops/ShopItem.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/shops/ShopItem.kt @@ -18,6 +18,7 @@ open class ShopItem : RealmObject(), BaseObject { var key: String = "" var text: String? = "" var notes: String? = "" + @SerializedName("class") var imageName: String? = null get() { @@ -44,9 +45,11 @@ open class ShopItem : RealmObject(), BaseObject { var unlockPath: String? = null var isSuggested: String? = null var pinType: String? = null + @SerializedName("klass") var habitClass: String? = null var previous: String? = null + @SerializedName("lvl") var level: Int? = null var event: ItemEvent? = null diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/social/Challenge.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/social/Challenge.kt index 933d5526d..fb9013ebc 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/social/Challenge.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/social/Challenge.kt @@ -33,6 +33,7 @@ open class Challenge : RealmObject(), BaseMainObject { var group: Group? = null var leader: User? = null + @Ignore var tasksOrder: TasksOrder? = null var summary: String? = null @@ -69,7 +70,9 @@ open class Challenge : RealmObject(), BaseMainObject { override fun equals(other: Any?): Boolean { return if (other?.javaClass == Challenge::class.java && this.id != null) { this.id == (other as Challenge).id - } else super.equals(other) + } else { + super.equals(other) + } } override fun hashCode(): Int { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/social/UserParty.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/social/UserParty.kt index ef5eacf82..c4a32563d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/social/UserParty.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/social/UserParty.kt @@ -13,6 +13,7 @@ open class UserParty : RealmObject(), BaseObject { var id: String = "" var quest: Quest? = null var seeking: Date? = null + @SerializedName("order") var partyOrder: String? = null // Order to display ppl var orderAscending: String? = null // Order type diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/ChecklistItem.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/ChecklistItem.kt index f526f11d7..40c4dd9bc 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/ChecklistItem.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/ChecklistItem.kt @@ -66,7 +66,9 @@ open class ChecklistItem : RealmObject, BaseMainObject, Parcelable { override fun equals(other: Any?): Boolean { return if (other is ChecklistItem) { this.id == other.id - } else super.equals(other) + } else { + super.equals(other) + } } override fun hashCode(): Int { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/RemindersItem.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/RemindersItem.kt index f7250cf4a..cf7ed69cf 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/RemindersItem.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/RemindersItem.kt @@ -51,7 +51,9 @@ open class RemindersItem : RealmObject, Parcelable { override fun equals(other: Any?): Boolean { return if (other is RemindersItem) { this.id == other.id - } else super.equals(other) + } else { + super.equals(other) + } } override fun hashCode(): Int { @@ -71,7 +73,8 @@ open class RemindersItem : RealmObject, Parcelable { val parsed: TemporalAccessor = formatter.parseBest( time, - ZonedDateTime::from, LocalDateTime::from + ZonedDateTime::from, + LocalDateTime::from ) return if (parsed is ZonedDateTime) { parsed @@ -91,7 +94,8 @@ open class RemindersItem : RealmObject, Parcelable { val parsed: TemporalAccessor = formatter.parseBest( time, - ZonedDateTime::from, LocalDateTime::from + ZonedDateTime::from, + LocalDateTime::from ) return if (parsed is ZonedDateTime) { parsed.withZoneSameLocal(ZoneId.systemDefault())?.toInstant() diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.kt index 1874f47a3..29386cc26 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.kt @@ -69,15 +69,18 @@ open class Task : RealmObject, BaseMainObject, Parcelable, BaseTask { var dateCreated: Date? = null var position: Int = 0 var group: TaskGroupPlan? = null + // Habits var up: Boolean? = false var down: Boolean? = false override var counterUp: Int? = 0 override var counterDown: Int? = 0 + // todos/dailies override var completed: Boolean = false var checklist: RealmList? = RealmList() var reminders: RealmList? = RealmList() + // dailies var frequency: Frequency? get() = Frequency.from(frequencyValue) @@ -87,11 +90,14 @@ open class Task : RealmObject, BaseMainObject, Parcelable, BaseTask { override var streak: Int? = 0 var startDate: Date? = null var repeat: Days? = null + // todos @SerializedName("date") var dueDate: Date? = null + @Ignore var parsedText: Spanned? = null + @Ignore var parsedNotes: Spanned? = null @@ -370,8 +376,6 @@ open class Task : RealmObject, BaseMainObject, Parcelable, BaseTask { } } - - fun parseMarkdown() { parsedText = MarkdownParser.parseMarkdown(text) parsedNotes = MarkdownParser.parseMarkdown(notes) @@ -421,7 +425,6 @@ open class Task : RealmObject, BaseMainObject, Parcelable, BaseTask { } fun isBeingEdited(task: Task): Boolean { - when { text != task.text -> return true notes != task.notes -> return true diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/Authentication.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/Authentication.kt index 903fbdab3..b3da44f0c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/Authentication.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/Authentication.kt @@ -22,12 +22,16 @@ open class Authentication : RealmObject(), BaseObject, AvatarAuthentication { var blocked: Boolean = false val hasPassword: Boolean get() = localAuthentication?.hasPassword == true + @SerializedName("local") override var localAuthentication: LocalAuthentication? = null + @SerializedName("google") var googleAuthentication: SocialAuthentication? = null + @SerializedName("apple") var appleAuthentication: SocialAuthentication? = null + @SerializedName("facebook") var facebookAuthentication: SocialAuthentication? = null diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/AuthenticationTimestamps.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/AuthenticationTimestamps.kt index 7a0529f37..cc05d5ae4 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/AuthenticationTimestamps.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/AuthenticationTimestamps.kt @@ -10,6 +10,7 @@ import java.util.Date open class AuthenticationTimestamps : RealmObject(), BaseObject { @SerializedName("loggedin") var lastLoggedIn: Date? = null + @SerializedName("created") var createdAt: Date? = null } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/Outfit.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/Outfit.kt index 2da2c9d87..a48c334a4 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/Outfit.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/Outfit.kt @@ -14,6 +14,7 @@ open class Outfit : RealmObject(), BaseObject, AvatarOutfit { override var head: String = "" override var shield: String = "" override var weapon: String = "" + @SerializedName("eyewear") override var eyeWear: String = "" override var headAccessory: String = "" diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/Preferences.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/Preferences.kt index 4113e4ba5..9195d1b27 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/Preferences.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/Preferences.kt @@ -11,8 +11,10 @@ open class Preferences : RealmObject(), AvatarPreferences, BaseObject { override var hair: Hair? = null var suppressModals: SuppressedModals? = null override var costume: Boolean = false + @SerializedName("disableClasses") override var disableClasses: Boolean = false + @SerializedName("sleep") override var sleep: Boolean = false var dailyDueDefaultView: Boolean = false @@ -30,7 +32,9 @@ open class Preferences : RealmObject(), AvatarPreferences, BaseObject { } else { "chair_" + field!! } - } else "chair_none" + } else { + "chair_none" + } } var language: String? = null var sound: String? = null diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/Stats.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/Stats.kt index cb9810094..5a5ebe45f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/Stats.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/Stats.kt @@ -10,16 +10,20 @@ import io.realm.annotations.RealmClass open class Stats : RealmObject(), AvatarStats, BaseObject { @SerializedName("con") var constitution: Int? = null + @SerializedName("str") var strength: Int? = null + @SerializedName("per") var per: Int? = null + @SerializedName("int") var intelligence: Int? = null var training: Training? = null override var buffs: Buffs? = null override var points: Int? = null override var lvl: Int? = null + @SerializedName("class") override var habitClass: String? = null override var gp: Double? = null diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/SubscriptionPlan.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/SubscriptionPlan.kt index a1487b973..2ad1dad22 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/SubscriptionPlan.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/SubscriptionPlan.kt @@ -43,7 +43,9 @@ open class SubscriptionPlan : RealmObject(), BaseObject { get() { return if (isActive) { 25 + (consecutive?.gemCapExtra ?: 0) - } else 0 + } else { + 0 + } } val numberOfGemsLeft: Int diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/User.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/User.kt index cebe904f7..b8fd5bef3 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/User.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/User.kt @@ -58,6 +58,7 @@ open class User : RealmObject(), BaseMainObject, Avatar, VersionedObject { var profile: Profile? = null var party: UserParty? = null override var items: Items? = null + @SerializedName("auth") override var authentication: Authentication? = null override var flags: Flags? = null diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/AppModule.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/AppModule.kt index 4afb98bc2..45fcb8d75 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/AppModule.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/AppModule.kt @@ -60,10 +60,11 @@ class AppModule { ): KeyHelper? { return if (keyStore == null) { null - } else getInstance(context, sharedPreferences, keyStore) + } else { + getInstance(context, sharedPreferences, keyStore) + } } - @Provides @Singleton fun providesAuthenticationHandler(sharedPreferences: SharedPreferences): AuthenticationHandler { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/RepositoryModule.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/RepositoryModule.kt index 34759ecb8..928e692fd 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/RepositoryModule.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/RepositoryModule.kt @@ -31,7 +31,7 @@ open class RepositoryModule { contentLocalRepository: ContentLocalRepository, apiClient: ApiClient, @ApplicationContext context: Context, - authenticationHandler : AuthenticationHandler + authenticationHandler: AuthenticationHandler ): ContentRepository { return ContentRepositoryImpl( contentLocalRepository, diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/UserModule.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/UserModule.kt index 96a61aa3e..e05646d13 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/UserModule.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/UserModule.kt @@ -31,7 +31,7 @@ class AuthenticationHandler { val isAuthenticated: Boolean get() = currentUserID != null - constructor(sharedPreferences : SharedPreferences) { + constructor(sharedPreferences: SharedPreferences) { _userIDFlow.value = sharedPreferences.getString("UserID", "") ?: "" } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/UserRepositoryModule.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/UserRepositoryModule.kt index 42d5f90c4..6c6bffc7b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/UserRepositoryModule.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/UserRepositoryModule.kt @@ -69,7 +69,7 @@ class UserRepositoryModule { fun providesTaskRepository( localRepository: TaskLocalRepository, apiClient: ApiClient, - authenticationHandler : AuthenticationHandler, + authenticationHandler: AuthenticationHandler, appConfigManager: AppConfigManager, analyticsManager: AnalyticsManager ): TaskRepository { @@ -91,7 +91,7 @@ class UserRepositoryModule { fun providesTagRepository( localRepository: TagLocalRepository, apiClient: ApiClient, - authenticationHandler : AuthenticationHandler + authenticationHandler: AuthenticationHandler ): TagRepository { return TagRepositoryImpl(localRepository, apiClient, authenticationHandler) } @@ -105,7 +105,7 @@ class UserRepositoryModule { fun providesChallengeRepository( localRepository: ChallengeLocalRepository, apiClient: ApiClient, - authenticationHandler : AuthenticationHandler + authenticationHandler: AuthenticationHandler ): ChallengeRepository { return ChallengeRepositoryImpl(localRepository, apiClient, authenticationHandler) } @@ -119,7 +119,7 @@ class UserRepositoryModule { fun providesUserRepository( localRepository: UserLocalRepository, apiClient: ApiClient, - authenticationHandler : AuthenticationHandler, + authenticationHandler: AuthenticationHandler, taskRepository: TaskRepository, appConfigManager: AppConfigManager, analyticsManager: AnalyticsManager @@ -143,14 +143,15 @@ class UserRepositoryModule { fun providesSocialRepository( localRepository: SocialLocalRepository, apiClient: ApiClient, - authenticationHandler : AuthenticationHandler + authenticationHandler: AuthenticationHandler ): SocialRepository { return SocialRepositoryImpl(localRepository, apiClient, authenticationHandler) } @Provides fun providesInventoryLocalRepository( - realm: Realm): InventoryLocalRepository { + realm: Realm + ): InventoryLocalRepository { return RealmInventoryLocalRepository(realm) } @@ -158,7 +159,7 @@ class UserRepositoryModule { fun providesInventoryRepository( localRepository: InventoryLocalRepository, apiClient: ApiClient, - authenticationHandler : AuthenticationHandler, + authenticationHandler: AuthenticationHandler, remoteConfig: AppConfigManager ): InventoryRepository { return InventoryRepositoryImpl(localRepository, apiClient, authenticationHandler, remoteConfig) @@ -173,7 +174,7 @@ class UserRepositoryModule { fun providesFAQRepository( localRepository: FAQLocalRepository, apiClient: ApiClient, - authenticationHandler : AuthenticationHandler + authenticationHandler: AuthenticationHandler ): FAQRepository { return FAQRepositoryImpl(localRepository, apiClient, authenticationHandler) } @@ -187,7 +188,7 @@ class UserRepositoryModule { fun providesTutorialRepository( localRepository: TutorialLocalRepository, apiClient: ApiClient, - authenticationHandler : AuthenticationHandler + authenticationHandler: AuthenticationHandler ): TutorialRepository { return TutorialRepositoryImpl(localRepository, apiClient, authenticationHandler) } @@ -201,7 +202,7 @@ class UserRepositoryModule { fun providesCustomizationRepository( localRepository: CustomizationLocalRepository, apiClient: ApiClient, - authenticationHandler : AuthenticationHandler + authenticationHandler: AuthenticationHandler ): CustomizationRepository { return CustomizationRepositoryImpl(localRepository, apiClient, authenticationHandler) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/NotificationPublisher.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/NotificationPublisher.kt index 8e06e4186..94fa5c046 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/NotificationPublisher.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/NotificationPublisher.kt @@ -32,8 +32,10 @@ class NotificationPublisher : BroadcastReceiver() { @Inject lateinit var taskRepository: TaskRepository + @Inject lateinit var userRepository: UserRepository + @Inject lateinit var sharedPreferences: SharedPreferences @@ -44,7 +46,7 @@ class NotificationPublisher : BroadcastReceiver() { this.context = context if (!wasInjected) { wasInjected = true - } + } var wasInactive = false // Show special notification if user hasn't logged in for a week @@ -121,8 +123,10 @@ class NotificationPublisher : BroadcastReceiver() { notificationIntent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP val intent = PendingIntent.getActivity( - thisContext, 0, - notificationIntent, withImmutableFlag(0) + thisContext, + 0, + notificationIntent, + withImmutableFlag(0) ) builder.setContentIntent(intent) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/TaskAlarmBootReceiver.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/TaskAlarmBootReceiver.kt index ae2fc610c..91a5979a1 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/TaskAlarmBootReceiver.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/TaskAlarmBootReceiver.kt @@ -18,6 +18,7 @@ class TaskAlarmBootReceiver : BroadcastReceiver() { @Inject lateinit var taskAlarmManager: TaskAlarmManager + @Inject lateinit var sharedPreferences: SharedPreferences diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/GemPurchaseOptionsView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/GemPurchaseOptionsView.kt index ec34e3451..514b675e9 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/GemPurchaseOptionsView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/GemPurchaseOptionsView.kt @@ -17,7 +17,8 @@ class GemPurchaseOptionsView(context: Context, attrs: AttributeSet) : FrameLayou val a = context.theme.obtainStyledAttributes( attrs, R.styleable.GemPurchaseOptionsView, - 0, 0 + 0, + 0 ) binding.gemAmount.text = a.getText(R.styleable.GemPurchaseOptionsView_gemAmount) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/SpeechBubbleView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/SpeechBubbleView.kt index 088b10425..dab19a26b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/SpeechBubbleView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/SpeechBubbleView.kt @@ -16,7 +16,8 @@ class SpeechBubbleView(context: Context, attrs: AttributeSet) : FrameLayout(cont val attributes = context.theme.obtainStyledAttributes( attrs, R.styleable.SpeechBubbleView, - 0, 0 + 0, + 0 ) binding.namePlate.text = attributes.getString(R.styleable.SpeechBubbleView_namePlate) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/AdventureGuideActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/AdventureGuideActivity.kt index 8aed88edc..371b8b51b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/AdventureGuideActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/AdventureGuideActivity.kt @@ -75,7 +75,9 @@ class AdventureGuideActivity : BaseActivity() { return if (item.itemId == android.R.id.home) { NavUtils.navigateUpFromSameTask(this) true - } else super.onOptionsItemSelected(item) + } else { + super.onOptionsItemSelected(item) + } } private fun updateUser(user: User) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ArmoireActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ArmoireActivity.kt index edce32582..49d4810ca 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ArmoireActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ArmoireActivity.kt @@ -42,8 +42,10 @@ class ArmoireActivity : BaseActivity() { @Inject internal lateinit var inventoryRepository: InventoryRepository + @Inject internal lateinit var appConfigManager: AppConfigManager + @Inject lateinit var userViewModel: MainUserViewModel @@ -156,7 +158,8 @@ class ArmoireActivity : BaseActivity() { createParticles(container, R.drawable.confetti_red) createParticles(container, R.drawable.confetti_yellow) createParticles(container, R.drawable.confetti_purple) - }, 500 + }, + 500 ) binding.iconView.startAnimation(Animations.bobbingAnimation()) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.kt index 3955d5f94..9147b28e7 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.kt @@ -41,8 +41,10 @@ import javax.inject.Inject abstract class BaseActivity : AppCompatActivity() { @Inject lateinit var notificationsManager: NotificationsManager + @Inject lateinit var userRepository: UserRepository + @Inject internal lateinit var analyticsManager: AnalyticsManager diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BirthdayActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BirthdayActivity.kt index 314c34856..3a5b74f45 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BirthdayActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BirthdayActivity.kt @@ -559,7 +559,8 @@ fun PotionGrid() { model = DataBindingUtils.BASE_IMAGE_URL + DataBindingUtils.getFullFilename( "Pet_HatchingPotion_$potion" ), - null, Modifier.size(68.dp) + null, + Modifier.size(68.dp) ) } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ChallengeFormActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ChallengeFormActivity.kt index b9b7abc42..6076f2445 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ChallengeFormActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ChallengeFormActivity.kt @@ -15,12 +15,9 @@ import android.widget.ArrayAdapter import android.widget.EditText import android.widget.TextView import androidx.activity.result.contract.ActivityResultContracts -import androidx.activity.viewModels import androidx.appcompat.widget.AppCompatCheckedTextView -import androidx.fragment.app.viewModels import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope -import androidx.lifecycle.viewmodel.compose.viewModel import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.data.ChallengeRepository import com.habitrpg.android.habitica.data.SocialRepository @@ -230,7 +227,10 @@ class ChallengeFormActivity : BaseActivity() { tasksViewModel = ViewModelProvider(this)[TasksViewModel::class.java] ChallengeTasksRecyclerViewAdapter( - tasksViewModel, 0, this, "", + tasksViewModel, + 0, + this, + "", openTaskDisabled = false, taskActionsDisabled = true ).also { challengeTasks = it } @@ -499,7 +499,9 @@ class ChallengeFormActivity : BaseActivity() { taskList.remove(addReward) return challengeRepository.updateChallenge( - c, taskList, ArrayList(addedTasks.values), + c, + taskList, + ArrayList(addedTasks.values), ArrayList(updatedTasks.values), ArrayList(removedTasks.keys) ) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ClassSelectionActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ClassSelectionActivity.kt index 091dd43b0..fa1723cc2 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ClassSelectionActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ClassSelectionActivity.kt @@ -214,7 +214,6 @@ class ClassSelectionActivity : BaseActivity() { classWasUnset optOutOfClasses() } - } alert.addButton(R.string.close, false) alert.show() @@ -243,8 +242,8 @@ class ClassSelectionActivity : BaseActivity() { val alert = HabiticaAlertDialog(this) alert.setTitle(getString(R.string.class_changed, className)) alert.setMessage(getString(R.string.class_changed_description, className)) - alert.addButton(getString(R.string.complete_tutorial), true){ _, _ -> dismiss() } - alert.addButton(getString(R.string.learn_more), false){ _, _ -> + alert.addButton(getString(R.string.complete_tutorial), true) { _, _ -> dismiss() } + alert.addButton(getString(R.string.learn_more), false) { _, _ -> dismiss() MainNavigationController.navigate(R.id.FAQOverviewFragment) } @@ -283,7 +282,7 @@ class ClassSelectionActivity : BaseActivity() { } } - private fun displayProgressDialog(progressText: String) : HabiticaProgressDialog { + private fun displayProgressDialog(progressText: String): HabiticaProgressDialog { return HabiticaProgressDialog.show(this, progressText, 300) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/DeathActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/DeathActivity.kt index 7552d08cf..0a485cfac 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/DeathActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/DeathActivity.kt @@ -30,8 +30,10 @@ class DeathActivity : BaseActivity() { @Inject internal lateinit var inventoryRepository: InventoryRepository + @Inject internal lateinit var appConfigManager: AppConfigManager + @Inject lateinit var userViewModel: MainUserViewModel diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.kt index 4abdef741..0fc2288d1 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.kt @@ -73,6 +73,7 @@ class FullProfileActivity : BaseActivity() { @Inject lateinit var socialRepository: SocialRepository + @Inject lateinit var sharedPrefs: SharedPreferences @@ -530,7 +531,11 @@ class FullProfileActivity : BaseActivity() { private fun addLevelAttributes(user: Member) { val byLevelStat = min((user.stats?.lvl ?: 0) / 2.0f, 50f) addAttributeRow( - getString(R.string.profile_level), byLevelStat, byLevelStat, byLevelStat, byLevelStat, + getString(R.string.profile_level), + byLevelStat, + byLevelStat, + byLevelStat, + byLevelStat, roundDown = true, isSummary = false ) @@ -679,10 +684,11 @@ class FullProfileActivity : BaseActivity() { binding.attributesCollapseIcon.setImageDrawable( ContextCompat.getDrawable( this, - if (attributeDetailsHidden) + if (attributeDetailsHidden) { R.drawable.ic_keyboard_arrow_right_black_24dp - else + } else { R.drawable.ic_keyboard_arrow_down_black_24dp + } ) ) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GemPurchaseActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GemPurchaseActivity.kt index 1bad732a6..c49231c96 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GemPurchaseActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GemPurchaseActivity.kt @@ -15,7 +15,6 @@ class GemPurchaseActivity : PurchaseActivity() { return R.layout.activity_gem_purchase } - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GiftGemsActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GiftGemsActivity.kt index 1d3864a18..7c4e28a04 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GiftGemsActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GiftGemsActivity.kt @@ -34,8 +34,10 @@ class GiftGemsActivity : PurchaseActivity() { @Inject lateinit var socialRepository: SocialRepository + @Inject lateinit var appConfigManager: AppConfigManager + @Inject lateinit var purchaseHandler: PurchaseHandler diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GiftSubscriptionActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GiftSubscriptionActivity.kt index 069b0a1f1..d00737a17 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GiftSubscriptionActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GiftSubscriptionActivity.kt @@ -28,8 +28,10 @@ class GiftSubscriptionActivity : PurchaseActivity() { @Inject lateinit var socialRepository: SocialRepository + @Inject lateinit var appConfigManager: AppConfigManager + @Inject lateinit var purchaseHandler: PurchaseHandler diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GroupInviteActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GroupInviteActivity.kt index 7525c1675..b66c27f90 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GroupInviteActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GroupInviteActivity.kt @@ -52,7 +52,6 @@ class GroupInviteActivity : BaseActivity() { } override fun onOptionsItemSelected(item: MenuItem): Boolean { - return when (item.itemId) { R.id.action_send_invites -> { setResult(Activity.RESULT_OK, createResultIntent()) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GuidelinesActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GuidelinesActivity.kt index 0d001b1a6..aa288374f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GuidelinesActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GuidelinesActivity.kt @@ -49,6 +49,8 @@ class GuidelinesActivity : BaseActivity() { return if (item.itemId == android.R.id.home) { onBackPressed() true - } else super.onOptionsItemSelected(item) + } else { + super.onOptionsItemSelected(item) + } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/IntroActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/IntroActivity.kt index be429304f..45950003e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/IntroActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/IntroActivity.kt @@ -26,6 +26,7 @@ import javax.inject.Inject class IntroActivity : BaseActivity(), View.OnClickListener, ViewPager.OnPageChangeListener { private lateinit var binding: ActivityIntroBinding + @Inject lateinit var contentRepository: ContentRepository diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.kt index 7b5f93630..439ee7e82 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.kt @@ -59,12 +59,15 @@ class LoginActivity : BaseActivity() { @Inject lateinit var apiClient: ApiClient + @Inject lateinit var sharedPrefs: SharedPreferences + @Inject lateinit var configManager: AppConfigManager + @Inject - lateinit var viewModel : AuthenticationViewModel + lateinit var viewModel: AuthenticationViewModel private var isRegistering: Boolean = false private var isShowingForm: Boolean = false @@ -173,7 +176,8 @@ class LoginActivity : BaseActivity() { binding.forgotPassword.setOnClickListener { onForgotPasswordClicked() } binding.googleLoginButton.setOnClickListener { binding.googleLoginProgress.visibility = View.VISIBLE - viewModel.handleGoogleLogin(this, pickAccountResult) } + viewModel.handleGoogleLogin(this, pickAccountResult) + } } override fun loadTheme(sharedPreferences: SharedPreferences, forced: Boolean) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt index eb2aa401e..df7508924 100755 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt @@ -294,7 +294,6 @@ open class MainActivity : BaseActivity(), SnackbarActivity { onClose() FullProfileActivity.open(it) } - } }, onClassSelectionClicked = { @@ -384,7 +383,9 @@ open class MainActivity : BaseActivity(), SnackbarActivity { MainNavigationController.navigateBack() } true - } else super.onOptionsItemSelected(item) + } else { + super.onOptionsItemSelected(item) + } } override fun onResume() { @@ -709,7 +710,7 @@ open class MainActivity : BaseActivity(), SnackbarActivity { } } - fun updateToolbarInteractivity(titleInteractive : Boolean) { + fun updateToolbarInteractivity(titleInteractive: Boolean) { viewModel.canShowTeamPlanHeader.value = titleInteractive binding.content.toolbarTitle.background?.alpha = if (titleInteractive) 255 else 0 if (titleInteractive) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/NotificationsActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/NotificationsActivity.kt index fdea72aa3..93338e418 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/NotificationsActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/NotificationsActivity.kt @@ -49,8 +49,10 @@ import javax.inject.Inject class NotificationsActivity : BaseActivity(), androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener { private lateinit var binding: ActivityNotificationsBinding + @Inject lateinit var inventoryRepository: InventoryRepository + @Inject lateinit var socialRepository: SocialRepository @@ -72,10 +74,10 @@ class NotificationsActivity : BaseActivity(), androidx.swiperefreshlayout.widget super.onCreate(savedInstanceState) setupToolbar(binding.toolbar) - + // Check user level to handle if a user loses hp and drops below necessary level to allocate points - // and if so, don't display the notification to allocate points. - viewModel.user.observeOnce(this) {user -> + viewModel.user.observeOnce(this) { user -> userLvl = user?.stats?.lvl ?: 0 } @@ -92,7 +94,6 @@ class NotificationsActivity : BaseActivity(), androidx.swiperefreshlayout.widget lifecycleScope.launchCatching { viewModel.refreshNotifications() } - } override fun onSupportNavigateUp(): Boolean { @@ -156,7 +157,6 @@ class NotificationsActivity : BaseActivity(), androidx.swiperefreshlayout.widget } updateNotificationsAndRefresh(viewList) } - } private fun updateNotificationsAndRefresh(newItems: List) { @@ -191,8 +191,6 @@ class NotificationsActivity : BaseActivity(), androidx.swiperefreshlayout.widget } } - - private fun createNotificationsHeaderView(notificationCount: Int): View? { val header = inflater?.inflate(R.layout.notifications_header, binding.notificationItems, false) @@ -253,7 +251,9 @@ class NotificationsActivity : BaseActivity(), androidx.swiperefreshlayout.widget fromHtml(getString(R.string.unallocated_stats_points, data?.points.toString())), R.drawable.notification_stat_sparkles ) - } else null + } else { + null + } } private fun createMysteryItemsNotification(notification: Notification): View? { @@ -358,7 +358,7 @@ class NotificationsActivity : BaseActivity(), androidx.swiperefreshlayout.widget return item } - + private suspend fun createPartyInvitationNotification(notification: Notification): View? = withContext(ExceptionHandler.coroutine()) { val data = notification.data as? PartyInvitationData val inviterId = data?.invitation?.inviter diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SetupActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SetupActivity.kt index 4d79089d7..afb238e26 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SetupActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SetupActivity.kt @@ -48,8 +48,10 @@ class SetupActivity : BaseActivity(), ViewPager.OnPageChangeListener { @Inject lateinit var apiClient: ApiClient + @Inject lateinit var inventoryRepository: InventoryRepository + @Inject lateinit var taskRepository: TaskRepository diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SkillMemberActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SkillMemberActivity.kt index f2c720a27..aaeaa6aae 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SkillMemberActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SkillMemberActivity.kt @@ -27,6 +27,7 @@ class SkillMemberActivity : BaseActivity() { @Inject lateinit var socialRepository: SocialRepository + @Inject lateinit var userViewModel: MainUserViewModel diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SkillTasksActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SkillTasksActivity.kt index 185618096..f173eefd1 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SkillTasksActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SkillTasksActivity.kt @@ -13,7 +13,6 @@ import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.data.TaskRepository import com.habitrpg.android.habitica.databinding.ActivitySkillTasksBinding import com.habitrpg.android.habitica.models.tasks.Task -import com.habitrpg.android.habitica.modules.AppModule import com.habitrpg.android.habitica.ui.fragments.skills.SkillTasksRecyclerViewFragment import com.habitrpg.shared.habitica.models.tasks.TaskType import dagger.hilt.android.AndroidEntryPoint @@ -87,6 +86,8 @@ class SkillTasksActivity : BaseActivity() { return if (item.itemId == android.R.id.home) { onBackPressed() true - } else super.onOptionsItemSelected(item) + } else { + super.onOptionsItemSelected(item) + } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt index 334df7a0e..99df1541b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt @@ -251,7 +251,6 @@ class TaskFormActivity : BaseActivity() { } } - title = "" when { taskId != null -> { @@ -367,7 +366,8 @@ class TaskFormActivity : BaseActivity() { LabeledValue(getString(R.string.weekly), HabitResetOption.WEEKLY), LabeledValue(getString(R.string.monthly), HabitResetOption.MONTHLY) ), - { viewModel.habitResetOption.value = it }, columnSize = 3 + { viewModel.habitResetOption.value = it }, + columnSize = 3 ) } } @@ -697,10 +697,14 @@ class TaskFormActivity : BaseActivity() { thisTask.up = viewModel.habitScoringPositive.value thisTask.down = viewModel.habitScoringNegative.value thisTask.frequency = viewModel.habitResetOption.value.value - if (binding.habitAdjustPositiveStreakView.text?.isNotEmpty() == true) thisTask.counterUp = - binding.habitAdjustPositiveStreakView.text.toString().toIntCatchOverflow() - if (binding.habitAdjustNegativeStreakView.text?.isNotEmpty() == true) thisTask.counterDown = - binding.habitAdjustNegativeStreakView.text.toString().toIntCatchOverflow() + if (binding.habitAdjustPositiveStreakView.text?.isNotEmpty() == true) { + thisTask.counterUp = + binding.habitAdjustPositiveStreakView.text.toString().toIntCatchOverflow() + } + if (binding.habitAdjustNegativeStreakView.text?.isNotEmpty() == true) { + thisTask.counterDown = + binding.habitAdjustNegativeStreakView.text.toString().toIntCatchOverflow() + } } else if (taskType == TaskType.DAILY) { thisTask.startDate = binding.taskSchedulingControls.startDate thisTask.everyX = binding.taskSchedulingControls.everyX @@ -708,8 +712,10 @@ class TaskFormActivity : BaseActivity() { thisTask.repeat = binding.taskSchedulingControls.weeklyRepeat thisTask.setDaysOfMonth(binding.taskSchedulingControls.daysOfMonth) thisTask.setWeeksOfMonth(binding.taskSchedulingControls.weeksOfMonth) - if (binding.habitAdjustPositiveStreakView.text?.isNotEmpty() == true) thisTask.streak = - binding.habitAdjustPositiveStreakView.text.toString().toIntCatchOverflow() + if (binding.habitAdjustPositiveStreakView.text?.isNotEmpty() == true) { + thisTask.streak = + binding.habitAdjustPositiveStreakView.text.toString().toIntCatchOverflow() + } checkIfShowNotifLayout() } else if (taskType == TaskType.TODO) { thisTask.dueDate = binding.taskSchedulingControls.dueDate diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskSummaryActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskSummaryActivity.kt index 5d3ef3f98..b439e5f6f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskSummaryActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskSummaryActivity.kt @@ -67,27 +67,27 @@ import javax.inject.Inject @HiltViewModel class TaskSummaryViewModel @Inject constructor( savedStateHandle: SavedStateHandle, - userRepository : UserRepository, - userViewModel : MainUserViewModel, - val taskRepository : TaskRepository, - val socialRepository : SocialRepository + userRepository: UserRepository, + userViewModel: MainUserViewModel, + val taskRepository: TaskRepository, + val socialRepository: SocialRepository ) : BaseViewModel(userRepository, userViewModel) { val taskID: String = savedStateHandle[TaskFormActivity.TASK_ID_KEY] ?: "" val task = taskRepository.getTask(taskID).asLiveData() - fun getMember(userID : String?) : Flow { + fun getMember(userID: String?): Flow { return socialRepository.getMember(userID) } } @AndroidEntryPoint class TaskSummaryActivity : BaseActivity() { - override fun getLayoutResId() : Int? = null + override fun getLayoutResId(): Int? = null - private val viewModel : TaskSummaryViewModel by viewModels() + private val viewModel: TaskSummaryViewModel by viewModels() - override fun onCreate(savedInstanceState : Bundle?) { + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { HabiticaTheme { @@ -98,7 +98,7 @@ class TaskSummaryActivity : BaseActivity() { } @Composable -fun TaskSummaryView(viewModel : TaskSummaryViewModel) { +fun TaskSummaryView(viewModel: TaskSummaryViewModel) { val taskDescriptionBuilder = TaskDescriptionBuilder(LocalContext.current) val task by viewModel.task.observeAsState() val titleModifier = Modifier.padding(top = 30.dp) @@ -107,9 +107,13 @@ fun TaskSummaryView(viewModel : TaskSummaryViewModel) { if (task != null) { val darkestColor = HabiticaTheme.colors.textPrimaryFor(task) - val topTextColor = if ((task?.value ?: 0.0) >= -20) colorResource( - task?.extraDarkTaskColor ?: R.color.white - ) else Color.White + val topTextColor = if ((task?.value ?: 0.0) >= -20) { + colorResource( + task?.extraDarkTaskColor ?: R.color.white + ) + } else { + Color.White + } val systemUiController = rememberSystemUiController() val statusBarColor = HabiticaTheme.colors.primaryBackgroundFor(task) val lightestColor = HabiticaTheme.colors.contentBackgroundFor(task) @@ -169,8 +173,11 @@ fun TaskSummaryView(viewModel : TaskSummaryViewModel) { modifier = titleModifier ) Text( - task?.text ?: "", fontSize = 16.sp, color = darkestColor, - fontWeight = FontWeight.Normal, modifier = textModifier + task?.text ?: "", + fontSize = 16.sp, + color = darkestColor, + fontWeight = FontWeight.Normal, + modifier = textModifier ) if (task?.notes?.isNotBlank() == true) { Text( @@ -270,7 +277,8 @@ fun TaskSummaryView(viewModel : TaskSummaryViewModel) { for (item in task?.group?.assignedUsersDetail ?: emptyList()) { val member = viewModel.getMember(item.assignedUserID).collectAsState(null) UserRow( - item.assignedUsername ?: "", member.value, + item.assignedUsername ?: "", + member.value, Modifier .padding(vertical = 4.dp) .background( @@ -281,11 +289,15 @@ fun TaskSummaryView(viewModel : TaskSummaryViewModel) { .heightIn(min = 24.dp) .fillMaxWidth(), color = darkestColor, - extraContent = if (item.completed) ( - { - CompletedAt(item.completedDate) - } - ) else null + extraContent = if (item.completed) { + ( + { + CompletedAt(item.completedDate) + } + ) + } else { + null + } ) } task?.group?.assignedUsersDetail?.find { it.assignedUserID == viewModel.userViewModel.userID } @@ -311,7 +323,7 @@ fun TaskSummaryView(viewModel : TaskSummaryViewModel) { } } -private fun String.makeBoldComposable() : AnnotatedString { +private fun String.makeBoldComposable(): AnnotatedString { return buildAnnotatedString { var isBold = false for (segment in split("**")) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationEquipmentRecyclerViewAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationEquipmentRecyclerViewAdapter.kt index a9239466e..e257fc504 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationEquipmentRecyclerViewAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationEquipmentRecyclerViewAdapter.kt @@ -25,9 +25,9 @@ class CustomizationEquipmentRecyclerViewAdapter : androidx.recyclerview.widget.R var equipmentList: MutableList = ArrayList() set(value) { - field = value - notifyDataSetChanged() - } + field = value + notifyDataSetChanged() + } var activeEquipment: String? = null set(value) { field = value diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/SimpleSpinnerAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/SimpleSpinnerAdapter.kt index c21f617a8..f97617fa4 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/SimpleSpinnerAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/SimpleSpinnerAdapter.kt @@ -10,7 +10,7 @@ import com.habitrpg.android.habitica.extensions.inflate class SimpleSpinnerAdapter(context: Context, resource: Int) : ArrayAdapter(context, resource, R.id.textView, context.resources.getTextArray(resource)) { - override fun getDropDownView(position : Int, convertView : View?, parent : ViewGroup) : View? { + override fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup): View? { val view = parent.inflate(R.layout.spinner_item, false) ?: View(context) (view as? TextView)?.text = getItem(position) return view diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.kt index 6f82d0432..fdf3d72bc 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.kt @@ -101,7 +101,9 @@ class ItemRecyclerAdapter(val context: Context) : BaseRecyclerViewAdapter if (item == null && ownedItem != null) { - //Special items that are not Mystery Item + // Special items that are not Mystery Item val specialItem = SpecialItem() ownedItem?.key?.let { key -> specialItem.key = key diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/PetDetailRecyclerAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/PetDetailRecyclerAdapter.kt index 3fdb0d934..f4329bc8b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/PetDetailRecyclerAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/PetDetailRecyclerAdapter.kt @@ -87,7 +87,7 @@ class PetDetailRecyclerAdapter : androidx.recyclerview.widget.RecyclerView.Adapt potionCount, ownedItems?.get(obj.animal + "-eggs") != null, ownedItems?.get(obj.color + "-hatchingPotions") != null, - ownedMounts?.containsKey(obj.key) == true, + ownedMounts?.containsKey(obj.key) == true ) } else { (holder as? PetViewHolder)?.bind( @@ -113,8 +113,10 @@ class PetDetailRecyclerAdapter : androidx.recyclerview.widget.RecyclerView.Adapt 1 } else { val pet = itemList[position] as Pet - if ((ownedPets?.get(pet.key ?: "")?.trained - ?: 0) <= 0 && eggCount(pet) > 0 && potionCount(pet) > 0 + if (( + ownedPets?.get(pet.key ?: "")?.trained + ?: 0 + ) <= 0 && eggCount(pet) > 0 && potionCount(pet) > 0 ) { 2 } else { @@ -169,7 +171,7 @@ class PetDetailRecyclerAdapter : androidx.recyclerview.widget.RecyclerView.Adapt potionCount: Int, hasUnlockedEgg: Boolean, hasUnlockedPotion: Boolean, - hasMount: Boolean, + hasMount: Boolean ) { this.animal = item this.eggCount = eggCount diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ShopRecyclerAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ShopRecyclerAdapter.kt index f8ab4fe60..d1bd81b36 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ShopRecyclerAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ShopRecyclerAdapter.kt @@ -27,7 +27,7 @@ import com.habitrpg.common.habitica.extensions.loadImage class ShopRecyclerAdapter : androidx.recyclerview.widget.RecyclerView.Adapter() { - var armoireCount : Int = 0 + var armoireCount: Int = 0 var onNeedsRefresh: (() -> Unit)? = null var onShowPurchaseDialog: ((ShopItem, Boolean) -> Unit)? = null @@ -196,7 +196,9 @@ class ShopRecyclerAdapter : androidx.recyclerview.widget.RecyclerView.Adapter return Pair( - context?.resources?.let { getTranslatedClassName(it, selectedGearCategory?.identifier) } ?: selectedGearCategory?.identifier, armoireCount) + context?.resources?.let { getTranslatedClassName(it, selectedGearCategory?.identifier) } ?: selectedGearCategory?.identifier, + armoireCount + ) else -> selectedGearCategory?.items?.get(position - 2) } } else { @@ -220,7 +222,9 @@ class ShopRecyclerAdapter : androidx.recyclerview.widget.RecyclerView.Adapter() { potionCount, ownedItems?.get(item.animal + "-eggs") != null, ownedItems?.get(item.color + "-hatchingPotions") != null, - ownedMounts?.containsKey(item.key) == true, + ownedMounts?.containsKey(item.key) == true ) } else { (holder as? PetViewHolder)?.bind( @@ -169,8 +169,10 @@ class StableRecyclerAdapter : RecyclerView.Adapter() { val isIndividualAnimal = item.type == "special" || item.type == "wacky" if (isIndividualAnimal) { if (item is Pet) { - if ((ownedPets?.get(item.key ?: "")?.trained - ?: 0) <= 0 && eggCount(item) > 0 && potionCount(item) > 0 + if (( + ownedPets?.get(item.key ?: "")?.trained + ?: 0 + ) <= 0 && eggCount(item) > 0 && potionCount(item) > 0 ) { 22 } else { @@ -230,7 +232,9 @@ class StableRecyclerAdapter : RecyclerView.Adapter() { val egg = eggs[item.animal] titleView.text = if (egg != null) { if (item.type == "drop" || itemType == "mounts") egg.mountText else egg.text - } else item.animal + } else { + item.animal + } ownedTextView.visibility = View.VISIBLE val imageName = if (itemType == "pets") { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/GuildListAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/GuildListAdapter.kt index 39b0e0c19..7aabd14dc 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/GuildListAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/GuildListAdapter.kt @@ -130,9 +130,13 @@ class GuildListAdapter : BaseRecyclerViewAdapter val textView = PillTextviewBinding.inflate(itemView.context.layoutInflater, binding.tagWrapper, true) textView.root.text = category.name?.split("_")?.joinToString(" ") { it.replaceFirstChar { - if (it.isLowerCase()) it.titlecase( - Locale.getDefault() - ) else it.toString() + if (it.isLowerCase()) { + it.titlecase( + Locale.getDefault() + ) + } else { + it.toString() + } } } textView.root.background = if (category.slug == "habitica_official") { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/InboxAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/InboxAdapter.kt index dee5229f0..64d703935 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/InboxAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/InboxAdapter.kt @@ -41,8 +41,11 @@ class InboxAdapter(private var user: User?) : PagedListAdapter>( LayoutInflater.from(parent.context).inflate(layoutResource, parent, false) private fun updateTask(task: Task) { - if (taskType != task.type) + if (taskType != task.type) { return + } var i = 0 while (i < (this.content?.size ?: 0)) { if (content?.get(i)?.id == task.id) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/DailiesRecyclerViewHolder.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/DailiesRecyclerViewHolder.kt index 84e14431c..371a6d0fc 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/DailiesRecyclerViewHolder.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/DailiesRecyclerViewHolder.kt @@ -10,15 +10,18 @@ class DailiesRecyclerViewHolder(layoutResource: Int, viewModel: TasksViewModel) override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return if (viewType == 0) { DailyViewHolder( - getContentView(parent), { task, direction -> taskScoreEvents?.invoke(task, direction) }, + getContentView(parent), + { task, direction -> taskScoreEvents?.invoke(task, direction) }, { task, item -> checklistItemScoreEvents?.invoke(task, item) }, { - task -> + task -> taskOpenEvents?.invoke(task.first, task.second) - }, { - task -> - brokenTaskEvents?.invoke(task) - }, viewModel + }, + { + task -> + brokenTaskEvents?.invoke(task) + }, + viewModel ) } else { super.onCreateViewHolder(parent, viewType) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/HabitsRecyclerViewAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/HabitsRecyclerViewAdapter.kt index 51cce57de..5d52acb5f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/HabitsRecyclerViewAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/HabitsRecyclerViewAdapter.kt @@ -10,14 +10,17 @@ class HabitsRecyclerViewAdapter(layoutResource: Int, viewModel: TasksViewModel) override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return if (viewType == 0) { HabitViewHolder( - getContentView(parent), { task, direction -> taskScoreEvents?.invoke(task, direction) }, + getContentView(parent), + { task, direction -> taskScoreEvents?.invoke(task, direction) }, { - task -> + task -> taskOpenEvents?.invoke(task.first, task.second) - }, { - task -> - brokenTaskEvents?.invoke(task) - }, viewModel + }, + { + task -> + brokenTaskEvents?.invoke(task) + }, + viewModel ) } else { super.onCreateViewHolder(parent, viewType) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/RewardsRecyclerViewAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/RewardsRecyclerViewAdapter.kt index 138f706d8..f848263b4 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/RewardsRecyclerViewAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/RewardsRecyclerViewAdapter.kt @@ -73,10 +73,12 @@ class RewardsRecyclerViewAdapter( taskScoreEvents?.invoke(task, direction) } }, - { task -> taskOpenEvents?.invoke(task.first, task.second) }, { - task -> - brokenTaskEvents?.invoke(task) - }, viewModel + { task -> taskOpenEvents?.invoke(task.first, task.second) }, + { + task -> + brokenTaskEvents?.invoke(task) + }, + viewModel ) } else { val viewHolder = ShopItemViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.row_shopitem, parent, false)) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/TodosRecyclerViewAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/TodosRecyclerViewAdapter.kt index d627b8721..acd982ea1 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/TodosRecyclerViewAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/TodosRecyclerViewAdapter.kt @@ -10,15 +10,18 @@ class TodosRecyclerViewAdapter(layoutResource: Int, viewModel: TasksViewModel) : override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return if (viewType == 0) { TodoViewHolder( - getContentView(parent), { task, direction -> taskScoreEvents?.invoke(task, direction) }, + getContentView(parent), + { task, direction -> taskScoreEvents?.invoke(task, direction) }, { task, item -> checklistItemScoreEvents?.invoke(task, item) }, { - task -> + task -> taskOpenEvents?.invoke(task.first, task.second) - }, { - task -> - brokenTaskEvents?.invoke(task) - }, viewModel + }, + { + task -> + brokenTaskEvents?.invoke(task) + }, + viewModel ) } else { super.onCreateViewHolder(parent, viewType) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/AboutFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/AboutFragment.kt index 5becf5853..441d2ff77 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/AboutFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/AboutFragment.kt @@ -26,7 +26,6 @@ class AboutFragment : BaseMainFragment() { @Inject lateinit var appConfigManager: AppConfigManager - private val privacyPolicyLink = "https://habitica.com/static/privacy" private val termsLink = "https://habitica.com/static/terms" private val androidSourceCodeLink = "https://github.com/HabitRPG/habitrpg-android/" diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/AchievementsFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/AchievementsFragment.kt index b683aaa9c..940ebdf20 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/AchievementsFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/AchievementsFragment.kt @@ -19,18 +19,19 @@ import com.habitrpg.android.habitica.ui.adapter.AchievementsAdapter import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel import com.habitrpg.common.habitica.helpers.ExceptionHandler import com.habitrpg.common.habitica.helpers.launchCatching +import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch import javax.inject.Inject -import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint class AchievementsFragment : BaseMainFragment(), SwipeRefreshLayout.OnRefreshListener { @Inject lateinit var inventoryRepository: InventoryRepository + @Inject lateinit var userViewModel: MainUserViewModel @@ -49,7 +50,6 @@ class AchievementsFragment : BaseMainFragment : Fragment() { @Inject lateinit var tutorialRepository: TutorialRepository + @Inject lateinit var analyticsManager: AnalyticsManager @@ -36,7 +37,6 @@ abstract class BaseFragment : Fragment() { open val displayedClassName: String? get() = this.javaClass.simpleName - abstract fun createBinding(inflater: LayoutInflater, container: ViewGroup?): VB override fun onCreateView( diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseMainFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseMainFragment.kt index f2da124f7..8c84ac4f1 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseMainFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseMainFragment.kt @@ -24,6 +24,7 @@ import javax.inject.Inject abstract class BaseMainFragment : BaseFragment() { @Inject lateinit var userRepository: UserRepository + @Inject lateinit var soundManager: SoundManager diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragment.kt index e05ede863..a4372052a 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragment.kt @@ -161,9 +161,13 @@ class NavigationDrawerFragment : DialogFragment() { gearEvent?.isCurrentlyActive == true || pair.second.isNotEmpty() }, { val diff = (gearEvent?.end?.time ?: 0) - Date().time - if (diff < (1.toDuration(DurationUnit.HOURS).inWholeMilliseconds)) 1.toDuration( - DurationUnit.SECONDS - ) else 1.toDuration(DurationUnit.MINUTES) + if (diff < (1.toDuration(DurationUnit.HOURS).inWholeMilliseconds)) { + 1.toDuration( + DurationUnit.SECONDS + ) + } else { + 1.toDuration(DurationUnit.MINUTES) + } }) { updateSeasonalMenuEntries(gearEvent, pair.second) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NewsFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NewsFragment.kt index 7f1b8ad9c..508838cd4 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NewsFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NewsFragment.kt @@ -62,7 +62,6 @@ class NewsFragment : BaseMainFragment() { binding?.newsWebview?.loadUrl("$address/static/new-stuff") } - override fun onResume() { super.onResume() lifecycleScope.launch(ExceptionHandler.coroutine()) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/PromoInfoFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/PromoInfoFragment.kt index f69e0c164..b2b1b0774 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/PromoInfoFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/PromoInfoFragment.kt @@ -6,8 +6,8 @@ import android.view.View import android.view.ViewGroup import com.habitrpg.android.habitica.databinding.FragmentPromoInfoBinding import com.habitrpg.android.habitica.helpers.AppConfigManager -import javax.inject.Inject import dagger.hilt.android.AndroidEntryPoint +import javax.inject.Inject @AndroidEntryPoint class PromoInfoFragment : BaseMainFragment() { @@ -21,7 +21,6 @@ class PromoInfoFragment : BaseMainFragment() { @Inject lateinit var configManager: AppConfigManager - override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/PromoWebFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/PromoWebFragment.kt index c9f032f36..4d7f30afc 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/PromoWebFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/PromoWebFragment.kt @@ -46,5 +46,4 @@ class PromoWebFragment : BaseMainFragment() { binding?.newsWebview?.loadUrl(url) } } - } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/StatsFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/StatsFragment.kt index f51c3a867..cb63b2016 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/StatsFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/StatsFragment.kt @@ -42,6 +42,7 @@ class StatsFragment : BaseMainFragment() { @Inject lateinit var inventoryRepository: InventoryRepository + @Inject lateinit var userViewModel: MainUserViewModel @@ -245,7 +246,6 @@ class StatsFragment : BaseMainFragment() { binding?.numberOfPointsTextView?.setScaledPadding(context, 18, 4, 18, 4) } - private fun updateStats(user: User) { val outfit = user.items?.gear?.equipped val outfitList = ArrayList() diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarCustomizationFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarCustomizationFragment.kt index b15b5f55a..95e53f6aa 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarCustomizationFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarCustomizationFragment.kt @@ -27,7 +27,6 @@ import com.habitrpg.android.habitica.databinding.FragmentRefreshRecyclerviewBind import com.habitrpg.android.habitica.extensions.setTintWith import com.habitrpg.android.habitica.models.CustomizationFilter import com.habitrpg.android.habitica.models.inventory.Customization -import com.habitrpg.android.habitica.models.shops.ShopItem import com.habitrpg.android.habitica.models.user.OwnedCustomization import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.ui.adapter.CustomizationRecyclerViewAdapter @@ -62,8 +61,10 @@ class AvatarCustomizationFragment : @Inject lateinit var customizationRepository: CustomizationRepository + @Inject lateinit var inventoryRepository: InventoryRepository + @Inject lateinit var userViewModel: MainUserViewModel @@ -191,7 +192,6 @@ class AvatarCustomizationFragment : return super.onOptionsItemSelected(item) } - private fun loadCustomizations() { val type = this.type ?: return lifecycleScope.launchCatching { @@ -242,7 +242,9 @@ class AvatarCustomizationFragment : ): Boolean { return if (filter.onlyPurchased && ownedCustomizations.find { it.key == customization.identifier } == null) { true - } else filter.months.isNotEmpty() && !filter.months.contains(customization.customizationSet?.substringAfter('.')) + } else { + filter.months.isNotEmpty() && !filter.months.contains(customization.customizationSet?.substringAfter('.')) + } } fun updateUser(user: User?) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarEquipmentFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarEquipmentFragment.kt index 937acf8f0..e4f7db810 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarEquipmentFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarEquipmentFragment.kt @@ -18,9 +18,9 @@ import com.habitrpg.android.habitica.ui.helpers.SafeDefaultItemAnimator import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel import com.habitrpg.common.habitica.helpers.ExceptionHandler import com.habitrpg.common.habitica.helpers.launchCatching +import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.launch import javax.inject.Inject -import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint class AvatarEquipmentFragment : @@ -29,6 +29,7 @@ class AvatarEquipmentFragment : @Inject lateinit var inventoryRepository: InventoryRepository + @Inject lateinit var userViewModel: MainUserViewModel @@ -98,7 +99,6 @@ class AvatarEquipmentFragment : userViewModel.user.observe(viewLifecycleOwner) { updateUser(it) } } - private fun loadEquipment() { val type = this.type ?: return lifecycleScope.launchCatching { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarOverviewFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarOverviewFragment.kt index 7e29a36d3..16ceec178 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarOverviewFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarOverviewFragment.kt @@ -46,6 +46,7 @@ open class AvatarOverviewFragment : @Inject lateinit var userViewModel: MainUserViewModel + @Inject lateinit var inventoryRepository: InventoryRepository @@ -75,15 +76,19 @@ open class AvatarOverviewFragment : HabiticaTheme { AvatarOverviewView( userViewModel, - showCustomization, !showCustomization, - battleGearWeapon.value?.twoHanded == true, costumeWeapon.value?.twoHanded == true, + showCustomization, + !showCustomization, + battleGearWeapon.value?.twoHanded == true, + costumeWeapon.value?.twoHanded == true, { type, category -> displayCustomizationFragment(type, category) - }, { type, category -> - displayAvatarEquipmentFragment(type, category) - }, { type, equipped, isCostume -> - displayEquipmentFragment(type, equipped, isCostume) - } + }, + { type, category -> + displayAvatarEquipmentFragment(type, category) + }, + { type, equipped, isCostume -> + displayEquipmentFragment(type, equipped, isCostume) + } ) } } @@ -107,7 +112,6 @@ open class AvatarOverviewFragment : return view } - private fun displayCustomizationFragment(type: String, category: String?) { MainNavigationController.navigate( AvatarOverviewFragmentDirections.openAvatarDetail( @@ -191,7 +195,8 @@ fun AvatarOverviewView( verticalAlignment = Alignment.CenterVertically ) { Text( - stringResource(R.string.equipped), style = HabiticaTheme.typography.subtitle2, + stringResource(R.string.equipped), + style = HabiticaTheme.typography.subtitle2, color = HabiticaTheme.colors.textSecondary ) Spacer(modifier = Modifier.weight(1f)) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/equipment/EquipmentDetailFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/equipment/EquipmentDetailFragment.kt index b13d825ee..ac511f87a 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/equipment/EquipmentDetailFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/equipment/EquipmentDetailFragment.kt @@ -18,9 +18,9 @@ import com.habitrpg.android.habitica.ui.helpers.SafeDefaultItemAnimator import com.habitrpg.common.habitica.helpers.EmptyItem import com.habitrpg.common.habitica.helpers.ExceptionHandler import com.habitrpg.common.habitica.helpers.launchCatching +import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.launch import javax.inject.Inject -import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint class EquipmentDetailFragment : @@ -97,7 +97,6 @@ class EquipmentDetailFragment : super.onDestroy() } - override fun onRefresh() { lifecycleScope.launch(ExceptionHandler.coroutine()) { userRepository.retrieveUser(true, true) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemDialogFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemDialogFragment.kt index d52838ee6..4cc0c453c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemDialogFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemDialogFragment.kt @@ -35,26 +35,31 @@ import com.habitrpg.common.habitica.extensions.loadImage import com.habitrpg.common.habitica.helpers.EmptyItem import com.habitrpg.common.habitica.helpers.ExceptionHandler import com.habitrpg.common.habitica.helpers.launchCatching +import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import javax.inject.Inject -import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint class ItemDialogFragment : BaseDialogFragment() { @Inject lateinit var inventoryRepository: InventoryRepository + @Inject lateinit var socialRepository: SocialRepository + @Inject lateinit var userRepository: UserRepository + @Inject lateinit var hatchPetUseCase: HatchPetUseCase + @Inject lateinit var feedPetUseCase: FeedPetUseCase + @Inject lateinit var userViewModel: MainUserViewModel @@ -79,7 +84,6 @@ class ItemDialogFragment : BaseDialogFragment() { super.onDestroy() } - override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -221,7 +225,8 @@ class ItemDialogFragment : BaseDialogFragment() { activity.lifecycleScope.launchCatching { feedPetUseCase.callInteractor( FeedPetUseCase.RequestValues( - pet, food, + pet, + food, activity ) ) @@ -250,7 +255,8 @@ class ItemDialogFragment : BaseDialogFragment() { activity.lifecycleScope.launchCatching { hatchPetUseCase.callInteractor( HatchPetUseCase.RequestValues( - potion, egg, + potion, + egg, activity ) ) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.kt index 8e943863a..2ff326051 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.kt @@ -42,24 +42,28 @@ import com.habitrpg.common.habitica.extensions.loadImage import com.habitrpg.common.habitica.helpers.EmptyItem import com.habitrpg.common.habitica.helpers.ExceptionHandler import com.habitrpg.common.habitica.helpers.launchCatching +import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import javax.inject.Inject -import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint class ItemRecyclerFragment : BaseFragment(), SwipeRefreshLayout.OnRefreshListener { @Inject lateinit var inventoryRepository: InventoryRepository + @Inject lateinit var socialRepository: SocialRepository + @Inject lateinit var userRepository: UserRepository + @Inject internal lateinit var hatchPetUseCase: HatchPetUseCase + @Inject lateinit var userViewModel: MainUserViewModel @@ -82,7 +86,6 @@ class ItemRecyclerFragment : BaseFragment(), SwipeRefreshL super.onDestroy() } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -209,7 +212,8 @@ class ItemRecyclerFragment : BaseFragment(), SwipeRefreshL lifecycleScope.launchCatching { hatchPetUseCase.callInteractor( HatchPetUseCase.RequestValues( - potion, egg, + potion, + egg, it ) ) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemsFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemsFragment.kt index 66c506e79..1359e7395 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemsFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemsFragment.kt @@ -49,7 +49,6 @@ class ItemsFragment : BaseMainFragment() { } } - private fun setViewPagerAdapter() { val fragmentManager = childFragmentManager @@ -67,8 +66,11 @@ class ItemsFragment : BaseMainFragment() { else -> "" } fragment.itemTypeText = - if (position == 4 && isAdded) getString(R.string.special_items) - else getPageTitle(position) + if (position == 4 && isAdded) { + getString(R.string.special_items) + } else { + getPageTitle(position) + } return fragment } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopFragment.kt index c93a9e3b3..d2ff83aa5 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopFragment.kt @@ -52,12 +52,16 @@ open class ShopFragment : BaseMainFragment() internal val hourglasses = mutableStateOf(null) private val gems = mutableStateOf(null) private val gold = mutableStateOf(null) + @Inject lateinit var inventoryRepository: InventoryRepository + @Inject lateinit var socialRepository: SocialRepository + @Inject lateinit var configManager: AppConfigManager + @Inject lateinit var userViewModel: MainUserViewModel @@ -126,7 +130,6 @@ open class ShopFragment : BaseMainFragment() dialog.show() } - adapter?.context = context adapter?.mainActivity = mainActivity binding?.recyclerView?.adapter = adapter @@ -362,7 +365,6 @@ open class ShopFragment : BaseMainFragment() } } - override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) outState.putString(SHOP_IDENTIFIER_KEY, this.shopIdentifier) @@ -386,7 +388,7 @@ open class ShopFragment : BaseMainFragment() context?.let { context -> val alert = HabiticaAlertDialog(context) alert.setMessage(getString(R.string.class_changed_description, selectedClass)) - alert.addButton(getString(R.string.complete_tutorial), true){ _, _ -> alert.dismiss() } + alert.addButton(getString(R.string.complete_tutorial), true) { _, _ -> alert.dismiss() } alert.show() } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/MountDetailRecyclerFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/MountDetailRecyclerFragment.kt index 048f01570..763ce736e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/MountDetailRecyclerFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/MountDetailRecyclerFragment.kt @@ -32,6 +32,7 @@ class MountDetailRecyclerFragment : @Inject internal lateinit var inventoryRepository: InventoryRepository + @Inject lateinit var userViewModel: MainUserViewModel @@ -61,7 +62,6 @@ class MountDetailRecyclerFragment : super.onDestroy() } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { showsBackButton = true super.onViewCreated(view, savedInstanceState) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/PetDetailRecyclerFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/PetDetailRecyclerFragment.kt index 46cc87339..fc7f04115 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/PetDetailRecyclerFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/PetDetailRecyclerFragment.kt @@ -77,7 +77,6 @@ class PetDetailRecyclerFragment : super.onDestroy() } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { showsBackButton = true super.onViewCreated(view, savedInstanceState) @@ -201,7 +200,7 @@ class PetDetailRecyclerFragment : StableSection( pet.type, "pets" - ) + ) items.add(currentSection) } currentSection?.let { section -> @@ -225,7 +224,8 @@ class PetDetailRecyclerFragment : lifecycleScope.launchCatching { feedPetUseCase.callInteractor( FeedPetUseCase.RequestValues( - pet, food, + pet, + food, context ) ) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/StableFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/StableFragment.kt index 012d80907..4d620530b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/StableFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/StableFragment.kt @@ -42,7 +42,6 @@ class StableFragment : BaseMainFragment() { setViewPagerAdapter() } - private fun setViewPagerAdapter() { val fragmentManager = childFragmentManager diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/StableRecyclerFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/StableRecyclerFragment.kt index 24a8f1606..671f3c186 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/StableRecyclerFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/StableRecyclerFragment.kt @@ -37,10 +37,13 @@ class StableRecyclerFragment : @Inject lateinit var inventoryRepository: InventoryRepository + @Inject lateinit var userRepository: UserRepository + @Inject lateinit var configManager: AppConfigManager + @Inject lateinit var userViewModel: MainUserViewModel @@ -59,7 +62,6 @@ class StableRecyclerFragment : super.onDestroy() } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/AccountPreferenceFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/AccountPreferenceFragment.kt index 359bb4b9a..02fefcee3 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/AccountPreferenceFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/AccountPreferenceFragment.kt @@ -9,7 +9,6 @@ import android.content.SharedPreferences import android.os.Build import android.os.Bundle import android.view.View -import android.widget.EditText import androidx.activity.result.contract.ActivityResultContracts import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat.getSystemService @@ -41,10 +40,10 @@ import com.habitrpg.common.habitica.extensions.dpToPx import com.habitrpg.common.habitica.extensions.layoutInflater import com.habitrpg.common.habitica.helpers.ExceptionHandler import com.habitrpg.common.habitica.helpers.launchCatching +import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.launch import retrofit2.HttpException import javax.inject.Inject -import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint class AccountPreferenceFragment : diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/BasePreferencesFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/BasePreferencesFragment.kt index ee1baa742..3901ac88f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/BasePreferencesFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/BasePreferencesFragment.kt @@ -15,6 +15,7 @@ abstract class BasePreferencesFragment : PreferenceFragmentCompat() { @Inject lateinit var userRepository: UserRepository + @Inject lateinit var userViewModel: MainUserViewModel diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/EmailNotificationsPreferencesFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/EmailNotificationsPreferencesFragment.kt index 29c725c5c..35fdc780e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/EmailNotificationsPreferencesFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/EmailNotificationsPreferencesFragment.kt @@ -13,7 +13,6 @@ class EmailNotificationsPreferencesFragment : BasePreferencesFragment(), SharedP private var isInitialSet: Boolean = true private var isSettingUser: Boolean = false - override fun onResume() { super.onResume() preferenceScreen.sharedPreferences?.registerOnSharedPreferenceChangeListener(this) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt index 7fc99a1ae..9fe5155a4 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt @@ -45,30 +45,31 @@ import java.util.Locale import javax.inject.Inject @AndroidEntryPoint -class PreferencesFragment : BasePreferencesFragment(), +class PreferencesFragment : + BasePreferencesFragment(), SharedPreferences.OnSharedPreferenceChangeListener { @Inject - lateinit var contentRepository : ContentRepository + lateinit var contentRepository: ContentRepository @Inject - lateinit var soundManager : SoundManager + lateinit var soundManager: SoundManager @Inject - lateinit var pushNotificationManager : PushNotificationManager + lateinit var pushNotificationManager: PushNotificationManager @Inject - lateinit var configManager : AppConfigManager + lateinit var configManager: AppConfigManager @Inject - lateinit var apiClient : ApiClient + lateinit var apiClient: ApiClient - private var timePreference : TimePreference? = null - private var pushNotificationsPreference : PreferenceScreen? = null - private var emailNotificationsPreference : PreferenceScreen? = null - private var classSelectionPreference : Preference? = null - private var serverUrlPreference : ListPreference? = null - private var taskListPreference : ListPreference? = null + private var timePreference: TimePreference? = null + private var pushNotificationsPreference: PreferenceScreen? = null + private var emailNotificationsPreference: PreferenceScreen? = null + private var classSelectionPreference: Preference? = null + private var serverUrlPreference: ListPreference? = null + private var taskListPreference: ListPreference? = null private val classSelectionResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { @@ -77,7 +78,7 @@ class PreferencesFragment : BasePreferencesFragment(), } } - override fun onViewCreated(view : View, savedInstanceState : Bundle?) { + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) listView.itemAnimator = null @@ -128,14 +129,14 @@ class PreferencesFragment : BasePreferencesFragment(), super.onPause() } - override fun onPreferenceTreeClick(preference : Preference) : Boolean { + override fun onPreferenceTreeClick(preference: Preference): Boolean { when (preference.key) { "logout" -> { logout() } "pause_damage" -> { - showAsBottomSheet {dismiss -> + showAsBottomSheet { dismiss -> PauseResumeDamageView(user?.preferences?.sleep ?: true, { lifecycleScope.launchCatching { user?.let { it -> userRepository.sleep(it) } @@ -147,7 +148,7 @@ class PreferencesFragment : BasePreferencesFragment(), "choose_class" -> { val isPlayerOptedOutOfClass = user?.preferences?.disableClasses ?: false - val isClassSelected = user?.flags?.classSelected ?: false + val isClassSelected = user?.flags?.classSelected ?: false val bundle = Bundle() bundle.putBoolean("isInitialSelection", isClassSelected) val intent = Intent(activity, ClassSelectionActivity::class.java) @@ -159,7 +160,8 @@ class PreferencesFragment : BasePreferencesFragment(), val dialog = HabiticaAlertDialog(context) dialog.setTitle(R.string.change_class_confirmation) dialog.setMessage(R.string.change_class_message) - dialog.addButton(R.string.change_class, + dialog.addButton( + R.string.change_class, isPrimary = true, isDestructive = true ) { _, _ -> @@ -195,7 +197,7 @@ class PreferencesFragment : BasePreferencesFragment(), return super.onPreferenceTreeClick(preference) } - private fun reloadContent(withConfirmation : Boolean) { + private fun reloadContent(withConfirmation: Boolean) { lifecycleScope.launch(ExceptionHandler.coroutine()) { contentRepository.retrieveContent(true) if (withConfirmation) { @@ -233,7 +235,7 @@ class PreferencesFragment : BasePreferencesFragment(), alert?.setTitle(R.string.push_notification_system_settings_title) alert?.setMessage(R.string.push_notification_system_settings_description) alert?.addButton(R.string.open_settings, true, false) { _, _ -> - val notifSettingIntent : Intent = Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS) + val notifSettingIntent: Intent = Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS) .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) .putExtra(Settings.EXTRA_APP_PACKAGE, context?.applicationContext?.packageName) startActivity(notifSettingIntent) @@ -245,7 +247,7 @@ class PreferencesFragment : BasePreferencesFragment(), } } - override fun onSharedPreferenceChanged(sharedPreferences : SharedPreferences, key : String?) { + override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String?) { when (key) { "use_reminder" -> { val useReminder = sharedPreferences.getBoolean(key, false) @@ -263,7 +265,7 @@ class PreferencesFragment : BasePreferencesFragment(), } "usePushNotifications" -> { - val notifPermissionEnabled : Boolean = + val notifPermissionEnabled: Boolean = pushNotificationManager.notificationPermissionEnabled() val usePushNotifications = sharedPreferences.getBoolean(key, true) pushNotificationsPreference?.isEnabled = usePushNotifications @@ -383,7 +385,7 @@ class PreferencesFragment : BasePreferencesFragment(), } } - override fun onDisplayPreferenceDialog(preference : Preference) { + override fun onDisplayPreferenceDialog(preference: Preference) { if (preference is TimePreference) { if (parentFragmentManager.findFragmentByTag(TimePreferenceDialogFragment.TAG) == null) { TimePreferenceDialogFragment.newInstance(this, preference.getKey()) @@ -394,7 +396,7 @@ class PreferencesFragment : BasePreferencesFragment(), } } - override fun setUser(user : User?) { + override fun setUser(user: User?) { super.setUser(user) val pauseDamagePreference = findPreference("pause_damage") @@ -471,7 +473,7 @@ class PreferencesFragment : BasePreferencesFragment(), val inbox = user?.inbox disablePMsPreference?.isChecked = inbox?.optOut ?: true - val notifPermissionEnabled : Boolean = + val notifPermissionEnabled: Boolean = pushNotificationManager.notificationPermissionEnabled() val usePushPreference = findPreference("usePushNotifications") as? CheckBoxPreference pushNotificationsPreference = findPreference("pushNotifications") as? PreferenceScreen diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/TimePreferenceDialogFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/TimePreferenceDialogFragment.kt index b222d1ec9..5af6da3c9 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/TimePreferenceDialogFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/TimePreferenceDialogFragment.kt @@ -8,8 +8,8 @@ import android.widget.TimePicker import androidx.preference.PreferenceDialogFragmentCompat import androidx.preference.PreferenceFragmentCompat import com.habitrpg.android.habitica.prefs.TimePreference -import java.util.Locale import dagger.hilt.android.AndroidEntryPoint +import java.util.Locale @AndroidEntryPoint class TimePreferenceDialogFragment : PreferenceDialogFragmentCompat() { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GemsPurchaseFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GemsPurchaseFragment.kt index 36ae3d993..1c4a81e4d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GemsPurchaseFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GemsPurchaseFragment.kt @@ -52,12 +52,13 @@ class GemsPurchaseFragment : BaseFragment() { @Inject lateinit var userRepository: UserRepository + @Inject lateinit var appConfigManager: AppConfigManager + @Inject lateinit var purchaseHandler: PurchaseHandler - private var isGemSaleHappening = false override fun onViewCreated(view: View, savedInstanceState: Bundle?) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GiftBalanceGemsFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GiftBalanceGemsFragment.kt index 870f11308..713c94a1b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GiftBalanceGemsFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GiftBalanceGemsFragment.kt @@ -16,8 +16,8 @@ import com.habitrpg.android.habitica.models.members.Member import com.habitrpg.android.habitica.ui.fragments.BaseFragment import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog import com.habitrpg.common.habitica.helpers.launchCatching -import javax.inject.Inject import dagger.hilt.android.AndroidEntryPoint +import javax.inject.Inject @AndroidEntryPoint class GiftBalanceGemsFragment : BaseFragment() { @@ -61,7 +61,6 @@ class GiftBalanceGemsFragment : BaseFragment() { binding?.usernameTextview?.text = it.formattedUsername } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) binding?.giftButton?.setOnClickListener { sendGift() } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GiftPurchaseGemsFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GiftPurchaseGemsFragment.kt index 5f539df2c..853df69c7 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GiftPurchaseGemsFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GiftPurchaseGemsFragment.kt @@ -14,12 +14,12 @@ import com.habitrpg.android.habitica.models.members.Member import com.habitrpg.android.habitica.ui.GemPurchaseOptionsView import com.habitrpg.android.habitica.ui.fragments.BaseFragment import com.habitrpg.common.habitica.helpers.ExceptionHandler +import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import javax.inject.Inject -import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint class GiftPurchaseGemsFragment : BaseFragment() { @@ -47,7 +47,6 @@ class GiftPurchaseGemsFragment : BaseFragment() private var purchaseHandler: PurchaseHandler? = null - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/SubscriptionFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/SubscriptionFragment.kt index 9b1558931..72977ead8 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/SubscriptionFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/SubscriptionFragment.kt @@ -55,10 +55,13 @@ class SubscriptionFragment : BaseFragment() { @Inject lateinit var userRepository: UserRepository + @Inject lateinit var appConfigManager: AppConfigManager + @Inject lateinit var inventoryRepository: InventoryRepository + @Inject lateinit var purchaseHandler: PurchaseHandler @@ -150,7 +153,6 @@ class SubscriptionFragment : BaseFragment() { } } - private fun loadInventory() { CoroutineScope(Dispatchers.IO).launchCatching { val subscriptions = purchaseHandler.getAllSubscriptionProducts() diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/AvatarSetupFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/AvatarSetupFragment.kt index 721d841fd..671fc7deb 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/AvatarSetupFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/AvatarSetupFragment.kt @@ -21,17 +21,19 @@ import com.habitrpg.android.habitica.ui.adapter.setup.CustomizationSetupAdapter import com.habitrpg.android.habitica.ui.fragments.BaseFragment import com.habitrpg.android.habitica.ui.views.setup.AvatarCategoryView import com.habitrpg.common.habitica.helpers.launchCatching +import dagger.hilt.android.AndroidEntryPoint import java.util.Random import javax.inject.Inject -import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint class AvatarSetupFragment : BaseFragment() { @Inject lateinit var customizationRepository: SetupCustomizationRepository + @Inject lateinit var userRepository: UserRepository + @Inject lateinit var inventoryRepository: InventoryRepository @@ -114,7 +116,6 @@ class AvatarSetupFragment : BaseFragment() { } } - private fun loadCustomizations() { val user = this.user ?: return val activeCategory = this.activeCategory ?: return diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/IntroFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/IntroFragment.kt index b4f6f17b8..51706bb32 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/IntroFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/IntroFragment.kt @@ -53,7 +53,6 @@ class IntroFragment : BaseFragment() { } } - fun setImage(image: Drawable?) { this.image = image if (image != null) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/TaskSetupFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/TaskSetupFragment.kt index 211488983..c496de322 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/TaskSetupFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/TaskSetupFragment.kt @@ -75,7 +75,6 @@ class TaskSetupFragment : BaseFragment() { } } - private fun setTasks() { this.taskGroups = listOf(listOf(getString(R.string.setup_group_work), TYPE_WORK), listOf(getString(R.string.setup_group_exercise), TYPE_EXERCISE), listOf(getString(R.string.setup_group_health), TYPE_HEALTH), listOf(getString(R.string.setup_group_school), TYPE_SCHOOL), listOf(getString(R.string.setup_group_teams), TYPE_TEAMS), listOf(getString(R.string.setup_group_chores), TYPE_CHORES), listOf(getString(R.string.setup_group_creativity), TYPE_CREATIVITY), listOf(getString(R.string.setuP_group_other), TYPE_OTHER)) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/WelcomeFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/WelcomeFragment.kt index 369d13b45..3927612f0 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/WelcomeFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/WelcomeFragment.kt @@ -17,6 +17,7 @@ import com.habitrpg.android.habitica.ui.fragments.BaseFragment import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper import com.habitrpg.common.habitica.helpers.ExceptionHandler import com.habitrpg.common.habitica.helpers.launchCatching +import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.filterNotNull @@ -24,7 +25,6 @@ import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch import javax.inject.Inject -import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint class WelcomeFragment : BaseFragment() { @@ -144,5 +144,4 @@ class WelcomeFragment : BaseFragment() { usernameVerificationEvents.value = user?.username ?: "" } } - } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillTasksRecyclerViewFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillTasksRecyclerViewFragment.kt index b2fea98d0..3af0cda23 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillTasksRecyclerViewFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillTasksRecyclerViewFragment.kt @@ -13,14 +13,15 @@ import com.habitrpg.android.habitica.ui.adapter.SkillTasksRecyclerViewAdapter import com.habitrpg.android.habitica.ui.fragments.BaseFragment import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel import com.habitrpg.shared.habitica.models.tasks.TaskType +import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.flow.map import javax.inject.Inject -import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint class SkillTasksRecyclerViewFragment : BaseFragment() { @Inject lateinit var taskRepository: TaskRepository + @Inject lateinit var userViewModel: MainUserViewModel var taskType: TaskType? = null @@ -36,7 +37,6 @@ class SkillTasksRecyclerViewFragment : BaseFragment var onTaskSelection: ((Task) -> Unit)? = null - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillsFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillsFragment.kt index 4ad48afa4..607df13ee 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillsFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillsFragment.kt @@ -26,11 +26,11 @@ import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.Companion.showSnackbar import com.habitrpg.common.habitica.helpers.ExceptionHandler import com.habitrpg.common.habitica.helpers.launchCatching +import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.delay import kotlinx.coroutines.flow.combine import kotlinx.coroutines.launch import javax.inject.Inject -import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint class SkillsFragment : BaseMainFragment() { @@ -59,7 +59,6 @@ class SkillsFragment : BaseMainFragment() { return super.onCreateView(inflater, container, savedInstanceState) } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) userViewModel.user.observe(viewLifecycleOwner) { user -> @@ -117,10 +116,12 @@ class SkillsFragment : BaseMainFragment() { } else { context?.let { showSnackbar( - activity.snackbarContainer, null, + activity.snackbarContainer, + null, context?.getString(R.string.used_skill_without_mana, usedSkill?.text), BitmapDrawable(resources, HabiticaIconsHelper.imageOfMagic()), - ContextCompat.getColor(it, R.color.blue_10), "-" + usedSkill?.mana, + ContextCompat.getColor(it, R.color.blue_10), + "-" + usedSkill?.mana, HabiticaSnackbar.SnackbarDisplayType.BLUE ) } @@ -130,10 +131,12 @@ class SkillsFragment : BaseMainFragment() { delay(2000L) if (!isAdded) return@launch showSnackbar( - activity.snackbarContainer, null, + activity.snackbarContainer, + null, context?.getString(R.string.caused_damage), BitmapDrawable(resources, HabiticaIconsHelper.imageOfDamage()), - ContextCompat.getColor(activity, R.color.green_10), "+%.01f".format(response.damage), + ContextCompat.getColor(activity, R.color.green_10), + "+%.01f".format(response.damage), HabiticaSnackbar.SnackbarDisplayType.SUCCESS ) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatFragment.kt index dd0a2c412..26fda7041 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatFragment.kt @@ -41,12 +41,12 @@ import kotlin.time.toDuration @AndroidEntryPoint open class ChatFragment : BaseFragment() { - override var binding : FragmentChatBinding? = null + override var binding: FragmentChatBinding? = null override fun createBinding( - inflater : LayoutInflater, - container : ViewGroup? - ) : FragmentChatBinding { + inflater: LayoutInflater, + container: ViewGroup? + ): FragmentChatBinding { return FragmentChatBinding.inflate(inflater, container, false) } @@ -55,17 +55,18 @@ open class ChatFragment : BaseFragment() { ) @Inject - lateinit var configManager : AppConfigManager + lateinit var configManager: AppConfigManager + @Inject lateinit var socialRepository: SocialRepository - private var chatAdapter : ChatRecyclerViewAdapter? = null + private var chatAdapter: ChatRecyclerViewAdapter? = null private var navigatedOnceToFragment = false private var isScrolledToBottom = true private var isFirstRefresh = true - var autocompleteContext : String = "" + var autocompleteContext: String = "" - override fun onViewCreated(view : View, savedInstanceState : Bundle?) { + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val layoutManager = LinearLayoutManager(context) @@ -95,21 +96,20 @@ open class ChatFragment : BaseFragment() { configManager.enableUsernameAutocomplete() ) - binding?.recyclerView?.adapter = chatAdapter binding?.recyclerView?.itemAnimator = SafeDefaultItemAnimator() binding?.recyclerView?.addOnScrollListener(object : - androidx.recyclerview.widget.RecyclerView.OnScrollListener() { - override fun onScrolled( - recyclerView : androidx.recyclerview.widget.RecyclerView, - dx : Int, - dy : Int - ) { - super.onScrolled(recyclerView, dx, dy) - isScrolledToBottom = layoutManager.findFirstVisibleItemPosition() == 0 - } - }) + androidx.recyclerview.widget.RecyclerView.OnScrollListener() { + override fun onScrolled( + recyclerView: androidx.recyclerview.widget.RecyclerView, + dx: Int, + dy: Int + ) { + super.onScrolled(recyclerView, dx, dy) + isScrolledToBottom = layoutManager.findFirstVisibleItemPosition() == 0 + } + }) viewModel.chatmessages.observe(viewLifecycleOwner) { setChatMessages(it) } @@ -139,7 +139,7 @@ open class ChatFragment : BaseFragment() { setNavigatedToFragment() } - private fun setReplyTo(username : String?) { + private fun setReplyTo(username: String?) { val previousMessage = binding?.chatBarView?.message ?: "" if (previousMessage.contains("@$username")) { return @@ -167,7 +167,7 @@ open class ChatFragment : BaseFragment() { } } - private fun copyMessageToClipboard(chatMessage : ChatMessage) { + private fun copyMessageToClipboard(chatMessage: ChatMessage) { val clipMan = activity?.getSystemService(Context.CLIPBOARD_SERVICE) as? ClipboardManager val messageText = ClipData.newPlainText("Chat message", chatMessage.text) clipMan?.setPrimaryClip(messageText) @@ -181,7 +181,7 @@ open class ChatFragment : BaseFragment() { } } - private fun showFlagConfirmationDialog(chatMessage : ChatMessage) { + private fun showFlagConfirmationDialog(chatMessage: ChatMessage) { val directions = MainNavDirections.actionGlobalReportMessageActivity( chatMessage.text ?: "", chatMessage.user ?: "", @@ -191,7 +191,7 @@ open class ChatFragment : BaseFragment() { MainNavigationController.navigate(directions) } - private fun showDeleteConfirmationDialog(chatMessage : ChatMessage) { + private fun showDeleteConfirmationDialog(chatMessage: ChatMessage) { val context = context if (context != null) { val dialog = HabiticaAlertDialog(context) @@ -204,7 +204,7 @@ open class ChatFragment : BaseFragment() { } } - private fun setChatMessages(chatMessages : List) { + private fun setChatMessages(chatMessages: List) { chatAdapter?.data = chatMessages binding?.chatBarView?.chatMessages = chatMessages @@ -213,7 +213,7 @@ open class ChatFragment : BaseFragment() { markMessagesAsSeen() } - private fun sendChatMessage(chatText : String) { + private fun sendChatMessage(chatText: String) { viewModel.postGroupChat( chatText, { binding?.recyclerView?.scrollToPosition(0) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.kt index 2b09d131e..15c395fc0 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.kt @@ -53,6 +53,7 @@ class InboxMessageListFragment : BaseMainFragment(), androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener, View.OnClickListener { @Inject lateinit var socialRepository: SocialRepository + @Inject lateinit var configManager: AppConfigManager + @Inject lateinit var userViewModel: MainUserViewModel @@ -145,7 +147,6 @@ class InboxOverviewFragment : BaseMainFragment(), androidx } } - private fun retrieveMessages() { lifecycleScope.launchCatching { socialRepository.retrieveInboxConversations() diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/PartyChatFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/PartyChatFragment.kt index 7dc7c9c79..374a3a1ab 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/PartyChatFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/PartyChatFragment.kt @@ -7,4 +7,4 @@ class PartyChatFragment : ChatFragment() { override val viewModel: PartyViewModel by viewModels( ownerProducer = { requireParentFragment() } ) -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/QuestDetailFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/QuestDetailFragment.kt index 27c5e3dfe..13c9abec5 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/QuestDetailFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/QuestDetailFragment.kt @@ -20,7 +20,6 @@ import com.habitrpg.android.habitica.models.inventory.Quest import com.habitrpg.android.habitica.models.inventory.QuestContent import com.habitrpg.android.habitica.models.members.Member import com.habitrpg.android.habitica.models.social.Group -import com.habitrpg.android.habitica.modules.AppModule import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog @@ -29,6 +28,7 @@ import com.habitrpg.common.habitica.extensions.loadImage import com.habitrpg.common.habitica.helpers.ExceptionHandler import com.habitrpg.common.habitica.helpers.MarkdownParser import com.habitrpg.common.habitica.helpers.launchCatching +import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.flatMapLatest @@ -36,7 +36,6 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import javax.inject.Inject -import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint class QuestDetailFragment : BaseMainFragment() { @@ -303,5 +302,4 @@ class QuestDetailFragment : BaseMainFragment() { }.setNegativeButton(R.string.no) { _, _ -> } builder.show() } - } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernDetailFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernDetailFragment.kt index 2a176b549..bd8f6a472 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernDetailFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernDetailFragment.kt @@ -29,25 +29,29 @@ import com.habitrpg.android.habitica.ui.views.UsernameLabel import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog import com.habitrpg.common.habitica.helpers.ExceptionHandler import com.habitrpg.common.habitica.models.PlayerTier +import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import javax.inject.Inject -import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint class TavernDetailFragment : BaseFragment() { @Inject lateinit var userRepository: UserRepository + @Inject lateinit var socialRepository: SocialRepository + @Inject lateinit var inventoryRepository: InventoryRepository + @Inject lateinit var userViewModel: MainUserViewModel + @Inject lateinit var configManager: AppConfigManager @@ -172,7 +176,6 @@ class TavernDetailFragment : BaseFragment() { (binding?.playerTiersView?.parent as? ViewGroup)?.invalidate() } - companion object { fun showWorldBossInfoDialog(context: Context, quest: QuestContent) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernFragment.kt index 98874cb32..61544ab98 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernFragment.kt @@ -61,7 +61,6 @@ class TavernFragment : BaseMainFragment() { super.onDestroy() } - override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { inflater.inflate(R.menu.menu_tavern, menu) super.onCreateOptionsMenu(menu, inflater) @@ -96,7 +95,9 @@ class TavernFragment : BaseMainFragment() { override fun getItemCount(): Int { return if (viewModel.getGroupData().value?.quest?.active == true) { 3 - } else 2 + } else { + 2 + } } } tabLayout?.let { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeDetailFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeDetailFragment.kt index fe6b5b7bf..233d1d4ef 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeDetailFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeDetailFragment.kt @@ -38,19 +38,21 @@ import com.habitrpg.common.habitica.helpers.ExceptionHandler import com.habitrpg.common.habitica.helpers.launchCatching import com.habitrpg.common.habitica.helpers.setMarkdown import com.habitrpg.shared.habitica.models.tasks.TaskType +import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.map import retrofit2.HttpException import javax.inject.Inject -import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint class ChallengeDetailFragment : BaseMainFragment() { @Inject lateinit var challengeRepository: ChallengeRepository + @Inject lateinit var socialRepository: SocialRepository + @Inject lateinit var userViewModel: MainUserViewModel @@ -64,7 +66,6 @@ class ChallengeDetailFragment : BaseMainFragment var challenge: Challenge? = null private var isCreator = false - override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeListFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeListFragment.kt index 1f8ffcd33..21911237e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeListFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeListFragment.kt @@ -33,10 +33,13 @@ class ChallengeListFragment : @Inject lateinit var challengeRepository: ChallengeRepository + @Inject lateinit var socialRepository: SocialRepository + @Inject lateinit var userRepository: UserRepository + @Inject lateinit var userViewModel: MainUserViewModel @@ -126,7 +129,6 @@ class ChallengeListFragment : ) } - override fun onRefresh() { nextPageToLoad = 0 loadedAllData = false diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengesOverviewFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengesOverviewFragment.kt index 6d55687c0..0c258e050 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengesOverviewFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengesOverviewFragment.kt @@ -19,8 +19,8 @@ import com.habitrpg.android.habitica.data.ChallengeRepository import com.habitrpg.android.habitica.databinding.FragmentViewpagerBinding import com.habitrpg.android.habitica.ui.activities.ChallengeFormActivity import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment -import javax.inject.Inject import dagger.hilt.android.AndroidEntryPoint +import javax.inject.Inject @AndroidEntryPoint class ChallengesOverviewFragment : BaseMainFragment() { @@ -67,7 +67,6 @@ class ChallengesOverviewFragment : BaseMainFragment() super.onDestroy() } - override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { super.onCreateOptionsMenu(menu, inflater) inflater.inflate(R.menu.menu_list_challenges, menu) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildDetailFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildDetailFragment.kt index 163d3365d..55c5f03d2 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildDetailFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildDetailFragment.kt @@ -185,7 +185,6 @@ class GuildDetailFragment : BaseFragment() { (this.activity as? MainActivity)?.showSnackbar(title = getString(R.string.left_guild)) } - private fun updateGuild(guild: Group?) { binding?.titleView?.text = guild?.name binding?.guildMembersIcon?.setImageBitmap(HabiticaIconsHelper.imageOfGuildCrestMedium((guild?.memberCount ?: 0).toFloat())) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildFragment.kt index f2ac76947..736770f7b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildFragment.kt @@ -49,7 +49,6 @@ class GuildFragment : BaseMainFragment() { return super.onCreateView(inflater, container, savedInstanceState) } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { showsBackButton = true super.onViewCreated(view, savedInstanceState) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildListFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildListFragment.kt index 7ef48688b..795e15279 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildListFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildListFragment.kt @@ -17,9 +17,9 @@ import com.habitrpg.android.habitica.ui.helpers.SafeDefaultItemAnimator import com.habitrpg.common.habitica.helpers.EmptyItem import com.habitrpg.common.habitica.helpers.ExceptionHandler import com.habitrpg.common.habitica.helpers.launchCatching +import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.launch import javax.inject.Inject -import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint class GuildListFragment : @@ -43,7 +43,6 @@ class GuildListFragment : private var viewAdapter = GuildListAdapter() - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildOverviewFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildOverviewFragment.kt index 272f5b5e9..0c451f7a6 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildOverviewFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildOverviewFragment.kt @@ -21,8 +21,8 @@ import com.habitrpg.android.habitica.databinding.FragmentViewpagerBinding import com.habitrpg.android.habitica.extensions.addCloseButton import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog -import javax.inject.Inject import dagger.hilt.android.AndroidEntryPoint +import javax.inject.Inject @AndroidEntryPoint class GuildOverviewFragment : BaseMainFragment(), SearchView.OnQueryTextListener { @@ -55,7 +55,6 @@ class GuildOverviewFragment : BaseMainFragment(), Sear setViewPagerAdapter() } - override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { super.onCreateOptionsMenu(menu, inflater) inflater.inflate(R.menu.menu_public_guild, menu) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/NoPartyFragmentFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/NoPartyFragmentFragment.kt index 0e38beb11..06d080582 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/NoPartyFragmentFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/NoPartyFragmentFragment.kt @@ -36,8 +36,10 @@ class NoPartyFragmentFragment : BaseMainFragment() { @Inject lateinit var socialRepository: SocialRepository + @Inject lateinit var configManager: AppConfigManager + @Inject lateinit var userViewModel: MainUserViewModel diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyDetailFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyDetailFragment.kt index a90d0246a..80ba74cc0 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyDetailFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyDetailFragment.kt @@ -136,7 +136,8 @@ class PartyDetailFragment : BaseFragment() { showExtendedInfo = false, onInvite = { viewModel.rescindInvite(invitedMember) - }) + } + ) } } } @@ -416,7 +417,6 @@ class PartyDetailFragment : BaseFragment() { binding?.membersWrapper?.removeView(memberView) } refreshParty() - } } activity?.dismissKeyboard() diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyInviteFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyInviteFragment.kt index e707246ac..61d27b91e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyInviteFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyInviteFragment.kt @@ -93,10 +93,12 @@ class PartyInviteViewModel @Inject constructor( ) for (invite in invites) { if (invite.isValidEmail()) { - inviteMap["emails"]?.add(mapOf( - "name" to "", - "email" to invite - )) + inviteMap["emails"]?.add( + mapOf( + "name" to "", + "email" to invite + ) + ) } else if (uUIDFromStringOrNull(invite) != null) { inviteMap["uuids"]?.add(invite) } else if (invite.isNotBlank()) { @@ -155,7 +157,8 @@ fun PartyInviteView( ) { item { Column( - horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier .fillMaxWidth() .padding(top = 22.dp, bottom = 14.dp) ) { @@ -169,7 +172,7 @@ fun PartyInviteView( Text( stringResource(R.string.habiticans_send_invite), color = HabiticaTheme.colors.textSecondary, - style = TextStyle(fontSize = 16.sp, fontWeight = FontWeight.Normal), + style = TextStyle(fontSize = 16.sp, fontWeight = FontWeight.Normal) ) } } @@ -184,7 +187,8 @@ fun PartyInviteView( if (it) 135f else 0f } Row( - verticalAlignment = Alignment.CenterVertically, modifier = Modifier + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier .fillMaxWidth() .padding(0.dp, 4.dp) .background(HabiticaTheme.colors.windowBackground, HabiticaTheme.shapes.medium) @@ -215,7 +219,8 @@ fun PartyInviteView( } TextField( - value = invite, onValueChange = { value -> + value = invite, + onValueChange = { value -> if (viewModel.invites.size - 1 == index && viewModel.invites[index].isBlank()) { viewModel.invites.add("") } @@ -259,7 +264,8 @@ fun PartyInviteView( delay(2.toDuration(DurationUnit.SECONDS)) dismiss() } - }) + } + ) } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyInvitePagerFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyInvitePagerFragment.kt index 3fd30f269..7eaef5b9b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyInvitePagerFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyInvitePagerFragment.kt @@ -18,22 +18,22 @@ import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint class PartyInvitePagerFragment : BaseMainFragment() { - override var binding : FragmentViewpagerBinding? = null + override var binding: FragmentViewpagerBinding? = null internal val viewModel: PartyViewModel by viewModels() override fun createBinding( - inflater : LayoutInflater, - container : ViewGroup? - ) : FragmentViewpagerBinding { + inflater: LayoutInflater, + container: ViewGroup? + ): FragmentViewpagerBinding { return FragmentViewpagerBinding.inflate(inflater, container, false) } override fun onCreateView( - inflater : LayoutInflater, - container : ViewGroup?, - savedInstanceState : Bundle? - ) : View? { + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { this.usesTabLayout = true this.hidesToolbar = true showsBackButton = true @@ -45,11 +45,11 @@ class PartyInvitePagerFragment : BaseMainFragment() { .observe(viewLifecycleOwner) { binding?.viewPager?.adapter?.notifyDataSetChanged() usesTabLayout = viewModel.isLeader - } + } return super.onCreateView(inflater, container, savedInstanceState) } - override fun onViewCreated(view : View, savedInstanceState : Bundle?) { + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setViewPagerAdapter() @@ -59,7 +59,7 @@ class PartyInvitePagerFragment : BaseMainFragment() { private fun setViewPagerAdapter() { val fragmentManager = childFragmentManager binding?.viewPager?.adapter = object : FragmentStateAdapter(fragmentManager, lifecycle) { - override fun createFragment(position : Int) : Fragment { + override fun createFragment(position: Int): Fragment { return when (position) { 0 -> { if (viewModel.isLeader) { @@ -77,7 +77,7 @@ class PartyInvitePagerFragment : BaseMainFragment() { } } - override fun getItemCount() : Int { + override fun getItemCount(): Int { return if (viewModel.isLeader) 2 else 1 } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartySeekingFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartySeekingFragment.kt index 485b875f8..ed0b45a22 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartySeekingFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartySeekingFragment.kt @@ -81,12 +81,12 @@ import kotlin.time.toDuration @HiltViewModel class PartySeekingViewModel @Inject constructor( - userRepository : UserRepository, - userViewModel : MainUserViewModel, - val socialRepository : SocialRepository + userRepository: UserRepository, + userViewModel: MainUserViewModel, + val socialRepository: SocialRepository ) : BaseViewModel(userRepository, userViewModel) { val isRefreshing = mutableStateOf(false) - val seekingUsers : Flow> + val seekingUsers: Flow> val inviteStates = mutableStateMapOf>() init { seekingUsers = Pager( @@ -100,36 +100,37 @@ class PartySeekingViewModel @Inject constructor( ).flow.cachedIn(viewModelScope) } - suspend fun inviteUser(member : Member) : InviteResponse? { + suspend fun inviteUser(member: Member): InviteResponse? { return socialRepository.inviteToGroup( - "party", mapOf( + "party", + mapOf( "uuids" to listOf(member.id) ) )?.firstOrNull() } - suspend fun rescindInvite(member : Member) : Member? { + suspend fun rescindInvite(member: Member): Member? { return socialRepository.removeMemberFromGroup("party", member.id)?.firstOrNull() } } @AndroidEntryPoint class PartySeekingFragment : BaseFragment() { - val viewModel : PartySeekingViewModel by viewModels() + val viewModel: PartySeekingViewModel by viewModels() - override var binding : FragmentComposeBinding? = null + override var binding: FragmentComposeBinding? = null override fun createBinding( - inflater : LayoutInflater, - container : ViewGroup? - ) : FragmentComposeBinding { + inflater: LayoutInflater, + container: ViewGroup? + ): FragmentComposeBinding { return FragmentComposeBinding.inflate(inflater) } override fun onCreateView( - inflater : LayoutInflater, - container : ViewGroup?, - savedInstanceState : Bundle? - ) : View? { + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { val view = super.onCreateView(inflater, container, savedInstanceState) binding?.composeView?.setContent { HabiticaTheme { @@ -148,43 +149,54 @@ class PartySeekingFragment : BaseFragment() { @OptIn(ExperimentalAnimationApi::class) @Composable fun InviteButton( - state : LoadingButtonState, - onClick : () -> Unit, - modifier : Modifier = Modifier, - isAlreadyInvited: Boolean = false, + state: LoadingButtonState, + onClick: () -> Unit, + modifier: Modifier = Modifier, + isAlreadyInvited: Boolean = false ) { AnimatedContent( - transitionSpec = { fadeIn(animationSpec = tween(220, delayMillis = 90)) with - fadeOut(animationSpec = tween(90)) }, - targetState = isAlreadyInvited) {isInvited -> + transitionSpec = { + fadeIn(animationSpec = tween(220, delayMillis = 90)) with + fadeOut(animationSpec = tween(90)) + }, + targetState = isAlreadyInvited + ) { isInvited -> if (isInvited) { - LoadingButton(state = state, onClick = onClick, + LoadingButton( + state = state, + onClick = onClick, type = LoadingButtonType.DESTRUCTIVE, colors = ButtonDefaults.buttonColors( backgroundColor = HabiticaTheme.colors.errorBackground, - contentColor = Color.White, - ), modifier = modifier, successContent = { - Text(stringResource(R.string.rescinded)) - }) { + contentColor = Color.White + ), + modifier = modifier, + successContent = { + Text(stringResource(R.string.rescinded)) + } + ) { Text(stringResource(R.string.rescind_invite)) } } else { - LoadingButton(state = state, onClick = onClick, - modifier = modifier, successContent = { + LoadingButton( + state = state, + onClick = onClick, + modifier = modifier, + successContent = { Text(stringResource(R.string.invited)) - }) { + } + ) { Text(stringResource(R.string.send_invite)) } } } - } @OptIn(ExperimentalMaterialApi::class, ExperimentalFoundationApi::class) @Composable fun PartySeekingView( - viewModel : PartySeekingViewModel, - modifier : Modifier = Modifier + viewModel: PartySeekingViewModel, + modifier: Modifier = Modifier ) { val pageData = viewModel.seekingUsers.collectAsLazyPagingItems() val refreshing by viewModel.isRefreshing @@ -199,7 +211,8 @@ fun PartySeekingView( LazyColumn { item { Column( - horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier .fillMaxWidth() .padding(top = 36.dp, bottom = 14.dp) ) { @@ -215,12 +228,14 @@ fun PartySeekingView( stringResource(R.string.habiticans_looking_party_empty), textAlign = TextAlign.Center, style = TextStyle(fontSize = 16.sp, fontWeight = FontWeight.Normal), - color = HabiticaTheme.colors.textSecondary, modifier = Modifier + color = HabiticaTheme.colors.textSecondary, + modifier = Modifier .width(320.dp) .align(alignment = Alignment.CenterHorizontally) ) Image( - painterResource(R.drawable.looking_for_party_empty), null, + painterResource(R.drawable.looking_for_party_empty), + null, modifier = Modifier.padding(top = 50.dp) ) } else { @@ -228,7 +243,8 @@ fun PartySeekingView( stringResource(R.string.habiticans_looking_party), textAlign = TextAlign.Center, style = TextStyle(fontSize = 16.sp, fontWeight = FontWeight.Normal), - color = HabiticaTheme.colors.textSecondary, modifier = Modifier + color = HabiticaTheme.colors.textSecondary, + modifier = Modifier .width(320.dp) .align(alignment = Alignment.CenterHorizontally) ) @@ -274,7 +290,7 @@ fun PartySeekingView( modifier = Modifier .fillParentMaxSize(), horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.Center, + verticalArrangement = Arrangement.Center ) { HabiticaCircularProgressView() } @@ -314,16 +330,16 @@ fun PartySeekingView( } class PartySeekingPagingSource( - private val repository : SocialRepository, + private val repository: SocialRepository ) : PagingSource() { - override fun getRefreshKey(state : PagingState) : Int? { + override fun getRefreshKey(state: PagingState): Int? { return state.anchorPosition?.let { anchorPosition -> state.closestPageToPosition(anchorPosition)?.prevKey?.plus(1) ?: state.closestPageToPosition(anchorPosition)?.nextKey?.minus(1) } } - override suspend fun load(params : LoadParams) : LoadResult { + override suspend fun load(params: LoadParams): LoadResult { return try { val page = params.key ?: 0 val response = repository.retrievePartySeekingUsers(page) @@ -331,9 +347,9 @@ class PartySeekingPagingSource( LoadResult.Page( data = response ?: emptyList(), prevKey = if (page == 0) null else page.minus(1), - nextKey = if ((response?.size ?: 0) < 30) null else page.plus(1), + nextKey = if ((response?.size ?: 0) < 30) null else page.plus(1) ) - } catch (e : Exception) { + } catch (e: Exception) { LoadResult.Error(e) } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/BugFixFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/BugFixFragment.kt index 642a9709c..304ffbbfa 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/BugFixFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/BugFixFragment.kt @@ -39,10 +39,10 @@ class BugFixFragment : BaseMainFragment() { @Inject lateinit var appConfigManager: AppConfigManager + @Inject lateinit var userViewModel: MainUserViewModel - override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -105,7 +105,8 @@ class BugFixFragment : BaseMainFragment() { val newLine = "%0D%0A" var bodyOfEmail = Uri.encode("Device: $manufacturer $deviceName") + newLine + Uri.encode("Android Version: $version") + - newLine + Uri.encode("AppVersion: " + getString( + newLine + Uri.encode( + "AppVersion: " + getString( R.string.version_info, versionName, versionCode @@ -121,10 +122,14 @@ class BugFixFragment : BaseMainFragment() { bodyOfEmail += newLine + Uri.encode("Level: " + (user.stats?.lvl ?: 0)) + newLine + Uri.encode( "Class: " + ( - if (user.preferences?.disableClasses == true) "Disabled" else ( - user.stats?.habitClass - ?: "None" - ) + if (user.preferences?.disableClasses == true) { + "Disabled" + } else { + ( + user.stats?.habitClass + ?: "None" + ) + } ) ) + newLine + Uri.encode("Is in Inn: " + (user.preferences?.sleep ?: false)) + diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/FAQDetailFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/FAQDetailFragment.kt index 822ad458d..e89cf1e89 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/FAQDetailFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/FAQDetailFragment.kt @@ -11,8 +11,8 @@ import com.habitrpg.android.habitica.databinding.FragmentFaqDetailBinding import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment import com.habitrpg.common.habitica.helpers.MarkdownParser import com.habitrpg.common.habitica.helpers.launchCatching -import javax.inject.Inject import dagger.hilt.android.AndroidEntryPoint +import javax.inject.Inject @AndroidEntryPoint class FAQDetailFragment : BaseMainFragment() { @@ -55,5 +55,4 @@ class FAQDetailFragment : BaseMainFragment() { binding?.answerTextView?.movementMethod = LinkMovementMethod.getInstance() } - } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/FAQOverviewFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/FAQOverviewFragment.kt index 518a7ba05..64cef3592 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/FAQOverviewFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/FAQOverviewFragment.kt @@ -18,7 +18,6 @@ import android.widget.FrameLayout import android.widget.ImageView import android.widget.LinearLayout import androidx.core.content.ContextCompat -import androidx.core.os.bundleOf import androidx.core.view.isVisible import androidx.lifecycle.lifecycleScope import com.habitrpg.android.habitica.R @@ -36,7 +35,6 @@ import com.habitrpg.common.habitica.extensions.layoutInflater import com.habitrpg.common.habitica.helpers.AppTestingLevel import com.habitrpg.common.habitica.helpers.ExceptionHandler import com.habitrpg.common.habitica.helpers.launchCatching -import com.habitrpg.common.habitica.helpers.setMarkdown import com.habitrpg.common.habitica.models.PlayerTier import com.jaredrummler.android.device.DeviceName import dagger.hilt.android.AndroidEntryPoint @@ -51,6 +49,7 @@ class FAQOverviewFragment : BaseMainFragment() { @Inject lateinit var appConfigManager: AppConfigManager + @Inject lateinit var userViewModel: MainUserViewModel @@ -60,6 +59,7 @@ class FAQOverviewFragment : BaseMainFragment() { @Inject lateinit var faqRepository: FAQRepository + @Inject lateinit var configManager: AppConfigManager @@ -158,7 +158,6 @@ class FAQOverviewFragment : BaseMainFragment() { super.onDestroy() } - private fun loadArticles() { lifecycleScope.launchCatching { faqRepository.getArticles().collect { @@ -187,12 +186,13 @@ class FAQOverviewFragment : BaseMainFragment() { val manufacturer = deviceInfo?.manufacturer ?: Build.MANUFACTURER val newLine = "%0D%0A" var bodyOfEmail = Uri.encode("Device: $manufacturer $deviceName") + - newLine + Uri.encode("Android Version: $version") + - newLine + Uri.encode("AppVersion: " + getString( - R.string.version_info, - versionName, - versionCode - ) + newLine + Uri.encode("Android Version: $version") + + newLine + Uri.encode( + "AppVersion: " + getString( + R.string.version_info, + versionName, + versionCode + ) ) if (appConfigManager.testingLevel().name != AppTestingLevel.PRODUCTION.name) { @@ -202,18 +202,22 @@ class FAQOverviewFragment : BaseMainFragment() { userViewModel.user.value?.let { user -> bodyOfEmail += newLine + Uri.encode("Level: " + (user.stats?.lvl ?: 0)) + - newLine + Uri.encode( + newLine + Uri.encode( "Class: " + ( - if (user.preferences?.disableClasses == true) "Disabled" else ( - user.stats?.habitClass - ?: "None" - ) - ) + if (user.preferences?.disableClasses == true) { + "Disabled" + } else { + ( + user.stats?.habitClass + ?: "None" + ) + } + ) ) + - newLine + Uri.encode("Is in Inn: " + (user.preferences?.sleep ?: false)) + - newLine + Uri.encode("Uses Costume: " + (user.preferences?.costume ?: false)) + - newLine + Uri.encode("Custom Day Start: " + (user.preferences?.dayStart ?: 0)) + - newLine + Uri.encode( + newLine + Uri.encode("Is in Inn: " + (user.preferences?.sleep ?: false)) + + newLine + Uri.encode("Uses Costume: " + (user.preferences?.costume ?: false)) + + newLine + Uri.encode("Custom Day Start: " + (user.preferences?.dayStart ?: 0)) + + newLine + Uri.encode( "Timezone Offset: " + (user.preferences?.timezoneOffset ?: 0) ) } @@ -223,8 +227,8 @@ class FAQOverviewFragment : BaseMainFragment() { mainActivity?.let { val emailIntent = Intent(Intent.ACTION_SENDTO) val mailto = "mailto:" + appConfigManager.supportEmail() + - "?subject=" + Uri.encode(subject) + - "&body=" + bodyOfEmail + "?subject=" + Uri.encode(subject) + + "&body=" + bodyOfEmail emailIntent.data = Uri.parse(mailto) startActivity(Intent.createChooser(emailIntent, "Choose an Email client:")) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/SupportMainFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/SupportMainFragment.kt index 2bedaed12..cf9ce3274 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/SupportMainFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/SupportMainFragment.kt @@ -29,6 +29,7 @@ class SupportMainFragment : BaseMainFragment() { @Inject lateinit var faqRepository: FAQRepository + @Inject lateinit var appConfigManager: AppConfigManager @@ -69,5 +70,4 @@ class SupportMainFragment : BaseMainFragment() { faqRepository.close() super.onDestroy() } - } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/RewardsRecyclerviewFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/RewardsRecyclerviewFragment.kt index b10fae01b..f4e83fc12 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/RewardsRecyclerviewFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/RewardsRecyclerviewFragment.kt @@ -13,7 +13,6 @@ import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import com.habitrpg.android.habitica.R -import com.habitrpg.android.habitica.models.shops.Shop import com.habitrpg.android.habitica.models.shops.ShopItem import com.habitrpg.android.habitica.ui.activities.MainActivity import com.habitrpg.android.habitica.ui.activities.SkillMemberActivity @@ -80,7 +79,7 @@ class RewardsRecyclerviewFragment : TaskRecyclerViewFragment() { val dialog = PurchaseDialog(requireContext(), userRepository, inventoryRepository, item) dialog.isPinned = isPinned dialog.onGearPurchased = { - viewModel.refreshData { } + viewModel.refreshData { } } dialog.show() } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragment.kt index 77cc85467..01856b6bb 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragment.kt @@ -231,7 +231,6 @@ open class TaskRecyclerViewFragment : super.onDestroy() } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) savedInstanceState?.let { @@ -329,7 +328,9 @@ open class TaskRecyclerViewFragment : } lifecycleScope.launchCatching { taskRepository.updateTaskPosition( - taskType, validTaskId, newPosition + taskType, + validTaskId, + newPosition ) } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TasksFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TasksFragment.kt index 9f276f9f7..b730c753d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TasksFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TasksFragment.kt @@ -44,7 +44,7 @@ import javax.inject.Inject @AndroidEntryPoint class TasksFragment : BaseMainFragment(), SearchView.OnQueryTextListener, HabiticaBottomNavigationViewListener { @Inject - lateinit var tagRepository : TagRepository + lateinit var tagRepository: TagRepository internal val viewModel: TasksViewModel by viewModels() override var binding: FragmentViewpagerBinding? = null @@ -140,7 +140,6 @@ class TasksFragment : BaseMainFragment(), SearchView.O super.onPause() } - override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { super.onCreateOptionsMenu(menu, inflater) if (viewModel.isPersonalBoard) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/AutocompleteTokenizer.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/AutocompleteTokenizer.kt index 437f78cc8..c63eb43c2 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/AutocompleteTokenizer.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/AutocompleteTokenizer.kt @@ -49,8 +49,12 @@ class AutocompleteTokenizer(val tokens: List) : MultiAutoCompleteTextView. if (text is Spanned) { val sp = SpannableString("$text ") TextUtils.copySpansFrom( - text, 0, text.length, - Any::class.java, sp, 0 + text, + 0, + text.length, + Any::class.java, + sp, + 0 ) sp } else { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/SafeDefaultItemAnimator.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/SafeDefaultItemAnimator.kt index 47c5f8fc3..af7a6d3b6 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/SafeDefaultItemAnimator.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/SafeDefaultItemAnimator.kt @@ -103,8 +103,11 @@ class SafeDefaultItemAnimator : SimpleItemAnimator() { for (moveInfo in moves) { moveInfo.holder?.let { animateMoveImpl( - it, moveInfo.fromX, moveInfo.fromY, - moveInfo.toX, moveInfo.toY + it, + moveInfo.fromX, + moveInfo.fromY, + moveInfo.toX, + moveInfo.toY ) } } @@ -123,7 +126,6 @@ class SafeDefaultItemAnimator : SimpleItemAnimator() { } // Next, change stuff, to run in parallel with move animations if (changesPending) { - val changes = ArrayList(pendingChanges) changesList.add(changes) pendingChanges.clear() @@ -193,7 +195,8 @@ class SafeDefaultItemAnimator : SimpleItemAnimator() { removeAnimations.remove(holder) dispatchFinishedWhenDone() } - }).start() + } + ).start() } override fun animateAdd(holder: RecyclerView.ViewHolder): Boolean { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/ToolbarColorHelper.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/ToolbarColorHelper.kt index f1d1758e9..48efbb405 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/ToolbarColorHelper.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/ToolbarColorHelper.kt @@ -102,7 +102,8 @@ object ToolbarColorHelper { activity.window.decorView.waitForLayout { val outViews = ArrayList() findViewsWithText( - outViews, overflowDescription, + outViews, + overflowDescription, View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION ) if (outViews.isEmpty()) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/theme/HabiticaTheme.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/theme/HabiticaTheme.kt index 6866ba14c..a376b49ba 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/theme/HabiticaTheme.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/theme/HabiticaTheme.kt @@ -48,7 +48,7 @@ fun HabiticaTheme( ), subtitle1 = TextStyle( fontWeight = FontWeight.Medium, - fontSize = 16.sp, + fontSize = 16.sp ), subtitle2 = TextStyle( fontWeight = FontWeight.Normal, @@ -168,10 +168,10 @@ class HabiticaColors( val tintedUiSub: Color, val tintedUiDetails: Color, val pixelArtBackground: Color, - val errorBackground : Color, - val errorColor : Color, - val successBackground : Color, - val successColor : Color + val errorBackground: Color, + val errorColor: Color, + val successBackground: Color, + val successColor: Color ) { @Composable @@ -217,9 +217,6 @@ class HabiticaColors( fun basicButtonColor(): Color { return colorResource(R.color.gray700_gray10) } - } -class HabiticaTypography { - -} +class HabiticaTypography diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/ChatRecyclerViewHolder.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/ChatRecyclerViewHolder.kt index 36f555c7f..c57a13c39 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/ChatRecyclerViewHolder.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/ChatRecyclerViewHolder.kt @@ -101,22 +101,30 @@ class ChatRecyclerMessageViewHolder( } binding.replyButton.setCompoundDrawablesWithIntrinsicBounds( BitmapDrawable(res, HabiticaIconsHelper.imageOfChatReplyIcon()), - null, null, null + null, + null, + null ) binding.copyButton.setOnClickListener { chatMessage?.let { onCopyMessage?.invoke(it) } } binding.copyButton.setCompoundDrawablesWithIntrinsicBounds( BitmapDrawable(res, HabiticaIconsHelper.imageOfChatCopyIcon()), - null, null, null + null, + null, + null ) binding.reportButton.setOnClickListener { chatMessage?.let { onFlagMessage?.invoke(it) } } binding.reportButton.setCompoundDrawablesWithIntrinsicBounds( BitmapDrawable(res, HabiticaIconsHelper.imageOfChatReportIcon()), - null, null, null + null, + null, + null ) binding.deleteButton.setOnClickListener { chatMessage?.let { onDeleteMessage?.invoke(it) } } binding.deleteButton.setCompoundDrawablesWithIntrinsicBounds( BitmapDrawable(res, HabiticaIconsHelper.imageOfChatDeleteIcon()), - null, null, null + null, + null, + null ) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/RewardViewHolder.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/RewardViewHolder.kt index 1fd05ff05..7da6558b6 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/RewardViewHolder.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/RewardViewHolder.kt @@ -54,9 +54,13 @@ class RewardViewHolder( if (isLocked) { binding.priceLabel.setCompoundDrawablesWithIntrinsicBounds( HabiticaIconsHelper.imageOfLocked( - ContextCompat.getColor(context, R.color.gray_1_30), 10, 12 + ContextCompat.getColor(context, R.color.gray_1_30), + 10, + 12 ).toDrawable(context.resources), - null, null, null + null, + null, + null ) binding.priceLabel.compoundDrawablePadding = 2.dpToPx(context) } else { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/TodoViewHolder.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/TodoViewHolder.kt index db17b1350..7880bf03c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/TodoViewHolder.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/TodoViewHolder.kt @@ -8,7 +8,6 @@ import com.habitrpg.android.habitica.helpers.GroupPlanInfoProvider import com.habitrpg.android.habitica.models.tasks.ChecklistItem import com.habitrpg.android.habitica.models.tasks.Task import com.habitrpg.shared.habitica.models.responses.TaskDirection -import java.text.SimpleDateFormat class TodoViewHolder( itemView: View, diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/AuthenticationViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/AuthenticationViewModel.kt index 1ee0c7864..d80dd0085 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/AuthenticationViewModel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/AuthenticationViewModel.kt @@ -32,31 +32,37 @@ import kotlinx.coroutines.Dispatchers import javax.inject.Inject class AuthenticationViewModel @Inject constructor( - val apiClient : ApiClient, - val userRepository : UserRepository, - val sharedPrefs : SharedPreferences, - val authenticationHandler : AuthenticationHandler, - val hostConfig : HostConfig, - val analyticsManager : AnalyticsManager, - private val keyHelper : KeyHelper? + val apiClient: ApiClient, + val userRepository: UserRepository, + val sharedPrefs: SharedPreferences, + val authenticationHandler: AuthenticationHandler, + val hostConfig: HostConfig, + val analyticsManager: AnalyticsManager, + private val keyHelper: KeyHelper? ) { - var googleEmail : String? = null + var googleEmail: String? = null fun handleGoogleLogin( - activity : Activity, - pickAccountResult : ActivityResultLauncher + activity: Activity, + pickAccountResult: ActivityResultLauncher ) { if (!checkPlayServices(activity)) { return } val accountTypes = arrayOf("com.google") val intent = AccountManager.newChooseAccountIntent( - null, null, - accountTypes, true, null, null, null, null + null, + null, + accountTypes, + true, + null, + null, + null, + null ) try { pickAccountResult.launch(intent) - } catch (e : ActivityNotFoundException) { + } catch (e: ActivityNotFoundException) { val alert = HabiticaAlertDialog(activity) alert.setTitle(R.string.authentication_error_title) alert.setMessage(R.string.google_services_missing) @@ -66,13 +72,13 @@ class AuthenticationViewModel @Inject constructor( } fun handleGoogleLoginResult( - activity : Activity, - recoverFromPlayServicesErrorResult : ActivityResultLauncher?, - onSuccess : (Boolean) -> Unit + activity: Activity, + recoverFromPlayServicesErrorResult: ActivityResultLauncher?, + onSuccess: (Boolean) -> Unit ) { val scopesString = Scopes.PROFILE + " " + Scopes.EMAIL val scopes = "oauth2:$scopesString" - var newUser : Boolean + var newUser: Boolean CoroutineScope(Dispatchers.IO).launchCatching({ throwable -> if (recoverFromPlayServicesErrorResult == null) return@launchCatching if (throwable is GoogleAuthException) { @@ -93,9 +99,9 @@ class AuthenticationViewModel @Inject constructor( } private fun handleGoogleAuthException( - e : Exception, - activity : Activity, - recoverFromPlayServicesErrorResult : ActivityResultLauncher + e: Exception, + activity: Activity, + recoverFromPlayServicesErrorResult: ActivityResultLauncher ) { if (e is GooglePlayServicesAvailabilityException) { GoogleApiAvailability.getInstance() @@ -118,13 +124,14 @@ class AuthenticationViewModel @Inject constructor( } } - private fun checkPlayServices(activity : Activity) : Boolean { + private fun checkPlayServices(activity: Activity): Boolean { val googleAPI = GoogleApiAvailability.getInstance() val result = googleAPI.isGooglePlayServicesAvailable(activity) if (result != ConnectionResult.SUCCESS) { if (googleAPI.isUserResolvableError(result)) { googleAPI.getErrorDialog( - activity, result, + activity, + result, PLAY_SERVICES_RESOLUTION_REQUEST )?.show() } @@ -134,16 +141,16 @@ class AuthenticationViewModel @Inject constructor( return true } - fun handleAuthResponse(userAuthResponse : UserAuthResponse) { + fun handleAuthResponse(userAuthResponse: UserAuthResponse) { try { saveTokens(userAuthResponse.apiToken, userAuthResponse.id) - } catch (e : Exception) { + } catch (e: Exception) { analyticsManager.logException(e) } } @Throws(Exception::class) - private fun saveTokens(api : String, user : String) { + private fun saveTokens(api: String, user: String) { this.apiClient.updateAuthenticationCredentials(user, api) authenticationHandler.updateUserID(user) sharedPrefs.edit { @@ -152,10 +159,12 @@ class AuthenticationViewModel @Inject constructor( if (keyHelper != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { try { keyHelper.encrypt(api) - } catch (e : Exception) { + } catch (e: Exception) { null } - } else null + } else { + null + } if ((encryptedKey?.length ?: 0) > 5) { putString(user, encryptedKey) } else { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/BaseViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/BaseViewModel.kt index c2425b131..edbbaf754 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/BaseViewModel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/BaseViewModel.kt @@ -8,7 +8,7 @@ import com.habitrpg.android.habitica.models.user.User import com.habitrpg.common.habitica.helpers.ExceptionHandler import kotlinx.coroutines.launch -abstract class BaseViewModel (val userRepository : UserRepository, val userViewModel : MainUserViewModel) : ViewModel() { +abstract class BaseViewModel(val userRepository: UserRepository, val userViewModel: MainUserViewModel) : ViewModel() { val user: LiveData by lazy { userViewModel.user } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/GroupViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/GroupViewModel.kt index 2feae52f5..9e34805a6 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/GroupViewModel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/GroupViewModel.kt @@ -163,7 +163,8 @@ open class GroupViewModel @Inject constructor( ) } else { socialRepository.updateGroup( - group.value, bundle?.getString("name"), + group.value, + bundle?.getString("name"), bundle?.getString("description"), bundle?.getString("leader"), bundle?.getBoolean("leaderOnlyChallenges") diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/InboxViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/InboxViewModel.kt index 29b71f850..e5154f3c9 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/InboxViewModel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/InboxViewModel.kt @@ -32,10 +32,11 @@ import kotlin.math.ceil @HiltViewModel class InboxViewModel @Inject constructor( - savedStateHandle : SavedStateHandle, - userRepository : UserRepository, - userViewModel : MainUserViewModel, - val socialRepository : SocialRepository) : BaseViewModel(userRepository, userViewModel) { + savedStateHandle: SavedStateHandle, + userRepository: UserRepository, + userViewModel: MainUserViewModel, + val socialRepository: SocialRepository +) : BaseViewModel(userRepository, userViewModel) { val recipientID: String? = savedStateHandle.get("userID") val recipientUsername: String? = savedStateHandle.get("username") @@ -125,10 +126,11 @@ class MessagesDataSource( } } .collect { - if (it.size < 10 && footer != null) + if (it.size < 10 && footer != null) { callback.onResult(it.plusElement(footer!!), 0) - else + } else { callback.onResult(it, 0) + } } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/MainActivityViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/MainActivityViewModel.kt index 3a23bee2f..eeb12f44f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/MainActivityViewModel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/MainActivityViewModel.kt @@ -33,24 +33,24 @@ import javax.inject.Inject @HiltViewModel class MainActivityViewModel @Inject constructor( - userRepository : UserRepository, - userViewModel : MainUserViewModel, - val hostConfig : HostConfig, - val pushNotificationManager : PushNotificationManager, - val sharedPreferences : SharedPreferences, - val contentRepository : ContentRepository, - val taskRepository : TaskRepository, - val inventoryRepository : InventoryRepository, - val taskAlarmManager : TaskAlarmManager, - val analyticsManager : AnalyticsManager, - val maintenanceService : MaintenanceApiService + userRepository: UserRepository, + userViewModel: MainUserViewModel, + val hostConfig: HostConfig, + val pushNotificationManager: PushNotificationManager, + val sharedPreferences: SharedPreferences, + val contentRepository: ContentRepository, + val taskRepository: TaskRepository, + val inventoryRepository: InventoryRepository, + val taskAlarmManager: TaskAlarmManager, + val analyticsManager: AnalyticsManager, + val maintenanceService: MaintenanceApiService ) : BaseViewModel(userRepository, userViewModel), TutorialView.OnTutorialReaction { - val isAuthenticated : Boolean + val isAuthenticated: Boolean get() = hostConfig.hasAuthentication() - val launchScreen : String? + val launchScreen: String? get() = sharedPreferences.getString("launch_screen", "") - var preferenceLanguage : String? + var preferenceLanguage: String? get() = sharedPreferences.getString("language", "en") set(value) { sharedPreferences.edit { @@ -78,7 +78,7 @@ class MainActivityViewModel @Inject constructor( ) ) } - } catch (e : Exception) { + } catch (e: Exception) { analyticsManager.logException(e) } } @@ -91,7 +91,7 @@ class MainActivityViewModel @Inject constructor( } } - fun retrieveUser(forced : Boolean = false) { + fun retrieveUser(forced: Boolean = false) { if (hostConfig.hasAuthentication()) { viewModelScope.launch(ExceptionHandler.coroutine()) { contentRepository.retrieveWorldState() @@ -127,23 +127,23 @@ class MainActivityViewModel @Inject constructor( } } - fun updateAllowPushNotifications(allowPushNotifications : Boolean) { + fun updateAllowPushNotifications(allowPushNotifications: Boolean) { sharedPreferences.getBoolean("usePushNotifications", true) sharedPreferences.edit { putBoolean("usePushNotifications", allowPushNotifications) } } - override fun onTutorialCompleted(step : TutorialStep) { + override fun onTutorialCompleted(step: TutorialStep) { updateUser("flags.tutorial." + step.tutorialGroup + "." + step.identifier, true) logTutorialStatus(step, true) } - override fun onTutorialDeferred(step : TutorialStep) { + override fun onTutorialDeferred(step: TutorialStep) { taskRepository.modify(step) { it.displayedOn = Date() } } - fun logTutorialStatus(step : TutorialStep, complete : Boolean) { + fun logTutorialStatus(step: TutorialStep, complete: Boolean) { val additionalData = HashMap() additionalData["eventLabel"] = step.identifier + "-android" additionalData["eventValue"] = step.identifier ?: "" @@ -156,7 +156,7 @@ class MainActivityViewModel @Inject constructor( ) } - fun ifNeedsMaintenance(onResult : ((MaintenanceResponse) -> Unit)) { + fun ifNeedsMaintenance(onResult: ((MaintenanceResponse) -> Unit)) { viewModelScope.launchCatching { val maintenanceResponse = maintenanceService.getMaintenanceStatus() if (maintenanceResponse?.activeMaintenance == null) { @@ -167,10 +167,10 @@ class MainActivityViewModel @Inject constructor( } fun getToolbarTitle( - id : Int, - label : CharSequence?, - eggType : String?, - onSuccess : ((CharSequence?) -> Unit) + id: Int, + label: CharSequence?, + eggType: String?, + onSuccess: ((CharSequence?) -> Unit) ) { if (id == R.id.petDetailRecyclerFragment || id == R.id.mountDetailRecyclerFragment) { viewModelScope.launchCatching { @@ -190,7 +190,9 @@ class MainActivityViewModel @Inject constructor( "" } else if (label.isNullOrEmpty() && user.value?.isValid == true) { user.value?.profile?.name - } else label ?: "" + } else { + label ?: "" + } ) } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/MainUserViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/MainUserViewModel.kt index 636eaf3b5..1f05cb850 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/MainUserViewModel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/MainUserViewModel.kt @@ -22,8 +22,7 @@ import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import javax.inject.Inject - -class MainUserViewModel @Inject constructor(private val authenticationHandler : AuthenticationHandler, val userRepository: UserRepository, val socialRepository: SocialRepository) { +class MainUserViewModel @Inject constructor(private val authenticationHandler: AuthenticationHandler, val userRepository: UserRepository, val socialRepository: SocialRepository) { val formattedUsername: CharSequence? get() = user.value?.formattedUsername @@ -45,14 +44,16 @@ class MainUserViewModel @Inject constructor(private val authenticationHandler : val user: LiveData = userRepository.getUser().asLiveData() var currentTeamPlan = MutableSharedFlow( replay = 1, - onBufferOverflow = BufferOverflow.DROP_OLDEST, + onBufferOverflow = BufferOverflow.DROP_OLDEST ) + @OptIn(ExperimentalCoroutinesApi::class) var currentTeamPlanGroup = currentTeamPlan .map { it?.id } .distinctUntilChanged { old, new -> old == new } .filterNotNull() .flatMapLatest { socialRepository.getGroup(it) } + @OptIn(ExperimentalCoroutinesApi::class) var currentTeamPlanMembers: LiveData> = currentTeamPlan .map { it?.id } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/NotificationsViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/NotificationsViewModel.kt index 4a3cb9eca..9b4245415 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/NotificationsViewModel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/NotificationsViewModel.kt @@ -33,10 +33,10 @@ import javax.inject.Inject @HiltViewModel open class NotificationsViewModel @Inject constructor( - userRepository : UserRepository, - userViewModel : MainUserViewModel, - val notificationsManager : NotificationsManager, - val socialRepository : SocialRepository + userRepository: UserRepository, + userViewModel: MainUserViewModel, + val notificationsManager: NotificationsManager, + val socialRepository: SocialRepository ) : BaseViewModel(userRepository, userViewModel) { private val supportedNotificationTypes = listOf( @@ -55,7 +55,7 @@ open class NotificationsViewModel @Inject constructor( Notification.Type.QUEST_INVITATION.type ) - private var party : UserParty? = null + private var party: UserParty? = null private val customNotifications = MutableStateFlow>(emptyList()) @@ -76,7 +76,7 @@ open class NotificationsViewModel @Inject constructor( } } - fun getNotifications() : Flow> { + fun getNotifications(): Flow> { val serverNotifications = notificationsManager.getNotifications().map { filterSupportedTypes(it) } @@ -88,61 +88,65 @@ open class NotificationsViewModel @Inject constructor( }.map { it.sortedBy { notification -> notification.priority } } } - fun getNotificationCount() : Flow { + fun getNotificationCount(): Flow { return getNotifications().map { it.count() }.distinctUntilChanged() } - fun allNotificationsSeen() : Flow { + fun allNotificationsSeen(): Flow { return getNotifications().map { it.all { notification -> notification.seen == true } } .distinctUntilChanged() } - fun getHasPartyNotification() : Flow { + fun getHasPartyNotification(): Flow { return getNotifications().map { - it.find { notification -> - val data = notification.data as? NewChatMessageData - isPartyMessage(data) - } != null - }.distinctUntilChanged() + it.find { notification -> + val data = notification.data as? NewChatMessageData + isPartyMessage(data) + } != null + }.distinctUntilChanged() } - suspend fun refreshNotifications() : User? { + suspend fun refreshNotifications(): User? { return userRepository.retrieveUser(withTasks = false, forced = true) } - private fun filterSupportedTypes(notifications : List) : List { + private fun filterSupportedTypes(notifications: List): List { return notifications.filter { supportedNotificationTypes.contains(it.type) } } - private fun convertInvitationsToNotifications(user : User) : MutableList { + private fun convertInvitationsToNotifications(user: User): MutableList { val notifications = mutableListOf() - notifications.addAll(user.invitations?.parties?.map { - val notification = Notification() - notification.id = "custom-party-invitation-" + it.id - notification.type = Notification.Type.PARTY_INVITATION.type - val data = PartyInvitationData() - data.invitation = PartyInvite() - data.invitation?.id = it.id - data.invitation?.name = it.name - data.invitation?.inviter = it.inviter - notification.data = data - notification - } ?: emptyList()) + notifications.addAll( + user.invitations?.parties?.map { + val notification = Notification() + notification.id = "custom-party-invitation-" + it.id + notification.type = Notification.Type.PARTY_INVITATION.type + val data = PartyInvitationData() + data.invitation = PartyInvite() + data.invitation?.id = it.id + data.invitation?.name = it.name + data.invitation?.inviter = it.inviter + notification.data = data + notification + } ?: emptyList() + ) - notifications.addAll(user.invitations?.guilds?.map { - val notification = Notification() - notification.id = "custom-guild-invitation-" + it.id - notification.type = Notification.Type.GUILD_INVITATION.type - val data = GuildInvitationData() - data.invitation = GuildInvite() - data.invitation?.id = it.id - data.invitation?.name = it.name - data.invitation?.inviter = it.inviter - data.invitation?.publicGuild = it.publicGuild - notification.data = data - notification - } ?: emptyList()) + notifications.addAll( + user.invitations?.guilds?.map { + val notification = Notification() + notification.id = "custom-guild-invitation-" + it.id + notification.type = Notification.Type.GUILD_INVITATION.type + val data = GuildInvitationData() + data.invitation = GuildInvite() + data.invitation?.id = it.id + data.invitation?.name = it.name + data.invitation?.inviter = it.inviter + data.invitation?.publicGuild = it.publicGuild + notification.data = data + notification + } ?: emptyList() + ) val quest = user.party?.quest if (quest != null && quest.RSVPNeeded) { @@ -159,7 +163,7 @@ open class NotificationsViewModel @Inject constructor( return notifications } - fun isPartyMessage(data : NewChatMessageData?) : Boolean { + fun isPartyMessage(data: NewChatMessageData?): Boolean { if (party?.isValid != true || data?.group?.id == null) { return false } @@ -171,14 +175,14 @@ open class NotificationsViewModel @Inject constructor( * Is the given notification an "artificial" custom notification (created by this class) * instead of one of the ones coming from server. */ - private fun isCustomNotification(notification : Notification) : Boolean { + private fun isCustomNotification(notification: Notification): Boolean { return notification.id.startsWith("custom-") } - private fun isCustomNewStuffNotification(notification : Notification) = + private fun isCustomNewStuffNotification(notification: Notification) = notification.id == "custom-new-stuff-notification" - fun dismissNotification(notification : Notification) { + fun dismissNotification(notification: Notification) { if (isCustomNotification(notification)) { if (isCustomNewStuffNotification(notification)) { updateUser("flags.newStuff", false) @@ -193,7 +197,7 @@ open class NotificationsViewModel @Inject constructor( } } - fun dismissAllNotifications(notifications : List) { + fun dismissAllNotifications(notifications: List) { val dismissableIds = notifications.filter { !isCustomNotification(it) } .filter { !actionableNotificationTypes.contains(it.type) }.map { it.id } @@ -216,7 +220,7 @@ open class NotificationsViewModel @Inject constructor( } } - fun markNotificationsAsSeen(notifications : List) { + fun markNotificationsAsSeen(notifications: List) { val unseenIds = notifications.filter { !isCustomNotification(it) }.filter { it.seen == false } .map { it.id } @@ -233,12 +237,12 @@ open class NotificationsViewModel @Inject constructor( } } - private fun findNotification(id : String) : Notification? { + private fun findNotification(id: String): Notification? { return notificationsManager.getNotification(id) ?: customNotifications.value.find { it.id == id } } - fun click(notificationId : String, navController : MainNavigationController) { + fun click(notificationId: String, navController: MainNavigationController) { val notification = findNotification(notificationId) ?: return dismissNotification(notification) @@ -246,20 +250,24 @@ open class NotificationsViewModel @Inject constructor( when (notification.type) { Notification.Type.NEW_STUFF.type -> navController.navigate(R.id.newsFragment) Notification.Type.NEW_CHAT_MESSAGE.type -> clickNewChatMessage( - notification, navController + notification, + navController ) Notification.Type.GUILD_INVITATION.type -> clickGroupInvitation( - notification, navController + notification, + navController ) Notification.Type.PARTY_INVITATION.type -> clickGroupInvitation( - notification, navController + notification, + navController ) Notification.Type.QUEST_INVITATION.type -> navController.navigate(R.id.partyFragment) Notification.Type.NEW_MYSTERY_ITEMS.type -> navController.navigate( - R.id.itemsFragment, bundleOf(Pair("itemType", "special")) + R.id.itemsFragment, + bundleOf(Pair("itemType", "special")) ) Notification.Type.UNALLOCATED_STATS_POINTS.type -> navController.navigate(R.id.statsFragment) @@ -267,13 +275,15 @@ open class NotificationsViewModel @Inject constructor( Notification.Type.GROUP_TASK_APPROVED.type -> navController.navigate(R.id.tasksFragment) Notification.Type.GROUP_TASK_NEEDS_WORK.type -> navController.navigate(R.id.tasksFragment) Notification.Type.ITEM_RECEIVED.type -> clickItemReceivedNotification( - notification, navController + notification, + navController ) } } private fun clickItemReceivedNotification( - notification : Notification, navController : MainNavigationController + notification: Notification, + navController: MainNavigationController ) { val data = notification.data as? ItemReceivedData if (data?.destination?.startsWith("/") == true) { @@ -291,7 +301,8 @@ open class NotificationsViewModel @Inject constructor( } private fun clickNewChatMessage( - notification : Notification, navController : MainNavigationController + notification: Notification, + navController: MainNavigationController ) { val data = notification.data as? NewChatMessageData if (isPartyMessage(data)) { @@ -303,7 +314,8 @@ open class NotificationsViewModel @Inject constructor( val bundle = Bundle() bundle.putString("groupID", data?.group?.id) bundle.putBoolean( - "isMember", true + "isMember", + true ) // safe to assume user is member since they got the notification bundle.putInt("tabToOpen", 1) navController.navigate(R.id.guildFragment, bundle) @@ -311,7 +323,8 @@ open class NotificationsViewModel @Inject constructor( } private fun clickGroupInvitation( - notification : Notification, navController : MainNavigationController + notification: Notification, + navController: MainNavigationController ) { when (notification.type) { Notification.Type.GUILD_INVITATION.type -> { @@ -319,7 +332,8 @@ open class NotificationsViewModel @Inject constructor( val data = notification.data as? GuildInvitationData bundle.putString("groupID", data?.invitation?.id) bundle.putBoolean( - "isMember", true + "isMember", + true ) // safe to assume user is member since they got the notification navController.navigate(R.id.guildFragment, bundle) } @@ -330,7 +344,7 @@ open class NotificationsViewModel @Inject constructor( } } - fun accept(notificationId : String) { + fun accept(notificationId: String) { val notification = findNotification(notificationId) ?: return when (notification.type) { Notification.Type.GUILD_INVITATION.type -> { @@ -355,7 +369,7 @@ open class NotificationsViewModel @Inject constructor( } } - fun reject(notificationId : String) { + fun reject(notificationId: String) { val notification = findNotification(notificationId) ?: return when (notification.type) { Notification.Type.GUILD_INVITATION.type -> { @@ -376,7 +390,7 @@ open class NotificationsViewModel @Inject constructor( } } - private fun acceptGroupInvitation(groupId : String?) { + private fun acceptGroupInvitation(groupId: String?) { groupId?.let { viewModelScope.launch(ExceptionHandler.coroutine()) { socialRepository.joinGroup(it) @@ -385,7 +399,7 @@ open class NotificationsViewModel @Inject constructor( } } - fun rejectGroupInvite(groupId : String?) { + fun rejectGroupInvite(groupId: String?) { groupId?.let { viewModelScope.launchCatching { socialRepository.rejectGroupInvite(it) @@ -418,11 +432,11 @@ open class NotificationsViewModel @Inject constructor( } } - private fun acceptTaskApproval(notification : Notification) { + private fun acceptTaskApproval(notification: Notification) { notification.data as? GroupTaskRequiresApprovalData } - private fun rejectTaskApproval(notification : Notification) { + private fun rejectTaskApproval(notification: Notification) { notification.data as? GroupTaskRequiresApprovalData } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/PartyViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/PartyViewModel.kt index be876dd2a..fab74230d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/PartyViewModel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/PartyViewModel.kt @@ -19,17 +19,17 @@ import javax.inject.Inject @HiltViewModel class PartyViewModel @Inject constructor( - userRepository : UserRepository, - userViewModel : MainUserViewModel, - challengeRepository : ChallengeRepository, - socialRepository : SocialRepository, - notificationsManager : NotificationsManager + userRepository: UserRepository, + userViewModel: MainUserViewModel, + challengeRepository: ChallengeRepository, + socialRepository: SocialRepository, + notificationsManager: NotificationsManager ) : GroupViewModel(userRepository, userViewModel, challengeRepository, socialRepository, notificationsManager) { - internal val isQuestActive : Boolean + internal val isQuestActive: Boolean get() = getGroupData().value?.quest?.active == true - internal val isUserOnQuest : Boolean + internal val isUserOnQuest: Boolean get() = !( getGroupData().value?.quest?.members?.none { it.key == user.value?.id } ?: true @@ -67,7 +67,7 @@ class PartyViewModel @Inject constructor( } } - fun showParticipantButtons() : Boolean { + fun showParticipantButtons(): Boolean { val user = user.value return !(user?.party == null || user.party?.quest == null) && !isQuestActive && user.party?.quest?.RSVPNeeded == true } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/StableViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/StableViewModel.kt index e75978be8..f48f162e3 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/StableViewModel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/StableViewModel.kt @@ -24,10 +24,10 @@ import javax.inject.Inject @HiltViewModel class StableViewModel @Inject constructor( - savedStateHandle : SavedStateHandle, - userRepository : UserRepository, - userViewModel : MainUserViewModel, - val inventoryRepository : InventoryRepository + savedStateHandle: SavedStateHandle, + userRepository: UserRepository, + userViewModel: MainUserViewModel, + val inventoryRepository: InventoryRepository ) : BaseViewModel(userRepository, userViewModel) { internal val itemType: String? = savedStateHandle[StableRecyclerFragment.ITEM_TYPE_KEY] diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/TaskFormViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/TaskFormViewModel.kt index 3d4be772f..c56543b9d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/TaskFormViewModel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/TaskFormViewModel.kt @@ -10,8 +10,9 @@ import javax.inject.Inject @HiltViewModel class TaskFormViewModel @Inject constructor( - userRepository : UserRepository, - userViewModel : MainUserViewModel) : BaseViewModel(userRepository, userViewModel) { + userRepository: UserRepository, + userViewModel: MainUserViewModel +) : BaseViewModel(userRepository, userViewModel) { val taskDifficulty = mutableStateOf(TaskDifficulty.EASY) val selectedAttribute = mutableStateOf(Attribute.STRENGTH) val habitResetOption = mutableStateOf(HabitResetOption.DAILY) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/TasksViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/TasksViewModel.kt index 75e9f8da2..6605eb65c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/TasksViewModel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/TasksViewModel.kt @@ -34,26 +34,26 @@ import javax.inject.Inject @HiltViewModel class TasksViewModel @Inject constructor( - userRepository : UserRepository, - userViewModel : MainUserViewModel, - val taskRepository : TaskRepository, - val tagRepository : TagRepository, - val appConfigManager : AppConfigManager, - val sharedPreferences : SharedPreferences + userRepository: UserRepository, + userViewModel: MainUserViewModel, + val taskRepository: TaskRepository, + val tagRepository: TagRepository, + val appConfigManager: AppConfigManager, + val sharedPreferences: SharedPreferences ) : BaseViewModel(userRepository, userViewModel), GroupPlanInfoProvider { - private var owners : List> = listOf() + private var owners: List> = listOf() var canSwitchOwners = MutableLiveData() - val ownerID : MutableLiveData by lazy { + val ownerID: MutableLiveData by lazy { MutableLiveData() } var teamPlans = mapOf() - var initialPreferenceFilterSet : Boolean = false + var initialPreferenceFilterSet: Boolean = false - val isPersonalBoard : Boolean + val isPersonalBoard: Boolean get() { return ownerID.value == userViewModel.userID } - val ownerTitle : CharSequence + val ownerTitle: CharSequence get() { return owners.firstOrNull { it.first == ownerID.value }?.second ?: "" } @@ -77,7 +77,7 @@ class TasksViewModel @Inject constructor( } } - internal fun refreshData(onComplete : () -> Unit) { + internal fun refreshData(onComplete: () -> Unit) { viewModelScope.launch(ExceptionHandler.coroutine()) { if (isPersonalBoard) { userRepository.retrieveUser( @@ -105,9 +105,9 @@ class TasksViewModel @Inject constructor( } fun scoreTask( - task : Task, - direction : TaskDirection, - onResult : (TaskScoringResult, Int) -> Unit + task: Task, + direction: TaskDirection, + onResult: (TaskScoringResult, Int) -> Unit ) { viewModelScope.launch(ExceptionHandler.coroutine()) { taskRepository.taskChecked( @@ -131,18 +131,18 @@ class TasksViewModel @Inject constructor( } } - private val filterSets : HashMap>>> = + private val filterSets: HashMap>>> = hashMapOf( Pair(TaskType.HABIT, MutableLiveData()), Pair(TaskType.DAILY, MutableLiveData()), Pair(TaskType.TODO, MutableLiveData()) ) - fun getFilterSet(type : TaskType) : MutableLiveData>>? { + fun getFilterSet(type: TaskType): MutableLiveData>>? { return filterSets[type] } - var searchQuery : String? = null + var searchQuery: String? = null set(value) { field = value filterSets.forEach { @@ -152,7 +152,7 @@ class TasksViewModel @Inject constructor( } private val activeFilters = HashMap() - var tags : MutableList = mutableListOf() + var tags: MutableList = mutableListOf() set(value) { field = value filterSets.forEach { @@ -161,7 +161,7 @@ class TasksViewModel @Inject constructor( } } - fun addActiveTag(tagID : String) { + fun addActiveTag(tagID: String) { if (!tags.contains(tagID)) { tags.add(tagID) } @@ -171,7 +171,7 @@ class TasksViewModel @Inject constructor( } } - fun removeActiveTag(tagID : String) { + fun removeActiveTag(tagID: String) { if (tags.contains(tagID)) { tags.remove(tagID) } @@ -181,15 +181,15 @@ class TasksViewModel @Inject constructor( } } - fun filterCount(type : TaskType?) : Int { + fun filterCount(type: TaskType?): Int { return this.tags.size + if (isTaskFilterActive(type)) 1 else 0 } - fun isFiltering(type : TaskType?) : Boolean { + fun isFiltering(type: TaskType?): Boolean { return filterCount(type) > 0 } - private fun isTaskFilterActive(type : TaskType?) : Boolean { + private fun isTaskFilterActive(type: TaskType?): Boolean { if (activeFilters[type] == null) { return false } @@ -200,12 +200,12 @@ class TasksViewModel @Inject constructor( } } - fun filter(tasks : List) : List { + fun filter(tasks: List): List { if (tasks.isEmpty()) { return tasks } val filtered = ArrayList() - var activeFilter : String? = null + var activeFilter: String? = null if (activeFilters.size > 0) { activeFilter = activeFilters[tasks[0].type] } @@ -218,7 +218,7 @@ class TasksViewModel @Inject constructor( return filtered } - private fun isFiltered(task : Task, activeFilter : String?) : Boolean { + private fun isFiltered(task: Task, activeFilter: String?): Boolean { if (!task.containsAllTagIds(tags)) { return false } @@ -242,7 +242,7 @@ class TasksViewModel @Inject constructor( } } - fun setActiveFilter(type : TaskType, activeFilter : String) { + fun setActiveFilter(type: TaskType, activeFilter: String) { activeFilters[type] = activeFilter filterSets[type]?.value = Triple(searchQuery, activeFilter, tags) @@ -262,7 +262,7 @@ class TasksViewModel @Inject constructor( } } - fun getActiveFilter(type : TaskType?) : String? { + fun getActiveFilter(type: TaskType?): String? { return if (activeFilters.containsKey(type)) { activeFilters[type] } else { @@ -270,7 +270,7 @@ class TasksViewModel @Inject constructor( } } - fun createQuery(unfilteredData : OrderedRealmCollection) : RealmQuery? { + fun createQuery(unfilteredData: OrderedRealmCollection): RealmQuery? { if (!unfilteredData.isValid) { return null } @@ -319,14 +319,14 @@ class TasksViewModel @Inject constructor( return query } - override fun canScoreTask(task : Task) : Boolean { + override fun canScoreTask(task: Task): Boolean { if (!task.isGroupTask) { return true } return task.isAssignedToUser(userViewModel.userID) || task.group?.assignedUsers?.isEmpty() != false } - override suspend fun canEditTask(task : Task) : Boolean { + override suspend fun canEditTask(task: Task): Boolean { if (!task.isGroupTask) { return true } @@ -335,7 +335,7 @@ class TasksViewModel @Inject constructor( return group?.hasTaskEditPrivileges(userViewModel.userID) ?: false } - override suspend fun canAddTasks() : Boolean { + override suspend fun canAddTasks(): Boolean { if (isPersonalBoard) { return true } @@ -344,7 +344,7 @@ class TasksViewModel @Inject constructor( return group?.hasTaskEditPrivileges(userViewModel.userID) ?: false } - override fun assignedTextForTask(resources : Resources, assignedUsers : List) : String { + override fun assignedTextForTask(resources: Resources, assignedUsers: List): String { return if (assignedUsers.contains(userViewModel.userID)) { if (assignedUsers.size == 1) { resources.getString(R.string.you) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/inventory/equipment/EquipmentOverviewViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/inventory/equipment/EquipmentOverviewViewModel.kt index a83ba7f8b..885567432 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/inventory/equipment/EquipmentOverviewViewModel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/inventory/equipment/EquipmentOverviewViewModel.kt @@ -12,16 +12,16 @@ import javax.inject.Inject @HiltViewModel class EquipmentOverviewViewModel @Inject constructor( - userRepository : UserRepository, - userViewModel : MainUserViewModel, - val inventoryRepository : InventoryRepository + userRepository: UserRepository, + userViewModel: MainUserViewModel, + val inventoryRepository: InventoryRepository ) : BaseViewModel(userRepository, userViewModel) { - val usesAutoEquip : Boolean + val usesAutoEquip: Boolean get() = user.value?.preferences?.autoEquip == true - val usesCostume : Boolean + val usesCostume: Boolean get() = user.value?.preferences?.costume == true - fun getGear(key : String, onSuccess : (Equipment) -> Unit) { + fun getGear(key: String, onSuccess: (Equipment) -> Unit) { viewModelScope.launchCatching { inventoryRepository.getEquipment(key).collect { onSuccess(it) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/AppHeaderView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/AppHeaderView.kt index ca6d27b11..63edb5461 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/AppHeaderView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/AppHeaderView.kt @@ -32,7 +32,6 @@ import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.CircleShape import androidx.compose.material.MaterialTheme import androidx.compose.material.Text -import androidx.compose.material.primarySurface import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -68,7 +67,7 @@ import com.habitrpg.shared.habitica.models.Avatar import kotlin.random.Random @Composable -fun UserLevelText(user : Avatar) { +fun UserLevelText(user: Avatar) { val text = if (user.hasClass) { stringResource( id = R.string.user_level_with_class, @@ -89,7 +88,7 @@ fun UserLevelText(user : Avatar) { ) } -fun getTranslatedClassName(resources : Resources, className : String?) : String { +fun getTranslatedClassName(resources: Resources, className: String?): String { return when (className) { Stats.HEALER -> resources.getString(R.string.healer) Stats.ROGUE -> resources.getString(R.string.rogue) @@ -102,12 +101,12 @@ fun getTranslatedClassName(resources : Resources, className : String?) : String @OptIn(ExperimentalAnimationApi::class) @Composable fun AppHeaderView( - user : Avatar?, - modifier : Modifier = Modifier, - isMyProfile : Boolean = false, - teamPlan : TeamPlan? = null, - teamPlanMembers : List? = null, - onMemberRowClicked : () -> Unit, + user: Avatar?, + modifier: Modifier = Modifier, + isMyProfile: Boolean = false, + teamPlan: TeamPlan? = null, + teamPlanMembers: List? = null, + onMemberRowClicked: () -> Unit, onClassSelectionClicked: () -> Unit ) { Column(modifier) { @@ -223,7 +222,8 @@ fun AppHeaderView( } ) { Image( - painterResource(R.drawable.icon_chat), null, + painterResource(R.drawable.icon_chat), + null, colorFilter = ColorFilter.tint( colorResource(R.color.text_ternary) ) @@ -237,13 +237,15 @@ fun AppHeaderView( exit = slideOutVertically { animHeight } + fadeOut(), modifier = Modifier.align(Alignment.BottomCenter) ) { - AnimatedContent(targetState = teamPlanMembers?.filter { it.id != user?.id }, + AnimatedContent( + targetState = teamPlanMembers?.filter { it.id != user?.id }, transitionSpec = { ContentTransform( - targetContentEnter = fadeIn(animationSpec = tween(200, easing = FastOutSlowInEasing)) + slideInVertically { height -> height }, + targetContentEnter = fadeIn(animationSpec = tween(200, easing = FastOutSlowInEasing)) + slideInVertically { height -> height }, initialContentExit = fadeOut(animationSpec = tween(200)) + slideOutVertically { height -> -height } ) - }) {members -> + } + ) { members -> Row( horizontalArrangement = Arrangement.spacedBy( 12.dp, @@ -331,7 +333,7 @@ fun AppHeaderView( private class UserProvider : PreviewParameterProvider> { - private fun generateMember() : User { + private fun generateMember(): User { val member = User() member.profile = Profile() member.profile?.name = "User" @@ -356,7 +358,7 @@ private class UserProvider : PreviewParameterProvider> { return member } - override val values : Sequence> + override val values: Sequence> get() { val list = mutableListOf>() val earlyMember = generateMember() diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ClassText.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ClassText.kt index 98cb9f0e8..36ae6725b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ClassText.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ClassText.kt @@ -16,11 +16,11 @@ import com.habitrpg.android.habitica.R @Composable fun ClassText( - className : String?, - hasClass : Boolean, - fontSize : TextUnit, - modifier : Modifier = Modifier, - iconSize : Dp? = null + className: String?, + hasClass: Boolean, + fontSize: TextUnit, + modifier: Modifier = Modifier, + iconSize: Dp? = null ) { if (!hasClass) return val classColor = colorResource( @@ -36,9 +36,11 @@ fun ClassText( ClassIcon( className = className, hasClass = true, - modifier = Modifier.size(iconSize ?: with(LocalDensity.current) { - fontSize.toDp() - }) + modifier = Modifier.size( + iconSize ?: with(LocalDensity.current) { + fontSize.toDp() + } + ) ) Text( getTranslatedClassName(LocalContext.current.resources, className), diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CollapsibleSectionView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CollapsibleSectionView.kt index 88c7fb4bd..60a0af08e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CollapsibleSectionView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CollapsibleSectionView.kt @@ -120,7 +120,8 @@ class CollapsibleSectionView(context: Context, attrs: AttributeSet?) : LinearLay val attributes = context.theme?.obtainStyledAttributes( attrs, R.styleable.CollapsibleSectionView, - 0, 0 + 0, + 0 ) title = attributes?.getString(R.styleable.CollapsibleSectionView_title) ?: "" identifier = attributes?.getString(R.styleable.CollapsibleSectionView_identifier) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CompletedAt.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CompletedAt.kt index 22aae4bdd..11a84ee14 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CompletedAt.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CompletedAt.kt @@ -22,7 +22,7 @@ val completedTimeFormat: DateFormat = DateFormat.getDateTimeInstance(DateFormat. @Composable fun CompletedAt( - completedAt: Date?, + completedAt: Date? ) { val completedToday = completedAt?.time?.let { DateUtils.isToday(it) } ?: false Row( diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CurrencyText.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CurrencyText.kt index 4da601f97..65e547eae 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CurrencyText.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CurrencyText.kt @@ -30,6 +30,7 @@ fun CurrencyText( ) { CurrencyText(currency = currency, value = value.toDouble(), modifier, fontSize, decimals, minForAbbreviation, animated) } + @Composable fun CurrencyText( currency: String, @@ -40,10 +41,14 @@ fun CurrencyText( minForAbbreviation: Int = 0, animated: Boolean = true ) { - val animatedValue = if (animated) animateFloatAsState( - targetValue = value.toFloat(), - animationSpec = ProgressIndicatorDefaults.ProgressAnimationSpec, - ).value else value.toFloat() + val animatedValue = if (animated) { + animateFloatAsState( + targetValue = value.toFloat(), + animationSpec = ProgressIndicatorDefaults.ProgressAnimationSpec + ).value + } else { + value.toFloat() + } Row(verticalAlignment = Alignment.CenterVertically, modifier = modifier) { when (currency) { "gold" -> HabiticaIconsHelper.imageOfGold() diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CurrencyView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CurrencyView.kt index 551af68c0..079add07f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CurrencyView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CurrencyView.kt @@ -37,7 +37,8 @@ class CurrencyView : androidx.appcompat.widget.AppCompatTextView { val attributes = context.theme?.obtainStyledAttributes( attrs, R.styleable.CurrencyView, - 0, 0 + 0, + 0 ) val fallBackLight = !context.isUsingNightModeResources() lightBackground = try { @@ -102,11 +103,14 @@ class CurrencyView : androidx.appcompat.widget.AppCompatTextView { drawable = BitmapDrawable(resources, value) this.setCompoundDrawablesWithIntrinsicBounds( drawable, - null, null, null + null, + null, + null ) val padding = TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, - 6f, context.resources.displayMetrics + 6f, + context.resources.displayMetrics ).toInt() compoundDrawablePadding = padding this.gravity = Gravity.CENTER_VERTICAL diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CurrencyViews.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CurrencyViews.kt index 6d3f44a55..87c59a90e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CurrencyViews.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CurrencyViews.kt @@ -46,7 +46,8 @@ class CurrencyViews : LinearLayout { val attributes = context.theme?.obtainStyledAttributes( attrs, R.styleable.CurrencyViews, - 0, 0 + 0, + 0 ) setupViews() val fallBackLight = !context.isUsingNightModeResources() diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/DragLinearLayout.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/DragLinearLayout.kt index b4cbe2790..10dfad7ad 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/DragLinearLayout.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/DragLinearLayout.kt @@ -52,6 +52,7 @@ open class DragLinearLayout @JvmOverloads constructor(context: Context, attrs: A private val dragBottomShadowDrawable: Drawable? private val dragShadowHeight: Int private var containerScrollView: ScrollView? = null + /** * Sets the height from upper / lower edge at which a container [android.widget.ScrollView], * if one is registered via [.setContainerScrollView], @@ -245,8 +246,9 @@ open class DragLinearLayout @JvmOverloads constructor(context: Context, attrs: A * [com.habitrpg.android.habitica.ui.views.DragLinearLayout.DragItem.detecting]. */ private fun startDetectingDrag(child: View) { - if (draggedItem.detecting) + if (draggedItem.detecting) { return // existing drag in process, only one at a time is allowed + } val position = indexOfChild(child) @@ -524,8 +526,9 @@ open class DragLinearLayout @JvmOverloads constructor(context: Context, attrs: A val pointerIndex = event.actionIndex val pointerId = event.getPointerId(pointerIndex) - if (pointerId != activePointerId) + if (pointerId != activePointerId) { return false // if active pointer, fall through and cancel! + } } run { onTouchEnd() @@ -566,8 +569,9 @@ open class DragLinearLayout @JvmOverloads constructor(context: Context, attrs: A val pointerIndex = event.actionIndex val pointerId = event.getPointerId(pointerIndex) - if (pointerId != activePointerId) + if (pointerId != activePointerId) { return false // if active pointer, fall through and cancel! + } } run { onTouchEnd() diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/FlowLayout.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/FlowLayout.kt index 94da9ee4f..6283ab84b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/FlowLayout.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/FlowLayout.kt @@ -40,7 +40,7 @@ fun flowLayoutMeasurePolicy(spacing: Int = 0) = MeasurePolicy { measurables, con fun FlowLayout( modifier: Modifier = Modifier, spacing: Int = 0, - content: @Composable () -> Unit, + content: @Composable () -> Unit ) { val measurePolicy = flowLayoutMeasurePolicy(spacing) Layout( diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/GroupPlanMemberList.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/GroupPlanMemberList.kt index 4c2dd9253..ba1c772c6 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/GroupPlanMemberList.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/GroupPlanMemberList.kt @@ -56,8 +56,8 @@ fun GroupPlanMemberList( ) } for ( - member in members?.sortedByDescending { it.authentication?.timestamps?.lastLoggedIn } - ?: emptyList() + member in members?.sortedByDescending { it.authentication?.timestamps?.lastLoggedIn } + ?: emptyList() ) { item { val role = if (group?.isLeader(member.id) == true) { @@ -179,7 +179,9 @@ fun MemberItem( ) Spacer(Modifier.weight(1f)) Text( - role, fontWeight = FontWeight.SemiBold, fontSize = 14.sp, + role, + fontWeight = FontWeight.SemiBold, + fontSize = 14.sp, color = HabiticaTheme.colors.textSecondary ) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaButton.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaButton.kt index e6ee37ef9..ff9d5b67b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaButton.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaButton.kt @@ -20,13 +20,13 @@ import com.habitrpg.android.habitica.ui.theme.HabiticaTheme @Composable fun HabiticaButton( - background : Color, - color : Color, - onClick : () -> Unit, - modifier : Modifier = Modifier, - contentPadding : PaddingValues = PaddingValues(8.dp), - fontSize : TextUnit = 16.sp, - content : @Composable () -> Unit + background: Color, + color: Color, + onClick: () -> Unit, + modifier: Modifier = Modifier, + contentPadding: PaddingValues = PaddingValues(8.dp), + fontSize: TextUnit = 16.sp, + content: @Composable () -> Unit ) { Box( contentAlignment = Alignment.Center, diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/LabeledBar.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/LabeledBar.kt index 2d1699bf0..131f091fd 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/LabeledBar.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/LabeledBar.kt @@ -48,26 +48,30 @@ import java.text.NumberFormat @Composable fun LabeledBar( - modifier : Modifier = Modifier, - icon : Bitmap? = null, - label : String? = null, - color : Color = colorResource(R.color.brand), - barColor : Color = HabiticaTheme.colors.windowBackground, - value : Double, - maxValue : Double, - displayCompact : Boolean = false, - barHeight : Dp = 8.dp, - disabled : Boolean = false, - abbreviateValue : Boolean = true, - abbreviateMax : Boolean = true, - animated : Boolean = true + modifier: Modifier = Modifier, + icon: Bitmap? = null, + label: String? = null, + color: Color = colorResource(R.color.brand), + barColor: Color = HabiticaTheme.colors.windowBackground, + value: Double, + maxValue: Double, + displayCompact: Boolean = false, + barHeight: Dp = 8.dp, + disabled: Boolean = false, + abbreviateValue: Boolean = true, + abbreviateMax: Boolean = true, + animated: Boolean = true ) { val cleanedMaxValue = java.lang.Double.max(1.0, maxValue) - val animatedValue = if (animated) animateFloatAsState( - targetValue = value.toFloat(), - animationSpec = spring() - ).value else value.toFloat() + val animatedValue = if (animated) { + animateFloatAsState( + targetValue = value.toFloat(), + animationSpec = spring() + ).value + } else { + value.toFloat() + } val formatter = NumberFormat.getNumberInstance() formatter.minimumFractionDigits = 0 formatter.maximumFractionDigits = 2 @@ -91,7 +95,9 @@ fun LabeledBar( modifier = Modifier.align(Alignment.CenterStart) ) { Image( - it.asImageBitmap(), null, modifier = Modifier + it.asImageBitmap(), + null, + modifier = Modifier ) } } @@ -111,16 +117,24 @@ fun LabeledBar( modifier = Modifier.padding(top = 2.dp) ) { if (!disabled) { - val currentValueText = if (abbreviateValue) NumberAbbreviator.abbreviate( - LocalContext.current, - animatedValue, - 0 - ) else formatter.format(animatedValue) - val maxValueText = if (abbreviateMax) NumberAbbreviator.abbreviate( - LocalContext.current, - cleanedMaxValue, - 0 - ) else formatter.format(cleanedMaxValue) + val currentValueText = if (abbreviateValue) { + NumberAbbreviator.abbreviate( + LocalContext.current, + animatedValue, + 0 + ) + } else { + formatter.format(animatedValue) + } + val maxValueText = if (abbreviateMax) { + NumberAbbreviator.abbreviate( + LocalContext.current, + cleanedMaxValue, + 0 + ) + } else { + formatter.format(cleanedMaxValue) + } Text( "$currentValueText / $maxValueText", fontSize = 12.sp, @@ -140,7 +154,7 @@ fun LabeledBar( @Composable @Preview private fun Preview() { - var compact : Boolean by remember { mutableStateOf(false) } + var compact: Boolean by remember { mutableStateOf(false) } Column( verticalArrangement = Arrangement.spacedBy(10.dp), modifier = Modifier @@ -148,7 +162,8 @@ private fun Preview() { .padding(8.dp) .clickable { compact = !compact - }) { + } + ) { LabeledBar( icon = HabiticaIconsHelper.imageOfHeartLightBg(), label = stringResource(id = R.string.health), diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/LoadingButton.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/LoadingButton.kt index 35647c895..857ea896f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/LoadingButton.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/LoadingButton.kt @@ -71,30 +71,34 @@ enum class LoadingButtonType { @OptIn(ExperimentalAnimationApi::class) @Composable fun LoadingButton( - state : LoadingButtonState, - onClick : () -> Unit, - modifier : Modifier = Modifier, - type : LoadingButtonType = LoadingButtonType.NORMAL, - elevation : ButtonElevation? = ButtonDefaults.elevation(0.dp), - shape : Shape = MaterialTheme.shapes.medium, - border : BorderStroke? = null, - colors : ButtonColors? = null, - contentPadding : PaddingValues = ButtonDefaults.ContentPadding, - successContent : (@Composable RowScope.() -> Unit)? = null, - failedContent : (@Composable RowScope.() -> Unit)? = null, - content : @Composable RowScope.() -> Unit + state: LoadingButtonState, + onClick: () -> Unit, + modifier: Modifier = Modifier, + type: LoadingButtonType = LoadingButtonType.NORMAL, + elevation: ButtonElevation? = ButtonDefaults.elevation(0.dp), + shape: Shape = MaterialTheme.shapes.medium, + border: BorderStroke? = null, + colors: ButtonColors? = null, + contentPadding: PaddingValues = ButtonDefaults.ContentPadding, + successContent: (@Composable RowScope.() -> Unit)? = null, + failedContent: (@Composable RowScope.() -> Unit)? = null, + content: @Composable RowScope.() -> Unit ) { - val colorStyle = if (type == LoadingButtonType.DESTRUCTIVE) ButtonDefaults.buttonColors( - backgroundColor = HabiticaTheme.colors.errorBackground, - contentColor = Color.White, - disabledBackgroundColor = HabiticaTheme.colors.offsetBackground, - disabledContentColor = HabiticaTheme.colors.textQuad - ) else ButtonDefaults.buttonColors( - backgroundColor = HabiticaTheme.colors.tintedUiSub, - contentColor = Color.White, - disabledBackgroundColor = HabiticaTheme.colors.offsetBackground, - disabledContentColor = HabiticaTheme.colors.textQuad - ) + val colorStyle = if (type == LoadingButtonType.DESTRUCTIVE) { + ButtonDefaults.buttonColors( + backgroundColor = HabiticaTheme.colors.errorBackground, + contentColor = Color.White, + disabledBackgroundColor = HabiticaTheme.colors.offsetBackground, + disabledContentColor = HabiticaTheme.colors.textQuad + ) + } else { + ButtonDefaults.buttonColors( + backgroundColor = HabiticaTheme.colors.tintedUiSub, + contentColor = Color.White, + disabledBackgroundColor = HabiticaTheme.colors.offsetBackground, + disabledContentColor = HabiticaTheme.colors.textQuad + ) + } val colorSpec = tween(350) val backgroundColor = animateColorAsState( targetValue = when (state) { @@ -138,10 +142,14 @@ fun LoadingButton( state != LoadingButtonState.DISABLED, elevation = elevation, shape = shape, - border = if (state == LoadingButtonState.SUCCESS) BorderStroke( - borderWidth.value, - if (type == LoadingButtonType.DESTRUCTIVE) HabiticaTheme.colors.errorColor else HabiticaTheme.colors.successColor - ) else border, + border = if (state == LoadingButtonState.SUCCESS) { + BorderStroke( + borderWidth.value, + if (type == LoadingButtonType.DESTRUCTIVE) HabiticaTheme.colors.errorColor else HabiticaTheme.colors.successColor + ) + } else { + border + }, colors = buttonColors, contentPadding = PaddingValues(0.dp) ) { @@ -160,7 +168,7 @@ fun LoadingButton( slideInHorizontally( animationSpec = spring( dampingRatio = 0.2f, - stiffness = StiffnessMediumLow, + stiffness = StiffnessMediumLow ) ) with fadeOut(animationSpec = tween(90)) @@ -202,7 +210,7 @@ fun LoadingButton( @Preview @Composable private fun Preview() { - var state : LoadingButtonState by remember { mutableStateOf(LoadingButtonState.CONTENT) } + var state: LoadingButtonState by remember { mutableStateOf(LoadingButtonState.CONTENT) } val scope = rememberCoroutineScope() Column( horizontalAlignment = Alignment.CenterHorizontally, @@ -226,16 +234,21 @@ private fun Preview() { state = LoadingButtonState.CONTENT } }, successContent = { - Text("I did it!") - }, content = { - Text("Do something") - }, modifier = Modifier.fillMaxWidth()) - LoadingButton(LoadingButtonState.LOADING, {}, colors = ButtonDefaults.buttonColors( - backgroundColor = HabiticaTheme.colors.successBackground, - contentColor = Color.White - ), content = { - Text("Do something") - }) + Text("I did it!") + }, content = { + Text("Do something") + }, modifier = Modifier.fillMaxWidth()) + LoadingButton( + LoadingButtonState.LOADING, + {}, + colors = ButtonDefaults.buttonColors( + backgroundColor = HabiticaTheme.colors.successBackground, + contentColor = Color.White + ), + content = { + Text("Do something") + } + ) LoadingButton(LoadingButtonState.LOADING, {}, content = { Text("Do something") }, modifier = Modifier.fillMaxWidth()) @@ -245,15 +258,15 @@ private fun Preview() { LoadingButton(LoadingButtonState.FAILED, {}, failedContent = { Text("Didn't work :(") }, content = { - Text("Do something") - }) + Text("Do something") + }) LoadingButton(LoadingButtonState.SUCCESS, {}, content = { Text("Do something") }) LoadingButton(LoadingButtonState.SUCCESS, {}, successContent = { Text("Success!") }, content = { - Text("Do something") - }) + Text("Do something") + }) } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/SegmentedControl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/SegmentedControl.kt index 6acfb8392..aeaf3d75e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/SegmentedControl.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/SegmentedControl.kt @@ -59,15 +59,17 @@ fun SegmentedControl( .zIndex(if (selectedIndex.value == 0) 1f else 0f) } } else -> { - if (useFixedWidth) + if (useFixedWidth) { Modifier .width(itemWidth) .offset((-1 * index).dp, 0.dp) .zIndex(if (selectedIndex.value == index) 1f else 0f) - else Modifier - .wrapContentSize() - .offset((-1 * index).dp, 0.dp) - .zIndex(if (selectedIndex.value == index) 1f else 0f) + } else { + Modifier + .wrapContentSize() + .offset((-1 * index).dp, 0.dp) + .zIndex(if (selectedIndex.value == index) 1f else 0f) + } } }, onClick = { @@ -123,7 +125,7 @@ fun SegmentedControl( * not selected colors */ ButtonDefaults.outlinedButtonColors(backgroundColor = Color.Transparent) - }, + } ) { Text( text = item, @@ -132,7 +134,7 @@ fun SegmentedControl( Color.White } else { color.copy(alpha = 0.9f) - }, + } ) } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/SupportCollapsibleSection.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/SupportCollapsibleSection.kt index d417da68f..3342c142a 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/SupportCollapsibleSection.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/SupportCollapsibleSection.kt @@ -28,7 +28,10 @@ class SupportCollapsibleSection : LinearLayout { private fun init(attrs: AttributeSet?, defStyle: Int) { val binding = SupportCollapsibleSectionBinding.inflate(context.layoutInflater, this) val a = context.obtainStyledAttributes( - attrs, R.styleable.SupportCollapsibleSection, defStyle, 0 + attrs, + R.styleable.SupportCollapsibleSection, + defStyle, + 0 ) orientation = VERTICAL diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/UserRow.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/UserRow.kt index bbae638dc..f44d7110b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/UserRow.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/UserRow.kt @@ -54,7 +54,7 @@ fun UserRow( "@$username", fontSize = 16.sp, fontWeight = FontWeight.Medium, - color = color ?: MaterialTheme.colors.primary, + color = color ?: MaterialTheme.colors.primary ) if (extraContent != null) { extraContent() diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/UsernameLabel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/UsernameLabel.kt index 07ecfba0e..e7acccf1f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/UsernameLabel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/UsernameLabel.kt @@ -78,7 +78,7 @@ class UsernameLabel @JvmOverloads constructor( textView.setPadding(0, 0, padding, 0) textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14f) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { - textView.typeface = Typeface.create(null,600,false) + textView.typeface = Typeface.create(null, 600, false) } val iconViewParams = LayoutParams( FrameLayout.LayoutParams.WRAP_CONTENT, @@ -93,7 +93,7 @@ class UsernameLabel @JvmOverloads constructor( fun ComposableUsernameLabel( username: String, tier: Int, - modifier : Modifier = Modifier, + modifier: Modifier = Modifier, isNPC: Boolean = false ) { Row(horizontalArrangement = Arrangement.spacedBy(2.dp), verticalAlignment = Alignment.CenterVertically, modifier = modifier) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ValidatingEditText.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ValidatingEditText.kt index ea548328c..bac3d93a1 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ValidatingEditText.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ValidatingEditText.kt @@ -36,7 +36,8 @@ class ValidatingEditText @JvmOverloads constructor( context.theme?.obtainStyledAttributes( attrs, R.styleable.ValidatingEditText, - 0, 0 + 0, + 0 )?.let { attributes -> binding.inputLayout.hint = attributes.getString(R.styleable.ValidatingEditText_hint) binding.editText.maxLines = attributes.getInt(R.styleable.ValidatingEditText_android_maxLines, 20) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ads/AdButton.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ads/AdButton.kt index 6bc37c468..b0c52c6f0 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ads/AdButton.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ads/AdButton.kt @@ -55,7 +55,8 @@ class AdButton @JvmOverloads constructor( context.theme?.obtainStyledAttributes( attrs, R.styleable.AdButton, - 0, 0 + 0, + 0 )?.let { attributes -> text = attributes.getString(R.styleable.AdButton_text) ?: "" binding.currencyView.currency = attributes.getString(R.styleable.AdButton_currency) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/AchievementDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/AchievementDialog.kt index 309563737..f06124298 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/AchievementDialog.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/AchievementDialog.kt @@ -66,7 +66,6 @@ class AchievementDialog(context: Context) : HabiticaAlertDialog(context) { } if (User.ONBOARDING_ACHIEVEMENT_KEYS.contains(iconName)) { - addButton(R.string.onwards, isPrimary = true, isDestructive = false) { _, _ -> } if (!isLastOnboardingAchievement) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/PetSuggestHatchDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/PetSuggestHatchDialog.kt index e2efc47d2..6140962c3 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/PetSuggestHatchDialog.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/PetSuggestHatchDialog.kt @@ -36,7 +36,7 @@ class PetSuggestHatchDialog(context: Context) : HabiticaAlertDialog(context) { fun mainUserViewModel(): MainUserViewModel } - private val userViewModel : MainUserViewModel + private val userViewModel: MainUserViewModel private val hatchPetUseCase: HatchPetUseCase private lateinit var binding: DialogPetSuggestHatchBinding @@ -73,14 +73,22 @@ class PetSuggestHatchDialog(context: Context) : HabiticaAlertDialog(context) { binding.hatchingPotionView.alpha = if (hasPotion) 1.0f else 0.5f val eggName = egg?.text ?: pet.animal.replaceFirstChar { - if (it.isLowerCase()) it.titlecase( - Locale.getDefault() - ) else it.toString() + if (it.isLowerCase()) { + it.titlecase( + Locale.getDefault() + ) + } else { + it.toString() + } } val potionName = potion?.text ?: pet.color.replaceFirstChar { - if (it.isLowerCase()) it.titlecase( - Locale.getDefault() - ) else it.toString() + if (it.isLowerCase()) { + it.titlecase( + Locale.getDefault() + ) + } else { + it.toString() + } } if (hasEgg) { @@ -190,7 +198,8 @@ class PetSuggestHatchDialog(context: Context) : HabiticaAlertDialog(context) { longLivingScope.launchCatching { hatchPetUseCase.callInteractor( HatchPetUseCase.RequestValues( - potion, egg, + potion, + egg, context ) ) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/equipment/EquipmentItemRow.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/equipment/EquipmentItemRow.kt index bac0cd229..989186c5b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/equipment/EquipmentItemRow.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/equipment/EquipmentItemRow.kt @@ -33,7 +33,8 @@ class EquipmentItemRow(context: Context, attrs: AttributeSet?) : LinearLayout(co val attributes = context.theme?.obtainStyledAttributes( attrs, R.styleable.EquipmentItemRow, - 0, 0 + 0, + 0 ) binding.titleTextView.text = attributes?.getString(R.styleable.EquipmentItemRow_equipmentTitle) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/equipment/EquipmentOverviewView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/equipment/EquipmentOverviewView.kt index 1c949020f..485a91e91 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/equipment/EquipmentOverviewView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/equipment/EquipmentOverviewView.kt @@ -90,26 +90,30 @@ fun EquipmentOverviewView( ) { Row(horizontalArrangement = Arrangement.SpaceBetween, modifier = Modifier.fillMaxWidth()) { OverviewItem( - stringResource(R.string.outfit_weapon), outfit?.weapon.let { "shop_$it" }, + stringResource(R.string.outfit_weapon), + outfit?.weapon.let { "shop_$it" }, modifier = Modifier.clickable { onEquipmentTap("weapon", outfit?.weapon) } ) OverviewItem( - stringResource(R.string.outfit_shield), outfit?.shield.let { "shop_$it" }, + stringResource(R.string.outfit_shield), + outfit?.shield.let { "shop_$it" }, modifier = Modifier.clickable { onEquipmentTap("shield", outfit?.shield) }, isUsingTwohanded ) OverviewItem( - stringResource(R.string.outfit_head), outfit?.head.let { "shop_$it" }, + stringResource(R.string.outfit_head), + outfit?.head.let { "shop_$it" }, modifier = Modifier.clickable { onEquipmentTap("head", outfit?.head) } ) OverviewItem( - stringResource(R.string.outfit_armor), outfit?.armor.let { "shop_$it" }, + stringResource(R.string.outfit_armor), + outfit?.armor.let { "shop_$it" }, modifier = Modifier.clickable { onEquipmentTap("armor", outfit?.armor) } @@ -124,13 +128,15 @@ fun EquipmentOverviewView( } ) OverviewItem( - stringResource(R.string.outfit_body), outfit?.body.let { "shop_$it" }, + stringResource(R.string.outfit_body), + outfit?.body.let { "shop_$it" }, modifier = Modifier.clickable { onEquipmentTap("body", outfit?.body) } ) OverviewItem( - stringResource(R.string.outfit_back), outfit?.back.let { "shop_$it" }, + stringResource(R.string.outfit_back), + outfit?.back.let { "shop_$it" }, modifier = Modifier.clickable { onEquipmentTap("back", outfit?.back) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientGemsDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientGemsDialog.kt index f8d0a69f8..dc9418d10 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientGemsDialog.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientGemsDialog.kt @@ -36,8 +36,10 @@ class InsufficientGemsDialog(val parentActivity: Activity, var gemPrice: Int) : @Inject lateinit var configManager: AppConfigManager + @Inject lateinit var analyticsManager: AnalyticsManager + @Inject lateinit var purchaseHandler: PurchaseHandler @@ -107,7 +109,6 @@ class InsufficientGemsDialog(val parentActivity: Activity, var gemPrice: Int) : } } } - } override fun onDetachedFromWindow() { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/login/LockableScrollView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/login/LockableScrollView.kt index 994549a22..5f61df1c0 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/login/LockableScrollView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/login/LockableScrollView.kt @@ -18,9 +18,10 @@ class LockableScrollView(context: Context, attrs: AttributeSet) : NestedScrollVi } override fun onInterceptTouchEvent(ev: MotionEvent): Boolean { - return if (!isScrollable) + return if (!isScrollable) { false - else + } else { super.onInterceptTouchEvent(ev) + } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/navigation/BottomNavigationItem.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/navigation/BottomNavigationItem.kt index da73570b5..58d387ace 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/navigation/BottomNavigationItem.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/navigation/BottomNavigationItem.kt @@ -61,7 +61,8 @@ class BottomNavigationItem @JvmOverloads constructor( val attributes = context.theme?.obtainStyledAttributes( attrs, R.styleable.BottomNavigationItem, - 0, 0 + 0, + 0 ) if (attributes != null) { icon = attributes.getDrawable(R.styleable.BottomNavigationItem_iconDrawable) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/preferences/PauseResumeDamageView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/preferences/PauseResumeDamageView.kt index 72774a856..f994dc6d5 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/preferences/PauseResumeDamageView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/preferences/PauseResumeDamageView.kt @@ -19,9 +19,9 @@ import com.habitrpg.android.habitica.ui.views.HabiticaButton @Composable fun PauseResumeDamageView( - isPaused : Boolean, - onClick : () -> Unit, - modifier : Modifier = Modifier + isPaused: Boolean, + onClick: () -> Unit, + modifier: Modifier = Modifier ) { Column( horizontalAlignment = Alignment.Start, @@ -75,7 +75,8 @@ fun PauseResumeDamageView( HabiticaButton( background = colorResource(R.color.yellow_100), color = colorResource(R.color.yellow_1), - onClick = { onClick() }) { + onClick = { onClick() } + ) { Text(stringResource(R.string.resume_damage)) } } else { @@ -130,7 +131,8 @@ fun PauseResumeDamageView( HabiticaButton( background = colorResource(R.color.yellow_100), color = colorResource(R.color.yellow_1), - onClick = { onClick() }) { + onClick = { onClick() } + ) { Text(stringResource(R.string.pause_damage)) } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/progress/HabiticaCircularProgressView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/progress/HabiticaCircularProgressView.kt index 7bf1a8ff8..58157c6e6 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/progress/HabiticaCircularProgressView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/progress/HabiticaCircularProgressView.kt @@ -34,7 +34,7 @@ import com.habitrpg.android.habitica.R fun HabiticaCircularProgressView( modifier: Modifier = Modifier, partialDisplay: Float = 1f, - animate : Boolean = true, + animate: Boolean = true, indicatorSize: Dp = 100.dp, animationDuration: Int = 4000, strokeWidth: Dp = 8.dp @@ -65,14 +65,14 @@ fun HabiticaCircularProgressView( colorResource(R.color.background_yellow), colorResource(R.color.background_green), colorResource(R.color.background_blue), - colorResource(R.color.background_brand), + colorResource(R.color.background_brand) ) ) Canvas( modifier = modifier .rotate(-90f) - .size(size = indicatorSize - (strokeWidth*2)) - .padding(strokeWidth/2) + .size(size = indicatorSize - (strokeWidth * 2)) + .padding(strokeWidth / 2) ) { rotate(rotateAnimation.value) { drawCircle( @@ -86,7 +86,7 @@ fun HabiticaCircularProgressView( startAngle = (360f * partialDisplay), sweepAngle = 360f - (360f * partialDisplay), useCenter = true, - style = Stroke(width = strokeWidth.toPx()*1.4f, cap = StrokeCap.Square, join = StrokeJoin.Miter, miter = 2f) + style = Stroke(width = strokeWidth.toPx() * 1.4f, cap = StrokeCap.Square, join = StrokeJoin.Miter, miter = 2f) ) } } @@ -104,6 +104,5 @@ private fun Preview() { HabiticaCircularProgressView(indicatorSize = 40.dp, strokeWidth = 5.dp) HabiticaCircularProgressView(partialDisplay = 0.3f, indicatorSize = 32.dp, strokeWidth = 4.dp) HabiticaCircularProgressView(partialDisplay = 0.91f, indicatorSize = 32.dp, strokeWidth = 4.dp) - } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/progress/HabiticaPullRefreshIndicator.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/progress/HabiticaPullRefreshIndicator.kt index 67b1fb76a..5f5462e04 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/progress/HabiticaPullRefreshIndicator.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/progress/HabiticaPullRefreshIndicator.kt @@ -36,9 +36,11 @@ fun HabiticaPullRefreshIndicator( backgroundColor: Color = MaterialTheme.colors.surface, scale: Boolean = true ) { - AnimatedVisibility(visible = isInitial && isRefreshing, + AnimatedVisibility( + visible = isInitial && isRefreshing, enter = fadeIn(), - exit = fadeOut()) { + exit = fadeOut() + ) { Box(contentAlignment = Alignment.Center, modifier = Modifier.fillMaxSize()) { HabiticaCircularProgressView(Modifier) } @@ -51,7 +53,6 @@ fun HabiticaPullRefreshIndicator( color = backgroundColor, elevation = if (isRefreshing) 6.dp else (min(1f, state.progress * 2) * 6f).dp ) { - AnimatedVisibility( visible = isRefreshing || state.progress > 0f, enter = fadeIn(), @@ -76,10 +77,9 @@ fun HabiticaPullRefreshIndicator( @Preview @Composable private fun Preview() { - val state = rememberPullRefreshState(refreshing = true, onRefresh = { }) + val state = rememberPullRefreshState(refreshing = true, onRefresh = { }) Box(Modifier.pullRefresh(state)) { LazyColumn { - } HabiticaPullRefreshIndicator(isInitial = false, isRefreshing = true, state = state) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/promo/BirthdayMenuView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/promo/BirthdayMenuView.kt index b5ef7ab88..23e68422d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/promo/BirthdayMenuView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/promo/BirthdayMenuView.kt @@ -80,12 +80,14 @@ fun BirthdayBanner(endDate: Date, modifier: Modifier = Modifier) { } Column( verticalArrangement = Arrangement.spacedBy( - 2.dp, Alignment.CenterVertically + 2.dp, + Alignment.CenterVertically ), modifier = Modifier.padding(start = 8.dp) ) { Image( - painterResource(R.drawable.birthday_menu_text), null + painterResource(R.drawable.birthday_menu_text), + null ) Text( stringResource(R.string.exclusive_items_await), @@ -130,7 +132,8 @@ private fun buildString( formatString: Int ): String { return stringResource( - formatString, endDate.getShortRemainingString() + formatString, + endDate.getShortRemainingString() ).uppercase() } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/setup/AvatarCategoryView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/setup/AvatarCategoryView.kt index 7b754cb1d..fb5dfda70 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/setup/AvatarCategoryView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/setup/AvatarCategoryView.kt @@ -23,7 +23,8 @@ class AvatarCategoryView(context: Context, attrs: AttributeSet?) : LinearLayout( val a = context.theme.obtainStyledAttributes( attrs, R.styleable.AvatarCategoryView, - 0, 0 + 0, + 0 ) textView.text = a.getText(R.styleable.AvatarCategoryView_categoryTitle) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt index 9aaedeefe..5932363fc 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt @@ -57,7 +57,7 @@ class PurchaseDialog( private val userRepository: UserRepository, private val inventoryRepository: InventoryRepository, val item: ShopItem, - val parentActivity: Activity? = null, + val parentActivity: Activity? = null ) : HabiticaAlertDialog(context) { private val customHeader: View by lazy { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/ChatBarView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/ChatBarView.kt index 3a364758f..127cf26a8 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/ChatBarView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/ChatBarView.kt @@ -70,7 +70,6 @@ class ChatBarView : LinearLayout { orientation = VERTICAL this.setBackgroundResource(R.color.content_background) - binding.chatEditText.addTextChangedListener( OnChangeTextWatcher { _, _, _, _ -> setSendButtonEnabled(binding.chatEditText.text.isNotEmpty() && binding.chatEditText.text.length <= maxChatLength) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/InvitationsView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/InvitationsView.kt index e92007b95..bcf2a6bce 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/InvitationsView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/InvitationsView.kt @@ -41,11 +41,13 @@ class InvitationsView @JvmOverloads constructor( leaderID?.let { val leader = getLeader?.invoke(it) ?: return@launch binding.groupleaderAvatarView.setAvatar(leader) - binding.groupleaderTextView.setMarkdown(context.getString( - R.string.invitation_title, - "[${leader.formattedUsername}](https://habitica.com/profile/${leaderID})", - invitation.name - )) + binding.groupleaderTextView.setMarkdown( + context.getString( + R.string.invitation_title, + "[${leader.formattedUsername}](https://habitica.com/profile/$leaderID)", + invitation.name + ) + ) } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/OldQuestProgressView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/OldQuestProgressView.kt index 8f7d10e49..c1aea3b32 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/OldQuestProgressView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/OldQuestProgressView.kt @@ -52,7 +52,8 @@ class OldQuestProgressView : LinearLayout { override fun onDraw(canvas: Canvas?) { rect.set( - 0.0f, 0.0f, + 0.0f, + 0.0f, ( canvas?.width?.toFloat() ?: 1.0f diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/PartySeekingListItem.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/PartySeekingListItem.kt index 5952a8439..7c1e49ff0 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/PartySeekingListItem.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/PartySeekingListItem.kt @@ -46,13 +46,13 @@ import kotlin.random.Random @Composable fun PartySeekingListItem( - user : Member, - modifier : Modifier = Modifier, - inviteState : LoadingButtonState = LoadingButtonState.LOADING, + user: Member, + modifier: Modifier = Modifier, + inviteState: LoadingButtonState = LoadingButtonState.LOADING, isInvited: Boolean = false, showHeader: Boolean = false, showExtendedInfo: Boolean = true, - onInvite : (Member) -> Unit + onInvite: (Member) -> Unit ) { Column( modifier @@ -69,10 +69,12 @@ fun PartySeekingListItem( horizontalArrangement = Arrangement.spacedBy(14.dp), verticalAlignment = Alignment.Top ) { - ComposableAvatarView(user, + ComposableAvatarView( + user, Modifier .size(94.dp, 98.dp) - .padding(top = 4.dp)) + .padding(top = 4.dp) + ) Column( verticalArrangement = Arrangement.Top, modifier = Modifier.fillMaxWidth() @@ -142,13 +144,14 @@ fun PartySeekingListItem( .padding(top = 8.dp), onClick = { onInvite(user) - }) + } + ) } } -private class MemberProvider: PreviewParameterProvider { +private class MemberProvider : PreviewParameterProvider { - private fun generateMember() : Member { + private fun generateMember(): Member { val member = Member() member.profile = Profile() member.profile?.name = "User" @@ -171,7 +174,7 @@ private class MemberProvider: PreviewParameterProvider { return member } - override val values : Sequence + override val values: Sequence get() { val list = mutableListOf() val earlyMember = generateMember() diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/stats/StatsView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/stats/StatsView.kt index bc8e624ab..dcbc70a25 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/stats/StatsView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/stats/StatsView.kt @@ -89,7 +89,8 @@ fun StatsViewComposable( .weight(1f) .fillMaxHeight() .background(colorResource(if (canAllocate) R.color.offset_background_30 else R.color.window_background)), - verticalArrangement = Arrangement.Center, Alignment.CenterHorizontally + verticalArrangement = Arrangement.Center, + Alignment.CenterHorizontally ) { Text(text = "$allocatedValue", fontSize = 20.sp, color = if (canAllocate) statColor else colorResource(R.color.text_primary)) Text(text = stringResource(R.string.allocated), color = if (canAllocate) statColor else colorResource(R.color.text_quad), fontSize = 12.sp) @@ -191,7 +192,8 @@ class StatsView(context: Context, attrs: AttributeSet?) : LinearLayout(context, val attributes = context.theme?.obtainStyledAttributes( attrs, R.styleable.StatsView, - 0, 0 + 0, + 0 ) val backgroundDrawable = ContextCompat.getDrawable(context, R.drawable.layout_top_rounded_bg_white) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionOptionView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionOptionView.kt index 981d90845..a4cea8a24 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionOptionView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionOptionView.kt @@ -19,7 +19,8 @@ class SubscriptionOptionView(context: Context, attrs: AttributeSet) : FrameLayou val a = context.theme.obtainStyledAttributes( attrs, R.styleable.SubscriptionOptionView, - 0, 0 + 0, + 0 ) if (a.getBoolean(R.styleable.SubscriptionOptionView_isNonRecurring, false)) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/AssignSheet.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/AssignSheet.kt index 8ccb91502..50dc6674f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/AssignSheet.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/AssignSheet.kt @@ -92,9 +92,10 @@ fun AssignSheetRow( member.formattedUsername ?: "", color = colorResource(R.color.text_ternary) ) - }, endContent = { - IsAssignedIndicator(isAssigned = isAssigned) - }, + }, + endContent = { + IsAssignedIndicator(isAssigned = isAssigned) + }, modifier = modifier .clickable { member.id.let { onAssignClick(it) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/AssignedView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/AssignedView.kt index 98c8bf9d4..f2b2efe7f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/AssignedView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/AssignedView.kt @@ -101,7 +101,8 @@ fun AssignedView( colorFilter = ColorFilter.tint(color) ) Text( - stringResource(R.string.edit_assignees), color = color, + stringResource(R.string.edit_assignees), + color = color, modifier = Modifier.padding(start = 4.dp) ) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/TaskFilterDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/TaskFilterDialog.kt index e5c5415dc..eb77a04e8 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/TaskFilterDialog.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/TaskFilterDialog.kt @@ -78,13 +78,13 @@ class TaskFilterDialog(context: Context, private val repository: TagRepository, // Need to use this instead of RadioGroup.onCheckedChangeListener, because that fires twice per change binding.allTaskFilter.setOnClickListener { - onCheckedChanged(binding.taskFilterWrapper, binding.taskFilterWrapper.checkedRadioButtonId) + onCheckedChanged(binding.taskFilterWrapper, binding.taskFilterWrapper.checkedRadioButtonId) } binding.secondTaskFilter.setOnClickListener { - onCheckedChanged(binding.taskFilterWrapper, binding.taskFilterWrapper.checkedRadioButtonId) + onCheckedChanged(binding.taskFilterWrapper, binding.taskFilterWrapper.checkedRadioButtonId) } binding.thirdTaskFilter.setOnClickListener { - onCheckedChanged(binding.taskFilterWrapper, binding.taskFilterWrapper.checkedRadioButtonId) + onCheckedChanged(binding.taskFilterWrapper, binding.taskFilterWrapper.checkedRadioButtonId) } binding.clearButton.setOnClickListener { @@ -199,7 +199,6 @@ class TaskFilterDialog(context: Context, private val repository: TagRepository, binding.tagEditButton.setText(R.string.edit_tag_btn_edit) this.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN) lifecycleScope.launchCatching { - repository.updateTags(editedTags.values).forEach { editedTags.remove(it.id) } repository.createTags(createdTags.values).forEach { tag -> createdTags.remove(tag.id) } repeat(repository.deleteTags(deletedTags).size) { deletedTags.clear() } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/ChecklistItemFormView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/ChecklistItemFormView.kt index 355fc7926..6927ee0e6 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/ChecklistItemFormView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/ChecklistItemFormView.kt @@ -41,8 +41,11 @@ class ChecklistItemFormView @JvmOverloads constructor( // Button is only clickable when it is *not* an add button (ie when it is a delete button), // so make screenreaders skip it when it is an add button. binding.button.importantForAccessibility = - if (value) View.IMPORTANT_FOR_ACCESSIBILITY_NO - else View.IMPORTANT_FOR_ACCESSIBILITY_YES + if (value) { + View.IMPORTANT_FOR_ACCESSIBILITY_NO + } else { + View.IMPORTANT_FOR_ACCESSIBILITY_YES + } if (field == value) { return } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/HabitScoringButtonsView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/HabitScoringButtonsView.kt index e99672c45..aa541f6a9 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/HabitScoringButtonsView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/HabitScoringButtonsView.kt @@ -97,7 +97,9 @@ private fun HabitScoringSelection( .padding(horizontal = 12.dp) .size(34.dp) .border( - 1.dp, borderColor.value, CircleShape + 1.dp, + borderColor.value, + CircleShape ) .clip(CircleShape) .clickable { onSelect() } @@ -136,9 +138,11 @@ private fun Preview() { .padding(8.dp) ) { HabitScoringSelector( - selectedUp.value, selectedDown.value, + selectedUp.value, + selectedDown.value, { selectedUp.value = !selectedUp.value }, - { selectedDown.value = !selectedDown.value }, Modifier.align(Alignment.Center) + { selectedDown.value = !selectedDown.value }, + Modifier.align(Alignment.Center) ) } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/ReminderItemFormView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/ReminderItemFormView.kt index f709a43d4..b1ec9cc1a 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/ReminderItemFormView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/ReminderItemFormView.kt @@ -107,7 +107,8 @@ class ReminderItemFormView @JvmOverloads constructor( binding.textView.setOnClickListener { if (taskType == TaskType.DAILY) { val timePickerDialog = TimePickerDialog( - context, this, + context, + this, item.getZonedDateTime()?.hour ?: ZonedDateTime.now().hour, item.getZonedDateTime()?.minute ?: ZonedDateTime.now().minute, android.text.format.DateFormat.is24HourFormat(context) @@ -116,7 +117,8 @@ class ReminderItemFormView @JvmOverloads constructor( } else { val zonedDateTime = (item.getZonedDateTime() ?: ZonedDateTime.now()) val timePickerDialog = DatePickerDialog( - context, this, + context, + this, zonedDateTime.year, zonedDateTime.monthValue - 1, zonedDateTime.dayOfMonth @@ -152,7 +154,8 @@ class ReminderItemFormView @JvmOverloads constructor( it(Date.from(item.getLocalZonedDateTimeInstant())) val timePickerDialog = TimePickerDialog( - context, this, + context, + this, ZonedDateTime.now().hour, ZonedDateTime.now().minute, android.text.format.DateFormat.is24HourFormat(context) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/StepperValueFormView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/StepperValueFormView.kt index be1281d59..f04585429 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/StepperValueFormView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/StepperValueFormView.kt @@ -82,7 +82,8 @@ class StepperValueFormView @JvmOverloads constructor( val attributes = context.theme?.obtainStyledAttributes( attrs, R.styleable.StepperValueFormView, - 0, 0 + 0, + 0 ) // set value here, so that the setter is called and everything is set up correctly diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/TaskDifficultyButtons.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/TaskDifficultyButtons.kt index d857e17c3..fbddfb3fc 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/TaskDifficultyButtons.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/TaskDifficultyButtons.kt @@ -59,7 +59,9 @@ fun TaskDifficultySelector( value = difficulty, selected = selected == difficulty, icon = HabiticaIconsHelper.imageOfTaskDifficultyStars( - colorResource(R.color.white).toArgb(), difficulty.value, true + colorResource(R.color.white).toArgb(), + difficulty.value, + true ).asImageBitmap(), text = stringResource(difficulty.nameRes), onSelect = onSelect diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/TaskSchedulingControls.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/TaskSchedulingControls.kt index 46b927d03..368f95f43 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/TaskSchedulingControls.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/TaskSchedulingControls.kt @@ -157,7 +157,8 @@ class TaskSchedulingControls @JvmOverloads constructor( binding.startDateWrapper.setOnClickListener { val datePickerDialog = DatePickerDialog( - context, this, + context, + this, startDateCalendar.get(Calendar.YEAR), startDateCalendar.get(Calendar.MONTH), startDateCalendar.get(Calendar.DAY_OF_MONTH) @@ -334,7 +335,9 @@ class TaskSchedulingControls @JvmOverloads constructor( private fun toContentDescription(buttonText: CharSequence, isActive: Boolean): String { val statusString = if (isActive) { context.getString(R.string.selected) - } else context.getString(R.string.not_selected) + } else { + context.getString(R.string.not_selected) + } return "$buttonText, $statusString" } @@ -382,14 +385,18 @@ class TaskSchedulingControls @JvmOverloads constructor( val formattedDate = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { val formatter = MessageFormat("{0,ordinal}", Locale.getDefault()) formatter.format(arrayOf(date)) - } else date.toString() + } else { + date.toString() + } " on the $formattedDate" } else { val week = startDateCalendar.get(Calendar.WEEK_OF_MONTH) val formattedWeek = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { val formatter = MessageFormat("{0,ordinal}", Locale.getDefault()) formatter.format(arrayOf(week)) - } else week.toString() + } else { + week.toString() + } val dayLongName = startDateCalendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.getDefault()) " on the $formattedWeek week on $dayLongName" } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/ChallengeDeserializer.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/ChallengeDeserializer.kt index 5b567e219..48cc9ff08 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/ChallengeDeserializer.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/ChallengeDeserializer.kt @@ -16,7 +16,6 @@ import java.util.Date class ChallengeDeserializer : JsonDeserializer, JsonSerializer { @Throws(JsonParseException::class) override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext): Challenge { - val jsonObject = json.asJsonObject val challenge = Challenge() @@ -98,7 +97,6 @@ class ChallengeDeserializer : JsonDeserializer, JsonSerializer, JsonSerializer { override fun serialize(src: Date?, typeOfSrc: Type, context: JsonSerializationContext): JsonElement { return if (src == null) { JsonPrimitive("") - } else JsonPrimitive(this.dateFormats[0].format(src)) + } else { + JsonPrimitive(this.dateFormats[0].format(src)) + } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/AddTaskWidgetProvider.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/AddTaskWidgetProvider.kt index a3ceae9c4..081dc9d31 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/AddTaskWidgetProvider.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/AddTaskWidgetProvider.kt @@ -44,7 +44,6 @@ class AddTaskWidgetProvider : BaseWidgetProvider() { columns: Int, rows: Int ): RemoteViews { - val selectedTaskType = getSelectedTaskType(widgetId) var addText: String? = "" var backgroundResource = R.drawable.widget_add_habit_background diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/AvatarStatsWidgetProvider.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/AvatarStatsWidgetProvider.kt index 666b6c00f..a935bf274 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/AvatarStatsWidgetProvider.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/AvatarStatsWidgetProvider.kt @@ -162,7 +162,11 @@ class AvatarStatsWidgetProvider : BaseWidgetProvider() { stats.lvl ?: 0 ) < 10 || user.preferences?.disableClasses == true - ) View.GONE else View.VISIBLE + ) { + View.GONE + } else { + View.VISIBLE + } ) remoteViews.setTextViewText( diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/BaseWidgetProvider.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/BaseWidgetProvider.kt index a10c65907..e534b9ec7 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/BaseWidgetProvider.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/BaseWidgetProvider.kt @@ -51,7 +51,9 @@ abstract class BaseWidgetProvider : AppWidgetProvider() { ) super.onAppWidgetOptionsChanged( - context, appWidgetManager, appWidgetId, + context, + appWidgetManager, + appWidgetId, newOptions ) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/DailiesListFactory.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/DailiesListFactory.kt index 010342589..5d481c3ff 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/DailiesListFactory.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/DailiesListFactory.kt @@ -7,7 +7,7 @@ import com.habitrpg.android.habitica.data.TaskRepository import com.habitrpg.android.habitica.data.UserRepository import com.habitrpg.shared.habitica.models.tasks.TaskType -class DailiesListFactory(context : Context, intent : Intent, taskRepository : TaskRepository, userRepository : UserRepository) : TaskListFactory( +class DailiesListFactory(context: Context, intent: Intent, taskRepository: TaskRepository, userRepository: UserRepository) : TaskListFactory( context, intent, TaskType.DAILY, diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/DailiesWidgetService.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/DailiesWidgetService.kt index b68e847be..303d47a7f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/DailiesWidgetService.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/DailiesWidgetService.kt @@ -12,8 +12,9 @@ class DailiesWidgetService : RemoteViewsService() { @Inject lateinit var taskRepository: TaskRepository + @Inject - lateinit var userRepository : UserRepository + lateinit var userRepository: UserRepository override fun onGetViewFactory(intent: Intent): RemoteViewsFactory { return DailiesListFactory(this.applicationContext, intent, taskRepository, userRepository) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/HabitButtonWidgetService.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/HabitButtonWidgetService.kt index 4efcd37ac..21d25685b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/HabitButtonWidgetService.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/HabitButtonWidgetService.kt @@ -31,9 +31,11 @@ import kotlin.math.min class HabitButtonWidgetService : Service() { @Inject lateinit var sharedPreferences: SharedPreferences + @Inject @ApplicationContext lateinit var context: Context + @Inject lateinit var taskRepository: TaskRepository private var appWidgetManager: AppWidgetManager? = null @@ -114,7 +116,9 @@ class HabitButtonWidgetService : Service() { taskIntent.putExtra(HabitButtonWidgetProvider.TASK_ID, taskId) taskIntent.putExtra(HabitButtonWidgetProvider.TASK_DIRECTION, direction) return PendingIntent.getBroadcast( - context, widgetId + direction.hashCode(), taskIntent, + context, + widgetId + direction.hashCode(), + taskIntent, withImmutableFlag(PendingIntent.FLAG_UPDATE_CURRENT) ) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TaskListWidgetProvider.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TaskListWidgetProvider.kt index 017eb694e..d5560f9ad 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TaskListWidgetProvider.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TaskListWidgetProvider.kt @@ -87,7 +87,9 @@ abstract class TaskListWidgetProvider : BaseWidgetProvider() { taskIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId) intent.data = Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)) val toastPendingIntent = PendingIntent.getBroadcast( - context, 0, taskIntent, + context, + 0, + taskIntent, withMutableFlag(PendingIntent.FLAG_UPDATE_CURRENT) ) rv.setPendingIntentTemplate(R.id.list_view, toastPendingIntent) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TodoListFactory.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TodoListFactory.kt index 4570672f9..a00eefa7a 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TodoListFactory.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TodoListFactory.kt @@ -8,8 +8,8 @@ import com.habitrpg.android.habitica.data.UserRepository import com.habitrpg.shared.habitica.models.tasks.TaskType class TodoListFactory( - context : Context, - intent : Intent, - taskRepository : TaskRepository, - userRepository : UserRepository + context: Context, + intent: Intent, + taskRepository: TaskRepository, + userRepository: UserRepository ) : TaskListFactory(context, intent, TaskType.TODO, R.layout.widget_todo_list_row, R.id.todo_text, taskRepository, userRepository) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TodosWidgetService.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TodosWidgetService.kt index e1719d205..8dcfc892f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TodosWidgetService.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TodosWidgetService.kt @@ -12,8 +12,9 @@ class TodosWidgetService : RemoteViewsService() { @Inject lateinit var taskRepository: TaskRepository + @Inject - lateinit var userRepository : UserRepository + lateinit var userRepository: UserRepository override fun onGetViewFactory(intent: Intent): RemoteViewsFactory { return TodoListFactory(this.applicationContext, intent, taskRepository, userRepository) diff --git a/Habitica/src/test/java/com/habitrpg/android/habitica/utils/DateDeserializerTest.kt b/Habitica/src/test/java/com/habitrpg/android/habitica/utils/DateDeserializerTest.kt index d3edbe16d..4f1f85949 100644 --- a/Habitica/src/test/java/com/habitrpg/android/habitica/utils/DateDeserializerTest.kt +++ b/Habitica/src/test/java/com/habitrpg/android/habitica/utils/DateDeserializerTest.kt @@ -41,7 +41,8 @@ class DateDeserializerTest : SerializerSpec({ Date( referenceTimestamp ), - Date::class.java, serializationContext + Date::class.java, + serializationContext ) dateElement.asString shouldBe "2015-09-28T13:00:00.000Z" } diff --git a/common/src/main/java/com/habitrpg/common/habitica/extensions/Application-Extensions.kt b/common/src/main/java/com/habitrpg/common/habitica/extensions/ApplicationExtensions.kt similarity index 100% rename from common/src/main/java/com/habitrpg/common/habitica/extensions/Application-Extensions.kt rename to common/src/main/java/com/habitrpg/common/habitica/extensions/ApplicationExtensions.kt diff --git a/common/src/main/java/com/habitrpg/common/habitica/extensions/Base-Extensions.kt b/common/src/main/java/com/habitrpg/common/habitica/extensions/BaseExtensions.kt similarity index 100% rename from common/src/main/java/com/habitrpg/common/habitica/extensions/Base-Extensions.kt rename to common/src/main/java/com/habitrpg/common/habitica/extensions/BaseExtensions.kt diff --git a/common/src/main/java/com/habitrpg/common/habitica/extensions/BaseViewModel-Extensions.kt b/common/src/main/java/com/habitrpg/common/habitica/extensions/BaseViewModelExtensions.kt similarity index 100% rename from common/src/main/java/com/habitrpg/common/habitica/extensions/BaseViewModel-Extensions.kt rename to common/src/main/java/com/habitrpg/common/habitica/extensions/BaseViewModelExtensions.kt diff --git a/common/src/main/java/com/habitrpg/common/habitica/extensions/Context-Extensions.kt b/common/src/main/java/com/habitrpg/common/habitica/extensions/ContextExtensions.kt similarity index 100% rename from common/src/main/java/com/habitrpg/common/habitica/extensions/Context-Extensions.kt rename to common/src/main/java/com/habitrpg/common/habitica/extensions/ContextExtensions.kt diff --git a/common/src/main/java/com/habitrpg/common/habitica/extensions/Drawable-Extendsions.kt b/common/src/main/java/com/habitrpg/common/habitica/extensions/DrawableExtendsions.kt similarity index 100% rename from common/src/main/java/com/habitrpg/common/habitica/extensions/Drawable-Extendsions.kt rename to common/src/main/java/com/habitrpg/common/habitica/extensions/DrawableExtendsions.kt diff --git a/common/src/main/java/com/habitrpg/common/habitica/extensions/Int-Extensions.kt b/common/src/main/java/com/habitrpg/common/habitica/extensions/IntExtensions.kt similarity index 100% rename from common/src/main/java/com/habitrpg/common/habitica/extensions/Int-Extensions.kt rename to common/src/main/java/com/habitrpg/common/habitica/extensions/IntExtensions.kt diff --git a/common/src/main/java/com/habitrpg/common/habitica/extensions/String-Extensions.kt b/common/src/main/java/com/habitrpg/common/habitica/extensions/StringExtensions.kt similarity index 97% rename from common/src/main/java/com/habitrpg/common/habitica/extensions/String-Extensions.kt rename to common/src/main/java/com/habitrpg/common/habitica/extensions/StringExtensions.kt index 61aa736e5..457e1cf7c 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/extensions/String-Extensions.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/extensions/StringExtensions.kt @@ -7,7 +7,6 @@ import android.text.TextUtils import android.text.util.Linkify import android.util.Patterns import java.util.Locale -import java.util.* fun String.fromHtml(): CharSequence { return if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) { @@ -46,7 +45,7 @@ fun CharSequence?.isValidEmail() = !isNullOrEmpty() && Patterns.EMAIL_ADDRESS.ma fun String.toLocale(): Locale { val parts = this.split("_") - return when(parts.size) { + return when (parts.size) { 1 -> Locale(parts[0]) 2 -> Locale(parts[0], parts[1]) else -> Locale("en") diff --git a/common/src/main/java/com/habitrpg/common/habitica/extensions/TaskDifficulty-Extensions.kt b/common/src/main/java/com/habitrpg/common/habitica/extensions/TaskDifficultyExtensions.kt similarity index 100% rename from common/src/main/java/com/habitrpg/common/habitica/extensions/TaskDifficulty-Extensions.kt rename to common/src/main/java/com/habitrpg/common/habitica/extensions/TaskDifficultyExtensions.kt diff --git a/common/src/main/java/com/habitrpg/common/habitica/extensions/TextView-Extensions.kt b/common/src/main/java/com/habitrpg/common/habitica/extensions/TextViewExtensions.kt similarity index 100% rename from common/src/main/java/com/habitrpg/common/habitica/extensions/TextView-Extensions.kt rename to common/src/main/java/com/habitrpg/common/habitica/extensions/TextViewExtensions.kt diff --git a/common/src/main/java/com/habitrpg/common/habitica/extensions/ViewExt.kt b/common/src/main/java/com/habitrpg/common/habitica/extensions/ViewExt.kt index 2f55512a4..be01acf01 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/extensions/ViewExt.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/extensions/ViewExt.kt @@ -38,4 +38,3 @@ fun View.fadeInAnimation(duration: Long = 500) { fadeInAnimation.duration = duration fadeInAnimation.start() } - diff --git a/common/src/main/java/com/habitrpg/common/habitica/extensions/ViewGroup-Extensions.kt b/common/src/main/java/com/habitrpg/common/habitica/extensions/ViewGroupExtensions.kt similarity index 99% rename from common/src/main/java/com/habitrpg/common/habitica/extensions/ViewGroup-Extensions.kt rename to common/src/main/java/com/habitrpg/common/habitica/extensions/ViewGroupExtensions.kt index 50b55e077..172d9a974 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/extensions/ViewGroup-Extensions.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/extensions/ViewGroupExtensions.kt @@ -1,4 +1,5 @@ @file:JvmName("ViewGroupExt") + package com.habitrpg.android.habitica.extensions import android.view.View diff --git a/common/src/main/java/com/habitrpg/common/habitica/helpers/KeyHelper.kt b/common/src/main/java/com/habitrpg/common/habitica/helpers/KeyHelper.kt index 3266b7b17..a7e8a3390 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/helpers/KeyHelper.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/helpers/KeyHelper.kt @@ -121,7 +121,8 @@ constructor(ctx: Context, var sharedPreferences: SharedPreferences, var keyStore val output = Cipher.getInstance(RSA_MODE, "AndroidOpenSSL") output.init(Cipher.DECRYPT_MODE, privateKeyEntry?.privateKey) val cipherInputStream = CipherInputStream( - ByteArrayInputStream(encrypted), output + ByteArrayInputStream(encrypted), + output ) return cipherInputStream.readBytes() } diff --git a/common/src/main/java/com/habitrpg/common/habitica/helpers/MarkdownParser.kt b/common/src/main/java/com/habitrpg/common/habitica/helpers/MarkdownParser.kt index d78fbfeb9..44e7e5e70 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/helpers/MarkdownParser.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/helpers/MarkdownParser.kt @@ -36,8 +36,6 @@ object MarkdownParser { private val cache = sortedMapOf() internal var markwon: Markwon? = null - - fun setup(context: Context) { markwon = Markwon.builder(context) .usePlugin(StrikethroughPlugin.create()) @@ -126,7 +124,7 @@ object MarkdownParser { processedInput = preprocessImageMarkdown(processedInput) return processedInput } - + private fun preprocessImageMarkdown(markdown: String): String { // Used to handle an image tag with a URL that ends with .jpg or .png (Else the image may be shown as broken, a link, or not at all) // Example: (..ample_image_name.png"Zombie hatching potion") -> (..ample_image_name.png "Zombie hatching potion") @@ -162,8 +160,6 @@ object MarkdownParser { return sb.toString() } - - fun parseMarkdownAsync(input: String?, onSuccess: (Spanned) -> Unit) { CoroutineScope(Dispatchers.IO).launch { val result = parseMarkdown(input) @@ -199,8 +195,8 @@ object MarkdownParser { private val markdownLinkRegex = "\\[([^\\]]+)\\]\\(([^\\)]+)\\)".toRegex() fun containsMarkdown(text: String): Boolean { return text.matches(markdownRegex) || - text.contains(imageMarkdownRegex) || - text.contains(markdownLinkRegex) + text.contains(imageMarkdownRegex) || + text.contains(markdownLinkRegex) } } diff --git a/common/src/main/java/com/habitrpg/common/habitica/helpers/NumberAbbreviator.kt b/common/src/main/java/com/habitrpg/common/habitica/helpers/NumberAbbreviator.kt index fbeaad40f..eb7473178 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/helpers/NumberAbbreviator.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/helpers/NumberAbbreviator.kt @@ -40,7 +40,7 @@ object NumberAbbreviator { 1 -> "k" 2 -> "m" 3 -> "b" - 4 ->"t" + 4 -> "t" 5 -> "q" else -> "" } diff --git a/common/src/main/java/com/habitrpg/common/habitica/models/Notification.kt b/common/src/main/java/com/habitrpg/common/habitica/models/Notification.kt index bce925a82..fc7d71ec5 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/models/Notification.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/models/Notification.kt @@ -70,7 +70,7 @@ class Notification { // Custom notification types (created by this app) GUILD_INVITATION("GUILD_INVITATION"), PARTY_INVITATION("PARTY_INVITATION"), - QUEST_INVITATION("QUEST_INVITATION"), + QUEST_INVITATION("QUEST_INVITATION") } var id: String = "" diff --git a/common/src/main/java/com/habitrpg/common/habitica/views/AvatarView.kt b/common/src/main/java/com/habitrpg/common/habitica/views/AvatarView.kt index b1330c3e4..74cdcdcfd 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/views/AvatarView.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/views/AvatarView.kt @@ -86,7 +86,8 @@ class AvatarView : FrameLayout { avatarCanvas?.drawBitmap( bitmap, Rect(0, 0, bitmap.width, bitmap.height), - Rect(it.marginStart, it.marginTop, bitmap.width, bitmap.height), null + Rect(it.marginStart, it.marginTop, bitmap.width, bitmap.height), + null ) } @@ -114,7 +115,10 @@ class AvatarView : FrameLayout { private fun init(attrs: AttributeSet?, defStyle: Int) { // Load attributes val a = context.obtainStyledAttributes( - attrs, R.styleable.AvatarView, defStyle, 0 + attrs, + R.styleable.AvatarView, + defStyle, + 0 ) try { diff --git a/common/src/main/java/com/habitrpg/common/habitica/views/HabiticaProgressBar.kt b/common/src/main/java/com/habitrpg/common/habitica/views/HabiticaProgressBar.kt index ce71ed61e..81a9aba26 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/views/HabiticaProgressBar.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/views/HabiticaProgressBar.kt @@ -78,7 +78,8 @@ class HabiticaProgressBar @JvmOverloads constructor( val attributes = context.theme?.obtainStyledAttributes( attrs, R.styleable.HabiticaProgressBar, - 0, 0 + 0, + 0 ) barForegroundColor = attributes?.getColor(R.styleable.HabiticaProgressBar_barForegroundColor, 0) ?: 0 diff --git a/common/src/main/java/com/habitrpg/common/habitica/views/PixelArtView.kt b/common/src/main/java/com/habitrpg/common/habitica/views/PixelArtView.kt index ffd306f77..23a08d2c7 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/views/PixelArtView.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/views/PixelArtView.kt @@ -44,11 +44,15 @@ class PixelArtView @JvmOverloads constructor( ( if (smallestSide > 0 && targetWidth > 0 && smallestSide != targetWidth) { smallestSide / (targetWidth / 3) - } else 1 + } else { + 1 + } ), if (smallestSide > 0 && targetHeight > 0 && smallestSide != targetHeight) { smallestSide / (targetHeight / 3) - } else 1 + } else { + 1 + } ) targetWidth = (targetWidth / 3) * factor targetHeight = (targetHeight / 3) * factor diff --git a/common/src/main/java/com/habitrpg/common/habitica/views/ValueBar.kt b/common/src/main/java/com/habitrpg/common/habitica/views/ValueBar.kt index d1c739c66..7c77dcc1e 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/views/ValueBar.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/views/ValueBar.kt @@ -90,7 +90,8 @@ class ValueBar(context: Context, attrs: AttributeSet?) : FrameLayout(context, at val attributes = context.theme?.obtainStyledAttributes( attrs, R.styleable.ValueBar, - 0, 0 + 0, + 0 ) binding.progressBar.barForegroundColor = attributes?.getColor(R.styleable.ValueBar_barForegroundColor, 0) ?: 0 diff --git a/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/extensions/Double-Extensions.kt b/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/extensions/DoubleExtensions.kt similarity index 100% rename from shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/extensions/Double-Extensions.kt rename to shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/extensions/DoubleExtensions.kt diff --git a/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/responses/TaskDirectionDataTemp.kt b/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/responses/TaskDirectionDataTemp.kt index 40d457109..8e539df05 100644 --- a/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/responses/TaskDirectionDataTemp.kt +++ b/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/responses/TaskDirectionDataTemp.kt @@ -20,5 +20,5 @@ data class TaskDirectionDataDrop( var value: Int, var key: String?, var type: String?, - var dialog: String?, + var dialog: String? ) : HParcelable diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/MainApplication.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/MainApplication.kt index 7a4b84479..5ff8c9f32 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/MainApplication.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/MainApplication.kt @@ -31,6 +31,7 @@ import kotlin.time.toDuration class MainApplication : Application() { @Inject lateinit var userRepository: UserRepository + @Inject lateinit var taskRepository: TaskRepository override fun onCreate() { diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/data/ApiService.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/data/ApiService.kt index 3b7048868..6c5b5d09c 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/data/ApiService.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/data/ApiService.kt @@ -24,6 +24,7 @@ import retrofit2.http.Query interface ApiService { @GET("user/") suspend fun getUser(): Response> + @GET("user/") @Headers("Cache-Control: no-cache") suspend fun getUserForced(): Response> @@ -36,6 +37,7 @@ interface ApiService { @GET("tasks/user") suspend fun getTasks(): Response> + @GET("tasks/user") @Headers("Cache-Control: no-cache") suspend fun getTasksForced(): Response> @@ -51,6 +53,7 @@ interface ApiService { @POST("tasks/{id}/score/{direction}") suspend fun scoreTask(@Path("id") id: String, @Path("direction") direction: String): Response> + @POST("tasks/bulk-score") suspend fun bulkScoreTasks(@Body data: List>): Response> diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/data/repositories/TaskLocalRepository.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/data/repositories/TaskLocalRepository.kt index 432dc192b..3c304af96 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/data/repositories/TaskLocalRepository.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/data/repositories/TaskLocalRepository.kt @@ -94,7 +94,7 @@ class TaskLocalRepository @Inject constructor() { TaskType.HABIT.value to (tasks[TaskType.HABIT]?.value?.size ?: 0), TaskType.DAILY.value to (tasks[TaskType.DAILY]?.value?.size ?: 0), TaskType.TODO.value to (tasks[TaskType.TODO]?.value?.size ?: 0), - TaskType.REWARD.value to (tasks[TaskType.REWARD]?.value?.size ?: 0), + TaskType.REWARD.value to (tasks[TaskType.REWARD]?.value?.size ?: 0) ) } @@ -109,7 +109,7 @@ class TaskLocalRepository @Inject constructor() { tasks[TaskType.TODO]?.value?.filter { !it.completed }?.size ?: 0 ), - TaskType.REWARD.value to (tasks[TaskType.REWARD]?.value?.size ?: 0), + TaskType.REWARD.value to (tasks[TaskType.REWARD]?.value?.size ?: 0) ) } diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/BulkTaskScoringData.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/BulkTaskScoringData.kt index 37f038c5b..c4c407004 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/BulkTaskScoringData.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/BulkTaskScoringData.kt @@ -9,15 +9,19 @@ import com.squareup.moshi.JsonClass class BulkTaskScoringData { @Json(name = "con") var constitution: Int? = null + @Json(name = "str") var strength: Int? = null + @Json(name = "per") var per: Int? = null + @Json(name = "int") var intelligence: Int? = null var buffs: Buffs? = null var points: Int? = null var lvl: Int? = null + @Json(name = "class") var habitClass: String? = null var gp: Double? = null diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/ChecklistItem.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/ChecklistItem.kt index 77013df77..2d7660a77 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/ChecklistItem.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/ChecklistItem.kt @@ -41,7 +41,9 @@ open class ChecklistItem constructor( override fun equals(other: Any?): Boolean { return if (other is ChecklistItem) { this.id == other.id - } else super.equals(other) + } else { + super.equals(other) + } } override fun hashCode(): Int { diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/RemindersItem.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/RemindersItem.kt index b8501b3b6..59fc14237 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/RemindersItem.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/RemindersItem.kt @@ -38,7 +38,9 @@ open class RemindersItem constructor() : Parcelable { override fun equals(other: Any?): Boolean { return if (other is RemindersItem) { this.id == other.id - } else super.equals(other) + } else { + super.equals(other) + } } override fun hashCode(): Int { diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/Task.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/Task.kt index 10aeb1c7b..cafb8e804 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/Task.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/Task.kt @@ -36,27 +36,32 @@ open class Task constructor() : Parcelable, BaseTask { var value: Double? = 0.0 var dateCreated: Date? = null var position: Int = 0 + // Habits var up: Boolean? = false var down: Boolean? = false override var counterUp: Int? = 0 override var counterDown: Int? = 0 + // todos/dailies override var completed: Boolean = false var checklist: List? = listOf() var reminders: List? = listOf() + // dailies var frequency: Frequency? = null var everyX: Int? = 0 override var streak: Int? = 0 var startDate: Date? = null var repeat: Days? = null + // todos @Json(name = "date") var dueDate: Date? = null @Json(ignore = true) var parsedText: Spanned? = null + @Json(ignore = true) var parsedNotes: Spanned? = null diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Outfit.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Outfit.kt index 889ebc7ad..7da004b0c 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Outfit.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Outfit.kt @@ -12,6 +12,8 @@ class Outfit : AvatarOutfit { override var head: String = "" override var shield: String = "" override var weapon: String = "" - @Json(name = "eyewear") override var eyeWear: String = "" + + @Json(name = "eyewear") + override var eyeWear: String = "" override var headAccessory: String = "" } diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/User.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/User.kt index 38a7dd36f..a2b913d67 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/User.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/User.kt @@ -18,6 +18,7 @@ class User : Avatar { override var sleep: Boolean = false override var id: String? = null override var balance: Double = 0.0 + @Json(ignore = true) override var authentication: AvatarAuthentication? = null override var stats: Stats? = null diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/modules/AppModule.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/modules/AppModule.kt index 546ed9150..e60030a5b 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/modules/AppModule.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/modules/AppModule.kt @@ -111,7 +111,9 @@ class AppModule { ): KeyHelper? { return if (keyStore == null) { null - } else KeyHelper.getInstance(context, sharedPreferences, keyStore) + } else { + KeyHelper.getInstance(context, sharedPreferences, keyStore) + } } @Provides diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/InputActivity.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/InputActivity.kt index 6b639745b..6cad6db78 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/InputActivity.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/InputActivity.kt @@ -4,10 +4,8 @@ import android.app.Activity import android.content.Context import android.content.Intent import android.os.Bundle -import android.speech.RecognizerIntent import android.view.inputmethod.EditorInfo import android.view.inputmethod.InputMethodManager -import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.viewModels import androidx.core.view.postDelayed import com.habitrpg.android.habitica.databinding.ActivityInputBinding @@ -52,5 +50,4 @@ class InputActivity : BaseActivity() { } } } - } diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/LevelupActivity.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/LevelupActivity.kt index 23d1acd17..d7bb7251a 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/LevelupActivity.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/LevelupActivity.kt @@ -49,7 +49,8 @@ class LevelupActivity : BaseActivity() createParticles(container, R.drawable.confetti_red) createParticles(container, R.drawable.confetti_yellow) createParticles(container, R.drawable.confetti_purple) - }, 500 + }, + 500 ) } diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/adapters/BaseAdapter.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/adapters/BaseAdapter.kt index 18739eba3..73a473178 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/adapters/BaseAdapter.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/adapters/BaseAdapter.kt @@ -8,7 +8,7 @@ import com.habitrpg.common.habitica.extensions.layoutInflater import com.habitrpg.wearos.habitica.ui.viewHolders.HeaderViewHolder import com.habitrpg.wearos.habitica.ui.viewHolders.SpacerViewHolder -abstract class BaseAdapter : RecyclerView.Adapter() { +abstract class BaseAdapter : RecyclerView.Adapter() { var title: String = "" set(value) { val previous = field diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/AvatarViewModel.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/AvatarViewModel.kt index 706b61512..fe3d3cd11 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/AvatarViewModel.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/AvatarViewModel.kt @@ -16,7 +16,8 @@ class AvatarViewModel @Inject constructor( ) : BaseViewModel( userRepository, taskRepository, - exceptionBuilder, appStateManager + exceptionBuilder, + appStateManager ) { var user = userRepository.getUser() } diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/LoginViewModel.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/LoginViewModel.kt index a0818df29..488fbe2d4 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/LoginViewModel.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/LoginViewModel.kt @@ -63,7 +63,7 @@ class LoginViewModel @Inject constructor( fun handleGoogleLoginResult( activity: Activity, task: Task, - recoverFromPlayServicesErrorResult: ActivityResultLauncher?, + recoverFromPlayServicesErrorResult: ActivityResultLauncher? ) { viewModelScope.launch(exceptionBuilder.userFacing(this)) { val account = async { diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/CircularProgressView.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/CircularProgressView.kt index 2c53da1f3..4f79f3f64 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/CircularProgressView.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/CircularProgressView.kt @@ -25,7 +25,8 @@ class CircularProgressView( private val attributes = context?.theme?.obtainStyledAttributes( attrs, R.styleable.CircularProgressView, - 0, 0 + 0, + 0 ) private val offset = attributes?.getDimension(R.styleable.CircularProgressView_offset, 0f)?.toInt() private val backgroundArcColor = attributes?.getColor(R.styleable.CircularProgressView_backgroundArcColor, 0) ?: Color.GRAY diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/HabitDirectionPickerButton.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/HabitDirectionPickerButton.kt index decd44df4..4f796b7b5 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/HabitDirectionPickerButton.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/HabitDirectionPickerButton.kt @@ -38,7 +38,8 @@ class HabitDirectionPickerButton @JvmOverloads constructor( val attributes = context.theme.obtainStyledAttributes( attrs, R.styleable.HabitDirectionPickerButton, - 0, 0 + 0, + 0 ) drawable = attributes.getDrawable(R.styleable.HabitDirectionPickerButton_drawable) as? BitmapDrawable drawFromTop = attributes.getBoolean(R.styleable.HabitDirectionPickerButton_drawFromTop, false) diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/IndeterminateProgressView.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/IndeterminateProgressView.kt index a8097ba90..d8f8e16f6 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/IndeterminateProgressView.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/IndeterminateProgressView.kt @@ -33,7 +33,7 @@ class IndeterminateProgressView @JvmOverloads constructor( ContextCompat.getColor(context, R.color.watch_green_100), ContextCompat.getColor(context, R.color.watch_blue_100), ContextCompat.getColor(context, R.color.watch_purple_100), - ContextCompat.getColor(context, R.color.black), + ContextCompat.getColor(context, R.color.black) ).toIntArray() val gradient = SweepGradient(225f, 225f, rainbow, null) private val paint = Paint() diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/TextActionChipView.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/TextActionChipView.kt index 87c158b9f..eee2ef1c3 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/TextActionChipView.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/TextActionChipView.kt @@ -15,7 +15,8 @@ open class TextActionChipView @JvmOverloads constructor(context: Context, attrs: private val attributes = context.theme?.obtainStyledAttributes( attrs, R.styleable.TextActionChip, - 0, 0 + 0, + 0 ) val binding = TextActionChipBinding.inflate(context.layoutInflater, this) diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/util/DateJSONAdapter.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/util/DateJSONAdapter.kt index 72bfdce3a..799a3f804 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/util/DateJSONAdapter.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/util/DateJSONAdapter.kt @@ -61,6 +61,7 @@ var customDateAdapter: Any = object : Any() { class FrequencyAdapter { @ToJson fun toJson(type: Frequency): String = type.value + @FromJson fun fromJson(value: String): Frequency? = Frequency.from(value) } @@ -68,6 +69,7 @@ class FrequencyAdapter { class TaskTypeAdapter { @ToJson fun toJson(type: TaskType): String = type.value + @FromJson fun fromJson(value: String): TaskType? = TaskType.from(value) } @@ -75,6 +77,7 @@ class TaskTypeAdapter { class AttributeAdapter { @ToJson fun toJson(type: Attribute): String = type.value + @FromJson fun fromJson(value: String): Attribute? = Attribute.from(value) }