package com.jasonchen.microlang.activitys;
import android.app.Activity;
import android.app.SearchManager;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.widget.SearchView;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import com.jasonchen.microlang.R;
import com.jasonchen.microlang.beans.AccountBean;
import com.jasonchen.microlang.beans.AtUserBean;
import com.jasonchen.microlang.dao.AtUserDao;
import com.jasonchen.microlang.database.AtUsersDBTask;
import com.jasonchen.microlang.exception.WeiboException;
import com.jasonchen.microlang.swipeback.app.SwipeBackActivity;
import com.jasonchen.microlang.tasks.MyAsyncTask;
import com.jasonchen.microlang.utils.ViewUtility;
import java.util.ArrayList;
import java.util.List;
/**
* jasonchen
* 2015/04/17
*/
public class AtUserActivity extends SwipeBackActivity {
private String token;
private AccountBean accountBean;
private ListView listView;
private List<AtUserBean> atList = new ArrayList<AtUserBean>();
private List<String> result = new ArrayList<String>();;
private AtUserTask task;
private MyAdapter adapter;
public static Intent newIntent(Context context, AccountBean accountBean, String token){
Intent intent = new Intent(context, AtUserActivity.class);
intent.putExtra("account", accountBean);
intent.putExtra("token", token);
return intent;
}
@Override
public void onCreate(Bundle savedInstanceState) {
mLayout = R.layout.activity_at_user;
super.onCreate(savedInstanceState);
initView();
}
private void initView() {
getSupportActionBar().setTitle("");
if(getIntent() != null){
token = getIntent().getStringExtra("token");
accountBean = getIntent().getParcelableExtra("account");
}
listView = ViewUtility.findViewById(this, R.id.listView);
adapter = new MyAdapter();
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Intent intent = new Intent();
intent.putExtra("name", atList.get(i).getNickname());
setResult(Activity.RESULT_OK, intent);
AtUsersDBTask.add(atList.get(i), accountBean.getUid());
finish();
}
});
//get db cache
atList = AtUsersDBTask.get(accountBean.getUid());
for (AtUserBean b : atList) {
result.add(b.getNickname());
}
adapter.notifyDataSetChanged();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu items for use in the action bar
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_activity_at_user, menu);
initSearchView(menu);
return super.onCreateOptionsMenu(menu);
}
private void initSearchView(Menu menu) {
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
if (!TextUtils.isEmpty(newText)) {
if (task != null) {
task.cancel(true);
}
task = new AtUserTask(newText);
task.executeOnExecutor(MyAsyncTask.THREAD_POOL_EXECUTOR);
} else {
if (task != null) {
task.cancel(true);
}
atList.clear();
result.clear();
atList = AtUsersDBTask.get(accountBean.getUid());
for (AtUserBean b : atList) {
result.add(b.getNickname());
}
adapter.notifyDataSetChanged();
}
return false;
}
});
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle presses on the action bar items
switch (item.getItemId()) {
case R.id.search:
return true;
default:
return super.onOptionsItemSelected(item);
}
}
class AtUserTask extends MyAsyncTask<Void, List<AtUserBean>, List<AtUserBean>> {
WeiboException e;
String q;
public AtUserTask(String q) {
this.q = q;
}
@Override
protected List<AtUserBean> doInBackground(Void... params) {
AtUserDao dao = new AtUserDao(token, q);
try {
return dao.getUserInfo();
} catch (WeiboException e) {
this.e = e;
cancel(true);
return null;
}
}
@Override
protected void onPostExecute(List<AtUserBean> atUserBeans) {
super.onPostExecute(atUserBeans);
if (isCancelled())
return;
if (atUserBeans == null || atUserBeans.size() == 0) {
result.clear();
atList.clear();
adapter.notifyDataSetChanged();
return;
}
result.clear();
for (AtUserBean b : atUserBeans) {
if (b.getRemark().contains(q)) {
result.add(b.getNickname() + "(" + b.getRemark() + ")");
} else {
result.add(b.getNickname());
}
}
atList = atUserBeans;
adapter.notifyDataSetChanged();
}
}
private class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
return result.size();
}
@Override
public Object getItem(int position) {
return result.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView,
ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(AtUserActivity.this).inflate(
R.layout.at_user_item_layout, null);
}
TextView name = (TextView) convertView.findViewById(R.id.name);
name.setText(result.get(position));
return convertView;
}
}
}