From 4e6f9b9ef1faed12d32a555bf0aa9dbca2000b26 Mon Sep 17 00:00:00 2001 From: Sawyer Blatz Date: Thu, 16 May 2019 14:35:15 -0700 Subject: [PATCH] For #1574: Displays previous tab collections when creating --- .../CollectionCreationComponent.kt | 3 ++- .../collections/CollectionCreationUIView.kt | 6 ++++-- .../collections/CreateCollectionFragment.kt | 3 ++- .../collections/CreateCollectionViewModel.kt | 2 ++ ...dapter.kt => SaveCollectionListAdapter.kt} | 13 +++++++++--- .../fenix/components/TabCollectionStorage.kt | 6 ++++++ .../org/mozilla/fenix/home/HomeFragment.kt | 3 +++ .../sessioncontrol/SessionControlComponent.kt | 7 ------- .../main/res/layout/collections_list_item.xml | 1 - .../layout/component_collection_creation.xml | 20 +++++++++++++------ ...nt_collection_creation_name_collection.xml | 20 +++++++++---------- ..._collection_creation_select_collection.xml | 18 +++++++++++------ 12 files changed, 64 insertions(+), 38 deletions(-) rename app/src/main/java/org/mozilla/fenix/collections/{SaveToCollectionListAdapter.kt => SaveCollectionListAdapter.kt} (85%) diff --git a/app/src/main/java/org/mozilla/fenix/collections/CollectionCreationComponent.kt b/app/src/main/java/org/mozilla/fenix/collections/CollectionCreationComponent.kt index 988b113b5..c3ab1236a 100644 --- a/app/src/main/java/org/mozilla/fenix/collections/CollectionCreationComponent.kt +++ b/app/src/main/java/org/mozilla/fenix/collections/CollectionCreationComponent.kt @@ -27,7 +27,8 @@ sealed class SaveCollectionStep { data class CollectionCreationState( val tabs: List = listOf(), val selectedTabs: Set = setOf(), - val saveCollectionStep: SaveCollectionStep = SaveCollectionStep.SelectTabs + val saveCollectionStep: SaveCollectionStep = SaveCollectionStep.SelectTabs, + val tabCollections: List = listOf() ) : ViewState sealed class CollectionCreationChange : Change { diff --git a/app/src/main/java/org/mozilla/fenix/collections/CollectionCreationUIView.kt b/app/src/main/java/org/mozilla/fenix/collections/CollectionCreationUIView.kt index d0f446e0b..d7c418b56 100644 --- a/app/src/main/java/org/mozilla/fenix/collections/CollectionCreationUIView.kt +++ b/app/src/main/java/org/mozilla/fenix/collections/CollectionCreationUIView.kt @@ -76,7 +76,7 @@ class CollectionCreationUIView( } view.name_collection_edittext.setOnEditorActionListener { v, actionId, event -> - if (actionId == EditorInfo.IME_ACTION_DONE) { + if (actionId == EditorInfo.IME_ACTION_DONE && !v.text.toString().isEmpty()) { actionEmitter.onNext( CollectionCreationAction.SaveCollectionName( selectedTabs.toList(), @@ -190,7 +190,7 @@ class CollectionCreationUIView( name_collection_edittext.setText( view.context.getString( R.string.create_collection_default_name, - 1 + it.tabCollections.size + 1 ) ) name_collection_edittext.setSelection(0, name_collection_edittext.text.length) @@ -198,6 +198,8 @@ class CollectionCreationUIView( view.context.getString(R.string.create_collection_name_collection) } } + + collectionSaveListAdapter.reloadData(it.tabCollections) } fun onResumed() { diff --git a/app/src/main/java/org/mozilla/fenix/collections/CreateCollectionFragment.kt b/app/src/main/java/org/mozilla/fenix/collections/CreateCollectionFragment.kt index 9d8e7029f..3692e2682 100644 --- a/app/src/main/java/org/mozilla/fenix/collections/CreateCollectionFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/collections/CreateCollectionFragment.kt @@ -55,6 +55,7 @@ class CreateCollectionFragment : DialogFragment(), CoroutineScope { val tabs = viewModel!!.tabs val selectedTabs = viewModel.selectedTabs val step = viewModel.saveCollectionStep + val tabCollections = viewModel.tabCollections collectionCreationComponent = CollectionCreationComponent( view.create_collection_wrapper, @@ -63,7 +64,7 @@ class CreateCollectionFragment : DialogFragment(), CoroutineScope { this, CollectionCreationViewModel::class.java ) { - CollectionCreationViewModel(CollectionCreationState(tabs, selectedTabs, step)) + CollectionCreationViewModel(CollectionCreationState(tabs, selectedTabs, step, tabCollections)) } ) return view diff --git a/app/src/main/java/org/mozilla/fenix/collections/CreateCollectionViewModel.kt b/app/src/main/java/org/mozilla/fenix/collections/CreateCollectionViewModel.kt index 027d5d740..cc599c26d 100644 --- a/app/src/main/java/org/mozilla/fenix/collections/CreateCollectionViewModel.kt +++ b/app/src/main/java/org/mozilla/fenix/collections/CreateCollectionViewModel.kt @@ -6,9 +6,11 @@ package org.mozilla.fenix.collections import androidx.lifecycle.ViewModel import org.mozilla.fenix.home.sessioncontrol.Tab +import org.mozilla.fenix.home.sessioncontrol.TabCollection class CreateCollectionViewModel : ViewModel() { var selectedTabs = setOf() var tabs = listOf() var saveCollectionStep: SaveCollectionStep = SaveCollectionStep.SelectTabs + var tabCollections = listOf() } diff --git a/app/src/main/java/org/mozilla/fenix/collections/SaveToCollectionListAdapter.kt b/app/src/main/java/org/mozilla/fenix/collections/SaveCollectionListAdapter.kt similarity index 85% rename from app/src/main/java/org/mozilla/fenix/collections/SaveToCollectionListAdapter.kt rename to app/src/main/java/org/mozilla/fenix/collections/SaveCollectionListAdapter.kt index 0b2b87cd2..d4d16db7e 100644 --- a/app/src/main/java/org/mozilla/fenix/collections/SaveToCollectionListAdapter.kt +++ b/app/src/main/java/org/mozilla/fenix/collections/SaveCollectionListAdapter.kt @@ -4,6 +4,7 @@ package org.mozilla.fenix.collections 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/. */ +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -21,8 +22,8 @@ class SaveCollectionListAdapter( val actionEmitter: Observer ) : RecyclerView.Adapter() { - private var collections: List = listOf() private lateinit var job: Job + private var tabCollections = listOf() override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CollectionViewHolder { val view = LayoutInflater.from(parent.context) @@ -32,11 +33,11 @@ class SaveCollectionListAdapter( } override fun onBindViewHolder(holder: CollectionViewHolder, position: Int) { - val collection = collections[position] + val collection = tabCollections[position] holder.bind(collection) } - override fun getItemCount(): Int = collections.size + override fun getItemCount(): Int = tabCollections.size override fun onAttachedToRecyclerView(recyclerView: RecyclerView) { super.onAttachedToRecyclerView(recyclerView) @@ -47,6 +48,11 @@ class SaveCollectionListAdapter( super.onDetachedFromRecyclerView(recyclerView) job.cancel() } + + fun reloadData(tabCollections: List) { + this.tabCollections = tabCollections + notifyDataSetChanged() + } } class CollectionViewHolder( @@ -75,6 +81,7 @@ class CollectionViewHolder( fun bind(collection: TabCollection) { this.collection = collection view.collection_item.text = collection.title + Log.d("sawyer", "Binding collection: " + collection.title) } companion object { diff --git a/app/src/main/java/org/mozilla/fenix/components/TabCollectionStorage.kt b/app/src/main/java/org/mozilla/fenix/components/TabCollectionStorage.kt index f9d4ecf1f..20fdb0ff8 100644 --- a/app/src/main/java/org/mozilla/fenix/components/TabCollectionStorage.kt +++ b/app/src/main/java/org/mozilla/fenix/components/TabCollectionStorage.kt @@ -17,6 +17,8 @@ import org.mozilla.fenix.test.Mockable @Mockable class TabCollectionStorage(private val context: Context, private val sessionManager: SessionManager) { + var cachedTabCollections = listOf() + private val collectionStorage by lazy { TabCollectionStorage(context, sessionManager) } @@ -29,6 +31,10 @@ class TabCollectionStorage(private val context: Context, private val sessionMana collectionStorage.addTabsToCollection(tabCollection, sessions) } + fun getTabCollectionsCount(): Int { + return collectionStorage.getTabCollectionsCount() + } + fun getCollections(limit: Int = 20): LiveData> { return collectionStorage.getCollections(limit) } diff --git a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt index 9eab3e10d..e45fe3b9d 100644 --- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt @@ -395,6 +395,8 @@ class HomeFragment : Fragment(), CoroutineScope { private fun subscribeToTabCollections(): Observer> { val observer = Observer> { + // TODO is it bad to be caching like this? + requireComponents.core.tabCollectionStorage.cachedTabCollections = it getManagedEmitter().onNext(SessionControlChange.CollectionsChange(it)) } requireComponents.core.tabCollectionStorage.getCollections().observe(this, observer) @@ -509,6 +511,7 @@ class HomeFragment : Fragment(), CoroutineScope { val selectedSet = if (selectedTabs == null) setOf() else setOf(selectedTabs) viewModel?.selectedTabs = selectedSet viewModel?.saveCollectionStep = SaveCollectionStep.SelectTabs + viewModel?.tabCollections = requireComponents.core.tabCollectionStorage.cachedTabCollections view?.let { val directions = HomeFragmentDirections.actionHomeFragmentToCreateCollectionFragment() diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlComponent.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlComponent.kt index 8f6d382b7..71fb8622a 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlComponent.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlComponent.kt @@ -4,7 +4,6 @@ package org.mozilla.fenix.home.sessioncontrol -import android.content.Context import android.graphics.Bitmap import android.os.Parcelable import android.view.ViewGroup @@ -13,10 +12,8 @@ import io.reactivex.Observer import kotlinx.android.parcel.Parcelize import org.mozilla.fenix.mvi.ViewState import org.mozilla.fenix.mvi.Change -import mozilla.components.browser.session.Session import mozilla.components.feature.tab.collections.TabCollection as ACTabCollection import mozilla.components.feature.tab.collections.Tab as ComponentTab -import org.mozilla.fenix.ext.components import org.mozilla.fenix.mvi.Action import org.mozilla.fenix.mvi.ActionBusFactory import org.mozilla.fenix.mvi.UIComponent @@ -124,10 +121,6 @@ class SessionControlViewModel( initialState: SessionControlState ) : UIComponentViewModelBase(initialState, reducer) { companion object { - fun getSessionFromTab(context: Context, tab: Tab): Session? { - return context.components.core.sessionManager.findSessionById(tab.sessionId) - } - val reducer: (SessionControlState, SessionControlChange) -> SessionControlState = { state, change -> when (change) { is SessionControlChange.CollectionsChange -> state.copy(collections = change.collections) diff --git a/app/src/main/res/layout/collections_list_item.xml b/app/src/main/res/layout/collections_list_item.xml index 73710d540..ccbfc5051 100644 --- a/app/src/main/res/layout/collections_list_item.xml +++ b/app/src/main/res/layout/collections_list_item.xml @@ -21,7 +21,6 @@ android:paddingBottom="12dp" android:textColor="?primaryText" android:textSize="16sp" - android:visibility="gone" app:layout_constraintBottom_toTopOf="@+id/divider" app:layout_constraintTop_toTopOf="parent" tools:targetApi="m" /> diff --git a/app/src/main/res/layout/component_collection_creation.xml b/app/src/main/res/layout/component_collection_creation.xml index 360eef93d..c9e8f62c5 100644 --- a/app/src/main/res/layout/component_collection_creation.xml +++ b/app/src/main/res/layout/component_collection_creation.xml @@ -43,13 +43,19 @@ android:id="@+id/collections_list" android:layout_width="match_parent" android:layout_height="wrap_content" + android:elevation="5dp" + android:background="@color/photonGreen50" android:visibility="gone" - app:layout_constraintBottom_toTopOf="@+id/add_collection_button" /> + app:layout_constraintBottom_toTopOf="@id/add_collection_button" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/back_button"/> @@ -113,7 +121,7 @@ android:alpha="0" android:background="@drawable/scrim_background" android:visibility="gone" - app:layout_constraintBottom_toBottomOf="@+id/tab_list" + app:layout_constraintBottom_toBottomOf="@id/tab_list" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -155,7 +163,7 @@ android:textSize="16sp" android:textStyle="bold" app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toStartOf="@+id/save_button" + app:layout_constraintEnd_toStartOf="@id/save_button" app:layout_constraintStart_toEndOf="@id/close_icon" app:layout_constraintTop_toTopOf="parent" /> diff --git a/app/src/main/res/layout/component_collection_creation_name_collection.xml b/app/src/main/res/layout/component_collection_creation_name_collection.xml index 883c1d721..ce9f14d4f 100644 --- a/app/src/main/res/layout/component_collection_creation_name_collection.xml +++ b/app/src/main/res/layout/component_collection_creation_name_collection.xml @@ -44,16 +44,14 @@ + android:layout_height="0dp" + app:layout_constraintTop_toBottomOf="parent" + app:layout_constraintBottom_toBottomOf="parent" /> @@ -164,7 +162,7 @@ android:textSize="16sp" android:textStyle="bold" app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toStartOf="@+id/save_button" + app:layout_constraintEnd_toStartOf="@id/save_button" app:layout_constraintStart_toEndOf="@id/close_icon" app:layout_constraintTop_toTopOf="parent" /> diff --git a/app/src/main/res/layout/component_collection_creation_select_collection.xml b/app/src/main/res/layout/component_collection_creation_select_collection.xml index 7f2c85809..b4f9cde53 100644 --- a/app/src/main/res/layout/component_collection_creation_select_collection.xml +++ b/app/src/main/res/layout/component_collection_creation_select_collection.xml @@ -45,14 +45,19 @@ android:id="@+id/collections_list" android:layout_width="match_parent" android:layout_height="wrap_content" + android:elevation="5dp" android:alpha="1" + android:background="?foundation" android:visibility="visible" - app:layout_constraintBottom_toTopOf="@+id/add_collection_button" /> + app:layout_constraintBottom_toTopOf="@id/add_collection_button" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent"/> @@ -121,7 +127,7 @@ android:alpha="0.5" android:background="@drawable/scrim_background" android:visibility="visible" - app:layout_constraintBottom_toBottomOf="@+id/tab_list" + app:layout_constraintBottom_toTopOf="@id/collections_list" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -165,7 +171,7 @@ android:textSize="16sp" android:textStyle="bold" app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toStartOf="@+id/save_button" + app:layout_constraintEnd_toStartOf="@id/save_button" app:layout_constraintStart_toEndOf="@id/close_icon" app:layout_constraintTop_toTopOf="parent" />