1 package cz.cvut.fel.dce.qrscanner;
3 import android.app.Activity;
4 import android.content.Intent;
5 import android.graphics.Bitmap;
6 import android.graphics.Color;
7 import android.net.Uri;
8 import android.os.AsyncTask;
9 import android.os.Bundle;
10 import android.util.Log;
11 import android.view.KeyEvent;
12 import android.view.Menu;
13 import android.view.MenuItem;
14 import android.view.View;
15 import android.view.ViewTreeObserver;
16 import android.widget.ImageView;
17 import android.widget.RelativeLayout;
18 import android.widget.Toast;
22 import cz.cvut.fel.dce.qrscanner.mupdf.MuPDFCore;
23 import cz.cvut.fel.dce.qrscanner.pdfviewer.PdfPageView;
24 import cz.cvut.fel.dce.qrscanner.pdfviewer.PdfViewActivity;
27 public class PreviewActivity extends Activity implements ViewTreeObserver.OnGlobalLayoutListener{
29 public static final String TAG = "PreviewActivity";
30 public static final String STORAGE_PATH = "/storage/sdcard0/Pictures";
31 public static final String SKODA_DOCS_PATH_EXTENSION = "/skoda/components/";
32 public static final String SKODA_COMP_PICTURE_NAME = "Abbildung.pdf";
33 public static final String SKODA_COMP_MANUFACTURING = "Arbeitseinleitung.pdf";
34 public static final String SKODA_COMP_MANUFACT_IMAGES = "Bild_Arbeitseinleitung.pdf";
35 public static final String SKODA_COMP_CONTACTS = "Angaben.pdf";
36 public static final String SKODA_COMP_MANUFACT_GUIDE = "Werkstatt_Einleitung.pdf";
38 private ImageView mPreviewImg;
39 private RelativeLayout mProgressContainer;
40 private ViewTreeObserver mPreviewImgObserver;
41 private String mComponentId;
42 private String mComponentRootPath;
43 private PdfPageView mPdfView;
44 private boolean mPdfLoaded;
47 protected void onCreate(Bundle savedInstanceState) {
48 super.onCreate(savedInstanceState);
49 setContentView(R.layout.activity_preview);
51 mPreviewImg = (ImageView) findViewById(R.id.imgComponent);
52 mProgressContainer = (RelativeLayout) findViewById(R.id.progress_container);
54 if (mPreviewImg != null) {
55 mPreviewImg.setMaxWidth(640);
56 mPreviewImg.setMaxHeight(360);
57 mPreviewImg.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
58 mPreviewImgObserver = mPreviewImg.getViewTreeObserver();
59 Log.i(TAG, "Registering mPreviewImgObserver OnGlobalLayoutListener.");
60 mPreviewImgObserver.addOnGlobalLayoutListener(this);
63 Log.e(TAG, "ImageView for preview image could not be found in the resources.");
64 mPreviewImgObserver = null;
67 Intent intent = getIntent();
68 mComponentId = intent.getStringExtra("COMPONENT_ID");
70 if (mComponentId != null) {
71 Log.i(TAG, "Received component id: " + mComponentId);
72 mComponentRootPath = STORAGE_PATH + SKODA_DOCS_PATH_EXTENSION + mComponentId + "/";
73 File rootPath = new File(mComponentRootPath);
74 if (!rootPath.isDirectory()) {
75 Toast toast = Toast.makeText(getApplicationContext(), "Component not found", Toast.LENGTH_LONG);
81 Log.i(TAG, "No component id received");
87 protected void onDestroy() {
89 Log.i(TAG, "Unregistering mPreviewImgObserver OnGlobalLayoutListener.");
90 if (mPreviewImgObserver != null && mPreviewImgObserver.isAlive()) {
91 mPreviewImgObserver.removeOnGlobalLayoutListener(this);
96 public boolean onCreateOptionsMenu(Menu menu) {
97 // Inflate the menu; this adds items to the action bar if it is present.
98 getMenuInflater().inflate(R.menu.menu_preview, menu);
103 public void onGlobalLayout() {
105 Log.d(TAG, "PDF file already loaded.");
109 String picturePath = mComponentRootPath + SKODA_COMP_PICTURE_NAME;
110 Log.i(TAG, "Path to component files: " + picturePath);
111 mPdfView = new PdfPageView(getApplicationContext(), picturePath);
113 new LoadPageTask().execute();
117 } catch (Exception e) {
118 Toast toast = Toast.makeText(getApplicationContext(), "Component preview could not be loaded.", Toast.LENGTH_LONG);
124 /** Called when the user touches the button */
125 public void showContacts() {
126 showPDF(mComponentRootPath + SKODA_COMP_CONTACTS);
129 /** Called when the user touches the button */
130 public void showManufacturing() {
131 showPDF(mComponentRootPath + SKODA_COMP_MANUFACTURING);
134 /** Called when the user touches the button */
135 public void showManufactImages() {
136 showPDF(mComponentRootPath + SKODA_COMP_MANUFACT_IMAGES);
139 /** Called when the user touches the button */
140 public void showManufactGuide() {
141 showPDF(mComponentRootPath + SKODA_COMP_MANUFACT_GUIDE);
144 private void showPDF(String filePath) {
145 Intent preview = new Intent(this, PdfViewActivity.class);
146 preview.putExtra("FILE_PATH", filePath);
147 startActivity(preview);
151 public boolean onKeyDown(int keyCode, KeyEvent event) {
152 if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
156 return super.onKeyDown(keyCode, event);
160 public boolean onOptionsItemSelected(MenuItem item) {
161 // Handle action bar item clicks here. The action bar will
162 // automatically handle clicks on the Home/Up button, so long
163 // as you specify a parent activity in AndroidManifest.xml.
164 int id = item.getItemId();
166 if (id == R.id.show_contacts) {
170 else if (id == R.id.show_manufacturing) {
174 else if (id == R.id.show_pictured_manufacturing) {
175 showManufactImages();
178 else if (id == R.id.show_workshop) {
182 else if (id == R.id.stop) {
187 return super.onOptionsItemSelected(item);
191 private class LoadPageTask extends AsyncTask<Void, Void, Void> {
194 protected Void doInBackground(Void[] objects) {
200 protected void onPreExecute() {
201 super.onPreExecute();
202 Log.d(TAG, "Starting loading of the PDF page asynchronously.");
203 mProgressContainer.setVisibility(View.VISIBLE);
207 protected void onPostExecute(Void aVoid) {
208 super.onPostExecute(aVoid);
209 mProgressContainer.setVisibility(View.INVISIBLE);
210 mPreviewImg.setMinimumWidth(640);
211 mPreviewImg.setMinimumHeight(360);
212 mPreviewImg.setImageBitmap(mPdfView.getPageBitmap());
213 mPreviewImg.invalidate();
214 Log.d(TAG, "PDF page loaded.");