Fixed all tabs to 4 spaces

captchafix
Florens Douwes 12 years ago
parent b9a24501c4
commit ad88ae0410
  1. 8
      Chan/src/com/android/volley/extra/JsonReaderRequest.java
  2. 2
      Chan/src/org/floens/chan/ChanApplication.java
  3. 158
      Chan/src/org/floens/chan/activity/BaseActivity.java
  4. 224
      Chan/src/org/floens/chan/activity/BoardActivity.java
  5. 4
      Chan/src/org/floens/chan/activity/BoardEditor.java
  6. 26
      Chan/src/org/floens/chan/activity/CatalogActivity.java
  7. 42
      Chan/src/org/floens/chan/activity/DeveloperActivity.java
  8. 52
      Chan/src/org/floens/chan/activity/ReplyActivity.java
  9. 14
      Chan/src/org/floens/chan/adapter/PinnedAdapter.java
  10. 68
      Chan/src/org/floens/chan/database/DatabaseHelper.java
  11. 108
      Chan/src/org/floens/chan/database/DatabaseManager.java
  12. 74
      Chan/src/org/floens/chan/fragment/PostRepliesFragment.java
  13. 88
      Chan/src/org/floens/chan/fragment/ReplyFragment.java
  14. 12
      Chan/src/org/floens/chan/fragment/SettingsFragment.java
  15. 14
      Chan/src/org/floens/chan/fragment/ThreadFragment.java
  16. 16
      Chan/src/org/floens/chan/imageview/fragment/ImageViewFragment.java
  17. 2
      Chan/src/org/floens/chan/imageview/view/NetworkPhotoView.java
  18. 10
      Chan/src/org/floens/chan/manager/BoardManager.java
  19. 42
      Chan/src/org/floens/chan/manager/PinnedManager.java
  20. 104
      Chan/src/org/floens/chan/manager/ThreadManager.java
  21. 30
      Chan/src/org/floens/chan/model/Loadable.java
  22. 6
      Chan/src/org/floens/chan/model/Pin.java
  23. 42
      Chan/src/org/floens/chan/model/Post.java
  24. 24
      Chan/src/org/floens/chan/model/PostLinkable.java
  25. 38
      Chan/src/org/floens/chan/net/ChanReaderRequest.java
  26. 38
      Chan/src/org/floens/chan/net/ChanUrls.java
  27. 8
      Chan/src/org/floens/chan/net/ThreadLoader.java
  28. 38
      Chan/src/org/floens/chan/utils/ChanPreferences.java
  29. 62
      Chan/src/org/floens/chan/utils/IOUtils.java
  30. 112
      Chan/src/org/floens/chan/utils/Logger.java
  31. 46
      Chan/src/org/floens/chan/view/PostView.java

