Toggle ip address on sessions overview screen.

This commit is contained in:
Onuray Sahin 2022-11-08 16:33:20 +03:00
parent b5e8375592
commit 0868869fe3
7 changed files with 39 additions and 0 deletions

View File

@ -76,6 +76,7 @@ class SessionInfoView @JvmOverloads constructor(
sessionInfoViewState.deviceFullInfo.isInactive, sessionInfoViewState.deviceFullInfo.isInactive,
sessionInfoViewState.deviceFullInfo.deviceInfo, sessionInfoViewState.deviceFullInfo.deviceInfo,
sessionInfoViewState.isLastSeenDetailsVisible, sessionInfoViewState.isLastSeenDetailsVisible,
sessionInfoViewState.isShowingIpAddress,
dateFormatter, dateFormatter,
drawableProvider, drawableProvider,
colorProvider, colorProvider,
@ -157,6 +158,7 @@ class SessionInfoView @JvmOverloads constructor(
isInactive: Boolean, isInactive: Boolean,
deviceInfo: DeviceInfo, deviceInfo: DeviceInfo,
isLastSeenDetailsVisible: Boolean, isLastSeenDetailsVisible: Boolean,
isShowingIpAddress: Boolean,
dateFormatter: VectorDateFormatter, dateFormatter: VectorDateFormatter,
drawableProvider: DrawableProvider, drawableProvider: DrawableProvider,
colorProvider: ColorProvider, colorProvider: ColorProvider,
@ -187,6 +189,7 @@ class SessionInfoView @JvmOverloads constructor(
views.sessionInfoLastActivityTextView.isGone = true views.sessionInfoLastActivityTextView.isGone = true
} }
views.sessionInfoLastIPAddressTextView.setTextOrHide(deviceInfo.lastSeenIp?.takeIf { isLastSeenDetailsVisible }) views.sessionInfoLastIPAddressTextView.setTextOrHide(deviceInfo.lastSeenIp?.takeIf { isLastSeenDetailsVisible })
views.sessionInfoLastIPAddressTextView.isVisible = isShowingIpAddress
} }
private fun renderDetailsButton(isDetailsButtonVisible: Boolean) { private fun renderDetailsButton(isDetailsButtonVisible: Boolean) {

View File

@ -25,4 +25,5 @@ data class SessionInfoViewState(
val isDetailsButtonVisible: Boolean = true, val isDetailsButtonVisible: Boolean = true,
val isLearnMoreLinkVisible: Boolean = false, val isLearnMoreLinkVisible: Boolean = false,
val isLastSeenDetailsVisible: Boolean = false, val isLastSeenDetailsVisible: Boolean = false,
val isShowingIpAddress: Boolean = false,
) )

View File

@ -29,4 +29,5 @@ sealed class SessionOverviewAction : VectorViewModelAction {
val deviceId: String, val deviceId: String,
val enabled: Boolean, val enabled: Boolean,
) : SessionOverviewAction() ) : SessionOverviewAction()
object ToggleIpAddressVisibility : SessionOverviewAction()
} }

View File

