835 lines
35 KiB
Java
835 lines
35 KiB
Java
package com.hippo.ehviewer.activity;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.LinkedHashMap;
|
|
import java.util.LinkedList;
|
|
import java.util.AbstractMap.SimpleEntry;
|
|
import java.util.List;
|
|
import java.util.Map.Entry;
|
|
|
|
import com.hippo.ehviewer.AppContext;
|
|
import com.hippo.ehviewer.ImageGeterManager;
|
|
import com.hippo.ehviewer.R;
|
|
import com.hippo.ehviewer.data.Comment;
|
|
import com.hippo.ehviewer.data.Data;
|
|
import com.hippo.ehviewer.data.GalleryDetail;
|
|
import com.hippo.ehviewer.data.GalleryInfo;
|
|
import com.hippo.ehviewer.data.PreviewList;
|
|
import com.hippo.ehviewer.ehclient.DetailParser;
|
|
import com.hippo.ehviewer.ehclient.EhClient;
|
|
import com.hippo.ehviewer.util.Cache;
|
|
import com.hippo.ehviewer.util.Log;
|
|
import com.hippo.ehviewer.util.Ui;
|
|
import com.hippo.ehviewer.util.Util;
|
|
import com.hippo.ehviewer.widget.AlertButton;
|
|
import com.hippo.ehviewer.widget.AutoWrapLayout;
|
|
import com.hippo.ehviewer.widget.ButtonsDialogBuilder;
|
|
import com.hippo.ehviewer.widget.DialogBuilder;
|
|
import com.hippo.ehviewer.widget.FswView;
|
|
import com.hippo.ehviewer.widget.LoadImageView;
|
|
import com.hippo.ehviewer.widget.OlScrollView;
|
|
import com.hippo.ehviewer.widget.OnFitSystemWindowsListener;
|
|
import com.hippo.ehviewer.widget.OnLayoutListener;
|
|
import com.hippo.ehviewer.widget.ProgressiveRatingBar;
|
|
|
|
import android.app.AlertDialog;
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
import android.content.res.ColorStateList;
|
|
import android.content.res.Resources;
|
|
import android.graphics.Bitmap;
|
|
import android.graphics.Color;
|
|
import android.graphics.drawable.BitmapDrawable;
|
|
import android.graphics.drawable.ColorDrawable;
|
|
import android.os.Bundle;
|
|
import android.support.v4.app.Fragment;
|
|
import android.util.TypedValue;
|
|
import android.view.ContextThemeWrapper;
|
|
import android.view.Gravity;
|
|
import android.view.LayoutInflater;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
import android.view.View.OnClickListener;
|
|
import android.view.ViewGroup.LayoutParams;
|
|
import android.widget.AdapterView;
|
|
import android.widget.BaseAdapter;
|
|
import android.widget.Button;
|
|
import android.widget.LinearLayout;
|
|
import android.widget.ProgressBar;
|
|
import android.widget.RatingBar;
|
|
import android.widget.TextSwitcher;
|
|
import android.widget.TextView;
|
|
import android.widget.Toast;
|
|
import android.widget.ViewSwitcher.ViewFactory;
|
|
|
|
public class DetailSectionFragment extends Fragment
|
|
implements View.OnClickListener {
|
|
private static final String TAG = "DetailSectionFragment";
|
|
|
|
private AppContext mAppContext;
|
|
private MangaDetailActivity mActivity;
|
|
private EhClient mClient;
|
|
private Data mData;
|
|
private GalleryDetail mGalleryDetail;
|
|
private String mUrl;
|
|
|
|
private View mRootView;
|
|
private OlScrollView mScrollView;
|
|
private Button mReadButton;
|
|
private Button mRateButton;
|
|
private ProgressBar mWaitPb;
|
|
private Button mRefreshButton;
|
|
private ViewGroup mNormalView;
|
|
private ViewGroup mOffensiveView;
|
|
private ViewGroup mPiningView;
|
|
private ViewGroup mPreviewListMain;
|
|
private AutoWrapLayout mPreviewListLayout;
|
|
private ProgressBar mWaitPreviewList;
|
|
private Button mPreviewRefreshButton;
|
|
private View mBottomPanel;
|
|
private TextView mPreviewNumText;
|
|
private View mCancelButton;
|
|
private View mOnceButton;
|
|
private View mEveryButton;
|
|
private View mBackButton;
|
|
private View mFrontButton;
|
|
private View mKnownButton;
|
|
private View mDivider;
|
|
|
|
private AlertDialog mGoToDialog;
|
|
|
|
private int mCurPage;
|
|
private boolean mShowPreview = false;
|
|
|
|
@Override
|
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
|
Bundle savedInstanceState) {
|
|
mActivity = (MangaDetailActivity)getActivity();
|
|
mAppContext = (AppContext)mActivity.getApplication();
|
|
mClient = mAppContext.getEhClient();
|
|
mData = mAppContext.getData();
|
|
|
|
GalleryInfo galleryInfo = mActivity.getGalleryInfo();
|
|
boolean getFromCache = true;
|
|
mGalleryDetail = Cache.mdCache.get(String.valueOf(galleryInfo.gid));
|
|
if (mGalleryDetail == null) {
|
|
getFromCache = false;
|
|
mGalleryDetail = new GalleryDetail(galleryInfo);
|
|
}
|
|
mUrl = EhClient.getDetailUrl(
|
|
mGalleryDetail.gid, mGalleryDetail.token);
|
|
|
|
mRootView = inflater.inflate(
|
|
R.layout.detail, container, false);
|
|
mScrollView = (OlScrollView)mRootView.findViewById(R.id.manga_detail_scrollview);
|
|
mReadButton = (Button)mRootView.findViewById(R.id.detail_read);
|
|
mRateButton = (Button)mRootView.findViewById(R.id.detail_do_rate);
|
|
mWaitPb = (ProgressBar)mRootView.findViewById(R.id.detail_wait);
|
|
mRefreshButton = (Button)mRootView.findViewById(R.id.detail_refresh);
|
|
mNormalView = (ViewGroup)mRootView.findViewById(R.id.manga_detail_normal);
|
|
mOffensiveView = (ViewGroup)mRootView.findViewById(R.id.manga_detail_offensive);
|
|
mPiningView = (ViewGroup)mRootView.findViewById(R.id.manga_detail_pining);
|
|
mPreviewListMain = (ViewGroup)mRootView.findViewById(R.id.page_list);
|
|
mPreviewListLayout = (AutoWrapLayout)mRootView.findViewById(R.id.paper_list_layout);
|
|
mWaitPreviewList = (ProgressBar)mRootView.findViewById(R.id.paper_list_wait);
|
|
mPreviewRefreshButton = (Button)mRootView.findViewById(R.id.preview_button_refresh);
|
|
mBottomPanel = (View)mRootView.findViewById(R.id.bottom_panel);
|
|
mPreviewNumText = (TextView)mBottomPanel.findViewById(R.id.preview_num);
|
|
mCancelButton = mOffensiveView.findViewById(R.id.detail_button_cancel);
|
|
mOnceButton = mOffensiveView.findViewById(R.id.detail_button_once);
|
|
mEveryButton = mOffensiveView.findViewById(R.id.detail_button_every);
|
|
mKnownButton = mPiningView.findViewById(R.id.detail_button_known);
|
|
mBackButton = mPreviewListMain.findViewById(R.id.back);
|
|
mFrontButton = mPreviewListMain.findViewById(R.id.front);
|
|
mDivider = mNormalView.findViewById(R.id.divider);
|
|
|
|
mRefreshButton.setOnClickListener(this);
|
|
|
|
FswView align = (FswView)mActivity.findViewById(R.id.alignment);
|
|
int paddingLeft = align.getPaddingLeft();
|
|
int paddingTop = align.getPaddingTop();
|
|
int paddingRight = align.getPaddingRight();
|
|
int paddingBottom = align.getPaddingBottom();
|
|
if (paddingTop != 0 || paddingBottom != 0) {
|
|
mScrollView.setPadding(paddingLeft, paddingTop,
|
|
paddingRight, paddingBottom);
|
|
}
|
|
align.addOnFitSystemWindowsListener(new OnFitSystemWindowsListener() {
|
|
@Override
|
|
public void onfitSystemWindows(int paddingLeft, int paddingTop,
|
|
int paddingRight, int paddingBottom) {
|
|
mScrollView.setPadding(paddingLeft, paddingTop,
|
|
paddingRight, paddingBottom);
|
|
}
|
|
});
|
|
|
|
mScrollView.setOnLayoutListener(new OnLayoutListener() {
|
|
@Override
|
|
public void onLayout() {
|
|
if (mShowPreview) {
|
|
mShowPreview = false;
|
|
mScrollView.scrollTo(0,
|
|
mNormalView.getTop() + mDivider.getTop());
|
|
}
|
|
}
|
|
});
|
|
|
|
|
|
|
|
LoadImageView thumb = (LoadImageView)mRootView.findViewById(R.id.detail_cover);
|
|
Bitmap bmp = null;
|
|
if (Cache.memoryCache != null &&
|
|
(bmp = Cache.memoryCache.get(String.valueOf(mGalleryDetail.gid))) != null) {
|
|
thumb.setLoadInfo(mGalleryDetail.thumb, String.valueOf(mGalleryDetail.gid));
|
|
thumb.setImageBitmap(bmp);
|
|
thumb.setState(LoadImageView.LOADED);
|
|
} else {
|
|
thumb.setImageDrawable(null);
|
|
thumb.setLoadInfo(mGalleryDetail.thumb, String.valueOf(mGalleryDetail.gid));
|
|
thumb.setState(LoadImageView.NONE);
|
|
mAppContext.getImageGeterManager().add(mGalleryDetail.thumb, String.valueOf(mGalleryDetail.gid),
|
|
ImageGeterManager.DISK_CACHE | ImageGeterManager.DOWNLOAD,
|
|
new LoadImageView.SimpleImageGetListener(thumb));
|
|
}
|
|
|
|
TextView title = (TextView)mRootView.findViewById(R.id.detail_title);
|
|
title.setText(mGalleryDetail.title);
|
|
|
|
TextView uploader = (TextView)mRootView.findViewById(R.id.detail_uploader);
|
|
uploader.setText(mGalleryDetail.uploader);
|
|
|
|
TextView category = (TextView)mRootView.findViewById(R.id.detail_category);
|
|
category.setText(Ui.getCategoryText(mGalleryDetail.category));
|
|
category.setBackgroundColor(Ui.getCategoryColor(mGalleryDetail.category));
|
|
|
|
// Make rate and read button same width
|
|
// Disable them for temp
|
|
Ui.measureView(mReadButton);
|
|
Ui.measureView(mRateButton);
|
|
int readbw = mReadButton.getMeasuredWidth();
|
|
int ratebw = mRateButton.getMeasuredWidth();
|
|
if (readbw > ratebw) {
|
|
mRateButton.setWidth(readbw);
|
|
} else if (ratebw > readbw) {
|
|
mReadButton.setWidth(ratebw);
|
|
}
|
|
mReadButton.setEnabled(false);
|
|
mRateButton.setEnabled(false);
|
|
|
|
// get from cache
|
|
if (getFromCache)
|
|
layout(mGalleryDetail);
|
|
else
|
|
mClient.getMangaDetail(mUrl, mGalleryDetail, new MangaDetailGetListener());
|
|
|
|
return mRootView;
|
|
}
|
|
|
|
private void addPageItem(int page) {
|
|
if (mActivity.isFinishing())
|
|
return;
|
|
|
|
if (page != mCurPage)
|
|
return;
|
|
|
|
mWaitPreviewList.setVisibility(View.GONE);
|
|
mPreviewRefreshButton.setVisibility(View.GONE);
|
|
|
|
PreviewList pageList = mGalleryDetail.previewLists[page];
|
|
if (pageList == null) {
|
|
Log.d(TAG, "WTF, I may check mangaDetail.pageLists[page] is not null");
|
|
Toast.makeText(mActivity, "WTF, I may check mangaDetail.pageLists[page] is not null", Toast.LENGTH_SHORT).show();
|
|
return;
|
|
}
|
|
int index = page * mGalleryDetail.previewPerPage + 1;
|
|
int rowIndex = 0;
|
|
for (PreviewList.Row row : pageList.rowArray) {
|
|
for (PreviewList.Row.Item item : row.itemArray) {
|
|
TextViewWithUrl tvu = new TextViewWithUrl(mActivity,
|
|
item.url);
|
|
tvu.setGravity(Gravity.CENTER);
|
|
tvu.setText(String.valueOf(index));
|
|
final int index1 = index;
|
|
tvu.setOnClickListener(new OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
// Add to read in Data
|
|
mData.addRead(mGalleryDetail);
|
|
|
|
Intent intent = new Intent(mActivity,
|
|
MangaActivity.class);
|
|
intent.putExtra("url", ((TextViewWithUrl) v).url);
|
|
intent.putExtra("gid", mGalleryDetail.gid);
|
|
intent.putExtra("title", mGalleryDetail.title);
|
|
intent.putExtra("firstPage", index1 - 1);
|
|
intent.putExtra("pageSum", mGalleryDetail.pages);
|
|
startActivity(intent);
|
|
}
|
|
});
|
|
// Set white drawable for temp
|
|
ColorDrawable white = new ColorDrawable(Color.TRANSPARENT);
|
|
white.setBounds(0, 0, item.width, item.height);
|
|
tvu.setCompoundDrawables(null, white, null, null);
|
|
|
|
AutoWrapLayout.LayoutParams lp = new AutoWrapLayout.LayoutParams();
|
|
lp.leftMargin = Ui.dp2pix(8);
|
|
lp.topMargin = Ui.dp2pix(8);
|
|
lp.rightMargin = Ui.dp2pix(8);
|
|
lp.bottomMargin = Ui.dp2pix(8);
|
|
|
|
mPreviewListLayout.addView(tvu, lp);
|
|
index++;
|
|
}
|
|
// Download pic
|
|
EhClient.getImage(row.imageUrl, mGalleryDetail.gid + "-preview-"
|
|
+ mCurPage + "-" + rowIndex, Util.getResourcesType(row.imageUrl), Cache.memoryCache,
|
|
Cache.cpCache, new int[]{page, rowIndex}, new PageImageGetListener());
|
|
rowIndex ++;
|
|
}
|
|
}
|
|
|
|
private void refreshPageList() {
|
|
mPreviewListLayout.removeAllViews();
|
|
mWaitPreviewList.setVisibility(View.VISIBLE);
|
|
mPreviewRefreshButton.setVisibility(View.GONE);
|
|
|
|
mPreviewNumText.setText(String.format("%d / %d",
|
|
mCurPage+1, mGalleryDetail.previewSum));
|
|
|
|
PreviewList pageList = mGalleryDetail.previewLists[mCurPage];
|
|
|
|
if (pageList == null) {
|
|
String tempUrl = mUrl;
|
|
if (!mUrl.endsWith("/"))
|
|
tempUrl += "/";
|
|
tempUrl += "?p=" + mCurPage;
|
|
|
|
mClient.getPageList(tempUrl, mCurPage,
|
|
new EhClient.OnGetPageListListener() {
|
|
@Override
|
|
public void onSuccess(Object checkFlag, PreviewList pageList) {
|
|
if (mActivity.isFinishing())
|
|
return;
|
|
|
|
int page = (Integer)checkFlag;
|
|
mGalleryDetail.previewLists[page] = pageList;
|
|
addPageItem(page);
|
|
mShowPreview = true;
|
|
}
|
|
|
|
@Override
|
|
public void onFailure(Object checkFlag, String eMsg) {
|
|
if (mActivity.isFinishing())
|
|
return;
|
|
|
|
int page = (Integer)checkFlag;
|
|
if (page == mCurPage) {
|
|
Toast.makeText(mActivity,
|
|
eMsg, Toast.LENGTH_SHORT).show();
|
|
mWaitPreviewList.setVisibility(View.GONE);
|
|
mPreviewRefreshButton.setVisibility(View.VISIBLE);
|
|
}
|
|
}
|
|
});
|
|
} else {
|
|
addPageItem(mCurPage);
|
|
mShowPreview = true;
|
|
}
|
|
}
|
|
|
|
private AlertDialog createGoToDialog() {
|
|
return new DialogBuilder(mActivity).setTitle(R.string.jump)
|
|
.setAdapter(new BaseAdapter() {
|
|
@Override
|
|
public int getCount() {
|
|
return mGalleryDetail.previewSum;
|
|
}
|
|
@Override
|
|
public Object getItem(int position) {
|
|
return position;
|
|
}
|
|
@Override
|
|
public long getItemId(int position) {
|
|
return position;
|
|
}
|
|
@Override
|
|
public View getView(int position, View convertView,
|
|
ViewGroup parent) {
|
|
LayoutInflater inflater = mActivity.getLayoutInflater();
|
|
View view = (View)inflater.inflate(R.layout.list_item_text, null);
|
|
TextView tv = (TextView)view.findViewById(android.R.id.text1);
|
|
tv.setText(String.format(getString(R.string.some_page), position + 1));
|
|
return tv;
|
|
}
|
|
}, new AdapterView.OnItemClickListener() {
|
|
@Override
|
|
public void onItemClick(AdapterView<?> arg0, View arg1,
|
|
int position, long arg3) {
|
|
mGoToDialog.dismiss();
|
|
if (position != mCurPage) {
|
|
mCurPage = position;
|
|
refreshPageList();
|
|
}
|
|
}
|
|
}).setNegativeButton(android.R.string.cancel, new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View paramView) {
|
|
mGoToDialog.dismiss();
|
|
}
|
|
}).create();
|
|
}
|
|
|
|
private void addTags() {
|
|
LinearLayout tagsLayout = (LinearLayout)mRootView.findViewById(R.id.tags_layout);
|
|
LinkedHashMap<String, LinkedList<SimpleEntry<String, Integer>>> tagGroups =
|
|
mGalleryDetail.tags;
|
|
tagsLayout.removeAllViews();
|
|
int x = Ui.dp2pix(4);
|
|
int y = Ui.dp2pix(4);
|
|
Resources resources = getResources();
|
|
// Get tag view resources
|
|
int tagTextSize = resources.getDimensionPixelOffset(R.dimen.button_small_size);
|
|
ColorStateList tagTextColor = resources.getColorStateList(R.color.blue_bn_text);
|
|
int tagPaddingX = resources.getDimensionPixelOffset(R.dimen.button_tag_padding_x);
|
|
int tagPaddingY = resources.getDimensionPixelOffset(R.dimen.button_tag_padding_y);
|
|
for (Entry<String, LinkedList<SimpleEntry<String, Integer>>> tagGroup : tagGroups.entrySet()) {
|
|
LinearLayout tagGroupLayout = new LinearLayout(mActivity);
|
|
tagGroupLayout.setOrientation(LinearLayout.HORIZONTAL);
|
|
AutoWrapLayout tagLayout = new AutoWrapLayout(mActivity);
|
|
|
|
// Group name
|
|
final String groupName = tagGroup.getKey();
|
|
TextView groupNameView = new TextView(new ContextThemeWrapper(mActivity, R.style.TextTag));
|
|
groupNameView.setText(groupName);
|
|
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
|
|
lp.setMargins(x, y, x, y);
|
|
tagGroupLayout.addView(groupNameView, lp);
|
|
|
|
// tags
|
|
for (SimpleEntry<String, Integer> tag : tagGroup.getValue()) {
|
|
final String tagText = tag.getKey();
|
|
Button tagView = new Button(mActivity);
|
|
tagView.setTextSize(TypedValue.COMPLEX_UNIT_PX, tagTextSize);
|
|
tagView.setText(String.format("%s (%d)", tagText, tag.getValue()));
|
|
tagView.setTextColor(tagTextColor);
|
|
tagView.setBackgroundResource(R.drawable.blue_bn_bg);
|
|
tagView.setPadding(tagPaddingX, tagPaddingY, tagPaddingX, tagPaddingY);
|
|
tagView.setOnClickListener(new OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
AlertButton voteUp = new AlertButton(mActivity);
|
|
voteUp.setText(getString(R.string.vote_up));
|
|
voteUp.setOnClickListener(new SimpleVote(groupName, tagText, true));
|
|
AlertButton voteDown = new AlertButton(mActivity);
|
|
voteDown.setText(getString(R.string.vote_down));
|
|
voteDown.setOnClickListener(new SimpleVote(groupName, tagText, false));
|
|
AlertButton showTagged = new AlertButton(mActivity);
|
|
showTagged.setText(getString(R.string.show_tagged));
|
|
new ButtonsDialogBuilder(mActivity).setTitle(tagText)
|
|
.addButton(voteUp).addButton(voteDown).addButton(showTagged)
|
|
.create().show();
|
|
}
|
|
});
|
|
AutoWrapLayout.LayoutParams alp = new AutoWrapLayout.LayoutParams();
|
|
alp.setMargins(x, y, x, y);
|
|
tagLayout.addView(tagView, alp);
|
|
}
|
|
tagGroupLayout.addView(tagLayout);
|
|
tagsLayout.addView(tagGroupLayout);
|
|
}
|
|
|
|
// Add tag
|
|
Button addtagView = new Button(mActivity);
|
|
addtagView.setTextSize(TypedValue.COMPLEX_UNIT_PX, tagTextSize);
|
|
addtagView.setText("+");
|
|
addtagView.setTextColor(tagTextColor);
|
|
addtagView.setBackgroundResource(R.drawable.blue_bn_bg);
|
|
addtagView.setPadding(tagPaddingX, tagPaddingY, tagPaddingX, tagPaddingY);
|
|
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
|
|
LinearLayout.LayoutParams.WRAP_CONTENT,
|
|
LinearLayout.LayoutParams.WRAP_CONTENT);
|
|
lp.gravity = Gravity.RIGHT;
|
|
lp.setMargins(x, y, x, y);
|
|
tagsLayout.addView(addtagView, lp);
|
|
}
|
|
|
|
private void layout(GalleryDetail md) {
|
|
if (mActivity.isFinishing())
|
|
return;
|
|
|
|
// Delete progress bar
|
|
mWaitPb.setVisibility(View.GONE);
|
|
|
|
// Check offensive or not
|
|
if (md.firstPage.equals("offensive")) {
|
|
mOffensiveView.setVisibility(View.VISIBLE);
|
|
mCancelButton.setOnClickListener(this);
|
|
mOnceButton.setOnClickListener(this);
|
|
mEveryButton.setOnClickListener(this);
|
|
}
|
|
// Check pining or not
|
|
else if (md.firstPage.equals("pining")) {
|
|
mPiningView.setVisibility(View.VISIBLE);
|
|
mKnownButton.setOnClickListener(this);
|
|
}
|
|
else {
|
|
// Enable button
|
|
mReadButton.setEnabled(true);
|
|
mReadButton.setOnClickListener(this);
|
|
mRateButton.setEnabled(true);
|
|
mRateButton.setOnClickListener(this);
|
|
|
|
RatingBar rate = (RatingBar)mRootView.findViewById(R.id.detail_rate);
|
|
rate.setRating(mGalleryDetail.rating);
|
|
|
|
TextSwitcher averagePeople = (TextSwitcher)mRootView.findViewById(R.id.detail_average_people);
|
|
averagePeople.setFactory(new ViewFactory() {
|
|
@Override
|
|
public View makeView() {
|
|
LayoutInflater inflater = LayoutInflater.from(mActivity);
|
|
return inflater.inflate(R.layout.detail_avg_text, null);
|
|
}
|
|
});
|
|
averagePeople.setCurrentText(String.format("%.2f (%d)",
|
|
mGalleryDetail.rating, mGalleryDetail.people));
|
|
|
|
TextView posted = (TextView)mRootView.findViewById(R.id.detail_posted);
|
|
posted.setText(mGalleryDetail.posted);
|
|
|
|
TextView language = (TextView)mRootView.findViewById(R.id.detail_language);
|
|
language.setText(String.format(getString(R.string.detail_language), mGalleryDetail.language));
|
|
|
|
TextView pagesSize = (TextView)mRootView.findViewById(R.id.detail_pages_size);
|
|
pagesSize.setText(String.format(getString(R.string.detail_pages_size),
|
|
mGalleryDetail.pages, mGalleryDetail.size));
|
|
|
|
// TODO
|
|
addTags();
|
|
|
|
mNormalView.setVisibility(View.VISIBLE);
|
|
|
|
// paper list
|
|
if (mGalleryDetail.previewLists[0] != null) {
|
|
mPreviewListMain.setVisibility(View.VISIBLE);
|
|
// preview num
|
|
mBottomPanel.setVisibility(View.VISIBLE);
|
|
mPreviewNumText.setText(String.format("%d / %d",
|
|
1, mGalleryDetail.previewSum));
|
|
mPreviewRefreshButton.setOnClickListener(this);
|
|
|
|
// Init go to dialog or disable it
|
|
if (mGalleryDetail.previewSum > 1) {
|
|
mGoToDialog = createGoToDialog();
|
|
mPreviewNumText.setOnClickListener(this);
|
|
mBackButton.setOnClickListener(this);
|
|
mFrontButton.setOnClickListener(this);
|
|
} else {
|
|
mPreviewNumText.setClickable(false);
|
|
mBackButton.setClickable(false);
|
|
mFrontButton.setClickable(false);
|
|
}
|
|
|
|
mCurPage = 0;
|
|
addPageItem(0);
|
|
} else
|
|
Toast.makeText(mActivity,
|
|
getString(R.string.detail_preview_error), Toast.LENGTH_SHORT)
|
|
.show();
|
|
|
|
// Set comments
|
|
mActivity.setComments(mGalleryDetail.comments);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onClick(View v) {
|
|
if (v == mRateButton) {
|
|
rate(mGalleryDetail.rating);
|
|
|
|
} else if (v == mReadButton) {
|
|
mData.addRead(mGalleryDetail);
|
|
|
|
Intent intent = new Intent(mActivity,
|
|
MangaActivity.class);
|
|
intent.putExtra("url", mGalleryDetail.firstPage);
|
|
intent.putExtra("gid", mGalleryDetail.gid);
|
|
intent.putExtra("title", mGalleryDetail.title);
|
|
intent.putExtra("firstPage", 0);
|
|
intent.putExtra("pageSum", mGalleryDetail.pages);
|
|
startActivity(intent);
|
|
|
|
} else if (v == mRefreshButton) {
|
|
MangaDetailGetListener listener = new MangaDetailGetListener();
|
|
mClient.getMangaDetail(mUrl, mGalleryDetail, listener);
|
|
// Delete refresh button
|
|
mRefreshButton.setVisibility(View.GONE);
|
|
// Add progressBar
|
|
mWaitPb.setVisibility(View.VISIBLE);
|
|
|
|
} else if (v == mCancelButton
|
|
| v == mKnownButton) {
|
|
mActivity.finish();
|
|
|
|
} else if (v == mOnceButton) {
|
|
if (mUrl.endsWith("nw=session")) {
|
|
|
|
} else if (mUrl.endsWith("nw=always"))
|
|
mUrl.replace("nw=always", "nw=session");
|
|
else {
|
|
if (!mUrl.endsWith("/"))
|
|
mUrl += "/";
|
|
mUrl += "?nw=session";
|
|
}
|
|
|
|
MangaDetailGetListener listener = new MangaDetailGetListener();
|
|
mClient.getMangaDetail(mUrl, mGalleryDetail, listener);
|
|
// Delete offensiveView
|
|
mOffensiveView.setVisibility(View.GONE);
|
|
// Add progressBar
|
|
mWaitPb.setVisibility(View.VISIBLE);
|
|
|
|
} else if (v == mEveryButton) {
|
|
if (mUrl.endsWith("nw=always")) {
|
|
|
|
} else if (mUrl.endsWith("nw=session"))
|
|
mUrl.replace("nw=session", "nw=always");
|
|
else {
|
|
if (!mUrl.endsWith("/"))
|
|
mUrl += "/";
|
|
mUrl += "?nw=always";
|
|
}
|
|
|
|
MangaDetailGetListener listener = new MangaDetailGetListener();
|
|
mClient.getMangaDetail(mUrl, mGalleryDetail, listener);
|
|
// Delete offensiveView
|
|
mOffensiveView.setVisibility(View.GONE);
|
|
// Add progressBar
|
|
mWaitPb.setVisibility(View.VISIBLE);
|
|
|
|
} else if (v == mBackButton) {
|
|
if (mCurPage <= 0)
|
|
return;
|
|
mCurPage--;
|
|
refreshPageList();
|
|
|
|
} else if (v == mFrontButton) {
|
|
if (mCurPage >= mGalleryDetail.previewSum - 1)
|
|
return;
|
|
mCurPage++;
|
|
refreshPageList();
|
|
|
|
} else if (v == mPreviewRefreshButton) {
|
|
refreshPageList();
|
|
|
|
} else if (v == mPreviewNumText) {
|
|
mGoToDialog.show();
|
|
}
|
|
}
|
|
|
|
private int getSendableRating(float ratingFloat) {
|
|
float dr = ratingFloat*2;
|
|
return (int)(dr + 0.5);
|
|
}
|
|
|
|
public void rate(float defaultRating) {
|
|
View view = mActivity.getLayoutInflater().inflate(R.layout.rate, null);
|
|
final TextView tv = (TextView)view.findViewById(R.id.rate_text);
|
|
final ProgressiveRatingBar rb = (ProgressiveRatingBar)view.findViewById(R.id.rate);
|
|
rb.setOnDrawListener(new ProgressiveRatingBar.OnDrawListener() {
|
|
@Override
|
|
public void onDraw(float rating) {
|
|
int textId = getResources().getIdentifier(mAppContext.getPackageName()
|
|
+ ":string/rating" + getSendableRating(rating), null, null);
|
|
if (textId == 0)
|
|
textId = R.string.rating0;
|
|
tv.setText(textId);
|
|
}
|
|
});
|
|
rb.setRating(defaultRating);
|
|
new DialogBuilder(mActivity).setTitle(R.string.rate)
|
|
.setView(view, true)
|
|
.setPositiveButton(android.R.string.ok, new OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
int rating = getSendableRating(rb.getRating());
|
|
if (rating <= 0 || rating > 10)
|
|
Toast.makeText(mActivity, "非法评分", Toast.LENGTH_SHORT).show(); // TODO
|
|
else {
|
|
((AlertButton)v).dialog.dismiss();
|
|
mClient.rate(mGalleryDetail.gid, mGalleryDetail.token,
|
|
rating, new EhClient.OnRateListener() {
|
|
@Override
|
|
public void onSuccess(float ratingAvg,
|
|
int ratingCnt) {
|
|
mGalleryDetail.rating = ratingAvg;
|
|
mGalleryDetail.people = ratingCnt;
|
|
if (!mActivity.isFinishing()) {
|
|
//Reset start
|
|
RatingBar rate = (RatingBar)mRootView.findViewById(R.id.detail_rate);
|
|
rate.setRating(mGalleryDetail.rating);
|
|
|
|
TextSwitcher averagePeople = (TextSwitcher)
|
|
mRootView.findViewById(R.id.detail_average_people);
|
|
averagePeople.setText(String.format("%.2f (%d)",
|
|
mGalleryDetail.rating, mGalleryDetail.people));
|
|
}
|
|
Toast.makeText(mActivity,
|
|
"评价成功", Toast.LENGTH_SHORT).show(); // TODO
|
|
}
|
|
@Override
|
|
public void onFailure(String eMsg) {
|
|
Toast.makeText(mActivity,
|
|
"评价失败\n" + eMsg, Toast.LENGTH_SHORT).show(); // TODO
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}).setNegativeButton(android.R.string.cancel, new OnClickListener(){
|
|
@Override
|
|
public void onClick(View v) {
|
|
((AlertButton)v).dialog.dismiss();
|
|
}
|
|
}).create().show();
|
|
}
|
|
|
|
|
|
|
|
public List<Comment> getComments() {
|
|
if (mGalleryDetail == null)
|
|
return null;
|
|
else
|
|
return mGalleryDetail.comments;
|
|
}
|
|
|
|
private class TextViewWithUrl extends TextView {
|
|
private String url;
|
|
|
|
public TextViewWithUrl(Context context, String url) {
|
|
super(context);
|
|
this.url = url;
|
|
}
|
|
}
|
|
|
|
private class MangaDetailGetListener
|
|
implements EhClient.OnGetMangaDetailListener {
|
|
@Override
|
|
public void onSuccess(GalleryDetail md) {
|
|
Cache.mdCache.put(String.valueOf(mGalleryDetail.gid), md);
|
|
layout(md);
|
|
}
|
|
|
|
@Override
|
|
public void onFailure(String eMsg) {
|
|
// Delete progress bar
|
|
// Show refresh button
|
|
mWaitPb.setVisibility(View.GONE);
|
|
mRefreshButton.setVisibility(View.VISIBLE);
|
|
Toast.makeText(mActivity,
|
|
eMsg, Toast.LENGTH_SHORT).show();
|
|
|
|
}
|
|
}
|
|
private class PageImageGetListener implements EhClient.OnGetImageListener {
|
|
@Override
|
|
public void onSuccess(Object checkFlag, Object res) {
|
|
if (res instanceof Bitmap && checkFlag instanceof int[]) {
|
|
int[] indexs = (int[])checkFlag;
|
|
addPageImage(indexs[0], indexs[1], (Bitmap) res);
|
|
} else {
|
|
Log.e(TAG, "WTF? PageImageGetListener is error !");
|
|
mWaitPreviewList.setVisibility(View.GONE);
|
|
mPreviewRefreshButton.setVisibility(View.VISIBLE);
|
|
}
|
|
}
|
|
@Override
|
|
public void onFailure(int errorMessageId) {
|
|
mWaitPreviewList.setVisibility(View.GONE);
|
|
mPreviewRefreshButton.setVisibility(View.VISIBLE);
|
|
}
|
|
|
|
private void addPageImage(int page, int rowIndex, Bitmap bitmap) {
|
|
if (mActivity.isFinishing())
|
|
return;
|
|
|
|
if (page != mCurPage)
|
|
return;
|
|
PreviewList pageList = mGalleryDetail.previewLists[page];
|
|
if (pageList == null) {
|
|
Log.d(TAG, "WTF, I may check mangaDetail.pageLists[page] is not null");
|
|
return;
|
|
}
|
|
|
|
int maxWidth = bitmap.getWidth();
|
|
int maxHeight = bitmap.getHeight();
|
|
|
|
PreviewList.Row row = pageList.rowArray.get(rowIndex);
|
|
ArrayList<PreviewList.Row.Item> items = row.itemArray;
|
|
|
|
int startIndex = row.startIndex;
|
|
int endIndex = startIndex + items.size();
|
|
for(int i = startIndex ; i < endIndex; i++) {
|
|
PreviewList.Row.Item item = items.get(i - startIndex);
|
|
|
|
if (item.xOffset + item.width > maxWidth)
|
|
item.width = maxWidth - item.xOffset;
|
|
if (item.yOffset + item.height > maxHeight)
|
|
item.height = maxHeight - item.yOffset;
|
|
|
|
BitmapDrawable bitmapDrawable = new BitmapDrawable(
|
|
getResources(), Bitmap.createBitmap(bitmap,
|
|
item.xOffset, item.yOffset, item.width, item.height));
|
|
bitmapDrawable.setBounds(0, 0, item.width, item.height);
|
|
|
|
TextViewWithUrl tvu = (TextViewWithUrl)mPreviewListLayout.getChildAt(i);
|
|
tvu.setCompoundDrawables(null, bitmapDrawable, null, null);
|
|
}
|
|
}
|
|
}
|
|
|
|
private class SimpleVote implements View.OnClickListener {
|
|
|
|
private String groupName;
|
|
private String tagText;
|
|
private boolean isUp;
|
|
|
|
public SimpleVote(String groupName, String tagText, boolean isUp) {
|
|
this.groupName = groupName;
|
|
this.tagText = tagText;
|
|
this.isUp = isUp;
|
|
}
|
|
|
|
@Override
|
|
public void onClick(View v) {
|
|
((AlertButton)v).dialog.dismiss();
|
|
mClient.vote(mGalleryDetail.gid, mGalleryDetail.token,
|
|
groupName, tagText, isUp, new SimpleVoteListener());
|
|
}
|
|
}
|
|
|
|
private class SimpleVoteListener implements EhClient.OnVoteListener {
|
|
@Override
|
|
public void onSuccess(String tagPane) {
|
|
Toast.makeText(mActivity,
|
|
"投票成功", Toast.LENGTH_SHORT).show(); // TODO
|
|
|
|
DetailParser parser = new DetailParser();
|
|
parser.setMode(DetailParser.TAG);
|
|
if (parser.parser(tagPane) == DetailParser.TAG) {
|
|
mGalleryDetail.tags = parser.tags;
|
|
// TODO Only change target text view
|
|
addTags();
|
|
} else {
|
|
Toast.makeText(mActivity,
|
|
getString(R.string.em_parser_error),
|
|
Toast.LENGTH_SHORT).show();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onFailure(String eMsg) {
|
|
Toast.makeText(mActivity,
|
|
"投票失败\n" + eMsg, Toast.LENGTH_SHORT).show(); // TODO
|
|
}
|
|
}
|
|
}
|