From: David A. Velasco Date: Fri, 28 Jun 2013 09:58:43 +0000 (+0200) Subject: Merge branch 'develop' into check_account_existance_in_gallery X-Git-Tag: oc-android-1.4.3~9^2~3 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/5b792b044056bc0a547803ff52f30b9da457870e?hp=--cc Merge branch 'develop' into check_account_existance_in_gallery --- 5b792b044056bc0a547803ff52f30b9da457870e diff --cc src/com/owncloud/android/ui/activity/FileDisplayActivity.java index a70e266b,6f6ef3e0..a843d832 --- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java @@@ -1019,8 -1032,18 +1028,9 @@@ public class FileDisplayActivity extend * {@inheritDoc} */ @Override - public OCFile getInitialDirectory() { - return getCurrentDir(); - } - - - /** - * {@inheritDoc} - */ - @Override public void onFileStateChanged() { refeshListOfFilesFragment(); + updateNavigationElementsInActionBar(getSecondFragment().getFile()); } diff --cc src/com/owncloud/android/ui/activity/UploadFilesActivity.java index 077c4a4f,16e05f89..a6031cdb --- a/src/com/owncloud/android/ui/activity/UploadFilesActivity.java +++ b/src/com/owncloud/android/ui/activity/UploadFilesActivity.java @@@ -36,10 -34,8 +34,7 @@@ import android.widget.TextView import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.app.ActionBar.OnNavigationListener; --import com.actionbarsherlock.app.SherlockFragmentActivity; import com.actionbarsherlock.view.MenuItem; - import com.owncloud.android.datamodel.FileDataStorageManager; - import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.ui.dialog.IndeterminateProgressDialog; import com.owncloud.android.ui.fragment.ConfirmationDialogFragment; import com.owncloud.android.ui.fragment.LocalFileListFragment; diff --cc src/com/owncloud/android/ui/adapter/FileListListAdapter.java index b05ba284,f678a934..16c74d38 --- a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java +++ b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java @@@ -1,205 -1,260 +1,255 @@@ - -/* ownCloud Android client application - * Copyright (C) 2011 Bartek Przybylski - * Copyright (C) 2012-2013 ownCloud Inc. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ -package com.owncloud.android.ui.adapter; - -import java.util.Vector; - -import android.accounts.Account; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.BaseAdapter; -import android.widget.ImageView; -import android.widget.ListAdapter; -import android.widget.ListView; -import android.widget.TextView; - -import com.owncloud.android.DisplayUtils; -import com.owncloud.android.R; -import com.owncloud.android.authentication.AccountUtils; -import com.owncloud.android.datamodel.DataStorageManager; -import com.owncloud.android.datamodel.OCFile; -import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder; -import com.owncloud.android.files.services.FileUploader.FileUploaderBinder; -import com.owncloud.android.ui.activity.TransferServiceGetter; - -/** - * This Adapter populates a ListView with all files and folders in an ownCloud - * instance. - * - * @author Bartek Przybylski - * - */ -public class FileListListAdapter extends BaseAdapter implements ListAdapter { - private Context mContext; - private OCFile mFile = null; - private Vector mFiles = null; - private DataStorageManager mStorageManager; - private Account mAccount; - private TransferServiceGetter mTransferServiceGetter; - //total size of a directory (recursive) - private Long totalSizeOfDirectoriesRecursive = null; - private Long lastModifiedOfAllSubdirectories = null; - - public FileListListAdapter(OCFile file, DataStorageManager storage_man, - Context context, TransferServiceGetter transferServiceGetter) { - mStorageManager = storage_man; - mContext = context; - mAccount = AccountUtils.getCurrentOwnCloudAccount(mContext); - mTransferServiceGetter = transferServiceGetter; - swapDirectory(file, mStorageManager); - /*mFile = file; - mFiles = mStorageManager.getDirectoryContent(mFile);*/ - } - - @Override - public boolean areAllItemsEnabled() { - return true; - } - - @Override - public boolean isEnabled(int position) { - return true; - } - - @Override - public int getCount() { - return mFiles != null ? mFiles.size() : 0; - } - - @Override - public Object getItem(int position) { - if (mFiles == null || mFiles.size() <= position) - return null; - return mFiles.get(position); - } - - @Override - public long getItemId(int position) { - if (mFiles == null || mFiles.size() <= position) - return 0; - return mFiles.get(position).getFileId(); - } - - @Override - public int getItemViewType(int position) { - return 0; - } - - @Override - public View getView(int position, View convertView, ViewGroup parent) { - View view = convertView; - if (view == null) { - LayoutInflater inflator = (LayoutInflater) mContext - .getSystemService(Context.LAYOUT_INFLATER_SERVICE); - view = inflator.inflate(R.layout.list_item, null); - } - if (mFiles != null && mFiles.size() > position) { - OCFile file = mFiles.get(position); - TextView fileName = (TextView) view.findViewById(R.id.Filename); - String name = file.getFileName(); - - fileName.setText(name); - ImageView fileIcon = (ImageView) view.findViewById(R.id.imageView1); - fileIcon.setImageResource(DisplayUtils.getResourceId(file.getMimetype())); - ImageView localStateView = (ImageView) view.findViewById(R.id.imageView2); - FileDownloaderBinder downloaderBinder = mTransferServiceGetter.getFileDownloaderBinder(); - FileUploaderBinder uploaderBinder = mTransferServiceGetter.getFileUploaderBinder(); - if (downloaderBinder != null && downloaderBinder.isDownloading(mAccount, file)) { - localStateView.setImageResource(R.drawable.downloading_file_indicator); - localStateView.setVisibility(View.VISIBLE); - } else if (uploaderBinder != null && uploaderBinder.isUploading(mAccount, file)) { - localStateView.setImageResource(R.drawable.uploading_file_indicator); - localStateView.setVisibility(View.VISIBLE); - } else if (file.isDown()) { - localStateView.setImageResource(R.drawable.local_file_indicator); - localStateView.setVisibility(View.VISIBLE); - } else { - localStateView.setVisibility(View.INVISIBLE); - } - - - TextView fileSizeV = (TextView) view.findViewById(R.id.file_size); - TextView lastModV = (TextView) view.findViewById(R.id.last_mod); - ImageView checkBoxV = (ImageView) view.findViewById(R.id.custom_checkbox); - - if (!file.isDirectory()) { - fileSizeV.setVisibility(View.VISIBLE); - fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength())); - lastModV.setVisibility(View.VISIBLE); - lastModV.setText(DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp())); - // this if-else is needed even thoe fav icon is visible by default - // because android reuses views in listview - if (!file.keepInSync()) { - view.findViewById(R.id.imageView3).setVisibility(View.GONE); - } else { - view.findViewById(R.id.imageView3).setVisibility(View.VISIBLE); - } - - ListView parentList = (ListView)parent; - if (parentList.getChoiceMode() == ListView.CHOICE_MODE_NONE) { - checkBoxV.setVisibility(View.GONE); - } else { - if (parentList.isItemChecked(position)) { - checkBoxV.setImageResource(android.R.drawable.checkbox_on_background); - } else { - checkBoxV.setImageResource(android.R.drawable.checkbox_off_background); - } - checkBoxV.setVisibility(View.VISIBLE); - } - - } - else { - - getDirectorySizeNumber(file,true); - if (lastModifiedOfAllSubdirectories == null) - { - lastModV.setVisibility(View.GONE); - fileSizeV.setVisibility(View.GONE); - } - else - { - lastModV.setVisibility(View.VISIBLE); - lastModV.setText(DisplayUtils.unixTimeToHumanReadable(lastModifiedOfAllSubdirectories)); - fileSizeV.setVisibility(View.VISIBLE); - fileSizeV.setText(DisplayUtils.bytesToHumanReadable((totalSizeOfDirectoriesRecursive == null) ? 0 : totalSizeOfDirectoriesRecursive)); - } - checkBoxV.setVisibility(View.GONE); - view.findViewById(R.id.imageView3).setVisibility(View.GONE); - } - } - - return view; - } - - - /** - * - This method counts recursively all subdirectories and their files from the root directory. - * - It also shows a timestamp of the last modificated file inside the root directory - * - * @param OCFile : startDirectory - * @param boolean : counting starts from here ? - */ - private void getDirectorySizeNumber(OCFile directory,boolean startOfRecursive) { - if (startOfRecursive) { - totalSizeOfDirectoriesRecursive = null; - } - Vector files = mStorageManager.getDirectoryContent(directory); - for (OCFile file : files) { - if(!file.isDirectory()) { - if (totalSizeOfDirectoriesRecursive == null) { - totalSizeOfDirectoriesRecursive = file.getFileLength(); - lastModifiedOfAllSubdirectories = file.getModificationTimestamp(); - continue; - } - - totalSizeOfDirectoriesRecursive += file.getFileLength(); - if (lastModifiedOfAllSubdirectories < file.getModificationTimestamp()) { - lastModifiedOfAllSubdirectories = file.getModificationTimestamp(); - } - } - else { - this.getDirectorySizeNumber(file, false); - } - } - } - - - @Override - public int getViewTypeCount() { - return 1; - } - - @Override - public boolean hasStableIds() { - return true; - } - - @Override - public boolean isEmpty() { - return (mFiles == null || mFiles.isEmpty()); - } - - /** - * Change the adapted directory for a new one - * @param directory New file to adapt. Can be NULL, meaning "no content to adapt". - * @param updatedStorageManager Optional updated storage manager; used to replace mStorageManager if is different (and not NULL) - */ - public void swapDirectory(OCFile directory, DataStorageManager updatedStorageManager) { - mFile = directory; - if (updatedStorageManager != null && updatedStorageManager != mStorageManager) { - mStorageManager = updatedStorageManager; - mAccount = AccountUtils.getCurrentOwnCloudAccount(mContext); - } - if (mStorageManager != null) { - mFiles = mStorageManager.getDirectoryContent(mFile); - } else { - mFiles = null; - } - notifyDataSetChanged(); - } - -} +/* ownCloud Android client application + * Copyright (C) 2011 Bartek Przybylski + * Copyright (C) 2012-2013 ownCloud Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.owncloud.android.ui.adapter; + - import java.util.Vector; - - import com.owncloud.android.AccountUtils; - import com.owncloud.android.DisplayUtils; - import com.owncloud.android.datamodel.DataStorageManager; - import com.owncloud.android.datamodel.OCFile; - import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder; - import com.owncloud.android.files.services.FileUploader.FileUploaderBinder; - import com.owncloud.android.ui.activity.TransferServiceGetter; - - import com.owncloud.android.R; - +import android.accounts.Account; +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.ListAdapter; +import android.widget.ListView; +import android.widget.TextView; + ++import com.owncloud.android.DisplayUtils; ++import com.owncloud.android.R; ++import com.owncloud.android.authentication.AccountUtils; ++import com.owncloud.android.datamodel.DataStorageManager; ++import com.owncloud.android.datamodel.OCFile; ++import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder; ++import com.owncloud.android.files.services.FileUploader.FileUploaderBinder; ++import com.owncloud.android.ui.activity.TransferServiceGetter; ++ ++import java.util.Vector; ++ ++ +/** + * This Adapter populates a ListView with all files and folders in an ownCloud + * instance. + * + * @author Bartek Przybylski + * + */ +public class FileListListAdapter extends BaseAdapter implements ListAdapter { + private Context mContext; + private OCFile mFile = null; + private Vector mFiles = null; - private DataStorageManager mStorageManager = null; ++ private DataStorageManager mStorageManager; + private Account mAccount; + private TransferServiceGetter mTransferServiceGetter; - ++ //total size of a directory (recursive) ++ private Long totalSizeOfDirectoriesRecursive = null; ++ private Long lastModifiedOfAllSubdirectories = null; ++ + public FileListListAdapter(Context context, TransferServiceGetter transferServiceGetter) { + mContext = context; + mAccount = AccountUtils.getCurrentOwnCloudAccount(mContext); + mTransferServiceGetter = transferServiceGetter; + } + + @Override + public boolean areAllItemsEnabled() { + return true; + } + + @Override + public boolean isEnabled(int position) { + return true; + } + + @Override + public int getCount() { + return mFiles != null ? mFiles.size() : 0; + } + + @Override + public Object getItem(int position) { + if (mFiles == null || mFiles.size() <= position) + return null; + return mFiles.get(position); + } + + @Override + public long getItemId(int position) { + if (mFiles == null || mFiles.size() <= position) + return 0; + return mFiles.get(position).getFileId(); + } + + @Override + public int getItemViewType(int position) { + return 0; + } + ++ + @Override + public View getView(int position, View convertView, ViewGroup parent) { + View view = convertView; + if (view == null) { + LayoutInflater inflator = (LayoutInflater) mContext + .getSystemService(Context.LAYOUT_INFLATER_SERVICE); + view = inflator.inflate(R.layout.list_item, null); + } ++ + if (mFiles != null && mFiles.size() > position) { + OCFile file = mFiles.get(position); + TextView fileName = (TextView) view.findViewById(R.id.Filename); + String name = file.getFileName(); + + fileName.setText(name); + ImageView fileIcon = (ImageView) view.findViewById(R.id.imageView1); + fileIcon.setImageResource(DisplayUtils.getResourceId(file.getMimetype())); + ImageView localStateView = (ImageView) view.findViewById(R.id.imageView2); + FileDownloaderBinder downloaderBinder = mTransferServiceGetter.getFileDownloaderBinder(); + FileUploaderBinder uploaderBinder = mTransferServiceGetter.getFileUploaderBinder(); + if (downloaderBinder != null && downloaderBinder.isDownloading(mAccount, file)) { + localStateView.setImageResource(R.drawable.downloading_file_indicator); + localStateView.setVisibility(View.VISIBLE); + } else if (uploaderBinder != null && uploaderBinder.isUploading(mAccount, file)) { + localStateView.setImageResource(R.drawable.uploading_file_indicator); + localStateView.setVisibility(View.VISIBLE); + } else if (file.isDown()) { + localStateView.setImageResource(R.drawable.local_file_indicator); + localStateView.setVisibility(View.VISIBLE); + } else { + localStateView.setVisibility(View.INVISIBLE); + } - + + TextView fileSizeV = (TextView) view.findViewById(R.id.file_size); + TextView lastModV = (TextView) view.findViewById(R.id.last_mod); + ImageView checkBoxV = (ImageView) view.findViewById(R.id.custom_checkbox); + + if (!file.isDirectory()) { + fileSizeV.setVisibility(View.VISIBLE); + fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength())); + lastModV.setVisibility(View.VISIBLE); + lastModV.setText(DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp())); + // this if-else is needed even thoe fav icon is visible by default + // because android reuses views in listview + if (!file.keepInSync()) { + view.findViewById(R.id.imageView3).setVisibility(View.GONE); + } else { + view.findViewById(R.id.imageView3).setVisibility(View.VISIBLE); + } + + ListView parentList = (ListView)parent; + if (parentList.getChoiceMode() == ListView.CHOICE_MODE_NONE) { + checkBoxV.setVisibility(View.GONE); + } else { + if (parentList.isItemChecked(position)) { + checkBoxV.setImageResource(android.R.drawable.checkbox_on_background); + } else { + checkBoxV.setImageResource(android.R.drawable.checkbox_off_background); + } + checkBoxV.setVisibility(View.VISIBLE); + } + - } else { - fileSizeV.setVisibility(View.GONE); - lastModV.setVisibility(View.GONE); ++ } ++ else { ++ ++ getDirectorySizeNumber(file,true); ++ if (lastModifiedOfAllSubdirectories == null) ++ { ++ lastModV.setVisibility(View.GONE); ++ fileSizeV.setVisibility(View.GONE); ++ } ++ else ++ { ++ lastModV.setVisibility(View.VISIBLE); ++ lastModV.setText(DisplayUtils.unixTimeToHumanReadable(lastModifiedOfAllSubdirectories)); ++ fileSizeV.setVisibility(View.VISIBLE); ++ fileSizeV.setText(DisplayUtils.bytesToHumanReadable((totalSizeOfDirectoriesRecursive == null) ? 0 : totalSizeOfDirectoriesRecursive)); ++ } + checkBoxV.setVisibility(View.GONE); + view.findViewById(R.id.imageView3).setVisibility(View.GONE); + } + } + + return view; + } - ++ ++ ++ /** ++ * - This method counts recursively all subdirectories and their files from the root directory. ++ * - It also shows a timestamp of the last modificated file inside the root directory ++ * ++ * @param OCFile : startDirectory ++ * @param boolean : counting starts from here ? ++ */ ++ private void getDirectorySizeNumber(OCFile directory,boolean startOfRecursive) { ++ if (startOfRecursive) { ++ totalSizeOfDirectoriesRecursive = null; ++ } ++ Vector files = mStorageManager.getDirectoryContent(directory); ++ for (OCFile file : files) { ++ if(!file.isDirectory()) { ++ if (totalSizeOfDirectoriesRecursive == null) { ++ totalSizeOfDirectoriesRecursive = file.getFileLength(); ++ lastModifiedOfAllSubdirectories = file.getModificationTimestamp(); ++ continue; ++ } ++ ++ totalSizeOfDirectoriesRecursive += file.getFileLength(); ++ if (lastModifiedOfAllSubdirectories < file.getModificationTimestamp()) { ++ lastModifiedOfAllSubdirectories = file.getModificationTimestamp(); ++ } ++ } ++ else { ++ this.getDirectorySizeNumber(file, false); ++ } ++ } ++ } ++ ++ + @Override + public int getViewTypeCount() { + return 1; + } + + @Override + public boolean hasStableIds() { + return true; + } + + @Override + public boolean isEmpty() { + return (mFiles == null || mFiles.isEmpty()); + } + + /** + * Change the adapted directory for a new one + * @param directory New file to adapt. Can be NULL, meaning "no content to adapt". + * @param updatedStorageManager Optional updated storage manager; used to replace mStorageManager if is different (and not NULL) + */ + public void swapDirectory(OCFile directory, DataStorageManager updatedStorageManager) { + mFile = directory; + if (updatedStorageManager != null && updatedStorageManager != mStorageManager) { + mStorageManager = updatedStorageManager; + mAccount = AccountUtils.getCurrentOwnCloudAccount(mContext); + } + if (mStorageManager != null) { + mFiles = mStorageManager.getDirectoryContent(mFile); + } else { + mFiles = null; + } + notifyDataSetChanged(); + } + +} diff --cc src/com/owncloud/android/ui/preview/PreviewImageActivity.java index b9ede075,1c1e0f60..0a603050 --- a/src/com/owncloud/android/ui/preview/PreviewImageActivity.java +++ b/src/com/owncloud/android/ui/preview/PreviewImageActivity.java @@@ -32,8 -33,10 +32,9 @@@ import android.view.View import android.view.View.OnTouchListener; import com.actionbarsherlock.app.ActionBar; -import com.actionbarsherlock.app.SherlockFragmentActivity; import com.actionbarsherlock.view.MenuItem; import com.actionbarsherlock.view.Window; + import com.owncloud.android.authentication.AccountUtils; import com.owncloud.android.datamodel.DataStorageManager; import com.owncloud.android.datamodel.FileDataStorageManager; import com.owncloud.android.datamodel.OCFile; diff --cc src/com/owncloud/android/ui/preview/PreviewVideoActivity.java index f315cc43,c4b6dce7..0cab2e2b --- a/src/com/owncloud/android/ui/preview/PreviewVideoActivity.java +++ b/src/com/owncloud/android/ui/preview/PreviewVideoActivity.java @@@ -30,14 -31,13 +30,15 @@@ import android.os.Bundle import android.widget.MediaController; import android.widget.VideoView; - import com.owncloud.android.AccountUtils; import com.owncloud.android.Log_OC; import com.owncloud.android.R; +import com.owncloud.android.datamodel.DataStorageManager; +import com.owncloud.android.datamodel.FileDataStorageManager; + import com.owncloud.android.authentication.AccountUtils; + import com.owncloud.android.authentication.AccountUtils.AccountNotFoundException; import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.media.MediaService; +import com.owncloud.android.ui.activity.FileActivity; /** * Activity implementing a basic video player. @@@ -191,43 -264,25 +192,48 @@@ public class PreviewVideoActivity exten } - /** - * Screen touches trigger the appearance of the control panel for a limited time. - * - * {@inheritDoc} - */ @Override - public boolean onTouchEvent (MotionEvent ev){ - /*if (ev.getAction() == MotionEvent.ACTION_DOWN) { - if (mMediaController.isShowing()) { - mMediaController.hide(); + protected void onAccountSet(boolean stateWasRecovered) { + if (getAccount() != null) { + OCFile file = getFile(); + /// Validate handled file (first image to preview) + if (file == null) { + throw new IllegalStateException("Instanced with a NULL OCFile"); + } + if (!file.isVideo()) { + throw new IllegalArgumentException("Non-video file passed as argument"); + } + mStorageManager = new FileDataStorageManager(getAccount(), getContentResolver()); + file = mStorageManager.getFileById(file.getFileId()); + if (file != null) { + if (file.isDown()) { + mVideoPlayer.setVideoPath(file.getStoragePath()); + + } else { - // not working now - String url = AccountUtils.constructFullURLForAccount(this, getAccount()) + file.getRemotePath(); - mVideoPlayer.setVideoURI(Uri.parse(url)); ++ // not working yet ++ String url; ++ try { ++ url = AccountUtils.constructFullURLForAccount(this, getAccount()) + file.getRemotePath(); ++ mVideoPlayer.setVideoURI(Uri.parse(url)); ++ } catch (AccountNotFoundException e) { ++ onError(null, MediaService.OC_MEDIA_ERROR, R.string.media_err_no_account); ++ } + } + + // create and prepare control panel for the user + mMediaController = new MediaController(this); + mMediaController.setMediaPlayer(mVideoPlayer); + mMediaController.setAnchorView(mVideoPlayer); + mVideoPlayer.setMediaController(mMediaController); + } else { - mMediaController.show(MediaService.MEDIA_CONTROL_SHORT_LIFE); + finish(); } - return true; } else { - return false; - }*/ - return false; - } + Log_OC.wtf(TAG, "onAccountChanged was called with NULL account associated!"); + finish(); + } + } }