Added a red bar below the last seen post for pins.

captchafix
Florens Douwes 11 years ago
parent b8f32f4406
commit c44a631445
  1. 36
      Chan/src/org/floens/chan/core/manager/ThreadManager.java
  2. 8
      Chan/src/org/floens/chan/core/model/Pin.java
  3. 9
      Chan/src/org/floens/chan/core/watch/PinWatcher.java
  4. 3
      Chan/src/org/floens/chan/ui/adapter/PinnedAdapter.java
  5. 42
      Chan/src/org/floens/chan/ui/view/PostView.java

@ -50,7 +50,9 @@ public class ThreadManager implements Loader.LoaderListener {
private final ThreadManager.ThreadManagerListener threadManagerListener;
private final List<List<Post>> popupQueue = new ArrayList<List<Post>>();
private PostRepliesFragment currentPopupFragment;
private Post highlightedPost;
private int highlightedPost = -1;
private int lastSeenPost = -1;
private int lastPost = -1;
private Loader loader;
@ -98,7 +100,9 @@ public class ThreadManager implements Loader.LoaderListener {
Logger.e(TAG, "Loader already unbinded");
}
highlightedPost = null;
highlightedPost = -1;
lastSeenPost = -1;
lastPost = -1;
}
public void bottomPostViewed() {
@ -107,6 +111,8 @@ public class ThreadManager implements Loader.LoaderListener {
if (pin != null) {
ChanApplication.getPinnedManager().onPinViewed(pin);
}
updateLastSeen();
}
}
@ -145,6 +151,11 @@ public class ThreadManager implements Loader.LoaderListener {
loader.setAutoLoadMore(false);
}
if (result.size() > 0) {
lastPost = result.get(result.size() - 1).no;
}
updateLastSeen();
threadManagerListener.onThreadLoaded(result, append);
}
@ -245,11 +256,15 @@ public class ThreadManager implements Loader.LoaderListener {
}
public void highlightPost(Post post) {
highlightedPost = post;
highlightedPost = post.no;
}
public boolean isPostHightlighted(Post post) {
return highlightedPost != null && post.board.equals(highlightedPost.board) && post.no == highlightedPost.no;
return highlightedPost >= 0 && post.no == highlightedPost;
}
public boolean isPostLastSeen(Post post) {
return post.no == lastSeenPost && post.no != lastPost;
}
private void copyToClipboard(String comment) {
@ -522,6 +537,19 @@ public class ThreadManager implements Loader.LoaderListener {
});
}
private void updateLastSeen() {
Pin pin = ChanApplication.getPinnedManager().findPinByLoadable(loader.getLoadable());
if (pin != null) {
Post last = pin.getLastSeenPost();
if (last != null) {
lastSeenPost = last.no;
Logger.test("Setting as last seen post " + last.no);
} else {
lastSeenPost = -1;
}
}
}
public interface ThreadManagerListener {
public void onThreadLoaded(List<Post> result, boolean append);

@ -60,6 +60,14 @@ public class Pin {
}
}
public Post getLastSeenPost() {
if (pinWatcher == null) {
return null;
} else {
return pinWatcher.getLastSeenPost();
}
}
public void updateWatch() {
if (pinWatcher == null) {
pinWatcher = new PinWatcher(this);

@ -71,6 +71,15 @@ public class PinWatcher implements Loader.LoaderListener {
}
}
public Post getLastSeenPost() {
int i = posts.size() - pin.getNewPostsCount() - 1;
if (i >= 0 && i < posts.size()) {
return posts.get(i);
} else {
return null;
}
}
public boolean isError() {
return isError;
}

@ -7,7 +7,6 @@ import org.floens.chan.ChanApplication;
import org.floens.chan.R;
import org.floens.chan.core.ChanPreferences;
import org.floens.chan.core.model.Pin;
import org.floens.chan.core.watch.PinWatcher;
import android.content.Context;
import android.view.LayoutInflater;
@ -51,8 +50,6 @@ public class PinnedAdapter extends ArrayAdapter<Pin> {
TextView itemCount = (TextView) view.findViewById(R.id.drawer_item_count);
PinWatcher watcher = item.getPinWatcher();
if (item.isError()) {
itemCount.setText("Err");
} else {

@ -33,10 +33,14 @@ import android.widget.TextView;
import com.android.volley.toolbox.NetworkImageView;
public class PostView extends LinearLayout implements View.OnClickListener, View.OnLongClickListener {
private final static LinearLayout.LayoutParams matchParams = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
private final static LinearLayout.LayoutParams wrapParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
private final static LinearLayout.LayoutParams matchWrapParams = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
private final static LinearLayout.LayoutParams wrapMatchParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
private final static LinearLayout.LayoutParams matchParams = new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
private final static LinearLayout.LayoutParams wrapParams = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
private final static LinearLayout.LayoutParams matchWrapParams = new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
private final static LinearLayout.LayoutParams wrapMatchParams = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
private final Activity context;
@ -54,11 +58,12 @@ public class PostView extends LinearLayout implements View.OnClickListener, View
private ImageView stickyView;
private ImageView closedView;
private NetworkImageView countryView;
private View lastSeen;
/**
* Represents a post.
* Use setPost(Post ThreadManager) to fill it with data.
* Represents a post. Use setPost(Post ThreadManager) to fill it with data.
* setPost can be called multiple times (useful for ListView).
*
* @param activity
*/
public PostView(Context activity) {
@ -212,13 +217,20 @@ public class PostView extends LinearLayout implements View.OnClickListener, View
full.setBackgroundColor(0x00000000);
}
if (manager.isPostLastSeen(post)) {
lastSeen.setVisibility(View.VISIBLE);
} else {
lastSeen.setVisibility(View.GONE);
}
if (manager.getLoadable().isBoardMode()) {
Utils.setPressedDrawable(right);
}
}
private void buildView(final Context context) {
if (isBuild) return;
if (isBuild)
return;
isBuild = true;
Resources resources = context.getResources();
@ -302,6 +314,10 @@ public class PostView extends LinearLayout implements View.OnClickListener, View
right.addView(repliesCountView, wrapParams);
lastSeen = new View(context);
lastSeen.setBackgroundColor(0xffff0000);
right.addView(lastSeen, new LayoutParams(LayoutParams.MATCH_PARENT, Utils.dp(context, 6f)));
full.addView(right, matchWrapParams);
addView(full, matchParams);
@ -336,8 +352,7 @@ public class PostView extends LinearLayout implements View.OnClickListener, View
public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) {
int action = event.getAction();
if (action == MotionEvent.ACTION_UP ||
action == MotionEvent.ACTION_DOWN) {
if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_DOWN) {
int x = (int) event.getX();
int y = (int) event.getY();
@ -357,9 +372,7 @@ public class PostView extends LinearLayout implements View.OnClickListener, View
if (action == MotionEvent.ACTION_UP) {
link[0].onClick(widget);
} else if (action == MotionEvent.ACTION_DOWN) {
Selection.setSelection(buffer,
buffer.getSpanStart(link[0]),
buffer.getSpanEnd(link[0]));
Selection.setSelection(buffer, buffer.getSpanStart(link[0]), buffer.getSpanEnd(link[0]));
}
return true;
@ -379,8 +392,3 @@ public class PostView extends LinearLayout implements View.OnClickListener, View
}
}
}

Loading…
Cancel
Save