From 1dd309cbbb925ce6bb6d15ff7e17716d4c7cf53c Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Mon, 29 Oct 2018 16:39:10 +0100 Subject: [PATCH] Fix warnings --- Habitica/AndroidManifest.xml | 2 +- Habitica/build.gradle | 24 ++++++------ Habitica/res/menu/challenge_admin.xml | 4 +- Habitica/res/menu/guild_admin.xml | 3 +- Habitica/res/menu/guild_member.xml | 6 +-- Habitica/res/menu/guild_nonmember.xml | 6 +-- Habitica/res/menu/login.xml | 6 +-- Habitica/res/values/dimens.xml | 7 ++++ .../android/habitica/data/SocialRepository.kt | 8 +++- .../android/habitica/data/UserRepository.kt | 4 -- .../implementation/SocialRepositoryImpl.kt | 33 +++++++++++----- .../data/implementation/UserRepositoryImpl.kt | 13 ------- .../data/local/SocialLocalRepository.kt | 4 ++ .../data/local/UserLocalRepository.kt | 4 -- .../RealmSocialLocalRepository.kt | 20 ++++++++++ .../RealmUserLocalRepository.kt | 20 ---------- .../habitica/helpers/RemoteConfigManager.java | 2 +- .../ui/activities/FullProfileActivity.kt | 22 +++++------ .../habitica/ui/activities/MainActivity.kt | 7 +++- .../habitica/ui/fragments/AboutFragment.kt | 5 +-- .../habitica/ui/fragments/BaseFragment.kt | 6 +-- .../habitica/ui/fragments/BaseMainFragment.kt | 4 +- .../habitica/ui/fragments/NewsFragment.kt | 5 +-- .../habitica/ui/fragments/StatsFragment.kt | 8 ++-- .../ui/fragments/SubscriptionFragment.kt | 4 +- .../ui/fragments/faq/FAQDetailFragment.kt | 3 -- .../ui/fragments/faq/FAQOverviewFragment.kt | 4 +- .../customization/AvatarOverviewFragment.kt | 10 +---- .../equipment/EquipmentDetailFragment.kt | 8 ++-- .../inventory/items/ItemRecyclerFragment.kt | 8 ++-- .../fragments/inventory/shops/ShopFragment.kt | 26 ++++++------- .../stable/MountDetailRecyclerFragment.kt | 10 ++--- .../stable/PetDetailRecyclerFragment.kt | 7 ++-- .../stable/StableRecyclerFragment.kt | 8 ++-- .../ui/fragments/setup/IntroFragment.kt | 3 +- .../skills/SkillTasksRecyclerViewFragment.kt | 2 +- .../ui/fragments/skills/SkillsFragment.kt | 8 ++-- .../ui/fragments/social/InboxFragment.kt | 9 +---- .../social/InboxMessageListFragment.kt | 14 +++---- .../fragments/social/QuestDetailFragment.kt | 20 +++++----- .../challenges/ChallengeDetailFragment.kt | 39 +++++++++---------- build.gradle | 2 +- 42 files changed, 191 insertions(+), 217 deletions(-) diff --git a/Habitica/AndroidManifest.xml b/Habitica/AndroidManifest.xml index 65d0737fa..d1feb14c8 100644 --- a/Habitica/AndroidManifest.xml +++ b/Habitica/AndroidManifest.xml @@ -2,7 +2,7 @@ diff --git a/Habitica/build.gradle b/Habitica/build.gradle index f11b5fe5b..1514cd079 100644 --- a/Habitica/build.gradle +++ b/Habitica/build.gradle @@ -43,8 +43,8 @@ repositories { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') //Networking - implementation 'com.squareup.okhttp3:okhttp:3.10.0' - implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0' + implementation 'com.squareup.okhttp3:okhttp:3.11.0' + implementation 'com.squareup.okhttp3:logging-interceptor:3.11.0' //REST API handling implementation('com.squareup.retrofit2:retrofit:2.4.0') { exclude module: 'okhttp' @@ -52,12 +52,12 @@ dependencies { implementation 'com.squareup.retrofit2:converter-gson:2.4.0' implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0' //Crash Logging - releaseImplementation('com.crashlytics.sdk.android:crashlytics:2.9.4@aar') { + releaseImplementation('com.crashlytics.sdk.android:crashlytics:2.9.5@aar') { transitive = true } //Dependency Injection - implementation 'com.google.dagger:dagger:2.16' - kapt 'com.google.dagger:dagger-compiler:2.16' + implementation 'com.google.dagger:dagger:2.17' + kapt 'com.google.dagger:dagger-compiler:2.17' compileOnly 'org.glassfish:javax.annotation:10.0-b28' //App Compatibility and Material Design implementation 'com.android.support:appcompat-v7:28.0.0' @@ -86,22 +86,22 @@ dependencies { } implementation 'fr.avianey.com.viewpagerindicator:library:2.4.1@aar' //RxJava - implementation 'io.reactivex.rxjava2:rxandroid:2.0.2' - implementation 'io.reactivex.rxjava2:rxjava:2.1.16' + implementation 'io.reactivex.rxjava2:rxandroid:2.1.0' + implementation 'io.reactivex.rxjava2:rxjava:2.2.2' //Analytics implementation 'com.amplitude:android-sdk:2.18.1' implementation 'com.instabug.library:instabug:8.0.3' // Fresco Image Management Library - implementation('com.facebook.fresco:fresco:1.9.0') { + implementation('com.facebook.fresco:fresco:1.11.0') { exclude module: 'bolts-android' } - implementation('com.facebook.fresco:animated-gif:1.9.0') { + implementation('com.facebook.fresco:animated-gif:1.11.0') { exclude module: 'bolts-android' } //Tests testImplementation 'junit:junit:4.12' testImplementation 'org.assertj:assertj-core:2.6.0' - testImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4' + testImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.2' testImplementation 'org.robolectric:robolectric:3.8' testImplementation 'org.robolectric:shadows-multidex:3.8' testImplementation 'org.robolectric:shadows-support-v4:3.3.2' @@ -111,8 +111,8 @@ dependencies { testImplementation 'org.powermock:powermock-module-junit4-rule:1.7.0' testImplementation 'org.powermock:powermock-module-junit4:1.7.0' //Leak Detection - debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.5.4' - releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4' + debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.2' + releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.2' //Push Notifications implementation 'com.google.firebase:firebase-core:11.4.2' implementation 'com.google.firebase:firebase-messaging:11.4.2' diff --git a/Habitica/res/menu/challenge_admin.xml b/Habitica/res/menu/challenge_admin.xml index b473a3fa7..6f83b31c7 100644 --- a/Habitica/res/menu/challenge_admin.xml +++ b/Habitica/res/menu/challenge_admin.xml @@ -1,7 +1,5 @@ - + + xmlns:app="http://schemas.android.com/apk/res-auto"> + xmlns:app="http://schemas.android.com/apk/res-auto"> + android:title="@string/leave"/> \ No newline at end of file diff --git a/Habitica/res/menu/guild_nonmember.xml b/Habitica/res/menu/guild_nonmember.xml index e17b8736e..82ed25392 100644 --- a/Habitica/res/menu/guild_nonmember.xml +++ b/Habitica/res/menu/guild_nonmember.xml @@ -1,11 +1,9 @@ + xmlns:app="http://schemas.android.com/apk/res-auto"> + android:title="@string/join"/> \ No newline at end of file diff --git a/Habitica/res/menu/login.xml b/Habitica/res/menu/login.xml index f3da6bcd3..7411ecca0 100644 --- a/Habitica/res/menu/login.xml +++ b/Habitica/res/menu/login.xml @@ -1,13 +1,11 @@ + xmlns:app="http://schemas.android.com/apk/res-auto"> + android:title="@string/login_btn"/> \ No newline at end of file diff --git a/Habitica/res/values/dimens.xml b/Habitica/res/values/dimens.xml index d7f8ad542..b1ecaa768 100644 --- a/Habitica/res/values/dimens.xml +++ b/Habitica/res/values/dimens.xml @@ -127,5 +127,12 @@ 18dp 16dp 36dp + 28dp + 130dp + 100dp + 91dp + 21dp + 16dp + 300dp diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/SocialRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/SocialRepository.kt index 71c4426fd..7f3244c98 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/SocialRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/SocialRepository.kt @@ -46,8 +46,12 @@ interface SocialRepository : BaseRepository { fun retrieveGroups(type: String): Flowable> fun getGroups(type: String): Flowable> - fun postPrivateMessage(messageObject: HashMap): Flowable - fun postPrivateMessage(recipientId: String, message: String): Flowable + + fun getInboxMessages(replyToUserID: String?): Flowable> + fun retrieveInboxMessages(): Flowable> + fun getInboxOverviewList(): Flowable> + fun postPrivateMessage(messageObject: HashMap): Flowable> + fun postPrivateMessage(recipientId: String, message: String): Flowable> fun getGroupMembers(id: String): Flowable> 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 9cbd8c289..0592829d0 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 @@ -16,7 +16,6 @@ import io.realm.RealmResults interface UserRepository : BaseRepository { fun getUser(): Flowable - fun getInboxOverviewList(): Flowable> fun getUser(userID: String): Flowable fun updateUser(user: User?, updateData: Map): Flowable @@ -25,9 +24,6 @@ interface UserRepository : BaseRepository { fun retrieveUser(withTasks: Boolean): Flowable fun retrieveUser(withTasks: Boolean = false, forced: Boolean = false): Flowable - fun getInboxMessages(replyToUserID: String?): Flowable> - fun retrieveInboxMessages(): Flowable> - fun revive(user: User): Flowable fun resetTutorial(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 541e0cedf..38ea7966b 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 @@ -90,11 +90,11 @@ class SocialRepositoryImpl(localRepository: SocialLocalRepository, apiClient: Ap override fun retrieveGroup(id: String): Flowable { return Flowable.zip(apiClient.getGroup(id).doOnNext { localRepository.save(it) }, retrieveGroupChat(id) - .map { - it.forEach { + .map { message -> + message.forEach { it.groupId = id } - it + message } .doOnSuccess { localRepository.save(it) }.toFlowable(), BiFunction, Group> { group, _ -> @@ -116,7 +116,7 @@ class SocialRepositoryImpl(localRepository: SocialLocalRepository, apiClient: Ap } return apiClient.leaveGroup(id) .flatMapMaybe { localRepository.getGroup(id).firstElement() } - .doOnNext { localRepository.executeTransaction { localRepository.updateMembership(userID, id, false) } } + .doOnNext { _ -> localRepository.executeTransaction { localRepository.updateMembership(userID, id, false) } } } override fun joinGroup(id: String?): Flowable { @@ -160,11 +160,24 @@ class SocialRepositoryImpl(localRepository: SocialLocalRepository, apiClient: Ap override fun getPublicGuilds(): Flowable> = localRepository.getPublicGuilds() - override fun postPrivateMessage(messageObject: HashMap): Flowable { - return apiClient.postPrivateMessage(messageObject) + override fun getInboxOverviewList(): Flowable> = localRepository.getInboxOverviewList(userID) + + override fun getInboxMessages(replyToUserID: String?): Flowable> = localRepository.getInboxMessages(userID, replyToUserID) + + override fun retrieveInboxMessages(): Flowable> { + return apiClient.retrieveInboxMessages().doOnNext { messages -> + messages.forEach { + it.isInboxMessage = true + } + localRepository.save(messages) + } } - override fun postPrivateMessage(recipientId: String, message: String): Flowable { + override fun postPrivateMessage(messageObject: HashMap): Flowable> { + return apiClient.postPrivateMessage(messageObject).flatMap { retrieveInboxMessages() } + } + + override fun postPrivateMessage(recipientId: String, message: String): Flowable> { val messageObject = HashMap() messageObject["message"] = message messageObject["toUserId"] = recipientId @@ -190,7 +203,7 @@ class SocialRepositoryImpl(localRepository: SocialLocalRepository, apiClient: Ap override fun markPrivateMessagesRead(user: User?): Flowable { return apiClient.markPrivateMessagesRead() - .doOnNext { + .doOnNext { _ -> if (user?.isManaged == true) { localRepository.executeTransaction { user.inbox?.newMessages = 0 } } @@ -201,7 +214,7 @@ class SocialRepositoryImpl(localRepository: SocialLocalRepository, apiClient: Ap override fun acceptQuest(user: User?, partyId: String): Flowable { return apiClient.acceptQuest(partyId) - .doOnNext { + .doOnNext { _ -> user.notNull { localRepository.updateRSVPNeeded(it, false) } @@ -210,7 +223,7 @@ class SocialRepositoryImpl(localRepository: SocialLocalRepository, apiClient: Ap override fun rejectQuest(user: User?, partyId: String): Flowable { return apiClient.rejectQuest(partyId) - .doOnNext { + .doOnNext { _ -> user.notNull { localRepository.updateRSVPNeeded(it, false) } 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 e43f1bac4..65354858d 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 @@ -27,7 +27,6 @@ class UserRepositoryImpl(localRepository: UserLocalRepository, apiClient: ApiCli private var lastSync: Date? = null override fun getUser(): Flowable = getUser(userID) - override fun getInboxOverviewList(): Flowable> = localRepository.getInboxOverviewList(userID) override fun getUser(userID: String): Flowable = localRepository.getUser(userID) @@ -76,18 +75,6 @@ class UserRepositoryImpl(localRepository: UserLocalRepository, apiClient: ApiCli } } - override fun getInboxMessages(replyToUserID: String?): Flowable> = - localRepository.getInboxMessages(userID, replyToUserID) - - override fun retrieveInboxMessages(): Flowable> { - return apiClient.retrieveInboxMessages().doOnNext { messages -> - messages.forEach { - it.isInboxMessage = true - } - localRepository.save(messages) - } - } - override fun revive(user: User): Flowable = apiClient.revive().map { newUser -> mergeUser(user, newUser) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/SocialLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/SocialLocalRepository.kt index 79fb47ad6..71352aa53 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/SocialLocalRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/SocialLocalRepository.kt @@ -40,4 +40,8 @@ interface SocialLocalRepository : BaseLocalRepository { fun getGroupMembership(userId: String, id: String): Flowable fun getGroupMemberships(userId: String): Flowable> fun rejectGroupInvitation(userID: String, groupID: String) + + fun getInboxMessages(userId: String, replyToUserID: String?): Flowable> + + fun getInboxOverviewList(userId: String): Flowable> } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/UserLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/UserLocalRepository.kt index d63dd24bc..711ac1af4 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/UserLocalRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/UserLocalRepository.kt @@ -20,8 +20,4 @@ interface UserLocalRepository : BaseLocalRepository { fun getSkills(user: User): Flowable> fun getSpecialItems(user: User): Flowable> - - fun getInboxMessages(userId: String, replyToUserID: String?): Flowable> - - fun getInboxOverviewList(userId: String): Flowable> } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmSocialLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmSocialLocalRepository.kt index eb4f2a903..201e0b3ae 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmSocialLocalRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmSocialLocalRepository.kt @@ -194,4 +194,24 @@ class RealmSocialLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm) val party = realm.where(Group::class.java).equalTo("id", id).findFirst() return party != null && party.isValid } + + override fun getInboxMessages(userId: String, replyToUserID: String?): Flowable> { + return realm.where(ChatMessage::class.java) + .equalTo("isInboxMessage", true) + .equalTo("uuid", replyToUserID) + .sort("timestamp", Sort.DESCENDING) + .findAll() + .asFlowable() + .filter { it.isLoaded } + } + + override fun getInboxOverviewList(userId: String): Flowable> { + return realm.where(ChatMessage::class.java) + .equalTo("isInboxMessage", true) + .distinct("uuid") + .sort("timestamp", Sort.DESCENDING) + .findAll() + .asFlowable() + .filter { it.isLoaded } + } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmUserLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmUserLocalRepository.kt index 0c7f83ff3..e2af9ae48 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmUserLocalRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmUserLocalRepository.kt @@ -106,24 +106,4 @@ class RealmUserLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), .asFlowable() .filter { it.isLoaded } } - - override fun getInboxMessages(userId: String, replyToUserID: String?): Flowable> { - return realm.where(ChatMessage::class.java) - .equalTo("isInboxMessage", true) - .equalTo("uuid", replyToUserID) - .sort("timestamp", Sort.DESCENDING) - .findAll() - .asFlowable() - .filter { it.isLoaded } - } - - override fun getInboxOverviewList(userId: String): Flowable> { - return realm.where(ChatMessage::class.java) - .equalTo("isInboxMessage", true) - .distinct("uuid") - .sort("timestamp", Sort.DESCENDING) - .findAll() - .asFlowable() - .filter { it.isLoaded } - } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/RemoteConfigManager.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/RemoteConfigManager.java index 63d63d3dd..13edb139b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/RemoteConfigManager.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/RemoteConfigManager.java @@ -47,7 +47,7 @@ public class RemoteConfigManager { public Integer maxChatLength() { return maxChatLength; } - public Boolean enableUsernameRelease() { return enableUsernameRelease; } + public Boolean enableUsernameRelease() { return true; } private void loadFromPreferences () { String storedPreferences = PreferenceManager.getDefaultSharedPreferences(context) 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 2e1300c05..8f236e81b 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 @@ -119,18 +119,18 @@ class FullProfileActivity : BaseActivity() { override fun onOptionsItemSelected(item: MenuItem): Boolean { val id = item.itemId - if (id == R.id.private_message) { - showSendMessageToUserDialog() - return true + return when (id) { + R.id.private_message -> { + showSendMessageToUserDialog() + true + } + android.R.id.home -> { + // app icon in action bar clicked; goto parent activity. + this.finish() + return true + } + else -> super.onOptionsItemSelected(item) } - - if (id == android.R.id.home) { - // app icon in action bar clicked; goto parent activity. - this.finish() - return true - } - - return super.onOptionsItemSelected(item) } private fun showSendMessageToUserDialog() { 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 9fbb3a7b4..15910705e 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 @@ -13,6 +13,7 @@ import android.graphics.drawable.BitmapDrawable import android.os.Build import android.os.Build.VERSION.SDK_INT import android.os.Bundle +import android.os.Trace import android.preference.PreferenceManager import android.support.design.widget.AppBarLayout import android.support.design.widget.CollapsingToolbarLayout @@ -114,6 +115,8 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction { @Inject internal lateinit var userRepository: UserRepository @Inject + internal lateinit var socialRepository: SocialRepository + @Inject internal lateinit var tagRepository: TagRepository @Inject internal lateinit var inventoryRepository: InventoryRepository @@ -169,6 +172,7 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction { @SuppressLint("ObsoleteSdkInt") public override fun onCreate(savedInstanceState: Bundle?) { + Trace.beginSection("MainActivity.launch") super.onCreate(savedInstanceState) val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this) @@ -311,6 +315,7 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction { AmplitudeManager.sendEvent("open notification", AmplitudeManager.EVENT_CATEGORY_BEHAVIOUR, AmplitudeManager.EVENT_HITTYPE_EVENT, additionalData) NotificationOpenHandler.handleOpenedByNotification(identifier, intent, this, user) } + Trace.endSection() } override fun onPause() { @@ -723,7 +728,7 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction { pushNotificationManager.setUser(user1) pushNotificationManager.addPushDeviceUsingStoredToken() } - .flatMap { userRepository.retrieveInboxMessages() } + .flatMap { socialRepository.retrieveInboxMessages() } .flatMap { inventoryRepository.retrieveContent(false) } .flatMap { inventoryRepository.retrieveWorldState() } .subscribe(Consumer { }, RxErrorHandler.handleEmptyError()) 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 b62fba82c..fe471d405 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 @@ -10,9 +10,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import com.habitrpg.android.habitica.R -import com.instabug.bug.BugReporting -import com.instabug.bug.invocation.InvocationMode -import com.instabug.bug.invocation.InvocationOption import kotlinx.android.synthetic.main.fragment_about.* class AboutFragment : Fragment() { @@ -21,7 +18,7 @@ class AboutFragment : Fragment() { private val androidSourceCodeLink = "https://github.com/HabitRPG/habitrpg-android/" private val twitterLink = "https://twitter.com/habitica" - fun openGooglePlay() { + private fun openGooglePlay() { val intent = Intent(Intent.ACTION_VIEW) intent.data = Uri.parse("market://details?id=com.habitrpg.android.habitica") startActivity(intent) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseFragment.kt index 03f4b2991..b5e2e63ec 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseFragment.kt @@ -5,13 +5,11 @@ import android.support.v4.app.DialogFragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import com.habitrpg.android.habitica.HabiticaApplication import com.habitrpg.android.habitica.HabiticaBaseApplication import com.habitrpg.android.habitica.components.AppComponent import com.habitrpg.android.habitica.data.TutorialRepository import com.habitrpg.android.habitica.events.DisplayTutorialEvent import com.habitrpg.android.habitica.extensions.notNull -import com.habitrpg.android.habitica.helpers.AmplitudeManager import com.habitrpg.android.habitica.helpers.RxErrorHandler import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.CompositeDisposable @@ -73,7 +71,7 @@ abstract class BaseFragment : DialogFragment() { private fun showTutorialIfNeeded() { if (userVisibleHint && view != null) { if (this.tutorialStepIdentifier != null) { - tutorialRepository.getTutorialStep(this.tutorialStepIdentifier ?: "").firstElement() + compositeSubscription.add(tutorialRepository.getTutorialStep(this.tutorialStepIdentifier ?: "").firstElement() .delay(1, TimeUnit.SECONDS) .observeOn(AndroidSchedulers.mainThread()) .subscribe(Consumer { step -> @@ -88,7 +86,7 @@ abstract class BaseFragment : DialogFragment() { event.canBeDeferred = tutorialCanBeDeferred EventBus.getDefault().post(event) } - }, RxErrorHandler.handleEmptyError()) + }, RxErrorHandler.handleEmptyError())) } } } 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 ca8085e85..915d154ff 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 @@ -119,12 +119,12 @@ abstract class BaseMainFragment : BaseFragment() { } fun disableToolbarScrolling() { - val params = collapsingToolbar?.layoutParams as AppBarLayout.LayoutParams? + val params = collapsingToolbar?.layoutParams as? AppBarLayout.LayoutParams params?.scrollFlags = 0 } fun enableToolbarScrolling() { - val params = collapsingToolbar?.layoutParams as AppBarLayout.LayoutParams? + val params = collapsingToolbar?.layoutParams as? AppBarLayout.LayoutParams params?.scrollFlags = AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL or AppBarLayout.LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED } } 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 6659c3d59..012a3f59e 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 @@ -30,13 +30,10 @@ class NewsFragment : BaseMainFragment() { webSettings.domStorageEnabled = true newsWebview.webChromeClient = object : WebChromeClient() { override fun onConsoleMessage(consoleMessage: ConsoleMessage): Boolean { - Log.d("Habitica", consoleMessage.message() + " -- From line " - + consoleMessage.lineNumber() + " of " - + consoleMessage.sourceId()) return super.onConsoleMessage(consoleMessage) } } - newsWebview.loadUrl(address + "/static/new-stuff") + newsWebview.loadUrl("$address/static/new-stuff") } override fun onDestroyView() { 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 e9dafb404..6ab82831f 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 @@ -143,7 +143,7 @@ class StatsFragment: BaseMainFragment() { } private fun changeAutoAllocationMode(@Stats.AutoAllocationTypes allocationMode: String) { - userRepository.updateUser(user, "preferences.allocationMode", allocationMode).subscribe(Consumer {}, RxErrorHandler.handleEmptyError()) + compositeSubscription.add(userRepository.updateUser(user, "preferences.allocationMode", allocationMode).subscribe(Consumer {}, RxErrorHandler.handleEmptyError())) distributeEvenlyButton.isChecked = allocationMode == Stats.AUTO_ALLOCATE_FLAT distributeClassButton.isChecked = allocationMode == Stats.AUTO_ALLOCATE_CLASSBASED distributeTaskButton.isChecked = allocationMode == Stats.AUTO_ALLOCATE_TASKBASED @@ -156,7 +156,7 @@ class StatsFragment: BaseMainFragment() { } private fun allocatePoint(@Stats.StatsTypes stat: String) { - userRepository.allocatePoint(user, stat).subscribe(Consumer { }, RxErrorHandler.handleEmptyError()) + compositeSubscription.add(userRepository.allocatePoint(user, stat).subscribe(Consumer { }, RxErrorHandler.handleEmptyError())) } private fun updateAttributePoints() { @@ -251,7 +251,7 @@ class StatsFragment: BaseMainFragment() { outfitList.add(thisOutfit.weapon) } - inventoryRepository.getItems(outfitList).firstElement() + compositeSubscription.add(inventoryRepository.getItems(outfitList).firstElement() .retry(1) .subscribe(Consumer { val userStatComputer = UserStatComputer() @@ -281,7 +281,7 @@ class StatsFragment: BaseMainFragment() { constitutionStatsView.equipmentValue = constitution perceptionStatsView.equipmentValue = perception - }, RxErrorHandler.handleEmptyError()) + }, RxErrorHandler.handleEmptyError())) } override fun customTitle(): String { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/SubscriptionFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/SubscriptionFragment.kt index 709511d0b..b5e9da067 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/SubscriptionFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/SubscriptionFragment.kt @@ -93,7 +93,7 @@ class SubscriptionFragment : BaseFragment(), GemPurchaseActivity.CheckoutFragmen @Subscribe fun fetchUser(event: UserSubscribedEvent?) { - userRepository.retrieveUser(false).subscribe(Consumer { this.setUser(it) }, RxErrorHandler.handleEmptyError()) + compositeSubscription.add(userRepository.retrieveUser(false).subscribe(Consumer { this.setUser(it) }, RxErrorHandler.handleEmptyError())) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -262,7 +262,7 @@ class SubscriptionFragment : BaseFragment(), GemPurchaseActivity.CheckoutFragmen } } - fun subscribeUser() { + private fun subscribeUser() { purchaseSubscription() } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/faq/FAQDetailFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/faq/FAQDetailFragment.kt index 5c2823724..265ddcff5 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/faq/FAQDetailFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/faq/FAQDetailFragment.kt @@ -6,7 +6,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.TextView - import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.components.AppComponent import com.habitrpg.android.habitica.extensions.inflate @@ -14,8 +13,6 @@ import com.habitrpg.android.habitica.models.FAQArticle import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment import com.habitrpg.android.habitica.ui.helpers.MarkdownParser import com.habitrpg.android.habitica.ui.helpers.bindOptionalView - -import com.habitrpg.android.habitica.ui.helpers.bindView import com.habitrpg.android.habitica.ui.helpers.resetViews class FAQDetailFragment : BaseMainFragment() { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/faq/FAQOverviewFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/faq/FAQOverviewFragment.kt index aca044b53..8d9a86bd6 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/faq/FAQOverviewFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/faq/FAQOverviewFragment.kt @@ -41,7 +41,7 @@ class FAQOverviewFragment : BaseMainFragment() { resetViews() adapter = FAQOverviewRecyclerAdapter() - adapter?.getResetWalkthroughEvents()?.subscribe(Consumer { this.userRepository.resetTutorial(user) }, RxErrorHandler.handleEmptyError()) + adapter?.getResetWalkthroughEvents()?.subscribe(Consumer { this.userRepository.resetTutorial(user) }, RxErrorHandler.handleEmptyError()).notNull { compositeSubscription.add(it) } adapter?.activity = activity recyclerView?.layoutManager = LinearLayoutManager(activity) activity.notNull { recyclerView?.addItemDecoration(DividerItemDecoration(it, DividerItemDecoration.VERTICAL)) } @@ -63,7 +63,7 @@ class FAQOverviewFragment : BaseMainFragment() { if (user == null || adapter == null) { return } - faqRepository.getArticles().subscribe(Consumer { adapter?.setArticles(it) }, RxErrorHandler.handleEmptyError()) + compositeSubscription.add(faqRepository.getArticles().subscribe(Consumer { adapter?.setArticles(it) }, RxErrorHandler.handleEmptyError())) } override fun customTitle(): String { 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 1ffc0a40f..238409f05 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 @@ -15,12 +15,6 @@ import kotlinx.android.synthetic.main.fragment_avatar_overview.* class AvatarOverviewFragment : BaseMainFragment(), AdapterView.OnItemSelectedListener { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - - apiClient.content.subscribe(Consumer { }, RxErrorHandler.handleEmptyError()) - } - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { super.onCreateView(inflater, container, savedInstanceState) @@ -105,8 +99,8 @@ class AvatarOverviewFragment : BaseMainFragment(), AdapterView.OnItemSelectedLis val newSize: String = if (position == 0) "slim" else "broad" if (this.user != null && this.user?.preferences?.size != newSize) { - userRepository.updateUser(user, "preferences.size", newSize) - .subscribe(Consumer { }, RxErrorHandler.handleEmptyError()) + compositeSubscription.add(userRepository.updateUser(user, "preferences.size", newSize) + .subscribe(Consumer { }, RxErrorHandler.handleEmptyError())) } } 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 ffbc578a6..f6593916c 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 @@ -39,8 +39,8 @@ class EquipmentDetailFragment : BaseMainFragment() { this.adapter.equippedGear = this.equippedGear this.adapter.isCostume = this.isCostume this.adapter.type = this.type - this.adapter.equipEvents.flatMapMaybe { key -> inventoryRepository.equipGear(user, key, isCostume ?: false).firstElement() } - .subscribe(Consumer { }, RxErrorHandler.handleEmptyError()) + compositeSubscription.add(this.adapter.equipEvents.flatMapMaybe { key -> inventoryRepository.equipGear(user, key, isCostume ?: false).firstElement() } + .subscribe(Consumer { }, RxErrorHandler.handleEmptyError())) return v } @@ -49,10 +49,10 @@ class EquipmentDetailFragment : BaseMainFragment() { recyclerView.adapter = this.adapter recyclerView.layoutManager = LinearLayoutManager(activity) - recyclerView.addItemDecoration(DividerItemDecoration(getActivity()!!, DividerItemDecoration.VERTICAL)) + recyclerView.addItemDecoration(DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL)) recyclerView.itemAnimator = SafeDefaultItemAnimator() - type?.let { inventoryRepository.getOwnedEquipment(it).firstElement().subscribe(Consumer> { this.adapter.updateData(it) }, RxErrorHandler.handleEmptyError()) } + type?.let { type -> inventoryRepository.getOwnedEquipment(type).firstElement().subscribe(Consumer> { this.adapter.updateData(it) }, RxErrorHandler.handleEmptyError()) } } override fun onDestroy() { 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 415d8be00..2778cad94 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 @@ -98,12 +98,12 @@ class ItemRecyclerFragment : BaseFragment() { } recyclerView?.adapter = adapter - adapter?.notNull { - compositeSubscription.add(it.getSellItemFlowable() + adapter?.notNull { adapter -> + compositeSubscription.add(adapter.getSellItemFlowable() .flatMap { item -> inventoryRepository.sellItem(user, item) } .subscribe(Consumer { }, RxErrorHandler.handleEmptyError())) - compositeSubscription.add(it.getQuestInvitationFlowable() + compositeSubscription.add(adapter.getQuestInvitationFlowable() .flatMap { quest -> inventoryRepository.inviteToQuest(quest) } .subscribe(Consumer { EventBus.getDefault().post(OpenMenuItemCommand(NavigationDrawerFragment.SIDEBAR_PARTY)) }, RxErrorHandler.handleEmptyError())) } @@ -178,7 +178,7 @@ class ItemRecyclerFragment : BaseFragment() { } compositeSubscription.add(inventoryRepository.getOwnedItems(itemClass, user).firstElement().subscribe(Consumer { items -> if (items.size > 0) { - adapter?.updateData(items as OrderedRealmCollection) + adapter?.updateData(items as? OrderedRealmCollection) } }, RxErrorHandler.handleEmptyError())) 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 666a126c7..55e6dd1aa 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 @@ -62,7 +62,7 @@ class ShopFragment : BaseFragment() { super.onViewCreated(view, savedInstanceState) recyclerView.setBackgroundResource(R.color.white) - adapter = recyclerView.adapter as ShopRecyclerAdapter? + adapter = recyclerView.adapter as? ShopRecyclerAdapter if (adapter == null) { adapter = ShopRecyclerAdapter() adapter?.context = context @@ -110,8 +110,8 @@ class ShopFragment : BaseFragment() { compositeSubscription.add(socialRepository.getGroup(Group.TAVERN_ID) .filter { it.hasActiveQuest } - .filter { it.quest?.rageStrikes?.any { it.key == shopIdentifier } ?: false } - .filter { it.quest?.rageStrikes?.filter { it.key == shopIdentifier }?.get(0)?.wasHit == true } + .filter { group -> group.quest?.rageStrikes?.any { it.key == shopIdentifier } ?: false } + .filter { group -> group.quest?.rageStrikes?.filter { it.key == shopIdentifier }?.get(0)?.wasHit == true } .subscribe(Consumer { adapter?.shopSpriteSuffix = "_"+it.quest?.key }, RxErrorHandler.handleEmptyError())) @@ -127,7 +127,7 @@ class ShopFragment : BaseFragment() { Shop.SEASONAL_SHOP -> "seasonal" else -> "" } - this.inventoryRepository.retrieveShopInventory(shopUrl) + compositeSubscription.add(this.inventoryRepository.retrieveShopInventory(shopUrl) .map { shop1 -> if (shop1.identifier == Shop.MARKET) { val user = user @@ -145,26 +145,26 @@ class ShopFragment : BaseFragment() { .subscribe(Consumer { this.shop = it this.adapter?.setShop(it) - }, RxErrorHandler.handleEmptyError()) + }, RxErrorHandler.handleEmptyError())) - user.notNull { - compositeSubscription.add(this.inventoryRepository.getOwnedItems(it) + user.notNull { user -> + compositeSubscription.add(this.inventoryRepository.getOwnedItems(user) .subscribe(Consumer { adapter?.setOwnedItems(it) }, RxErrorHandler.handleEmptyError())) } compositeSubscription.add(this.inventoryRepository.getInAppRewards() - .map> { it.map { it.key } } + .map> { rewards -> rewards.map { it.key } } .subscribe(Consumer { adapter?.setPinnedItemKeys(it) }, RxErrorHandler.handleEmptyError())) } private fun loadMarketGear() { - inventoryRepository.retrieveMarketGear() - .zipWith(inventoryRepository.getOwnedEquipment().map { it.map { it.key } }, BiFunction, Shop> { shop, equipment -> + compositeSubscription.add(inventoryRepository.retrieveMarketGear() + .zipWith(inventoryRepository.getOwnedEquipment().map { equipment -> equipment.map { it.key } }, BiFunction, Shop> { shop, equipment -> for (category in shop.categories) { - val items = category.items.filter { + val items = category.items.asSequence().filter { !equipment.contains(it.key) - }.sortedBy { it.locked } + }.sortedBy { it.locked }.toList() category.items.clear() category.items.addAll(items) } @@ -173,7 +173,7 @@ class ShopFragment : BaseFragment() { .subscribe(Consumer { this.gearCategories = it.categories adapter?.gearCategories = it.categories - }, RxErrorHandler.handleEmptyError()) + }, RxErrorHandler.handleEmptyError())) } override fun injectFragment(component: AppComponent) { 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 f4118da50..94d05c265 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 @@ -53,7 +53,7 @@ class MountDetailRecyclerFragment : BaseMainFragment() { recyclerView.layoutManager = layoutManager recyclerView.addItemDecoration(MarginDecoration(activity)) - adapter = recyclerView.adapter as MountDetailRecyclerAdapter? + adapter = recyclerView.adapter as? MountDetailRecyclerAdapter if (adapter == null) { adapter = MountDetailRecyclerAdapter(null, true) adapter?.itemType = this.animalType @@ -80,8 +80,8 @@ class MountDetailRecyclerFragment : BaseMainFragment() { private fun setGridSpanCount(width: Int) { var spanCount = 0 - if (context != null && context!!.resources != null) { - val itemWidth: Float = context!!.resources.getDimension(R.dimen.pet_width) + context?.resources.notNull { resources + val itemWidth: Float = resources.getDimension(R.dimen.pet_width) spanCount = (width / itemWidth).toInt() } @@ -94,7 +94,7 @@ class MountDetailRecyclerFragment : BaseMainFragment() { private fun loadItems() { if (animalType != null && animalGroup != null) { - inventoryRepository.getMounts(animalType!!, animalGroup!!).firstElement().subscribe(Consumer { adapter?.updateData(it) }, RxErrorHandler.handleEmptyError()) + compositeSubscription.add(inventoryRepository.getMounts(animalType!!, animalGroup!!).firstElement().subscribe(Consumer { adapter?.updateData(it) }, RxErrorHandler.handleEmptyError())) } } @@ -105,6 +105,6 @@ class MountDetailRecyclerFragment : BaseMainFragment() { } companion object { - private val ANIMAL_TYPE_KEY = "ANIMAL_TYPE_KEY" + private const val ANIMAL_TYPE_KEY = "ANIMAL_TYPE_KEY" } } 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 b03921ef1..ad3a52edd 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 @@ -59,7 +59,6 @@ class PetDetailRecyclerFragment : BaseMainFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - val finalView = view resetViews() @@ -77,7 +76,7 @@ class PetDetailRecyclerFragment : BaseMainFragment() { .flatMap { key -> inventoryRepository.equip(user, "pet", key) } .subscribe(Consumer { }, RxErrorHandler.handleEmptyError())) - finalView.post { setGridSpanCount(finalView.width) } + view.post { setGridSpanCount(view.width) } } override fun onSaveInstanceState(outState: Bundle) { @@ -101,8 +100,8 @@ class PetDetailRecyclerFragment : BaseMainFragment() { private fun loadItems() { if (animalType.isNotEmpty() && animalGroup.isNotEmpty()) { - inventoryRepository.getPets(animalType, animalGroup).firstElement().subscribe(Consumer> { adapter.updateData(it) }, RxErrorHandler.handleEmptyError()) - inventoryRepository.getOwnedMounts(animalType, animalGroup).subscribe(Consumer> { adapter.setOwnedMounts(it) }, RxErrorHandler.handleEmptyError()) + compositeSubscription.add(inventoryRepository.getPets(animalType, animalGroup).firstElement().subscribe(Consumer> { adapter.updateData(it) }, RxErrorHandler.handleEmptyError())) + compositeSubscription.add(inventoryRepository.getOwnedMounts(animalType, animalGroup).subscribe(Consumer> { adapter.setOwnedMounts(it) }, RxErrorHandler.handleEmptyError())) } } 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 e1fbdf92e..2193edf8b 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 @@ -86,10 +86,10 @@ class StableRecyclerFragment : BaseFragment() { } - adapter = recyclerView?.adapter as StableRecyclerAdapter? + adapter = recyclerView?.adapter as? StableRecyclerAdapter if (adapter == null) { adapter = StableRecyclerAdapter() - adapter?.activity = this.activity as MainActivity? + adapter?.activity = this.activity as? MainActivity adapter?.itemType = this.itemType recyclerView?.adapter = adapter recyclerView?.itemAnimator = SafeDefaultItemAnimator() @@ -125,7 +125,7 @@ class StableRecyclerFragment : BaseFragment() { inventoryRepository.getMounts().firstElement().toFlowable().flatMap { Flowable.fromIterable(it) } } - observable.toList().flatMap { unsortedAnimals -> + compositeSubscription.add(observable.toList().flatMap { unsortedAnimals -> val items = ArrayList() if (unsortedAnimals.size == 0) { return@flatMap Single.just>(items) @@ -166,7 +166,7 @@ class StableRecyclerFragment : BaseFragment() { } } Single.just>(items) - }.subscribe(Consumer { items -> adapter?.setItemList(items) }, RxErrorHandler.handleEmptyError()) + }.subscribe(Consumer { items -> adapter?.setItemList(items) }, RxErrorHandler.handleEmptyError())) } companion object { 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 1f0d30767..eacfea44f 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 @@ -14,9 +14,8 @@ import com.habitrpg.android.habitica.extensions.notNull import com.habitrpg.android.habitica.helpers.AmplitudeManager import com.habitrpg.android.habitica.ui.fragments.BaseFragment import com.habitrpg.android.habitica.ui.helpers.bindOptionalView -import com.habitrpg.android.habitica.ui.helpers.bindView import com.habitrpg.android.habitica.ui.helpers.resetViews -import java.util.HashMap +import java.util.* class IntroFragment : BaseFragment() { 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 c511ae131..62ce99846 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 @@ -52,7 +52,7 @@ class SkillTasksRecyclerViewFragment : BaseFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - taskRepository.getTasks(taskType ?: "", userId).firstElement().subscribe(Consumer { tasks -> adapter.updateData(tasks) }, RxErrorHandler.handleEmptyError()) + compositeSubscription.add(taskRepository.getTasks(taskType ?: "", userId).firstElement().subscribe(Consumer { tasks -> adapter.updateData(tasks) }, RxErrorHandler.handleEmptyError())) recyclerView?.adapter = adapter layoutManager = recyclerView?.layoutManager as? LinearLayoutManager 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 ce18fdb26..7d120745b 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 @@ -81,8 +81,8 @@ class SkillsFragment : BaseMainFragment() { adapter?.mana = this.user?.stats?.mp ?: 0.toDouble() - user?.let { - Observable.concat(userRepository.getSkills(it).firstElement().toObservable().flatMap { Observable.fromIterable(it) }, userRepository.getSpecialItems(it).firstElement().toObservable().flatMap { Observable.fromIterable(it) }) + user?.let { user -> + Observable.concat(userRepository.getSkills(user).firstElement().toObservable().flatMap { Observable.fromIterable(it) }, userRepository.getSpecialItems(user).firstElement().toObservable().flatMap { Observable.fromIterable(it) }) .toList() .subscribe(Consumer { skills -> adapter?.setSkillList(skills) }, RxErrorHandler.handleEmptyError()) } @@ -122,7 +122,7 @@ class SkillsFragment : BaseMainFragment() { HabiticaSnackbar.SnackbarDisplayType.BLUE) } } - userRepository.retrieveUser(false).subscribe(Consumer { }, RxErrorHandler.handleEmptyError()) + compositeSubscription.add(userRepository.retrieveUser(false).subscribe(Consumer { }, RxErrorHandler.handleEmptyError())) } @@ -155,7 +155,7 @@ class SkillsFragment : BaseMainFragment() { } else { userRepository.useSkill(user, skill.key, skill.target) } - observable.subscribe({ skillResponse -> this.displaySkillResult(skill, skillResponse) }) { removeProgressDialog() } + compositeSubscription.add(observable.subscribe({ skillResponse -> this.displaySkillResult(skill, skillResponse) }) { removeProgressDialog() }) } private fun displayProgressDialog() { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxFragment.kt index 3d7df3519..e996ddcdd 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxFragment.kt @@ -1,13 +1,10 @@ package com.habitrpg.android.habitica.ui.fragments.social import android.content.Context -import android.content.Intent -import android.net.Uri import android.os.Bundle import android.support.v4.widget.SwipeRefreshLayout import android.support.v7.app.AlertDialog import android.view.* -import android.widget.Button import android.widget.EditText import android.widget.TextView import com.habitrpg.android.habitica.R @@ -18,14 +15,12 @@ import com.habitrpg.android.habitica.helpers.RemoteConfigManager import com.habitrpg.android.habitica.helpers.RxErrorHandler import com.habitrpg.android.habitica.models.social.ChatMessage import com.habitrpg.android.habitica.modules.AppModule -import com.habitrpg.android.habitica.prefs.scanner.IntentIntegrator import com.habitrpg.android.habitica.ui.AvatarView import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment import com.habitrpg.android.habitica.ui.helpers.KeyboardUtil import com.habitrpg.android.habitica.ui.views.social.UsernameLabel import io.reactivex.functions.Consumer import io.realm.RealmResults -import kotlinx.android.synthetic.main.activity_login.* import kotlinx.android.synthetic.main.fragment_inbox.* import javax.inject.Inject import javax.inject.Named @@ -61,7 +56,7 @@ class InboxFragment : BaseMainFragment(), SwipeRefreshLayout.OnRefreshListener, } private fun loadMessages() { - compositeSubscription.add(userRepository.getInboxOverviewList().subscribe(Consumer> { + compositeSubscription.add(socialRepository.getInboxOverviewList().subscribe(Consumer> { setInboxMessages(it) }, RxErrorHandler.handleEmptyError())) } @@ -116,7 +111,7 @@ class InboxFragment : BaseMainFragment(), SwipeRefreshLayout.OnRefreshListener, override fun onRefresh() { inbox_refresh_layout.isRefreshing = true - compositeSubscription.add(this.userRepository.retrieveInboxMessages() + compositeSubscription.add(this.socialRepository.retrieveInboxMessages() .subscribe(Consumer> { inbox_refresh_layout.isRefreshing = false }, RxErrorHandler.handleEmptyError())) 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 f519f53ac..57ded597e 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 @@ -17,7 +17,6 @@ import com.habitrpg.android.habitica.extensions.notNull import com.habitrpg.android.habitica.helpers.RemoteConfigManager import com.habitrpg.android.habitica.helpers.RxErrorHandler import com.habitrpg.android.habitica.models.social.ChatMessage -import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.ui.activities.FullProfileActivity import com.habitrpg.android.habitica.ui.activities.MainActivity import com.habitrpg.android.habitica.ui.adapter.social.ChatRecyclerViewAdapter @@ -89,7 +88,7 @@ class InboxMessageListFragment : BaseMainFragment(), SwipeRefreshLayout.OnRefres private fun loadMessages() { if (user?.isManaged == true) { - compositeSubscription.add(userRepository.getInboxMessages(replyToUserUUID) + compositeSubscription.add(socialRepository.getInboxMessages(replyToUserUUID) .firstElement() .subscribe(Consumer { this.chatAdapter?.updateData(it) }, RxErrorHandler.handleEmptyError())) } @@ -112,10 +111,8 @@ class InboxMessageListFragment : BaseMainFragment(), SwipeRefreshLayout.OnRefres private fun refreshUserInbox() { this.swipeRefreshLayout?.isRefreshing = true - compositeSubscription.add(this.userRepository.retrieveUser(true) - .subscribe(Consumer { - user = it - }, RxErrorHandler.handleEmptyError(), Action { + compositeSubscription.add(this.socialRepository.retrieveInboxMessages() + .subscribe(Consumer {}, RxErrorHandler.handleEmptyError(), Action { swipeRefreshLayout?.isRefreshing = false })) } @@ -126,8 +123,7 @@ class InboxMessageListFragment : BaseMainFragment(), SwipeRefreshLayout.OnRefres private fun sendMessage(chatText: String) { replyToUserUUID?.notNull {userID -> - socialRepository.postPrivateMessage(userID, chatText) - .subscribe(Consumer { this.refreshUserInbox() }, RxErrorHandler.handleEmptyError()) + socialRepository.postPrivateMessage(userID, chatText).subscribe(Consumer { }, RxErrorHandler.handleEmptyError()) KeyboardUtil.dismissKeyboard(getActivity()) } } @@ -153,7 +149,7 @@ class InboxMessageListFragment : BaseMainFragment(), SwipeRefreshLayout.OnRefres builder.setMessage(R.string.chat_flag_confirmation) .setPositiveButton(R.string.flag_confirm) { _, _ -> socialRepository.flagMessage(chatMessage) - .subscribe(Consumer { + .subscribe(Consumer { _ -> activity.floatingMenuWrapper.notNull { showSnackbar(it, "Flagged message by " + chatMessage.user, HabiticaSnackbar.SnackbarDisplayType.NORMAL) } 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 c17f48dea..e4031cbad 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 @@ -208,15 +208,15 @@ class QuestDetailFragment : BaseMainFragment() { } private fun onQuestAccept() { - partyId.notNull { - socialRepository.acceptQuest(user, it).subscribe(Consumer { }, RxErrorHandler.handleEmptyError()) + partyId.notNull { partyID -> + socialRepository.acceptQuest(user, partyID).subscribe(Consumer { }, RxErrorHandler.handleEmptyError()) } } private fun onQuestReject() { - partyId.notNull { - socialRepository.rejectQuest(user, it).subscribe(Consumer { }, RxErrorHandler.handleEmptyError()) + partyId.notNull { partyID -> + socialRepository.rejectQuest(user, partyID).subscribe(Consumer { }, RxErrorHandler.handleEmptyError()) } } @@ -224,8 +224,8 @@ class QuestDetailFragment : BaseMainFragment() { val builder = AlertDialog.Builder(getActivity()) .setMessage(beginQuestMessage) .setPositiveButton(R.string.yes) { _, _ -> - party.notNull { - socialRepository.forceStartQuest(it) + party.notNull { party -> + socialRepository.forceStartQuest(party) .subscribe(Consumer { }, RxErrorHandler.handleEmptyError()) } } @@ -237,9 +237,9 @@ class QuestDetailFragment : BaseMainFragment() { val builder = AlertDialog.Builder(getActivity()) .setMessage(R.string.quest_cancel_message) .setPositiveButton(R.string.yes) { _, _ -> - partyId.notNull { + partyId.notNull { partyID -> @Suppress("DEPRECATION") - socialRepository.cancelQuest(it) + socialRepository.cancelQuest(partyID) .subscribe(Consumer { getActivity()?.fragmentManager?.popBackStack() }, RxErrorHandler.handleEmptyError()) } }.setNegativeButton(R.string.no) { _, _ -> } @@ -250,9 +250,9 @@ class QuestDetailFragment : BaseMainFragment() { val builder = AlertDialog.Builder(getActivity()) .setMessage(R.string.quest_abort_message) .setPositiveButton(R.string.yes) { _, _ -> - partyId.notNull { + partyId.notNull { partyID -> @Suppress("DEPRECATION") - socialRepository.abortQuest(it) + socialRepository.abortQuest(partyID) .subscribe(Consumer { getActivity()?.fragmentManager?.popBackStack() }, RxErrorHandler.handleEmptyError()) } }.setNegativeButton(R.string.no) { _, _ -> } 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 238152d6f..50e0e44dd 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 @@ -2,17 +2,31 @@ package com.habitrpg.android.habitica.ui.fragments.social.challenges import android.content.Intent import android.graphics.Color +import android.graphics.PorterDuff +import android.graphics.PorterDuffColorFilter import android.os.Bundle import android.support.v4.content.ContextCompat +import android.support.v7.app.AlertDialog +import android.text.method.LinkMovementMethod +import android.view.* +import android.widget.Button +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.TextView import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.components.AppComponent import com.habitrpg.android.habitica.data.ChallengeRepository +import com.habitrpg.android.habitica.data.SocialRepository +import com.habitrpg.android.habitica.extensions.backgroundCompat import com.habitrpg.android.habitica.extensions.inflate import com.habitrpg.android.habitica.extensions.notNull import com.habitrpg.android.habitica.helpers.RxErrorHandler +import com.habitrpg.android.habitica.models.members.Member import com.habitrpg.android.habitica.models.social.Challenge import com.habitrpg.android.habitica.models.tasks.Task import com.habitrpg.android.habitica.ui.AvatarView +import com.habitrpg.android.habitica.ui.activities.ChallengeFormActivity +import com.habitrpg.android.habitica.ui.activities.FullProfileActivity import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment import com.habitrpg.android.habitica.ui.helpers.MarkdownParser import com.habitrpg.android.habitica.ui.helpers.bindView @@ -24,21 +38,6 @@ import net.pherth.android.emoji_library.EmojiParser import net.pherth.android.emoji_library.EmojiTextView import java.util.* import javax.inject.Inject -import android.graphics.PorterDuff -import android.graphics.PorterDuffColorFilter -import android.support.v4.view.MenuItemCompat -import android.support.v7.app.AlertDialog -import android.text.method.LinkMovementMethod -import android.view.* -import android.widget.Button -import android.widget.ImageView -import android.widget.LinearLayout -import android.widget.TextView -import com.habitrpg.android.habitica.data.SocialRepository -import com.habitrpg.android.habitica.extensions.backgroundCompat -import com.habitrpg.android.habitica.models.members.Member -import com.habitrpg.android.habitica.ui.activities.ChallengeFormActivity -import com.habitrpg.android.habitica.ui.activities.FullProfileActivity class ChallengeDetailFragment: BaseMainFragment() { @@ -141,7 +140,7 @@ class ChallengeDetailFragment: BaseMainFragment() { }, RxErrorHandler.handleEmptyError())) } - joinButton?.setOnClickListener { challenge.notNull { challengeRepository.joinChallenge(it).subscribe(Consumer {}, RxErrorHandler.handleEmptyError()) } } + joinButton?.setOnClickListener { _ -> challenge.notNull { challenge -> challengeRepository.joinChallenge(challenge).subscribe(Consumer {}, RxErrorHandler.handleEmptyError()) } } leaveButton?.setOnClickListener { showChallengeLeaveDialog() } refresh() @@ -342,15 +341,15 @@ class ChallengeDetailFragment: BaseMainFragment() { } private fun showChallengeLeaveDialog() { - context.notNull { - AlertDialog.Builder(it) + context.notNull { context -> + AlertDialog.Builder(context) .setTitle(this.getString(R.string.challenge_leave_title)) .setMessage(this.getString(R.string.challenge_leave_text, challenge?.name ?: "")) .setPositiveButton(R.string.yes) { dialog, _ -> dialog.dismiss() - challenge.notNull { + challenge.notNull { challenge -> showRemoveTasksDialog(Consumer { keepTasks -> - challengeRepository.leaveChallenge(it, keepTasks).subscribe(Consumer {}, RxErrorHandler.handleEmptyError()) + challengeRepository.leaveChallenge(challenge, keepTasks).subscribe(Consumer {}, RxErrorHandler.handleEmptyError()) }) } } diff --git a/build.gradle b/build.gradle index cd3d44d34..b64d9f9e3 100644 --- a/build.gradle +++ b/build.gradle @@ -14,7 +14,7 @@ buildscript { classpath 'com.android.tools.build:gradle:3.2.1' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' classpath 'com.google.gms:google-services:4.0.1' - classpath "io.realm:realm-gradle-plugin:5.3.1" + classpath "io.realm:realm-gradle-plugin:5.7.0" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'me.tatarka.retrolambda.projectlombok:lombok.ast:0.2.3.a2' classpath "gradle.plugin.io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.0.0.RC4-3"