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()
}
}