diff options
author | Kazuki Yamaguchi <k@rhe.jp> | 2017-10-21 01:43:33 +0900 |
---|---|---|
committer | Kazuki Yamaguchi <k@rhe.jp> | 2017-10-21 01:43:33 +0900 |
commit | ae99a077308b699fecc09493c152782d5cd8830d (patch) | |
tree | c1e4d0a1990d73523604289846a4a7b120369cd2 /app/src/main/java/net/lacolaco/smileessence/view/page/SearchPageFragment.kt | |
parent | 019637388fdebaca870fa46a88e79b0a16784423 (diff) | |
download | SmileEssence-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.kt | 179 |
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) + } + } +} |