/* * The MIT License (MIT) * * Copyright (c) 2012-2014 lacolaco.net * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ package net.lacolaco.smileessence.view.page import android.os.Bundle import android.widget.ListView import com.handmark.pulltorefresh.library.PullToRefreshBase import net.lacolaco.smileessence.R import net.lacolaco.smileessence.entity.DirectMessage import net.lacolaco.smileessence.twitter.task.Messages import net.lacolaco.smileessence.twitter.task.TimelineTask import net.lacolaco.smileessence.view.adapter.MessageListAdapter class MessagesFragment : CustomListFragment() { override val adapter by lazy { MessageListAdapter(activity, world) } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) world.addDirectMessageTimeline(this) { message -> adapter.add(message) adapter.update() } refresh() } override fun refresh() { runRefreshTask(Messages.GetAllReceived(world.account)) { adapter.updateForce() } runRefreshTask(Messages.GetAllSent(world.account)) { adapter.updateForce() } } override val refreshMode: PullToRefreshBase.Mode get() = PullToRefreshBase.Mode.BOTH override fun onPullDownToRefresh(refreshView: PullToRefreshBase) { runRefreshTask(Messages.GetAllReceived(world.account).setSinceId(adapter.topID)) { updateListViewWithNotice(refreshView.refreshableView, true) refreshView.onRefreshComplete() } } override fun onPullUpToRefresh(refreshView: PullToRefreshBase) { runRefreshTask(Messages.GetAllReceived(world.account).setMaxId(adapter.lastID - 1)) { updateListViewWithNotice(refreshView.refreshableView, false) refreshView.onRefreshComplete() } } private fun runRefreshTask(task: TimelineTask, onFinish: () -> Unit) { task .setCount(200) .onFail { x -> world.notifyError(R.string.notice_error_get_messages) } .onDone { messages -> world.addDirectMessage(messages) } .onFinishUI(onFinish) .execute() } }