From b54b743d83d7843e17fa3376f5fce9895a4c74e3 Mon Sep 17 00:00:00 2001 From: Jonathan Almeida Date: Tue, 18 Aug 2020 01:15:08 -0400 Subject: [PATCH] For #12287: Show devices with no tabs in Synced Tabs list --- .../fenix/sync/ext/SyncedTabsAdapter.kt | 20 +++++++++---------- .../main/res/layout/sync_tabs_list_item.xml | 13 +----------- .../res/layout/view_synced_tabs_no_item.xml | 14 ++++++++++++- app/src/main/res/values/strings.xml | 2 ++ .../fenix/sync/ext/SyncedTabsAdapterKtTest.kt | 4 +++- 5 files changed, 29 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/sync/ext/SyncedTabsAdapter.kt b/app/src/main/java/org/mozilla/fenix/sync/ext/SyncedTabsAdapter.kt index 6f1e982b5..18c2c1be9 100644 --- a/app/src/main/java/org/mozilla/fenix/sync/ext/SyncedTabsAdapter.kt +++ b/app/src/main/java/org/mozilla/fenix/sync/ext/SyncedTabsAdapter.kt @@ -7,16 +7,16 @@ package org.mozilla.fenix.sync.ext import mozilla.components.browser.storage.sync.SyncedDeviceTabs import org.mozilla.fenix.sync.SyncedTabsAdapter.AdapterItem -fun List.toAdapterList( -): MutableList { - val allDeviceTabs = mutableListOf() +/** + * Converts a list of [SyncedDeviceTabs] into a list of [AdapterItem]. + */ +fun List.toAdapterList() = asSequence().flatMap { (device, tabs) -> - forEach { (device, tabs) -> - if (tabs.isNotEmpty()) { - allDeviceTabs.add(AdapterItem.Device(device)) - tabs.mapTo(allDeviceTabs) { AdapterItem.Tab(it) } - } + val deviceTabs = if (tabs.isEmpty()) { + sequenceOf(AdapterItem.NoTabs(device)) + } else { + tabs.asSequence().map { AdapterItem.Tab(it) } } - return allDeviceTabs -} \ No newline at end of file + sequenceOf(AdapterItem.Device(device)) + deviceTabs +}.toList() diff --git a/app/src/main/res/layout/sync_tabs_list_item.xml b/app/src/main/res/layout/sync_tabs_list_item.xml index 99e776393..cb797ca34 100644 --- a/app/src/main/res/layout/sync_tabs_list_item.xml +++ b/app/src/main/res/layout/sync_tabs_list_item.xml @@ -8,6 +8,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" + android:layout_marginBottom="8dp" android:background="?android:attr/selectableItemBackground"> - - diff --git a/app/src/main/res/layout/view_synced_tabs_no_item.xml b/app/src/main/res/layout/view_synced_tabs_no_item.xml index fbb5f13e9..769081cd6 100644 --- a/app/src/main/res/layout/view_synced_tabs_no_item.xml +++ b/app/src/main/res/layout/view_synced_tabs_no_item.xml @@ -4,6 +4,18 @@ - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + android:layout_height="wrap_content" + android:paddingBottom="24dp"> + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3b3e512f7..e83485f4d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1455,6 +1455,8 @@ View a list of tabs from your other devices. Sign in to sync + + No open tabs diff --git a/app/src/test/java/org/mozilla/fenix/sync/ext/SyncedTabsAdapterKtTest.kt b/app/src/test/java/org/mozilla/fenix/sync/ext/SyncedTabsAdapterKtTest.kt index bc04fc8f7..aa568acdd 100644 --- a/app/src/test/java/org/mozilla/fenix/sync/ext/SyncedTabsAdapterKtTest.kt +++ b/app/src/test/java/org/mozilla/fenix/sync/ext/SyncedTabsAdapterKtTest.kt @@ -87,6 +87,8 @@ class SyncedTabsAdapterKtTest { val syncedDeviceList = listOf(noTabDevice) val adapterData = syncedDeviceList.toAdapterList() - assertEquals(0, adapterData.count()) + assertEquals(2, adapterData.count()) + assertTrue(adapterData[0] is SyncedTabsAdapter.AdapterItem.Device) + assertTrue(adapterData[1] is SyncedTabsAdapter.AdapterItem.NoTabs) } }