aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/net/lacolaco/smileessence/activity
diff options
context:
space:
mode:
authorKazuki Yamaguchi <k@rhe.jp>2017-10-26 01:22:54 +0900
committerKazuki Yamaguchi <k@rhe.jp>2017-10-26 01:27:02 +0900
commit7ae78f41164b0333106945dcd611d039646f48e7 (patch)
tree12d7bd09af4f673e82a42acc640e02a1f5994f30 /app/src/main/java/net/lacolaco/smileessence/activity
parent40103f06c8e2798aad8f93c4da1d1b9aea0825f7 (diff)
downloadSmileEssence-7ae78f41164b0333106945dcd611d039646f48e7.tar.gz
de-listview
Diffstat (limited to 'app/src/main/java/net/lacolaco/smileessence/activity')
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/activity/EditExtractionActivity.kt61
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/activity/ManagePagesActivity.kt37
2 files changed, 77 insertions, 21 deletions
diff --git a/app/src/main/java/net/lacolaco/smileessence/activity/EditExtractionActivity.kt b/app/src/main/java/net/lacolaco/smileessence/activity/EditExtractionActivity.kt
index 506178ad..265652a0 100644
--- a/app/src/main/java/net/lacolaco/smileessence/activity/EditExtractionActivity.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/activity/EditExtractionActivity.kt
@@ -6,13 +6,72 @@ import android.support.v7.app.AppCompatActivity
import android.text.TextUtils
import android.view.*
import android.widget.AbsListView
+import android.widget.BaseAdapter
import android.widget.ListView
import kotlinx.android.synthetic.main.layout_edit_list.*
import kotlinx.android.synthetic.main.list_item_simple_text.view.*
import kotlinx.android.synthetic.main.part_edittext.view.*
import net.lacolaco.smileessence.R
import net.lacolaco.smileessence.data.ExtractionWord
-import net.lacolaco.smileessence.view.adapter.UnorderedCustomListAdapter
+import net.lacolaco.smileessence.util.UIHandler
+import java.util.*
+
+abstract class CustomListAdapter<out T> : BaseAdapter() {
+ private var isNotifiable = true
+ private var frozenList: List<T> = ArrayList()
+
+ fun setNotifiable(notifiable: Boolean) {
+ isNotifiable = notifiable
+ }
+
+ override fun getCount(): Int {
+ return frozenList.size
+ }
+
+ override fun getItem(position: Int): T {
+ return frozenList[position]
+ }
+
+ override fun getItemId(position: Int): Long {
+ return position.toLong()
+ }
+
+ override fun notifyDataSetChanged() {
+ frozenList = Collections.unmodifiableList(list)
+ super.notifyDataSetChanged()
+ }
+
+ protected abstract val list: List<T>
+
+ fun update() {
+ if (isNotifiable) {
+ updateForce()
+ }
+ }
+
+ fun updateForce() {
+ UIHandler().post { this.notifyDataSetChanged() }
+ }
+}
+
+
+abstract class UnorderedCustomListAdapter<T> constructor(override val list: ArrayList<T> = ArrayList()) : CustomListAdapter<T>() {
+ init {
+ update()
+ }
+
+ @Synchronized
+ fun add(item: T) = list.add(item)
+
+ @Synchronized
+ fun addAll(items: Collection<T>) = list.addAll(items)
+
+ @Synchronized
+ fun clear() = list.clear()
+
+ @Synchronized
+ fun remove(item: T): Boolean = list.remove(item)
+}
class EditExtractionActivity : AppCompatActivity() {
private val adapter by lazy {
diff --git a/app/src/main/java/net/lacolaco/smileessence/activity/ManagePagesActivity.kt b/app/src/main/java/net/lacolaco/smileessence/activity/ManagePagesActivity.kt
index 75560f40..11019e72 100644
--- a/app/src/main/java/net/lacolaco/smileessence/activity/ManagePagesActivity.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/activity/ManagePagesActivity.kt
@@ -20,7 +20,7 @@ class ManagePagesActivity : AppCompatActivity() {
private val world by lazy {
World[intent.getLongExtra(INTENT_KEY_WORLD_ID, -1)]
}
- private lateinit var pages: MutableList<PageInfo>
+ private var changed = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -28,16 +28,14 @@ class ManagePagesActivity : AppCompatActivity() {
setContentView(R.layout.activity_page_manage)
setSupportActionBar(toolbar)
- pages = PageInfo.parseList(if (savedInstanceState == null)
- PageInfo.stringifyList(world.pages)
- else
- savedInstanceState.getString(KEY_SAVED_PAGES)
- ).toMutableList()
+ if (savedInstanceState != null)
+ changed = savedInstanceState.getBoolean(KEY_IS_CHANGED)
fab.setOnClickListener {
+ changed = true
val item = PageInfo.TweetsPageInfo("Tweets", listOf())
- pages.add(item)
- recycler_view.adapter.notifyItemInserted(pages.size - 1)
+ world.pages.add(item)
+ recycler_view.adapter.notifyItemInserted(world.pages.size - 1)
openItemEditor(item)
}
val helper = ItemTouchHelper(object : ItemTouchHelper.Callback() {
@@ -66,15 +64,12 @@ class ManagePagesActivity : AppCompatActivity() {
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
- outState.putString(KEY_SAVED_PAGES, PageInfo.stringifyList(pages))
+ outState.putBoolean(KEY_IS_CHANGED, changed)
}
override fun finish() {
// MainActivity will restart itself on RESULT_OK
- if (PageInfo.stringifyList(world.pages) == PageInfo.stringifyList(pages))
- setResult(RESULT_CANCELED)
- else
- setResult(RESULT_OK)
+ setResult(if (changed) RESULT_OK else RESULT_CANCELED)
super.finish()
}
@@ -84,12 +79,12 @@ class ManagePagesActivity : AppCompatActivity() {
companion object {
val INTENT_KEY_WORLD_ID = "WORLD_ID"
- private val KEY_SAVED_PAGES = "SAVED_PAGES"
+ private val KEY_IS_CHANGED = "IS_CHANGED"
}
private inner class PagesAdapter : RecyclerView.Adapter<PagesAdapter.ViewHolder>() {
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
- val item = pages[position]
+ val item = world.pages[position]
val view = holder.itemView
view.page_kind_text_view.text = item.name
view.page_name_text_view.text = item.describe()
@@ -101,7 +96,7 @@ class ManagePagesActivity : AppCompatActivity() {
}
override fun getItemCount(): Int {
- return pages.size
+ return world.pages.size
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
@@ -109,16 +104,18 @@ class ManagePagesActivity : AppCompatActivity() {
}
fun move(before: Int, after: Int): Boolean {
- val item = pages.removeAt(before)
- pages.add(after, item)
+ changed = true
+ val item = world.pages.removeAt(before)
+ world.pages.add(after, item)
notifyItemMoved(before, after)
return true
}
fun remove(position: Int) {
- pages.removeAt(position)
+ changed = true
+ world.pages.removeAt(position)
notifyItemRemoved(position)
- notifyItemRangeChanged(position, pages.size)
+ notifyItemRangeChanged(position, world.pages.size)
}
private inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)