@ -19,6 +19,7 @@ package im.vector.app.features.settings.devices.v2.overview
import android.app.Activity import android.app.Activity
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
@ -156,16 +157,34 @@ class SessionOverviewFragment :
override fun getMenuRes() = R.menu.menu_session_overview override fun getMenuRes() = R.menu.menu_session_overview
override fun handlePrepareMenu(menu: Menu) {
withState(viewModel) { state ->
menu.findItem(R.id.sessionOverviewToggleIpAddress).title = if (state.isShowingIpAddress) {
getString(R.string.device_manager_other_sessions_hide_ip_address)
} else {
getString(R.string.device_manager_other_sessions_show_ip_address)
}
}
}
override fun handleMenuItemSelected(item: MenuItem): Boolean { override fun handleMenuItemSelected(item: MenuItem): Boolean {
return when (item.itemId) { return when (item.itemId) {
R.id.sessionOverviewRename -> { R.id.sessionOverviewRename -> {
goToRenameSession() goToRenameSession()
true true
} }
R.id.sessionOverviewToggleIpAddress -> {
toggleIpAddressVisibility()
true
}
else -> false else -> false
} }
} }
private fun toggleIpAddressVisibility() {
viewModel.handle(SessionOverviewAction.ToggleIpAddressVisibility)
}
private fun goToRenameSession() = withState(viewModel) { state -> private fun goToRenameSession() = withState(viewModel) { state ->
viewNavigator.goToRenameSession(requireContext(), state.deviceId) viewNavigator.goToRenameSession(requireContext(), state.deviceId)
} }
@ -206,6 +225,7 @@ class SessionOverviewFragment :
isDetailsButtonVisible = false, isDetailsButtonVisible = false,
isLearnMoreLinkVisible = deviceInfo.roomEncryptionTrustLevel != RoomEncryptionTrustLevel.Default, isLearnMoreLinkVisible = deviceInfo.roomEncryptionTrustLevel != RoomEncryptionTrustLevel.Default,
isLastSeenDetailsVisible = !isCurrentSession, isLastSeenDetailsVisible = !isCurrentSession,
isShowingIpAddress = viewState.isShowingIpAddress,
) )
views.sessionOverviewInfo.render(infoViewState, dateFormatter, drawableProvider, colorProvider, stringProvider) views.sessionOverviewInfo.render(infoViewState, dateFormatter, drawableProvider, colorProvider, stringProvider)
views.sessionOverviewInfo.onLearnMoreClickListener = { views.sessionOverviewInfo.onLearnMoreClickListener = {

View File

@ -113,6 +113,14 @@ class SessionOverviewViewModel @AssistedInject constructor(
is SessionOverviewAction.PasswordAuthDone -> handlePasswordAuthDone(action) is SessionOverviewAction.PasswordAuthDone -> handlePasswordAuthDone(action)
SessionOverviewAction.ReAuthCancelled -> handleReAuthCancelled() SessionOverviewAction.ReAuthCancelled -> handleReAuthCancelled()
is SessionOverviewAction.TogglePushNotifications -> handleTogglePusherAction(action) is SessionOverviewAction.TogglePushNotifications -> handleTogglePusherAction(action)
SessionOverviewAction.ToggleIpAddressVisibility -> handleToggleIpAddressVisibility()
}
}
private fun handleToggleIpAddressVisibility() = withState { state ->
val isShowingIpAddress = state.isShowingIpAddress
setState {
copy(isShowingIpAddress = !isShowingIpAddress)
} }
} }

View File

@ -28,6 +28,7 @@ data class SessionOverviewViewState(
val deviceInfo: Async<DeviceFullInfo> = Uninitialized, val deviceInfo: Async<DeviceFullInfo> = Uninitialized,
val isLoading: Boolean = false, val isLoading: Boolean = false,
val notificationsStatus: NotificationsStatus = NotificationsStatus.NOT_SUPPORTED, val notificationsStatus: NotificationsStatus = NotificationsStatus.NOT_SUPPORTED,
val isShowingIpAddress: Boolean = false,
) : MavericksState { ) : MavericksState {
constructor(args: SessionOverviewArgs) : this( constructor(args: SessionOverviewArgs) : this(
deviceId = args.deviceId deviceId = args.deviceId

View File

@ -4,6 +4,11 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
tools:ignore="AlwaysShowAction"> tools:ignore="AlwaysShowAction">
<item
android:id="@+id/sessionOverviewToggleIpAddress"
android:title="@string/device_manager_other_sessions_show_ip_address"
app:showAsAction="withText|never" />
<item <item
android:id="@+id/sessionOverviewRename" android:id="@+id/sessionOverviewRename"
android:title="@string/device_manager_session_rename" android:title="@string/device_manager_session_rename"