@ -47,10 +47,10 @@ public abstract class JsonReaderRequest<T> extends Request<T> {
T read = readJson(reader); T read = readJson(reader);
try { try {
reader.close(); reader.close();
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
// Log.e("Chan", "Total time: " + (System.currentTimeMillis() - start)); // Log.e("Chan", "Total time: " + (System.currentTimeMillis() - start));

@ -40,7 +40,7 @@ public class ChanApplication extends Application {
} }
public static SharedPreferences getPreferences() { public static SharedPreferences getPreferences() {
return PreferenceManager.getDefaultSharedPreferences(instance); return PreferenceManager.getDefaultSharedPreferences(instance);
} }
@Override @Override

@ -49,18 +49,18 @@ public abstract class BaseActivity extends Activity implements PanelSlideListene
private ShareActionProvider shareActionProvider; private ShareActionProvider shareActionProvider;
/** /**
* Called when a post has been clicked in the pinned drawer * Called when a post has been clicked in the pinned drawer
* @param post * @param post
*/ */
abstract public void openPin(Pin post); abstract public void openPin(Pin post);
/** /**
* Called when a post has been clicked in the listview * Called when a post has been clicked in the listview
* @param post * @param post
*/ */
abstract public void onOPClicked(Post post); abstract public void onOPClicked(Post post);
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -72,7 +72,7 @@ public abstract class BaseActivity extends Activity implements PanelSlideListene
threadPane = (SlidingPaneLayout) findViewById(R.id.pane_container); threadPane = (SlidingPaneLayout) findViewById(R.id.pane_container);
initPane(); initPane();
} }
protected void initDrawer() { protected void initDrawer() {
if (pinDrawerListener == null) { if (pinDrawerListener == null) {
return; return;
@ -96,23 +96,23 @@ public abstract class BaseActivity extends Activity implements PanelSlideListene
}); });
pinDrawerView.setOnItemLongClickListener(new OnItemLongClickListener() { pinDrawerView.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override @Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
Pin post = pinnedAdapter.getItem(position); Pin post = pinnedAdapter.getItem(position);
if (post == null || post.type == Pin.Type.HEADER) return false; if (post == null || post.type == Pin.Type.HEADER) return false;
changePinTitle(post); changePinTitle(post);
return true; return true;
} }
}); });
SwipeDismissListViewTouchListener touchListener = new SwipeDismissListViewTouchListener(pinDrawerView, SwipeDismissListViewTouchListener touchListener = new SwipeDismissListViewTouchListener(pinDrawerView,
new DismissCallbacks() { new DismissCallbacks() {
@Override @Override
public void onDismiss(ListView listView, int[] reverseSortedPositions) { public void onDismiss(ListView listView, int[] reverseSortedPositions) {
for (int position : reverseSortedPositions) { for (int position : reverseSortedPositions) {
removePin(pinnedAdapter.getItem(position)); removePin(pinnedAdapter.getItem(position));
} }
} }
@ -127,7 +127,7 @@ public abstract class BaseActivity extends Activity implements PanelSlideListene
} }
private void initPane() { private void initPane() {
threadPane.setPanelSlideListener(this); threadPane.setPanelSlideListener(this);
threadPane.setParallaxDistance(200); threadPane.setParallaxDistance(200);
threadPane.setShadowResource(R.drawable.panel_shadow); threadPane.setShadowResource(R.drawable.panel_shadow);
threadPane.setSliderFadeColor(0xcce5e5e5); threadPane.setSliderFadeColor(0xcce5e5e5);
@ -135,62 +135,62 @@ public abstract class BaseActivity extends Activity implements PanelSlideListene
} }
public void addPin(Pin pin) { public void addPin(Pin pin) {
if (PinnedManager.getInstance().add(pin)) { if (PinnedManager.getInstance().add(pin)) {
pinnedAdapter.add(pin); pinnedAdapter.add(pin);
} }
} }
public void removePin(Pin pin) { public void removePin(Pin pin) {
PinnedManager.getInstance().remove(pin); PinnedManager.getInstance().remove(pin);
pinnedAdapter.remove(pin); pinnedAdapter.remove(pin);
} }
public void updatePin(Pin pin) { public void updatePin(Pin pin) {
PinnedManager.getInstance().update(pin); PinnedManager.getInstance().update(pin);
pinnedAdapter.notifyDataSetChanged(); pinnedAdapter.notifyDataSetChanged();
} }
private void changePinTitle(final Pin pin) { private void changePinTitle(final Pin pin) {
final EditText text = new EditText(this); final EditText text = new EditText(this);
text.setSingleLine(); text.setSingleLine();
text.setText(pin.loadable.title); text.setText(pin.loadable.title);
text.setSelectAllOnFocus(true); text.setSelectAllOnFocus(true);
AlertDialog dialog = new AlertDialog.Builder(this) AlertDialog dialog = new AlertDialog.Builder(this)
.setPositiveButton(R.string.change, new DialogInterface.OnClickListener() { .setPositiveButton(R.string.change, new DialogInterface.OnClickListener() {
@Override @Override
public void onClick(DialogInterface d, int which) { public void onClick(DialogInterface d, int which) {
String value = text.getText().toString(); String value = text.getText().toString();
if (!TextUtils.isEmpty(value)) { if (!TextUtils.isEmpty(value)) {
pin.loadable.title = value; pin.loadable.title = value;
updatePin(pin); updatePin(pin);
} }
} }
}) })
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
@Override @Override
public void onClick(DialogInterface d, int which) { public void onClick(DialogInterface d, int which) {
} }
}) })
.setTitle(R.string.drawer_pinned_change_title) .setTitle(R.string.drawer_pinned_change_title)
.setView(text) .setView(text)
.create(); .create();
text.requestFocus(); text.requestFocus();
dialog.setOnShowListener(new OnShowListener() { dialog.setOnShowListener(new OnShowListener() {
@Override @Override
public void onShow(DialogInterface dialog) { public void onShow(DialogInterface dialog) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(text, 0); imm.showSoftInput(text, 0);
} }
}); });
dialog.show(); dialog.show();
} }
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) { switch(item.getItemId()) {
case R.id.action_settings: case R.id.action_settings:
@ -210,16 +210,16 @@ public abstract class BaseActivity extends Activity implements PanelSlideListene
} }
@Override @Override
public void onPanelClosed(View view) { public void onPanelClosed(View view) {
} }
@Override @Override
public void onPanelOpened(View view) { public void onPanelOpened(View view) {
} }
@Override @Override
public void onPanelSlide(View view, float offset) { public void onPanelSlide(View view, float offset) {
} }
/** /**
* Set the url that Android Beam and the share action will send. * Set the url that Android Beam and the share action will send.
@ -242,10 +242,10 @@ public abstract class BaseActivity extends Activity implements PanelSlideListene
} }
if (shareActionProvider != null) { if (shareActionProvider != null) {
Intent share = new Intent(android.content.Intent.ACTION_SEND); Intent share = new Intent(android.content.Intent.ACTION_SEND);
share.putExtra(android.content.Intent.EXTRA_TEXT, url); share.putExtra(android.content.Intent.EXTRA_TEXT, url);
share.setType("text/plain"); share.setType("text/plain");
shareActionProvider.setShareIntent(share); shareActionProvider.setShareIntent(share);
} }
} }

@ -28,8 +28,8 @@ import android.view.View;
import android.widget.ArrayAdapter; import android.widget.ArrayAdapter;
public class BoardActivity extends BaseActivity implements ActionBar.OnNavigationListener { public class BoardActivity extends BaseActivity implements ActionBar.OnNavigationListener {
private Loadable boardLoadable = new Loadable(); private Loadable boardLoadable = new Loadable();
private Loadable threadLoadable = new Loadable(); private Loadable threadLoadable = new Loadable();
private ThreadFragment boardFragment; private ThreadFragment boardFragment;
private ThreadFragment threadFragment; private ThreadFragment threadFragment;
private boolean boardSetByIntent = false; private boolean boardSetByIntent = false;
@ -86,7 +86,7 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio
@Override @Override
protected void initDrawer() { protected void initDrawer() {
pinDrawerListener = new ActionBarDrawerToggle(this, pinDrawer, pinDrawerListener = new ActionBarDrawerToggle(this, pinDrawer,
R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) {}; R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) {};
super.initDrawer(); super.initDrawer();
} }
@ -104,13 +104,13 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio
} }
@Override @Override
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu); super.onCreateOptionsMenu(menu);
return true; return true;
} }
@Override @Override
public void onConfigurationChanged(Configuration newConfig) { public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig); super.onConfigurationChanged(newConfig);
pinDrawerListener.onConfigurationChanged(newConfig); pinDrawerListener.onConfigurationChanged(newConfig);
@ -118,14 +118,14 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio
@Override @Override
public void openPin(Pin pin) { public void openPin(Pin pin) {
startLoadingThread(pin.loadable); startLoadingThread(pin.loadable);
pinDrawer.closeDrawer(pinDrawerView); pinDrawer.closeDrawer(pinDrawerView);
} }
@Override @Override
public void onOPClicked(Post post) { public void onOPClicked(Post post) {
startLoadingThread(new Loadable(post.board, post.no, post.subject)); startLoadingThread(new Loadable(post.board, post.no, post.subject));
} }
@Override @Override
@ -136,127 +136,127 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio
@Override @Override
public void onBackPressed() { public void onBackPressed() {
if (threadPane.isOpen()) { if (threadPane.isOpen()) {
super.onBackPressed(); super.onBackPressed();
} else { } else {
threadPane.openPane(); threadPane.openPane();
} }
} }
private void updateActionBarState() { private void updateActionBarState() {
final ActionBar actionBar = getActionBar(); final ActionBar actionBar = getActionBar();
if (threadPane.isSlideable()) { if (threadPane.isSlideable()) {
if (threadPane.isOpen()) { if (threadPane.isOpen()) {
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
actionBar.setHomeButtonEnabled(true); actionBar.setHomeButtonEnabled(true);
actionBar.setTitle(""); actionBar.setTitle("");
pinDrawerListener.setDrawerIndicatorEnabled(true); pinDrawerListener.setDrawerIndicatorEnabled(true);
} else { } else {
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
actionBar.setTitle(threadLoadable.title); actionBar.setTitle(threadLoadable.title);
pinDrawerListener.setDrawerIndicatorEnabled(false); pinDrawerListener.setDrawerIndicatorEnabled(false);
} }
actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setDisplayHomeAsUpEnabled(true);
} else { } else {
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
pinDrawerListener.setDrawerIndicatorEnabled(true); pinDrawerListener.setDrawerIndicatorEnabled(true);
actionBar.setTitle(threadLoadable.title); actionBar.setTitle(threadLoadable.title);
actionBar.setDisplayHomeAsUpEnabled(false); actionBar.setDisplayHomeAsUpEnabled(false);
} }
actionBar.setDisplayShowTitleEnabled(true); actionBar.setDisplayShowTitleEnabled(true);
invalidateOptionsMenu(); invalidateOptionsMenu();
} }
@Override @Override
public boolean onPrepareOptionsMenu(Menu menu) { public boolean onPrepareOptionsMenu(Menu menu) {
boolean open = threadPane.isOpen(); boolean open = threadPane.isOpen();
setMenuItemEnabled(menu.findItem(R.id.action_pin), !open); setMenuItemEnabled(menu.findItem(R.id.action_pin), !open);
return super.onPrepareOptionsMenu(menu); return super.onPrepareOptionsMenu(menu);
} }
private void setMenuItemEnabled(MenuItem item, boolean enabled) { private void setMenuItemEnabled(MenuItem item, boolean enabled) {
if (item != null) { if (item != null) {
item.setVisible(enabled); item.setVisible(enabled);
item.setEnabled(enabled); item.setEnabled(enabled);
} }
} }
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
if (pinDrawerListener.onOptionsItemSelected(item)) { if (pinDrawerListener.onOptionsItemSelected(item)) {
return true; return true;
} }
switch(item.getItemId()) { switch(item.getItemId()) {
case R.id.action_reload: case R.id.action_reload:
if (threadPane.isOpen()) { if (threadPane.isOpen()) {
boardFragment.reload(); boardFragment.reload();
} else { } else {
if (threadFragment.getThreadManager().hasThread()) { if (threadFragment.getThreadManager().hasThread()) {
threadFragment.reload(); threadFragment.reload();
} }
} }
return true; return true;
case R.id.action_reply: case R.id.action_reply:
if (threadPane.isOpen()) { if (threadPane.isOpen()) {
boardFragment.getThreadManager().openReply(true); // todo if tablet boardFragment.getThreadManager().openReply(true); // todo if tablet
} else { } else {
if (threadFragment.getThreadManager().hasThread()) { if (threadFragment.getThreadManager().hasThread()) {
threadFragment.getThreadManager().openReply(true); // todo if tablet threadFragment.getThreadManager().openReply(true); // todo if tablet
} }
} }
return true; return true;
case R.id.action_pin: case R.id.action_pin:
if (threadFragment.getThreadManager().hasThread()) { if (threadFragment.getThreadManager().hasThread()) {
Pin pin = new Pin(); Pin pin = new Pin();
pin.loadable = threadLoadable; pin.loadable = threadLoadable;
addPin(pin); addPin(pin);
pinDrawer.openDrawer(pinDrawerView); pinDrawer.openDrawer(pinDrawerView);
} }
return true; return true;
case R.id.action_open_browser: case R.id.action_open_browser:
if (threadPane.isOpen()) { if (threadPane.isOpen()) {
showUrlOpenPicker(ChanUrls.getBoardUrlDesktop(boardLoadable.board)); showUrlOpenPicker(ChanUrls.getBoardUrlDesktop(boardLoadable.board));
} else { } else {
if (threadFragment.getThreadManager().hasThread()) { if (threadFragment.getThreadManager().hasThread()) {
showUrlOpenPicker(ChanUrls.getThreadUrlDesktop(threadLoadable.board, threadLoadable.no)); showUrlOpenPicker(ChanUrls.getThreadUrlDesktop(threadLoadable.board, threadLoadable.no));
} }
} }
return true; return true;
case android.R.id.home: case android.R.id.home:
threadPane.openPane(); threadPane.openPane();
return true; return true;
} }
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
} }
@Override @Override
public void onPanelClosed(View view) { public void onPanelClosed(View view) {
updateActionBarState(); updateActionBarState();
} }
@Override @Override
public void onPanelOpened(View view) { public void onPanelOpened(View view) {
updateActionBarState(); updateActionBarState();
} }
private void startLoadingBoard(Loadable loadable) { private void startLoadingBoard(Loadable loadable) {
this.boardLoadable = loadable; this.boardLoadable = loadable;
boardFragment.startLoading(loadable); boardFragment.startLoading(loadable);
setShareUrl(ChanUrls.getBoardUrlDesktop(loadable.board)); setShareUrl(ChanUrls.getBoardUrlDesktop(loadable.board));
@ -264,7 +264,7 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio
} }
private void startLoadingThread(Loadable loadable) { private void startLoadingThread(Loadable loadable) {
Pin pin = PinnedManager.getInstance().findPinByLoadable(loadable); Pin pin = PinnedManager.getInstance().findPinByLoadable(loadable);
if (pin != null) { if (pin != null) {
// Use the loadable from the pin. // Use the loadable from the pin.
// This way we can store the listview position in the pin loadable, // This way we can store the listview position in the pin loadable,

@ -51,7 +51,7 @@ public class BoardEditor extends Activity {
// For runtime changes // For runtime changes
if (list.size() > 0) { if (list.size() > 0) {
BoardManager.getInstance().setMyBoards((ArrayList<Board>) list.clone()); BoardManager.getInstance().setMyBoards((ArrayList<Board>) list.clone());
} }
} }
@ -65,7 +65,7 @@ public class BoardEditor extends Activity {
} }
private void addBoard(String value) { private void addBoard(String value) {
BoardManager.getInstance().addBoard(list, value); BoardManager.getInstance().addBoard(list, value);
adapter = new BoardEditAdapter(this, R.layout.board_view, list, this); adapter = new BoardEditAdapter(this, R.layout.board_view, list, this);
listView.setArrayList(list); listView.setArrayList(list);

@ -14,21 +14,21 @@ import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
public class CatalogActivity extends BaseActivity { public class CatalogActivity extends BaseActivity {
private final Loadable loadable = new Loadable(); private final Loadable loadable = new Loadable();
private ThreadFragment threadFragment; private ThreadFragment threadFragment;
@Override @Override
public void onOPClicked(Post post) { public void onOPClicked(Post post) {
} }
@Override @Override
public void openPin(Pin post) { public void openPin(Pin post) {
} }
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -66,7 +66,7 @@ public class CatalogActivity extends BaseActivity {
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) { switch(item.getItemId()) {
case R.id.action_reload: case R.id.action_reload:
threadFragment.reload(); threadFragment.reload();
return true; return true;
case R.id.action_open_browser: case R.id.action_open_browser:

@ -7,25 +7,25 @@ import android.widget.Button;
import android.widget.LinearLayout; import android.widget.LinearLayout;
public class DeveloperActivity extends Activity { public class DeveloperActivity extends Activity {
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
LinearLayout wrapper = new LinearLayout(this); LinearLayout wrapper = new LinearLayout(this);
Button button = new Button(this); Button button = new Button(this);
button.setOnClickListener(new View.OnClickListener() { button.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
@SuppressWarnings("unused") @SuppressWarnings("unused")
int i = 1 / 0; int i = 1 / 0;
} }
}); });
button.setText("Crash the app"); button.setText("Crash the app");
wrapper.addView(button); wrapper.addView(button);
setContentView(wrapper); setContentView(wrapper);
} }
} }

@ -10,39 +10,39 @@ import android.util.Log;
import android.view.MenuItem; import android.view.MenuItem;
public class ReplyActivity extends Activity { public class ReplyActivity extends Activity {
private static Loadable loadable; private static Loadable loadable;
public static void setLoadable(Loadable l) { public static void setLoadable(Loadable l) {
loadable = l; loadable = l;
} }
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
if (loadable != null) { if (loadable != null) {
getActionBar().setDisplayHomeAsUpEnabled(true); getActionBar().setDisplayHomeAsUpEnabled(true);
FragmentTransaction ft = getFragmentManager().beginTransaction(); FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(android.R.id.content, ReplyFragment.newInstance(loadable)); ft.replace(android.R.id.content, ReplyFragment.newInstance(loadable));
ft.commitAllowingStateLoss(); ft.commitAllowingStateLoss();
loadable = null; loadable = null;
} else { } else {
Log.e("Chan", "ThreadFragment was null, exiting!"); Log.e("Chan", "ThreadFragment was null, exiting!");
finish(); finish();
} }
} }
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) { switch(item.getItemId()) {
case android.R.id.home: case android.R.id.home:
finish(); finish();
return true; return true;
} }
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
} }
} }

@ -79,14 +79,14 @@ public class PinnedAdapter extends ArrayAdapter<Pin> {
Pin item = getItem(position); Pin item = getItem(position);
if (item == null) { if (item == null) {
return -1; return -1;
} else { } else {
Integer i = idMap.get(item); Integer i = idMap.get(item);
if (i == null) { if (i == null) {
return -1; return -1;
} else { } else {
return i; return i;
} }
} }
} }
} }

@ -15,40 +15,40 @@ import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.table.TableUtils; import com.j256.ormlite.table.TableUtils;
public class DatabaseHelper extends OrmLiteSqliteOpenHelper { public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
private static final String DATABASE_NAME = "ChanDB"; private static final String DATABASE_NAME = "ChanDB";
private static final int DATABASE_VERSION = 1; private static final int DATABASE_VERSION = 1;
public Dao<Pin, Integer> pinDao; public Dao<Pin, Integer> pinDao;
public Dao<Loadable, Integer> loadableDao; public Dao<Loadable, Integer> loadableDao;
public DatabaseHelper(Context context) { public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION); super(context, DATABASE_NAME, null, DATABASE_VERSION);
try { try {
pinDao = getDao(Pin.class); pinDao = getDao(Pin.class);
loadableDao = getDao(Loadable.class); loadableDao = getDao(Loadable.class);
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
@Override @Override
public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) { public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) {
try { try {
TableUtils.createTable(connectionSource, Pin.class); TableUtils.createTable(connectionSource, Pin.class);
TableUtils.createTable(connectionSource, Loadable.class); TableUtils.createTable(connectionSource, Loadable.class);
} catch (SQLException e) { } catch (SQLException e) {
Logger.e("Error creating db", e); Logger.e("Error creating db", e);
throw new RuntimeException(e); throw new RuntimeException(e);
} }
} }
@Override @Override
public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) { public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) {
switch(oldVersion) { switch(oldVersion) {
// Change tables if we make adjustments // Change tables if we make adjustments
} }
} }
} }

@ -9,58 +9,58 @@ import org.floens.chan.utils.Logger;
import android.content.Context; import android.content.Context;
public class DatabaseManager { public class DatabaseManager {
private static DatabaseManager instance; private static DatabaseManager instance;
private final DatabaseHelper helper; private final DatabaseHelper helper;
public DatabaseManager(Context context) { public DatabaseManager(Context context) {
instance = this; instance = this;
helper = new DatabaseHelper(context); helper = new DatabaseHelper(context);
} }
public static DatabaseManager getInstance() { public static DatabaseManager getInstance() {
return instance; return instance;
} }
public void addPin(Pin pin) { public void addPin(Pin pin) {
try { try {
helper.loadableDao.create(pin.loadable); helper.loadableDao.create(pin.loadable);
helper.pinDao.create(pin); helper.pinDao.create(pin);
} catch (SQLException e) { } catch (SQLException e) {
Logger.e("Error adding pin to db", e); Logger.e("Error adding pin to db", e);
} }
} }
public void removePin(Pin pin) { public void removePin(Pin pin) {
try { try {
helper.pinDao.delete(pin); helper.pinDao.delete(pin);
helper.loadableDao.delete(pin.loadable); helper.loadableDao.delete(pin.loadable);
} catch (SQLException e) { } catch (SQLException e) {
Logger.e("Error removing pin from db", e); Logger.e("Error removing pin from db", e);
} }
} }
public void updatePin(Pin pin) { public void updatePin(Pin pin) {
try { try {
helper.pinDao.update(pin); helper.pinDao.update(pin);
helper.loadableDao.update(pin.loadable); helper.loadableDao.update(pin.loadable);
} catch (SQLException e) { } catch (SQLException e) {
Logger.e("Error updating pin in db", e); Logger.e("Error updating pin in db", e);
} }
} }
public List<Pin> getPinned() { public List<Pin> getPinned() {
List<Pin> list = null; List<Pin> list = null;
try { try {
list = helper.pinDao.queryForAll(); list = helper.pinDao.queryForAll();
for (Pin p : list) { for (Pin p : list) {
helper.loadableDao.refresh(p.loadable); helper.loadableDao.refresh(p.loadable);
} }
} catch (SQLException e) { } catch (SQLException e) {
Logger.e("Error getting pins from db", e); Logger.e("Error getting pins from db", e);
} }
return list; return list;
} }
} }

@ -37,8 +37,8 @@ public class PostRepliesFragment extends DialogFragment {
} }
public void dismissNoCallback() { public void dismissNoCallback() {
callback = false; callback = false;
dismiss(); dismiss();
} }
@Override @Override
@ -50,11 +50,11 @@ public class PostRepliesFragment extends DialogFragment {
@Override @Override
public void onDismiss(DialogInterface dialog) { public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog); super.onDismiss(dialog);
if (callback && manager != null) { if (callback && manager != null) {
manager.onPostRepliesPop(); manager.onPostRepliesPop();
} }
} }
@Override @Override
@ -66,19 +66,19 @@ public class PostRepliesFragment extends DialogFragment {
listView = (ListView) container.findViewById(R.id.post_list); listView = (ListView) container.findViewById(R.id.post_list);
container.findViewById(R.id.replies_back).setOnClickListener(new View.OnClickListener() { container.findViewById(R.id.replies_back).setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
dismiss(); dismiss();
} }
}); });
container.findViewById(R.id.replies_close).setOnClickListener(new View.OnClickListener() { container.findViewById(R.id.replies_close).setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
manager.closeAllPostFragments(); manager.closeAllPostFragments();
dismiss(); dismiss();
} }
}); });
return container; return container;
} }
@ -88,27 +88,27 @@ public class PostRepliesFragment extends DialogFragment {
super.onActivityCreated(savedInstanceState); super.onActivityCreated(savedInstanceState);
if (posts == null) { if (posts == null) {
// Restoring from background. // Restoring from background.
dismiss(); dismiss();
} else { } else {
ArrayAdapter<Post> adapter = new ArrayAdapter<Post>(getActivity(), 0) { ArrayAdapter<Post> adapter = new ArrayAdapter<Post>(getActivity(), 0) {
@Override @Override
public View getView(int position, View convertView, ViewGroup parent) { public View getView(int position, View convertView, ViewGroup parent) {
PostView postView = null; PostView postView = null;
if (convertView instanceof PostView) { if (convertView instanceof PostView) {
postView = (PostView) convertView; postView = (PostView) convertView;
} else { } else {
postView = new PostView(getActivity()); postView = new PostView(getActivity());
} }
postView.setPost(getItem(position), manager); postView.setPost(getItem(position), manager);
return postView; return postView;
} }
}; };
adapter.addAll(posts); adapter.addAll(posts);
listView.setAdapter(adapter); listView.setAdapter(adapter);
} }
} }
} }

@ -78,9 +78,9 @@ public class ReplyFragment extends DialogFragment {
@Override @Override
public void onSaveInstanceState(Bundle outState) { public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState); super.onSaveInstanceState(outState);
loadable.writeToBundle(getActivity(), outState); loadable.writeToBundle(getActivity(), outState);
} }
@Override @Override
@ -88,46 +88,46 @@ public class ReplyFragment extends DialogFragment {
super.onActivityCreated(savedInstanceState); super.onActivityCreated(savedInstanceState);
if (loadable == null && savedInstanceState != null) { if (loadable == null && savedInstanceState != null) {
loadable = new Loadable(); loadable = new Loadable();
loadable.readFromBundle(getActivity(), savedInstanceState); loadable.readFromBundle(getActivity(), savedInstanceState);
} }
if (loadable != null) { if (loadable != null) {
setClosable(true); setClosable(true);
Dialog dialog = getDialog(); Dialog dialog = getDialog();
Context context = getActivity(); Context context = getActivity();
String title = loadable.isThreadMode() ? String title = loadable.isThreadMode() ?
context.getString(R.string.reply) + " /" + loadable.board + "/" + loadable.no : context.getString(R.string.reply) + " /" + loadable.board + "/" + loadable.no :
context.getString(R.string.reply_to_board) + " /" + loadable.board + "/"; context.getString(R.string.reply_to_board) + " /" + loadable.board + "/";
if (dialog == null) { if (dialog == null) {
getActivity().getActionBar().setTitle(title); getActivity().getActionBar().setTitle(title);
} else { } else {
dialog.setTitle(title); dialog.setTitle(title);
} }
if (getDialog() != null) { if (getDialog() != null) {
getDialog().setOnKeyListener(new Dialog.OnKeyListener() { getDialog().setOnKeyListener(new Dialog.OnKeyListener() {
@Override @Override
public boolean onKey(DialogInterface dialogInterface, int keyCode, KeyEvent event) { public boolean onKey(DialogInterface dialogInterface, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) { if (keyCode == KeyEvent.KEYCODE_BACK) {
if (page == 1) flipPage(0); if (page == 1) flipPage(0);
else if (page == 2) closeReply(); else if (page == 2) closeReply();
return true; return true;
} else return false; } else return false;
} }
}); });
} }
Reply draft = ReplyManager.getInstance().getReplyDraft(); Reply draft = ReplyManager.getInstance().getReplyDraft();
if (TextUtils.isEmpty(draft.name)) { if (TextUtils.isEmpty(draft.name)) {
draft.name = ChanPreferences.getDefaultName(); draft.name = ChanPreferences.getDefaultName();
} }
if (TextUtils.isEmpty(draft.email)) { if (TextUtils.isEmpty(draft.email)) {
draft.email = ChanPreferences.getDefaultEmail(); draft.email = ChanPreferences.getDefaultEmail();
} }
nameView.setText(draft.name); nameView.setText(draft.name);
@ -138,18 +138,18 @@ public class ReplyFragment extends DialogFragment {
getCaptcha(); getCaptcha();
} else { } else {
Log.e("Chan", "Loadable in ReplyFragment was null"); Log.e("Chan", "Loadable in ReplyFragment was null");
closeReply(); closeReply();
} }
} }
@Override @Override
public void onPause() { public void onPause() {
super.onPause(); super.onPause();
ReplyManager replyManager = ReplyManager.getInstance(); ReplyManager replyManager = ReplyManager.getInstance();
if (shouldSaveDraft) { if (shouldSaveDraft) {
draft.name = nameView.getText().toString(); draft.name = nameView.getText().toString();
draft.email = emailView.getText().toString(); draft.email = emailView.getText().toString();
draft.subject = subjectView.getText().toString(); draft.subject = subjectView.getText().toString();
@ -164,10 +164,10 @@ public class ReplyFragment extends DialogFragment {
@Override @Override
public void onDestroy() { public void onDestroy() {
super.onDestroy(); super.onDestroy();
ReplyManager replyManager = ReplyManager.getInstance(); ReplyManager replyManager = ReplyManager.getInstance();
replyManager.removeFileListener(); replyManager.removeFileListener();
} }
@Override @Override
@ -246,21 +246,21 @@ public class ReplyFragment extends DialogFragment {
} }
private void closeReply() { private void closeReply() {
if (getDialog() != null) { if (getDialog() != null) {
dismiss(); dismiss();
} else { } else {
getActivity().finish(); getActivity().finish();
} }
} }
/** /**
* Set if the dialog is able to be closed, by pressing outside of the dialog, or something else. * Set if the dialog is able to be closed, by pressing outside of the dialog, or something else.
*/ */
private void setClosable(boolean e) { private void setClosable(boolean e) {
if (getDialog() != null) { if (getDialog() != null) {
getDialog().setCanceledOnTouchOutside(e); getDialog().setCanceledOnTouchOutside(e);
setCancelable(e); setCancelable(e);
} }
} }
/** /**

@ -49,7 +49,7 @@ public class SettingsFragment extends PreferenceFragment {
updateDeveloperPreference(); updateDeveloperPreference();
Toast.makeText(getActivity(), Toast.makeText(getActivity(),
(enabled ? "Enabled " : "Disabled ") + "developer options", Toast.LENGTH_LONG).show(); (enabled ? "Enabled " : "Disabled ") + "developer options", Toast.LENGTH_LONG).show();
} }
return true; return true;
@ -73,10 +73,10 @@ public class SettingsFragment extends PreferenceFragment {
} }
private void updateDeveloperPreference() { private void updateDeveloperPreference() {
if (ChanPreferences.getDeveloper()) { if (ChanPreferences.getDeveloper()) {
((PreferenceGroup) findPreference("group_about")).addPreference(developerPreference); ((PreferenceGroup) findPreference("group_about")).addPreference(developerPreference);
} else { } else {
((PreferenceGroup) findPreference("group_about")).removePreference(developerPreference); ((PreferenceGroup) findPreference("group_about")).removePreference(developerPreference);
} }
} }
} }

@ -73,7 +73,7 @@ public class ThreadFragment extends Fragment implements ThreadListener {
} }
if (listView != null) { if (listView != null) {
listView.setOnScrollListener(null); listView.setOnScrollListener(null);
} }
} }
@ -110,11 +110,11 @@ public class ThreadFragment extends Fragment implements ThreadListener {
@Override @Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if (loadable != null) { if (loadable != null) {
loadable.listViewIndex = view.getFirstVisiblePosition(); loadable.listViewIndex = view.getFirstVisiblePosition();
View v = view.getChildAt(0); View v = view.getChildAt(0);
loadable.listViewTop = (v == null) ? 0 : v.getTop(); loadable.listViewTop = (v == null) ? 0 : v.getTop();
} }
} }
}); });
} }
@ -140,7 +140,7 @@ public class ThreadFragment extends Fragment implements ThreadListener {
@Override @Override
public void onPostClicked(Post post) { public void onPostClicked(Post post) {
baseActivity.onOPClicked(post); baseActivity.onOPClicked(post);
} }
@Override @Override

@ -118,15 +118,15 @@ public class ImageViewFragment extends Fragment implements View.OnLongClickListe
return false; return false;
} }
@Override @Override
public void onViewTap(View view, float x, float y) { public void onViewTap(View view, float x, float y) {
activity.finish(); activity.finish();
} }
@Override @Override
public void onClick(View v) { public void onClick(View v) {
activity.finish(); activity.finish();
} }
} }

@ -36,7 +36,7 @@ public class NetworkPhotoView extends NetworkImageView {
} }
public void setOnViewTapListenerToAttacher(OnViewTapListener listener) { public void setOnViewTapListenerToAttacher(OnViewTapListener listener) {
viewTapListener = listener; viewTapListener = listener;
} }
@Override @Override

@ -17,8 +17,8 @@ import com.android.volley.Response;
import com.android.volley.VolleyError; import com.android.volley.VolleyError;
public class BoardManager { public class BoardManager {
private static BoardManager instance; private static BoardManager instance;
private final Context context; private final Context context;
// Including nsfw ones // Including nsfw ones
private ArrayList<Board> allBoards = new ArrayList<Board>(); private ArrayList<Board> allBoards = new ArrayList<Board>();
@ -28,8 +28,8 @@ public class BoardManager {
private final ArrayList<String> myBoardsValues = new ArrayList<String>(); private final ArrayList<String> myBoardsValues = new ArrayList<String>();
public BoardManager(Context context) { public BoardManager(Context context) {
instance = this; instance = this;
this.context = context; this.context = context;
loadFromServer(); loadFromServer();
@ -38,7 +38,7 @@ public class BoardManager {
} }
public static BoardManager getInstance() { public static BoardManager getInstance() {
return instance; return instance;
} }
/** /**

@ -10,20 +10,20 @@ import org.floens.chan.model.Pin;
import android.content.Context; import android.content.Context;
public class PinnedManager { public class PinnedManager {
private static PinnedManager instance; private static PinnedManager instance;
private final Context context; private final Context context;
private final List<Pin> pins; private final List<Pin> pins;
public PinnedManager(Context context) { public PinnedManager(Context context) {
instance = this; instance = this;
this.context = context; this.context = context;
pins = DatabaseManager.getInstance().getPinned(); pins = DatabaseManager.getInstance().getPinned();
} }
public static PinnedManager getInstance() { public static PinnedManager getInstance() {
return instance; return instance;
} }
public PinnedAdapter getAdapter() { public PinnedAdapter getAdapter() {
@ -56,23 +56,23 @@ public class PinnedManager {
public boolean add(Pin pin) { public boolean add(Pin pin) {
// No duplicates // No duplicates
for (Pin e : pins) { for (Pin e : pins) {
if (e.loadable.equals(pin.loadable)) { if (e.loadable.equals(pin.loadable)) {
return false; return false;
} }
} }
pins.add(pin); pins.add(pin);
DatabaseManager.getInstance().addPin(pin); DatabaseManager.getInstance().addPin(pin);
return true; return true;
} }
public void remove(Pin pin) { public void remove(Pin pin) {
pins.remove(pin); pins.remove(pin);
DatabaseManager.getInstance().removePin(pin); DatabaseManager.getInstance().removePin(pin);
} }
public void update(Pin pin) { public void update(Pin pin) {
DatabaseManager.getInstance().updatePin(pin); DatabaseManager.getInstance().updatePin(pin);
} }
} }

@ -65,7 +65,7 @@ public class ThreadManager {
} }
public boolean hasThread() { public boolean hasThread() {
return loadable != null; return loadable != null;
} }
public Post findPostById(int id) { public Post findPostById(int id) {
@ -118,9 +118,9 @@ public class ThreadManager {
} }
public void onPostClicked(Post post) { public void onPostClicked(Post post) {
if (loadable.isBoardMode()) { if (loadable.isBoardMode()) {
threadListener.onPostClicked(post); threadListener.onPostClicked(post);
} }
} }
public void onPostLongClicked(final Post post) { public void onPostLongClicked(final Post post) {
@ -140,8 +140,8 @@ public class ThreadManager {
showPostInfo(post); showPostInfo(post);
break; break;
case 3: // Show clickables case 3: // Show clickables
showPostLinkables(post); showPostLinkables(post);
break; break;
case 4: // Copy text case 4: // Copy text
copyText(post.comment.toString()); copyText(post.comment.toString());
break; break;
@ -164,7 +164,7 @@ public class ThreadManager {
} }
public void onPostLinkableClicked(PostLinkable linkable) { public void onPostLinkableClicked(PostLinkable linkable) {
handleLinkableSelected(linkable); handleLinkableSelected(linkable);
} }
/** /**
@ -271,17 +271,17 @@ public class ThreadManager {
} }
public void showPostReplies(Post post) { public void showPostReplies(Post post) {
List<Post> p = new ArrayList<Post>(); List<Post> p = new ArrayList<Post>();
for (int no : post.repliesFrom) { for (int no : post.repliesFrom) {
Post r = findPostById(no); Post r = findPostById(no);
if (r != null) { if (r != null) {
p.add(r); p.add(r);
} }
} }
if (p.size() > 0) { if (p.size() > 0) {
showPostsReplies(p); showPostsReplies(p);
} }
} }
/** /**
@ -350,50 +350,50 @@ public class ThreadManager {
* @param linkable Linkable with an url. * @param linkable Linkable with an url.
*/ */
private void openLink(PostLinkable linkable) { private void openLink(PostLinkable linkable) {
activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(linkable.value))); activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(linkable.value)));
} }
private void showPostsReplies(List<Post> list) { private void showPostsReplies(List<Post> list) {
// Post popups are now queued up, more than 32 popups on top of each other makes the system crash! // Post popups are now queued up, more than 32 popups on top of each other makes the system crash!
popupQueue.add(list); popupQueue.add(list);
if (currentPopupFragment != null) { if (currentPopupFragment != null) {
currentPopupFragment.dismissNoCallback(); currentPopupFragment.dismissNoCallback();
} }
PostRepliesFragment popup = PostRepliesFragment.newInstance(list, this); PostRepliesFragment popup = PostRepliesFragment.newInstance(list, this);
FragmentTransaction ft = activity.getFragmentManager().beginTransaction(); FragmentTransaction ft = activity.getFragmentManager().beginTransaction();
ft.add(popup, "postPopup"); ft.add(popup, "postPopup");
ft.commit(); ft.commit();
currentPopupFragment = popup; currentPopupFragment = popup;
} }
public void onPostRepliesPop() { public void onPostRepliesPop() {
if (popupQueue.size() == 0) return; if (popupQueue.size() == 0) return;
popupQueue.remove(popupQueue.size() - 1); popupQueue.remove(popupQueue.size() - 1);
if (popupQueue.size() > 0) { if (popupQueue.size() > 0) {
PostRepliesFragment popup = PostRepliesFragment.newInstance(popupQueue.get(popupQueue.size() - 1), this); PostRepliesFragment popup = PostRepliesFragment.newInstance(popupQueue.get(popupQueue.size() - 1), this);
FragmentTransaction ft = activity.getFragmentManager().beginTransaction(); FragmentTransaction ft = activity.getFragmentManager().beginTransaction();
ft.add(popup, "postPopup"); ft.add(popup, "postPopup");
ft.commit(); ft.commit();
currentPopupFragment = popup; currentPopupFragment = popup;
} else { } else {
currentPopupFragment = null; currentPopupFragment = null;
} }
} }
public void closeAllPostFragments() { public void closeAllPostFragments() {
popupQueue.clear(); popupQueue.clear();
currentPopupFragment = null; currentPopupFragment = null;
} }
public interface ThreadListener { public interface ThreadListener {
public void onThreadLoaded(List<Post> result); public void onThreadLoaded(List<Post> result);
public void onThreadLoadError(VolleyError error); public void onThreadLoadError(VolleyError error);
public void onPostClicked(Post post); public void onPostClicked(Post post);

@ -11,25 +11,25 @@ import com.j256.ormlite.table.DatabaseTable;
*/ */
@DatabaseTable @DatabaseTable
public class Loadable { public class Loadable {
@DatabaseField(generatedId = true) @DatabaseField(generatedId = true)
private int id; private int id;
@DatabaseField @DatabaseField
public int mode = Mode.INVALID; public int mode = Mode.INVALID;
@DatabaseField @DatabaseField
public String board = ""; public String board = "";
@DatabaseField @DatabaseField
public int no = -1; public int no = -1;
@DatabaseField @DatabaseField
public String title = ""; public String title = "";
@DatabaseField @DatabaseField
public int listViewIndex; public int listViewIndex;
@DatabaseField @DatabaseField
public int listViewTop; public int listViewTop;
/** /**
@ -97,7 +97,7 @@ public class Loadable {
} }
public boolean isCatalogMode() { public boolean isCatalogMode() {
return mode == Mode.CATALOG; return mode == Mode.CATALOG;
} }
public void readFromBundle(Context context, Bundle bundle) { public void readFromBundle(Context context, Bundle bundle) {

@ -5,9 +5,9 @@ import com.j256.ormlite.table.DatabaseTable;
@DatabaseTable @DatabaseTable
public class Pin { public class Pin {
@DatabaseField(generatedId = true) @DatabaseField(generatedId = true)
private int id; private int id;
public Type type = Type.THREAD; public Type type = Type.THREAD;
@DatabaseField(canBeNull = false, foreign = true) @DatabaseField(canBeNull = false, foreign = true)

@ -75,11 +75,11 @@ public class Post {
} }
public void setLinkableListener(PostView listener) { public void setLinkableListener(PostView listener) {
linkableListener = listener; linkableListener = listener;
} }
public PostView getLinkableListener() { public PostView getLinkableListener() {
return linkableListener; return linkableListener;
} }
/** /**
@ -144,24 +144,24 @@ public class Post {
String[] parts = text.split("\\s"); String[] parts = text.split("\\s");
for (String item : parts) { for (String item : parts) {
if (item.contains("://")) { if (item.contains("://")) {
try { try {
URL url = new URL(item); URL url = new URL(item);
SpannableString link = new SpannableString(url.toString()); SpannableString link = new SpannableString(url.toString());
// link.setSpan(new ForegroundColorSpan(Color.argb(255, 0, 0, 180)), 0, link.length(), 0); // link.setSpan(new ForegroundColorSpan(Color.argb(255, 0, 0, 180)), 0, link.length(), 0);
// linkables.add(new PostLinkable(this, item, item, PostLinkable.Type.LINK)); // linkables.add(new PostLinkable(this, item, item, PostLinkable.Type.LINK));
PostLinkable pl = new PostLinkable(this, item, item, PostLinkable.Type.LINK); PostLinkable pl = new PostLinkable(this, item, item, PostLinkable.Type.LINK);
link.setSpan(pl, 0, link.length(), 0); link.setSpan(pl, 0, link.length(), 0);
linkables.add(pl); linkables.add(pl);
total = TextUtils.concat(total, link, " "); total = TextUtils.concat(total, link, " ");
} catch(Exception e) { } catch(Exception e) {
total = TextUtils.concat(total, item, " "); total = TextUtils.concat(total, item, " ");
} }
} }
} }
} else { } else {
total = TextUtils.concat(total, text); total = TextUtils.concat(total, text);
@ -186,7 +186,7 @@ public class Post {
linkables.add(pl); linkables.add(pl);
if (t == Type.QUOTE) { if (t == Type.QUOTE) {
try { try {
// Get post id // Get post id
String[] splitted = anchor.attr("href").split("#p"); String[] splitted = anchor.attr("href").split("#p");
if (splitted.length == 2) { if (splitted.length == 2) {

@ -17,22 +17,22 @@ public class PostLinkable extends ClickableSpan {
public final Type type; public final Type type;
public PostLinkable(Post post, String key, String value, Type type) { public PostLinkable(Post post, String key, String value, Type type) {
this.post = post; this.post = post;
this.key = key; this.key = key;
this.value = value; this.value = value;
this.type = type; this.type = type;
} }
@Override @Override
public void onClick(View widget) { public void onClick(View widget) {
if (post.getLinkableListener() != null) { if (post.getLinkableListener() != null) {
post.getLinkableListener().onLinkableClick(this); post.getLinkableListener().onLinkableClick(this);
} }
} }
@Override @Override
public void updateDrawState(TextPaint ds) { public void updateDrawState(TextPaint ds) {
ds.setColor(type == Type.QUOTE ? Color.argb(255, 221, 0, 0) : Color.argb(255, 0, 0, 180)); ds.setColor(type == Type.QUOTE ? Color.argb(255, 221, 0, 0) : Color.argb(255, 0, 0, 180));
ds.setUnderlineText(true); ds.setUnderlineText(true);
} }
} }

@ -37,7 +37,7 @@ public class ChanReaderRequest extends JsonReaderRequest<ArrayList<Post>> {
} else if (loadable.isThreadMode()) { } else if (loadable.isThreadMode()) {
url = ChanUrls.getThreadUrl(loadable.board, loadable.no); url = ChanUrls.getThreadUrl(loadable.board, loadable.no);
} else if (loadable.isCatalogMode()) { } else if (loadable.isCatalogMode()) {
url = ChanUrls.getCatalogUrl(loadable.board); url = ChanUrls.getCatalogUrl(loadable.board);
} else { } else {
throw new IllegalArgumentException("Unknown mode"); throw new IllegalArgumentException("Unknown mode");
} }
@ -58,9 +58,9 @@ public class ChanReaderRequest extends JsonReaderRequest<ArrayList<Post>> {
if (loadable.isBoardMode()) { if (loadable.isBoardMode()) {
return loadBoard(reader); return loadBoard(reader);
} else if (loadable.isThreadMode()) { } else if (loadable.isThreadMode()) {
return loadThread(reader); return loadThread(reader);
} else if (loadable.isCatalogMode()) { } else if (loadable.isCatalogMode()) {
return loadCatalog(reader); return loadCatalog(reader);
} else { } else {
throw new IllegalArgumentException("Unknown mode"); throw new IllegalArgumentException("Unknown mode");
} }
@ -155,22 +155,22 @@ public class ChanReaderRequest extends JsonReaderRequest<ArrayList<Post>> {
reader.beginArray(); // Array of pages reader.beginArray(); // Array of pages
while (reader.hasNext()) { while (reader.hasNext()) {
reader.beginObject(); // Page object reader.beginObject(); // Page object
while (reader.hasNext()) { while (reader.hasNext()) {
if (reader.nextName().equals("threads")) { if (reader.nextName().equals("threads")) {
reader.beginArray(); // Threads array reader.beginArray(); // Threads array
while (reader.hasNext()) { while (reader.hasNext()) {
list.add(readPostObject(reader, loadable.board)); list.add(readPostObject(reader, loadable.board));
} }
reader.endArray(); reader.endArray();
} else { } else {
reader.skipValue(); reader.skipValue();
} }
} }
reader.endObject(); reader.endObject();
} }

@ -24,35 +24,35 @@ public class ChanUrls {
} }
public static String getImageUrl(String board, String code, String extension) { public static String getImageUrl(String board, String code, String extension) {
return "https://i.4cdn.org/" + board + "/src/" + code + "." + extension; return "https://i.4cdn.org/" + board + "/src/" + code + "." + extension;
} }
public static String getThumbnailUrl(String board, String code) { public static String getThumbnailUrl(String board, String code) {
return "https://t.4cdn.org/" + board + "/thumb/" + code + "s.jpg"; return "https://t.4cdn.org/" + board + "/thumb/" + code + "s.jpg";
} }
public static String getCountryFlagUrl(String countryCode) { public static String getCountryFlagUrl(String countryCode) {
return "https://s.4cdn.org/image/country/" + countryCode.toLowerCase(Locale.ENGLISH) + ".gif"; return "https://s.4cdn.org/image/country/" + countryCode.toLowerCase(Locale.ENGLISH) + ".gif";
} }
public static String getBoardsUrl() { public static String getBoardsUrl() {
return "https://a.4cdn.org/boards.json"; return "https://a.4cdn.org/boards.json";
} }
public static String getPostUrl(String board) { public static String getPostUrl(String board) {
return "https://sys.4chan.org/" + board + "/post"; return "https://sys.4chan.org/" + board + "/post";
// return "http://192.168.6.214/Testing/PostEchoer/post.php"; // return "http://192.168.6.214/Testing/PostEchoer/post.php";
} }
public static String getBoardUrlDesktop(String board) { public static String getBoardUrlDesktop(String board) {
return "https://boards.4chan.org/" + board + "/"; return "https://boards.4chan.org/" + board + "/";
} }
public static String getThreadUrlDesktop(String board, int no) { public static String getThreadUrlDesktop(String board, int no) {
return "https://boards.4chan.org/" + board + "/res/" + no; return "https://boards.4chan.org/" + board + "/res/" + no;
} }
public static String getCatalogUrlDesktop(String board) { public static String getCatalogUrlDesktop(String board) {
return "https://boards.4chan.org/" + board + "/catalog"; return "https://boards.4chan.org/" + board + "/catalog";
} }
} }

@ -107,13 +107,13 @@ public class ThreadLoader {
} }
private void processPosts(List<Post> posts) { private void processPosts(List<Post> posts) {
for (Post post : posts) { for (Post post : posts) {
postsById.append(post.no, post); postsById.append(post.no, post);
for (Post other : posts) { for (Post other : posts) {
if (other.repliesTo.contains(post.no)) { if (other.repliesTo.contains(post.no)) {
post.repliesFrom.add(other.no); post.repliesFrom.add(other.no);
} }
} }
} }
} }

@ -3,23 +3,23 @@ package org.floens.chan.utils;
import org.floens.chan.ChanApplication; import org.floens.chan.ChanApplication;
public class ChanPreferences { public class ChanPreferences {
public static boolean getOpenLinkConfirmation() { public static boolean getOpenLinkConfirmation() {
return ChanApplication.getPreferences().getBoolean("preference_open_link_confirmation", true); return ChanApplication.getPreferences().getBoolean("preference_open_link_confirmation", true);
} }
public static String getDefaultName() { public static String getDefaultName() {
return ChanApplication.getPreferences().getString("preference_default_name", ""); return ChanApplication.getPreferences().getString("preference_default_name", "");
} }
public static String getDefaultEmail() { public static String getDefaultEmail() {
return ChanApplication.getPreferences().getString("preference_default_email", ""); return ChanApplication.getPreferences().getString("preference_default_email", "");
} }
public static boolean getDeveloper() { public static boolean getDeveloper() {
return ChanApplication.getPreferences().getBoolean("preference_developer", false); return ChanApplication.getPreferences().getBoolean("preference_developer", false);
} }
public static void setDeveloper(boolean developer) { public static void setDeveloper(boolean developer) {
ChanApplication.getPreferences().edit().putBoolean("preference_developer", developer).commit(); ChanApplication.getPreferences().edit().putBoolean("preference_developer", developer).commit();
} }
} }

@ -9,28 +9,28 @@ import java.io.StringWriter;
import java.io.Writer; import java.io.Writer;
public class IOUtils { public class IOUtils {
public static String readString(InputStream is) { public static String readString(InputStream is) {
StringWriter sw = new StringWriter(); StringWriter sw = new StringWriter();
try { try {
copy(new InputStreamReader(is), sw); copy(new InputStreamReader(is), sw);
is.close(); is.close();
sw.close(); sw.close();
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
return sw.toString(); return sw.toString();
} }
/** /**
* Copies the inputstream to the outputstream and closes both streams. * Copies the inputstream to the outputstream and closes both streams.
* @param is * @param is
* @param os * @param os
* @throws IOException * @throws IOException
*/ */
public static void copy(InputStream is, OutputStream os) throws IOException { public static void copy(InputStream is, OutputStream os) throws IOException {
int read = 0; int read = 0;
byte[] buffer = new byte[4096]; byte[] buffer = new byte[4096];
while ((read = is.read(buffer)) != -1) { while ((read = is.read(buffer)) != -1) {
os.write(buffer, 0, read); os.write(buffer, 0, read);
@ -38,13 +38,13 @@ public class IOUtils {
is.close(); is.close();
os.close(); os.close();
} }
public static void copy(Reader input, Writer output) throws IOException { public static void copy(Reader input, Writer output) throws IOException {
char[] buffer = new char[4096]; char[] buffer = new char[4096];
int read = 0; int read = 0;
while ((read = input.read(buffer)) != -1) { while ((read = input.read(buffer)) != -1) {
output.write(buffer, 0, read); output.write(buffer, 0, read);
} }
} }
} }

@ -5,62 +5,62 @@ import org.floens.chan.ChanApplication;
import android.util.Log; import android.util.Log;
public class Logger { public class Logger {
public static final String TAG = "Chan"; public static final String TAG = "Chan";
public static final String TAG_TEST = "ChanTest"; public static final String TAG_TEST = "ChanTest";
public static void v(String message) { public static void v(String message) {
Log.v(TAG, message); Log.v(TAG, message);
} }
public static void v(String message, Throwable throwable) { public static void v(String message, Throwable throwable) {
Log.v(TAG, message, throwable); Log.v(TAG, message, throwable);
} }
public static void d(String message) { public static void d(String message) {
Log.d(TAG, message); Log.d(TAG, message);
} }
public static void d(String message, Throwable throwable) { public static void d(String message, Throwable throwable) {
Log.d(TAG, message, throwable); Log.d(TAG, message, throwable);
} }
public static void i(String message) { public static void i(String message) {
Log.i(TAG, message); Log.i(TAG, message);
} }
public static void i(String message, Throwable throwable) { public static void i(String message, Throwable throwable) {
Log.i(TAG, message, throwable); Log.i(TAG, message, throwable);
} }
public static void w(String message) { public static void w(String message) {
Log.w(TAG, message); Log.w(TAG, message);
} }
public static void w(String message, Throwable throwable) { public static void w(String message, Throwable throwable) {
Log.w(TAG, message, throwable); Log.w(TAG, message, throwable);
} }
public static void e(String message) { public static void e(String message) {
Log.e(TAG, message); Log.e(TAG, message);
} }
public static void e(String message, Throwable throwable) { public static void e(String message, Throwable throwable) {
Log.e(TAG, message, throwable); Log.e(TAG, message, throwable);
} }
public static void wtf(String message) { public static void wtf(String message) {
Log.wtf(TAG, message); Log.wtf(TAG, message);
} }
public static void wtf(String message, Throwable throwable) { public static void wtf(String message, Throwable throwable) {
Log.wtf(TAG, message, throwable); Log.wtf(TAG, message, throwable);
} }
public static void test(String message) { public static void test(String message) {
if (ChanApplication.DEVELOPER_MODE) { if (ChanApplication.DEVELOPER_MODE) {
Log.i(TAG_TEST, message); Log.i(TAG_TEST, message);
} }
} }
} }

@ -74,11 +74,11 @@ public class PostView extends LinearLayout implements View.OnClickListener, View
@Override @Override
protected void onDetachedFromWindow() { protected void onDetachedFromWindow() {
super.onDetachedFromWindow(); super.onDetachedFromWindow();
if (post != null) { if (post != null) {
post.setLinkableListener(null); post.setLinkableListener(null);
} }
} }
public void setPost(final Post post, final ThreadManager manager) { public void setPost(final Post post, final ThreadManager manager) {
@ -147,21 +147,21 @@ public class PostView extends LinearLayout implements View.OnClickListener, View
commentView.setText(post.comment); commentView.setText(post.comment);
commentView.setMovementMethod(LinkMovementMethod.getInstance()); commentView.setMovementMethod(LinkMovementMethod.getInstance());
commentView.setOnClickListener(new OnClickListener() { commentView.setOnClickListener(new OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
PostView.this.onClick(v); PostView.this.onClick(v);
} }
}); });
commentView.setOnLongClickListener(new OnLongClickListener() { commentView.setOnLongClickListener(new OnLongClickListener() {
@Override @Override
public boolean onLongClick(View v) { public boolean onLongClick(View v) {
return PostView.this.onLongClick(v); return PostView.this.onLongClick(v);
} }
}); });
if (manager.getLoadable().isThreadMode()) { if (manager.getLoadable().isThreadMode()) {
post.setLinkableListener(this); post.setLinkableListener(this);
} }
if (manager.getLoadable().isBoardMode()) { if (manager.getLoadable().isBoardMode()) {
@ -192,12 +192,12 @@ public class PostView extends LinearLayout implements View.OnClickListener, View
} }
if (manager.getLoadable().isThreadMode()) { if (manager.getLoadable().isThreadMode()) {
repliesCountView.setOnClickListener(new View.OnClickListener() { repliesCountView.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
manager.showPostReplies(post); manager.showPostReplies(post);
} }
}); });
} }
repliesCountView.setText(text); repliesCountView.setText(text);
@ -329,7 +329,7 @@ public class PostView extends LinearLayout implements View.OnClickListener, View
} }
public void onLinkableClick(PostLinkable linkable) { public void onLinkableClick(PostLinkable linkable) {
manager.onPostLinkableClicked(linkable); manager.onPostLinkableClicked(linkable);
} }
@Override @Override

Loading…
Cancel
Save