From 740b69d48cd69543147c22977dc77fe040a5df07 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Mon, 19 Sep 2022 13:42:30 +0300 Subject: [PATCH] Make other sessions view dynamic. --- .../v2/VectorSettingsDevicesFragment.kt | 8 +++++- .../v2/VectorSettingsDevicesViewNavigator.kt | 12 ++++++-- .../v2/othersessions/OtherSessionsActivity.kt | 16 +++++++++-- .../v2/othersessions/OtherSessionsArgs.kt | 28 +++++++++++++++++++ .../v2/othersessions/OtherSessionsFragment.kt | 7 +++++ 5 files changed, 65 insertions(+), 6 deletions(-) create mode 100644 vector/src/main/java/im/vector/app/features/settings/devices/v2/othersessions/OtherSessionsArgs.kt diff --git a/vector/src/main/java/im/vector/app/features/settings/devices/v2/VectorSettingsDevicesFragment.kt b/vector/src/main/java/im/vector/app/features/settings/devices/v2/VectorSettingsDevicesFragment.kt index 1e91384c3a..f4725d5571 100644 --- a/vector/src/main/java/im/vector/app/features/settings/devices/v2/VectorSettingsDevicesFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/devices/v2/VectorSettingsDevicesFragment.kt @@ -37,6 +37,7 @@ import im.vector.app.core.resources.DrawableProvider import im.vector.app.databinding.FragmentSettingsDevicesBinding import im.vector.app.features.crypto.recover.SetupMode import im.vector.app.features.crypto.verification.VerificationBottomSheet +import im.vector.app.features.settings.devices.v2.filter.DeviceManagerFilterType import im.vector.app.features.settings.devices.v2.list.NUMBER_OF_OTHER_DEVICES_TO_RENDER import im.vector.app.features.settings.devices.v2.list.OtherSessionsView import im.vector.app.features.settings.devices.v2.list.SESSION_IS_MARKED_AS_INACTIVE_AFTER_DAYS @@ -260,6 +261,11 @@ class VectorSettingsDevicesFragment : } override fun onViewAllOtherSessionsClicked() { - viewNavigator.navigateToOtherSessions(requireActivity()) + viewNavigator.navigateToOtherSessions( + context = requireActivity(), + titleResourceId = R.string.device_manager_sessions_other_title, + defaultFilter = DeviceManagerFilterType.ALL_SESSIONS, + includeCurrentSession = false + ) } } diff --git a/vector/src/main/java/im/vector/app/features/settings/devices/v2/VectorSettingsDevicesViewNavigator.kt b/vector/src/main/java/im/vector/app/features/settings/devices/v2/VectorSettingsDevicesViewNavigator.kt index 486785c918..991de805e7 100644 --- a/vector/src/main/java/im/vector/app/features/settings/devices/v2/VectorSettingsDevicesViewNavigator.kt +++ b/vector/src/main/java/im/vector/app/features/settings/devices/v2/VectorSettingsDevicesViewNavigator.kt @@ -17,6 +17,7 @@ package im.vector.app.features.settings.devices.v2 import android.content.Context +import im.vector.app.features.settings.devices.v2.filter.DeviceManagerFilterType import im.vector.app.features.settings.devices.v2.othersessions.OtherSessionsActivity import im.vector.app.features.settings.devices.v2.overview.SessionOverviewActivity import javax.inject.Inject @@ -27,7 +28,14 @@ class VectorSettingsDevicesViewNavigator @Inject constructor() { context.startActivity(SessionOverviewActivity.newIntent(context, deviceId)) } - fun navigateToOtherSessions(context: Context) { - context.startActivity(OtherSessionsActivity.newIntent(context)) + fun navigateToOtherSessions( + context: Context, + titleResourceId: Int, + defaultFilter: DeviceManagerFilterType, + includeCurrentSession: Boolean, + ) { + context.startActivity( + OtherSessionsActivity.newIntent(context, titleResourceId, defaultFilter, includeCurrentSession) + ) } } diff --git a/vector/src/main/java/im/vector/app/features/settings/devices/v2/othersessions/OtherSessionsActivity.kt b/vector/src/main/java/im/vector/app/features/settings/devices/v2/othersessions/OtherSessionsActivity.kt index b9ab59d8f5..a2c9da6ea0 100644 --- a/vector/src/main/java/im/vector/app/features/settings/devices/v2/othersessions/OtherSessionsActivity.kt +++ b/vector/src/main/java/im/vector/app/features/settings/devices/v2/othersessions/OtherSessionsActivity.kt @@ -20,9 +20,11 @@ import android.content.Context import android.content.Intent import android.os.Bundle import android.view.View +import com.airbnb.mvrx.Mavericks import dagger.hilt.android.AndroidEntryPoint import im.vector.app.core.extensions.addFragment import im.vector.app.core.platform.SimpleFragmentActivity +import im.vector.app.features.settings.devices.v2.filter.DeviceManagerFilterType @AndroidEntryPoint class OtherSessionsActivity : SimpleFragmentActivity() { @@ -35,14 +37,22 @@ class OtherSessionsActivity : SimpleFragmentActivity() { if (isFirstCreation()) { addFragment( container = views.container, - fragmentClass = OtherSessionsFragment::class.java + fragmentClass = OtherSessionsFragment::class.java, + params = intent.getParcelableExtra(Mavericks.KEY_ARG) ) } } companion object { - fun newIntent(context: Context): Intent { - return Intent(context, OtherSessionsActivity::class.java) + fun newIntent( + context: Context, + titleResourceId: Int, + defaultFilter: DeviceManagerFilterType, + includeCurrentSession: Boolean, + ): Intent { + return Intent(context, OtherSessionsActivity::class.java).apply { + putExtra(Mavericks.KEY_ARG, OtherSessionsArgs(titleResourceId, defaultFilter, includeCurrentSession)) + } } } } diff --git a/vector/src/main/java/im/vector/app/features/settings/devices/v2/othersessions/OtherSessionsArgs.kt b/vector/src/main/java/im/vector/app/features/settings/devices/v2/othersessions/OtherSessionsArgs.kt new file mode 100644 index 0000000000..55a7000c4f --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/settings/devices/v2/othersessions/OtherSessionsArgs.kt @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2022 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package im.vector.app.features.settings.devices.v2.othersessions + +import android.os.Parcelable +import im.vector.app.features.settings.devices.v2.filter.DeviceManagerFilterType +import kotlinx.parcelize.Parcelize + +@Parcelize +data class OtherSessionsArgs( + val titleResourceId: Int, + val defaultFilter: DeviceManagerFilterType, + val includeCurrentSession: Boolean, +) : Parcelable diff --git a/vector/src/main/java/im/vector/app/features/settings/devices/v2/othersessions/OtherSessionsFragment.kt b/vector/src/main/java/im/vector/app/features/settings/devices/v2/othersessions/OtherSessionsFragment.kt index 81ea5f4b89..26cd74a380 100644 --- a/vector/src/main/java/im/vector/app/features/settings/devices/v2/othersessions/OtherSessionsFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/devices/v2/othersessions/OtherSessionsFragment.kt @@ -22,6 +22,7 @@ import android.view.View import android.view.ViewGroup import androidx.core.view.isVisible import com.airbnb.mvrx.Success +import com.airbnb.mvrx.args import com.airbnb.mvrx.fragmentViewModel import com.airbnb.mvrx.withState import dagger.hilt.android.AndroidEntryPoint @@ -46,6 +47,7 @@ class OtherSessionsFragment : OtherSessionsView.Callback { private val viewModel: OtherSessionsViewModel by fragmentViewModel() + private val args: OtherSessionsArgs by args() @Inject lateinit var colorProvider: ColorProvider @@ -57,6 +59,7 @@ class OtherSessionsFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + views.otherSessionsToolbar.title = getString(args.titleResourceId) setupToolbar(views.otherSessionsToolbar).allowBack() observeViewEvents() initFilterView() @@ -85,6 +88,10 @@ class OtherSessionsFragment : } views.deviceListOtherSessions.callback = this + + if (args.defaultFilter != DeviceManagerFilterType.ALL_SESSIONS) { + viewModel.handle(OtherSessionsAction.FilterDevices(args.defaultFilter)) + } } override fun onBottomSheetResult(resultCode: Int, data: Any?) {