Organized PostView styles

Fixed pressed drawable
captchafix
Florens Douwes 11 years ago
parent 1fe96ef4e9
commit 34cba6eb69
  1. 2
      Clover/app/src/main/java/org/floens/chan/core/manager/ThreadManager.java
  2. 4
      Clover/app/src/main/java/org/floens/chan/ui/adapter/PostAdapter.java
  3. 11
      Clover/app/src/main/java/org/floens/chan/ui/fragment/ThreadFragment.java
  4. 143
      Clover/app/src/main/java/org/floens/chan/ui/view/PostView.java
  5. 1
      Clover/app/src/main/java/org/floens/chan/utils/ThemeHelper.java
  6. 27
      Clover/app/src/main/res/values/attrs.xml
  7. 17
      Clover/app/src/main/res/values/dimens.xml
  8. 29
      Clover/app/src/main/res/values/styles.xml

@ -506,7 +506,7 @@ public class ThreadManager implements Loader.LoaderListener {
private void deletePost(final Post post) {
final CheckBox view = new CheckBox(activity);
view.setText(R.string.delete_image_only);
int padding = activity.getResources().getDimensionPixelSize(R.dimen.general_padding);
int padding = Utils.dp(12f);
view.setPadding(padding, padding, padding, padding);
new AlertDialog.Builder(activity).setTitle(R.string.delete_confirm).setView(view)

@ -115,7 +115,7 @@ public class PostAdapter extends BaseAdapter {
ThreadWatchCounterView view = new ThreadWatchCounterView(context);
Utils.setPressedDrawable(view);
view.init(threadManager, listView, this);
int padding = context.getResources().getDimensionPixelSize(R.dimen.general_padding);
int padding = Utils.dp(12f);
view.setPadding(padding, padding, padding, padding);
int height = Utils.dp(48f);
view.setHeight(height);
@ -125,7 +125,7 @@ public class PostAdapter extends BaseAdapter {
if (endOfLine) {
TextView textView = new TextView(context);
textView.setText(context.getString(R.string.thread_load_end_of_line));
int padding = context.getResources().getDimensionPixelSize(R.dimen.general_padding);
int padding = Utils.dp(12f);
textView.setPadding(padding, padding, padding, padding);
return textView;
} else {

@ -19,6 +19,7 @@ package org.floens.chan.ui.fragment;
import android.app.Fragment;
import android.content.Intent;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
@ -196,9 +197,13 @@ public class ThreadFragment extends Fragment implements ThreadManager.ThreadMana
} else if (viewMode == ThreadManager.ViewMode.GRID) {
GridView grid = new GridView(baseActivity);
grid.setNumColumns(GridView.AUTO_FIT);
grid.setColumnWidth(baseActivity.getResources().getDimensionPixelSize(R.dimen.post_grid_width));
grid.setVerticalSpacing(baseActivity.getResources().getDimensionPixelSize(R.dimen.post_grid_spacing));
grid.setHorizontalSpacing(baseActivity.getResources().getDimensionPixelSize(R.dimen.post_grid_spacing));
TypedArray ta = baseActivity.obtainStyledAttributes(null, R.styleable.PostView, R.attr.post_style, 0);
int postGridWidth = ta.getDimensionPixelSize(R.styleable.PostView_grid_width, 0);
int postGridSpacing = ta.getDimensionPixelSize(R.styleable.PostView_grid_spacing, 0);
ta.recycle();
grid.setColumnWidth(postGridWidth);
grid.setVerticalSpacing(postGridSpacing);
grid.setHorizontalSpacing(postGridSpacing);
listView = grid;
postAdapter = new PostAdapter(baseActivity, threadManager, listView);
listView.setAdapter(postAdapter);

@ -19,7 +19,6 @@ package org.floens.chan.ui.view;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.text.Layout;
import android.text.Selection;
@ -85,12 +84,6 @@ public class PostView extends LinearLayout implements View.OnClickListener {
private ImageView optionsView;
private View lastSeen;
private int thumbnailBackground;
private int savedReplyColor;
private int highlightedColor;
private int replyCountColor;
private int dateColor;
/**
* Represents a post. Use setPost(Post ThreadManager) to fill it with data.
* setPost can be called multiple times (useful for ListView).
@ -100,19 +93,16 @@ public class PostView extends LinearLayout implements View.OnClickListener {
public PostView(Context activity) {
super(activity);
context = (Activity) activity;
init();
}
public PostView(Context activity, AttributeSet attbs) {
super(activity, attbs);
context = (Activity) activity;
init();
}
public PostView(Context activity, AttributeSet attbs, int style) {
super(activity, attbs, style);
context = (Activity) activity;
init();
}
@Override
@ -129,14 +119,23 @@ public class PostView extends LinearLayout implements View.OnClickListener {
this.manager = manager;
boolean boardCatalogMode = manager.getLoadable().isBoardMode() || manager.getLoadable().isCatalogMode();
post.setLinkableListener(null);
TypedArray ta = context.obtainStyledAttributes(null, R.styleable.PostView, R.attr.post_style, 0);
if (!post.parsedSpans) {
parseSpans(post, ta);
post.parsedSpans = true;
parseSpans(post);
}
buildView(context);
if (!isBuild) {
buildView(context, ta);
isBuild = true;
}
int dateColor = ta.getColor(R.styleable.PostView_date_color, 0);
int savedReplyColor = ta.getColor(R.styleable.PostView_saved_reply_color, 0);
int highlightedColor = ta.getColor(R.styleable.PostView_highlighted_color, 0);
ta.recycle();
if (post.hasImage) {
imageView.setVisibility(View.VISIBLE);
@ -189,24 +188,17 @@ public class PostView extends LinearLayout implements View.OnClickListener {
titleView.setVisibility(View.GONE);
}
if (!TextUtils.isEmpty(post.comment)) {
commentView.setVisibility(View.VISIBLE);
commentView.setText(post.comment);
if (manager.getLoadable().isThreadMode()) {
commentView.setMovementMethod(new PostViewMovementMethod());
}
commentView.setText(post.comment);
if (manager.getLoadable().isThreadMode()) {
post.setLinkableListener(this);
commentView.setMovementMethod(new PostViewMovementMethod());
commentView.setOnClickListener(this);
if (manager.getLoadable().isThreadMode()) {
post.setLinkableListener(this);
}
} else {
commentView.setVisibility(View.GONE);
commentView.setText("");
commentView.setOnClickListener(null);
post.setLinkableListener(null);
commentView.setOnClickListener(null);
commentView.setClickable(false);
commentView.setMovementMethod(null);
}
if (isGrid() || ((post.isOP && boardCatalogMode && post.replies > 0) || (post.repliesFrom.size() > 0))) {
@ -276,18 +268,8 @@ public class PostView extends LinearLayout implements View.OnClickListener {
}
}
private void init() {
TypedArray ta = context.obtainStyledAttributes(null, R.styleable.PostView, R.attr.post_style, 0);
thumbnailBackground = ta.getColor(R.styleable.PostView_thumbnail_background, 0);
savedReplyColor = ta.getColor(R.styleable.PostView_saved_reply_color, 0);
highlightedColor = ta.getColor(R.styleable.PostView_highlighted_color, 0);
replyCountColor = ta.getColor(R.styleable.PostView_reply_count_color, 0);
dateColor = ta.getColor(R.styleable.PostView_date_color, 0);
ta.recycle();
}
private void parseSpans(Post post) {
TypedArray ta = context.obtainStyledAttributes(null, R.styleable.PostView, R.attr.post_style, 0);
private void parseSpans(Post post, TypedArray ta) {
int detailSize = ta.getDimensionPixelSize(R.styleable.PostView_detail_size, 0);
if (!TextUtils.isEmpty(post.subject)) {
post.subjectSpan = new SpannableString(post.subject);
@ -305,7 +287,7 @@ public class PostView extends LinearLayout implements View.OnClickListener {
if (!TextUtils.isEmpty(post.tripcode)) {
post.tripcodeSpan = new SpannableString(post.tripcode);
post.tripcodeSpan.setSpan(new ForegroundColorSpan(ta.getColor(R.styleable.PostView_name_color, 0)), 0, post.tripcodeSpan.length(), 0);
post.tripcodeSpan.setSpan(new AbsoluteSizeSpan(10, true), 0, post.tripcodeSpan.length(), 0);
post.tripcodeSpan.setSpan(new AbsoluteSizeSpan(detailSize), 0, post.tripcodeSpan.length(), 0);
}
if (!TextUtils.isEmpty(post.id)) {
@ -324,48 +306,51 @@ public class PostView extends LinearLayout implements View.OnClickListener {
post.idSpan.setSpan(new ForegroundColorSpan(idColor), 0, post.idSpan.length(), 0);
post.idSpan.setSpan(new BackgroundColorSpan(idBgColor), 0, post.idSpan.length(), 0);
post.idSpan.setSpan(new AbsoluteSizeSpan(10, true), 0, post.idSpan.length(), 0);
post.idSpan.setSpan(new AbsoluteSizeSpan(detailSize), 0, post.idSpan.length(), 0);
}
if (!TextUtils.isEmpty(post.capcode)) {
post.capcodeSpan = new SpannableString("Capcode: " + post.capcode);
post.capcodeSpan.setSpan(new ForegroundColorSpan(ta.getColor(R.styleable.PostView_capcode_color, 0)), 0, post.capcodeSpan.length(), 0);
post.capcodeSpan.setSpan(new AbsoluteSizeSpan(10, true), 0, post.capcodeSpan.length(), 0);
post.capcodeSpan.setSpan(new AbsoluteSizeSpan(detailSize), 0, post.capcodeSpan.length(), 0);
}
ta.recycle();
}
private void buildView(final Context context) {
if (isBuild)
return;
isBuild = true;
private void buildView(final Context context, TypedArray ta) {
int thumbnailBackground = ta.getColor(R.styleable.PostView_thumbnail_background, 0);
int replyCountColor = ta.getColor(R.styleable.PostView_reply_count_color, 0);
Resources resources = context.getResources();
int postPadding = 0;
if (isList()) {
postPadding = resources.getDimensionPixelSize(R.dimen.post_padding);
} else if (isGrid()) {
postPadding = resources.getDimensionPixelSize(R.dimen.post_padding_grid);
}
int commentPadding = 0;
if (isList()) {
commentPadding = resources.getDimensionPixelSize(R.dimen.post_comment_padding);
} else if (isGrid()) {
commentPadding = resources.getDimensionPixelSize(R.dimen.post_comment_padding_grid);
}
int iconPadding = resources.getDimensionPixelSize(R.dimen.post_icon_padding);
int iconWidth = resources.getDimensionPixelSize(R.dimen.post_icon_width);
int iconHeight = resources.getDimensionPixelSize(R.dimen.post_icon_height);
int imageSize = resources.getDimensionPixelSize(R.dimen.thumbnail_size);
int gridHeight = resources.getDimensionPixelSize(R.dimen.post_grid_height);
int gridImageHeight = resources.getDimensionPixelSize(R.dimen.post_grid_image_height);
int iconPadding = ta.getDimensionPixelSize(R.styleable.PostView_icon_padding, 0);
int iconWidth = ta.getDimensionPixelSize(R.styleable.PostView_icon_width, 0);
int iconHeight = ta.getDimensionPixelSize(R.styleable.PostView_icon_height, 0);
int gridHeight = ta.getDimensionPixelSize(R.styleable.PostView_grid_height, 0);
int optionsSpacing = ta.getDimensionPixelSize(R.styleable.PostView_options_spacing, 0);
int titleSize = ta.getDimensionPixelSize(R.styleable.PostView_title_size, 0);
int optionsLeftPadding = ta.getDimensionPixelSize(R.styleable.PostView_options_left_padding, 0);
int optionsTopPadding = ta.getDimensionPixelSize(R.styleable.PostView_options_top_padding, 0);
int optionsRightPadding = ta.getDimensionPixelSize(R.styleable.PostView_options_right_padding, 0);
int optionsBottomPadding = ta.getDimensionPixelSize(R.styleable.PostView_options_bottom_padding, 0);
int lastSeenHeight = ta.getDimensionPixelSize(R.styleable.PostView_last_seen_height, 0);
int postListMaxHeight = ta.getDimensionPixelSize(R.styleable.PostView_list_comment_max_height, 0);
int postCommentSize = 0;
int commentPadding = 0;
int postPadding = 0;
int imageSize = 0;
int repliesCountSize = 0;
if (isList()) {
postCommentSize = resources.getDimensionPixelSize(R.dimen.post_comment_text);
postCommentSize = ta.getDimensionPixelSize(R.styleable.PostView_list_comment_size, 0);
commentPadding = ta.getDimensionPixelSize(R.styleable.PostView_list_comment_padding, 0);
postPadding = ta.getDimensionPixelSize(R.styleable.PostView_list_padding, 0);
imageSize = ta.getDimensionPixelSize(R.styleable.PostView_list_image_size, 0);
repliesCountSize = ta.getDimensionPixelSize(R.styleable.PostView_list_replies_count_size, 0);
} else if (isGrid()) {
postCommentSize = resources.getDimensionPixelSize(R.dimen.post_comment_text_grid);
postCommentSize = ta.getDimensionPixelSize(R.styleable.PostView_grid_comment_size, 0);
commentPadding = ta.getDimensionPixelSize(R.styleable.PostView_grid_comment_padding, 0);
postPadding = ta.getDimensionPixelSize(R.styleable.PostView_grid_padding, 0);
imageSize = ta.getDimensionPixelSize(R.styleable.PostView_grid_image_size, 0);
repliesCountSize = ta.getDimensionPixelSize(R.styleable.PostView_grid_replies_count_size, 0);
}
RelativeLayout wrapper = new RelativeLayout(context);
@ -401,7 +386,7 @@ public class PostView extends LinearLayout implements View.OnClickListener {
full.addView(imageContainer, wrapMatchParams);
full.setMinimumHeight(imageSize);
} else if (isGrid()) {
imageContainer.addView(imageView, new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, gridImageHeight));
imageContainer.addView(imageView, new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, imageSize));
full.addView(imageContainer, matchWrapParams);
}
@ -413,11 +398,11 @@ public class PostView extends LinearLayout implements View.OnClickListener {
if (isList()) {
// 25 padding to give optionsView some space
titleContainer.setPadding(0, 0, Utils.dp(25), 0);
titleContainer.setPadding(0, 0, optionsSpacing, 0);
}
titleView = new TextView(context);
titleView.setTextSize(14);
titleView.setTextSize(TypedValue.COMPLEX_UNIT_PX, titleSize);
titleView.setPadding(postPadding, postPadding, postPadding, 0);
titleContainer.addView(titleView, wrapParams);
@ -449,14 +434,12 @@ public class PostView extends LinearLayout implements View.OnClickListener {
commentView.setPadding(postPadding, commentPadding, postPadding, commentPadding);
if (manager.getLoadable().isBoardMode() || manager.getLoadable().isCatalogMode()) {
int maxHeight = context.getResources().getDimensionPixelSize(R.dimen.post_max_height);
commentView.setMaxHeight(maxHeight);
commentView.setMaxHeight(postListMaxHeight);
}
} else if (isGrid()) {
commentView.setPadding(postPadding, commentPadding, postPadding, 0);
// So that is fills up all the height using weight later on
commentView.setMinHeight(10000);
commentView.setEllipsize(TextUtils.TruncateAt.END);
}
if (isList()) {
@ -469,18 +452,14 @@ public class PostView extends LinearLayout implements View.OnClickListener {
Utils.setPressedDrawable(repliesCountView);
repliesCountView.setTextColor(replyCountColor);
repliesCountView.setPadding(postPadding, postPadding, postPadding, postPadding);
if (isList()) {
repliesCountView.setTextSize(14);
} else if (isGrid()) {
repliesCountView.setTextSize(11);
}
repliesCountView.setTextSize(TypedValue.COMPLEX_UNIT_PX, repliesCountSize);
repliesCountView.setSingleLine();
contentContainer.addView(repliesCountView, wrapParams);
lastSeen = new View(context);
lastSeen.setBackgroundColor(0xffff0000);
contentContainer.addView(lastSeen, new LayoutParams(LayoutParams.MATCH_PARENT, Utils.dp(6f)));
contentContainer.addView(lastSeen, new LayoutParams(LayoutParams.MATCH_PARENT, lastSeenHeight));
if (!manager.getLoadable().isThreadMode()) {
Utils.setPressedDrawable(contentContainer);
@ -491,7 +470,7 @@ public class PostView extends LinearLayout implements View.OnClickListener {
optionsView = new ImageView(context);
optionsView.setImageResource(R.drawable.ic_overflow);
Utils.setPressedDrawable(optionsView);
optionsView.setPadding(Utils.dp(15), Utils.dp(5), Utils.dp(5), Utils.dp(15));
optionsView.setPadding(optionsLeftPadding, optionsTopPadding, optionsRightPadding, optionsBottomPadding);
optionsView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(final View v) {

@ -101,6 +101,7 @@ public class ThemeHelper {
public int getSpoilerColor() {
return spoilerColor;
}
public int getInlineQuoteColor() {
return inlineQuoteColor;
}

@ -54,6 +54,33 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<attr name="id_background_light" format="color"/>
<attr name="id_background_dark" format="color"/>
<attr name="inline_quote_color" format="color"/>
<attr name="title_size" format="dimension"/>
<attr name="detail_size" format="dimension"/>
<attr name="icon_padding" format="dimension"/>
<attr name="icon_width" format="dimension"/>
<attr name="icon_height" format="dimension"/>
<attr name="options_spacing" format="dimension"/>
<attr name="options_left_padding" format="dimension"/>
<attr name="options_top_padding" format="dimension"/>
<attr name="options_right_padding" format="dimension"/>
<attr name="options_bottom_padding" format="dimension"/>
<attr name="last_seen_height" format="dimension"/>
<attr name="grid_padding" format="dimension"/>
<attr name="grid_image_size" format="dimension"/>
<attr name="grid_comment_padding" format="dimension"/>
<attr name="grid_comment_size" format="dimension"/>
<attr name="grid_replies_count_size" format="dimension"/>
<attr name="list_comment_max_height" format="dimension"/>
<attr name="list_padding" format="dimension"/>
<attr name="list_image_size" format="dimension"/>
<attr name="list_comment_padding" format="dimension"/>
<attr name="list_comment_size" format="dimension"/>
<attr name="list_replies_count_size" format="dimension"/>
<attr name="grid_width" format="dimension"/>
<attr name="grid_height" format="dimension"/>
<attr name="grid_spacing" format="dimension"/>
</declare-styleable>
<attr name="board_edit_item_style" format="reference"/>

@ -17,22 +17,5 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<resources>
<dimen name="general_padding">12dp</dimen>
<dimen name="post_padding">10dp</dimen>
<dimen name="post_padding_grid">5dp</dimen>
<dimen name="post_comment_padding">11dp</dimen>
<dimen name="post_comment_padding_grid">8dp</dimen>
<dimen name="post_icon_padding">6dp</dimen>
<dimen name="thumbnail_size">70dp</dimen>
<dimen name="post_icon_width">24dp</dimen>
<dimen name="post_icon_height">14dp</dimen>
<dimen name="post_max_height">200dp</dimen>
<dimen name="post_grid_width">110dp</dimen>
<dimen name="post_grid_height">300dp</dimen>
<dimen name="post_grid_image_height">120dp</dimen>
<dimen name="post_comment_text">15sp</dimen>
<dimen name="post_comment_text_grid">14sp</dimen>
<dimen name="post_grid_spacing">1dp</dimen>
<dimen name="image_view_padding">8dp</dimen>
</resources>

@ -79,6 +79,35 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
</style>
<style name="PostView">
<item name="grid_width">110dp</item>
<item name="grid_height">300dp</item>
<item name="grid_spacing">1dp</item>
<item name="title_size">14sp</item>
<item name="detail_size">10sp</item>
<item name="icon_padding">6dp</item>
<item name="icon_width">24dp</item>
<item name="icon_height">14dp</item>
<item name="options_spacing">25dp</item>
<item name="options_left_padding">15dp</item>
<item name="options_top_padding">5dp</item>
<item name="options_right_padding">5dp</item>
<item name="options_bottom_padding">15dp</item>
<item name="last_seen_height">6dp</item>
<item name="grid_padding">5dp</item>
<item name="grid_image_size">120dp</item>
<item name="grid_comment_padding">8dp</item>
<item name="grid_comment_size">14sp</item>
<item name="grid_replies_count_size">11sp</item>
<item name="list_padding">10dp</item>
<item name="list_image_size">70dp</item>
<item name="list_comment_padding">11dp</item>
<item name="list_comment_size">15sp</item>
<item name="list_replies_count_size">14sp</item>
<item name="list_comment_max_height">200dp</item>
<item name="thumbnail_background">#FFDDDDDD</item>
<item name="saved_reply_color">#FFBCBCBC</item>
<item name="highlighted_color">#FFD6BAD0</item>

Loading…
Cancel
Save