From abaf3f26125075d29adfcd0d0b83c7414b8aba85 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Thu, 28 Feb 2019 14:21:14 +0100 Subject: [PATCH] Improve deep linking --- Habitica/AndroidManifest.xml | 34 +++++++++----- Habitica/res/layout/fragment_subscription.xml | 16 +++---- Habitica/res/navigation/navigation.xml | 44 +++++++++++++++---- .../ui/activities/FullProfileActivity.kt | 29 +++++------- .../habitica/ui/activities/MainActivity.kt | 1 + .../social/PublicGuildsRecyclerViewAdapter.kt | 4 +- .../ui/fragments/social/ChatFragment.kt | 2 +- .../ui/fragments/social/ChatListFragment.kt | 2 +- .../social/InboxMessageListFragment.kt | 2 +- .../challenges/ChallengeDetailFragment.kt | 2 +- .../social/party/PartyMemberListFragment.kt | 4 +- 11 files changed, 89 insertions(+), 51 deletions(-) diff --git a/Habitica/AndroidManifest.xml b/Habitica/AndroidManifest.xml index 18ce8fb66..7f91b8e52 100644 --- a/Habitica/AndroidManifest.xml +++ b/Habitica/AndroidManifest.xml @@ -37,6 +37,14 @@ + + + + + + + + + + + + - - - + + + + + + + android:layout_gravity="end"/> @@ -134,7 +134,7 @@ android:layout_height="wrap_content" app:srcCompat="@drawable/ic_keyboard_arrow_down_black_24dp" android:id="@+id/subscribe.listitem2.expand" - android:layout_gravity="right"/> + android:layout_gravity="end"/> + android:layout_gravity="end"/> + android:layout_gravity="end"/> + @@ -30,6 +31,7 @@ android:id="@+id/tasksFragment" android:name="com.habitrpg.android.habitica.ui.fragments.tasks.TasksFragment"> + + @@ -53,19 +56,26 @@ + android:label="@string/sidebar.skills"> + + + android:label="@string/stats"> + + + android:label="@string/sidebar.tavern"> + + + @@ -81,6 +91,8 @@ android:id="@+id/challengesOverviewFragment" android:name="com.habitrpg.android.habitica.ui.fragments.social.challenges.ChallengesOverviewFragment" android:label="@string/sidebar.challenges" > + + @@ -100,11 +112,14 @@ + android:label="@string/sidebar_items"> + + + @@ -124,6 +139,7 @@ android:id="@+id/FAQOverviewFragment" android:name="com.habitrpg.android.habitica.ui.fragments.faq.FAQOverviewFragment" android:label="@string/sidebar_help" > + @@ -144,12 +160,14 @@ android:id="@+id/guildFragment" android:name="com.habitrpg.android.habitica.ui.fragments.social.GuildFragment" android:label="@string/guild" > + + app:argType="boolean" + android:defaultValue="false"/> + tools:layout="@layout/activity_prefs"> + + android:label="@string/pets"> @@ -219,7 +238,8 @@ + android:label="@string/challenge"> + @@ -228,4 +248,12 @@ android:id="@+id/taskFormActivity" android:name="com.habitrpg.android.habitica.ui.activities.TaskFormActivity" android:label="TaskFormActivity" /> + + + \ No newline at end of file diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.kt index 098fe11be..603bcf9b2 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.kt @@ -7,9 +7,6 @@ import android.os.Bundle import androidx.core.content.ContextCompat import androidx.appcompat.app.AlertDialog import androidx.appcompat.widget.AppCompatImageView -import androidx.cardview.widget.CardView -import androidx.recyclerview.widget.GridLayoutManager -import androidx.recyclerview.widget.RecyclerView import android.view.* import android.widget.* import com.facebook.drawee.backends.pipeline.Fresco @@ -22,6 +19,7 @@ import com.habitrpg.android.habitica.data.ApiClient import com.habitrpg.android.habitica.data.InventoryRepository import com.habitrpg.android.habitica.data.SocialRepository import com.habitrpg.android.habitica.extensions.notNull +import com.habitrpg.android.habitica.helpers.MainNavigationController import com.habitrpg.android.habitica.helpers.RxErrorHandler import com.habitrpg.android.habitica.helpers.UserStatComputer import com.habitrpg.android.habitica.models.AchievementGroup @@ -79,7 +77,7 @@ class FullProfileActivity : BaseActivity() { private val lastLoginView: TextView by bindView(R.id.last_login_view) private val totalCheckinsView: TextView by bindView(R.id.total_checkins_view) - private var userId = "" + private var userID = "" private var userName: String? = null private var avatarWithBars: AvatarWithBarsViewModel? = null private var attributeStrSum = 0f @@ -93,13 +91,14 @@ class FullProfileActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - val intent = intent - val bundle = intent.extras - this.userId = bundle?.getString("userId") ?: "" + userID = intent?.extras?.getString("userID", "") ?: "" + if (userID.isEmpty()) { + userID = intent?.data?.path?.removePrefix("/profile/") ?: "" + } setTitle(R.string.profile_loading_data) - compositeSubscription.add(socialRepository.getMember(this.userId).subscribe(Consumer { this.updateView(it) }, RxErrorHandler.handleEmptyError())) + compositeSubscription.add(socialRepository.getMember(this.userID).subscribe(Consumer { this.updateView(it) }, RxErrorHandler.handleEmptyError())) avatarWithBars?.valueBarLabelsToBlack() @@ -144,7 +143,7 @@ class FullProfileActivity : BaseActivity() { val addMessageDialog = AlertDialog.Builder(this) .setPositiveButton(android.R.string.ok) { _, _ -> - socialRepository.postPrivateMessage(userId, emojiEditText.text.toString()) + socialRepository.postPrivateMessage(userID, emojiEditText.text.toString()) .subscribe(Consumer { HabiticaSnackbar.showSnackbar(this@FullProfileActivity.fullprofile_scrollview.getChildAt(0) as ViewGroup, String.format(getString(R.string.profile_message_sent_to), userName), SnackbarDisplayType.NORMAL) @@ -214,7 +213,7 @@ class FullProfileActivity : BaseActivity() { // Load the members achievements now - compositeSubscription.add(socialRepository.getMemberAchievements(this.userId).subscribe(Consumer { this.fillAchievements(it) }, RxErrorHandler.handleEmptyError())) + compositeSubscription.add(socialRepository.getMemberAchievements(this.userID).subscribe(Consumer { this.fillAchievements(it) }, RxErrorHandler.handleEmptyError())) } private fun updatePetsMountsView(user: Member) { @@ -467,17 +466,13 @@ class FullProfileActivity : BaseActivity() { companion object { - fun open(context: Context, userId: String) { + fun open(userId: String) { if (userId == "system") { return } val bundle = Bundle() - bundle.putString("userId", userId) - - val intent = Intent(context, FullProfileActivity::class.java) - intent.putExtras(bundle) - intent.flags = Intent.FLAG_ACTIVITY_REORDER_TO_FRONT - context.startActivity(intent) + bundle.putString("userID", userId) + MainNavigationController.navigate(R.id.fullProfileActivity, bundle) } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt index 72faac9b4..09cfec80a 100755 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt @@ -10,6 +10,7 @@ import android.content.res.Configuration import android.graphics.Bitmap import android.graphics.Canvas import android.graphics.drawable.BitmapDrawable +import android.net.Uri import android.os.Build import android.os.Build.VERSION.SDK_INT import android.os.Bundle diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/PublicGuildsRecyclerViewAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/PublicGuildsRecyclerViewAdapter.kt index 10b8949ea..d1b78f01d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/PublicGuildsRecyclerViewAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/PublicGuildsRecyclerViewAdapter.kt @@ -38,7 +38,9 @@ class PublicGuildsRecyclerViewAdapter(data: OrderedRealmCollection?, auto val guildViewHolder = GuildViewHolder(parent.inflate(R.layout.item_public_guild)) guildViewHolder.itemView.setOnClickListener { v -> val guild = v.tag as? Group ?: return@setOnClickListener - MainNavigationController.navigate(PublicGuildsFragmentDirections.openGuildDetail(guild.id, isInGroup(guild))) + val directions =PublicGuildsFragmentDirections.openGuildDetail(guild.id) + directions.isMember = isInGroup(guild) + MainNavigationController.navigate(directions) } guildViewHolder.joinLeaveButton.setOnClickListener { v -> val guild = v.tag as? Group ?: return@setOnClickListener diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatFragment.kt index da515536e..bf874e17f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatFragment.kt @@ -75,7 +75,7 @@ class ChatFragment constructor(private val viewModel: PartyViewModel) : BaseFrag chatAdapter = ChatRecyclerViewAdapter(null, true, null, true) chatAdapter.notNull {adapter -> compositeSubscription.add(adapter.getUserLabelClickFlowable().subscribe(Consumer { userId -> - context.notNull { FullProfileActivity.open(it, userId) } + FullProfileActivity.open(userId) }, RxErrorHandler.handleEmptyError())) compositeSubscription.add(adapter.getDeleteMessageFlowable().subscribe(Consumer { this.showDeleteConfirmationDialog(it) }, RxErrorHandler.handleEmptyError())) compositeSubscription.add(adapter.getFlagMessageClickFlowable().subscribe(Consumer { this.showFlagConfirmationDialog(it) }, RxErrorHandler.handleEmptyError())) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatListFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatListFragment.kt index fb790328d..23b46f480 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatListFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatListFragment.kt @@ -117,7 +117,7 @@ class ChatListFragment : BaseFragment(), SwipeRefreshLayout.OnRefreshListener { chatAdapter = ChatRecyclerViewAdapter(null, true, user, true) chatAdapter.notNull {adapter -> compositeSubscription.add(adapter.getUserLabelClickFlowable().subscribe(Consumer { userId -> - context.notNull { FullProfileActivity.open(it, userId) } + FullProfileActivity.open(userId) }, RxErrorHandler.handleEmptyError())) compositeSubscription.add(adapter.getDeleteMessageFlowable().subscribe(Consumer { this.showDeleteConfirmationDialog(it) }, RxErrorHandler.handleEmptyError())) compositeSubscription.add(adapter.getFlagMessageClickFlowable().subscribe(Consumer { this.showFlagConfirmationDialog(it) }, RxErrorHandler.handleEmptyError())) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.kt index ed6580b11..1455b4fec 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.kt @@ -67,7 +67,7 @@ class InboxMessageListFragment : BaseMainFragment(), androidx.swiperefreshlayout recyclerView.itemAnimator = SafeDefaultItemAnimator() chatAdapter.notNull { adapter -> compositeSubscription.add(adapter.getUserLabelClickFlowable().subscribe(Consumer { - context.notNull { context -> FullProfileActivity.open(context, it) } + FullProfileActivity.open(it) }, RxErrorHandler.handleEmptyError())) compositeSubscription.add(adapter.getDeleteMessageFlowable().subscribe(Consumer { this.showDeleteConfirmationDialog(it) }, RxErrorHandler.handleEmptyError())) compositeSubscription.add(adapter.getFlagMessageClickFlowable().subscribe(Consumer { this.showFlagConfirmationDialog(it) }, 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 8703cb345..b1a11a89d 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 @@ -90,7 +90,7 @@ class ChallengeDetailFragment: BaseMainFragment() { challengeLeaderWrapper?.setOnClickListener { val leaderID = challenge?.leaderId ?: return@setOnClickListener - FullProfileActivity.open(it.context, leaderID) + FullProfileActivity.open(leaderID) } challengeID.notNull {id -> diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyMemberListFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyMemberListFragment.kt index bfb481522..42e929f03 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyMemberListFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyMemberListFragment.kt @@ -52,9 +52,7 @@ class PartyMemberListFragment constructor(private val viewModel: PartyViewModel) recyclerView?.layoutManager = androidx.recyclerview.widget.LinearLayoutManager(context) adapter = PartyMemberRecyclerViewAdapter(null, true) - context.notNull { - adapter?.getUserClickedEvents()?.subscribe(Consumer { userId -> FullProfileActivity.open(it, userId) }, RxErrorHandler.handleEmptyError()).notNull { compositeSubscription.add(it) } - } + adapter?.getUserClickedEvents()?.subscribe(Consumer { userId -> FullProfileActivity.open(userId) }, RxErrorHandler.handleEmptyError()).notNull { compositeSubscription.add(it) } recyclerView?.adapter = adapter recyclerView?.itemAnimator = SafeDefaultItemAnimator()