import android.app.Activity;
import android.content.Context;
import android.content.Intent;
-import android.graphics.Bitmap;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
+import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
+import android.view.View;
import android.view.ViewTreeObserver;
import android.view.WindowManager;
import android.widget.FrameLayout;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
import android.widget.Toast;
import java.io.File;
import cz.cvut.fel.dce.qrscanner.R;
-import cz.cvut.fel.dce.qrscanner.mupdf.MuPDFCore;
-public class PdfViewActivity extends Activity implements ViewTreeObserver.OnGlobalLayoutListener, SceneView.SceneChange, SensorEventListener {
+public class PdfViewActivity extends Activity implements ViewTreeObserver.OnGlobalLayoutListener, PdfPageView.SceneChange, SensorEventListener {
+
+ enum ViewStates {
+ SCROLLING,
+ VIEWING
+ };
+
public static final String TAG = "PdfViewActivity";
private FrameLayout mPdfImageContainer;
+ private TextView mCurrentPageNumber;
+ private TextView mLastPageNumber;
+ private TextView mViewerStateText;
+ private TextView mZoomValue;
private ViewTreeObserver mPreviewImgObserver;
private String mFilePath;
private PdfPageView mPdfView;
private Boolean mPdfLoaded = false;
private SensorManager mSensorManager;
+ private ViewStates mViewStates;
+ private RelativeLayout mProgressContainer;
/**
* Start position of the gesture on touchpad
*/
private float startX;
-
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
setContentView(R.layout.activity_pdf_view);
mPdfImageContainer = (FrameLayout) findViewById(R.id.pdf_view_container);
+ mCurrentPageNumber = (TextView) findViewById(R.id.page_number);
+ mLastPageNumber = (TextView) findViewById(R.id.total_pages_num);
+ mViewerStateText = (TextView) findViewById(R.id.pdf_viewer_state);
+ mZoomValue = (TextView) findViewById(R.id.zoom_value);
+ mViewStates = ViewStates.SCROLLING;
+ mProgressContainer = (RelativeLayout) findViewById(R.id.progress_container);
+
if (mPdfImageContainer != null) {
mPreviewImgObserver = mPdfImageContainer.getViewTreeObserver();
Log.i(TAG, "Registering mPreviewImgObserver OnGlobalLayoutListener.");
try {
String picturePath = mFilePath;
Log.i(TAG, "Path to component files: " + picturePath);
-
- MuPDFCore core = new MuPDFCore(getApplicationContext(), picturePath);
- Log.d(TAG, "numpages: "+ core.countPages());
- MuPDFCore.Cookie cookie = core.new Cookie();
- int pageW = (int)core.getPageSize(0).x;
- int pageH = (int)core.getPageSize(0).y;
- Log.d(TAG, "page size: " + pageW + ", " + pageH);
- Bitmap.Config mPdfBitmapConf = Bitmap.Config.ARGB_8888;
- Bitmap mPdfBitmap = Bitmap.createBitmap(pageW, pageH, mPdfBitmapConf);
- core.drawPage(mPdfBitmap, 0, pageW, pageH,0 , 0, pageW, pageH, cookie);
- mPdfView = new PdfPageView(getApplicationContext(), mPdfBitmap, 0, 0, 100, (float) mPdfBitmap.getWidth()/2, 0, (float) mPdfBitmap.getWidth(), (float) mPdfBitmap.getHeight()/2, 0, (float) mPdfBitmap.getHeight());
+ mPdfView = new PdfPageView(getApplicationContext(), picturePath);
+ mCurrentPageNumber.setText(Integer.toString(mPdfView.getActualPage()+1));
+ mLastPageNumber.setText(Integer.toString(mPdfView.getLastPage()+1));
mPdfView.setListener(this);
- mPdfView.setDefaultValues(0, 0, 0);
+ mPdfView.setPage(0);
+ new LoadPageTask().execute();
+
+
if (mPdfImageContainer != null) {
- mPdfImageContainer.addView(mPdfView);
- mPdfImageContainer.invalidate();
mPdfLoaded = true;
}
else {
if (event.getAction() == MotionEvent.ACTION_MOVE) {
dzoom = event.getRawX() - startX;
Log.d(TAG,"move_action, dzoom: " + dzoom);
- mPdfView.zoom(dzoom /1000f);
+ zoomPage(dzoom /1000f);
startX = event.getRawX();
return false;
}
return super.onGenericMotionEvent(event);
}
- @Override
- public void onSceneChanged(SceneView source) {
- if (mPdfView != null) {
- mPdfView.invalidate();
- }
- }
-
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}
}
+
+ @Override
+ public void onViewChanged(PdfPageView source) {
+ if (mPdfView != null) {
+ mPdfView.invalidate();
+ }
+ }
+
+ @Override
+ public void onPageLoaded(PdfPageView source) {
+
+ }
+
+ private void zoomPage(float deltaZoom) {
+ mPdfView.zoom(deltaZoom);
+ mZoomValue.setText(Integer.toString(Math.round(mPdfView.getZoomRatio()*100)));
+ }
+
+ private class LoadPageTask extends AsyncTask<Void, Void, Void> {
+
+ @Override
+ protected Void doInBackground(Void[] objects) {
+ mPdfView.loadPage();
+ return null;
+ }
+
+ @Override
+ protected void onPreExecute() {
+ super.onPreExecute();
+ Log.d(TAG, "Starting loading of the PDF page asynchronously.");
+ mProgressContainer.setVisibility(View.VISIBLE);
+ }
+
+ @Override
+ protected void onPostExecute(Void aVoid) {
+ super.onPostExecute(aVoid);
+ mProgressContainer.setVisibility(View.INVISIBLE);
+ mPdfImageContainer.addView(mPdfView);
+ zoomPage(0.0f); // just for update the zoom value indicator
+ Log.d(TAG, "PDF page loaded.");
+ }
+ }
}