package com.merono.g;
import android.app.DialogFragment;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonArrayRequest;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
public class BoardActivity extends FragmentActivity {
private static final String API_URL = "https://api.4chan.org%scatalog.json";
private String mBoardName;
private BoardFragment boardFragment;
private MenuItem refreshItem;
private ArrayList<String> threadLinks = new ArrayList<String>(15);
private ArrayList<Post> posts = new ArrayList<Post>(15);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
SharedPreferences pref = PreferenceManager
.getDefaultSharedPreferences(this);
// don't reload on configuration change
if (savedInstanceState == null) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
boardFragment = new BoardFragment();
ft.replace(android.R.id.content, boardFragment, "board_fragment").commit();
mBoardName = pref.getString("board", "/g/");
pref.edit().putString("currentBoard", mBoardName).commit();
loadThreads(String.format(API_URL, mBoardName));
} else {
mBoardName = pref.getString("currentBoard", "/g/");
}
getActionBar().setDisplayShowHomeEnabled(false);
setTitle(mBoardName);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu, menu);
refreshItem = menu.findItem(R.id.refresh);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.refresh:
refresh();
return true;
case R.id.choose_board:
chooseBoard();
return true;
case R.id.settings:
startActivity(new Intent(this, PrefsActivity.class));
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private void refresh() {
posts.clear();
threadLinks.clear();
setTitle(mBoardName);
loadThreads(String.format(API_URL, mBoardName));
}
private void chooseBoard() {
DialogFragment boardFragment = new ChooseBoardDialogFragment();
boardFragment.show(getFragmentManager(), "choose_board_dialog");
}
public void switchBoard(String board) {
mBoardName = Utils.cleanBoardName(board);
SharedPreferences pref = PreferenceManager
.getDefaultSharedPreferences(this);
pref.edit().putString("currentBoard", mBoardName).commit();
refresh();
}
private void loadThreads(String url) {
setProgressBarIndeterminateVisibility(true);
if (refreshItem != null) {
refreshItem.setVisible(false);
}
GApplication appState = (GApplication) getApplication();
appState.mRequestQueue.add(new JsonArrayRequest(url,
new Listener<JSONArray>() {
public void onResponse(JSONArray response) {
parseJSON(response);
completeLoad();
}
}, new ErrorListener() {
public void onErrorResponse(VolleyError error) {
posts.add(new Post(error.getMessage()));
threadLinks.add(null);
completeLoad();
}
}));
appState.mRequestQueue.start();
}
private void completeLoad() {
// boardFragment is null after config change
if (boardFragment == null) {
FragmentManager fm = getSupportFragmentManager();
boardFragment = (BoardFragment) fm.findFragmentById(android.R.id.content);
}
boardFragment.setData(posts, threadLinks);
setProgressBarIndeterminateVisibility(false);
if (refreshItem != null) {
refreshItem.setVisible(true);
}
}
private void parseJSON(JSONArray json) {
try {
for (int i = 0; i < json.length(); i++) {
JSONObject obj = json.getJSONObject(i);
JSONArray threads = obj.getJSONArray("threads");
for (int j = 0; j < threads.length(); j++) {
JSONObject post = threads.getJSONObject(j);
posts.add(new Post(post, mBoardName));
threadLinks.add("https://boards.4chan.org" + mBoardName +
"res/" + post.getInt("no"));
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}