package info.justaway;
import android.app.ActionBar;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.KeyEvent;
import android.view.MenuItem;
import android.view.View;
import android.widget.AbsListView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.ProgressBar;
import info.justaway.adapter.UserAdapter;
import info.justaway.model.TwitterManager;
import info.justaway.util.KeyboardUtil;
import info.justaway.util.MessageUtil;
import info.justaway.util.ThemeUtil;
import twitter4j.ResponseList;
import twitter4j.User;
public class UserSearchActivity extends FragmentActivity {
private EditText mSearchText;
private String mSearchWord;
private int mPage = 1;
private UserAdapter mAdapter;
private ListView mListView;
private ProgressBar mProgressBar;
private boolean mAutoLoading = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ThemeUtil.setTheme(this);
setContentView(R.layout.activity_user_search);
ActionBar actionBar = getActionBar();
if (actionBar != null) {
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
}
Button search = (Button) findViewById(R.id.search);
mSearchText = (EditText) findViewById(R.id.search_text);
mProgressBar = (ProgressBar) findViewById(R.id.guruguru);
mListView = (ListView) findViewById(R.id.list_view);
mListView.setVisibility(View.GONE);
// ユーザをViewに描写するアダプター
mAdapter = new UserAdapter(this, R.layout.row_user);
mListView.setAdapter(mAdapter);
search.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
search();
}
});
mSearchText.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
//EnterKeyが押されたかを判定
if (event.getAction() == KeyEvent.ACTION_DOWN
&& keyCode == KeyEvent.KEYCODE_ENTER) {
search();
return true;
}
return false;
}
});
Intent intent = getIntent();
String query = intent.getStringExtra("query");
if (query != null) {
mSearchText.setText(query);
search.performClick();
} else {
KeyboardUtil.showKeyboard(mSearchText);
}
mListView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
// 最後までスクロールされたかどうかの判定
if (totalItemCount == firstVisibleItem + visibleItemCount) {
additionalReading();
}
}
});
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
break;
}
return true;
}
private void additionalReading() {
if (!mAutoLoading) {
return;
}
mProgressBar.setVisibility(View.VISIBLE);
mAutoLoading = false;
new UserSearchTask().execute(mSearchWord);
}
private void search() {
KeyboardUtil.hideKeyboard(mSearchText);
if (mSearchText.getText() == null) return;
mAdapter.clear();
mPage = 1;
mListView.setVisibility(View.GONE);
mProgressBar.setVisibility(View.VISIBLE);
mSearchWord = mSearchText.getText().toString();
new UserSearchTask().execute(mSearchWord);
}
private class UserSearchTask extends AsyncTask<String, Void, ResponseList<User>> {
@Override
protected ResponseList<User> doInBackground(String... params) {
String query = params[0];
try {
return TwitterManager.getTwitter().searchUsers(query, mPage);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
@Override
protected void onPostExecute(ResponseList<User> users) {
mProgressBar.setVisibility(View.GONE);
if (users == null) {
MessageUtil.showToast(R.string.toast_load_data_failure);
return;
}
for (User user : users) {
mAdapter.add(user);
}
if (users.size() == 20) {
mAutoLoading = true;
mPage++;
}
mListView.setVisibility(View.VISIBLE);
}
}
}