Skip to content

Commit 86438cf

Browse files
authored
Merge pull request #6871 from vector-im/feature/eric/new-layout-debug
Debug Icon UX Improvements & Addition in New Layout
2 parents 4162eb8 + add7bd9 commit 86438cf

File tree

6 files changed

+57
-6
lines changed

6 files changed

+57
-6
lines changed

changelog.d/6871.feature

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Improves Developer Mode Debug Button UX and adds it to New App Layout

vector/src/main/java/im/vector/app/features/home/HomeActivity.kt

+12
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ import im.vector.app.core.di.ActiveSessionHolder
4141
import im.vector.app.core.extensions.hideKeyboard
4242
import im.vector.app.core.extensions.registerStartForActivityResult
4343
import im.vector.app.core.extensions.replaceFragment
44+
import im.vector.app.core.extensions.restart
4445
import im.vector.app.core.extensions.validateBackPressed
4546
import im.vector.app.core.platform.VectorBaseActivity
4647
import im.vector.app.core.platform.VectorMenuProvider
@@ -138,6 +139,8 @@ class HomeActivity :
138139
@Inject lateinit var fcmHelper: FcmHelper
139140
@Inject lateinit var nightlyProxy: NightlyProxy
140141

142+
private var isNewAppLayoutEnabled: Boolean = false // delete once old app layout is removed
143+
141144
private val createSpaceResultLauncher = registerStartForActivityResult { activityResult ->
142145
if (activityResult.resultCode == Activity.RESULT_OK) {
143146
val spaceId = SpaceCreationActivity.getCreatedSpaceId(activityResult.data)
@@ -196,6 +199,7 @@ class HomeActivity :
196199

197200
override fun onCreate(savedInstanceState: Bundle?) {
198201
super.onCreate(savedInstanceState)
202+
isNewAppLayoutEnabled = vectorFeatures.isNewAppLayoutEnabled()
199203
analyticsScreenName = MobileScreen.ScreenName.Home
200204
supportFragmentManager.registerFragmentLifecycleCallbacks(fragmentLifecycleCallbacks, false)
201205
unifiedPushHelper.register(this) {
@@ -560,6 +564,14 @@ class HomeActivity :
560564

561565
// Check nightly
562566
nightlyProxy.onHomeResumed()
567+
568+
checkNewAppLayoutFlagChange()
569+
}
570+
571+
private fun checkNewAppLayoutFlagChange() {
572+
if (buildMeta.isDebug && vectorFeatures.isNewAppLayoutEnabled() != isNewAppLayoutEnabled) {
573+
restart()
574+
}
563575
}
564576

565577
override fun getMenuRes() = if (vectorFeatures.isNewAppLayoutEnabled()) R.menu.menu_new_home else R.menu.menu_home

vector/src/main/java/im/vector/app/features/home/HomeDrawerFragment.kt

+5-1
Original file line numberDiff line numberDiff line change
@@ -113,10 +113,14 @@ class HomeDrawerFragment @Inject constructor(
113113
}
114114

115115
// Debug menu
116-
views.homeDrawerHeaderDebugView.isVisible = buildMeta.isDebug && vectorPreferences.developerMode()
117116
views.homeDrawerHeaderDebugView.debouncedClicks {
118117
sharedActionViewModel.post(HomeActivitySharedAction.CloseDrawer)
119118
navigator.openDebug(requireActivity())
120119
}
121120
}
121+
122+
override fun onResume() {
123+
super.onResume()
124+
views.homeDrawerHeaderDebugView.isVisible = buildMeta.isDebug && vectorPreferences.developerMode()
125+
}
122126
}

vector/src/main/java/im/vector/app/features/home/NewHomeDetailFragment.kt

+21
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,13 @@ import android.view.Menu
2222
import android.view.MenuItem
2323
import android.view.View
2424
import android.view.ViewGroup
25+
import androidx.core.view.isVisible
2526
import androidx.fragment.app.Fragment
2627
import androidx.lifecycle.lifecycleScope
2728
import com.airbnb.mvrx.activityViewModel
2829
import com.airbnb.mvrx.fragmentViewModel
2930
import com.airbnb.mvrx.withState
31+
import com.google.android.material.appbar.AppBarLayout
3032
import com.google.android.material.badge.BadgeDrawable
3133
import im.vector.app.R
3234
import im.vector.app.SpaceStateHandler
@@ -35,6 +37,7 @@ import im.vector.app.core.platform.OnBackPressed
3537
import im.vector.app.core.platform.VectorBaseActivity
3638
import im.vector.app.core.platform.VectorBaseFragment
3739
import im.vector.app.core.platform.VectorMenuProvider
40+
import im.vector.app.core.resources.BuildMeta
3841
import im.vector.app.core.resources.ColorProvider
3942
import im.vector.app.core.ui.views.CurrentCallsView
4043
import im.vector.app.core.ui.views.CurrentCallsViewPresenter
@@ -69,6 +72,7 @@ class NewHomeDetailFragment @Inject constructor(
6972
private val vectorPreferences: VectorPreferences,
7073
private val spaceStateHandler: SpaceStateHandler,
7174
private val session: Session,
75+
private val buildMeta: BuildMeta,
7276
) : VectorBaseFragment<FragmentNewHomeDetailBinding>(),
7377
KeysBackupBanner.Delegate,
7478
CurrentCallsView.Callback,
@@ -123,6 +127,7 @@ class NewHomeDetailFragment @Inject constructor(
123127
setupToolbar()
124128
setupKeysBackupBanner()
125129
setupActiveCallView()
130+
setupDebugButton()
126131

127132
withState(viewModel) {
128133
// Update the navigation view if needed (for when we restore the tabs)
@@ -190,6 +195,7 @@ class NewHomeDetailFragment @Inject constructor(
190195
updateTabVisibilitySafely(R.id.bottom_action_notification, vectorPreferences.labAddNotificationTab())
191196
callManager.checkForProtocolsSupportIfNeeded()
192197
refreshSpaceState()
198+
refreshDebugButtonState()
193199
}
194200

195201
private fun refreshSpaceState() {
@@ -364,6 +370,21 @@ class NewHomeDetailFragment @Inject constructor(
364370
}
365371
}
366372

373+
private fun setupDebugButton() {
374+
views.debugButton.debouncedClicks {
375+
sharedActionViewModel.post(HomeActivitySharedAction.CloseDrawer)
376+
navigator.openDebug(requireActivity())
377+
}
378+
379+
views.appBarLayout.addOnOffsetChangedListener(AppBarLayout.OnOffsetChangedListener { _, verticalOffset ->
380+
views.debugButton.isVisible = verticalOffset == 0
381+
})
382+
}
383+
384+
private fun refreshDebugButtonState() {
385+
views.debugButton.isVisible = buildMeta.isDebug && vectorPreferences.developerMode()
386+
}
387+
367388
/* ==========================================================================================
368389
* KeysBackupBanner Listener
369390
* ========================================================================================== */

vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt

+4-4
Original file line numberDiff line numberDiff line change
@@ -1128,18 +1128,18 @@ class VectorPreferences @Inject constructor(
11281128
}
11291129

11301130
/**
1131-
* Sets the space backstack that is used for up navigation
1132-
* This needs to be persisted because navigating up through spaces should work across sessions
1131+
* Sets the space backstack that is used for up navigation.
1132+
* This needs to be persisted because navigating up through spaces should work across sessions.
11331133
*
1134-
* Only the IDs of the spaces are stored
1134+
* Only the IDs of the spaces are stored.
11351135
*/
11361136
fun setSpaceBackstack(spaceBackstack: List<String?>) {
11371137
val spaceIdsJoined = spaceBackstack.takeIf { it.isNotEmpty() }?.joinToString(",")
11381138
defaultPrefs.edit().putString(SETTINGS_PERSISTED_SPACE_BACKSTACK, spaceIdsJoined).apply()
11391139
}
11401140

11411141
/**
1142-
* Gets the space backstack used for up navigation
1142+
* Gets the space backstack used for up navigation.
11431143
*/
11441144
fun getSpaceBackstack(): List<String?> {
11451145
val spaceIdsJoined = defaultPrefs.getString(SETTINGS_PERSISTED_SPACE_BACKSTACK, null)

vector/src/main/res/layout/fragment_new_home_detail.xml

+14-1
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,25 @@
6868
android:id="@+id/avatar"
6969
android:layout_width="36dp"
7070
android:layout_height="36dp"
71-
android:padding="6dp"
7271
android:contentDescription="@string/a11y_open_settings"
72+
android:padding="6dp"
7373
tools:src="@sample/user_round_avatars" />
7474

7575
</com.google.android.material.appbar.MaterialToolbar>
7676

77+
<ImageView
78+
android:id="@+id/debug_button"
79+
style="@style/VectorDebug"
80+
android:layout_width="48dp"
81+
android:layout_height="48dp"
82+
android:layout_gravity="bottom|end"
83+
android:layout_marginStart="12dp"
84+
android:importantForAccessibility="no"
85+
android:scaleType="center"
86+
android:src="@drawable/ic_settings_x"
87+
app:tint="?colorPrimary"
88+
tools:ignore="MissingPrefix" />
89+
7790
</com.google.android.material.appbar.CollapsingToolbarLayout>
7891

7992
</com.google.android.material.appbar.AppBarLayout>

0 commit comments

Comments
 (0)