]> rtime.felk.cvut.cz Git - hornmich/skoda-qr-demo.git/blobdiff - QRScanner/glass/src/main/java/cz/cvut/fel/dce/qrscanner/pdfviewer/PdfViewActivity.java
Implement zoom value field in the layout
[hornmich/skoda-qr-demo.git] / QRScanner / glass / src / main / java / cz / cvut / fel / dce / qrscanner / pdfviewer / PdfViewActivity.java
index 1ad54ae310926d6bed55dd4b62d5240e13cb8d06..3da70ad9a97c4d7379debeddbdc0d0f13ca869ea 100644 (file)
@@ -3,42 +3,55 @@ package cz.cvut.fel.dce.qrscanner.pdfviewer;
 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);
@@ -46,6 +59,13 @@ public class PdfViewActivity extends Activity implements ViewTreeObserver.OnGlob
                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.");
@@ -127,22 +147,15 @@ public class PdfViewActivity extends Activity implements ViewTreeObserver.OnGlob
                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 {
@@ -169,20 +182,13 @@ public class PdfViewActivity extends Activity implements ViewTreeObserver.OnGlob
                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) {
 
@@ -198,4 +204,46 @@ public class PdfViewActivity extends Activity implements ViewTreeObserver.OnGlob
                        }
                }
        }
+
+       @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.");
+               }
+       }
 }