diff --git a/Habitica/AndroidManifest.xml b/Habitica/AndroidManifest.xml index c908a9c5e..bd28190d5 100644 --- a/Habitica/AndroidManifest.xml +++ b/Habitica/AndroidManifest.xml @@ -151,7 +151,7 @@ android:value=".ui.activities.MainActivity" /> + tools:context="com.habitrpg.android.habitica.ui.activities.ChallengeFormActivity"> + + + + \ No newline at end of file diff --git a/Habitica/res/menu/menu_challenge_details.xml b/Habitica/res/menu/menu_challenge_details.xml index d3751094d..d171af226 100644 --- a/Habitica/res/menu/menu_challenge_details.xml +++ b/Habitica/res/menu/menu_challenge_details.xml @@ -2,18 +2,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" tools:context="com.habitrpg.android.habitica.TaskActivity"> - - - - - + android:title="@string/action_edit" /> diff --git a/Habitica/res/values-en-rGB/strings.xml b/Habitica/res/values-en-rGB/strings.xml index ea12832f0..20680b211 100644 --- a/Habitica/res/values-en-rGB/strings.xml +++ b/Habitica/res/values-en-rGB/strings.xml @@ -302,11 +302,11 @@ Feed Hatch pet with %s You hatched a %1$s %2$s! - You have tamed %1$s %2$s, let's go for a ride! + You have tamed %1$s %2$s, let\'s go for a ride! Close Share You fed your %1$s %2$s! - Base Pets + Base PetsMagic Potion Pets Quest Pets Rare Pets diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index 1e4dc8de8..a49268222 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -332,7 +332,7 @@ Feed Hatch pet with %s You hatched a %1$s %2$s! - You have tamed %1$s %2$s, let's go for a ride! + You have tamed %1$s %2$s, let\'s go for a ride! Close Share You fed your %1$s %2$s! diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.kt index 78300ed22..71abcb999 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.kt @@ -179,12 +179,12 @@ abstract class HabiticaBaseApplication : MultiDexApplication() { } override fun openOrCreateDatabase(name: String, - mode: Int, factory: SQLiteDatabase.CursorFactory): SQLiteDatabase { + mode: Int, factory: SQLiteDatabase.CursorFactory?): SQLiteDatabase { return super.openOrCreateDatabase(getDatabasePath(name).absolutePath, mode, factory) } override fun openOrCreateDatabase(name: String, - mode: Int, factory: SQLiteDatabase.CursorFactory, errorHandler: DatabaseErrorHandler?): SQLiteDatabase { + mode: Int, factory: SQLiteDatabase.CursorFactory?, errorHandler: DatabaseErrorHandler?): SQLiteDatabase { return super.openOrCreateDatabase(getDatabasePath(name).absolutePath, mode, factory, errorHandler) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/components/AppComponent.java b/Habitica/src/main/java/com/habitrpg/android/habitica/components/AppComponent.java index 70e5846bb..6d844d00c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/components/AppComponent.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/components/AppComponent.java @@ -17,7 +17,7 @@ import com.habitrpg.android.habitica.receivers.TaskAlarmBootReceiver; import com.habitrpg.android.habitica.receivers.TaskReceiver; import com.habitrpg.android.habitica.ui.activities.AboutActivity; import com.habitrpg.android.habitica.ui.activities.ClassSelectionActivity; -import com.habitrpg.android.habitica.ui.activities.CreateChallengeActivity; +import com.habitrpg.android.habitica.ui.activities.ChallengeFormActivity; import com.habitrpg.android.habitica.ui.activities.FixCharacterValuesActivity; import com.habitrpg.android.habitica.ui.activities.FullProfileActivity; import com.habitrpg.android.habitica.ui.activities.GemPurchaseActivity; @@ -264,7 +264,7 @@ public interface AppComponent { void inject(NotificationPublisher notificationPublisher); - void inject(CreateChallengeActivity createChallengeActivity); + void inject(ChallengeFormActivity challengeFormActivity); void inject(TavernDetailFragment tavernDetailFragment); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/CreateChallengeActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ChallengeFormActivity.kt similarity index 98% rename from Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/CreateChallengeActivity.kt rename to Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ChallengeFormActivity.kt index 2078cda2b..6d98a3d81 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/CreateChallengeActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ChallengeFormActivity.kt @@ -37,7 +37,7 @@ import java.util.* import javax.inject.Inject import javax.inject.Named -class CreateChallengeActivity : BaseActivity() { +class ChallengeFormActivity : BaseActivity() { private val createChallengeTitleInputLayout: TextInputLayout by bindView(R.id.create_challenge_title_input_layout) private val createChallengeTitle: EditText by bindView(R.id.create_challenge_title) @@ -379,6 +379,11 @@ class CreateChallengeActivity : BaseActivity() { } checkPrizeAndMinimumForTavern() }, RxErrorHandler.handleEmptyError()) + challengeRepository.getChallengeTasks(it).subscribe(Consumer { tasks -> + tasks.forEach { task -> + addOrUpdateTaskInList(task) + } + }, RxErrorHandler.handleEmptyError()) } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeDetailFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeDetailFragment.kt index d418938b1..cc7324f35 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeDetailFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeDetailFragment.kt @@ -1,5 +1,6 @@ package com.habitrpg.android.habitica.ui.fragments.social.challenges +import android.content.Intent import android.graphics.Color import android.os.Bundle import android.support.v4.content.ContextCompat @@ -33,8 +34,12 @@ import javax.inject.Inject import android.graphics.PorterDuff import android.graphics.PorterDuffColorFilter import android.support.v7.app.AlertDialog +import android.view.Menu +import android.view.MenuInflater +import android.view.MenuItem import com.habitrpg.android.habitica.data.SocialRepository import com.habitrpg.android.habitica.models.members.Member +import com.habitrpg.android.habitica.ui.activities.ChallengeFormActivity class ChallengeDetailFragment: BaseMainFragment() { @@ -60,6 +65,7 @@ class ChallengeDetailFragment: BaseMainFragment() { var challengeID: String? = null var challenge: Challenge? = null + var isCreator = false override fun injectFragment(component: AppComponent) { component.inject(this) @@ -76,8 +82,8 @@ class ChallengeDetailFragment: BaseMainFragment() { gemAmountIconView?.setImageBitmap(HabiticaIconsHelper.imageOfGem_36()) memberCountIconView?.setImageBitmap(HabiticaIconsHelper.imageOfParticipantIcon()) - challengeID.notNull { - compositeSubscription.add(challengeRepository.getChallenge(it) + challengeID.notNull {id -> + compositeSubscription.add(challengeRepository.getChallenge(id) .doOnNext { set(it) } @@ -88,7 +94,7 @@ class ChallengeDetailFragment: BaseMainFragment() { return@flatMap socialRepository.getMember(creatorID) } .subscribe(Consumer { set(it)}, RxErrorHandler.handleEmptyError())) - compositeSubscription.add(challengeRepository.getChallengeTasks(it).subscribe(Consumer { taskList -> + compositeSubscription.add(challengeRepository.getChallengeTasks(id).subscribe(Consumer { taskList -> taskGrouplayout?.removeAllViewsInLayout() val todos = ArrayList() @@ -122,7 +128,7 @@ class ChallengeDetailFragment: BaseMainFragment() { } }, RxErrorHandler.handleEmptyError())) - compositeSubscription.add(challengeRepository.isChallengeMember(it).subscribe(Consumer { isMember -> + compositeSubscription.add(challengeRepository.isChallengeMember(id).subscribe(Consumer { isMember -> setJoined(isMember) }, RxErrorHandler.handleEmptyError())) } @@ -133,6 +139,26 @@ class ChallengeDetailFragment: BaseMainFragment() { refresh() } + override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) { + if (!isCreator) { + return + } + inflater?.inflate(R.menu.menu_challenge_details, menu) + } + + override fun onOptionsItemSelected(item: MenuItem?): Boolean { + if (item?.itemId == R.id.action_edit) { + val intent = Intent(getActivity(), ChallengeFormActivity::class.java) + val bundle = Bundle() + bundle.putString(ChallengeFormActivity.CHALLENGE_ID_KEY, challengeID) + intent.putExtras(bundle) + startActivity(intent) + return true + } + + return super.onOptionsItemSelected(item) + } + private fun refresh() { challengeID.notNull {id -> challengeRepository.retrieveChallenge(id) @@ -155,6 +181,8 @@ class ChallengeDetailFragment: BaseMainFragment() { challengeLeaderAvatarView?.setAvatar(creator) challengeLeaderLabel?.tier = creator.contributor?.level ?: 0 challengeLeaderLabel?.username = creator.displayName + isCreator = creator.id == user?.id + this.activity?.invalidateOptionsMenu() } private fun setJoined(joined: Boolean) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeListFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeListFragment.kt index 40bcecced..4f65e4cbe 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeListFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeListFragment.kt @@ -16,7 +16,7 @@ import com.habitrpg.android.habitica.extensions.notNull import com.habitrpg.android.habitica.helpers.RxErrorHandler import com.habitrpg.android.habitica.models.social.Challenge import com.habitrpg.android.habitica.modules.AppModule -import com.habitrpg.android.habitica.ui.activities.CreateChallengeActivity +import com.habitrpg.android.habitica.ui.activities.ChallengeFormActivity import com.habitrpg.android.habitica.ui.adapter.social.ChallengesListViewAdapter import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment import com.habitrpg.android.habitica.ui.helpers.RecyclerViewEmptySupport @@ -176,7 +176,7 @@ class ChallengeListFragment : BaseMainFragment(), SwipeRefreshLayout.OnRefreshLi when (id) { R.id.action_create_challenge -> { - val intent = Intent(getActivity(), CreateChallengeActivity::class.java) + val intent = Intent(getActivity(), ChallengeFormActivity::class.java) startActivity(intent) return true } diff --git a/build.gradle b/build.gradle index 73167e6a3..4923b4a12 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.2.51' + ext.kotlin_version = '1.2.60' ext.build_tools_version = '27.0.3' ext.sdk_version = 27