X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/cb8761f66f2c8baa5bbbd93ad8ca0eb141020307..5ae7704ef1a9e40ca0193c303b9185de28f04b2d:/src/eu/alefzero/owncloud/ui/fragment/FileDetailFragment.java diff --git a/src/eu/alefzero/owncloud/ui/fragment/FileDetailFragment.java b/src/eu/alefzero/owncloud/ui/fragment/FileDetailFragment.java index e8878762..78c636b4 100644 --- a/src/eu/alefzero/owncloud/ui/fragment/FileDetailFragment.java +++ b/src/eu/alefzero/owncloud/ui/fragment/FileDetailFragment.java @@ -23,7 +23,9 @@ import android.content.Intent; import android.content.IntentFilter; import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.net.Uri; import android.os.Bundle; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; @@ -49,13 +51,14 @@ import eu.alefzero.owncloud.datamodel.OCFile; public class FileDetailFragment extends SherlockFragment implements OnClickListener { - public static final String FILE = "FILE"; + public static final String EXTRA_FILE = "FILE"; private DownloadFinishReceiver mDownloadFinishReceiver; private Intent mIntent; private int mLayout; private View mView; private OCFile mFile; + private static final String TAG = "FileDetailFragment"; /** * Default constructor - contains real layout @@ -78,6 +81,18 @@ public class FileDetailFragment extends SherlockFragment implements } } + /** + * Use this when creating the fragment and display + * a file at the same time + * + * @param showDetailsIntent The Intent with the required parameters + * @see FileDetailFragment#updateFileDetails(Intent) + */ + public FileDetailFragment(Intent showDetailsIntent) { + mIntent = showDetailsIntent; + mLayout = R.layout.file_details_fragment; + } + @Override public void onResume() { super.onResume(); @@ -94,6 +109,46 @@ public class FileDetailFragment extends SherlockFragment implements mDownloadFinishReceiver = null; } + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = null; + view = inflater.inflate(mLayout, container, false); + mView = view; + if(mLayout == R.layout.file_details_fragment){ + // Phones will launch an activity with this intent + if(mIntent == null){ + mIntent = getActivity().getIntent(); + } + updateFileDetails(); + } + + return view; + } + + @Override + public View getView() { + return super.getView() == null ? mView : super.getView(); + } + + @Override + public void onClick(View v) { + Toast.makeText(getActivity(), "Downloading", Toast.LENGTH_LONG).show(); + Intent i = new Intent(getActivity(), FileDownloader.class); + i.putExtra(FileDownloader.EXTRA_ACCOUNT, + mIntent.getParcelableExtra(FileDownloader.EXTRA_ACCOUNT)); + i.putExtra(FileDownloader.EXTRA_FILE_PATH, mFile.getRemotePath()); + getActivity().startService(i); + } + + /** + * Can be used to get the file that is currently being displayed. + * @return The file on the screen. + */ + public OCFile getDisplayedFile(){ + return mFile; + } + /** * Use this method to signal this Activity that it shall update its view. * @@ -101,7 +156,7 @@ public class FileDetailFragment extends SherlockFragment implements * this file The intent needs to have these extras: *
* - * {@link FileDetailFragment#FILE}: An {@link OCFile} + * {@link FileDetailFragment#EXTRA_FILE}: An {@link OCFile} * {@link FileDownloader#EXTRA_ACCOUNT}: The Account that file * belongs to (required for downloading) */ @@ -110,8 +165,12 @@ public class FileDetailFragment extends SherlockFragment implements updateFileDetails(); } + /** + * Updates the view with all relevant details about that file. + */ private void updateFileDetails() { - mFile = mIntent.getParcelableExtra(FILE); + mFile = mIntent.getParcelableExtra(EXTRA_FILE); + Button downloadButton = (Button) getView().findViewById(R.id.fdDownloadBtn); if (mFile != null) { // set file details @@ -119,72 +178,93 @@ public class FileDetailFragment extends SherlockFragment implements setFiletype(DisplayUtils.convertMIMEtoPrettyPrint(mFile .getMimetype())); setFilesize(mFile.getFileLength()); + setTimeCreated(mFile.getCreationTimestamp()); + setTimeModified(mFile.getModificationTimestamp()); // Update preview if (mFile.getStoragePath() != null) { - if (mFile.getMimetype().startsWith("image/")) { - ImageView preview = (ImageView) getView().findViewById( - R.id.fdPreview); - Bitmap bmp = BitmapFactory.decodeFile(mFile.getStoragePath()); - preview.setImageBitmap(bmp); + try { + if (mFile.getMimetype().startsWith("image/")) { + ImageView preview = (ImageView) getView().findViewById( + R.id.fdPreview); + Bitmap bmp = BitmapFactory.decodeFile(mFile.getStoragePath()); + preview.setImageBitmap(bmp); + } + } catch (OutOfMemoryError e) { + Log.e(TAG, "Out of memory occured for file with size " + mFile.getFileLength()); } + downloadButton.setText(R.string.filedetails_open); + downloadButton.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + Intent i = new Intent(Intent.ACTION_VIEW); + i.setDataAndType(Uri.parse("file://"+mFile.getStoragePath()), mFile.getMimetype()); + startActivity(i); + } + }); + } else { + // Make download button effective + downloadButton.setOnClickListener(this); } - - // Make download button effective - Button downloadButton = (Button) getView().findViewById(R.id.fdDownloadBtn); - downloadButton.setOnClickListener(this); } } + /** + * Updates the filename in view + * @param filename to set + */ private void setFilename(String filename) { TextView tv = (TextView) getView().findViewById(R.id.fdFilename); if (tv != null) tv.setText(filename); } + /** + * Updates the MIME type in view + * @param mimetype to set + */ private void setFiletype(String mimetype) { TextView tv = (TextView) getView().findViewById(R.id.fdType); if (tv != null) tv.setText(mimetype); } + /** + * Updates the file size in view + * @param filesize in bytes to set + */ private void setFilesize(long filesize) { TextView tv = (TextView) getView().findViewById(R.id.fdSize); if (tv != null) - tv.setText(DisplayUtils.bitsToHumanReadable(filesize)); + tv.setText(DisplayUtils.bytesToHumanReadable(filesize)); } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - View view = null; - view = inflater.inflate(mLayout, container, false); - mView = view; - if(mLayout == R.layout.file_details_fragment){ - mIntent = getActivity().getIntent(); - updateFileDetails(); + + /** + * Updates the time that the file was created in view + * @param milliseconds Unix time to set + */ + private void setTimeCreated(long milliseconds){ + TextView tv = (TextView) getView().findViewById(R.id.fdCreated); + if(tv != null){ + tv.setText(DisplayUtils.unixTimeToHumanReadable(milliseconds)); } - - return view; } - - - @Override - public View getView() { - return super.getView() == null ? mView : super.getView(); - } - - @Override - public void onClick(View v) { - Toast.makeText(getActivity(), "Downloading", Toast.LENGTH_LONG).show(); - Intent i = new Intent(getActivity(), FileDownloader.class); - i.putExtra(FileDownloader.EXTRA_ACCOUNT, - mIntent.getParcelableExtra(FileDownloader.EXTRA_ACCOUNT)); - i.putExtra(FileDownloader.EXTRA_FILE_PATH, mFile.getPath()); - getActivity().startService(i); + /** + * Updates the time that the file was last modified + * @param milliseconds Unix time to set + */ + private void setTimeModified(long milliseconds){ + TextView tv = (TextView) getView().findViewById(R.id.fdModified); + if(tv != null){ + tv.setText(DisplayUtils.unixTimeToHumanReadable(milliseconds)); + } } + /** + * Once the file download has finished -> update view + * @author Bartek Przybylski + */ private class DownloadFinishReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) {