Format code with Android Studio

captchafix
Florens Douwes 11 years ago
parent 01070a006d
commit e65c0db0a4
  1. 39
      Clover/app/src/main/java/org/floens/chan/core/loader/Loader.java
  2. 4
      Clover/app/src/main/java/org/floens/chan/core/loader/LoaderPool.java
  3. 15
      Clover/app/src/main/java/org/floens/chan/core/manager/BoardManager.java
  4. 8
      Clover/app/src/main/java/org/floens/chan/core/manager/PinnedManager.java
  5. 47
      Clover/app/src/main/java/org/floens/chan/core/manager/ReplyManager.java
  6. 92
      Clover/app/src/main/java/org/floens/chan/core/manager/ThreadManager.java
  7. 14
      Clover/app/src/main/java/org/floens/chan/core/model/Pin.java
  8. 20
      Clover/app/src/main/java/org/floens/chan/core/model/Post.java
  9. 4
      Clover/app/src/main/java/org/floens/chan/core/model/PostLinkable.java
  10. 12
      Clover/app/src/main/java/org/floens/chan/core/net/BoardsRequest.java
  11. 29
      Clover/app/src/main/java/org/floens/chan/core/net/ChanReaderRequest.java
  12. 8
      Clover/app/src/main/java/org/floens/chan/core/net/FileRequest.java
  13. 4
      Clover/app/src/main/java/org/floens/chan/core/net/GIFRequest.java
  14. 10
      Clover/app/src/main/java/org/floens/chan/core/net/JsonReaderRequest.java
  15. 6
      Clover/app/src/main/java/org/floens/chan/core/watch/PinWatcher.java
  16. 22
      Clover/app/src/main/java/org/floens/chan/core/watch/WatchNotifier.java
  17. 2
      Clover/app/src/main/java/org/floens/chan/database/DatabaseHelper.java
  18. 14
      Clover/app/src/main/java/org/floens/chan/service/WatchService.java
  19. 94
      Clover/app/src/main/java/org/floens/chan/ui/ScrollerRunnable.java
  20. 255
      Clover/app/src/main/java/org/floens/chan/ui/SwipeDismissListViewTouchListener.java
  21. 37
      Clover/app/src/main/java/org/floens/chan/ui/activity/BaseActivity.java
  22. 115
      Clover/app/src/main/java/org/floens/chan/ui/activity/BoardActivity.java
  23. 39
      Clover/app/src/main/java/org/floens/chan/ui/activity/BoardEditor.java
  24. 4
      Clover/app/src/main/java/org/floens/chan/ui/activity/DeveloperActivity.java
  25. 18
      Clover/app/src/main/java/org/floens/chan/ui/activity/ImagePickActivity.java
  26. 26
      Clover/app/src/main/java/org/floens/chan/ui/activity/ImageViewActivity.java
  27. 16
      Clover/app/src/main/java/org/floens/chan/ui/activity/PassSettingsActivity.java
  28. 14
      Clover/app/src/main/java/org/floens/chan/ui/activity/ReplyActivity.java
  29. 4
      Clover/app/src/main/java/org/floens/chan/ui/activity/SettingsActivity.java
  30. 8
      Clover/app/src/main/java/org/floens/chan/ui/activity/WatchSettingsActivity.java
  31. 14
      Clover/app/src/main/java/org/floens/chan/ui/adapter/ImageViewAdapter.java
  32. 16
      Clover/app/src/main/java/org/floens/chan/ui/adapter/PinnedAdapter.java
  33. 20
      Clover/app/src/main/java/org/floens/chan/ui/adapter/PostAdapter.java
  34. 20
      Clover/app/src/main/java/org/floens/chan/ui/fragment/ImageViewFragment.java
  35. 14
      Clover/app/src/main/java/org/floens/chan/ui/fragment/PostRepliesFragment.java
  36. 44
      Clover/app/src/main/java/org/floens/chan/ui/fragment/ReplyFragment.java
  37. 8
      Clover/app/src/main/java/org/floens/chan/ui/fragment/SettingsFragment.java
  38. 28
      Clover/app/src/main/java/org/floens/chan/ui/fragment/ThreadFragment.java
  39. 36
      Clover/app/src/main/java/org/floens/chan/ui/view/CustomNetworkImageView.java
  40. 8
      Clover/app/src/main/java/org/floens/chan/ui/view/DragGripView.java
  41. 7
      Clover/app/src/main/java/org/floens/chan/ui/view/LoadView.java
  42. 11
      Clover/app/src/main/java/org/floens/chan/ui/view/NetworkPhotoView.java
  43. 20
      Clover/app/src/main/java/org/floens/chan/ui/view/PostView.java
  44. 8
      Clover/app/src/main/java/org/floens/chan/ui/view/ThreadWatchCounterView.java
  45. 29
      Clover/app/src/main/java/org/floens/chan/ui/view/ThumbnailImageView.java
  46. 4
      Clover/app/src/main/java/org/floens/chan/utils/IconCache.java
  47. 6
      Clover/app/src/main/java/org/floens/chan/utils/ImageDecoder.java
  48. 29
      Clover/app/src/main/java/org/floens/chan/utils/ImageSaver.java
  49. 4
      Clover/app/src/main/java/org/floens/chan/utils/Logger.java
  50. 12
      Clover/app/src/main/java/org/floens/chan/utils/Utils.java

