From 66e79553cbd46bd9e8fd6daa79f183cf33437465 Mon Sep 17 00:00:00 2001 From: Kristin Muterspaw <kmmuterspaw@gmail.com> Date: Thu, 26 May 2016 15:27:12 -0400 Subject: [PATCH] In My Documents activity, when an item is pressed, Field Day checks whether it's a directory or file. If it's a directory, then the list of files is replaced with the file in the selected directory and the parent directory of that one so the user can go back if they want. If it's a file, it opens My Document Viewer and displays the file. PDFs are rendered as bitmaps in Android, so those are handled separately than text files. My Document Viewer currently only works for PDFs. PDF is rendered! --- app/src/main/AndroidManifest.xml | 10 +++- .../edu/fieldday/MyDocumentViewer.java | 51 +++++++++++++++++++ .../edu/fieldday/MyDocumentsActivity.java | 31 +++++++++-- .../main/res/layout/activity_mydocviewier.xml | 39 ++++++++++++++ 4 files changed, 124 insertions(+), 7 deletions(-) create mode 100644 app/src/main/java/fieldscience/cs/earlham/edu/fieldday/MyDocumentViewer.java create mode 100644 app/src/main/res/layout/activity_mydocviewier.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1361f84..ac55388 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,8 +45,14 @@ android:label="Connect to Google Drive" android:theme="@style/MainTheme"> </activity> - <activity android:name=".MyDocumentsActivity" - android:label="Interact with documents" + <activity + android:name=".MyDocumentsActivity" + android:label="My Documents" + android:theme="@style/MainTheme"> + </activity> + <activity + android:name=".MyDocumentViewer" + android:label="My Documents Viewer" android:theme="@style/MainTheme"> </activity> <service diff --git a/app/src/main/java/fieldscience/cs/earlham/edu/fieldday/MyDocumentViewer.java b/app/src/main/java/fieldscience/cs/earlham/edu/fieldday/MyDocumentViewer.java new file mode 100644 index 0000000..c79bcdb --- /dev/null +++ b/app/src/main/java/fieldscience/cs/earlham/edu/fieldday/MyDocumentViewer.java @@ -0,0 +1,51 @@ +package fieldscience.cs.earlham.edu.fieldday; + +import android.app.Activity; +import android.graphics.Bitmap; +import android.graphics.pdf.PdfRenderer; +import android.os.Bundle; +import android.os.ParcelFileDescriptor; +import android.util.Log; +import android.widget.ImageView; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; + + +public class MyDocumentViewer extends Activity { + + File fileToOpen; + private static int index = 0; + private ImageView pdfImageView; + + @Override + protected void onCreate(Bundle savedInstanceState){ + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_mydocviewier); + pdfImageView = (ImageView) findViewById(R.id.pdfView); + fileToOpen = (File) getIntent().getExtras().get("fileToOpen"); + if (fileToOpen.getName().endsWith(".pdf")){ + openPDF(); + Log.d("Open PDF", fileToOpen.getName()); + } + + } + + public void openPDF(){ + try { + ParcelFileDescriptor fileDescriptor = ParcelFileDescriptor.open(fileToOpen, ParcelFileDescriptor.MODE_READ_ONLY); + PdfRenderer pdfRenderer = new PdfRenderer(fileDescriptor); + PdfRenderer.Page page = pdfRenderer.openPage(index); + Bitmap pdf = Bitmap.createBitmap(page.getWidth(), page.getHeight(), Bitmap.Config.ARGB_8888); + page.render(pdf, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY); + pdfImageView.setImageBitmap(pdf); + } catch (FileNotFoundException e){ + e.printStackTrace(); + } catch (IOException e){ + e.printStackTrace(); + } + + } + +} diff --git a/app/src/main/java/fieldscience/cs/earlham/edu/fieldday/MyDocumentsActivity.java b/app/src/main/java/fieldscience/cs/earlham/edu/fieldday/MyDocumentsActivity.java index bc55d2f..35da2d4 100644 --- a/app/src/main/java/fieldscience/cs/earlham/edu/fieldday/MyDocumentsActivity.java +++ b/app/src/main/java/fieldscience/cs/earlham/edu/fieldday/MyDocumentsActivity.java @@ -5,6 +5,7 @@ import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; +import android.content.Intent; import android.content.SharedPreferences; import android.os.AsyncTask; import android.os.Bundle; @@ -69,10 +70,8 @@ public class MyDocumentsActivity extends Activity { dirList = new ArrayList<String>(); localDirList = new ArrayList<File>(); - File rootDir = new File(directory); - for (File f : rootDir.listFiles()){ - localDirList.add(f); - } + final File rootDir = new File(directory); + localDirList = getFilesInDir(rootDir); firstPage = true; context = this; @@ -83,7 +82,20 @@ public class MyDocumentsActivity extends Activity { filesListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { - + if (myDocumentsAdapter.getItem(position).isDirectory()){ + File folder = myDocumentsAdapter.getItem(position); + localDirList = getFilesInDir(folder); + if (!folder.equals(rootDir)) { + localDirList.add(folder.getParentFile()); + } + myDocumentsAdapter.clear(); + myDocumentsAdapter.addAll(localDirList); + myDocumentsAdapter.notifyDataSetChanged(); + } else { + Intent i = new Intent(context, MyDocumentViewer.class); + i.putExtra("fileToOpen", myDocumentsAdapter.getItem(position)); + startActivity(i); + } } }); @@ -117,6 +129,15 @@ public class MyDocumentsActivity extends Activity { builder.create().show(); } + public ArrayList<File> getFilesInDir(File directory){ + ArrayList<File> list = new ArrayList<File>(); + for (File f : directory.listFiles()) { + list.add(f); + Log.d("File name", f.getName()); + } + return list; + } + public File createDirectory(String dirName) { try { File sd = Environment.getExternalStorageDirectory(); diff --git a/app/src/main/res/layout/activity_mydocviewier.xml b/app/src/main/res/layout/activity_mydocviewier.xml new file mode 100644 index 0000000..4ad00e9 --- /dev/null +++ b/app/src/main/res/layout/activity_mydocviewier.xml @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:orientation="vertical" + android:layout_width="match_parent" + android:layout_height="match_parent"> + + <ImageView + android:id="@+id/pdfView" + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="1" + android:background="@android:color/white" + android:scaleType="fitCenter" /> + + <LinearLayout + style="?android:attr/buttonBarStyle" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:measureWithLargestChild="true" + android:orientation="horizontal" > + + <Button + android:id="@+id/previous" + style="?android:attr/buttonBarButtonStyle" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="1" + android:text="Previous" /> + + <Button + android:id="@+id/next" + style="?android:attr/buttonBarButtonStyle" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="1" + android:text="Next" /> + </LinearLayout> +</LinearLayout> \ No newline at end of file -- GitLab