package net.coding.program.subject;
import android.content.Intent;
import android.support.v7.app.ActionBar;
import android.support.v7.widget.SearchView;
import android.text.TextUtils;
import android.view.View;
import android.widget.AdapterView;
import android.widget.LinearLayout;
import android.widget.TextView;
import net.coding.program.R;
import net.coding.program.common.Global;
import net.coding.program.common.ui.BackActivity;
import net.coding.program.model.Subject;
import net.coding.program.subject.adapter.SubjectLastListAdapter;
import net.coding.program.subject.service.ISubjectRecommendObject;
import net.coding.program.subject.util.TopicLastCache;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.ViewById;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
import se.emilsjolander.stickylistheaders.StickyListHeadersListView;
/**
* Created by david on 15-7-24.
*/
@EActivity(R.layout.activity_subject_create)
public class SubjectNewActivity extends BackActivity {
final String subjectHotTweetUrl = Global.HOST_API + "/tweet_topic/hot?page=1&pageSize=20";
final String hotRecommendUrl = Global.HOST_API + "/tweet_topic/defaults";
private static final String TAG_HOT_SUBJECT = "TAG_HOT_SUBJECT";
private static final String TAG_HOT_RECOMMEND = "TAG_HOT_RECOMMEND";
@ViewById
View emptyView;
@ViewById
StickyListHeadersListView listView;
@ViewById(R.id.topic_create_layout)
LinearLayout createLayout;
@ViewById(R.id.topic_create_name)
TextView topicCreateName;
@ViewById(R.id.topic_create_btn)
TextView topicCreateBtn;
private SubjectLastListAdapter subjectListItemAdapter;
SearchView editText;
private List<ISubjectRecommendObject> subjectRecommendObjectList = new ArrayList<>();
private List<ISubjectRecommendObject> showRecommendObjectList = new ArrayList<>();
private String mTopicName;
@AfterViews
void init() {
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setCustomView(R.layout.activity_search_subject_actionbar);
editText = (SearchView) findViewById(R.id.editText);
editText.onActionViewExpanded();
editText.setIconified(false);
editText.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
return true;
}
@Override
public boolean onQueryTextChange(String s) {
updateShow(s);
return true;
}
});
subjectListItemAdapter = new SubjectLastListAdapter(this, showRecommendObjectList);
listView.setAdapter(subjectListItemAdapter);
listView.setOnItemClickListener(onItemClickListener);
topicCreateBtn.setOnClickListener(onClickListener);
showDialogLoading();
loadSubjectLastCache();
loadHotSubjectFromServer();
}
private void loadSubjectLastCache() {
for (String s : TopicLastCache.getInstance(this).getTopicLastCacheList()) {
Subject.SubjectLastUsedObject lastUsedObject = new Subject.SubjectLastUsedObject(s);
subjectRecommendObjectList.add(lastUsedObject);
}
}
@Override
public void onBackPressed() {
super.onBackPressed();
overridePendingTransition(0, 0);
}
private void loadHotSubjectFromServer() {
getNetwork(subjectHotTweetUrl, TAG_HOT_SUBJECT);
getNetwork(hotRecommendUrl, TAG_HOT_RECOMMEND);
}
@Override
public void parseJson(int code, JSONObject respanse, String tag, int pos, Object data) throws JSONException {
if (tag.equals(TAG_HOT_SUBJECT)) {
if (code == 0) {
JSONArray jsonArray = null;
jsonArray = respanse.optJSONArray("data");
for (int i = 0; i < jsonArray.length(); ++i) {
JSONObject json = jsonArray.getJSONObject(i);
Subject.SubjectDescObject projectObject = new Subject.SubjectDescObject(json);
subjectRecommendObjectList.add(projectObject);
if (i >= 9)
break;
}
} else {
showErrorMsg(code, respanse);
}
updateShow("");
hideProgressDialog();
} else if (tag.equals(TAG_HOT_RECOMMEND)) {
if (code == 0) {
JSONArray jsonArray = respanse.optJSONArray("data");
int insertPos = TopicLastCache.getInstance(this).getTopicLastCacheList().size();
for (int i = 0; i < jsonArray.length(); ++i) {
JSONObject json = jsonArray.getJSONObject(i);
Subject.SubjectDescObject subject = new Subject.SubjectDescObject(json);
subject.setType(2);
subjectRecommendObjectList.add(insertPos + i, subject);
}
}
}
}
private void updateShow(String condition) {
if (subjectRecommendObjectList != null) {
showRecommendObjectList.clear();
for (ISubjectRecommendObject subjectRecommendObject : subjectRecommendObjectList) {
if (TextUtils.isEmpty(condition) || subjectRecommendObject.getName().contains(condition))
showRecommendObjectList.add(subjectRecommendObject);
}
subjectListItemAdapter.notifyDataSetChanged();
if (showRecommendObjectList.size() > 0) {
listView.setVisibility(View.VISIBLE);
createLayout.setVisibility(View.GONE);
} else {
listView.setVisibility(View.GONE);
topicCreateName.setText(condition);
createLayout.setVisibility(View.VISIBLE);
}
}
}
private AdapterView.OnItemClickListener onItemClickListener = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (position >= 0 && position < subjectRecommendObjectList.size()) {
ISubjectRecommendObject recommendObject = subjectRecommendObjectList.get(position);
mTopicName = recommendObject.getName();
TopicLastCache.getInstance(SubjectNewActivity.this).add(mTopicName);
finish();
}
}
};
private View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.topic_create_btn:
if (topicCreateName != null && topicCreateName.getText() != null) {
mTopicName = topicCreateName.getText().toString();
TopicLastCache.getInstance(SubjectNewActivity.this).add(mTopicName);
finish();
}
break;
}
}
};
@Override
public void finish() {
if (!TextUtils.isEmpty(mTopicName)) {
Intent intent = new Intent();
intent.putExtra("topic_name", "#" + mTopicName + "#");
setResult(RESULT_OK, intent);
}
super.finish();
}
}