diff --git a/app/src/main/java/fr/free/nrw/commons/customselector/listeners/FolderClickListener.kt b/app/src/main/java/fr/free/nrw/commons/customselector/listeners/FolderClickListener.kt index 15b74c57e..cb32807f8 100644 --- a/app/src/main/java/fr/free/nrw/commons/customselector/listeners/FolderClickListener.kt +++ b/app/src/main/java/fr/free/nrw/commons/customselector/listeners/FolderClickListener.kt @@ -1,7 +1,5 @@ package fr.free.nrw.commons.customselector.listeners -import fr.free.nrw.commons.customselector.model.Folder - interface FolderClickListener { - fun onFolderClick(folder : Folder) + fun onFolderClick(folderId: Long, folderName: String) } \ No newline at end of file diff --git a/app/src/main/java/fr/free/nrw/commons/customselector/ui/adapter/FolderAdapter.kt b/app/src/main/java/fr/free/nrw/commons/customselector/ui/adapter/FolderAdapter.kt index fb3e49794..67dcc789c 100644 --- a/app/src/main/java/fr/free/nrw/commons/customselector/ui/adapter/FolderAdapter.kt +++ b/app/src/main/java/fr/free/nrw/commons/customselector/ui/adapter/FolderAdapter.kt @@ -49,7 +49,7 @@ class FolderAdapter( holder.name.text = folder.name holder.count.text = count.toString() holder.itemView.setOnClickListener{ - itemClickListener.onFolderClick(folder) + itemClickListener.onFolderClick(folder.bucketId, folder.name) } //todo load image thumbnail. diff --git a/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivity.kt b/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivity.kt index ec7855cb4..3b8bee390 100644 --- a/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivity.kt +++ b/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivity.kt @@ -2,26 +2,43 @@ package fr.free.nrw.commons.customselector.ui.selector import android.app.Activity import android.content.Intent +import android.content.SharedPreferences import android.os.Bundle import android.view.View import android.widget.ImageButton import android.widget.TextView +import androidx.fragment.app.FragmentManager import androidx.lifecycle.ViewModelProvider import fr.free.nrw.commons.R import fr.free.nrw.commons.customselector.listeners.FolderClickListener import fr.free.nrw.commons.customselector.listeners.ImageSelectListener -import fr.free.nrw.commons.customselector.model.Folder import fr.free.nrw.commons.customselector.model.Image import fr.free.nrw.commons.theme.BaseActivity import java.io.File import javax.inject.Inject -class CustomSelectorActivity : BaseActivity(), FolderClickListener, ImageSelectListener { +class CustomSelectorActivity: BaseActivity(), FolderClickListener, ImageSelectListener, FragmentManager.OnBackStackChangedListener { /** * View model. */ - private lateinit var viewModel: CustomSelectorViewModel + private lateinit var viewModel: CustomSelectorViewModel + + /** + * isImageFragmentOpen is true when the image fragment is in view. + */ + private var isImageFragmentOpen = false + + /** + * Current ImageFragment attributes. + */ + private var bucketId: Long = 0L + private lateinit var bucketName: String + + /** + * Pref for saving selector state. + */ + private lateinit var prefs: SharedPreferences /** * View Model Factory. @@ -35,9 +52,17 @@ class CustomSelectorActivity : BaseActivity(), FolderClickListener, ImageSelectL super.onCreate(savedInstanceState) setContentView(R.layout.activity_custom_selector) - viewModel = ViewModelProvider(this,customSelectorViewModelFactory).get(CustomSelectorViewModel::class.java) + prefs = applicationContext.getSharedPreferences("CustomSelector", MODE_PRIVATE) + viewModel = ViewModelProvider(this, customSelectorViewModelFactory).get(CustomSelectorViewModel::class.java) setupViews() + + // Open folder if saved in prefs. + if(prefs.contains("FolderId")){ + val lastOpenFolderId: Long = prefs.getLong("FolderId", 0L) + val lastOpenFolderName: String? = prefs.getString("FolderName", null) + lastOpenFolderName?.let { onFolderClick(lastOpenFolderId, it) } + } } /** @@ -49,8 +74,6 @@ class CustomSelectorActivity : BaseActivity(), FolderClickListener, ImageSelectL .commit() fetchData() setUpToolbar() - - // todo : open image fragment depending on the last user visit. } /** @@ -63,7 +86,7 @@ class CustomSelectorActivity : BaseActivity(), FolderClickListener, ImageSelectL /** * Change the title of the toolbar. */ - private fun changeTitle(title:String) { + private fun changeTitle(title: String) { val titleText = findViewById(R.id.title) if(titleText != null) { titleText.text = title @@ -84,12 +107,17 @@ class CustomSelectorActivity : BaseActivity(), FolderClickListener, ImageSelectL /** * override on folder click, change the toolbar title on folder click. */ - override fun onFolderClick(folder: Folder) { + override fun onFolderClick(folderId: Long, folderName: String) { supportFragmentManager.beginTransaction() - .add(R.id.fragment_container, ImageFragment.newInstance(folder.bucketId)) + .add(R.id.fragment_container, ImageFragment.newInstance(folderId)) .addToBackStack(null) .commit() - changeTitle(folder.name) + + changeTitle(folderName) + + bucketId = folderId + bucketName = folderName + isImageFragmentOpen = true } /** @@ -148,4 +176,21 @@ class CustomSelectorActivity : BaseActivity(), FolderClickListener, ImageSelectL } } + override fun onDestroy() { + if(isImageFragmentOpen){ + prefs.edit().putLong("FolderId", bucketId).putString("FolderName", bucketName).apply() + } else { + prefs.edit().remove("FolderId").remove("FolderName").apply() + } + super.onDestroy() + } + + /** + * Called whenever the contents of the back stack change. + */ + override fun onBackStackChanged() { + if(supportFragmentManager.backStackEntryCount == 0) { + isImageFragmentOpen = false + } + } } \ No newline at end of file