aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/net/lacolaco/smileessence/view/page/SearchPageFragment.kt
diff options
context:
space:
mode:
authorKazuki Yamaguchi <k@rhe.jp>2017-10-21 01:43:33 +0900
committerKazuki Yamaguchi <k@rhe.jp>2017-10-21 01:43:33 +0900
commitae99a077308b699fecc09493c152782d5cd8830d (patch)
treec1e4d0a1990d73523604289846a4a7b120369cd2 /app/src/main/java/net/lacolaco/smileessence/view/page/SearchPageFragment.kt
parent019637388fdebaca870fa46a88e79b0a16784423 (diff)
downloadSmileEssence-ae99a077308b699fecc09493c152782d5cd8830d.tar.gz
rename fragments
Diffstat (limited to 'app/src/main/java/net/lacolaco/smileessence/view/page/SearchPageFragment.kt')
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/page/SearchPageFragment.kt179
1 files changed, 179 insertions, 0 deletions
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/page/SearchPageFragment.kt b/app/src/main/java/net/lacolaco/smileessence/view/page/SearchPageFragment.kt
new file mode 100644
index 00000000..51102a54
--- /dev/null
+++ b/app/src/main/java/net/lacolaco/smileessence/view/page/SearchPageFragment.kt
@@ -0,0 +1,179 @@
+package net.lacolaco.smileessence.view.page
+
+import android.os.Bundle
+import android.text.Spannable
+import android.text.method.ArrowKeyMovementMethod
+import android.view.KeyEvent
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.view.inputmethod.EditorInfo
+import android.widget.TextView
+import com.omadahealth.github.swipyrefreshlayout.library.SwipyRefreshLayout
+import kotlinx.android.synthetic.main.page_fragment_search.*
+import net.lacolaco.smileessence.R
+import net.lacolaco.smileessence.data.PageInfo
+import net.lacolaco.smileessence.entity.Tweet
+import net.lacolaco.smileessence.twitter.TwitterTaskException
+import net.lacolaco.smileessence.twitter.task.createSavedSearchAsync
+import net.lacolaco.smileessence.twitter.task.destroySavedSearchAsync
+import net.lacolaco.smileessence.twitter.task.doSearch
+import net.lacolaco.smileessence.util.SystemServiceHelper
+import net.lacolaco.smileessence.util.launchUi
+import net.lacolaco.smileessence.view.Partials
+import net.lacolaco.smileessence.view.PopupMenu
+import net.lacolaco.smileessence.view.confirm
+import twitter4j.Query
+import java.util.*
+
+class SearchPageFragment : RefreshableTimelinePageFragment<Tweet, PageInfo.SearchPageInfo>() {
+ override fun refresh() {
+ if (pageInfo.query.isNotBlank())
+ startSearch(pageInfo.query)
+ }
+
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup, savedInstanceState: Bundle?): View {
+ return inflater.inflate(R.layout.page_fragment_search, container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ setSwipeRefreshEnabled(pageInfo.query.isNotBlank())
+
+ button_search_queries.setOnClickListener {
+ val popup = PopupMenu(activity, button_search_queries)
+ val sss = ArrayList(world.savedSearches.values)
+ for (ss in sss) {
+ popup.add(ss.query) {
+ edittext_search.setText(ss.query)
+ startSearch(ss.query)
+ }
+ }
+ popup.show()
+ }
+ button_search_execute.setOnClickListener {
+ search()
+ }
+ button_search_save.setOnClickListener {
+ saveQuery()
+ }
+ button_search_save.setOnLongClickListener {
+ val text = edittext_search.text.toString()
+ val ss = world.savedSearches.values.find { it.query == text }
+ if (ss != null) {
+ confirm(R.string.dialog_confirm_delete_query) {
+ launchUi {
+ try {
+ world.destroySavedSearchAsync(ss.id).await()
+ world.notify(R.string.notice_search_query_deleted)
+ world.savedSearches.remove(ss.id)
+ } catch (e: TwitterTaskException) {
+ world.notifyError("unable to delete search query")
+ }
+ }
+ }
+ }
+ true
+ }
+ edittext_search.setOnFocusChangeListener { _, hasFocus ->
+ if (!hasFocus)
+ SystemServiceHelper.hideIM(activity, edittext_search)
+ }
+ edittext_search.setText(pageInfo.query)
+ edittext_search.setOnEditorActionListener { _, i, keyEvent ->
+ if (i == EditorInfo.IME_ACTION_SEARCH || keyEvent != null &&
+ keyEvent.action == KeyEvent.ACTION_DOWN &&
+ keyEvent.keyCode == KeyEvent.KEYCODE_ENTER) {
+ search()
+ }
+ true
+ }
+ edittext_search.movementMethod = object : ArrowKeyMovementMethod() {
+ override fun right(widget: TextView, buffer: Spannable): Boolean {
+ //Don't move page
+ return widget.selectionEnd == widget.length() || super.right(widget, buffer)
+ }
+
+ override fun left(widget: TextView, buffer: Spannable): Boolean {
+ //Don't move page
+ return widget.selectionStart == 0 || super.left(widget, buffer)
+ }
+ }
+
+ refresh()
+ }
+
+ override fun onSwipeDown(view: SwipyRefreshLayout) {
+ val query = Query()
+ query.query = pageInfo.query
+ query.count = 200
+ query.resultType = Query.RECENT
+ if (adapter.sortedList.size() > 0) {
+ query.sinceId = adapter.sortedList[0].id
+ }
+ runRefreshTask(query) {
+ view.isRefreshing = false
+ }
+ }
+
+ override fun onSwipeUp(view: SwipyRefreshLayout) {
+ val query = Query()
+ query.query = pageInfo.query
+ query.count = 200
+ query.resultType = Query.RECENT
+ if (adapter.sortedList.size() > 0) {
+ query.maxId = adapter.sortedList[adapter.sortedList.size() - 1].id - 1
+ }
+ runRefreshTask(query) {
+ view.isRefreshing = false
+ }
+ }
+
+ override fun onBindItemView(item: Tweet, itemView: View) {
+ Partials.getTweetView(item, world, activity, itemView, true)
+ }
+
+ override fun onCreateItemView(parent: ViewGroup): View {
+ val layoutInflater = LayoutInflater.from(parent.context)
+ return layoutInflater.inflate(R.layout.list_item_status, parent, false)
+ }
+
+ private fun saveQuery() = launchUi {
+ val text = edittext_search.text.toString()
+ try {
+ val ss = world.createSavedSearchAsync(text).await()
+ world.notify(R.string.notice_query_saved)
+ world.savedSearches.put(ss.id, ss)
+ } catch (e: TwitterTaskException) {
+ world.notifyError("Query is not saved")
+ }
+ }
+
+ private fun search() {
+ startSearch(edittext_search.text.toString())
+ SystemServiceHelper.hideIM(activity, edittext_search)
+ }
+
+ private fun startSearch(queryString: String) {
+ pageInfo.query = queryString
+ setSwipeRefreshEnabled(queryString.isNotBlank())
+ adapter.sortedList.clear()
+ if (queryString.isNotBlank()) {
+ val query = Query()
+ query.query = queryString
+ query.count = 200
+ query.resultType = Query.RECENT
+ runRefreshTask(query) { }
+ }
+ }
+
+ private fun runRefreshTask(query: Query, onFinish: () -> Unit) = launchUi {
+ try {
+ val tweets = world.doSearch(query).await()
+ adapter.sortedList.addAll(tweets.filter { !it.isRetweet })
+ onFinish()
+ } catch (e: TwitterTaskException) {
+ world.notifyError(R.string.notice_error_search)
+ }
+ }
+}