package moe.feng.nhentai.ui.fragment; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v7.widget.AppCompatTextView; import android.util.Log; import android.view.View; import android.widget.ImageView; import com.google.gson.Gson; import moe.feng.nhentai.R; import moe.feng.nhentai.api.PageApi; import moe.feng.nhentai.model.Book; import moe.feng.nhentai.ui.GalleryActivity; import moe.feng.nhentai.ui.common.LazyFragment; import moe.feng.nhentai.util.AsyncTask; import moe.feng.nhentai.util.task.PageDownloader; import moe.feng.nhentai.view.WheelProgressView; import uk.co.senab.photoview.PhotoViewAttacher; public class BookPageFragment extends LazyFragment { private Book book; private int pageNum; private ImageView mImageView; private PhotoViewAttacher mPhotoViewAttacher; private WheelProgressView mWheelProgress; private static final String ARG_BOOK_DATA = "arg_book_data", ARG_PAGE_NUM = "arg_page_num"; public static final String TAG = BookPageFragment.class.getSimpleName(); public static final int MSG_FINISHED_LOADING = 1, MSG_ERROR_LOADING = 2; public static BookPageFragment newInstance(Book book, int pageNum) { BookPageFragment fragment = new BookPageFragment(); Bundle data = new Bundle(); data.putString(ARG_BOOK_DATA, book.toJSONString()); data.putInt(ARG_PAGE_NUM, pageNum); fragment.setArguments(data); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle data = getArguments(); book = new Gson().fromJson(data.getString(ARG_BOOK_DATA), Book.class); pageNum = data.getInt(ARG_PAGE_NUM); setHandler(new MyHandler()); } @Override public int getLayoutResId() { return R.layout.fragment_book_page; } @Override public void finishCreateView(Bundle state) { mImageView = $(R.id.image_view); mPhotoViewAttacher = new PhotoViewAttacher(mImageView); AppCompatTextView mPageNumText = $(R.id.page_number); mWheelProgress = $(R.id.wheel_progress); mPageNumText.setText(Integer.toString(pageNum)); $(R.id.background_view).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (getActivity() instanceof GalleryActivity) { ((GalleryActivity) getActivity()).toggleControlBar(); } } }); new DownloadTask().execute(); } @Override public void onPause() { super.onPause(); try { Drawable toRecycle = mImageView.getDrawable(); if ( toRecycle != null && toRecycle instanceof BitmapDrawable ) { if (((BitmapDrawable) mImageView.getDrawable()).getBitmap() != null){ ((BitmapDrawable) mImageView.getDrawable()).getBitmap().recycle(); } } mImageView.setImageDrawable(null); mPhotoViewAttacher.cleanup(); } catch (Exception e) { Log.d(TAG, "onPause: Error Recycling"); } } private class DownloadTask extends AsyncTask<Void, Void, Bitmap> { @Override protected Bitmap doInBackground(Void... params) { return PageApi.getPageOriginImage(getApplicationContext(), book, pageNum); } @Override protected void onPostExecute(Bitmap result) { super.onPostExecute(result); Log.d(TAG, "onPostExecute: Donwload Image " + pageNum); if (result != null) { $(R.id.loading_content).setVisibility(View.GONE); mImageView.setImageBitmap(result); mPhotoViewAttacher.update(); mPhotoViewAttacher.setOnViewTapListener(new PhotoViewAttacher.OnViewTapListener() { @Override public void onViewTap(View view, float v, float v1) { if (getActivity() instanceof GalleryActivity) { ((GalleryActivity) getActivity()).toggleControlBar(); } } }); } } } private class MyHandler extends Handler { @Override public void handleMessage(Message msg) { switch (msg.what) { case MSG_FINISHED_LOADING: if (PageApi.isPageOriginImageLocalFileExist(getApplicationContext(), book, pageNum) || PageApi.isPageOriginImageLocalFileExist(getApplicationContext(),book,pageNum)) { $(R.id.loading_content).setVisibility(View.GONE); if (mImageView != null) { Log.d(TAG, "onPostExecute: Donwload Handler"); mImageView.setImageBitmap(PageApi.getPageOriginImage(getApplicationContext(), book, pageNum)); if (mPhotoViewAttacher != null) { mPhotoViewAttacher.update(); mPhotoViewAttacher.setOnViewTapListener(new PhotoViewAttacher.OnViewTapListener() { @Override public void onViewTap(View view, float v, float v1) { if (getActivity() instanceof GalleryActivity) { ((GalleryActivity) getActivity()).toggleControlBar(); } } }); } } } else { if (getActivity() != null && getActivity() instanceof GalleryActivity) { PageDownloader downloader = ((GalleryActivity) getActivity()).getPageDownloader(); if (downloader != null) { downloader.setDownloaded(pageNum - 1, false); if (!downloader.isDownloading()) { downloader.start(); } } else { new DownloadTask().execute(); return; } } else { new DownloadTask().execute(); } } break; case MSG_ERROR_LOADING: mWheelProgress.setVisibility(View.INVISIBLE); break; } } } }