package com.dotcool.reader.fragment; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; import com.actionbarsherlock.app.SherlockFragment; import com.dotcool.R; import com.dotcool.reader.Constants; import com.dotcool.reader.LNReaderApplication; import com.dotcool.reader.UIHelper; import com.dotcool.reader.callback.ICallbackEventData; import com.dotcool.reader.dao.NovelsDao; import com.dotcool.reader.helper.AsyncTaskResult; import com.dotcool.reader.model.BookModel; import com.dotcool.reader.model.NovelCollectionModel; import com.dotcool.reader.model.NovelContentModel; import com.dotcool.reader.model.PageModel; import com.dotcool.reader.task.IAsyncTaskOwner; import com.dotcool.reader.task.LoadNovelDetailsTask; public class DisplaySynopsisFragment extends SherlockFragment implements IAsyncTaskOwner { public static final String TAG = DisplaySynopsisFragment.class.toString(); NovelsDao dao = NovelsDao.getInstance(getSherlockActivity()); NovelCollectionModel novelCol; TextView textViewTitle; TextView textViewSynopsis; View currentLayout; private LoadNovelDetailsTask task = null; private PageModel page; private TextView loadingText; private ProgressBar loadingBar; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { UIHelper.SetActionBarDisplayHomeAsUp(getSherlockActivity(), true); View view = inflater.inflate(R.layout.activity_display_synopsis, container, false); currentLayout = view; // Get intent and message page = new PageModel(); page.setPage(getArguments().getString(Constants.EXTRA_PAGE)); try { page = NovelsDao.getInstance(getSherlockActivity()).getPageModel(page, null); } catch (Exception e) { Log.e(TAG, "Error when getting Page Model for " + page.getPage(), e); } loadingText = (TextView) view.findViewById(R.id.emptyList); loadingBar = (ProgressBar) view.findViewById(R.id.empttListProgress); executeTask(page, false); return view; } @SuppressLint("NewApi") private void executeTask(PageModel pageModel, boolean willRefresh) { task = new LoadNovelDetailsTask(willRefresh, this); String key = TAG + ":" + pageModel.getPage(); boolean isAdded = LNReaderApplication.getInstance().addTask(key, task); if (isAdded) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, new PageModel[] { pageModel }); else task.execute(new PageModel[] { pageModel }); } else { Log.i(TAG, "Continue execute task: " + key); LoadNovelDetailsTask tempTask = (LoadNovelDetailsTask) LNReaderApplication.getInstance().getTask(key); if (tempTask != null) { task = tempTask; task.owner = this; } toggleProgressBar(true); } } public void updateProgress(String id, int current, int total, String message) { double cur = current; double tot = total; double result = (cur / tot) * 100; LNReaderApplication.getInstance().updateDownload(id, (int) result, message); if (loadingBar != null && loadingBar.getVisibility() == View.VISIBLE) { loadingBar.setIndeterminate(false); loadingBar.setMax(total); loadingBar.setProgress(current); loadingBar.setProgress(0); loadingBar.setProgress(current); loadingBar.setMax(total); } } public boolean downloadListSetup(String id, String toastText, int type, boolean hasError) { return false; } public void toggleProgressBar(boolean show) { if (show) { loadingText.setText("Loading List, please wait..."); loadingText.setVisibility(TextView.VISIBLE); loadingBar.setVisibility(ProgressBar.VISIBLE); loadingBar.setIndeterminate(true); } else { loadingText.setVisibility(TextView.GONE); loadingBar.setVisibility(ProgressBar.GONE); } } public void setMessageDialog(ICallbackEventData message) { if (loadingText.getVisibility() == TextView.VISIBLE) loadingText.setText(message.getMessage()); } @SuppressLint("NewApi") public void onGetResult(AsyncTaskResult<?> result, Class<?> t) { if (!isAdded()) return; Exception e = result.getError(); if (e == null) { // from DownloadNovelContentTask if (t == NovelContentModel[].class) { NovelContentModel[] content = (NovelContentModel[]) result.getResult(); if (content != null) { for (BookModel book : novelCol.getBookCollections()) { for (PageModel temp : book.getChapterCollection()) { for (int i = 0; i < content.length; ++i) { if (temp.getPage() == content[i].getPage()) { temp.setDownloaded(true); } } } } } } // from LoadNovelDetailsTask else if (t == NovelCollectionModel.class) { novelCol = (NovelCollectionModel) result.getResult(); // now add the volume and chapter list. try { // Prepare header page = novelCol.getPageModel(); TextView textViewTitle = (TextView) currentLayout.findViewById(R.id.title); TextView textViewSynopsis = (TextView) currentLayout.findViewById(R.id.synopsys); textViewTitle.setTextSize(20); textViewSynopsis.setTextSize(16); String title = page.getTitle(); if (page.isTeaser()) { title += " (Teaser Project)"; } if (page.isStalled()) { title += "\nStatus: Project Stalled"; } if (page.isAbandoned()) { title += "\nStatus: Project Abandoned"; } if (page.isPending()) { title += "\nStatus: Project Pending Authorization"; } textViewTitle.setText(title); textViewSynopsis.setText(novelCol.getSynopsis()); CheckBox isWatched = (CheckBox) currentLayout.findViewById(R.id.isWatched); isWatched.setChecked(page.isWatched()); isWatched.setOnCheckedChangeListener(new OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { Toast.makeText(getSherlockActivity(), "添加到星标列表: " + page.getTitle(), Toast.LENGTH_SHORT).show(); } else { Toast.makeText(getSherlockActivity(), "从星标列表中移除: " + page.getTitle(), Toast.LENGTH_SHORT).show(); } // update the db! page.setWatched(isChecked); NovelsDao dao = NovelsDao.getInstance(getSherlockActivity()); dao.updatePageModel(page); } }); ImageView ImageViewCover = (ImageView) currentLayout.findViewById(R.id.cover); if (novelCol.getCoverBitmap() == null) { // IN app test, is returning empty bitmap Toast.makeText(getSherlockActivity(), "Bitmap empty", Toast.LENGTH_LONG).show(); } else { if ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) && UIHelper.getStrechCoverPreference(getSherlockActivity())) { Drawable coverDrawable = new BitmapDrawable(getResources(), novelCol.getCoverBitmap()); int coverHeight = novelCol.getCoverBitmap().getHeight(); int coverWidth = novelCol.getCoverBitmap().getWidth(); int screenWidth = (int) (UIHelper.getScreenHeight(getSherlockActivity()) * 0.9); int finalHeight = coverHeight * (screenWidth / coverWidth); ImageViewCover.setBackground(coverDrawable); ImageViewCover.getLayoutParams().height = finalHeight; ImageViewCover.getLayoutParams().width = screenWidth; } else { ImageViewCover.setImageBitmap(novelCol.getCoverBitmap()); ImageViewCover.getLayoutParams().height = novelCol.getCoverBitmap().getHeight(); ImageViewCover.getLayoutParams().width = novelCol.getCoverBitmap().getWidth(); } } } catch (Exception e2) { Log.e(TAG, "Error when setting up chapter list: " + e2.getMessage(), e2); Toast.makeText(getSherlockActivity(), e2.getClass().toString() + ": " + e2.getMessage(), Toast.LENGTH_SHORT).show(); } Log.d(TAG, "Loaded: " + novelCol.getPage()); } } else { Log.e(TAG, e.getClass().toString() + ": " + e.getMessage(), e); Toast.makeText(getSherlockActivity(), e.getClass().toString() + ": " + e.getMessage(), Toast.LENGTH_SHORT).show(); } } public Context getContext() { Context ctx = this.getSherlockActivity(); if (ctx == null) return LNReaderApplication.getInstance().getApplicationContext(); return ctx; } }