@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2) public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) { View v; Savelog.d(TAG, debug, "onCreateView() entered"); v = inflater.inflate(R.layout.fragment_viewer, parent, false); mLoadingView = (ProgressBar) v.findViewById(R.id.fragmentPng_loading_id); mListView = (ListView) v.findViewById(R.id.fragmentPng_list_id); /* There are three scenarios when we reach this point: * 1. Asyntask is completed and data is available for display * 2. Asyntask is completed and data is NOT available * 3. Asyntask is NOT completed */ if (mFileLoader == null) { Savelog.d(TAG, debug, "bitmap array is null"); if (mFetcherTask == null || mFetcherTask.getStatus() == AsyncTask.Status.FINISHED) { Savelog.d(TAG, debug, "Rendering done"); onFetchingCompleted(); } else { Savelog.d(TAG, debug, "Rendering in progress"); mListView.setAlpha(0f); mListView.setVisibility(View.VISIBLE); } } else { Savelog.d(TAG, debug, "bitmap array is not null"); onFetchingCompleted(); } return v; } // end to implementing onCreateView()
@Override protected void onPostExecute(Bitmap bitmap) { if (isCancelled()) { bitmap = null; } if (imageViewReference != null && bitmap != null) { final ImageView imageView = imageViewReference.get(); final BitmapWorkerTask bitmapWorkerTask = getBitmapWorkerTask(imageView); if (this == bitmapWorkerTask && imageView != null) { imageView.setImageBitmap(bitmap); } } else { Savelog.e(TAG, "Unable to load " + key); if (hostFragmentReference != null) { ViewerFragment hostFragment = hostFragmentReference.get(); Activity activity = hostFragment.getActivity(); if (activity != null) { if (bitmap == null) { Savelog.e(TAG, "bitmap is null. Possibly due to OOM error"); Toast.makeText( hostFragment.getActivity(), "Try to refresh this page by scrolling slowly.", Toast.LENGTH_SHORT) .show(); } else { Savelog.d(TAG, debug, "bitmap is not null for key " + key); } } } } }
// once complete, see if ImageView is still around and set up bitmap @Override protected void onPostExecute(FileLoader fileLoader) { super.onPostExecute(fileLoader); if (isCancelled()) { fileLoader = null; } if (hostFragmentReference != null) { final ViewerFragment hostFragment = hostFragmentReference.get(); if (hostFragment != null) { if (fileLoader != null) { hostFragment.mFileLoader = fileLoader; Toast.makeText( hostFragment.getActivity(), "Found " + fileLoader.getNumberOfPages() + " pages", Toast.LENGTH_SHORT) .show(); } else { hostFragment.mFileLoader = null; if (err != null) { Savelog.e(TAG, "Cannot fetch pdf" + "\n" + Savelog.getStack(err)); } Toast.makeText(hostFragment.getActivity(), "Data unavailable", Toast.LENGTH_SHORT) .show(); } // Callback upon finished fetching. hostFragment.onFetchingCompleted(); // Detach host fragment from this task. hostFragment.mFetcherTask = null; } } Savelog.d(TAG, debug, "AsyncTask completed."); }
@Override protected FileLoader doInBackground(Object... arg0) { FileLoader fileLoader = new FileLoader(filename); try { fileLoader.setup(); } catch (Exception e) { err = e; Savelog.e(TAG, "Asyntask rendering unsuccessful." + "\n" + Savelog.getStack(e)); } return fileLoader; }
@Override protected Bitmap doInBackground(Object... params) { Bitmap bitmap = null; key = (String) params[0]; int position = (Integer) params[1]; Savelog.d(TAG, debug, "AsyncTask trying to load bitmap from cache"); if (fileLoader == null) { Savelog.e(TAG, "file loader is null."); } else { int pageNumberNeeded = position + 1; bitmap = fileLoader.load(appContext, maxWidth, pageNumberNeeded, pageRange); } // bitmap could be null if oom error or cache flushed out. return bitmap; }
public void save(Context context) { PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext()) .edit() .putInt(PREF_textsize, textSize) .commit(); Savelog.d(TAG, debug, "Saving textsize=" + textSize); }
public static boolean cancelPotentialWork(String key, ImageView imageView) { final BitmapWorkerTask bitmapWorkerTask = getBitmapWorkerTask(imageView); if (bitmapWorkerTask != null) { final String bitmapKey = bitmapWorkerTask.key; if (bitmapKey != key) { // Cancel previous task Savelog.d(TAG, debug, "Canceling task for key:" + key); bitmapWorkerTask.cancel(true); } else { // The same work is already in progress return false; } } // No task associated with the ImageView, or an existing task was cancelled return true; }
public View getView(int position, View convertView, ViewGroup parent) { ImageView imageView; if (convertView == null) { convertView = hostFragment .getActivity() .getLayoutInflater() .inflate(R.layout.list_item_bitmap, parent, false); } Savelog.d(TAG, debug, "png listview getView " + position); imageView = (ImageView) convertView.findViewById(R.id.listItem_bitmap_id); String key = (String) getItem(position); imageView.setTag(key); loadBitmap(hostFragment, key, position, imageView); return convertView; }
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mFilename = getArguments().getString(EXTRA_filename); Savelog.d(TAG, debug, "onCreate() entered for " + mFilename); mFileLoader = null; /* Create a bitmap that is tall enough to cover the screen. * This step is very important as the pages will be loaded asynchronously. * If the placeholder is too small, the listview will attempt to load all * the pages even if just 1 is to be displayed at any time. This will cause * oom err */ mPlaceHolderBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_action_help); mFetcherTask = new PdfFetcherAsyncTask(this, mFilename); mFetcherTask.execute(); maxWidth = getScreenMaxDimension(this.getActivity()); setRetainInstance(true); } // end to implementing onCreate()
public void onFetchingCompleted() { mLoadingView.setVisibility(View.GONE); mListView.setVisibility(View.VISIBLE); mListView.setAlpha(1f); if (mFileLoader != null) { Savelog.d(TAG, debug, "bitmap page length = " + mFileLoader.getNumberOfPages()); if (mBitmapListAdapter == null) { // Don't reset adapter if already exists mBitmapListAdapter = new BitmapListAdapter(this, mFileLoader.getPageNames()); } mListView.setAdapter(mBitmapListAdapter); mListView.setRecyclerListener( new RecyclerListener() { @Override public void onMovedToScrapHeap(View view) { final ImageView imageView = (ImageView) view.findViewById(R.id.listItem_bitmap_id); Savelog.d(TAG, debug, "Called recycler."); imageView.setImageBitmap(null); imageView.setTag(null); } }); } }
@Override protected void onCancelled() { super.onCancelled(); Savelog.d(TAG, debug, "AsyncTask canceled."); }
public void load(Context context) { textSize = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext()) .getInt(PREF_textsize, DefaultTextSize); Savelog.d(TAG, debug, "Loading textsize=" + textSize); }