]> rtime.felk.cvut.cz Git - hornmich/skoda-qr-demo.git/blob - QRScanner/glass/src/main/java/cz/cvut/fel/dce/qrscanner/PreviewActivity.java
6ee7b2c29fc412698df13e0f8fa9349baafe7b21
[hornmich/skoda-qr-demo.git] / QRScanner / glass / src / main / java / cz / cvut / fel / dce / qrscanner / PreviewActivity.java
1 package cz.cvut.fel.dce.qrscanner;
2
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;
19
20 import java.io.File;
21
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;
25
26
27 public class PreviewActivity extends Activity implements ViewTreeObserver.OnGlobalLayoutListener{
28
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";
37
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;
45
46         @Override
47         protected void onCreate(Bundle savedInstanceState) {
48                 super.onCreate(savedInstanceState);
49                 setContentView(R.layout.activity_preview);
50                 mPdfLoaded = false;
51                 mPreviewImg = (ImageView) findViewById(R.id.imgComponent);
52                 mProgressContainer = (RelativeLayout) findViewById(R.id.progress_container);
53
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);
61                 }
62                 else {
63                         Log.e(TAG, "ImageView for preview image could not be found in the resources.");
64                         mPreviewImgObserver = null;
65                 }
66
67                 Intent intent = getIntent();
68                 mComponentId = intent.getStringExtra("COMPONENT_ID");
69
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);
76                                 toast.show();
77                                 finish();
78                         }
79                 }
80                 else {
81                         Log.i(TAG, "No component id received");
82                         finish();
83                 }
84         }
85
86         @Override
87         protected void onDestroy() {
88                 super.onDestroy();
89                 Log.i(TAG, "Unregistering mPreviewImgObserver OnGlobalLayoutListener.");
90                 if (mPreviewImgObserver != null && mPreviewImgObserver.isAlive()) {
91                         mPreviewImgObserver.removeOnGlobalLayoutListener(this);
92                 }
93         }
94
95         @Override
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);
99                 return true;
100         }
101
102         @Override
103         public void onGlobalLayout() {
104                 if (mPdfLoaded) {
105                         Log.d(TAG, "PDF file already loaded.");
106                         return;
107                 }
108                 try {
109                         String picturePath = mComponentRootPath + SKODA_COMP_PICTURE_NAME;
110                         Log.i(TAG, "Path to component files: " + picturePath);
111                         mPdfView = new PdfPageView(getApplicationContext(), picturePath);
112                         mPdfView.setPage(0);
113                         new LoadPageTask().execute();
114
115                         mPdfLoaded = true;
116
117                 } catch (Exception e) {
118                         Toast toast = Toast.makeText(getApplicationContext(), "Component preview could not be loaded.", Toast.LENGTH_LONG);
119                         toast.show();
120                         e.printStackTrace();
121                 }
122         }
123
124         /** Called when the user touches the button */
125         public void showContacts() {
126                 showPDF(mComponentRootPath + SKODA_COMP_CONTACTS);
127         }
128
129         /** Called when the user touches the button */
130         public void showManufacturing() {
131                 showPDF(mComponentRootPath + SKODA_COMP_MANUFACTURING);
132         }
133
134         /** Called when the user touches the button */
135         public void showManufactImages() {
136                 showPDF(mComponentRootPath + SKODA_COMP_MANUFACT_IMAGES);
137         }
138
139         /** Called when the user touches the button */
140         public void showManufactGuide() {
141                 showPDF(mComponentRootPath + SKODA_COMP_MANUFACT_GUIDE);
142         }
143
144         private void showPDF(String filePath) {
145                 Intent preview = new Intent(this, PdfViewActivity.class);
146                 preview.putExtra("FILE_PATH", filePath);
147                 startActivity(preview);
148         }
149
150         @Override
151         public boolean onKeyDown(int keyCode, KeyEvent event) {
152                 if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
153                         openOptionsMenu();
154                         return true;
155                 }
156                 return super.onKeyDown(keyCode, event);
157         }
158
159         @Override
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();
165
166                 if (id == R.id.show_contacts) {
167                         showContacts();
168                         return true;
169                 }
170                 else if (id == R.id.show_manufacturing) {
171                         showManufacturing();
172                         return true;
173                 }
174                 else if (id == R.id.show_pictured_manufacturing) {
175                         showManufactImages();
176                         return true;
177                 }
178                 else if (id == R.id.show_workshop) {
179                         showManufactGuide();
180                         return true;
181                 }
182                 else if (id == R.id.stop) {
183                         finish();
184                         return true;
185                 }
186                 else {
187                         return super.onOptionsItemSelected(item);
188                 }
189         }
190
191         private class LoadPageTask extends AsyncTask<Void, Void, Void> {
192
193                 @Override
194                 protected Void doInBackground(Void[] objects) {
195                         mPdfView.loadPage();
196                         return null;
197                 }
198
199                 @Override
200                 protected void onPreExecute() {
201                         super.onPreExecute();
202                         Log.d(TAG, "Starting loading of the PDF page asynchronously.");
203                         mProgressContainer.setVisibility(View.VISIBLE);
204                 }
205
206                 @Override
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.");
215                 }
216         }
217
218 }