mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-05-18 19:59:00 +00:00
Fix warnings
This commit is contained in:
parent
72744c57b2
commit
1dd309cbbb
42 changed files with 191 additions and 217 deletions
|
|
@ -2,7 +2,7 @@
|
|||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="com.habitrpg.android.habitica"
|
||||
android:versionCode="1998"
|
||||
android:versionCode="1999"
|
||||
android:versionName="1.6"
|
||||
android:screenOrientation="portrait"
|
||||
android:installLocation="auto" >
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:abc="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:app="http://schemas.android.com/tools">
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item
|
||||
android:id="@+id/menu_challenge_edit"
|
||||
android:orderInCategory="1"
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:abc="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:app="http://schemas.android.com/tools">
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<item
|
||||
android:id="@+id/menu.guild.edit"
|
||||
android:orderInCategory="1"
|
||||
|
|
|
|||
|
|
@ -1,11 +1,9 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:abc="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:app="http://schemas.android.com/tools">
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<item
|
||||
android:id="@+id/menu.guild.leave"
|
||||
android:orderInCategory="1"
|
||||
app:showAsAction="never"
|
||||
android:title="@string/leave"
|
||||
abc:showAsAction="never"/>
|
||||
android:title="@string/leave"/>
|
||||
</menu>
|
||||
|
|
@ -1,11 +1,9 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:abc="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:app="http://schemas.android.com/tools">
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<item
|
||||
android:id="@+id/menu.guild.join"
|
||||
android:orderInCategory="1"
|
||||
app:showAsAction="ifRoom"
|
||||
android:title="@string/join"
|
||||
abc:showAsAction="ifRoom"/>
|
||||
android:title="@string/join"/>
|
||||
</menu>
|
||||
|
|
@ -1,13 +1,11 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:abc="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:app="http://schemas.android.com/tools">
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<item
|
||||
android:id="@+id/action_toggleRegistering"
|
||||
android:orderInCategory="1"
|
||||
app:showAsAction="ifRoom"
|
||||
android:title="@string/login_btn"
|
||||
abc:showAsAction="ifRoom"/>
|
||||
android:title="@string/login_btn"/>
|
||||
|
||||
</menu>
|
||||
|
|
@ -127,5 +127,12 @@
|
|||
<dimen name="icon_size">18dp</dimen>
|
||||
<dimen name="chat_horizontal_inset">16dp</dimen>
|
||||
<dimen name="avatar_chat_size">36dp</dimen>
|
||||
<dimen name="setup_vertical_spacing">28dp</dimen>
|
||||
<dimen name="customization_drawer_subcategory_height">130dp</dimen>
|
||||
<dimen name="customization_drawer_category_height">100dp</dimen>
|
||||
<dimen name="customization_drawer_caret_margin">91dp</dimen>
|
||||
<dimen name="content_inset">21dp</dimen>
|
||||
<dimen name="header_border_spacing">16dp</dimen>
|
||||
<dimen name="login_field_width">300dp</dimen>
|
||||
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -46,8 +46,12 @@ interface SocialRepository : BaseRepository {
|
|||
fun retrieveGroups(type: String): Flowable<List<Group>>
|
||||
fun getGroups(type: String): Flowable<RealmResults<Group>>
|
||||
|
||||
fun postPrivateMessage(messageObject: HashMap<String, String>): Flowable<PostChatMessageResult>
|
||||
fun postPrivateMessage(recipientId: String, message: String): Flowable<PostChatMessageResult>
|
||||
|
||||
fun getInboxMessages(replyToUserID: String?): Flowable<RealmResults<ChatMessage>>
|
||||
fun retrieveInboxMessages(): Flowable<List<ChatMessage>>
|
||||
fun getInboxOverviewList(): Flowable<RealmResults<ChatMessage>>
|
||||
fun postPrivateMessage(messageObject: HashMap<String, String>): Flowable<List<ChatMessage>>
|
||||
fun postPrivateMessage(recipientId: String, message: String): Flowable<List<ChatMessage>>
|
||||
|
||||
|
||||
fun getGroupMembers(id: String): Flowable<RealmResults<Member>>
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@ import io.realm.RealmResults
|
|||
|
||||
interface UserRepository : BaseRepository {
|
||||
fun getUser(): Flowable<User>
|
||||
fun getInboxOverviewList(): Flowable<RealmResults<ChatMessage>>
|
||||
|
||||
fun getUser(userID: String): Flowable<User>
|
||||
fun updateUser(user: User?, updateData: Map<String, Any>): Flowable<User>
|
||||
|
|
@ -25,9 +24,6 @@ interface UserRepository : BaseRepository {
|
|||
fun retrieveUser(withTasks: Boolean): Flowable<User>
|
||||
fun retrieveUser(withTasks: Boolean = false, forced: Boolean = false): Flowable<User>
|
||||
|
||||
fun getInboxMessages(replyToUserID: String?): Flowable<RealmResults<ChatMessage>>
|
||||
fun retrieveInboxMessages(): Flowable<List<ChatMessage>>
|
||||
|
||||
fun revive(user: User): Flowable<User>
|
||||
|
||||
fun resetTutorial(user: User?)
|
||||
|
|
|
|||
|
|
@ -90,11 +90,11 @@ class SocialRepositoryImpl(localRepository: SocialLocalRepository, apiClient: Ap
|
|||
|
||||
override fun retrieveGroup(id: String): Flowable<Group> {
|
||||
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, List<ChatMessage>, 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<Group> {
|
||||
|
|
@ -160,11 +160,24 @@ class SocialRepositoryImpl(localRepository: SocialLocalRepository, apiClient: Ap
|
|||
|
||||
override fun getPublicGuilds(): Flowable<RealmResults<Group>> = localRepository.getPublicGuilds()
|
||||
|
||||
override fun postPrivateMessage(messageObject: HashMap<String, String>): Flowable<PostChatMessageResult> {
|
||||
return apiClient.postPrivateMessage(messageObject)
|
||||
override fun getInboxOverviewList(): Flowable<RealmResults<ChatMessage>> = localRepository.getInboxOverviewList(userID)
|
||||
|
||||
override fun getInboxMessages(replyToUserID: String?): Flowable<RealmResults<ChatMessage>> = localRepository.getInboxMessages(userID, replyToUserID)
|
||||
|
||||
override fun retrieveInboxMessages(): Flowable<List<ChatMessage>> {
|
||||
return apiClient.retrieveInboxMessages().doOnNext { messages ->
|
||||
messages.forEach {
|
||||
it.isInboxMessage = true
|
||||
}
|
||||
localRepository.save(messages)
|
||||
}
|
||||
}
|
||||
|
||||
override fun postPrivateMessage(recipientId: String, message: String): Flowable<PostChatMessageResult> {
|
||||
override fun postPrivateMessage(messageObject: HashMap<String, String>): Flowable<List<ChatMessage>> {
|
||||
return apiClient.postPrivateMessage(messageObject).flatMap { retrieveInboxMessages() }
|
||||
}
|
||||
|
||||
override fun postPrivateMessage(recipientId: String, message: String): Flowable<List<ChatMessage>> {
|
||||
val messageObject = HashMap<String, String>()
|
||||
messageObject["message"] = message
|
||||
messageObject["toUserId"] = recipientId
|
||||
|
|
@ -190,7 +203,7 @@ class SocialRepositoryImpl(localRepository: SocialLocalRepository, apiClient: Ap
|
|||
|
||||
override fun markPrivateMessagesRead(user: User?): Flowable<Void> {
|
||||
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<Void> {
|
||||
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<Void> {
|
||||
return apiClient.rejectQuest(partyId)
|
||||
.doOnNext {
|
||||
.doOnNext { _ ->
|
||||
user.notNull {
|
||||
localRepository.updateRSVPNeeded(it, false)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,7 +27,6 @@ class UserRepositoryImpl(localRepository: UserLocalRepository, apiClient: ApiCli
|
|||
private var lastSync: Date? = null
|
||||
|
||||
override fun getUser(): Flowable<User> = getUser(userID)
|
||||
override fun getInboxOverviewList(): Flowable<RealmResults<ChatMessage>> = localRepository.getInboxOverviewList(userID)
|
||||
|
||||
|
||||
override fun getUser(userID: String): Flowable<User> = localRepository.getUser(userID)
|
||||
|
|
@ -76,18 +75,6 @@ class UserRepositoryImpl(localRepository: UserLocalRepository, apiClient: ApiCli
|
|||
}
|
||||
}
|
||||
|
||||
override fun getInboxMessages(replyToUserID: String?): Flowable<RealmResults<ChatMessage>> =
|
||||
localRepository.getInboxMessages(userID, replyToUserID)
|
||||
|
||||
override fun retrieveInboxMessages(): Flowable<List<ChatMessage>> {
|
||||
return apiClient.retrieveInboxMessages().doOnNext { messages ->
|
||||
messages.forEach {
|
||||
it.isInboxMessage = true
|
||||
}
|
||||
localRepository.save(messages)
|
||||
}
|
||||
}
|
||||
|
||||
override fun revive(user: User): Flowable<User> =
|
||||
apiClient.revive().map { newUser -> mergeUser(user, newUser) }
|
||||
|
||||
|
|
|
|||
|
|
@ -40,4 +40,8 @@ interface SocialLocalRepository : BaseLocalRepository {
|
|||
fun getGroupMembership(userId: String, id: String): Flowable<GroupMembership>
|
||||
fun getGroupMemberships(userId: String): Flowable<RealmResults<GroupMembership>>
|
||||
fun rejectGroupInvitation(userID: String, groupID: String)
|
||||
|
||||
fun getInboxMessages(userId: String, replyToUserID: String?): Flowable<RealmResults<ChatMessage>>
|
||||
|
||||
fun getInboxOverviewList(userId: String): Flowable<RealmResults<ChatMessage>>
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,8 +20,4 @@ interface UserLocalRepository : BaseLocalRepository {
|
|||
fun getSkills(user: User): Flowable<RealmResults<Skill>>
|
||||
|
||||
fun getSpecialItems(user: User): Flowable<RealmResults<Skill>>
|
||||
|
||||
fun getInboxMessages(userId: String, replyToUserID: String?): Flowable<RealmResults<ChatMessage>>
|
||||
|
||||
fun getInboxOverviewList(userId: String): Flowable<RealmResults<ChatMessage>>
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<RealmResults<ChatMessage>> {
|
||||
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<RealmResults<ChatMessage>> {
|
||||
return realm.where(ChatMessage::class.java)
|
||||
.equalTo("isInboxMessage", true)
|
||||
.distinct("uuid")
|
||||
.sort("timestamp", Sort.DESCENDING)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -106,24 +106,4 @@ class RealmUserLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm),
|
|||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
}
|
||||
|
||||
override fun getInboxMessages(userId: String, replyToUserID: String?): Flowable<RealmResults<ChatMessage>> {
|
||||
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<RealmResults<ChatMessage>> {
|
||||
return realm.where(ChatMessage::class.java)
|
||||
.equalTo("isInboxMessage", true)
|
||||
.distinct("uuid")
|
||||
.sort("timestamp", Sort.DESCENDING)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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()))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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()))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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<RealmResults<Equipment>> { this.adapter.updateData(it) }, RxErrorHandler.handleEmptyError()) }
|
||||
type?.let { type -> inventoryRepository.getOwnedEquipment(type).firstElement().subscribe(Consumer<RealmResults<Equipment>> { this.adapter.updateData(it) }, RxErrorHandler.handleEmptyError()) }
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
|
|
|
|||
|
|
@ -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<Item>)
|
||||
adapter?.updateData(items as? OrderedRealmCollection<Item>)
|
||||
}
|
||||
}, RxErrorHandler.handleEmptyError()))
|
||||
|
||||
|
|
|
|||
|
|
@ -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<List<String>> { it.map { it.key } }
|
||||
.map<List<String>> { 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, List<String?>, Shop> { shop, equipment ->
|
||||
compositeSubscription.add(inventoryRepository.retrieveMarketGear()
|
||||
.zipWith(inventoryRepository.getOwnedEquipment().map { equipment -> equipment.map { it.key } }, BiFunction<Shop, List<String?>, 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<Shop> {
|
||||
this.gearCategories = it.categories
|
||||
adapter?.gearCategories = it.categories
|
||||
}, RxErrorHandler.handleEmptyError())
|
||||
}, RxErrorHandler.handleEmptyError()))
|
||||
}
|
||||
|
||||
override fun injectFragment(component: AppComponent) {
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<Items> { 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<RealmResults<Pet>> { adapter.updateData(it) }, RxErrorHandler.handleEmptyError())
|
||||
inventoryRepository.getOwnedMounts(animalType, animalGroup).subscribe(Consumer<RealmResults<Mount>> { adapter.setOwnedMounts(it) }, RxErrorHandler.handleEmptyError())
|
||||
compositeSubscription.add(inventoryRepository.getPets(animalType, animalGroup).firstElement().subscribe(Consumer<RealmResults<Pet>> { adapter.updateData(it) }, RxErrorHandler.handleEmptyError()))
|
||||
compositeSubscription.add(inventoryRepository.getOwnedMounts(animalType, animalGroup).subscribe(Consumer<RealmResults<Mount>> { adapter.setOwnedMounts(it) }, RxErrorHandler.handleEmptyError()))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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<Any>()
|
||||
if (unsortedAnimals.size == 0) {
|
||||
return@flatMap Single.just<List<Any>>(items)
|
||||
|
|
@ -166,7 +166,7 @@ class StableRecyclerFragment : BaseFragment() {
|
|||
}
|
||||
}
|
||||
Single.just<List<Any>>(items)
|
||||
}.subscribe(Consumer { items -> adapter?.setItemList(items) }, RxErrorHandler.handleEmptyError())
|
||||
}.subscribe(Consumer { items -> adapter?.setItemList(items) }, RxErrorHandler.handleEmptyError()))
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
|
|
@ -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<RealmResults<ChatMessage>> {
|
||||
compositeSubscription.add(socialRepository.getInboxOverviewList().subscribe(Consumer<RealmResults<ChatMessage>> {
|
||||
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<List<ChatMessage>> {
|
||||
inbox_refresh_layout.isRefreshing = false
|
||||
}, RxErrorHandler.handleEmptyError()))
|
||||
|
|
|
|||
|
|
@ -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> {
|
||||
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)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) { _, _ -> }
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Reference in a new issue