Saving selector state (#4526)

This commit is contained in:
Aditya-Srivastav 2021-07-27 05:50:49 +05:30 committed by Aditya Srivastava
parent 9b00c9417f
commit 267b6b2a1b
3 changed files with 57 additions and 14 deletions

View file

@ -1,7 +1,5 @@
package fr.free.nrw.commons.customselector.listeners package fr.free.nrw.commons.customselector.listeners
import fr.free.nrw.commons.customselector.model.Folder
interface FolderClickListener { interface FolderClickListener {
fun onFolderClick(folder : Folder) fun onFolderClick(folderId: Long, folderName: String)
} }

View file

@ -49,7 +49,7 @@ class FolderAdapter(
holder.name.text = folder.name holder.name.text = folder.name
holder.count.text = count.toString() holder.count.text = count.toString()
holder.itemView.setOnClickListener{ holder.itemView.setOnClickListener{
itemClickListener.onFolderClick(folder) itemClickListener.onFolderClick(folder.bucketId, folder.name)
} }
//todo load image thumbnail. //todo load image thumbnail.

View file

@ -2,26 +2,43 @@ package fr.free.nrw.commons.customselector.ui.selector
import android.app.Activity import android.app.Activity
import android.content.Intent import android.content.Intent
import android.content.SharedPreferences
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import android.widget.ImageButton import android.widget.ImageButton
import android.widget.TextView import android.widget.TextView
import androidx.fragment.app.FragmentManager
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.customselector.listeners.FolderClickListener import fr.free.nrw.commons.customselector.listeners.FolderClickListener
import fr.free.nrw.commons.customselector.listeners.ImageSelectListener 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.customselector.model.Image
import fr.free.nrw.commons.theme.BaseActivity import fr.free.nrw.commons.theme.BaseActivity
import java.io.File import java.io.File
import javax.inject.Inject import javax.inject.Inject
class CustomSelectorActivity : BaseActivity(), FolderClickListener, ImageSelectListener { class CustomSelectorActivity: BaseActivity(), FolderClickListener, ImageSelectListener, FragmentManager.OnBackStackChangedListener {
/** /**
* View model. * 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. * View Model Factory.
@ -35,9 +52,17 @@ class CustomSelectorActivity : BaseActivity(), FolderClickListener, ImageSelectL
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_custom_selector) 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() 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() .commit()
fetchData() fetchData()
setUpToolbar() 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. * Change the title of the toolbar.
*/ */
private fun changeTitle(title:String) { private fun changeTitle(title: String) {
val titleText = findViewById<TextView>(R.id.title) val titleText = findViewById<TextView>(R.id.title)
if(titleText != null) { if(titleText != null) {
titleText.text = title titleText.text = title
@ -84,12 +107,17 @@ class CustomSelectorActivity : BaseActivity(), FolderClickListener, ImageSelectL
/** /**
* override on folder click, change the toolbar title on folder click. * 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() supportFragmentManager.beginTransaction()
.add(R.id.fragment_container, ImageFragment.newInstance(folder.bucketId)) .add(R.id.fragment_container, ImageFragment.newInstance(folderId))
.addToBackStack(null) .addToBackStack(null)
.commit() .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
}
}
} }