diff --git a/Habitica/res/layout/activity_group_form.xml b/Habitica/res/layout/activity_group_form.xml
index cf19b7a57..f708ed0de 100644
--- a/Habitica/res/layout/activity_group_form.xml
+++ b/Habitica/res/layout/activity_group_form.xml
@@ -4,14 +4,13 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
- android:background="@color/window_background">
+ android:background="?attr/colorContentBackground">
+ android:paddingTop="30dp">
-
\ 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 8dc0d1443..33ad438bb 100644
--- a/Habitica/res/menu/menu_challenge_details.xml
+++ b/Habitica/res/menu/menu_challenge_details.xml
@@ -4,7 +4,13 @@
tools:context="com.habitrpg.android.habitica.TaskActivity">
+ android:title="@string/action_edit"
+ app:showAsAction="never" />
+
diff --git a/Habitica/res/menu/menu_create_refresh.xml b/Habitica/res/menu/menu_create_refresh.xml
new file mode 100644
index 000000000..4a5396631
--- /dev/null
+++ b/Habitica/res/menu/menu_create_refresh.xml
@@ -0,0 +1,13 @@
+
+
\ No newline at end of file
diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml
index dc0cff539..8940bd5ff 100644
--- a/Habitica/res/values/strings.xml
+++ b/Habitica/res/values/strings.xml
@@ -1116,4 +1116,9 @@
Fortify Potion
Return all tasks to neutral value (yellow color), and restore all lost Health
This will take effect immediately after buying!
+ Create Guild
+ You can create a Guild on the Habitica website. To create a Guild: log in then tap the “Create” button on the “My Guilds” screen.
+ Open Website
+ End Challenge
+ You can end a Challenge on the Habitica website. To end a Challenge: log in then tap the “End Challenge” button on the right of the Challenge screen.
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildsOverviewFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildsOverviewFragment.kt
index 459ced1d3..90d54a914 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildsOverviewFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildsOverviewFragment.kt
@@ -1,20 +1,22 @@
package com.habitrpg.android.habitica.ui.fragments.social
import android.content.Context
+import android.content.Intent
import android.os.Bundle
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
+import android.view.*
import android.widget.TextView
+import androidx.core.net.toUri
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.ChallengeRepository
import com.habitrpg.android.habitica.data.SocialRepository
import com.habitrpg.android.habitica.databinding.FragmentGuildsOverviewBinding
+import com.habitrpg.android.habitica.extensions.addCloseButton
import com.habitrpg.android.habitica.helpers.MainNavigationController
import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.models.social.Group
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
+import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import io.realm.RealmResults
import java.util.*
import javax.inject.Inject
@@ -61,6 +63,39 @@ class GuildsOverviewFragment : BaseMainFragment()
super.onDestroy()
}
+ override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
+ inflater.inflate(R.menu.menu_create_refresh, menu)
+ super.onCreateOptionsMenu(menu, inflater)
+ }
+
+ override fun onOptionsItemSelected(item: MenuItem): Boolean {
+ when (item.itemId) {
+ R.id.menu_refresh -> {
+ onRefresh()
+ return true
+ }
+ R.id.menu_create_item -> {
+ showCreationDialog()
+ return true
+ }
+ }
+ return super.onOptionsItemSelected(item)
+ }
+
+ private fun showCreationDialog() {
+ val context = context ?: return
+ val dialog = HabiticaAlertDialog(context)
+ dialog.setTitle(R.string.create_guild)
+ dialog.setMessage(R.string.create_guild_description)
+ dialog.addButton(R.string.open_website, true, false) { _, _ ->
+ val uriUrl = "https://habitica.com/groups/myGuilds".toUri()
+ val launchBrowser = Intent(Intent.ACTION_VIEW, uriUrl)
+ startActivity(launchBrowser)
+ }
+ dialog.addCloseButton()
+ dialog.show()
+ }
+
override fun injectFragment(component: UserComponent) {
component.inject(this)
}
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 3aeb14094..9824e3d27 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
@@ -11,11 +11,13 @@ import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.TextView
import androidx.core.content.ContextCompat
+import androidx.core.net.toUri
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.ChallengeRepository
import com.habitrpg.android.habitica.data.SocialRepository
import com.habitrpg.android.habitica.databinding.FragmentChallengeDetailBinding
+import com.habitrpg.android.habitica.extensions.addCloseButton
import com.habitrpg.android.habitica.extensions.inflate
import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.models.members.Member
@@ -140,29 +142,50 @@ class ChallengeDetailFragment: BaseMainFragment(
inflater.inflate(R.menu.menu_challenge_details, menu)
val editMenuItem = menu.findItem(R.id.action_edit)
editMenuItem?.isVisible = isCreator
+ val endChallengeMenuItem = menu.findItem(R.id.action_end_challenge)
+ endChallengeMenuItem?.isVisible = isCreator
}
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
- }
- else if (item.itemId == R.id.action_share) {
- val shareGuildIntent = Intent().apply {
- action = Intent.ACTION_SEND
- putExtra(Intent.EXTRA_TEXT, "${context?.getString(R.string.base_url)}/challenges/$challengeID")
- type = "text/plain"
+ when (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
+ }
+ R.id.action_share -> {
+ val shareGuildIntent = Intent().apply {
+ action = Intent.ACTION_SEND
+ putExtra(Intent.EXTRA_TEXT, "${context?.getString(R.string.base_url)}/challenges/$challengeID")
+ type = "text/plain"
+ }
+ startActivity(Intent.createChooser(shareGuildIntent, context?.getString(R.string.share_challenge_with)))
+ }
+ R.id.action_end_challenge -> {
+ showEndChallengeDialog()
}
- startActivity(Intent.createChooser(shareGuildIntent, context?.getString(R.string.share_challenge_with)))
}
return super.onOptionsItemSelected(item)
}
+ private fun showEndChallengeDialog() {
+ val context = context ?: return
+ val dialog = HabiticaAlertDialog(context)
+ dialog.setTitle(R.string.action_end_challenge)
+ dialog.setMessage(R.string.end_challenge_description)
+ dialog.addButton(R.string.open_website, true, false) { _, _ ->
+ val uriUrl = "https://habitica.com/challenges/${challengeID}".toUri()
+ val launchBrowser = Intent(Intent.ACTION_VIEW, uriUrl)
+ startActivity(launchBrowser)
+ }
+ dialog.addCloseButton()
+ dialog.show()
+ }
+
private fun refresh() {
challengeID?.let {id ->
challengeRepository.retrieveChallenge(id)