/*******************************************************************************
* Copyright 2011, 2012, 2013 fanfou.com, Xiaoke, Zhang
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*******************************************************************************/
package com.fanfou.app.opensource;
import java.util.ArrayList;
import java.util.List;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ListView;
import com.fanfou.app.opensource.adapter.ConversationAdapter;
import com.fanfou.app.opensource.api.ApiClient;
import com.fanfou.app.opensource.api.ApiException;
import com.fanfou.app.opensource.api.bean.Status;
import com.fanfou.app.opensource.service.Constants;
import com.fanfou.app.opensource.ui.ActionBar;
import com.fanfou.app.opensource.ui.UIManager;
import com.fanfou.app.opensource.ui.widget.EndlessListView;
import com.fanfou.app.opensource.ui.widget.EndlessListView.OnRefreshListener;
import com.fanfou.app.opensource.util.CommonHelper;
import com.fanfou.app.opensource.util.StringHelper;
/**
* @author mcxiaoke
* @version 1.0 2011.10.25
* @version 1.1 2011.10.26
* @version 1.2 2011.10.28
* @version 1.3 2011.11.07
* @version 2.0 2011.11.11
* @version 3.0 2011.11.18
*
*/
public class ConversationPage extends BaseActivity implements
OnRefreshListener, OnItemLongClickListener {
private class FetchTask
extends
AsyncTask<Void, com.fanfou.app.opensource.api.bean.Status, List<Status>> {
@Override
protected List<com.fanfou.app.opensource.api.bean.Status> doInBackground(
final Void... params) {
final ApiClient api = AppContext.getApiClient();
final String id = ConversationPage.this.mStatus.id;
try {
if (!StringHelper.isEmpty(id)) {
return api.contextTimeline(id, Constants.FORMAT,
Constants.MODE);
}
} catch (final ApiException e) {
if (AppContext.DEBUG) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onPostExecute(
final List<com.fanfou.app.opensource.api.bean.Status> result) {
if ((result != null) && (result.size() > 0)) {
ConversationPage.this.mThread.addAll(result);
}
ConversationPage.this.mListView.onNoRefresh();
}
}
protected ActionBar mActionBar;
protected EndlessListView mListView;
protected ViewGroup mEmptyView;
protected ConversationAdapter mStatusAdapter;
private List<Status> mThread;
private Status mStatus;
private static final String tag = ConversationPage.class.getSimpleName();
private void doFetchThreads() {
new FetchTask().execute();
this.mListView.setRefreshing();
}
protected void initialize() {
this.mThread = new ArrayList<Status>();
this.mStatusAdapter = new ConversationAdapter(this, this.mThread);
}
private void log(final String message) {
Log.d(ConversationPage.tag, message);
}
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
log("onCreate");
if (parseIntent()) {
initialize();
setLayout();
doFetchThreads();
} else {
finish();
}
}
@Override
public void onItemClick(final ListView view, final View row,
final int position) {
final Status s = (Status) view.getItemAtPosition(position);
if (s != null) {
CommonHelper.goStatusPage(this.mContext, s);
}
}
@Override
public boolean onItemLongClick(final AdapterView<?> parent,
final View view, final int position, final long id) {
final Status s = (Status) parent.getItemAtPosition(position);
showPopup(view, s);
return true;
}
@Override
public void onLoadMore(final ListView view) {
}
@Override
protected void onPause() {
AppContext.active = false;
super.onPause();
}
@Override
public void onRefresh(final ListView view) {
}
@Override
protected void onResume() {
super.onResume();
AppContext.active = true;
}
protected boolean parseIntent() {
final Intent intent = getIntent();
this.mStatus = (Status) intent.getParcelableExtra(Constants.EXTRA_DATA);
return this.mStatus != null;
}
/**
* 初始化和设置ActionBar
*/
private void setActionBar() {
this.mActionBar = (ActionBar) findViewById(R.id.actionbar);
this.mActionBar.setLeftAction(new ActionBar.BackAction(this));
this.mActionBar.setTitle("对话");
}
private void setLayout() {
setContentView(R.layout.list);
setActionBar();
this.mEmptyView = (ViewGroup) findViewById(R.id.empty);
this.mEmptyView.setVisibility(View.GONE);
this.mListView = (EndlessListView) findViewById(R.id.list);
this.mListView.setOnRefreshListener(this);
this.mListView.setOnItemLongClickListener(this);
this.mListView.setAdapter(this.mStatusAdapter);
this.mListView.setHeaderDividersEnabled(false);
this.mListView.setFooterDividersEnabled(false);
this.mListView.removeFooter();
}
private void showPopup(final View view, final Status s) {
if (s != null) {
UIManager.showPopup(this.mContext, view, s, this.mStatusAdapter);
}
}
}