From a01e43ea95613f8fe4b6b3c797bbe13d0e41ca2d Mon Sep 17 00:00:00 2001 From: seven332 Date: Tue, 30 Jun 2015 00:04:40 +0800 Subject: [PATCH] Add CommentScene --- .../hippo/ehviewer/ui/scene/CommentScene.java | 139 ++++++++++++++++++ .../ehviewer/ui/scene/GalleryDetailScene.java | 8 +- .../main/java/com/hippo/scene/Announcer.java | 11 ++ .../res/layout-v21/scene_gallery_detail.xml | 4 +- app/src/main/res/layout/item_comment.xml | 4 +- app/src/main/res/layout/scene_comment.xml | 32 ++++ app/src/main/res/values/strings.xml | 2 + 7 files changed, 194 insertions(+), 6 deletions(-) create mode 100644 app/src/main/java/com/hippo/ehviewer/ui/scene/CommentScene.java create mode 100644 app/src/main/res/layout/scene_comment.xml diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/CommentScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/CommentScene.java new file mode 100644 index 000000000..808c02d0e --- /dev/null +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/CommentScene.java @@ -0,0 +1,139 @@ +package com.hippo.ehviewer.ui.scene; + +import android.content.Context; +import android.content.res.Resources; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.text.Html; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.hippo.ehviewer.EhApplication; +import com.hippo.ehviewer.R; +import com.hippo.ehviewer.data.Comment; +import com.hippo.rippleold.RippleSalon; +import com.hippo.scene.Announcer; +import com.hippo.scene.AppbarScene; +import com.hippo.util.URLImageGetter; +import com.hippo.util.UiUtils; +import com.hippo.widget.recyclerview.EasyRecyclerView; +import com.hippo.widget.recyclerview.LinearDividerItemDecoration; + +import java.util.List; + +public class CommentScene extends AppbarScene { + + private EasyRecyclerView mRecyclerView; + private CommentAdapter mAdapter; + + private List mCommentList; + + private void handleAnnouncer(Announcer announcer) { + if (announcer != null) { + mCommentList = (List) announcer.getObject(); + mAdapter.notifyDataSetChanged(); + } + } + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + onCreateView(); + if (savedInstanceState == null) { + onBindView(); + } else { + onRestoreView(savedInstanceState); + } + } + + + private void onCreateView() { + Context context = getStageActivity(); + Resources resources = context.getResources(); + + setContentView(R.layout.scene_comment); + setTitle(R.string.comments); + setIcon(R.drawable.ic_arrow_left_dark); + + mRecyclerView = (EasyRecyclerView) findViewById(R.id.recycler_view); + + mAdapter = new CommentAdapter(); + mRecyclerView.setAdapter(mAdapter); + mRecyclerView.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)); + LinearDividerItemDecoration decoration = new LinearDividerItemDecoration( + LinearDividerItemDecoration.VERTICAL, resources.getColor(R.color.divider_light), + UiUtils.dp2pix(getStageActivity(), 1)); + decoration.setShowLastDivider(true); + decoration.setPadding(resources.getDimensionPixelOffset(R.dimen.keyline_margin)); + mRecyclerView.addItemDecoration(decoration); + mRecyclerView.setSelector(RippleSalon.generateRippleDrawable(false)); + mRecyclerView.setClipToPadding(false); + } + + private void onBindView() { + handleAnnouncer(getAnnouncer()); + } + + private void onRestoreView(@Nullable Bundle savedInstanceState) { + // Empty + } + + @Override + public void onIconClick() { + finish(); + } + + @Override + protected void onGetFitPaddingBottom(int b) { + if (mRecyclerView != null) { + mRecyclerView.setPadding(0, 0, 0, b); + } + } + + private static class CommentHolder extends RecyclerView.ViewHolder { + + private TextView user; + private TextView time; + private TextView comment; + + public CommentHolder(View itemView) { + super(itemView); + + user = (TextView) itemView.findViewById(R.id.user); + time = (TextView) itemView.findViewById(R.id.time); + comment = (TextView) itemView.findViewById(R.id.comment); + } + } + + + private class CommentAdapter extends RecyclerView.Adapter { + + @Override + public CommentHolder onCreateViewHolder(ViewGroup parent, int viewType) { + return new CommentHolder(getStageActivity().getLayoutInflater().inflate( + R.layout.item_comment, parent, false)); + } + + @Override + public void onBindViewHolder(CommentHolder holder, int position) { + Comment comment = mCommentList.get(position); + holder.user.setText(comment.user); + holder.time.setText(comment.time); + URLImageGetter p = new URLImageGetter( + holder.comment, EhApplication.getConaco(getStageActivity())); + holder.comment.setText(Html.fromHtml(comment.comment, p, null)); + } + + @Override + public int getItemCount() { + if (mCommentList != null) { + return mCommentList.size(); + } else { + return 0; + } + } + } +} diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java index 6621c72f8..d65660fdf 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java @@ -146,6 +146,7 @@ public class GalleryDetailScene extends Scene implements View.OnClickListener { mTorrent.setOnClickListener(this); mShare.setOnClickListener(this); mRate.setOnClickListener(this); + mCommentMore.setOnClickListener(this); RippleSalon.addRipple(mRead, false); RippleSalon.addRipple(mDownload, false); @@ -219,6 +220,10 @@ public class GalleryDetailScene extends Scene implements View.OnClickListener { } else if (v == mShare) { StartActivityHelper.share(getStageActivity(), EhClient.getDetailUrl(Config.getEhSource(), gd.gid, gd.token, 0)); + } else if (v == mCommentMore) { + Announcer announcer = new Announcer(); + announcer.setObject(mGalleryDetail.comments); + startScene(CommentScene.class, announcer); } } @@ -323,12 +328,9 @@ public class GalleryDetailScene extends Scene implements View.OnClickListener { TextView commentText = (TextView) view.findViewById(R.id.comment); commentText.setMaxLines(3); commentText.setAutoLinkMask(0); - - URLImageGetter p = new URLImageGetter( commentText, EhApplication.getConaco(getStageActivity())); commentText.setText(Html.fromHtml(comment.comment, p, null)); - return view; } diff --git a/app/src/main/java/com/hippo/scene/Announcer.java b/app/src/main/java/com/hippo/scene/Announcer.java index 6559b579b..fc78013d3 100644 --- a/app/src/main/java/com/hippo/scene/Announcer.java +++ b/app/src/main/java/com/hippo/scene/Announcer.java @@ -22,10 +22,21 @@ import android.support.annotation.Nullable; import java.io.Serializable; +// TODO Do not copy Intent, set clone stuff and non-clone stuff public class Announcer { private @Nullable Bundle mExtras; + private Object mObject; + + public void setObject(Object object) { + mObject = object; + } + + public Object getObject() { + return mObject; + } + public boolean getBooleanExtra(String name, boolean defaultValue) { return mExtras == null ? defaultValue : mExtras.getBoolean(name, defaultValue); diff --git a/app/src/main/res/layout-v21/scene_gallery_detail.xml b/app/src/main/res/layout-v21/scene_gallery_detail.xml index d408b1898..4654b0f5a 100644 --- a/app/src/main/res/layout-v21/scene_gallery_detail.xml +++ b/app/src/main/res/layout-v21/scene_gallery_detail.xml @@ -23,7 +23,9 @@ + android:layout_height="match_parent" + android:overScrollMode="never" + android:scrollbarThumbVertical="@null"> diff --git a/app/src/main/res/layout/scene_comment.xml b/app/src/main/res/layout/scene_comment.xml new file mode 100644 index 000000000..5fdf8874f --- /dev/null +++ b/app/src/main/res/layout/scene_comment.xml @@ -0,0 +1,32 @@ + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 95f95c2d3..ccd1e10f6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -147,4 +147,6 @@ Torrent Share + Comments +