diff --git a/app/src/main/java/org/mozilla/fenix/home/SessionBottomSheetFragment.kt b/app/src/main/java/org/mozilla/fenix/home/SessionBottomSheetFragment.kt index b65f5ebd5..a3c16a9e7 100644 --- a/app/src/main/java/org/mozilla/fenix/home/SessionBottomSheetFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/home/SessionBottomSheetFragment.kt @@ -90,7 +90,7 @@ class SessionBottomSheetFragment : BottomSheetDialogFragment(), LayoutContainer private fun getCardTitle(): String? { return sessionType?.let { when (it) { - is SessionType.Current -> getString(R.string.tabs_header_title) + is SessionType.Current -> getString(R.string.tab_header_label) is SessionType.Private -> getString(R.string.tabs_header_private_title) } } diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlAdapter.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlAdapter.kt index 759f5970b..193d4029b 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlAdapter.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlAdapter.kt @@ -11,6 +11,7 @@ import io.reactivex.Observer import kotlinx.coroutines.Job import org.mozilla.fenix.home.sessioncontrol.viewholders.ArchiveTabsViewHolder import org.mozilla.fenix.home.sessioncontrol.viewholders.DeleteTabsViewHolder +import org.mozilla.fenix.home.sessioncontrol.viewholders.NoTabMessageViewHolder import org.mozilla.fenix.home.sessioncontrol.viewholders.PrivateBrowsingDescriptionViewHolder import org.mozilla.fenix.home.sessioncontrol.viewholders.TabHeaderViewHolder import org.mozilla.fenix.home.sessioncontrol.viewholders.TabViewHolder @@ -18,6 +19,7 @@ import java.lang.IllegalStateException sealed class AdapterItem { object TabHeader : AdapterItem() + object NoTabMessage : AdapterItem() data class TabItem(val tab: Tab) : AdapterItem() object PrivateBrowsingDescription : AdapterItem() object ArchiveTabs : AdapterItem() @@ -26,6 +28,7 @@ sealed class AdapterItem { val viewType: Int get() = when (this) { TabHeader -> TabHeaderViewHolder.LAYOUT_ID + NoTabMessage -> NoTabMessageViewHolder.LAYOUT_ID is TabItem -> TabViewHolder.LAYOUT_ID ArchiveTabs -> ArchiveTabsViewHolder.LAYOUT_ID PrivateBrowsingDescription -> PrivateBrowsingDescriptionViewHolder.LAYOUT_ID @@ -51,6 +54,7 @@ class SessionControlAdapter( val view = LayoutInflater.from(parent.context).inflate(viewType, parent, false) return when (viewType) { TabHeaderViewHolder.LAYOUT_ID -> TabHeaderViewHolder(view, actionEmitter) + NoTabMessageViewHolder.LAYOUT_ID -> NoTabMessageViewHolder(view) TabViewHolder.LAYOUT_ID -> TabViewHolder(view, actionEmitter, job) ArchiveTabsViewHolder.LAYOUT_ID -> ArchiveTabsViewHolder(view, actionEmitter) PrivateBrowsingDescriptionViewHolder.LAYOUT_ID -> PrivateBrowsingDescriptionViewHolder( diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlUIView.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlUIView.kt index e13cba0d7..2da64d566 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlUIView.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlUIView.kt @@ -19,17 +19,18 @@ import androidx.recyclerview.widget.ItemTouchHelper @SuppressWarnings("ComplexMethod") private fun SessionControlState.toAdapterList(): List { val items = mutableListOf() + items.add(AdapterItem.TabHeader) if (tabs.isNotEmpty()) { - items.add(AdapterItem.TabHeader) tabs.reversed().map(AdapterItem::TabItem).forEach { items.add(it) } if (mode == Mode.Private) { items.add(AdapterItem.DeleteTabs) } } else { - if (mode == Mode.Private) { - items.add(AdapterItem.PrivateBrowsingDescription) - } + val item = if (mode == Mode.Private) AdapterItem.PrivateBrowsingDescription + else AdapterItem.NoTabMessage + + items.add(item) } return items diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/NoTabMessageViewHolder.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/NoTabMessageViewHolder.kt new file mode 100644 index 000000000..e96f214e1 --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/NoTabMessageViewHolder.kt @@ -0,0 +1,17 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.fenix.home.sessioncontrol.viewholders + +import android.view.View +import androidx.recyclerview.widget.RecyclerView +import org.mozilla.fenix.R + +class NoTabMessageViewHolder( + view: View +) : RecyclerView.ViewHolder(view) { + companion object { + const val LAYOUT_ID = R.layout.no_tab_message + } +} diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/TabHeaderViewHolder.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/TabHeaderViewHolder.kt index 49a497674..f784aea9a 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/TabHeaderViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/TabHeaderViewHolder.kt @@ -28,7 +28,7 @@ class TabHeaderViewHolder( actionEmitter.onNext(TabAction.Add) } - val headerTextResourceId = if (isPrivate) R.string.tabs_header_private_title else R.string.tabs_header_title + val headerTextResourceId = if (isPrivate) R.string.tabs_header_private_title else R.string.tab_header_label header_text.text = context.getString(headerTextResourceId) tabs_overflow_button.increaseTapArea(overflowButtonIncreaseDps) tabs_overflow_button.setOnClickListener { diff --git a/app/src/main/res/drawable/empty_session_control_background.xml b/app/src/main/res/drawable/empty_session_control_background.xml new file mode 100644 index 000000000..d47f4ab21 --- /dev/null +++ b/app/src/main/res/drawable/empty_session_control_background.xml @@ -0,0 +1,9 @@ + + + + + + diff --git a/app/src/main/res/layout/no_tab_message.xml b/app/src/main/res/layout/no_tab_message.xml new file mode 100644 index 000000000..cf65d4589 --- /dev/null +++ b/app/src/main/res/layout/no_tab_message.xml @@ -0,0 +1,35 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/session_bottom_sheet.xml b/app/src/main/res/layout/session_bottom_sheet.xml index bbba3e374..f0e2c5ad0 100644 --- a/app/src/main/res/layout/session_bottom_sheet.xml +++ b/app/src/main/res/layout/session_bottom_sheet.xml @@ -46,7 +46,7 @@ android:layout_marginStart="12dp" android:layout_marginEnd="12dp" android:layout_marginBottom="8dp" - android:text="@string/tabs_header_title" + android:text="@string/tab_header_label" android:textAppearance="@style/HeaderTextStyle" android:textColor="?primaryText" app:layout_constraintStart_toEndOf="@id/current_session_image" diff --git a/app/src/main/res/layout/tab_header.xml b/app/src/main/res/layout/tab_header.xml index 2bef385f3..f63b99667 100644 --- a/app/src/main/res/layout/tab_header.xml +++ b/app/src/main/res/layout/tab_header.xml @@ -14,7 +14,7 @@ android:id="@+id/header_text" android:layout_width="match_parent" android:layout_height="wrap_content" - android:text="@string/tabs_header_title" + android:text="@string/tab_header_label" android:textAppearance="@style/HeaderTextStyle" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 40da16b7f..fec671220 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -222,8 +222,8 @@ Close - - Current session + + Open tabs Private session @@ -250,6 +250,11 @@ The first parameter is a digit that shows the cardinal number of how many additional tabs the session has. --> %1$d sites… + + No tabs opened + + Your open tabs will be shown here. + Delete history @@ -393,4 +398,8 @@ On Off + + + + DEPRECATED