@ -17,8 +17,13 @@
*/ */
package org.floens.chan.core.loader; package org.floens.chan.core.loader;
import java.util.ArrayList; import android.os.Handler;
import java.util.List; import android.os.Looper;
import android.util.SparseArray;
import com.android.volley.Response;
import com.android.volley.ServerError;
import com.android.volley.VolleyError;
import org.floens.chan.ChanApplication; import org.floens.chan.ChanApplication;
import org.floens.chan.core.model.Loadable; import org.floens.chan.core.model.Loadable;
@ -27,19 +32,14 @@ import org.floens.chan.core.net.ChanReaderRequest;
import org.floens.chan.utils.Logger; import org.floens.chan.utils.Logger;
import org.floens.chan.utils.Time; import org.floens.chan.utils.Time;
import android.os.Handler; import java.util.ArrayList;
import android.os.Looper; import java.util.List;
import android.util.SparseArray;
import com.android.volley.Response;
import com.android.volley.ServerError;
import com.android.volley.VolleyError;
public class Loader { public class Loader {
private static final String TAG = "Loader"; private static final String TAG = "Loader";
private static final Handler handler = new Handler(Looper.getMainLooper()); private static final Handler handler = new Handler(Looper.getMainLooper());
private static final int[] watchTimeouts = { 10, 15, 20, 30, 60, 90, 120, 180, 240, 300, 600, 1800, 3600 }; private static final int[] watchTimeouts = {10, 15, 20, 30, 60, 90, 120, 180, 240, 300, 600, 1800, 3600};
private final List<LoaderListener> listeners = new ArrayList<LoaderListener>(); private final List<LoaderListener> listeners = new ArrayList<LoaderListener>();
private final Loadable loadable; private final Loadable loadable;
@ -61,9 +61,8 @@ public class Loader {
/** /**
* Add a LoaderListener * Add a LoaderListener
* *
* @param l * @param l the listener to add
* the listener to add
*/ */
public void addListener(LoaderListener l) { public void addListener(LoaderListener l) {
listeners.add(l); listeners.add(l);
@ -71,9 +70,8 @@ public class Loader {
/** /**
* Remove a LoaderListener * Remove a LoaderListener
* *
* @param l * @param l the listener to remove
* the listener to remove
* @return true if there are no more listeners, false otherwise * @return true if there are no more listeners, false otherwise
*/ */
public boolean removeListener(LoaderListener l) { public boolean removeListener(LoaderListener l) {
@ -183,7 +181,7 @@ public class Loader {
/** /**
* Get the time in milliseconds until another loadMore is recommended * Get the time in milliseconds until another loadMore is recommended
* *
* @return * @return
*/ */
public long getTimeUntilLoadMore() { public long getTimeUntilLoadMore() {
@ -223,7 +221,9 @@ public class Loader {
public void run() { public void run() {
pendingRunnable = null; pendingRunnable = null;
loadMoreIfTime(); loadMoreIfTime();
}; }
;
}; };
Logger.d(TAG, "Scheduled reload in " + watchTimeouts[currentTimeout] * 1000L); Logger.d(TAG, "Scheduled reload in " + watchTimeouts[currentTimeout] * 1000L);
@ -255,7 +255,8 @@ public class Loader {
Loader.this.request = null; Loader.this.request = null;
onError(error); onError(error);
} }
}); }
);
ChanApplication.getVolleyRequestQueue().add(request); ChanApplication.getVolleyRequestQueue().add(request);

@ -17,11 +17,11 @@
*/ */
package org.floens.chan.core.loader; package org.floens.chan.core.loader;
import org.floens.chan.core.model.Loadable;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import org.floens.chan.core.model.Loadable;
public class LoaderPool { public class LoaderPool {
// private static final String TAG = "LoaderPool"; // private static final String TAG = "LoaderPool";

@ -17,10 +17,8 @@
*/ */
package org.floens.chan.core.manager; package org.floens.chan.core.manager;
import java.util.ArrayList; import com.android.volley.Response;
import java.util.Collections; import com.android.volley.VolleyError;
import java.util.Comparator;
import java.util.List;
import org.floens.chan.ChanApplication; import org.floens.chan.ChanApplication;
import org.floens.chan.chan.ChanUrls; import org.floens.chan.chan.ChanUrls;
@ -28,8 +26,10 @@ import org.floens.chan.core.model.Board;
import org.floens.chan.core.net.BoardsRequest; import org.floens.chan.core.net.BoardsRequest;
import org.floens.chan.utils.Logger; import org.floens.chan.utils.Logger;
import com.android.volley.Response; import java.util.ArrayList;
import com.android.volley.VolleyError; import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class BoardManager { public class BoardManager {
private static final String TAG = "BoardManager"; private static final String TAG = "BoardManager";
@ -173,7 +173,8 @@ public class BoardManager {
public void onErrorResponse(VolleyError error) { public void onErrorResponse(VolleyError error) {
Logger.e(TAG, "Failed to get boards from server"); Logger.e(TAG, "Failed to get boards from server");
} }
})); })
);
} }
private List<Board> getDefaultBoards() { private List<Board> getDefaultBoards() {

@ -17,14 +17,14 @@
*/ */
package org.floens.chan.core.manager; package org.floens.chan.core.manager;
import java.util.ArrayList; import android.content.Context;
import java.util.List;
import org.floens.chan.ChanApplication; import org.floens.chan.ChanApplication;
import org.floens.chan.core.model.Loadable; import org.floens.chan.core.model.Loadable;
import org.floens.chan.core.model.Pin; import org.floens.chan.core.model.Pin;
import android.content.Context; import java.util.ArrayList;
import java.util.List;
public class PinnedManager { public class PinnedManager {
private final List<PinListener> listeners = new ArrayList<PinListener>(); private final List<PinListener> listeners = new ArrayList<PinListener>();
@ -48,7 +48,7 @@ public class PinnedManager {
* *
* @param other * @param other
* @return The pin whose loadable is equal to the supplied loadable, or null * @return The pin whose loadable is equal to the supplied loadable, or null
* if no pin was found. * if no pin was found.
*/ */
public Pin findPinByLoadable(Loadable other) { public Pin findPinByLoadable(Loadable other) {
for (Pin pin : pins) { for (Pin pin : pins) {

@ -17,13 +17,8 @@
*/ */
package org.floens.chan.core.manager; package org.floens.chan.core.manager;
import java.io.File; import android.content.Context;
import java.io.IOException; import android.content.Intent;
import java.io.UnsupportedEncodingException;
import java.util.Locale;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.floens.chan.ChanApplication; import org.floens.chan.ChanApplication;
import org.floens.chan.R; import org.floens.chan.R;
@ -35,8 +30,14 @@ import org.floens.chan.ui.activity.ImagePickActivity;
import org.floens.chan.utils.Logger; import org.floens.chan.utils.Logger;
import org.floens.chan.utils.Utils; import org.floens.chan.utils.Utils;
import android.content.Context; import java.io.File;
import android.content.Intent; import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Locale;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import ch.boye.httpclientandroidlib.Header; import ch.boye.httpclientandroidlib.Header;
import ch.boye.httpclientandroidlib.HeaderElement; import ch.boye.httpclientandroidlib.HeaderElement;
import ch.boye.httpclientandroidlib.HttpResponse; import ch.boye.httpclientandroidlib.HttpResponse;
@ -81,8 +82,7 @@ public class ReplyManager {
/** /**
* Set an reply draft. * Set an reply draft.
* *
* @param value * @param value the draft to save.
* the draft to save.
*/ */
public void setReplyDraft(Reply value) { public void setReplyDraft(Reply value) {
draft = value; draft = value;
@ -100,8 +100,7 @@ public class ReplyManager {
/** /**
* Add an quote to the comment field. Looks like >>123456789\n * Add an quote to the comment field. Looks like >>123456789\n
* *
* @param no * @param no the raw no to quote to.
* the raw no to quote to.
*/ */
public void quote(int no) { public void quote(int no) {
draft.comment = draft.comment + ">>" + no + "\n"; draft.comment = draft.comment + ">>" + no + "\n";
@ -110,8 +109,7 @@ public class ReplyManager {
/** /**
* Pick an file. Starts up the ImagePickActivity. * Pick an file. Starts up the ImagePickActivity.
* *
* @param listener * @param listener FileListener to listen on.
* FileListener to listen on.
*/ */
public void pickFile(FileListener listener) { public void pickFile(FileListener listener) {
fileListener = listener; fileListener = listener;
@ -157,8 +155,7 @@ public class ReplyManager {
/** /**
* Get the CAPTCHA challenge hash from an JSON response. * Get the CAPTCHA challenge hash from an JSON response.
* *
* @param total * @param total The total response from the server
* The total response from the server
* @return The pattern, or null when none was found. * @return The pattern, or null when none was found.
*/ */
public static String getChallenge(String total) { public static String getChallenge(String total) {
@ -264,11 +261,9 @@ public class ReplyManager {
/** /**
* Send an reply off to the server. * Send an reply off to the server.
* *
* @param reply * @param reply The reply object with all data needed, like captcha and the
* The reply object with all data needed, like captcha and the * file.
* file. * @param listener The listener, after server response.
* @param listener
* The listener, after server response.
*/ */
public void sendDelete(final SavedReply reply, boolean onlyImageDelete, final DeleteListener listener) { public void sendDelete(final SavedReply reply, boolean onlyImageDelete, final DeleteListener listener) {
Logger.i(TAG, "Sending delete request: " + reply.board + ", " + reply.no); Logger.i(TAG, "Sending delete request: " + reply.board + ", " + reply.no);
@ -341,11 +336,9 @@ public class ReplyManager {
/** /**
* Send an reply off to the server. * Send an reply off to the server.
* *
* @param reply * @param reply The reply object with all data needed, like captcha and the
* The reply object with all data needed, like captcha and the * file.
* file. * @param listener The listener, after server response.
* @param listener
* The listener, after server response.
*/ */
public void sendReply(final Reply reply, final ReplyListener listener) { public void sendReply(final Reply reply, final ReplyListener listener) {
Logger.i(TAG, "Sending reply request: " + reply.board + ", " + reply.resto); Logger.i(TAG, "Sending reply request: " + reply.board + ", " + reply.resto);

@ -17,8 +17,21 @@
*/ */
package org.floens.chan.core.manager; package org.floens.chan.core.manager;
import java.util.ArrayList; import android.app.Activity;
import java.util.List; import android.app.AlertDialog;
import android.app.FragmentTransaction;
import android.app.ProgressDialog;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.text.TextUtils;
import android.widget.CheckBox;
import android.widget.Toast;
import com.android.volley.VolleyError;
import org.floens.chan.ChanApplication; import org.floens.chan.ChanApplication;
import org.floens.chan.R; import org.floens.chan.R;
@ -38,21 +51,8 @@ import org.floens.chan.ui.fragment.ReplyFragment;
import org.floens.chan.utils.Logger; import org.floens.chan.utils.Logger;
import org.floens.chan.utils.Utils; import org.floens.chan.utils.Utils;
import android.app.Activity; import java.util.ArrayList;
import android.app.AlertDialog; import java.util.List;
import android.app.FragmentTransaction;
import android.app.ProgressDialog;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.text.TextUtils;
import android.widget.CheckBox;
import android.widget.Toast;
import com.android.volley.VolleyError;
/** /**
* All PostView's need to have this referenced. This manages some things like * All PostView's need to have this referenced. This manages some things like
@ -224,24 +224,24 @@ public class ThreadManager implements Loader.LoaderListener {
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
switch (which) { switch (which) {
case 0: // Reply case 0: // Reply
openReply(true); // todo if tablet openReply(true); // todo if tablet
// Pass through // Pass through
case 1: // Quote case 1: // Quote
ChanApplication.getReplyManager().quote(post.no); ChanApplication.getReplyManager().quote(post.no);
break; break;
case 2: // Info case 2: // Info
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
copyToClipboard(post.comment.toString()); copyToClipboard(post.comment.toString());
break; break;
case 5: // Delete case 5: // Delete
deletePost(post); deletePost(post);
break; break;
} }
} }
}); });
@ -334,8 +334,7 @@ public class ThreadManager implements Loader.LoaderListener {
* linkable. b. when there's more than one linkable, show the user multiple * linkable. b. when there's more than one linkable, show the user multiple
* options to select from. * options to select from.
* *
* @param post * @param post The post that was clicked.
* The post that was clicked.
*/ */
public void showPostLinkables(Post post) { public void showPostLinkables(Post post) {
AlertDialog.Builder builder = new AlertDialog.Builder(activity); AlertDialog.Builder builder = new AlertDialog.Builder(activity);
@ -380,8 +379,7 @@ public class ThreadManager implements Loader.LoaderListener {
/** /**
* Handle when a linkable has been clicked. * Handle when a linkable has been clicked.
* *
* @param linkable * @param linkable the selected linkable.
* the selected linkable.
*/ */
private void handleLinkableSelected(final PostLinkable linkable) { private void handleLinkableSelected(final PostLinkable linkable) {
if (linkable.type == PostLinkable.Type.QUOTE) { if (linkable.type == PostLinkable.Type.QUOTE) {
@ -413,8 +411,7 @@ public class ThreadManager implements Loader.LoaderListener {
* When a linkable to a post has been clicked, show a dialog with the * When a linkable to a post has been clicked, show a dialog with the
* referenced post in it. * referenced post in it.
* *
* @param linkable * @param linkable the clicked linkable.
* the clicked linkable.
*/ */
private void showPostReply(PostLinkable linkable) { private void showPostReply(PostLinkable linkable) {
String value = linkable.value; String value = linkable.value;
@ -442,9 +439,8 @@ public class ThreadManager implements Loader.LoaderListener {
/** /**
* Open an url. * Open an url.
* *
* @param linkable * @param linkable Linkable with an url.
* Linkable with an url.
*/ */
private void openLink(PostLinkable linkable) { private void openLink(PostLinkable linkable) {
Utils.openLink(activity, linkable.value); Utils.openLink(activity, linkable.value);
@ -505,10 +501,10 @@ public class ThreadManager implements Loader.LoaderListener {
doDeletePost(post, view.isChecked()); doDeletePost(post, view.isChecked());
} }
}).setNegativeButton(R.string.cancel, new OnClickListener() { }).setNegativeButton(R.string.cancel, new OnClickListener() {
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
} }
}).show(); }).show();
} }
private void doDeletePost(Post post, boolean onlyImageDelete) { private void doDeletePost(Post post, boolean onlyImageDelete) {

@ -17,12 +17,12 @@
*/ */
package org.floens.chan.core.model; package org.floens.chan.core.model;
import org.floens.chan.ChanApplication;
import org.floens.chan.core.watch.PinWatcher;
import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable; import com.j256.ormlite.table.DatabaseTable;
import org.floens.chan.ChanApplication;
import org.floens.chan.core.watch.PinWatcher;
@DatabaseTable @DatabaseTable
public class Pin { public class Pin {
// Database stuff // Database stuff
@ -33,12 +33,16 @@ public class Pin {
public Loadable loadable = new Loadable("", -1); public Loadable loadable = new Loadable("", -1);
// ListView Stuff // ListView Stuff
/** Header is used to display a static header in the drawer listview. */ /**
* Header is used to display a static header in the drawer listview.
*/
public Type type = Type.THREAD; public Type type = Type.THREAD;
public static enum Type { public static enum Type {
HEADER, THREAD HEADER, THREAD
}; }
;
// PinnedService stuff // PinnedService stuff
public PinWatcher pinWatcher; public PinWatcher pinWatcher;

@ -17,9 +17,12 @@
*/ */
package org.floens.chan.core.model; package org.floens.chan.core.model;
import java.net.URL; import android.graphics.Color;
import java.util.ArrayList; import android.text.SpannableString;
import java.util.List; import android.text.TextUtils;
import android.text.style.AbsoluteSizeSpan;
import android.text.style.BackgroundColorSpan;
import android.text.style.ForegroundColorSpan;
import org.floens.chan.chan.ChanUrls; import org.floens.chan.chan.ChanUrls;
import org.floens.chan.core.model.PostLinkable.Type; import org.floens.chan.core.model.PostLinkable.Type;
@ -31,12 +34,9 @@ import org.jsoup.nodes.Node;
import org.jsoup.nodes.TextNode; import org.jsoup.nodes.TextNode;
import org.jsoup.parser.Parser; import org.jsoup.parser.Parser;
import android.graphics.Color; import java.net.URL;
import android.text.SpannableString; import java.util.ArrayList;
import android.text.TextUtils; import java.util.List;
import android.text.style.AbsoluteSizeSpan;
import android.text.style.BackgroundColorSpan;
import android.text.style.ForegroundColorSpan;
/** /**
* Contains all data needed to represent a single post. * Contains all data needed to represent a single post.
@ -113,7 +113,7 @@ public class Post {
/** /**
* Finish up the data * Finish up the data
* *
* @return false if this data is invalid * @return false if this data is invalid
*/ */
public boolean finish(Loadable loadable) { public boolean finish(Loadable loadable) {

@ -28,7 +28,9 @@ import android.view.View;
public class PostLinkable extends ClickableSpan { public class PostLinkable extends ClickableSpan {
public static enum Type { public static enum Type {
QUOTE, LINK, SPOILER QUOTE, LINK, SPOILER
}; }
;
public final Post post; public final Post post;
public final String key; public final String key;

@ -17,17 +17,17 @@
*/ */
package org.floens.chan.core.net; package org.floens.chan.core.net;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.floens.chan.core.model.Board;
import android.util.JsonReader; import android.util.JsonReader;
import com.android.volley.Response.ErrorListener; import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener; import com.android.volley.Response.Listener;
import org.floens.chan.core.model.Board;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class BoardsRequest extends JsonReaderRequest<List<Board>> { public class BoardsRequest extends JsonReaderRequest<List<Board>> {
public BoardsRequest(String url, Listener<List<Board>> listener, ErrorListener errorListener) { public BoardsRequest(String url, Listener<List<Board>> listener, ErrorListener errorListener) {
super(url, listener, errorListener); super(url, listener, errorListener);

@ -17,20 +17,20 @@
*/ */
package org.floens.chan.core.net; package org.floens.chan.core.net;
import java.io.IOException; import android.util.JsonReader;
import java.util.ArrayList;
import java.util.List; import com.android.volley.ParseError;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import org.floens.chan.ChanApplication; import org.floens.chan.ChanApplication;
import org.floens.chan.chan.ChanUrls; import org.floens.chan.chan.ChanUrls;
import org.floens.chan.core.model.Loadable; import org.floens.chan.core.model.Loadable;
import org.floens.chan.core.model.Post; import org.floens.chan.core.model.Post;
import android.util.JsonReader; import java.io.IOException;
import java.util.ArrayList;
import com.android.volley.ParseError; import java.util.List;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
public class ChanReaderRequest extends JsonReaderRequest<List<Post>> { public class ChanReaderRequest extends JsonReaderRequest<List<Post>> {
private Loadable loadable; private Loadable loadable;
@ -42,19 +42,16 @@ public class ChanReaderRequest extends JsonReaderRequest<List<Post>> {
/** /**
* Creates a ChanReaderRequest with supplied params * Creates a ChanReaderRequest with supplied params
* *
* @param mode * @param mode ThreadManager mode
* ThreadManager mode * @param board board key
* @param board * @param no page for board, no for threads
* board key
* @param no
* page for board, no for threads
* @param listener * @param listener
* @param errorListener * @param errorListener
* @return New instance of ChanReaderRequest * @return New instance of ChanReaderRequest
*/ */
public static ChanReaderRequest newInstance(Loadable loadable, List<Post> cached, Listener<List<Post>> listener, public static ChanReaderRequest newInstance(Loadable loadable, List<Post> cached, Listener<List<Post>> listener,
ErrorListener errorListener) { ErrorListener errorListener) {
String url; String url;
if (loadable.isBoardMode()) { if (loadable.isBoardMode()) {

@ -17,10 +17,6 @@
*/ */
package org.floens.chan.core.net; package org.floens.chan.core.net;
import java.io.File;
import org.floens.chan.ChanApplication;
import com.android.volley.NetworkResponse; import com.android.volley.NetworkResponse;
import com.android.volley.Request; import com.android.volley.Request;
import com.android.volley.Response; import com.android.volley.Response;
@ -29,6 +25,10 @@ import com.android.volley.Response.Listener;
import com.android.volley.toolbox.DiskBasedCache; import com.android.volley.toolbox.DiskBasedCache;
import com.android.volley.toolbox.HttpHeaderParser; import com.android.volley.toolbox.HttpHeaderParser;
import org.floens.chan.ChanApplication;
import java.io.File;
public class FileRequest extends Request<Void> { public class FileRequest extends Request<Void> {
protected final Listener<File> listener; protected final Listener<File> listener;

@ -17,8 +17,6 @@
*/ */
package org.floens.chan.core.net; package org.floens.chan.core.net;
import org.floens.chan.ui.view.GIFView;
import android.content.Context; import android.content.Context;
import com.android.volley.NetworkResponse; import com.android.volley.NetworkResponse;
@ -29,6 +27,8 @@ import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener; import com.android.volley.Response.Listener;
import com.android.volley.toolbox.HttpHeaderParser; import com.android.volley.toolbox.HttpHeaderParser;
import org.floens.chan.ui.view.GIFView;
public class GIFRequest extends Request<GIFView> { public class GIFRequest extends Request<GIFView> {
protected final Listener<GIFView> listener; protected final Listener<GIFView> listener;
private final Context context; private final Context context;

@ -17,11 +17,6 @@
*/ */
package org.floens.chan.core.net; package org.floens.chan.core.net;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import android.util.JsonReader; import android.util.JsonReader;
import com.android.volley.NetworkResponse; import com.android.volley.NetworkResponse;
@ -33,6 +28,11 @@ import com.android.volley.Response.Listener;
import com.android.volley.VolleyError; import com.android.volley.VolleyError;
import com.android.volley.toolbox.HttpHeaderParser; import com.android.volley.toolbox.HttpHeaderParser;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
public abstract class JsonReaderRequest<T> extends Request<T> { public abstract class JsonReaderRequest<T> extends Request<T> {
protected final Listener<T> listener; protected final Listener<T> listener;
private VolleyError error; private VolleyError error;

@ -17,8 +17,7 @@
*/ */
package org.floens.chan.core.watch; package org.floens.chan.core.watch;
import java.util.ArrayList; import com.android.volley.VolleyError;
import java.util.List;
import org.floens.chan.core.loader.Loader; import org.floens.chan.core.loader.Loader;
import org.floens.chan.core.loader.LoaderPool; import org.floens.chan.core.loader.LoaderPool;
@ -27,7 +26,8 @@ import org.floens.chan.core.model.Post;
import org.floens.chan.service.WatchService; import org.floens.chan.service.WatchService;
import org.floens.chan.utils.Logger; import org.floens.chan.utils.Logger;
import com.android.volley.VolleyError; import java.util.ArrayList;
import java.util.List;
public class PinWatcher implements Loader.LoaderListener { public class PinWatcher implements Loader.LoaderListener {
private static final String TAG = "PinWatcher"; private static final String TAG = "PinWatcher";

@ -17,10 +17,12 @@
*/ */
package org.floens.chan.core.watch; package org.floens.chan.core.watch;
import java.util.ArrayList; import android.app.NotificationManager;
import java.util.Collections; import android.app.PendingIntent;
import java.util.Comparator; import android.content.Context;
import java.util.List; import android.content.Intent;
import android.media.RingtoneManager;
import android.support.v4.app.NotificationCompat;
import org.floens.chan.ChanApplication; import org.floens.chan.ChanApplication;
import org.floens.chan.R; import org.floens.chan.R;
@ -30,12 +32,10 @@ import org.floens.chan.service.WatchService;
import org.floens.chan.ui.activity.BoardActivity; import org.floens.chan.ui.activity.BoardActivity;
import org.floens.chan.utils.Logger; import org.floens.chan.utils.Logger;
import android.app.NotificationManager; import java.util.ArrayList;
import android.app.PendingIntent; import java.util.Collections;
import android.content.Context; import java.util.Comparator;
import android.content.Intent; import java.util.List;
import android.media.RingtoneManager;
import android.support.v4.app.NotificationCompat;
public class WatchNotifier { public class WatchNotifier {
private static final String TAG = "WatchNotifier"; private static final String TAG = "WatchNotifier";
@ -165,7 +165,7 @@ public class WatchNotifier {
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
private void showNotification(String tickerText, String title, String content, String contentInfo, private void showNotification(String tickerText, String title, String content, String contentInfo,
List<CharSequence> lines, boolean makeSound) { List<CharSequence> lines, boolean makeSound) {
Intent intent = new Intent(context, BoardActivity.class); Intent intent = new Intent(context, BoardActivity.class);
intent.addCategory("android.intent.category.LAUNCHER"); intent.addCategory("android.intent.category.LAUNCHER");

@ -77,7 +77,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
@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
} }
// Drop the tables and recreate them for now // Drop the tables and recreate them for now

@ -17,7 +17,12 @@
*/ */
package org.floens.chan.service; package org.floens.chan.service;
import java.util.List; import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
import org.floens.chan.ChanApplication; import org.floens.chan.ChanApplication;
import org.floens.chan.core.ChanPreferences; import org.floens.chan.core.ChanPreferences;
@ -25,12 +30,7 @@ import org.floens.chan.core.model.Pin;
import org.floens.chan.core.watch.WatchNotifier; import org.floens.chan.core.watch.WatchNotifier;
import org.floens.chan.utils.Logger; import org.floens.chan.utils.Logger;
import android.app.Service; import java.util.List;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
public class WatchService extends Service { public class WatchService extends Service {
private static final String TAG = "WatchService"; private static final String TAG = "WatchService";

@ -79,61 +79,61 @@ public class ScrollerRunnable implements Runnable {
final int firstPos = mList.getFirstVisiblePosition(); final int firstPos = mList.getFirstVisiblePosition();
switch (mMode) { switch (mMode) {
case MOVE_DOWN_POS: { case MOVE_DOWN_POS: {
final int lastViewIndex = mList.getChildCount() - 1; final int lastViewIndex = mList.getChildCount() - 1;
final int lastPos = firstPos + lastViewIndex; final int lastPos = firstPos + lastViewIndex;
if (lastViewIndex < 0) { if (lastViewIndex < 0) {
return; return;
} }
if (lastPos == mLastSeenPos) { if (lastPos == mLastSeenPos) {
// No new views, let things keep going. // No new views, let things keep going.
mList.post(this); mList.post(this);
return; return;
}
final View lastView = mList.getChildAt(lastViewIndex);
final int lastViewHeight = lastView.getHeight();
final int lastViewTop = lastView.getTop();
final int lastViewPixelsShowing = listHeight - lastViewTop;
final int extraScroll = lastPos < mList.getCount() - 1 ? mExtraScroll : mList.getPaddingBottom();
mList.smoothScrollBy(lastViewHeight - lastViewPixelsShowing + extraScroll, mScrollDuration);
mLastSeenPos = lastPos;
if (lastPos < mTargetPos) {
mList.post(this);
}
break;
} }
final View lastView = mList.getChildAt(lastViewIndex); case MOVE_UP_POS: {
final int lastViewHeight = lastView.getHeight(); if (firstPos == mLastSeenPos) {
final int lastViewTop = lastView.getTop(); // No new views, let things keep going.
final int lastViewPixelsShowing = listHeight - lastViewTop; mList.post(this);
final int extraScroll = lastPos < mList.getCount() - 1 ? mExtraScroll : mList.getPaddingBottom(); return;
}
mList.smoothScrollBy(lastViewHeight - lastViewPixelsShowing + extraScroll, mScrollDuration); final View firstView = mList.getChildAt(0);
if (firstView == null) {
return;
}
final int firstViewTop = firstView.getTop();
final int extraScroll = firstPos > 0 ? mExtraScroll : mList.getPaddingTop();
mLastSeenPos = lastPos; mList.smoothScrollBy(firstViewTop - extraScroll, mScrollDuration);
if (lastPos < mTargetPos) {
mList.post(this);
}
break;
}
case MOVE_UP_POS: { mLastSeenPos = firstPos;
if (firstPos == mLastSeenPos) {
// No new views, let things keep going.
mList.post(this);
return;
}
final View firstView = mList.getChildAt(0); if (firstPos > mTargetPos) {
if (firstView == null) { mList.post(this);
return; }
break;
} }
final int firstViewTop = firstView.getTop();
final int extraScroll = firstPos > 0 ? mExtraScroll : mList.getPaddingTop();
mList.smoothScrollBy(firstViewTop - extraScroll, mScrollDuration);
mLastSeenPos = firstPos;
if (firstPos > mTargetPos) {
mList.post(this);
}
break;
}
default: default:
break; break;
} }
} }
} }

@ -16,10 +16,6 @@
package org.floens.chan.ui; package org.floens.chan.ui;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import android.animation.Animator; import android.animation.Animator;
import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorListenerAdapter;
import android.animation.ValueAnimator; import android.animation.ValueAnimator;
@ -32,13 +28,17 @@ import android.view.ViewGroup;
import android.widget.AbsListView; import android.widget.AbsListView;
import android.widget.ListView; import android.widget.ListView;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/** /**
* A {@link android.view.View.OnTouchListener} that makes the list items in a * A {@link android.view.View.OnTouchListener} that makes the list items in a
* {@link ListView} dismissable. {@link ListView} is given special treatment * {@link ListView} dismissable. {@link ListView} is given special treatment
* because by default it handles touches for its list items... i.e. it's in * because by default it handles touches for its list items... i.e. it's in
* charge of drawing the pressed state (the list selector), handling list item * charge of drawing the pressed state (the list selector), handling list item
* clicks, etc. * clicks, etc.
* *
* <p> * <p>
* After creating the listener, the caller should also call * After creating the listener, the caller should also call
* {@link ListView#setOnScrollListener(android.widget.AbsListView.OnScrollListener)} * {@link ListView#setOnScrollListener(android.widget.AbsListView.OnScrollListener)}
@ -48,11 +48,11 @@ import android.widget.ListView;
* {@link SwipeDismissListViewTouchListener} is paused during list view * {@link SwipeDismissListViewTouchListener} is paused during list view
* scrolling. * scrolling.
* </p> * </p>
* *
* <p> * <p>
* Example usage: * Example usage:
* </p> * </p>
* *
* <pre> * <pre>
* SwipeDismissListViewTouchListener touchListener = new SwipeDismissListViewTouchListener(listView, * SwipeDismissListViewTouchListener touchListener = new SwipeDismissListViewTouchListener(listView,
* new SwipeDismissListViewTouchListener.OnDismissCallback() { * new SwipeDismissListViewTouchListener.OnDismissCallback() {
@ -66,7 +66,7 @@ import android.widget.ListView;
* listView.setOnTouchListener(touchListener); * listView.setOnTouchListener(touchListener);
* listView.setOnScrollListener(touchListener.makeScrollListener()); * listView.setOnScrollListener(touchListener.makeScrollListener());
* </pre> * </pre>
* *
* <p> * <p>
* This class Requires API level 12 or later due to use of * This class Requires API level 12 or later due to use of
* {@link android.view.ViewPropertyAnimator}. * {@link android.view.ViewPropertyAnimator}.
@ -108,24 +108,20 @@ public class SwipeDismissListViewTouchListener implements View.OnTouchListener {
/** /**
* Called when the user has indicated they she would like to dismiss one * Called when the user has indicated they she would like to dismiss one
* or more list item positions. * or more list item positions.
* *
* @param listView * @param listView The originating {@link ListView}.
* The originating {@link ListView}. * @param reverseSortedPositions An array of positions to dismiss, sorted in descending
* @param reverseSortedPositions * order for convenience.
* An array of positions to dismiss, sorted in descending
* order for convenience.
*/ */
void onDismiss(ListView listView, int[] reverseSortedPositions); void onDismiss(ListView listView, int[] reverseSortedPositions);
} }
/** /**
* Constructs a new swipe-to-dismiss touch listener for the given list view. * Constructs a new swipe-to-dismiss touch listener for the given list view.
* *
* @param listView * @param listView The list view whose items should be dismissable.
* The list view whose items should be dismissable. * @param callbacks The callback to trigger when the user has indicated that she
* @param callbacks * would like to dismiss one or more list items.
* The callback to trigger when the user has indicated that she
* would like to dismiss one or more list items.
*/ */
public SwipeDismissListViewTouchListener(ListView listView, DismissCallbacks callbacks) { public SwipeDismissListViewTouchListener(ListView listView, DismissCallbacks callbacks) {
ViewConfiguration vc = ViewConfiguration.get(listView.getContext()); ViewConfiguration vc = ViewConfiguration.get(listView.getContext());
@ -136,11 +132,11 @@ public class SwipeDismissListViewTouchListener implements View.OnTouchListener {
mListView = listView; mListView = listView;
mCallbacks = callbacks; mCallbacks = callbacks;
} }
public int getSlop() { public int getSlop() {
return mSlop; return mSlop;
} }
public void setSlop(int slop) { public void setSlop(int slop) {
mSlop = slop; mSlop = slop;
} }
@ -148,9 +144,8 @@ public class SwipeDismissListViewTouchListener implements View.OnTouchListener {
/** /**
* Enables or disables (pauses or resumes) watching for swipe-to-dismiss * Enables or disables (pauses or resumes) watching for swipe-to-dismiss
* gestures. * gestures.
* *
* @param enabled * @param enabled Whether or not to watch for gestures.
* Whether or not to watch for gestures.
*/ */
public void setEnabled(boolean enabled) { public void setEnabled(boolean enabled) {
mPaused = !enabled; mPaused = !enabled;
@ -164,7 +159,7 @@ public class SwipeDismissListViewTouchListener implements View.OnTouchListener {
* scroll changes through to this listener. This will ensure that this * scroll changes through to this listener. This will ensure that this
* {@link SwipeDismissListViewTouchListener} is paused during list view * {@link SwipeDismissListViewTouchListener} is paused during list view
* scrolling.</p> * scrolling.</p>
* *
* @see SwipeDismissListViewTouchListener * @see SwipeDismissListViewTouchListener
*/ */
public AbsListView.OnScrollListener makeScrollListener() { public AbsListView.OnScrollListener makeScrollListener() {
@ -195,126 +190,126 @@ public class SwipeDismissListViewTouchListener implements View.OnTouchListener {
} }
switch (motionEvent.getActionMasked()) { switch (motionEvent.getActionMasked()) {
case MotionEvent.ACTION_DOWN: { case MotionEvent.ACTION_DOWN: {
if (mPaused) { if (mPaused) {
return false; return false;
}
// TODO: ensure this is a finger, and set a flag
// Find the child view that was touched (perform a hit test)
Rect rect = new Rect();
int childCount = mListView.getChildCount();
int[] listViewCoords = new int[2];
mListView.getLocationOnScreen(listViewCoords);
int x = (int) motionEvent.getRawX() - listViewCoords[0];
int y = (int) motionEvent.getRawY() - listViewCoords[1];
View child;
for (int i = 0; i < childCount; i++) {
child = mListView.getChildAt(i);
child.getHitRect(rect);
if (rect.contains(x, y)) {
mDownView = child;
break;
}
}
if (mDownView != null) {
mDownX = motionEvent.getRawX();
mDownPosition = mListView.getPositionForView(mDownView);
if (mCallbacks.canDismiss(mDownPosition)) {
mVelocityTracker = VelocityTracker.obtain();
mVelocityTracker.addMovement(motionEvent);
} else {
mDownView = null;
}
}
view.onTouchEvent(motionEvent);
return true;
} }
// TODO: ensure this is a finger, and set a flag case MotionEvent.ACTION_UP: {
if (mVelocityTracker == null) {
// Find the child view that was touched (perform a hit test)
Rect rect = new Rect();
int childCount = mListView.getChildCount();
int[] listViewCoords = new int[2];
mListView.getLocationOnScreen(listViewCoords);
int x = (int) motionEvent.getRawX() - listViewCoords[0];
int y = (int) motionEvent.getRawY() - listViewCoords[1];
View child;
for (int i = 0; i < childCount; i++) {
child = mListView.getChildAt(i);
child.getHitRect(rect);
if (rect.contains(x, y)) {
mDownView = child;
break; break;
} }
}
if (mDownView != null) { float deltaX = motionEvent.getRawX() - mDownX;
mDownX = motionEvent.getRawX(); mVelocityTracker.addMovement(motionEvent);
mDownPosition = mListView.getPositionForView(mDownView); mVelocityTracker.computeCurrentVelocity(1000);
if (mCallbacks.canDismiss(mDownPosition)) { float velocityX = mVelocityTracker.getXVelocity();
mVelocityTracker = VelocityTracker.obtain(); float absVelocityX = Math.abs(velocityX);
mVelocityTracker.addMovement(motionEvent); float absVelocityY = Math.abs(mVelocityTracker.getYVelocity());
boolean dismiss = false;
boolean dismissRight = false;
if (Math.abs(deltaX) > mViewWidth / 2) {
dismiss = true;
dismissRight = deltaX > 0;
} else if (mMinFlingVelocity <= absVelocityX && absVelocityX <= mMaxFlingVelocity
&& absVelocityY < absVelocityX) {
// dismiss only if flinging in the same direction as dragging
dismiss = (velocityX < 0) == (deltaX < 0);
dismissRight = mVelocityTracker.getXVelocity() > 0;
}
if (dismiss) {
// dismiss
dismiss(mDownView, mDownPosition, dismissRight);
} else { } else {
mDownView = null; // cancel
mDownView.animate().translationX(0).alpha(1).setDuration(mAnimationTime).setListener(null);
} }
} mVelocityTracker.recycle();
view.onTouchEvent(motionEvent); mVelocityTracker = null;
return true; mDownX = 0;
} mDownView = null;
mDownPosition = ListView.INVALID_POSITION;
case MotionEvent.ACTION_UP: { mSwiping = false;
if (mVelocityTracker == null) {
break; break;
} }
float deltaX = motionEvent.getRawX() - mDownX; case MotionEvent.ACTION_CANCEL: {
mVelocityTracker.addMovement(motionEvent); if (mVelocityTracker == null) {
mVelocityTracker.computeCurrentVelocity(1000); break;
float velocityX = mVelocityTracker.getXVelocity(); }
float absVelocityX = Math.abs(velocityX);
float absVelocityY = Math.abs(mVelocityTracker.getYVelocity());
boolean dismiss = false;
boolean dismissRight = false;
if (Math.abs(deltaX) > mViewWidth / 2) {
dismiss = true;
dismissRight = deltaX > 0;
} else if (mMinFlingVelocity <= absVelocityX && absVelocityX <= mMaxFlingVelocity
&& absVelocityY < absVelocityX) {
// dismiss only if flinging in the same direction as dragging
dismiss = (velocityX < 0) == (deltaX < 0);
dismissRight = mVelocityTracker.getXVelocity() > 0;
}
if (dismiss) {
// dismiss
dismiss(mDownView, mDownPosition, dismissRight);
} else {
// cancel
mDownView.animate().translationX(0).alpha(1).setDuration(mAnimationTime).setListener(null);
}
mVelocityTracker.recycle();
mVelocityTracker = null;
mDownX = 0;
mDownView = null;
mDownPosition = ListView.INVALID_POSITION;
mSwiping = false;
break;
}
case MotionEvent.ACTION_CANCEL: { if (mDownView != null) {
if (mVelocityTracker == null) { // cancel
mDownView.animate().translationX(0).alpha(1).setDuration(mAnimationTime).setListener(null);
}
mVelocityTracker.recycle();
mVelocityTracker = null;
mDownX = 0;
mDownView = null;
mDownPosition = ListView.INVALID_POSITION;
mSwiping = false;
break; break;
} }
if (mDownView != null) { case MotionEvent.ACTION_MOVE: {
// cancel if (mVelocityTracker == null || mPaused) {
mDownView.animate().translationX(0).alpha(1).setDuration(mAnimationTime).setListener(null); break;
} }
mVelocityTracker.recycle();
mVelocityTracker = null;
mDownX = 0;
mDownView = null;
mDownPosition = ListView.INVALID_POSITION;
mSwiping = false;
break;
}
case MotionEvent.ACTION_MOVE: {
if (mVelocityTracker == null || mPaused) {
break;
}
mVelocityTracker.addMovement(motionEvent); mVelocityTracker.addMovement(motionEvent);
float deltaX = motionEvent.getRawX() - mDownX; float deltaX = motionEvent.getRawX() - mDownX;
if (Math.abs(deltaX) > mSlop) { if (Math.abs(deltaX) > mSlop) {
mSwiping = true; mSwiping = true;
mListView.requestDisallowInterceptTouchEvent(true); mListView.requestDisallowInterceptTouchEvent(true);
// Cancel ListView's touch (un-highlighting the item) // Cancel ListView's touch (un-highlighting the item)
MotionEvent cancelEvent = MotionEvent.obtain(motionEvent); MotionEvent cancelEvent = MotionEvent.obtain(motionEvent);
cancelEvent.setAction(MotionEvent.ACTION_CANCEL cancelEvent.setAction(MotionEvent.ACTION_CANCEL
| (motionEvent.getActionIndex() << MotionEvent.ACTION_POINTER_INDEX_SHIFT)); | (motionEvent.getActionIndex() << MotionEvent.ACTION_POINTER_INDEX_SHIFT));
mListView.onTouchEvent(cancelEvent); mListView.onTouchEvent(cancelEvent);
cancelEvent.recycle(); cancelEvent.recycle();
} }
if (mSwiping) { if (mSwiping) {
mDownView.setTranslationX(deltaX); mDownView.setTranslationX(deltaX);
mDownView.setAlpha(Math.max(0.15f, Math.min(1f, 1f - 2f * Math.abs(deltaX) / mViewWidth))); mDownView.setAlpha(Math.max(0.15f, Math.min(1f, 1f - 2f * Math.abs(deltaX) / mViewWidth)));
return true; return true;
}
break;
} }
break;
}
} }
return false; return false;
} }
@ -324,7 +319,7 @@ public class SwipeDismissListViewTouchListener implements View.OnTouchListener {
if (view == null) { if (view == null) {
// No view, shortcut to calling onDismiss to let it deal with adapter // No view, shortcut to calling onDismiss to let it deal with adapter
// updates and all that. // updates and all that.
mCallbacks.onDismiss(mListView, new int[] { position }); mCallbacks.onDismiss(mListView, new int[]{position});
return; return;
} }

@ -17,19 +17,6 @@
*/ */
package org.floens.chan.ui.activity; package org.floens.chan.ui.activity;
import java.util.List;
import org.floens.chan.ChanApplication;
import org.floens.chan.R;
import org.floens.chan.core.manager.PinnedManager;
import org.floens.chan.core.model.Pin;
import org.floens.chan.core.model.Post;
import org.floens.chan.ui.BadgeDrawable;
import org.floens.chan.ui.SwipeDismissListViewTouchListener;
import org.floens.chan.ui.SwipeDismissListViewTouchListener.DismissCallbacks;
import org.floens.chan.ui.adapter.PinnedAdapter;
import org.floens.chan.utils.Utils;
import android.app.Activity; import android.app.Activity;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.content.DialogInterface; import android.content.DialogInterface;
@ -56,6 +43,19 @@ import android.widget.EditText;
import android.widget.ListView; import android.widget.ListView;
import android.widget.ShareActionProvider; import android.widget.ShareActionProvider;
import org.floens.chan.ChanApplication;
import org.floens.chan.R;
import org.floens.chan.core.manager.PinnedManager;
import org.floens.chan.core.model.Pin;
import org.floens.chan.core.model.Post;
import org.floens.chan.ui.BadgeDrawable;
import org.floens.chan.ui.SwipeDismissListViewTouchListener;
import org.floens.chan.ui.SwipeDismissListViewTouchListener.DismissCallbacks;
import org.floens.chan.ui.adapter.PinnedAdapter;
import org.floens.chan.utils.Utils;
import java.util.List;
public abstract class BaseActivity extends Activity implements PanelSlideListener, PinnedManager.PinListener { public abstract class BaseActivity extends Activity implements PanelSlideListener, PinnedManager.PinListener {
private final static int ACTION_OPEN_URL = 1; private final static int ACTION_OPEN_URL = 1;
@ -165,7 +165,8 @@ public abstract class BaseActivity extends Activity implements PanelSlideListene
public boolean canDismiss(int position) { public boolean canDismiss(int position) {
return pinnedAdapter.getItem(position).type != Pin.Type.HEADER; return pinnedAdapter.getItem(position).type != Pin.Type.HEADER;
} }
}); }
);
touchListener.setSlop((int) (touchListener.getSlop() * 0.4f)); touchListener.setSlop((int) (touchListener.getSlop() * 0.4f));
@ -246,9 +247,9 @@ public abstract class BaseActivity extends Activity implements PanelSlideListene
@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:
startActivity(new Intent(this, SettingsActivity.class)); startActivity(new Intent(this, SettingsActivity.class));
return true; return true;
} }
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
@ -295,7 +296,7 @@ public abstract class BaseActivity extends Activity implements PanelSlideListene
return; return;
} }
NdefMessage message = new NdefMessage(new NdefRecord[] { record }); NdefMessage message = new NdefMessage(new NdefRecord[]{record});
adapter.setNdefPushMessage(message, this); adapter.setNdefPushMessage(message, this);
} }

@ -17,18 +17,6 @@
*/ */
package org.floens.chan.ui.activity; package org.floens.chan.ui.activity;
import java.util.List;
import org.floens.chan.ChanApplication;
import org.floens.chan.R;
import org.floens.chan.chan.ChanUrls;
import org.floens.chan.core.model.Loadable;
import org.floens.chan.core.model.Pin;
import org.floens.chan.core.model.Post;
import org.floens.chan.service.WatchService;
import org.floens.chan.ui.fragment.ThreadFragment;
import org.floens.chan.utils.Utils;
import android.app.ActionBar; import android.app.ActionBar;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.app.FragmentTransaction; import android.app.FragmentTransaction;
@ -47,6 +35,18 @@ import android.view.ViewGroup.LayoutParams;
import android.widget.ArrayAdapter; import android.widget.ArrayAdapter;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import org.floens.chan.ChanApplication;
import org.floens.chan.R;
import org.floens.chan.chan.ChanUrls;
import org.floens.chan.core.model.Loadable;
import org.floens.chan.core.model.Pin;
import org.floens.chan.core.model.Post;
import org.floens.chan.service.WatchService;
import org.floens.chan.ui.fragment.ThreadFragment;
import org.floens.chan.utils.Utils;
import java.util.List;
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();
@ -70,7 +70,8 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio
final ActionBar actionBar = getActionBar(); final ActionBar actionBar = getActionBar();
actionBar.setListNavigationCallbacks( actionBar.setListNavigationCallbacks(
new ArrayAdapter<String>(actionBar.getThemedContext(), R.layout.board_select_spinner, new ArrayAdapter<String>(actionBar.getThemedContext(), R.layout.board_select_spinner,
android.R.id.text1, ChanApplication.getBoardManager().getSavedKeys()), this); android.R.id.text1, ChanApplication.getBoardManager().getSavedKeys()), this
);
updatePaneState(); updatePaneState();
updateActionBarState(); updateActionBarState();
@ -324,54 +325,54 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio
} }
switch (item.getItemId()) { switch (item.getItemId()) {
case R.id.action_reload_board: case R.id.action_reload_board:
case R.id.action_reload_tablet_board: case R.id.action_reload_tablet_board:
boardFragment.reload(); boardFragment.reload();
return true; return true;
case R.id.action_reload_thread: case R.id.action_reload_thread:
case R.id.action_reload_tablet_thread: case R.id.action_reload_tablet_thread:
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.openReply();
} else {
threadFragment.openReply();
}
return true;
case R.id.action_reply_board:
boardFragment.openReply(); boardFragment.openReply();
} else {
threadFragment.openReply();
}
return true;
case R.id.action_reply_board:
boardFragment.openReply();
return true; return true;
case R.id.action_reply_thread: case R.id.action_reply_thread:
threadFragment.openReply(); threadFragment.openReply();
return true; return true;
case R.id.action_pin: case R.id.action_pin:
if (threadFragment.hasLoader()) { if (threadFragment.hasLoader()) {
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.hasLoader()) { if (threadFragment.hasLoader()) {
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);
@ -510,11 +511,11 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio
finish(); finish();
} }
}).setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { }).setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
showUrlOpenPicker(url); showUrlOpenPicker(url);
} }
}).setCancelable(false).create().show(); }).setCancelable(false).create().show();
} }
private int getBoardIndexNavigator(String boardValue) { private int getBoardIndexNavigator(String boardValue) {

@ -17,17 +17,6 @@
*/ */
package org.floens.chan.ui.activity; package org.floens.chan.ui.activity;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import org.floens.chan.ChanApplication;
import org.floens.chan.R;
import org.floens.chan.core.manager.BoardManager;
import org.floens.chan.core.model.Board;
import org.floens.chan.ui.SwipeDismissListViewTouchListener;
import org.floens.chan.utils.Utils;
import android.app.Activity; import android.app.Activity;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.content.Context; import android.content.Context;
@ -55,6 +44,17 @@ import android.widget.Toast;
import com.mobeta.android.dslv.DragSortController; import com.mobeta.android.dslv.DragSortController;
import com.mobeta.android.dslv.DragSortListView; import com.mobeta.android.dslv.DragSortListView;
import org.floens.chan.ChanApplication;
import org.floens.chan.R;
import org.floens.chan.core.manager.BoardManager;
import org.floens.chan.core.model.Board;
import org.floens.chan.ui.SwipeDismissListViewTouchListener;
import org.floens.chan.utils.Utils;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
public class BoardEditor extends Activity { public class BoardEditor extends Activity {
private final BoardManager boardManager = ChanApplication.getBoardManager(); private final BoardManager boardManager = ChanApplication.getBoardManager();
@ -109,7 +109,8 @@ public class BoardEditor extends Activity {
public boolean canDismiss(int position) { public boolean canDismiss(int position) {
return list.size() > 1; return list.size() > 1;
} }
}); }
);
listView.setOnTouchListener(new View.OnTouchListener() { listView.setOnTouchListener(new View.OnTouchListener() {
@Override @Override
@ -147,9 +148,9 @@ public class BoardEditor extends Activity {
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) { switch (item.getItemId()) {
case R.id.action_add_board: case R.id.action_add_board:
showAddBoardDialog(); showAddBoardDialog();
return true; return true;
} }
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
@ -193,10 +194,10 @@ public class BoardEditor extends Activity {
} }
} }
}).setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { }).setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
} }
}).create().show(); }).create().show();
} }
private void showAddBoardDialog() { private void showAddBoardDialog() {

@ -17,8 +17,6 @@
*/ */
package org.floens.chan.ui.activity; package org.floens.chan.ui.activity;
import org.floens.chan.ChanApplication;
import android.app.Activity; import android.app.Activity;
import android.os.Bundle; import android.os.Bundle;
import android.view.View; import android.view.View;
@ -26,6 +24,8 @@ import android.widget.Button;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import org.floens.chan.ChanApplication;
public class DeveloperActivity extends Activity { public class DeveloperActivity extends Activity {
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {

@ -17,15 +17,6 @@
*/ */
package org.floens.chan.ui.activity; package org.floens.chan.ui.activity;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.floens.chan.ChanApplication;
import org.floens.chan.R;
import org.floens.chan.utils.IOUtils;
import android.app.Activity; import android.app.Activity;
import android.content.ActivityNotFoundException; import android.content.ActivityNotFoundException;
import android.content.Intent; import android.content.Intent;
@ -35,6 +26,15 @@ import android.os.Bundle;
import android.provider.OpenableColumns; import android.provider.OpenableColumns;
import android.widget.Toast; import android.widget.Toast;
import org.floens.chan.ChanApplication;
import org.floens.chan.R;
import org.floens.chan.utils.IOUtils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class ImagePickActivity extends Activity { public class ImagePickActivity extends Activity {
private static final int IMAGE_RESULT = 1; private static final int IMAGE_RESULT = 1;

@ -17,8 +17,14 @@
*/ */
package org.floens.chan.ui.activity; package org.floens.chan.ui.activity;
import java.util.ArrayList; import android.app.ActionBar;
import java.util.List; import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;
import org.floens.chan.R; import org.floens.chan.R;
import org.floens.chan.core.model.Post; import org.floens.chan.core.model.Post;
@ -28,14 +34,8 @@ import org.floens.chan.ui.fragment.ImageViewFragment;
import org.floens.chan.utils.ImageSaver; import org.floens.chan.utils.ImageSaver;
import org.floens.chan.utils.Logger; import org.floens.chan.utils.Logger;
import android.app.ActionBar; import java.util.ArrayList;
import android.app.Activity; import java.util.List;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;
/** /**
* An fragment pager that contains images. Call setPosts first, and then start * An fragment pager that contains images. Call setPosts first, and then start
@ -54,10 +54,8 @@ public class ImageViewActivity extends Activity implements ViewPager.OnPageChang
/** /**
* Set the posts to show * Set the posts to show
* *
* @param other * @param other the posts to get image data from
* the posts to get image data from * @param selected the no that the user clicked on
* @param selected
* the no that the user clicked on
*/ */
public static void setAdapter(PostAdapter adapter, int selected) { public static void setAdapter(PostAdapter adapter, int selected) {
postAdapter = adapter; postAdapter = adapter;

@ -17,14 +17,6 @@
*/ */
package org.floens.chan.ui.activity; package org.floens.chan.ui.activity;
import org.floens.chan.ChanApplication;
import org.floens.chan.R;
import org.floens.chan.core.ChanPreferences;
import org.floens.chan.core.manager.ReplyManager;
import org.floens.chan.core.manager.ReplyManager.PassResponse;
import org.floens.chan.core.model.Pass;
import org.floens.chan.utils.Utils;
import android.app.Activity; import android.app.Activity;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.app.Fragment; import android.app.Fragment;
@ -43,6 +35,14 @@ import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.Switch; import android.widget.Switch;
import android.widget.TextView; import android.widget.TextView;
import org.floens.chan.ChanApplication;
import org.floens.chan.R;
import org.floens.chan.core.ChanPreferences;
import org.floens.chan.core.manager.ReplyManager;
import org.floens.chan.core.manager.ReplyManager.PassResponse;
import org.floens.chan.core.model.Pass;
import org.floens.chan.utils.Utils;
public class PassSettingsActivity extends Activity implements OnCheckedChangeListener { public class PassSettingsActivity extends Activity implements OnCheckedChangeListener {
private static PassSettingsActivity instance; private static PassSettingsActivity instance;

@ -17,15 +17,15 @@
*/ */
package org.floens.chan.ui.activity; package org.floens.chan.ui.activity;
import org.floens.chan.core.model.Loadable;
import org.floens.chan.ui.fragment.ReplyFragment;
import org.floens.chan.utils.Logger;
import android.app.Activity; import android.app.Activity;
import android.app.FragmentTransaction; import android.app.FragmentTransaction;
import android.os.Bundle; import android.os.Bundle;
import android.view.MenuItem; import android.view.MenuItem;
import org.floens.chan.core.model.Loadable;
import org.floens.chan.ui.fragment.ReplyFragment;
import org.floens.chan.utils.Logger;
public class ReplyActivity extends Activity { public class ReplyActivity extends Activity {
private static final String TAG = "ReplyActivity"; private static final String TAG = "ReplyActivity";
@ -56,10 +56,10 @@ public class ReplyActivity extends Activity {
@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);

@ -17,11 +17,11 @@
*/ */
package org.floens.chan.ui.activity; package org.floens.chan.ui.activity;
import org.floens.chan.ui.fragment.SettingsFragment;
import android.app.Activity; import android.app.Activity;
import android.os.Bundle; import android.os.Bundle;
import org.floens.chan.ui.fragment.SettingsFragment;
public class SettingsActivity extends Activity { public class SettingsActivity extends Activity {
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {

@ -17,10 +17,6 @@
*/ */
package org.floens.chan.ui.activity; package org.floens.chan.ui.activity;
import org.floens.chan.R;
import org.floens.chan.core.ChanPreferences;
import org.floens.chan.utils.Utils;
import android.app.Activity; import android.app.Activity;
import android.app.Fragment; import android.app.Fragment;
import android.app.FragmentTransaction; import android.app.FragmentTransaction;
@ -42,6 +38,10 @@ import android.widget.LinearLayout;
import android.widget.Switch; import android.widget.Switch;
import android.widget.TextView; import android.widget.TextView;
import org.floens.chan.R;
import org.floens.chan.core.ChanPreferences;
import org.floens.chan.utils.Utils;
public class WatchSettingsActivity extends Activity implements OnCheckedChangeListener { public class WatchSettingsActivity extends Activity implements OnCheckedChangeListener {
private Switch watchSwitch; private Switch watchSwitch;

@ -17,19 +17,19 @@
*/ */
package org.floens.chan.ui.adapter; package org.floens.chan.ui.adapter;
import java.util.ArrayList;
import java.util.List;
import org.floens.chan.core.model.Post;
import org.floens.chan.ui.activity.ImageViewActivity;
import org.floens.chan.ui.fragment.ImageViewFragment;
import android.app.Fragment; import android.app.Fragment;
import android.app.FragmentManager; import android.app.FragmentManager;
import android.support.v13.app.FragmentStatePagerAdapter; import android.support.v13.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager;
import android.view.View; import android.view.View;
import org.floens.chan.core.model.Post;
import org.floens.chan.ui.activity.ImageViewActivity;
import org.floens.chan.ui.fragment.ImageViewFragment;
import java.util.ArrayList;
import java.util.List;
public class ImageViewAdapter extends FragmentStatePagerAdapter { public class ImageViewAdapter extends FragmentStatePagerAdapter {
private final ImageViewActivity activity; private final ImageViewActivity activity;
private final ArrayList<Post> postList = new ArrayList<Post>(); private final ArrayList<Post> postList = new ArrayList<Post>();

@ -17,14 +17,6 @@
*/ */
package org.floens.chan.ui.adapter; package org.floens.chan.ui.adapter;
import java.util.ArrayList;
import java.util.HashMap;
import org.floens.chan.ChanApplication;
import org.floens.chan.R;
import org.floens.chan.core.ChanPreferences;
import org.floens.chan.core.model.Pin;
import android.content.Context; import android.content.Context;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@ -34,6 +26,14 @@ import android.widget.FrameLayout;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import org.floens.chan.ChanApplication;
import org.floens.chan.R;
import org.floens.chan.core.ChanPreferences;
import org.floens.chan.core.model.Pin;
import java.util.ArrayList;
import java.util.HashMap;
public class PinnedAdapter extends ArrayAdapter<Pin> { public class PinnedAdapter extends ArrayAdapter<Pin> {
private final HashMap<Pin, Integer> idMap; private final HashMap<Pin, Integer> idMap;
private int idCounter; private int idCounter;

@ -17,8 +17,14 @@
*/ */
package org.floens.chan.ui.adapter; package org.floens.chan.ui.adapter;
import java.util.ArrayList; import android.content.Context;
import java.util.List; import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import org.floens.chan.R; import org.floens.chan.R;
import org.floens.chan.core.manager.ThreadManager; import org.floens.chan.core.manager.ThreadManager;
@ -29,14 +35,8 @@ import org.floens.chan.ui.view.ThreadWatchCounterView;
import org.floens.chan.utils.Time; import org.floens.chan.utils.Time;
import org.floens.chan.utils.Utils; import org.floens.chan.utils.Utils;
import android.content.Context; import java.util.ArrayList;
import android.view.Gravity; import java.util.List;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
public class PostAdapter extends BaseAdapter { public class PostAdapter extends BaseAdapter {
private final Context context; private final Context context;

@ -17,16 +17,6 @@
*/ */
package org.floens.chan.ui.fragment; package org.floens.chan.ui.fragment;
import org.floens.chan.R;
import org.floens.chan.core.ChanPreferences;
import org.floens.chan.core.model.Post;
import org.floens.chan.ui.activity.ImageViewActivity;
import org.floens.chan.ui.adapter.ImageViewAdapter;
import org.floens.chan.ui.view.ThumbnailImageView;
import org.floens.chan.ui.view.ThumbnailImageView.ThumbnailImageViewCallback;
import org.floens.chan.utils.ImageSaver;
import org.floens.chan.utils.Utils;
import android.app.Fragment; import android.app.Fragment;
import android.content.Context; import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
@ -37,6 +27,16 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.VideoView; import android.widget.VideoView;
import org.floens.chan.R;
import org.floens.chan.core.ChanPreferences;
import org.floens.chan.core.model.Post;
import org.floens.chan.ui.activity.ImageViewActivity;
import org.floens.chan.ui.adapter.ImageViewAdapter;
import org.floens.chan.ui.view.ThumbnailImageView;
import org.floens.chan.ui.view.ThumbnailImageView.ThumbnailImageViewCallback;
import org.floens.chan.utils.ImageSaver;
import org.floens.chan.utils.Utils;
public class ImageViewFragment extends Fragment implements ThumbnailImageViewCallback { public class ImageViewFragment extends Fragment implements ThumbnailImageViewCallback {
private Context context; private Context context;
private ImageViewActivity activity; private ImageViewActivity activity;

@ -17,13 +17,6 @@
*/ */
package org.floens.chan.ui.fragment; package org.floens.chan.ui.fragment;
import java.util.List;
import org.floens.chan.R;
import org.floens.chan.core.manager.ThreadManager;
import org.floens.chan.core.model.Post;
import org.floens.chan.ui.view.PostView;
import android.app.DialogFragment; import android.app.DialogFragment;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.os.Bundle; import android.os.Bundle;
@ -33,6 +26,13 @@ import android.view.ViewGroup;
import android.widget.ArrayAdapter; import android.widget.ArrayAdapter;
import android.widget.ListView; import android.widget.ListView;
import org.floens.chan.R;
import org.floens.chan.core.manager.ThreadManager;
import org.floens.chan.core.model.Post;
import org.floens.chan.ui.view.PostView;
import java.util.List;
/** /**
* A DialogFragment that shows a list of posts. Use the newInstance method for * A DialogFragment that shows a list of posts. Use the newInstance method for
* instantiating. * instantiating.

@ -17,22 +17,6 @@
*/ */
package org.floens.chan.ui.fragment; package org.floens.chan.ui.fragment;
import java.io.File;
import org.floens.chan.ChanApplication;
import org.floens.chan.R;
import org.floens.chan.chan.ChanUrls;
import org.floens.chan.core.ChanPreferences;
import org.floens.chan.core.manager.ReplyManager;
import org.floens.chan.core.manager.ReplyManager.ReplyResponse;
import org.floens.chan.core.model.Loadable;
import org.floens.chan.core.model.Reply;
import org.floens.chan.ui.ViewFlipperAnimations;
import org.floens.chan.ui.view.LoadView;
import org.floens.chan.utils.ImageDecoder;
import org.floens.chan.utils.Logger;
import org.floens.chan.utils.Utils;
import android.app.Activity; import android.app.Activity;
import android.app.Dialog; import android.app.Dialog;
import android.app.DialogFragment; import android.app.DialogFragment;
@ -65,6 +49,22 @@ import com.android.volley.toolbox.NetworkImageView;
import com.android.volley.toolbox.StringRequest; import com.android.volley.toolbox.StringRequest;
import com.micromobs.android.floatlabel.FloatLabelEditText; import com.micromobs.android.floatlabel.FloatLabelEditText;
import org.floens.chan.ChanApplication;
import org.floens.chan.R;
import org.floens.chan.chan.ChanUrls;
import org.floens.chan.core.ChanPreferences;
import org.floens.chan.core.manager.ReplyManager;
import org.floens.chan.core.manager.ReplyManager.ReplyResponse;
import org.floens.chan.core.model.Loadable;
import org.floens.chan.core.model.Reply;
import org.floens.chan.ui.ViewFlipperAnimations;
import org.floens.chan.ui.view.LoadView;
import org.floens.chan.utils.ImageDecoder;
import org.floens.chan.utils.Logger;
import org.floens.chan.utils.Utils;
import java.io.File;
public class ReplyFragment extends DialogFragment { public class ReplyFragment extends DialogFragment {
private static final String TAG = "ReplyFragment"; private static final String TAG = "ReplyFragment";
@ -314,9 +314,8 @@ public class ReplyFragment extends DialogFragment {
/** /**
* Flip to an page with an animation. Sets the correct text on the * Flip to an page with an animation. Sets the correct text on the
* cancelButton: * cancelButton:
* *
* @param position * @param position 0-2
* 0-2
*/ */
private void flipPage(int position) { private void flipPage(int position) {
boolean flipBack = position < page; boolean flipBack = position < page;
@ -345,9 +344,8 @@ public class ReplyFragment extends DialogFragment {
/** /**
* Set the picked image in the imageView. Sets the file in the draft. Call * Set the picked image in the imageView. Sets the file in the draft. Call
* null on the file to empty the imageView. * null on the file to empty the imageView.
* *
* @param imagePath * @param imagePath file to image to send or null to clear
* file to image to send or null to clear
*/ */
private void setFile(final String name, final File file) { private void setFile(final String name, final File file) {
draft.file = file; draft.file = file;
@ -487,7 +485,7 @@ public class ReplyFragment extends DialogFragment {
/** /**
* Got response about or reply from ReplyManager * Got response about or reply from ReplyManager
* *
* @param response * @param response
*/ */
private void handleSubmitResponse(ReplyResponse response) { private void handleSubmitResponse(ReplyResponse response) {

@ -17,10 +17,6 @@
*/ */
package org.floens.chan.ui.fragment; package org.floens.chan.ui.fragment;
import org.floens.chan.R;
import org.floens.chan.core.ChanPreferences;
import org.floens.chan.ui.activity.AboutActivity;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle; import android.os.Bundle;
@ -30,6 +26,10 @@ import android.preference.PreferenceFragment;
import android.preference.PreferenceGroup; import android.preference.PreferenceGroup;
import android.widget.Toast; import android.widget.Toast;
import org.floens.chan.R;
import org.floens.chan.core.ChanPreferences;
import org.floens.chan.ui.activity.AboutActivity;
public class SettingsFragment extends PreferenceFragment { public class SettingsFragment extends PreferenceFragment {
private int clickCount = 0; private int clickCount = 0;

@ -17,19 +17,6 @@
*/ */
package org.floens.chan.ui.fragment; package org.floens.chan.ui.fragment;
import java.util.List;
import org.floens.chan.R;
import org.floens.chan.core.loader.EndOfLineException;
import org.floens.chan.core.manager.ThreadManager;
import org.floens.chan.core.model.Loadable;
import org.floens.chan.core.model.Post;
import org.floens.chan.ui.activity.BaseActivity;
import org.floens.chan.ui.activity.ImageViewActivity;
import org.floens.chan.ui.adapter.PostAdapter;
import org.floens.chan.ui.view.LoadView;
import org.floens.chan.utils.Utils;
import android.app.Fragment; import android.app.Fragment;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
@ -49,6 +36,19 @@ import com.android.volley.NoConnectionError;
import com.android.volley.ServerError; import com.android.volley.ServerError;
import com.android.volley.VolleyError; import com.android.volley.VolleyError;
import org.floens.chan.R;
import org.floens.chan.core.loader.EndOfLineException;
import org.floens.chan.core.manager.ThreadManager;
import org.floens.chan.core.model.Loadable;
import org.floens.chan.core.model.Post;
import org.floens.chan.ui.activity.BaseActivity;
import org.floens.chan.ui.activity.ImageViewActivity;
import org.floens.chan.ui.adapter.PostAdapter;
import org.floens.chan.ui.view.LoadView;
import org.floens.chan.utils.Utils;
import java.util.List;
public class ThreadFragment extends Fragment implements ThreadManager.ThreadManagerListener { public class ThreadFragment extends Fragment implements ThreadManager.ThreadManagerListener {
private BaseActivity baseActivity; private BaseActivity baseActivity;
private ThreadManager threadManager; private ThreadManager threadManager;
@ -229,7 +229,7 @@ public class ThreadFragment extends Fragment implements ThreadManager.ThreadMana
/** /**
* Returns an TextView containing the appropriate error message * Returns an TextView containing the appropriate error message
* *
* @param error * @param error
* @return * @return
*/ */

@ -28,12 +28,14 @@ import com.android.volley.toolbox.ImageLoader.ImageListener;
/** /**
* Custom version of NetworkImageView * Custom version of NetworkImageView
* *
* Handles fetching an image from a URL as well as the life-cycle of the * Handles fetching an image from a URL as well as the life-cycle of the
* associated request. * associated request.
*/ */
public class CustomNetworkImageView extends ImageView { public class CustomNetworkImageView extends ImageView {
/** The URL of the network image to load */ /**
* The URL of the network image to load
*/
private String mUrl; private String mUrl;
/** /**
@ -47,10 +49,14 @@ public class CustomNetworkImageView extends ImageView {
*/ */
private int mErrorImageId; private int mErrorImageId;
/** Local copy of the ImageLoader. */ /**
* Local copy of the ImageLoader.
*/
private ImageLoader mImageLoader; private ImageLoader mImageLoader;
/** Current ImageContainer. (either in-flight or finished) */ /**
* Current ImageContainer. (either in-flight or finished)
*/
private ImageContainer mImageContainer; private ImageContainer mImageContainer;
/** /**
@ -74,7 +80,7 @@ public class CustomNetworkImageView extends ImageView {
/** /**
* How larger the inner bitmap is to the defined view size. * How larger the inner bitmap is to the defined view size.
* *
* @param amount * @param amount
*/ */
public void setMaxScale(float amount) { public void setMaxScale(float amount) {
@ -87,9 +93,8 @@ public class CustomNetworkImageView extends ImageView {
/** /**
* Animate the image fading in. * Animate the image fading in.
* *
* @param duration * @param duration duration of the fade animation in milliseconds
* duration of the fade animation in milliseconds
*/ */
public void setFadeIn(int time) { public void setFadeIn(int time) {
mFadeTime = time; mFadeTime = time;
@ -100,16 +105,14 @@ public class CustomNetworkImageView extends ImageView {
* calling this will immediately either set the cached image (if available) * calling this will immediately either set the cached image (if available)
* or the default image specified by * or the default image specified by
* {@link CustomNetworkImageView#setDefaultImageResId(int)} on the view. * {@link CustomNetworkImageView#setDefaultImageResId(int)} on the view.
* *
* NOTE: If applicable, * NOTE: If applicable,
* {@link CustomNetworkImageView#setDefaultImageResId(int)} and * {@link CustomNetworkImageView#setDefaultImageResId(int)} and
* {@link CustomNetworkImageView#setErrorImageResId(int)} should be called * {@link CustomNetworkImageView#setErrorImageResId(int)} should be called
* prior to calling this function. * prior to calling this function.
* *
* @param url * @param url The URL that should be loaded into this ImageView.
* The URL that should be loaded into this ImageView. * @param imageLoader ImageLoader that will be used to make the request.
* @param imageLoader
* ImageLoader that will be used to make the request.
*/ */
public void setImageUrl(String url, ImageLoader imageLoader) { public void setImageUrl(String url, ImageLoader imageLoader) {
mUrl = url; mUrl = url;
@ -139,9 +142,8 @@ public class CustomNetworkImageView extends ImageView {
/** /**
* Loads the image for the view if it isn't already loaded. * Loads the image for the view if it isn't already loaded.
* *
* @param isInLayoutPass * @param isInLayoutPass True if this was invoked from a layout pass, false otherwise.
* True if this was invoked from a layout pass, false otherwise.
*/ */
void loadImageIfNecessary(final boolean isInLayoutPass) { void loadImageIfNecessary(final boolean isInLayoutPass) {
int width = getWidth(); int width = getWidth();

@ -44,7 +44,7 @@ public class DragGripView extends View {
private final float mRidgeSize; private final float mRidgeSize;
private final float mRidgeGap; private final float mRidgeGap;
// private int mWidth; // private int mWidth;
private int mHeight; private int mHeight;
public DragGripView(Context context) { public DragGripView(Context context) {
@ -77,10 +77,12 @@ public class DragGripView extends View {
View.resolveSize( View.resolveSize(
(int) (HORIZ_RIDGES * (mRidgeSize + mRidgeGap) - mRidgeGap) (int) (HORIZ_RIDGES * (mRidgeSize + mRidgeGap) - mRidgeGap)
+ getPaddingLeft() + getPaddingRight(), + getPaddingLeft() + getPaddingRight(),
widthMeasureSpec), widthMeasureSpec
),
View.resolveSize( View.resolveSize(
(int) mRidgeSize, (int) mRidgeSize,
heightMeasureSpec)); heightMeasureSpec)
);
} }
@Override @Override

@ -17,8 +17,6 @@
*/ */
package org.floens.chan.ui.view; package org.floens.chan.ui.view;
import org.floens.chan.utils.SimpleAnimatorListener;
import android.animation.Animator; import android.animation.Animator;
import android.content.Context; import android.content.Context;
import android.util.AttributeSet; import android.util.AttributeSet;
@ -28,6 +26,8 @@ import android.widget.FrameLayout;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.ProgressBar; import android.widget.ProgressBar;
import org.floens.chan.utils.SimpleAnimatorListener;
/** /**
* Container for a view with an ProgressBar. Toggles between the view and a * Container for a view with an ProgressBar. Toggles between the view and a
* ProgressBar. * ProgressBar.
@ -58,8 +58,7 @@ public class LoadView extends FrameLayout {
* Set the content of this container. It will fade the old one out with the * Set the content of this container. It will fade the old one out with the
* new one. Set view to null to show the progressbar. * new one. Set view to null to show the progressbar.
* *
* @param view * @param view the view or null for a progressbar.
* the view or null for a progressbar.
*/ */
public void setView(View view) { public void setView(View view) {
setView(view, true); setView(view, true);

@ -17,17 +17,18 @@
*/ */
package org.floens.chan.ui.view; package org.floens.chan.ui.view;
import org.floens.chan.R;
import org.floens.chan.ui.fragment.ImageViewFragment;
import uk.co.senab.photoview.PhotoViewAttacher;
import uk.co.senab.photoview.PhotoViewAttacher.OnViewTapListener;
import android.content.Context; import android.content.Context;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.widget.Toast; import android.widget.Toast;
import com.android.volley.VolleyError; import com.android.volley.VolleyError;
import org.floens.chan.R;
import org.floens.chan.ui.fragment.ImageViewFragment;
import uk.co.senab.photoview.PhotoViewAttacher;
import uk.co.senab.photoview.PhotoViewAttacher.OnViewTapListener;
/** /**
* Extends NetworkImageView. Attaches a PhotoViewAttacher when setBitmap is * Extends NetworkImageView. Attaches a PhotoViewAttacher when setBitmap is
* called. Sets the progressBar to false when a bitmap gets set. * called. Sets the progressBar to false when a bitmap gets set.

@ -17,16 +17,6 @@
*/ */
package org.floens.chan.ui.view; package org.floens.chan.ui.view;
import org.floens.chan.ChanApplication;
import org.floens.chan.R;
import org.floens.chan.chan.ChanUrls;
import org.floens.chan.core.manager.ThreadManager;
import org.floens.chan.core.model.Post;
import org.floens.chan.core.model.PostLinkable;
import org.floens.chan.utils.IconCache;
import org.floens.chan.utils.Time;
import org.floens.chan.utils.Utils;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.res.Resources; import android.content.res.Resources;
@ -50,6 +40,16 @@ import android.widget.TextView;
import com.android.volley.toolbox.NetworkImageView; import com.android.volley.toolbox.NetworkImageView;
import org.floens.chan.ChanApplication;
import org.floens.chan.R;
import org.floens.chan.chan.ChanUrls;
import org.floens.chan.core.manager.ThreadManager;
import org.floens.chan.core.model.Post;
import org.floens.chan.core.model.PostLinkable;
import org.floens.chan.utils.IconCache;
import org.floens.chan.utils.Time;
import org.floens.chan.utils.Utils;
public class PostView extends LinearLayout implements View.OnClickListener, View.OnLongClickListener { public class PostView extends LinearLayout implements View.OnClickListener, View.OnLongClickListener {
private final static LinearLayout.LayoutParams matchParams = new LinearLayout.LayoutParams( private final static LinearLayout.LayoutParams matchParams = new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);

@ -17,10 +17,6 @@
*/ */
package org.floens.chan.ui.view; package org.floens.chan.ui.view;
import org.floens.chan.core.loader.Loader;
import org.floens.chan.core.manager.ThreadManager;
import org.floens.chan.ui.adapter.PostAdapter;
import android.content.Context; import android.content.Context;
import android.os.Handler; import android.os.Handler;
import android.util.AttributeSet; import android.util.AttributeSet;
@ -28,6 +24,10 @@ import android.view.View;
import android.widget.ListView; import android.widget.ListView;
import android.widget.TextView; import android.widget.TextView;
import org.floens.chan.core.loader.Loader;
import org.floens.chan.core.manager.ThreadManager;
import org.floens.chan.ui.adapter.PostAdapter;
public class ThreadWatchCounterView extends TextView implements View.OnClickListener { public class ThreadWatchCounterView extends TextView implements View.OnClickListener {
private boolean detached = false; private boolean detached = false;
private ThreadManager tm; private ThreadManager tm;

@ -17,17 +17,6 @@
*/ */
package org.floens.chan.ui.view; package org.floens.chan.ui.view;
import java.io.File;
import org.floens.chan.ChanApplication;
import org.floens.chan.R;
import org.floens.chan.core.net.FileRequest;
import org.floens.chan.core.net.GIFRequest;
import org.floens.chan.utils.Logger;
import org.floens.chan.utils.Utils;
import uk.co.senab.photoview.PhotoViewAttacher;
import uk.co.senab.photoview.PhotoViewAttacher.OnViewTapListener;
import android.content.Context; import android.content.Context;
import android.media.MediaPlayer; import android.media.MediaPlayer;
import android.media.MediaPlayer.OnPreparedListener; import android.media.MediaPlayer.OnPreparedListener;
@ -44,6 +33,18 @@ import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageLoader.ImageContainer; import com.android.volley.toolbox.ImageLoader.ImageContainer;
import com.android.volley.toolbox.ImageLoader.ImageListener; import com.android.volley.toolbox.ImageLoader.ImageListener;
import org.floens.chan.ChanApplication;
import org.floens.chan.R;
import org.floens.chan.core.net.FileRequest;
import org.floens.chan.core.net.GIFRequest;
import org.floens.chan.utils.Logger;
import org.floens.chan.utils.Utils;
import java.io.File;
import uk.co.senab.photoview.PhotoViewAttacher;
import uk.co.senab.photoview.PhotoViewAttacher.OnViewTapListener;
public class ThumbnailImageView extends LoadView implements OnViewTapListener, View.OnClickListener { public class ThumbnailImageView extends LoadView implements OnViewTapListener, View.OnClickListener {
private static final String TAG = "ThumbnailImageView"; private static final String TAG = "ThumbnailImageView";
@ -171,7 +172,8 @@ public class ThumbnailImageView extends LoadView implements OnViewTapListener, V
public void onErrorResponse(VolleyError error) { public void onErrorResponse(VolleyError error) {
onError(); onError();
} }
}, getContext())); }, getContext())
);
} }
public void setVideo(String videoUrl) { public void setVideo(String videoUrl) {
@ -228,7 +230,8 @@ public class ThumbnailImageView extends LoadView implements OnViewTapListener, V
public void onErrorResponse(VolleyError error) { public void onErrorResponse(VolleyError error) {
onError(); onError();
} }
})); })
);
} }
@Override @Override

@ -17,12 +17,12 @@
*/ */
package org.floens.chan.utils; package org.floens.chan.utils;
import org.floens.chan.R;
import android.content.Context; import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.BitmapFactory; import android.graphics.BitmapFactory;
import org.floens.chan.R;
public class IconCache { public class IconCache {
public static Bitmap stickyIcon; public static Bitmap stickyIcon;
public static Bitmap closedIcon; public static Bitmap closedIcon;

@ -17,15 +17,15 @@
*/ */
package org.floens.chan.utils; package org.floens.chan.utils;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
/** /**
* Simple ImageDecoder with no threads. Taken from Volley ImageRequest. * Simple ImageDecoder with no threads. Taken from Volley ImageRequest.
*/ */

@ -17,16 +17,6 @@
*/ */
package org.floens.chan.utils; package org.floens.chan.utils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import org.floens.chan.ChanApplication;
import org.floens.chan.R;
import org.floens.chan.core.ChanPreferences;
import org.floens.chan.core.net.ByteArrayRequest;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.app.DownloadManager; import android.app.DownloadManager;
import android.content.Context; import android.content.Context;
@ -40,6 +30,16 @@ import android.widget.Toast;
import com.android.volley.Response; import com.android.volley.Response;
import com.android.volley.VolleyError; import com.android.volley.VolleyError;
import org.floens.chan.ChanApplication;
import org.floens.chan.R;
import org.floens.chan.core.ChanPreferences;
import org.floens.chan.core.net.ByteArrayRequest;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
public class ImageSaver { public class ImageSaver {
private static final String TAG = "ImageSaver"; private static final String TAG = "ImageSaver";
@ -88,7 +88,7 @@ public class ImageSaver {
} }
public static void save(final Context context, String imageUrl, final String name, final String extension, public static void save(final Context context, String imageUrl, final String name, final String extension,
final boolean share) { final boolean share) {
ChanApplication.getVolleyRequestQueue().add(new ByteArrayRequest(imageUrl, new Response.Listener<byte[]>() { ChanApplication.getVolleyRequestQueue().add(new ByteArrayRequest(imageUrl, new Response.Listener<byte[]>() {
@Override @Override
public void onResponse(byte[] data) { public void onResponse(byte[] data) {
@ -117,7 +117,7 @@ public class ImageSaver {
} }
private static void storeImage(final Context context, byte[] data, String name, String extension, private static void storeImage(final Context context, byte[] data, String name, String extension,
final SaveCallback callback) { final SaveCallback callback) {
String errorReason = null; String errorReason = null;
try { try {
@ -142,7 +142,7 @@ public class ImageSaver {
throw new IOException(errorReason); throw new IOException(errorReason);
} }
MediaScannerConnection.scanFile(context, new String[] { savedFile.toString() }, null, MediaScannerConnection.scanFile(context, new String[]{savedFile.toString()}, null,
new MediaScannerConnection.OnScanCompletedListener() { new MediaScannerConnection.OnScanCompletedListener() {
@Override @Override
public void onScanCompleted(String path, final Uri uri) { public void onScanCompleted(String path, final Uri uri) {
@ -154,7 +154,8 @@ public class ImageSaver {
} }
}); });
} }
}); }
);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();

@ -17,10 +17,10 @@
*/ */
package org.floens.chan.utils; package org.floens.chan.utils;
import org.floens.chan.ChanApplication;
import android.util.Log; import android.util.Log;
import org.floens.chan.ChanApplication;
public class Logger { public class Logger {
private static final String TAG = "Clover"; private static final String TAG = "Clover";
private static final String TAG_SPACER = " | "; private static final String TAG_SPACER = " | ";

@ -17,9 +17,6 @@
*/ */
package org.floens.chan.utils; package org.floens.chan.utils;
import org.floens.chan.ChanApplication;
import org.floens.chan.R;
import android.app.Dialog; import android.app.Dialog;
import android.content.ActivityNotFoundException; import android.content.ActivityNotFoundException;
import android.content.Context; import android.content.Context;
@ -37,6 +34,9 @@ import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
import android.widget.Toast; import android.widget.Toast;
import org.floens.chan.ChanApplication;
import org.floens.chan.R;
public class Utils { public class Utils {
private static DisplayMetrics displayMetrics; private static DisplayMetrics displayMetrics;
@ -61,7 +61,7 @@ public class Utils {
/** /**
* Sets the android.R.attr.selectableItemBackground as background drawable * Sets the android.R.attr.selectableItemBackground as background drawable
* on the view. * on the view.
* *
* @param view * @param view
*/ */
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
@ -71,7 +71,7 @@ public class Utils {
} }
public static Drawable getSelectableBackgroundDrawable(Context context) { public static Drawable getSelectableBackgroundDrawable(Context context) {
TypedArray arr = context.obtainStyledAttributes(new int[] { android.R.attr.selectableItemBackground }); TypedArray arr = context.obtainStyledAttributes(new int[]{android.R.attr.selectableItemBackground});
Drawable drawable = arr.getDrawable(0); Drawable drawable = arr.getDrawable(0);
@ -83,7 +83,7 @@ public class Utils {
/** /**
* Causes the runnable to be added to the message queue. The runnable will * Causes the runnable to be added to the message queue. The runnable will
* be run on the ui thread. * be run on the ui thread.
* *
* @param runnable * @param runnable
*/ */
public static void runOnUiThread(Runnable runnable) { public static void runOnUiThread(Runnable runnable) {

Loading…
Cancel
Save