*/
package com.owncloud.android.ui.fragment;
-import java.lang.ref.WeakReference;
-
import android.accounts.Account;
-import android.content.Intent;
+
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.LayoutInflater;
import com.owncloud.android.files.services.FileUploader.FileUploaderBinder;
import com.owncloud.android.lib.common.network.OnDatatransferProgressListener;
import com.owncloud.android.lib.common.utils.Log_OC;
-import com.owncloud.android.services.observer.FileObserverService;
import com.owncloud.android.ui.activity.FileActivity;
import com.owncloud.android.ui.activity.FileDisplayActivity;
import com.owncloud.android.ui.dialog.RemoveFileDialogFragment;
import com.owncloud.android.ui.dialog.RenameFileDialogFragment;
import com.owncloud.android.utils.DisplayUtils;
+import com.owncloud.android.utils.MimetypeIconUtil;
+
+import java.lang.ref.WeakReference;
/**
private int mLayout;
private View mView;
private Account mAccount;
-
+
public ProgressListener mProgressListener;
-
+
private static final String TAG = FileDetailFragment.class.getSimpleName();
public static final String FTAG_CONFIRMATION = "REMOVE_CONFIRMATION_FRAGMENT";
public static final String FTAG_RENAME_FILE = "RENAME_FILE_FRAGMENT";
mLayout = R.layout.file_details_empty;
mProgressListener = null;
}
-
+
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
-
+
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
mAccount = getArguments().getParcelable(ARG_ACCOUNT);
if (savedInstanceState != null) {
- setFile((OCFile)savedInstanceState.getParcelable(FileActivity.EXTRA_FILE));
+ setFile((OCFile) savedInstanceState.getParcelable(FileActivity.EXTRA_FILE));
mAccount = savedInstanceState.getParcelable(FileActivity.EXTRA_ACCOUNT);
}
-
- if(getFile() != null && mAccount != null) {
+
+ if (getFile() != null && mAccount != null) {
mLayout = R.layout.file_details_fragment;
}
-
+
mView = inflater.inflate(mLayout, null);
if (mLayout == R.layout.file_details_fragment) {
- mView.findViewById(R.id.fdKeepInSync).setOnClickListener(this);
+ mView.findViewById(R.id.fdFavorite).setOnClickListener(this);
ProgressBar progressBar = (ProgressBar)mView.findViewById(R.id.fdProgressBar);
+ DisplayUtils.colorPreLollipopHorizontalProgressBar(progressBar);
mProgressListener = new ProgressListener(progressBar);
mView.findViewById(R.id.fdCancelBtn).setOnClickListener(this);
}
super.onStart();
listenForTransferProgress();
}
-
+
@Override
public void onStop() {
leaveTransferProgress();
super.onStop();
}
-
+
@Override
public View getView() {
return super.getView() == null ? mView : super.getView();
}
-
+
/**
* {@inheritDoc}
*/
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.file_actions_menu, menu);
- }
+ }
+
-
/**
* {@inheritDoc}
*/
@Override
- public void onPrepareOptionsMenu (Menu menu) {
+ public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
-
+
if (mContainerActivity.getStorageManager() != null) {
FileMenuFilter mf = new FileMenuFilter(
getFile(),
);
mf.filter(menu);
}
-
+
// additional restriction for this fragment
MenuItem item = menu.findItem(R.id.action_see_details);
if (item != null) {
item.setVisible(false);
item.setEnabled(false);
}
+
+ // additional restriction for this fragment
+ item = menu.findItem(R.id.action_copy);
+ if (item != null) {
+ item.setVisible(false);
+ item.setEnabled(false);
+ }
}
-
+
/**
* {@inheritDoc}
*/
}
case R.id.action_cancel_download:
case R.id.action_cancel_upload: {
- ((FileDisplayActivity)mContainerActivity).cancelTransference(getFile());
+ ((FileDisplayActivity) mContainerActivity).cancelTransference(getFile());
return true;
}
- case R.id.action_download_file:
+ case R.id.action_download_file:
case R.id.action_sync_file: {
mContainerActivity.getFileOperationsHelper().syncFile(getFile());
return true;
// Obtain the file
if (!getFile().isDown()) { // Download the file
Log_OC.d(TAG, getFile().getRemotePath() + " : File must be downloaded");
- ((FileDisplayActivity)mContainerActivity).startDownloadForSending(getFile());
-
- } else {
+ ((FileDisplayActivity) mContainerActivity).startDownloadForSending(getFile());
+
+ }
+ else {
mContainerActivity.getFileOperationsHelper().sendDownloadedFile(getFile());
}
return true;
}
+ case R.id.action_favorite_file:{
+ mContainerActivity.getFileOperationsHelper().toggleFavorite(getFile(), true);
+ return true;
+ }
+ case R.id.action_unfavorite_file:{
+ mContainerActivity.getFileOperationsHelper().toggleFavorite(getFile(), false);
+ return true;
+ }
default:
return false;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
- case R.id.fdKeepInSync: {
- toggleKeepInSync();
+ case R.id.fdFavorite: {
+ CheckBox cb = (CheckBox) getView().findViewById(R.id.fdFavorite);
+ mContainerActivity.getFileOperationsHelper().toggleFavorite(getFile(),cb.isChecked());
break;
}
case R.id.fdCancelBtn: {
- ((FileDisplayActivity)mContainerActivity).cancelTransference(getFile());
+ ((FileDisplayActivity) mContainerActivity).cancelTransference(getFile());
break;
}
default:
Log_OC.e(TAG, "Incorrect view clicked!");
}
}
-
-
- private void toggleKeepInSync() {
- CheckBox cb = (CheckBox) getView().findViewById(R.id.fdKeepInSync);
- OCFile file = getFile();
- file.setKeepInSync(cb.isChecked());
- mContainerActivity.getStorageManager().saveFile(file);
-
- /// register the OCFile instance in the observer service to monitor local updates
- Intent observedFileIntent = FileObserverService.makeObservedFileIntent(
- getActivity(),
- file,
- mAccount,
- cb.isChecked());
- getActivity().startService(observedFileIntent);
-
- /// immediate content synchronization
- if (file.keepInSync()) {
- mContainerActivity.getFileOperationsHelper().syncFile(getFile());
- }
- }
+
/**
* Check if the fragment was created with an empty layout. An empty fragment can't show file details, must be replaced.
- *
- * @return True when the fragment was created with the empty layout.
+ *
+ * @return True when the fragment was created with the empty layout.
*/
public boolean isEmpty() {
return (mLayout == R.layout.file_details_empty || getFile() == null || mAccount == null);
}
-
+
/**
* Use this method to signal this Activity that it shall update its view.
- *
+ *
* @param file : An {@link OCFile}
*/
public void updateFileDetails(OCFile file, Account ocAccount) {
/**
* Updates the view with all relevant details about that file.
+ * <p/>
+ * TODO Remove parameter when the transferring state of files is kept in database.
*
- * TODO Remove parameter when the transferring state of files is kept in database.
- *
- * @param transferring Flag signaling if the file should be considered as downloading or uploading,
- * although {@link FileDownloaderBinder#isDownloading(Account, OCFile)} and
- * {@link FileUploaderBinder#isUploading(Account, OCFile)} return false.
- *
- * @param refresh If 'true', try to refresh the whole file from the database
+ * @param transferring Flag signaling if the file should be considered as downloading or uploading,
+ * although {@link FileDownloaderBinder#isDownloading(Account, OCFile)} and
+ * {@link FileUploaderBinder#isUploading(Account, OCFile)} return false.
+ * @param refresh If 'true', try to refresh the whole file from the database
*/
public void updateFileDetails(boolean transferring, boolean refresh) {
if (readyToShow()) {
setFile(storageManager.getFileByPath(getFile().getRemotePath()));
}
OCFile file = getFile();
-
+
// set file details
setFilename(file.getFileName());
setFiletype(file);
setTimeModified(file.getModificationTimestamp());
- CheckBox cb = (CheckBox)getView().findViewById(R.id.fdKeepInSync);
- cb.setChecked(file.keepInSync());
+ CheckBox cb = (CheckBox)getView().findViewById(R.id.fdFavorite);
+ cb.setChecked(file.isFavorite());
// configure UI for depending upon local state of the file
FileDownloaderBinder downloaderBinder = mContainerActivity.getFileDownloaderBinder();
(uploaderBinder != null && uploaderBinder.isUploading(mAccount, file))
) {
setButtonsForTransferring();
-
+
} else if (file.isDown()) {
setButtonsForDown();
}
getView().invalidate();
}
-
+
/**
* Checks if the fragment is ready to show details of a OCFile
- *
- * @return 'True' when the fragment is ready to show details of a file
+ *
+ * @return 'True' when the fragment is ready to show details of a file
*/
private boolean readyToShow() {
- return (getFile() != null && mAccount != null && mLayout == R.layout.file_details_fragment);
+ return (getFile() != null && mAccount != null && mLayout == R.layout.file_details_fragment);
}
/**
* 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)
+ if (tv != null) {
tv.setText(filename);
+ }
}
/**
} else {
// Name of the file, to deduce the icon to use in case the MIME type is not precise enough
String filename = file.getFileName();
- iv.setImageResource(DisplayUtils.getFileTypeIconId(mimetype, filename));
+ iv.setImageResource(MimetypeIconUtil.getFileTypeIconId(mimetype, filename));
}
}
}
/**
* 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)
+ if (tv != null) {
tv.setText(DisplayUtils.bytesToHumanReadable(filesize));
+ }
}
-
+
/**
* Updates the time that the file was last modified
+ *
* @param milliseconds Unix time to set
*/
- private void setTimeModified(long milliseconds){
+ private void setTimeModified(long milliseconds) {
TextView tv = (TextView) getView().findViewById(R.id.fdModified);
- if(tv != null){
+ if (tv != null) {
tv.setText(DisplayUtils.unixTimeToHumanReadable(milliseconds));
}
}
-
+
/**
* Enables or disables buttons for a file being downloaded
*/
private void setButtonsForTransferring() {
if (!isEmpty()) {
// let's protect the user from himself ;)
- getView().findViewById(R.id.fdKeepInSync).setEnabled(false);
+ getView().findViewById(R.id.fdFavorite).setEnabled(false);
// show the progress bar for the transfer
getView().findViewById(R.id.fdProgressBlock).setVisibility(View.VISIBLE);
- TextView progressText = (TextView)getView().findViewById(R.id.fdProgressText);
+ TextView progressText = (TextView) getView().findViewById(R.id.fdProgressText);
progressText.setVisibility(View.VISIBLE);
FileDownloaderBinder downloaderBinder = mContainerActivity.getFileDownloaderBinder();
FileUploaderBinder uploaderBinder = mContainerActivity.getFileUploaderBinder();
//if (getFile().isDownloading()) {
if (downloaderBinder != null && downloaderBinder.isDownloading(mAccount, getFile())) {
progressText.setText(R.string.downloader_download_in_progress_ticker);
- } else if (uploaderBinder != null && uploaderBinder.isUploading(mAccount, getFile())) {
- progressText.setText(R.string.uploader_upload_in_progress_ticker);
+ }
+ else {
+ if (uploaderBinder != null && uploaderBinder.isUploading(mAccount, getFile())) {
+ progressText.setText(R.string.uploader_upload_in_progress_ticker);
+ }
}
}
}
/**
- * Enables or disables buttons for a file locally available
+ * Enables or disables buttons for a file locally available
*/
private void setButtonsForDown() {
if (!isEmpty()) {
- getView().findViewById(R.id.fdKeepInSync).setEnabled(true);
+ getView().findViewById(R.id.fdFavorite).setEnabled(true);
// hides the progress bar
getView().findViewById(R.id.fdProgressBlock).setVisibility(View.GONE);
- TextView progressText = (TextView)getView().findViewById(R.id.fdProgressText);
+ TextView progressText = (TextView) getView().findViewById(R.id.fdProgressText);
progressText.setVisibility(View.GONE);
}
}
/**
- * Enables or disables buttons for a file not locally available
+ * Enables or disables buttons for a file not locally available
*/
private void setButtonsForRemote() {
if (!isEmpty()) {
- getView().findViewById(R.id.fdKeepInSync).setEnabled(true);
+ getView().findViewById(R.id.fdFavorite).setEnabled(true);
// hides the progress bar
getView().findViewById(R.id.fdProgressBlock).setVisibility(View.GONE);
- TextView progressText = (TextView)getView().findViewById(R.id.fdProgressText);
+ TextView progressText = (TextView) getView().findViewById(R.id.fdProgressText);
progressText.setVisibility(View.GONE);
}
}
-
+
public void listenForTransferProgress() {
if (mProgressListener != null) {
}
}
}
-
-
+
+
public void leaveTransferProgress() {
if (mProgressListener != null) {
if (mContainerActivity.getFileDownloaderBinder() != null) {
}
-
/**
* Helper class responsible for updating the progress bar shown for file uploading or
* downloading
private class ProgressListener implements OnDatatransferProgressListener {
int mLastPercent = 0;
WeakReference<ProgressBar> mProgressBar = null;
-
+
ProgressListener(ProgressBar progressBar) {
mProgressBar = new WeakReference<ProgressBar>(progressBar);
}
-
+
@Override
public void onTransferProgress(long progressRate, long totalTransferredSoFar,
long totalToTransfer, String filename) {