For #12287: Show devices with no tabs in Synced Tabs list
parent
f614c0b18d
commit
b54b743d83
|
@ -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<SyncedDeviceTabs>.toAdapterList(
|
||||
): MutableList<AdapterItem> {
|
||||
val allDeviceTabs = mutableListOf<AdapterItem>()
|
||||
/**
|
||||
* Converts a list of [SyncedDeviceTabs] into a list of [AdapterItem].
|
||||
*/
|
||||
fun List<SyncedDeviceTabs>.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
|
||||
}
|
||||
sequenceOf(AdapterItem.Device(device)) + deviceTabs
|
||||
}.toList()
|
||||
|
|
|
@ -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">
|
||||
|
||||
<TextView
|
||||
|
@ -42,16 +43,4 @@
|
|||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/synced_tab_item_title" />
|
||||
|
||||
<View
|
||||
android:id="@+id/synced_tab_item_separator"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_marginTop="7dp"
|
||||
android:background="?syncedTabsSeparator"
|
||||
android:importantForAccessibility="no"
|
||||
android:visibility="invisible"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/synced_tab_item_url" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
|
|
@ -4,6 +4,18 @@
|
|||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingBottom="24dp">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="72dp"
|
||||
android:layout_marginTop="16dp"
|
||||
android:singleLine="true"
|
||||
android:text="@string/synced_tabs_no_open_tabs"
|
||||
android:textAlignment="viewStart"
|
||||
android:textColor="?secondaryText"
|
||||
android:textSize="12sp" />
|
||||
|
||||
</FrameLayout>
|
|
@ -1455,6 +1455,8 @@
|
|||
<string name="synced_tabs_sign_in_message">View a list of tabs from your other devices.</string>
|
||||
<!-- Text displayed on a button in the synced tabs screen to link users to sign in when a user is not signed in to Firefox Sync -->
|
||||
<string name="synced_tabs_sign_in_button">Sign in to sync</string>
|
||||
<!-- The text displayed when a synced device has no tabs to show in the list of Synced Tabs. -->
|
||||
<string name="synced_tabs_no_open_tabs">No open tabs</string>
|
||||
|
||||
<!-- Top Sites -->
|
||||
<!-- Title text displayed in the dialog when top sites limit is reached. -->
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue