Fix warnings

This commit is contained in:
Phillip Thelen 2018-10-29 16:39:10 +01:00
parent 72744c57b2
commit 1dd309cbbb
42 changed files with 191 additions and 217 deletions

View file

@ -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" >

View file

@ -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'

View file

@ -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"

View file

@ -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"

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>>

View file

@ -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?)

View file

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

View file

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

View file

@ -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>>
}

View file

@ -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>>
}

View file

@ -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 }
}
}

View file

@ -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 }
}
}

View file

@ -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)

View file

@ -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() {

View file

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

View file

@ -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)

View file

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

View file

@ -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
}
}

View file

@ -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() {

View file

@ -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 {

View file

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

View file

@ -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() {

View file

@ -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 {

View file

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

View file

@ -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() {

View file

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

View file

@ -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) {

View file

@ -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"
}
}

View file

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

View file

@ -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 {

View file

@ -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() {

View file

@ -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

View file

@ -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() {

View file

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

View file

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

View file

@ -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) { _, _ -> }

View file

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

View file

@ -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"