diff --git a/Habitica/build.gradle b/Habitica/build.gradle index af3059756..3f8a4662e 100644 --- a/Habitica/build.gradle +++ b/Habitica/build.gradle @@ -149,7 +149,7 @@ android { buildConfigField "String", "TESTING_LEVEL", "\"production\"" resConfigs "en", "bg", "de", "en-rGB", "es", "fr", "hr-rHR", "in", "it", "iw", "ja", "ko", "lt", "nl", "pl", "pt-rBR", "pt-rPT", "ru", "tr", "zh", "zh-rTW" - versionCode 2943 + versionCode 2946 versionName "3.2.3" } diff --git a/Habitica/res/drawable/confetti_blue.xml b/Habitica/res/drawable/confetti_blue.xml index 26ffcc2f9..e78d8b540 100644 --- a/Habitica/res/drawable/confetti_blue.xml +++ b/Habitica/res/drawable/confetti_blue.xml @@ -2,4 +2,5 @@ + \ No newline at end of file diff --git a/Habitica/res/drawable/confetti_purple.xml b/Habitica/res/drawable/confetti_purple.xml index 19e89a145..22c59b135 100644 --- a/Habitica/res/drawable/confetti_purple.xml +++ b/Habitica/res/drawable/confetti_purple.xml @@ -2,4 +2,5 @@ + \ No newline at end of file diff --git a/Habitica/res/drawable/confetti_red.xml b/Habitica/res/drawable/confetti_red.xml index a0ada10f1..ffd9d742d 100644 --- a/Habitica/res/drawable/confetti_red.xml +++ b/Habitica/res/drawable/confetti_red.xml @@ -2,4 +2,5 @@ + \ No newline at end of file diff --git a/Habitica/res/drawable/confetti_yellow.xml b/Habitica/res/drawable/confetti_yellow.xml index bf7c6e3e0..ae6bbc01e 100644 --- a/Habitica/res/drawable/confetti_yellow.xml +++ b/Habitica/res/drawable/confetti_yellow.xml @@ -2,4 +2,5 @@ + \ No newline at end of file diff --git a/Habitica/res/layout/activity_create_challenge.xml b/Habitica/res/layout/activity_create_challenge.xml index 95d517f8e..5e9d36fb7 100644 --- a/Habitica/res/layout/activity_create_challenge.xml +++ b/Habitica/res/layout/activity_create_challenge.xml @@ -48,13 +48,13 @@ android:layout_width="match_parent" android:layout_height="wrap_content" app:hintTextAppearance="@style/TextAppearance.AppCompat" + android:hint="@string/new_challenge_title" android:id="@+id/create_challenge_title_input_layout"> - - - diff --git a/Habitica/res/layout/activity_group_form.xml b/Habitica/res/layout/activity_group_form.xml index f6182808d..0e740823a 100644 --- a/Habitica/res/layout/activity_group_form.xml +++ b/Habitica/res/layout/activity_group_form.xml @@ -45,13 +45,13 @@ android:layout_marginTop="@dimen/spacing_small" android:layout_marginStart="@dimen/spacing_large" android:layout_marginEnd="@dimen/spacing_large" + android:hint="@string/name" android:textColorHint="@color/text_primary"> + android:paddingBottom="50dp"/> @@ -66,13 +66,13 @@ app:boxStrokeColor="?attr/colorPrimary" android:backgroundTint="?attr/colorPrimaryText" app:hintTextColor="?colorPrimaryText" + android:hint="@string/notes" android:layout_marginTop="@dimen/spacing_large" android:alpha="0.75"> diff --git a/Habitica/res/layout/profile_new_message_dialog.xml b/Habitica/res/layout/profile_new_message_dialog.xml index ca6c045c5..4a38f6da4 100644 --- a/Habitica/res/layout/profile_new_message_dialog.xml +++ b/Habitica/res/layout/profile_new_message_dialog.xml @@ -25,6 +25,7 @@ android:layout_height="wrap_content" android:minHeight="72dp" android:layout_weight="1" + android:hint="@string/write_message" app:hintTextAppearance="@style/TextAppearance.AppCompat"> diff --git a/Habitica/res/values-de/strings.xml b/Habitica/res/values-de/strings.xml index 1ebed4040..48a91771e 100644 --- a/Habitica/res/values-de/strings.xml +++ b/Habitica/res/values-de/strings.xml @@ -1068,7 +1068,7 @@ Die Quest-Schriftrolle wird an den Quest-Besitzer zurückgegeben. %d Aufgaben behalten Dies ist eine von %d Aufgaben, die Teil einer Herausforderung sind, die nicht mehr existiert. Wie möchtest Du mit den übrig gebliebenen Aufgaben verfahren\? Verlassen & %d Aufgaben löschen - Dies ist eine von %d Aufgaben, die Teil der “%s” Herausforderung sind. Du musst die Herausforderung verlassen, um diese Aufgabe zu löschen. + Dies ist eine von %1$d Aufgaben, die Teil der “%2$s” Herausforderung sind. Du musst die Herausforderung verlassen, um diese Aufgabe zu löschen. Herausforderungsaufgabe löschen\? Magischen Sattel benutzen Nicht ausgebrütetes Haustier diff --git a/Habitica/res/values-en-rGB/strings.xml b/Habitica/res/values-en-rGB/strings.xml index 729f11002..178723137 100644 --- a/Habitica/res/values-en-rGB/strings.xml +++ b/Habitica/res/values-en-rGB/strings.xml @@ -1024,7 +1024,7 @@ Leave & Delete %d Tasks Leave & Delete Task Delete Challenge Task\? - This is one of %d tasks that are part of the “%s” Challenge. You must leave the Challenge to delete this task. + This is one of %1$d tasks that are part of the “%2$s” Challenge. You must leave the Challenge to delete this task. Hatch Hatch your Pet Use Saddle diff --git a/Habitica/res/values-es/strings.xml b/Habitica/res/values-es/strings.xml index aa8f3907d..2edaffca8 100644 --- a/Habitica/res/values-es/strings.xml +++ b/Habitica/res/values-es/strings.xml @@ -918,7 +918,7 @@ Eclosionaste una mascota Completaste una tarea Creaste tu primera tarea - Esta es una de las %d Tareas que forman parte del Desafío “%s”. Tienes que salir del Desafío para eliminar esta Tarea. + Esta es una de las %1$d Tareas que forman parte del Desafío “%2$s”. Tienes que salir del Desafío para eliminar esta Tarea. Usar Silla de Montar Poción mágica Pociones mágicas diff --git a/Habitica/res/values-fr/strings.xml b/Habitica/res/values-fr/strings.xml index 05d27cd33..f1a589b0a 100644 --- a/Habitica/res/values-fr/strings.xml +++ b/Habitica/res/values-fr/strings.xml @@ -1027,7 +1027,7 @@ Cette tâche est l\'une des %d tâches qui composent un défi qui n\'existe plus. Que voudriez-vous faire des tâches restantes \? Défi cassé Quitter & supprimer %d tâches - Cette tâche appartient aux %d tâches qui composent le défi “%s”. Vous devez quitter ce défi pour supprimer cette tâche. + Cette tâche appartient aux %1$d tâches qui composent le défi “%2$s”. Vous devez quitter ce défi pour supprimer cette tâche. Supprimer la tâche du défi \? Faire éclore Faites éclore votre familier diff --git a/Habitica/res/values-it/strings.xml b/Habitica/res/values-it/strings.xml index dc625325e..5152ae485 100644 --- a/Habitica/res/values-it/strings.xml +++ b/Habitica/res/values-it/strings.xml @@ -1054,7 +1054,7 @@ Sfida mancante Lascia e rimuovi le %d attività Lascia e rimuovi le attività - Questa è una delle %d attività che fanno parte della sfida \"%s\". Devi abbandonare la sfida per eliminare questa attività. + Questa è una delle %1$d attività che fanno parte della sfida \"%2$s\". Devi abbandonare la sfida per eliminare questa attività. Eliminare le attività della sfida\? Schiudi Schiudi il tuo animale diff --git a/Habitica/res/values-ja/strings.xml b/Habitica/res/values-ja/strings.xml index 86d1b4a6f..f864dd831 100644 --- a/Habitica/res/values-ja/strings.xml +++ b/Habitica/res/values-ja/strings.xml @@ -1048,7 +1048,7 @@ チャレンジのリンク切れ やめる、%dタスクを削除する やめる、タスクも削除する - このタスクは「%s」チャレンジの%dタスクの一部です。このタスクを削除するにはチャレンジを止めてください。 + このタスクは「%2$s」チャレンジの%1$dタスクの一部です。このタスクを削除するにはチャレンジを止めてください。 %sのたまごと%sたまごがえしの薬を融合させてこのペットを孵化させましょう! このペットの孵化には%sたまごがえしの薬が必要です このペットの孵化には%sのたまごと%sたまごがえしの薬が必要です diff --git a/Habitica/res/values-pt-rBR/strings.xml b/Habitica/res/values-pt-rBR/strings.xml index 19e5d5f2d..f337136de 100644 --- a/Habitica/res/values-pt-rBR/strings.xml +++ b/Habitica/res/values-pt-rBR/strings.xml @@ -1018,7 +1018,7 @@ Desafio quebrado Sair & Remover %d tarefas Sair & Remover tarefa - Esta é uma de %d tarefas que são parte do Desafio “%s”. Você precisa sair do Desafio para remover essa tarefa. + Esta é uma de %1$d tarefas que são parte do Desafio “%2$s”. Você precisa sair do Desafio para remover essa tarefa. Deletar Tarefa do Desafio\? Chocar Chocar seu Mascote diff --git a/Habitica/res/values-tr/strings.xml b/Habitica/res/values-tr/strings.xml index f52eed7ec..bafb85adc 100644 --- a/Habitica/res/values-tr/strings.xml +++ b/Habitica/res/values-tr/strings.xml @@ -1010,7 +1010,7 @@ %d Görevi Koru Bu, artık var olmayan bir Meydan Okumanın parçası olan %d görevden biridir. Bu kalan görevlerle ne yapmak istersiniz\? Bozulmuş Mücadele - Bu, \"%s\" Meydan Okumasının parçası olan %d görevden biridir. Bu görevi silmek için Meydan Okumadan ayrılmalısınız. + Bu, “%2$s” Meydan Okumasının parçası olan %1$d görevden biridir. Bu görevi silmek için Meydan Okumadan ayrılmalısınız. Yumurtadan Çıkar Evcil Hayvanınızı Yumurtadan Çıkarın Sihirli İksirler diff --git a/Habitica/res/values-uk/strings.xml b/Habitica/res/values-uk/strings.xml index ac69a821b..211484fcc 100755 --- a/Habitica/res/values-uk/strings.xml +++ b/Habitica/res/values-uk/strings.xml @@ -1139,7 +1139,7 @@ Провалене випробування Покинути і видалити завдання: %d Покинути & видалити завдання - Це одне з %d завдань що входять до складу “%s” випробування. Ви повинні покинути випробування щоб видалити це завдання. + Це одне з %1$d завдань що входять до складу “%2$s” випробування. Ви повинні покинути випробування щоб видалити це завдання. Вилупити вашу тварину Магічний еліксир Магічні еліксири diff --git a/Habitica/res/values-vi/strings.xml b/Habitica/res/values-vi/strings.xml index 44668a57a..2265871fc 100755 --- a/Habitica/res/values-vi/strings.xml +++ b/Habitica/res/values-vi/strings.xml @@ -1021,7 +1021,7 @@ Thử thách Bị hủy Rời & Xóa %d Công việc Rời & Xóa Công việc - Đây là một trong %d công việc là phần của Thử thách \"%s\". Bạn phải rời Thử thách để xóa công việc này. + Đây là một trong %1$d công việc là phần của Thử thách “%2$s”. Bạn phải rời Thử thách để xóa công việc này. Xóa Công việc của Thử thách\? Ấp Ấp thú cưng của bạn diff --git a/Habitica/res/values-zh-rTW/strings.xml b/Habitica/res/values-zh-rTW/strings.xml index 829db4175..beebffe82 100644 --- a/Habitica/res/values-zh-rTW/strings.xml +++ b/Habitica/res/values-zh-rTW/strings.xml @@ -734,7 +734,7 @@ 你沒有參加這個副本 定期登錄Habitica 邀請朋友 - 通過在Habitica簽到%d次來解鎖。 + 通過在Habitica簽到%d次來解鎖。 剩餘1小時 剩餘%dh小時 剩餘%dm分鐘 @@ -753,18 +753,18 @@ 你的用戶名和/或密碼不正確。 你沒有連接到互聯網。 轉讓所有權? - 領導權已轉移到%s + 領導權已轉移到%s 發送私信 刪除會員 轉讓所有權 去掉 - 你收到了 %d 條消息 - 你收到了 %1$d 條消息來自 %2$s - 你發送了%s + 你收到了 %d 條消息 + 你收到了 %1$d 條消息來自 %2$s + 你發送了%s 應用主題 分享挑戰與 細節 - 創建%s + 創建%s 新任務 確認刪除 切換到網格視圖 @@ -779,8 +779,8 @@ %s會變成新的隊長 你想將%s從隊伍中移除嗎? 轉讓 - %s已從群組中刪除 - 你打開包裝盒並收到一個%s + %s已從群組中刪除 + 你打開包裝盒並收到一個%s 來看新聞 看成就 你得到了成就! @@ -848,7 +848,7 @@ 複製用戶ID 已將用戶ID複製到剪貼板 複製用戶名 - 您的密碼長度至少為%d個字符 + 您的密碼長度至少為%d個字符 %s邀請你加入他們的小組%s 有人 認證方式 @@ -866,7 +866,7 @@ 重新訂閱 要繼續用您的訂閱增值?您可以在現在的訂閱結束前開始新的訂閱,就能繼續使用。 贈送了 - 節省20% + 節省20% 訂閱獎金 團隊計劃 你免費訂閱,因為您是擁有團隊計劃的隊伍或公會的成員。如果你離開了小組,或擁有者取消團隊計劃,訂閱便會被取消。你購買的訂閱會加在團隊計劃後。 @@ -1024,7 +1024,7 @@ 孵化寵物 孵化 刪除挑戰任務? - 這是%d個挑戰任務之一,屬於“%s”挑戰。你必須先退出挑戰才能刪除這個任務。 + 這是%1$d個挑戰任務之一,屬於“%2$s”挑戰。你必須先退出挑戰才能刪除這個任務。 退出挑戰並刪除任務 退出挑戰並刪除%d個任務 已損壞的挑戰 diff --git a/Habitica/res/values-zh/strings.xml b/Habitica/res/values-zh/strings.xml index 2695a3ad9..dca7f5d29 100644 --- a/Habitica/res/values-zh/strings.xml +++ b/Habitica/res/values-zh/strings.xml @@ -764,25 +764,25 @@ 举行派对 你得到了成就! 看成就 - 你打开包装盒并收到一个%s - %s已从群组中删除 + 你打开包装盒并收到一个%s + %s已从群组中删除 来看新闻 转让 你想将%s从队伍中移除吗? %s会变成新的队长 转让所有权? - 领导权已转移到%s + 领导权已转移到%s 发送私信 删除会员 转让所有权 去掉 - 你收到了 %d 条消息 - 你收到了 %1$d 条消息来自 %2$s - 你发送了%s + 你收到了 %d 条消息 + 你收到了 %1$d 条消息来自 %2$s + 你发送了%s 应用主题 分享挑战与 细节 - 创建%s + 创建%s 新任务 确认删除 切换到网格视图 @@ -828,7 +828,7 @@ 来自未加入的公会的提醒 复制用户ID 已将用户ID复制到剪贴板 - 您的密码长度至少为%d个字符 + 您的密码长度至少为%d个字符 复制用户名 %s邀请你加入他们的小组%s 有人 @@ -846,7 +846,7 @@ 更新订阅 重新订阅 要继续用您的订阅增值?您可以在现在的订阅结束前开始新的订阅,就能继续使用。 - 节省20% + 节省20% 赠送了 你送给%s一些宝石。 你送给%s一个%s个月的Habitica订阅。 @@ -903,7 +903,7 @@ 签到%d次 定期登录Habitica 邀请朋友 - 通过在Habitica签到%d次来解锁。 + 通过在Habitica签到%d次来解锁。 剩余1小时 剩余%dh小时 剩余1分钟 @@ -1067,7 +1067,7 @@ 已损坏的挑战 退出挑战并删除%d个任务 退出挑战并删除任务 - 这是%d个挑战任务之一,属于“%s”挑战。你必须先退出挑战才能删除这个任务。 + 这是%1$d个挑战任务之一,属于“%2$s”挑战。你必须先退出挑战才能删除这个任务。 删除挑战任务? 孵化 孵化宠物 diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index f3423f17f..c70456b6e 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -1078,7 +1078,7 @@ Hatch your Pet Hatch Delete Challenge Task? - This is one of %d tasks that are part of the “%s” Challenge. You must leave the Challenge to delete this task. + This is one of %1$d tasks that are part of the “%2$s” Challenge. You must leave the Challenge to delete this task. Leave & Delete Task Leave & Delete %d Tasks Broken Challenge 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 eb7ebf3bc..6913bfa49 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,7 +21,7 @@ constructor(private val soundManager: SoundManager, threadExecutor: ThreadExecut override fun buildUseCaseObservable(requestValues: RequestValues): Flowable { return Flowable.defer { val data = requestValues.data - var snackbarText = StringBuilder(data?.drop?.dialog ?: "") + val snackbarText = StringBuilder(data?.drop?.dialog ?: "") if (data?.questItemsFound ?: 0 > 0 && requestValues.showQuestItems) { if (snackbarText.isNotEmpty()) @@ -32,7 +32,7 @@ constructor(private val soundManager: SoundManager, threadExecutor: ThreadExecut if (snackbarText.isNotEmpty()) { Handler().postDelayed({ HabiticaSnackbar.showSnackbar(requestValues.snackbarTargetView, - snackbarText, HabiticaSnackbar.SnackbarDisplayType.DROP) + snackbarText, HabiticaSnackbar.SnackbarDisplayType.DROP, true) soundManager.loadAndPlayAudio(SoundManager.SoundItemDrop) }, 3000L) } 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 2f414a9b6..a3927feaf 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 @@ -96,7 +96,7 @@ class ChallengeFormActivity : BaseActivity() { if (groupID != null) { c.groupId = groupID } else { - if (locationAdapter.count > locationPos) { + if (locationAdapter.count > locationPos && locationPos >= 0) { val locationGroup = locationAdapter.getItem(locationPos) if (locationGroup != null) { c.groupId = locationGroup.id 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 b2c156c54..1c33f8101 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 @@ -29,10 +29,7 @@ import com.google.android.gms.auth.GoogleAuthException import com.google.android.gms.auth.GoogleAuthUtil import com.google.android.gms.auth.GooglePlayServicesAvailabilityException import com.google.android.gms.auth.UserRecoverableAuthException -import com.google.android.gms.common.ConnectionResult -import com.google.android.gms.common.GoogleApiAvailability -import com.google.android.gms.common.GooglePlayServicesUtil -import com.google.android.gms.common.Scopes +import com.google.android.gms.common.* import com.google.firebase.analytics.FirebaseAnalytics import com.habitrpg.android.habitica.BuildConfig import com.habitrpg.android.habitica.HabiticaBaseApplication @@ -421,6 +418,9 @@ class LoginActivity : BaseActivity(), Consumer { } catch (e: GoogleAuthException) { throw Exceptions.propagate(e) } + catch (e: UserRecoverableException) { + return@defer Flowable.empty() + } } .subscribeOn(Schedulers.io()) .flatMap { token -> apiClient.connectSocial("google", googleEmail ?: "", token) } 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 9ebd4d9f5..b06d16c05 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 @@ -185,6 +185,7 @@ class TaskFormActivity : BaseActivity() { taskId != null -> { isCreating = false compositeSubscription.add(taskRepository.getUnmanagedTask(taskId).firstElement().subscribe({ + if (!it.isValid) return@subscribe task = it //tintColor = ContextCompat.getColor(this, it.mediumTaskColor) fillForm(it) 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 fc2f38ecc..dbbf46c01 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 @@ -189,8 +189,10 @@ class ChallengeDetailFragment: BaseMainFragment( val uriUrl = "https://habitica.com/challenges/${challengeID}".toUri() val launchBrowser = Intent(Intent.ACTION_VIEW, uriUrl) val l = context.packageManager.queryIntentActivities(launchBrowser, PackageManager.MATCH_DEFAULT_ONLY) - val notHabitica = l.first { !it.activityInfo.processName.contains("habitica") } - launchBrowser.setPackage(notHabitica.activityInfo.processName) + val notHabitica = l.firstOrNull { !it.activityInfo.processName.contains("habitica") } + if (notHabitica != null) { + launchBrowser.setPackage(notHabitica.activityInfo.processName) + } startActivity(launchBrowser) } dialog.addCloseButton() diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/AutocompleteAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/AutocompleteAdapter.kt index f7e067b70..fe5a77b90 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/AutocompleteAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/AutocompleteAdapter.kt @@ -101,8 +101,8 @@ class AutocompleteAdapter(val context: Context, val socialRepository: SocialRepo } ?: View(context) } - override fun getItem(position: Int): Any { - return if (isAutocompletingUsers) userResults[position] else emojiResults[position] + override fun getItem(position: Int): Any? { + return if (isAutocompletingUsers) userResults.getOrNull(position) else emojiResults.getOrNull(position) } override fun getItemId(position: Int): Long { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaSnackbar.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaSnackbar.kt index 1f7f14724..792af4051 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaSnackbar.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaSnackbar.kt @@ -1,18 +1,19 @@ package com.habitrpg.android.habitica.ui.views import android.graphics.drawable.Drawable +import android.view.Gravity import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.ImageView -import android.widget.LinearLayout -import android.widget.TextView +import android.view.animation.AccelerateInterpolator +import android.widget.* import androidx.annotation.ColorInt import androidx.core.content.ContextCompat import androidx.core.view.ViewCompat import com.google.android.material.snackbar.BaseTransientBottomBar import com.google.android.material.snackbar.Snackbar import com.habitrpg.android.habitica.R +import com.plattysoft.leonids.ParticleSystem class HabiticaSnackbar /** @@ -117,24 +118,24 @@ private constructor(parent: ViewGroup, content: View, callback: ContentViewCallb } - fun showSnackbar(container: ViewGroup, content: CharSequence?, displayType: SnackbarDisplayType) { - showSnackbar(container, null, null, content, null, null, 0, null, displayType) + fun showSnackbar(container: ViewGroup, content: CharSequence?, displayType: SnackbarDisplayType, isCelebratory: Boolean = false) { + showSnackbar(container, null, null, content, null, null, 0, null, displayType, isCelebratory) } - fun showSnackbar(container: ViewGroup, leftImage: Drawable, title: CharSequence?, content: CharSequence?, displayType: SnackbarDisplayType) { - showSnackbar(container, leftImage, title, content, null, null, 0, null, displayType) + fun showSnackbar(container: ViewGroup, leftImage: Drawable, title: CharSequence?, content: CharSequence?, displayType: SnackbarDisplayType, isCelebratory: Boolean = false) { + showSnackbar(container, leftImage, title, content, null, null, 0, null, displayType, isCelebratory) } - fun showSnackbar(container: ViewGroup, title: CharSequence?, content: CharSequence?, rightIcon: Drawable, rightTextColor: Int, rightText: String, displayType: SnackbarDisplayType) { - showSnackbar(container, null, title, content, null, rightIcon, rightTextColor, rightText, displayType) + fun showSnackbar(container: ViewGroup, title: CharSequence?, content: CharSequence?, rightIcon: Drawable, rightTextColor: Int, rightText: String, displayType: SnackbarDisplayType, isCelebratory: Boolean = false) { + showSnackbar(container, null, title, content, null, rightIcon, rightTextColor, rightText, displayType, isCelebratory) } - fun showSnackbar(container: ViewGroup, title: CharSequence?, content: CharSequence?, specialView: View?, displayType: SnackbarDisplayType) { - showSnackbar(container, null, title, content, specialView, null, 0, null, displayType) + fun showSnackbar(container: ViewGroup, title: CharSequence?, content: CharSequence?, specialView: View?, displayType: SnackbarDisplayType, isCelebratory: Boolean = false) { + showSnackbar(container, null, title, content, specialView, null, 0, null, displayType, isCelebratory) } - fun showSnackbar(container: ViewGroup, leftImage: Drawable?, title: CharSequence?, content: CharSequence?, specialView: View?, rightIcon: Drawable?, rightTextColor: Int, rightText: String?, displayType: SnackbarDisplayType) { + fun showSnackbar(container: ViewGroup, leftImage: Drawable?, title: CharSequence?, content: CharSequence?, specialView: View?, rightIcon: Drawable?, rightTextColor: Int, rightText: String?, displayType: SnackbarDisplayType, isCelebratory: Boolean = false) { val snackbar = make(container, Snackbar.LENGTH_LONG) .setTitle(title) .setText(content) @@ -150,6 +151,35 @@ private constructor(parent: ViewGroup, content: View, callback: ContentViewCallb } snackbar.show() + + if (isCelebratory) { + container.postDelayed({ + ParticleSystem(container, 30, ContextCompat.getDrawable(container.context, R.drawable.confetti_blue), 6000) + .setAcceleration(0.00020f, 90) + .setRotationSpeed(144f) + .setSpeedByComponentsRange(-0.15f, 0.15f, -0.15f, -0.45f) + .setFadeOut(200, AccelerateInterpolator()) + .emitWithGravity(container, Gravity.BOTTOM, 7, 2000) + ParticleSystem(container, 30, ContextCompat.getDrawable(container.context, R.drawable.confetti_red), 6000) + .setAcceleration(0.00030f, 90) + .setRotationSpeed(144f) + .setSpeedByComponentsRange(-0.15f, 0.15f, -0.15f, -0.45f) + .setFadeOut(200, AccelerateInterpolator()) + .emitWithGravity(container, Gravity.BOTTOM, 7, 2000) + ParticleSystem(container, 30, ContextCompat.getDrawable(container.context, R.drawable.confetti_yellow), 6000) + .setAcceleration(0.00020f, 90) + .setRotationSpeed(144f) + .setSpeedByComponentsRange(-0.15f, 0.15f, -0.15f, -0.45f) + .setFadeOut(200, AccelerateInterpolator()) + .emitWithGravity(container, Gravity.BOTTOM, 7, 2000) + ParticleSystem(container, 30, ContextCompat.getDrawable(container.context, R.drawable.confetti_purple), 6000) + .setAcceleration(0.00030f, 90) + .setRotationSpeed(144f) + .setSpeedByComponentsRange(-0.15f, 0.15f, -0.15f, -0.45f) + .setFadeOut(200, AccelerateInterpolator()) + .emitWithGravity(container, Gravity.BOTTOM, 7, 2000) + }, 500) + } } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/HabiticaAlertDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/HabiticaAlertDialog.kt index 8710eda28..92cc48cee 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/HabiticaAlertDialog.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/HabiticaAlertDialog.kt @@ -278,7 +278,7 @@ open class HabiticaAlertDialog(context: Context) : AlertDialog(context, R.style. } } - window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) + window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN) } companion object { @@ -292,7 +292,7 @@ open class HabiticaAlertDialog(context: Context) : AlertDialog(context, R.style. if ((dialogQueue[0].context as? Activity)?.isFinishing != true) { GlobalScope.launch(context = Dispatchers.Main) { delay(500L) - if (dialogQueue.size > 0 && (dialogQueue[0].context as? Activity)?.isFinishing != true) { + if (dialogQueue.size > 0 && (dialogQueue[0].context as? Activity)?.isFinishing == false) { dialogQueue[0].show() } }