mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-04-14 19:56:32 +00:00
Enable rotation and fix issue with party screen
This commit is contained in:
parent
714e071983
commit
b8c44e589e
6 changed files with 77 additions and 85 deletions
|
|
@ -26,6 +26,7 @@
|
|||
android:theme="@style/AppTheme"
|
||||
tools:replace="android:name"
|
||||
android:fullBackupContent="@xml/backup_descriptor"
|
||||
android:configChanges="orientation"
|
||||
android:networkSecurityConfig="@xml/network_security_config">
|
||||
<meta-data
|
||||
android:name="firebase_performance_logcat_enabled"
|
||||
|
|
@ -34,8 +35,7 @@
|
|||
android:name=".ui.activities.MainActivity"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/AppTheme.NoActionBar.Transparent"
|
||||
android:windowSoftInputMode="stateHidden|adjustResize"
|
||||
android:screenOrientation="portrait">
|
||||
android:windowSoftInputMode="stateHidden|adjustResize">
|
||||
<nav-graph android:value="@navigation/navigation" />
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
|
@ -54,7 +54,6 @@
|
|||
android:name=".ui.activities.PrefsActivity"
|
||||
android:parentActivityName=".ui.activities.MainActivity"
|
||||
android:label="@string/PS_settings_title"
|
||||
android:screenOrientation="portrait"
|
||||
tools:ignore="UnusedAttribute">
|
||||
<intent-filter android:label="@string/app_name">
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
|
|
@ -69,41 +68,34 @@
|
|||
android:name=".ui.activities.FixCharacterValuesActivity"
|
||||
android:parentActivityName=".ui.activities.PrefsActivity"
|
||||
android:label="@string/PS_settings_title"
|
||||
android:screenOrientation="portrait"
|
||||
tools:ignore="UnusedAttribute">
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".ui.activities.LoginActivity"
|
||||
android:label="@string/LoginActivityName"
|
||||
android:theme="@style/AppTheme.NoActionBar.Transparent"
|
||||
android:windowSoftInputMode="adjustResize"
|
||||
android:screenOrientation="portrait">
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".ui.activities.IntroActivity"
|
||||
android:theme="@style/AppTheme.NoActionBar.Transparent"
|
||||
android:windowSoftInputMode="adjustResize"
|
||||
android:screenOrientation="portrait">
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".ui.activities.SetupActivity"
|
||||
android:windowSoftInputMode="stateHidden|adjustResize"
|
||||
android:screenOrientation="portrait">
|
||||
android:windowSoftInputMode="stateHidden|adjustResize">
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".ui.activities.SkillTasksActivity"
|
||||
android:label="@string/app_name"
|
||||
android:screenOrientation="portrait">
|
||||
android:label="@string/app_name">
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".ui.activities.SkillMemberActivity"
|
||||
android:label="@string/app_name"
|
||||
android:screenOrientation="portrait">
|
||||
android:label="@string/app_name">
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".ui.activities.GiftIAPActivity"
|
||||
android:label="@string/gift_subscription"
|
||||
android:screenOrientation="portrait">
|
||||
android:label="@string/gift_subscription">
|
||||
</activity>
|
||||
|
||||
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
|
||||
|
|
@ -112,12 +104,10 @@
|
|||
android:value="false"/>
|
||||
<activity
|
||||
android:name=".ui.activities.AboutActivity"
|
||||
android:theme="@style/AppThemeWithActionBarBlackText"
|
||||
android:screenOrientation="portrait"/>
|
||||
android:theme="@style/AppThemeWithActionBarBlackText"/>
|
||||
<activity
|
||||
android:name=".ui.activities.TaskFormActivity"
|
||||
android:parentActivityName=".ui.activities.MainActivity"
|
||||
android:screenOrientation="portrait"
|
||||
tools:ignore="UnusedAttribute">
|
||||
<meta-data
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
|
|
@ -127,7 +117,6 @@
|
|||
android:name=".ui.activities.OldTaskFormActivity"
|
||||
android:theme="@style/AppThemeWithActionBarBlackText"
|
||||
android:parentActivityName=".ui.activities.MainActivity"
|
||||
android:screenOrientation="portrait"
|
||||
tools:ignore="UnusedAttribute">
|
||||
<meta-data
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
|
|
@ -137,7 +126,6 @@
|
|||
android:name=".ui.activities.GroupFormActivity"
|
||||
android:theme="@style/AppTheme.NoActionBar.Transparent"
|
||||
android:parentActivityName=".ui.activities.MainActivity"
|
||||
android:screenOrientation="portrait"
|
||||
tools:ignore="UnusedAttribute">
|
||||
<meta-data
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
|
|
@ -146,7 +134,6 @@
|
|||
<activity
|
||||
android:name=".ui.activities.ClassSelectionActivity"
|
||||
android:parentActivityName=".ui.activities.MainActivity"
|
||||
android:screenOrientation="portrait"
|
||||
tools:ignore="UnusedAttribute"
|
||||
android:label="@string/select_class">
|
||||
<meta-data
|
||||
|
|
@ -156,7 +143,6 @@
|
|||
<activity
|
||||
android:name=".ui.activities.PartyInviteActivity"
|
||||
android:theme="@style/AppThemeWithActionBarBlackText"
|
||||
android:screenOrientation="portrait"
|
||||
tools:ignore="UnusedAttribute"
|
||||
android:label="@string/invite_users">
|
||||
</activity>
|
||||
|
|
@ -164,7 +150,6 @@
|
|||
android:name=".ui.activities.FullProfileActivity"
|
||||
android:theme="@style/AppThemeWithActionBarBlackText"
|
||||
android:parentActivityName=".ui.activities.MainActivity"
|
||||
android:screenOrientation="portrait"
|
||||
tools:ignore="UnusedAttribute">
|
||||
<meta-data
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
|
|
@ -182,7 +167,6 @@
|
|||
android:name=".ui.activities.ChallengeFormActivity"
|
||||
android:theme="@style/AppTheme.ActionBar"
|
||||
android:parentActivityName=".ui.activities.MainActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:launchMode="singleTask"
|
||||
tools:ignore="UnusedAttribute">
|
||||
<meta-data
|
||||
|
|
|
|||
|
|
@ -596,7 +596,7 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
|
|||
|
||||
private fun displayDeathDialogIfNeeded() {
|
||||
|
||||
if (user?.stats?.hp ?: 0.0 > 0) {
|
||||
if (user?.stats?.hp ?: 1.0 > 0) {
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ 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
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseFragment
|
||||
import com.habitrpg.android.habitica.ui.fragments.social.party.PartyFragment
|
||||
import com.habitrpg.android.habitica.ui.helpers.SafeDefaultItemAnimator
|
||||
import com.habitrpg.android.habitica.ui.viewmodels.PartyViewModel
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.Companion.showSnackbar
|
||||
|
|
@ -42,9 +43,9 @@ import kotlinx.android.synthetic.main.tavern_chat_new_entry_item.*
|
|||
import java.util.concurrent.TimeUnit
|
||||
import javax.inject.Inject
|
||||
|
||||
class ChatFragment constructor() : BaseFragment(), SwipeRefreshLayout.OnRefreshListener {
|
||||
class ChatFragment : BaseFragment(), SwipeRefreshLayout.OnRefreshListener {
|
||||
|
||||
lateinit var viewModel: PartyViewModel
|
||||
var viewModel: PartyViewModel? = null
|
||||
|
||||
@Inject
|
||||
lateinit var configManager: RemoteConfigManager
|
||||
|
|
@ -84,33 +85,17 @@ class ChatFragment constructor() : BaseFragment(), SwipeRefreshLayout.OnRefreshL
|
|||
compositeSubscription.add(adapter.getFlagMessageClickFlowable().subscribe(Consumer { this.showFlagConfirmationDialog(it) }, RxErrorHandler.handleEmptyError()))
|
||||
compositeSubscription.add(adapter.getReplyMessageEvents().subscribe(Consumer{ setReplyTo(it) }, RxErrorHandler.handleEmptyError()))
|
||||
compositeSubscription.add(adapter.getCopyMessageFlowable().subscribe(Consumer { this.copyMessageToClipboard(it) }, RxErrorHandler.handleEmptyError()))
|
||||
compositeSubscription.add(adapter.getLikeMessageFlowable().subscribe(Consumer { viewModel.likeMessage(it) }, RxErrorHandler.handleEmptyError()))
|
||||
compositeSubscription.add(adapter.getLikeMessageFlowable().subscribe(Consumer { viewModel?.likeMessage(it) }, RxErrorHandler.handleEmptyError()))
|
||||
}
|
||||
|
||||
chatBarView.sendAction = { sendChatMessage(it) }
|
||||
chatBarView.maxChatLength = configManager.maxChatLength()
|
||||
chatBarView.autocompleteContext = "party"
|
||||
chatBarView.groupID = viewModel.getGroupData().value?.id
|
||||
chatBarView.groupID = viewModel?.getGroupData()?.value?.id
|
||||
|
||||
recyclerView.adapter = chatAdapter
|
||||
recyclerView.itemAnimator = SafeDefaultItemAnimator()
|
||||
|
||||
compositeSubscription.add(viewModel.getChatMessages().subscribe(Consumer<RealmResults<ChatMessage>> { this.setChatMessages(it) }, RxErrorHandler.handleEmptyError()))
|
||||
|
||||
viewModel.getUserData().observe(viewLifecycleOwner, Observer {
|
||||
chatAdapter?.user = it
|
||||
if (it?.flags?.isCommunityGuidelinesAccepted == true) {
|
||||
communityGuidelinesView.visibility = View.GONE
|
||||
} else {
|
||||
communityGuidelinesView.setOnClickListener { _ ->
|
||||
val i = Intent(Intent.ACTION_VIEW)
|
||||
i.data = "https://habitica.com/static/community-guidelines".toUri()
|
||||
context?.startActivity(i)
|
||||
viewModel.updateUser("flags.communityGuidelinesAccepted", true)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
recyclerView.addOnScrollListener(object : androidx.recyclerview.widget.RecyclerView.OnScrollListener() {
|
||||
override fun onScrolled(recyclerView: androidx.recyclerview.widget.RecyclerView, dx: Int, dy: Int) {
|
||||
super.onScrolled(recyclerView, dx, dy)
|
||||
|
|
@ -119,6 +104,22 @@ class ChatFragment constructor() : BaseFragment(), SwipeRefreshLayout.OnRefreshL
|
|||
})
|
||||
|
||||
refresh(false)
|
||||
|
||||
viewModel?.getChatMessages()?.subscribe(Consumer<RealmResults<ChatMessage>> { this.setChatMessages(it) }, RxErrorHandler.handleEmptyError())?.let { compositeSubscription.add(it) }
|
||||
|
||||
viewModel?.getUserData()?.observe(viewLifecycleOwner, Observer {
|
||||
chatAdapter?.user = it
|
||||
if (it?.flags?.isCommunityGuidelinesAccepted == true) {
|
||||
communityGuidelinesView.visibility = View.GONE
|
||||
} else {
|
||||
communityGuidelinesView.setOnClickListener { _ ->
|
||||
val i = Intent(Intent.ACTION_VIEW)
|
||||
i.data = "https://habitica.com/static/community-guidelines".toUri()
|
||||
context?.startActivity(i)
|
||||
viewModel?.updateUser("flags.communityGuidelinesAccepted", true)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
|
|
@ -169,7 +170,7 @@ class ChatFragment constructor() : BaseFragment(), SwipeRefreshLayout.OnRefreshL
|
|||
if (isUserInitiated) {
|
||||
refreshLayout.isRefreshing = true
|
||||
}
|
||||
viewModel.retrieveGroupChat {
|
||||
viewModel?.retrieveGroupChat {
|
||||
refreshLayout?.isRefreshing = false
|
||||
if (isScrolledToTop) {
|
||||
recyclerView.scrollToPosition(0)
|
||||
|
|
@ -184,7 +185,7 @@ class ChatFragment constructor() : BaseFragment(), SwipeRefreshLayout.OnRefreshL
|
|||
|
||||
private fun markMessagesAsSeen() {
|
||||
if (navigatedOnceToFragment) {
|
||||
viewModel.markMessagesSeen()
|
||||
viewModel?.markMessagesSeen()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -210,23 +211,23 @@ class ChatFragment constructor() : BaseFragment(), SwipeRefreshLayout.OnRefreshL
|
|||
.setTitle(R.string.confirm_delete_tag_title)
|
||||
.setMessage(R.string.confirm_delete_tag_message)
|
||||
.setIcon(android.R.drawable.ic_dialog_alert)
|
||||
.setPositiveButton(android.R.string.yes) { _, _ -> viewModel.deleteMessage(chatMessage) }
|
||||
.setPositiveButton(android.R.string.yes) { _, _ -> viewModel?.deleteMessage(chatMessage) }
|
||||
.setNegativeButton(android.R.string.no, null).show()
|
||||
}
|
||||
}
|
||||
|
||||
private fun setChatMessages(chatMessages: RealmResults<ChatMessage>) {
|
||||
chatAdapter?.updateData(chatMessages)
|
||||
chatBarView.chatMessages = viewModel.socialRepository.getUnmanagedCopy(chatMessages)
|
||||
viewModel?.socialRepository?.getUnmanagedCopy(chatMessages)?.let { chatBarView.chatMessages = it }
|
||||
recyclerView.scrollToPosition(0)
|
||||
|
||||
viewModel.gotNewMessages = true
|
||||
viewModel?.gotNewMessages = true
|
||||
|
||||
markMessagesAsSeen()
|
||||
}
|
||||
|
||||
private fun sendChatMessage(chatText: String) {
|
||||
viewModel.postGroupChat(chatText) {
|
||||
viewModel?.postGroupChat(chatText) {
|
||||
recyclerView?.scrollToPosition(0)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,9 +33,9 @@ import javax.inject.Inject
|
|||
import javax.inject.Named
|
||||
|
||||
|
||||
class PartyDetailFragment constructor() : BaseFragment() {
|
||||
class PartyDetailFragment : BaseFragment() {
|
||||
|
||||
lateinit var viewModel: PartyViewModel
|
||||
var viewModel: PartyViewModel? = null
|
||||
|
||||
@Inject
|
||||
lateinit var inventoryRepository: InventoryRepository
|
||||
|
|
@ -89,17 +89,13 @@ class PartyDetailFragment constructor() : BaseFragment() {
|
|||
newQuestButton?.setOnClickListener { inviteNewQuest() }
|
||||
questDetailButton?.setOnClickListener { questDetailButtonClicked() }
|
||||
leaveButton?.setOnClickListener { leaveParty() }
|
||||
}
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
|
||||
viewModel.getGroupData().observe(viewLifecycleOwner, Observer { updateParty(it) })
|
||||
viewModel.getUserData().observe(viewLifecycleOwner, Observer { updateUser(it) })
|
||||
viewModel?.getGroupData()?.observe(viewLifecycleOwner, Observer { updateParty(it) })
|
||||
viewModel?.getUserData()?.observe(viewLifecycleOwner, Observer { updateUser(it) })
|
||||
}
|
||||
|
||||
private fun refreshParty() {
|
||||
viewModel.retrieveGroup {
|
||||
viewModel?.retrieveGroup {
|
||||
refreshLayout?.isRefreshing = false
|
||||
}
|
||||
}
|
||||
|
|
@ -158,7 +154,7 @@ class PartyDetailFragment constructor() : BaseFragment() {
|
|||
}
|
||||
|
||||
private fun showParticipantButtons(): Boolean {
|
||||
return viewModel.showParticipantButtons()
|
||||
return viewModel?.showParticipantButtons() ?: false
|
||||
}
|
||||
|
||||
private fun updateQuestContent(questContent: QuestContent) {
|
||||
|
|
@ -172,11 +168,11 @@ class PartyDetailFragment constructor() : BaseFragment() {
|
|||
} else {
|
||||
DataBindingUtils.loadImage(questImageView, "quest_" + questContent.key)
|
||||
}
|
||||
if (viewModel.isQuestActive) {
|
||||
if (viewModel?.isQuestActive == true) {
|
||||
questProgressView?.visibility = View.VISIBLE
|
||||
questProgressView?.setData(questContent, viewModel.getGroupData().value?.quest?.progress)
|
||||
questProgressView?.setData(questContent, viewModel?.getGroupData()?.value?.quest?.progress)
|
||||
|
||||
questParticipationView?.text = getString(R.string.number_participants, viewModel.getGroupData().value?.quest?.members?.size)
|
||||
questParticipationView?.text = getString(R.string.number_participants, viewModel?.getGroupData()?.value?.quest?.members?.size)
|
||||
} else {
|
||||
questProgressView?.visibility = View.GONE
|
||||
}
|
||||
|
|
@ -193,34 +189,34 @@ class PartyDetailFragment constructor() : BaseFragment() {
|
|||
val builder = AlertDialog.Builder(activity)
|
||||
.setMessage(R.string.leave_party_confirmation)
|
||||
.setPositiveButton(R.string.yes) { _, _ ->
|
||||
viewModel.leaveGroup { }
|
||||
viewModel?.leaveGroup { }
|
||||
}.setNegativeButton(R.string.no) { _, _ -> }
|
||||
builder.show()
|
||||
}
|
||||
|
||||
private fun onQuestAccept() {
|
||||
viewModel.acceptQuest()
|
||||
viewModel?.acceptQuest()
|
||||
}
|
||||
|
||||
|
||||
private fun onQuestReject() {
|
||||
viewModel.rejectQuest()
|
||||
viewModel?.rejectQuest()
|
||||
}
|
||||
|
||||
private fun onPartyInviteAccepted() {
|
||||
viewModel.getUserData().value?.invitations?.party?.id.notNull {
|
||||
viewModel.joinGroup(it)
|
||||
viewModel?.getUserData()?.value?.invitations?.party?.id.notNull {
|
||||
viewModel?.joinGroup(it)
|
||||
}
|
||||
}
|
||||
|
||||
private fun onPartyInviteRejected() {
|
||||
viewModel.getUserData().value?.invitations?.party?.id.notNull {
|
||||
viewModel.rejectGroupInvite(it)
|
||||
viewModel?.getUserData()?.value?.invitations?.party?.id.notNull {
|
||||
viewModel?.rejectGroupInvite(it)
|
||||
}
|
||||
}
|
||||
|
||||
private fun questDetailButtonClicked() {
|
||||
viewModel.getGroupData().value.notNull { party ->
|
||||
viewModel?.getGroupData()?.value.notNull { party ->
|
||||
MainNavigationController.navigate(PartyFragmentDirections.openQuestDetail(party.id, party.quest?.key ?: ""))
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ class PartyFragment : BaseMainFragment() {
|
|||
private var chatFragment: ChatFragment? = null
|
||||
private var viewPagerAdapter: androidx.fragment.app.FragmentPagerAdapter? = null
|
||||
|
||||
private lateinit var viewModel: PartyViewModel
|
||||
internal lateinit var viewModel: PartyViewModel
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
|
||||
savedInstanceState: Bundle?): View? {
|
||||
|
|
@ -84,10 +84,31 @@ class PartyFragment : BaseMainFragment() {
|
|||
viewPager?.currentItem = 0
|
||||
|
||||
setViewPagerAdapter()
|
||||
|
||||
setFragments()
|
||||
|
||||
this.tutorialStepIdentifier = "party"
|
||||
this.tutorialText = getString(R.string.tutorial_party)
|
||||
}
|
||||
|
||||
fun setFragments() {
|
||||
val fragments = childFragmentManager.fragments
|
||||
for (childFragment in fragments) {
|
||||
if (childFragment is ChatFragment) {
|
||||
chatFragment = childFragment
|
||||
chatFragment?.viewModel = viewModel
|
||||
}
|
||||
if (childFragment is PartyDetailFragment) {
|
||||
firstFragment = childFragment
|
||||
childFragment.viewModel = viewModel
|
||||
}
|
||||
if (childFragment is PartyMemberListFragment) {
|
||||
partyMemberListFragment = childFragment
|
||||
childFragment.viewModel = viewModel
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun injectFragment(component: AppComponent) {
|
||||
component.inject(this)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ import javax.inject.Inject
|
|||
|
||||
class PartyMemberListFragment : BaseFragment() {
|
||||
|
||||
lateinit var viewModel: PartyViewModel
|
||||
var viewModel: PartyViewModel? = null
|
||||
|
||||
@Inject
|
||||
lateinit var socialRepository: SocialRepository
|
||||
|
|
@ -51,19 +51,9 @@ class PartyMemberListFragment : BaseFragment() {
|
|||
recyclerView?.itemAnimator = SafeDefaultItemAnimator()
|
||||
|
||||
refreshLayout?.setOnRefreshListener { this.refreshMembers() }
|
||||
|
||||
getUsers()
|
||||
}
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
|
||||
viewModel.getGroupData().observe(viewLifecycleOwner, Observer {
|
||||
adapter?.leaderID = it?.leaderID
|
||||
adapter?.notifyDataSetChanged()
|
||||
})
|
||||
}
|
||||
|
||||
private fun refreshMembers() {
|
||||
setRefreshing(true)
|
||||
compositeSubscription.add(socialRepository.retrieveGroupMembers(partyId ?: "", true).doOnComplete { setRefreshing(false) }.subscribe(Consumer { }, RxErrorHandler.handleEmptyError()))
|
||||
|
|
|
|||
Loading…
Reference in a new issue