diff --git a/Habitica/build.gradle b/Habitica/build.gradle
index 958b749ca..9f73511ad 100644
--- a/Habitica/build.gradle
+++ b/Habitica/build.gradle
@@ -64,7 +64,7 @@ dependencies {
compileOnly 'com.github.pengrad:jdk9-deps:1.0'
//App Compatibility and Material Design
implementation 'androidx.appcompat:appcompat:1.1.0'
- implementation 'com.google.android.material:material:1.0.0'
+ implementation 'com.google.android.material:material:1.1.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.legacy:legacy-preference-v14:1.0.0'
// Emojis
@@ -132,9 +132,9 @@ dependencies {
implementation 'androidx.core:core-ktx:1.2.0'
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
implementation "androidx.lifecycle:lifecycle-common-java8:2.2.0"
- implementation 'androidx.navigation:navigation-fragment-ktx:2.2.1'
- implementation 'androidx.navigation:navigation-ui-ktx:2.2.1'
- implementation "androidx.paging:paging-runtime-ktx:2.1.1"
+ implementation 'androidx.navigation:navigation-fragment-ktx:2.2.2'
+ implementation 'androidx.navigation:navigation-ui-ktx:2.2.2'
+ implementation "androidx.paging:paging-runtime-ktx:2.1.2"
implementation 'com.plattysoft.leonids:LeonidsLib:1.3.2'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.3'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.3'
@@ -162,7 +162,7 @@ android {
multiDexEnabled true
resConfigs "en", "bg", "de", "en-rGB", "es", "fr", "hr-rHR", "in", "it", "iw", "ja", "ko", "lt", "nl", "pl", "pt-rBR", "pt-rPT", "ru", "tr", "zh", "zh-rTW"
- versionCode 2407
+ versionCode 2408
versionName "2.6"
}
diff --git a/Habitica/res/layout/fragment_support_bug_fix.xml b/Habitica/res/layout/fragment_support_bug_fix.xml
index fe09f89b7..bab44c9fc 100644
--- a/Habitica/res/layout/fragment_support_bug_fix.xml
+++ b/Habitica/res/layout/fragment_support_bug_fix.xml
@@ -1,8 +1,12 @@
-
+
+ android:background="@color/white"
+ android:layout_marginBottom="@dimen/spacing_large">
-
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/Habitica/res/layout/fragment_support_main.xml b/Habitica/res/layout/fragment_support_main.xml
index 08f827823..5d98b294c 100644
--- a/Habitica/res/layout/fragment_support_main.xml
+++ b/Habitica/res/layout/fragment_support_main.xml
@@ -1,4 +1,8 @@
+
-
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GroupInviteActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GroupInviteActivity.kt
index a66da7f3f..7bd208b61 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GroupInviteActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GroupInviteActivity.kt
@@ -24,7 +24,6 @@ import com.habitrpg.android.habitica.ui.helpers.dismissKeyboard
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.Companion.showSnackbar
import io.reactivex.functions.Consumer
-import kotlinx.android.synthetic.main.activity_prefs.*
import java.util.*
import java.util.concurrent.TimeUnit
import javax.inject.Inject
@@ -54,7 +53,7 @@ class GroupInviteActivity : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- setupToolbar(toolbar)
+ setupToolbar(findViewById(R.id.toolbar))
viewPager.currentItem = 0
supportActionBar?.title = null
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GuidelinesActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GuidelinesActivity.kt
index 07b4a905d..a94ee1ea2 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GuidelinesActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GuidelinesActivity.kt
@@ -6,7 +6,6 @@ import android.widget.TextView
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.ui.helpers.setMarkdown
-import kotlinx.android.synthetic.main.activity_prefs.*
import okhttp3.*
import java.io.BufferedReader
import java.io.IOException
@@ -20,7 +19,7 @@ class GuidelinesActivity: BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- setupToolbar(toolbar)
+ setupToolbar(findViewById(R.id.toolbar))
val client = OkHttpClient()
val request = Request.Builder().url("https://s3.amazonaws.com/habitica-assets/mobileApp/endpoint/community-guidelines.md").build()
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/IntroActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/IntroActivity.kt
index 9445b55e8..ac0ad6d55 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/IntroActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/IntroActivity.kt
@@ -3,46 +3,47 @@ package com.habitrpg.android.habitica.ui.activities
import android.content.Intent
import android.os.Bundle
import android.view.View
-import android.widget.Button
+import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.core.content.res.ResourcesCompat
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
-import androidx.fragment.app.FragmentPagerAdapter
+import androidx.fragment.app.FragmentStatePagerAdapter
import androidx.viewpager.widget.ViewPager
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.ContentRepository
+import com.habitrpg.android.habitica.databinding.ActivityIntroBinding
import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.ui.fragments.setup.IntroFragment
-import com.habitrpg.android.habitica.ui.helpers.bindView
-import com.viewpagerindicator.IconPageIndicator
import com.viewpagerindicator.IconPagerAdapter
import io.reactivex.functions.Consumer
import javax.inject.Inject
+
class IntroActivity : BaseActivity(), View.OnClickListener, ViewPager.OnPageChangeListener {
+ private lateinit var binding: ActivityIntroBinding
@Inject
lateinit var contentRepository: ContentRepository
- private val pager: ViewPager by bindView(R.id.viewPager)
- private val indicator: IconPageIndicator by bindView(R.id.view_pager_indicator)
- private val skipButton: Button by bindView(R.id.skipButton)
- private val finishButton: Button by bindView(R.id.finishButton)
-
override fun getLayoutResId(): Int {
return R.layout.activity_intro
}
+ override fun getContentView(): View {
+ binding = ActivityIntroBinding.inflate(layoutInflater)
+ return binding.root
+ }
+
public override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setupIntro()
- indicator.setViewPager(pager)
+ //binding.viewPagerIndicator.setViewPager(binding.viewPager)
- this.skipButton.setOnClickListener(this)
- this.finishButton.setOnClickListener(this)
+ binding.skipButton.setOnClickListener(this)
+ binding.finishButton.setOnClickListener(this)
compositeSubscription.add(contentRepository.retrieveContent(this).subscribe(Consumer { }, RxErrorHandler.handleEmptyError()))
}
@@ -52,11 +53,9 @@ class IntroActivity : BaseActivity(), View.OnClickListener, ViewPager.OnPageChan
}
private fun setupIntro() {
- val fragmentManager = supportFragmentManager
+ binding.viewPager.adapter = PagerAdapter(supportFragmentManager)
- pager.adapter = PagerAdapter(fragmentManager)
-
- pager.addOnPageChangeListener(this)
+ binding.viewPager.addOnPageChangeListener(this)
}
override fun onClick(v: View) {
@@ -76,43 +75,19 @@ class IntroActivity : BaseActivity(), View.OnClickListener, ViewPager.OnPageChan
override fun onPageSelected(position: Int) {
if (position == 2) {
- this.finishButton.visibility = View.VISIBLE
+ binding.finishButton.visibility = View.VISIBLE
} else {
- this.finishButton.visibility = View.GONE
+ binding.finishButton.visibility = View.GONE
}
}
override fun onPageScrollStateChanged(state: Int) { /* no-on */ }
- private inner class PagerAdapter(fm: FragmentManager) : FragmentPagerAdapter(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT), IconPagerAdapter {
+ private inner class PagerAdapter(fm: FragmentManager) : FragmentStatePagerAdapter(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT), IconPagerAdapter {
override fun getItem(position: Int): Fragment {
val fragment = IntroFragment()
-
- when (position) {
- 0 -> {
- fragment.setImage(ResourcesCompat.getDrawable(resources, R.drawable.intro_1, null))
- fragment.setSubtitle(getString(R.string.intro_1_subtitle))
- fragment.setTitleImage(ResourcesCompat.getDrawable(resources, R.drawable.intro_1_title, null))
- fragment.setDescription(getString(R.string.intro_1_description, getString(R.string.habitica_user_count)))
- fragment.setBackgroundColor(ContextCompat.getColor(this@IntroActivity, R.color.brand_300))
- }
- 1 -> {
- fragment.setImage(ResourcesCompat.getDrawable(resources, R.drawable.intro_2, null))
- fragment.setSubtitle(getString(R.string.intro_2_subtitle))
- fragment.setTitle(getString(R.string.intro_2_title))
- fragment.setDescription(getString(R.string.intro_2_description))
- fragment.setBackgroundColor(ContextCompat.getColor(this@IntroActivity, R.color.blue_10))
- }
- 2 -> {
- fragment.setImage(ResourcesCompat.getDrawable(resources, R.drawable.intro_3, null))
- fragment.setSubtitle(getString(R.string.intro_3_subtitle))
- fragment.setTitle(getString(R.string.intro_3_title))
- fragment.setDescription(getString(R.string.intro_3_description))
- fragment.setBackgroundColor(ContextCompat.getColor(this@IntroActivity, R.color.red_100))
- }
- }
-
+ configureFragment(fragment, position)
return fragment
}
@@ -123,5 +98,39 @@ class IntroActivity : BaseActivity(), View.OnClickListener, ViewPager.OnPageChan
override fun getCount(): Int {
return 3
}
+
+ override fun instantiateItem(container: ViewGroup, position: Int): Any {
+ val item = super.instantiateItem(container, position)
+ if (item is IntroFragment) {
+ configureFragment(item, position)
+ }
+ return item
+ }
+ }
+
+ private fun configureFragment(fragment: IntroFragment, position: Int) {
+ when (position) {
+ 0 -> {
+ fragment.setImage(ResourcesCompat.getDrawable(resources, R.drawable.intro_1, null))
+ fragment.setSubtitle(getString(R.string.intro_1_subtitle))
+ fragment.setTitleImage(ResourcesCompat.getDrawable(resources, R.drawable.intro_1_title, null))
+ fragment.setDescription(getString(R.string.intro_1_description, getString(R.string.habitica_user_count)))
+ fragment.setBackgroundColor(ContextCompat.getColor(this@IntroActivity, R.color.brand_300))
+ }
+ 1 -> {
+ fragment.setImage(ResourcesCompat.getDrawable(resources, R.drawable.intro_2, null))
+ fragment.setSubtitle(getString(R.string.intro_2_subtitle))
+ fragment.setTitle(getString(R.string.intro_2_title))
+ fragment.setDescription(getString(R.string.intro_2_description))
+ fragment.setBackgroundColor(ContextCompat.getColor(this@IntroActivity, R.color.blue_10))
+ }
+ 2 -> {
+ fragment.setImage(ResourcesCompat.getDrawable(resources, R.drawable.intro_3, null))
+ fragment.setSubtitle(getString(R.string.intro_3_subtitle))
+ fragment.setTitle(getString(R.string.intro_3_title))
+ fragment.setDescription(getString(R.string.intro_3_description))
+ fragment.setBackgroundColor(ContextCompat.getColor(this@IntroActivity, R.color.red_100))
+ }
+ }
}
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/NotificationsActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/NotificationsActivity.kt
index 01c822893..158cdd770 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/NotificationsActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/NotificationsActivity.kt
@@ -13,6 +13,8 @@ import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.InventoryRepository
import com.habitrpg.android.habitica.data.SocialRepository
+import com.habitrpg.android.habitica.databinding.ActivityIntroBinding
+import com.habitrpg.android.habitica.databinding.ActivityNotificationsBinding
import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.models.Notification
import com.habitrpg.android.habitica.models.inventory.QuestContent
@@ -20,11 +22,11 @@ import com.habitrpg.android.habitica.models.notifications.*
import com.habitrpg.android.habitica.ui.activities.MainActivity.Companion.NOTIFICATION_CLICK
import com.habitrpg.android.habitica.ui.viewmodels.NotificationsViewModel
import io.reactivex.functions.Consumer
-import kotlinx.android.synthetic.main.activity_notifications.*
import javax.inject.Inject
class NotificationsActivity : BaseActivity(), androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener {
+ private lateinit var binding: ActivityNotificationsBinding
@Inject
lateinit var inventoryRepository: InventoryRepository
@Inject
@@ -36,12 +38,17 @@ class NotificationsActivity : BaseActivity(), androidx.swiperefreshlayout.widget
override fun getLayoutResId(): Int = R.layout.activity_notifications
+ override fun getContentView(): View {
+ binding = ActivityNotificationsBinding.inflate(layoutInflater)
+ return binding.root
+ }
+
private var notifications: List = emptyList()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- setupToolbar(toolbar)
+ setupToolbar(binding.toolbar)
inflater = getSystemService(Context.LAYOUT_INFLATER_SERVICE) as? LayoutInflater
@@ -53,7 +60,7 @@ class NotificationsActivity : BaseActivity(), androidx.swiperefreshlayout.widget
viewModel.markNotificationsAsSeen(it)
}, RxErrorHandler.handleEmptyError()))
- notifications_refresh_layout?.setOnRefreshListener(this)
+ binding.notificationsRefreshLayout.setOnRefreshListener(this)
}
override fun injectActivity(component: UserComponent?) {
@@ -69,21 +76,21 @@ class NotificationsActivity : BaseActivity(), androidx.swiperefreshlayout.widget
}
override fun onRefresh() {
- notifications_refresh_layout.isRefreshing = true
+ binding.notificationsRefreshLayout.isRefreshing = true
compositeSubscription.add(viewModel.refreshNotifications().subscribe(Consumer {
- notifications_refresh_layout.isRefreshing = false
+ binding.notificationsRefreshLayout.isRefreshing = false
}, RxErrorHandler.handleEmptyError()))
}
private fun setNotifications(notifications: List) {
this.notifications = notifications
- if (notification_items == null) {
+ if (binding.notificationItems == null) {
return
}
- notification_items.removeAllViewsInLayout()
+ binding.notificationItems.removeAllViewsInLayout()
if (notifications.isEmpty()) {
displayNoNotificationsView()
@@ -93,15 +100,15 @@ class NotificationsActivity : BaseActivity(), androidx.swiperefreshlayout.widget
}
private fun displayNoNotificationsView() {
- notification_items.showDividers = LinearLayout.SHOW_DIVIDER_NONE
+ binding.notificationItems.showDividers = LinearLayout.SHOW_DIVIDER_NONE
- notification_items.addView(inflater?.inflate(R.layout.no_notifications, notification_items, false))
+ binding.notificationItems.addView(inflater?.inflate(R.layout.no_notifications, binding.notificationItems, false))
}
private fun displayNotificationsListView(notifications: List) {
- notification_items.showDividers = LinearLayout.SHOW_DIVIDER_MIDDLE or LinearLayout.SHOW_DIVIDER_END
+ binding.notificationItems.showDividers = LinearLayout.SHOW_DIVIDER_MIDDLE or LinearLayout.SHOW_DIVIDER_END
- notification_items.addView(
+ binding.notificationItems.addView(
createNotificationsHeaderView(notifications.count())
)
@@ -121,13 +128,13 @@ class NotificationsActivity : BaseActivity(), androidx.swiperefreshlayout.widget
}
if (item != null) {
- notification_items.addView(item)
+ binding.notificationItems.addView(item)
}
}
}
private fun createNotificationsHeaderView(notificationCount: Int): View? {
- val header = inflater?.inflate(R.layout.notifications_header, notification_items, false)
+ val header = inflater?.inflate(R.layout.notifications_header, binding.notificationItems, false)
val badge = header?.findViewById(R.id.notifications_title_badge) as? TextView
badge?.text = notificationCount.toString()
@@ -237,7 +244,7 @@ class NotificationsActivity : BaseActivity(), androidx.swiperefreshlayout.widget
imageResourceId: Int? = null,
textColor: Int? = null
): View? {
- val item = inflater?.inflate(R.layout.notification_item, notification_items, false)
+ val item = inflater?.inflate(R.layout.notification_item, binding.notificationItems, false)
val container = item?.findViewById(R.id.notification_item) as? View
container?.setOnClickListener {
@@ -337,7 +344,7 @@ class NotificationsActivity : BaseActivity(), androidx.swiperefreshlayout.widget
notification: Notification,
messageText: CharSequence,
openable: Boolean = false): View? {
- val item = inflater?.inflate(R.layout.notification_item_actionable, notification_items, false)
+ val item = inflater?.inflate(R.layout.notification_item_actionable, binding.notificationItems, false)
if (openable) {
val container = item?.findViewById(R.id.notification_item) as? View
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/PrefsActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/PrefsActivity.kt
index 74bd3fe44..8e1d9dd5f 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/PrefsActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/PrefsActivity.kt
@@ -6,7 +6,6 @@ import androidx.preference.PreferenceScreen
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.ui.fragments.preferences.*
-import kotlinx.android.synthetic.main.activity_prefs.*
class PrefsActivity : BaseActivity(), PreferenceFragmentCompat.OnPreferenceStartScreenCallback {
@@ -15,7 +14,7 @@ class PrefsActivity : BaseActivity(), PreferenceFragmentCompat.OnPreferenceStart
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- setupToolbar(toolbar)
+ setupToolbar(findViewById(R.id.toolbar))
supportFragmentManager.beginTransaction()
.add(R.id.fragment_container, PreferencesFragment())
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SkillMemberActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SkillMemberActivity.kt
index cc693b826..09d6ce46f 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SkillMemberActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SkillMemberActivity.kt
@@ -13,7 +13,6 @@ import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.ui.adapter.social.PartyMemberRecyclerViewAdapter
import com.habitrpg.android.habitica.ui.helpers.bindView
import io.reactivex.functions.Consumer
-import kotlinx.android.synthetic.main.activity_prefs.*
import javax.inject.Inject
class SkillMemberActivity : BaseActivity() {
@@ -36,7 +35,7 @@ class SkillMemberActivity : BaseActivity() {
public override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- setupToolbar(toolbar)
+ setupToolbar(findViewById(R.id.toolbar))
loadMemberList()
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SkillTasksActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SkillTasksActivity.kt
index a417f5b2b..795c005d8 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SkillTasksActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SkillTasksActivity.kt
@@ -18,7 +18,6 @@ import com.habitrpg.android.habitica.modules.AppModule
import com.habitrpg.android.habitica.ui.fragments.skills.SkillTasksRecyclerViewFragment
import com.habitrpg.android.habitica.ui.helpers.bindView
import io.reactivex.functions.Consumer
-import kotlinx.android.synthetic.main.activity_prefs.*
import javax.inject.Inject
import javax.inject.Named
@@ -40,7 +39,7 @@ class SkillTasksActivity : BaseActivity() {
public override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- setupToolbar(toolbar)
+ setupToolbar(findViewById(R.id.toolbar))
loadTaskLists()
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/BugFixFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/BugFixFragment.kt
index f5512c9ab..1c13c57d4 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/BugFixFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/BugFixFragment.kt
@@ -100,7 +100,7 @@ class BugFixFragment: BaseMainFragment() {
activity?.let {
val emailIntent = Intent(Intent.ACTION_SENDTO)
val mailto = "mailto:" + appConfigManager.supportEmail() +
- "&subject=" + Uri.encode(subject) +
+ "?subject=" + Uri.encode(subject) +
"&body=" + Uri.encode(bodyOfEmail)
emailIntent.data = Uri.parse(mailto);
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/SupportMainFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/SupportMainFragment.kt
index 3b43d6b69..384dab4ff 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/SupportMainFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/SupportMainFragment.kt
@@ -118,7 +118,7 @@ class SupportMainFragment : BaseMainFragment() {
activity?.let {
val emailIntent = Intent(Intent.ACTION_SENDTO)
val mailto = "mailto:" + appConfigManager.supportEmail() +
- "&subject=" + Uri.encode(subject) +
+ "?subject=" + Uri.encode(subject) +
"&body=" + Uri.encode(bodyOfEmail)
emailIntent.data = Uri.parse(mailto);