<string name="prefs_recommend">Recommander à un ami</string>
<string name="prefs_feedback">Commentaires</string>
<string name="prefs_imprint">Empreinte</string>
- <string name="recommend_subject">Essayez %1$s sur votre smartphone !</string>
+ <string name="prefs_remember_last_share_location">Mémoriser l\'emplacement de partage</string>
+ <string name="prefs_remember_last_upload_location_summary">Mémoriser le dernier emplacement d\'upload</string>
+ <string name="recommend_subject">Essayez %1$s sur votre smartphone&nbsp;!</string>
- <string name="recommend_text">J'aimerais vous inviter à utiliser %1$s sur votre smartphone !
+ <string name="recommend_text">J\'aimerais vous inviter à utiliser %1$s sur votre smartphone !
- Téléchargez-le ici : %2$s</string>
+ Téléchargez-le ici&nbsp;: %2$s</string>
<string name="auth_check_server">Vérifier le serveur</string>
- <string name="auth_host_url">Adresse du serveur https://...</string>
+ <string name="auth_host_url">Adresse du serveur https://…</string>
<string name="auth_username">Nom d\'utilisateur</string>
<string name="auth_password">Mot de passe</string>
- <string name="auth_register">Nouveau dans %1$s ?</string>
+ <string name="auth_register">Nouveau dans %1$s&nbsp;?</string>
<string name="sync_string_files">Fichiers</string>
<string name="setup_btn_connect">Connecter</string>
<string name="uploader_btn_upload_text">Téléverser</string>
- <string name="uploader_top_message">Sélectionner le dossier d\'envoi :</string>
- <string name="uploader_top_message">Sélectionner le dossier d'envoi&nbsp;:</string>
++ <string name="uploader_top_message">Sélectionner le dossier d\'envoi&nbsp;:</string>
<string name="uploader_wrn_no_account_title">Aucun compte n\'a été trouvé</string>
<string name="uploader_wrn_no_account_text">Aucun compte %1$s n\'a été trouvé. Veuillez commencer par en configurer un.</string>
<string name="uploader_wrn_no_account_setup_btn_text">Paramètres</string>
<string name="uploader_wrn_no_content_text">Aucun contenu reçu. Rien à envoyer.</string>
<string name="uploader_error_forbidden_content">%1$s n\'est pas autorisé à accéder au contenu partagé</string>
<string name="uploader_info_uploading">Téléversement</string>
- <string name="file_list_empty">Il n\'y a rien ici ! Envoyez donc quelque chose :)</string>
+ <string name="file_list_seconds_ago">il y a quelques secondes</string>
- <string name="file_list_empty">Il n'y a rien ici&nbsp;! Envoyez donc quelque chose :)</string>
++ <string name="file_list_empty">Il n\'y a rien ici&nbsp;! Envoyez donc quelque chose :)</string>
<string name="file_list_loading">Chargement…</string>
<string name="local_file_list_empty">Aucun fichier n\'est présent dans ce dossier.</string>
<string name="filedetails_select_file">Effleurez un fichier pour afficher les informations complémentaires</string>
<string name="auth_unauthorized">Nom d\'utilisateur ou mot de passe incorrect</string>
<string name="auth_oauth_error">Échec d\'autorisation</string>
<string name="auth_oauth_error_access_denied">Accès refusé par le serveur d\'autorisation</string>
- <string name="auth_wtf_reenter_URL">État inattendu ; veuillez entrer à nouveau l\'URL du serveur</string>
- <string name="auth_wtf_reenter_URL">État inattendu&nbsp;; veuillez entrer à nouveau l'URL du serveur</string>
++ <string name="auth_wtf_reenter_URL">État inattendu&nbsp;; veuillez entrer à nouveau l\'URL du serveur</string>
<string name="auth_expired_oauth_token_toast">Votre autorisation a expiré. Merci de vous authentifier à nouveau</string>
<string name="auth_expired_basic_auth_toast">Veuillez saisir le mot de passe courant</string>
<string name="auth_expired_saml_sso_token_toast">Votre session a expiré. Merci de vous reconnecter</string>
<string name="ssl_validator_not_saved">Impossible de sauvegarder le certificat</string>
<string name="ssl_validator_btn_details_see">Détails</string>
<string name="ssl_validator_btn_details_hide">Masquer</string>
- <string name="ssl_validator_label_subject">Délivré à :</string>
- <string name="ssl_validator_label_issuer">Délivré par :</string>
- <string name="ssl_validator_label_CN">Nom d\'usage :</string>
- <string name="ssl_validator_label_O">Organisation :</string>
- <string name="ssl_validator_label_OU">Unité organisationnelle :</string>
- <string name="ssl_validator_label_C">Pays :</string>
- <string name="ssl_validator_label_ST">Région :</string>
- <string name="ssl_validator_label_L">Localisation :</string>
- <string name="ssl_validator_label_validity">Validité :</string>
- <string name="ssl_validator_label_validity_from">De :</string>
- <string name="ssl_validator_label_validity_to">À :</string>
- <string name="ssl_validator_label_signature">Signature :</string>
- <string name="ssl_validator_label_signature_algorithm">Algorithme :</string>
+ <string name="ssl_validator_label_subject">Délivré à&nbsp;:</string>
+ <string name="ssl_validator_label_issuer">Délivré par&nbsp;:</string>
- <string name="ssl_validator_label_CN">Nom d'usage&nbsp;:</string>
++ <string name="ssl_validator_label_CN">Nom d\'usage&nbsp;:</string>
+ <string name="ssl_validator_label_O">Organisation&nbsp;:</string>
+ <string name="ssl_validator_label_OU">Unité organisationnelle&nbsp;:</string>
+ <string name="ssl_validator_label_C">Pays&nbsp;:</string>
+ <string name="ssl_validator_label_ST">Région&nbsp;:</string>
+ <string name="ssl_validator_label_L">Localisation&nbsp;:</string>
+ <string name="ssl_validator_label_validity">Validité&nbsp;:</string>
+ <string name="ssl_validator_label_validity_from">De&nbsp;:</string>
+ <string name="ssl_validator_label_validity_to">À&nbsp;:</string>
+ <string name="ssl_validator_label_signature">Signature&nbsp;:</string>
+ <string name="ssl_validator_label_signature_algorithm">Algorithme&nbsp;:</string>
<string name="ssl_validator_null_cert">Impossible d\'afficher le certificat.</string>
<string name="ssl_validator_no_info_about_error">- Aucune information sur l\'erreur</string>
<string name="placeholder_sentence">Ceci est un espace réservé</string>
import android.content.Context;\r
import android.content.SharedPreferences;\r
import android.graphics.Bitmap;\r
+import android.graphics.BitmapFactory;\r
+import android.media.ThumbnailUtils;\r
import android.preference.PreferenceManager;\r
+ import android.text.format.DateUtils;\r
import android.view.LayoutInflater;\r
import android.view.View;\r
import android.view.ViewGroup;\r
\r
@Override\r
public View getView(int position, View convertView, ViewGroup parent) {\r
- double count = 0;\r
- \r
+ // decide image vs. file view\r
- if (file.isImage()){\r
- count++;\r
++ double countImages = 0;\r
++ double countFiles = 0;\r
+ \r
+ for (OCFile file : mFiles){\r
- if ((count / mFiles.size()) >= 0.5){\r
++ if (!file.isFolder()){\r
++ countFiles++;\r
++ \r
++ if (file.isImage()){\r
++ countImages++;\r
++ }\r
+ }\r
+ }\r
+ \r
+ // TODO threshold as constant in Preferences\r
+ // > 50% Images --> image view\r
+ boolean fileView = true;\r
++ if ((countImages / countFiles) >= 0.5){\r
+ fileView = false;\r
+ } else {\r
+ fileView = true;\r
+ }\r
+ \r
View view = convertView;\r
- if (view == null) {\r
- LayoutInflater inflator = (LayoutInflater) mContext\r
- .getSystemService(Context.LAYOUT_INFLATER_SERVICE);\r
+ OCFile file = null;\r
+ LayoutInflater inflator = (LayoutInflater) mContext\r
+ .getSystemService(Context.LAYOUT_INFLATER_SERVICE);\r
+ \r
+ if (mFiles != null && mFiles.size() > position) {\r
+ file = mFiles.get(position);\r
+ }\r
+ \r
+ // Find out which layout should be displayed\r
+ ViewType viewType;\r
+ if (fileView){\r
+ viewType = ViewType.LIST_ITEM;\r
+ } else if (file.isImage()){\r
+ viewType = ViewType.GRID_IMAGE;\r
+ } else {\r
+ viewType = ViewType.GRID_ITEM;\r
+ }\r
+\r
+ // Create View\r
+ switch (viewType){\r
+ case GRID_IMAGE:\r
+ view = inflator.inflate(R.layout.grid_image, null);\r
+ break;\r
+ case GRID_ITEM:\r
+ view = inflator.inflate(R.layout.grid_item, null);\r
+ break;\r
+ case LIST_ITEM:\r
view = inflator.inflate(R.layout.list_item, null);\r
+ break;\r
}\r
- \r
- if (mFiles != null && mFiles.size() > position) {\r
- OCFile file = mFiles.get(position);\r
- TextView fileName = (TextView) view.findViewById(R.id.Filename); \r
- String name = file.getFileName();\r
\r
- fileName.setText(name);\r
- ImageView fileIcon = (ImageView) view.findViewById(R.id.imageView1);\r
- fileIcon.setTag(file.getFileId());\r
- ImageView sharedIconV = (ImageView) view.findViewById(R.id.sharedIcon);\r
- ImageView sharedWithMeIconV = (ImageView) view.findViewById(R.id.sharedWithMeIcon);\r
- sharedWithMeIconV.setVisibility(View.GONE);\r
+ view.invalidate();\r
\r
- ImageView localStateView = (ImageView) view.findViewById(R.id.imageView2);\r
- localStateView.bringToFront();\r
- FileDownloaderBinder downloaderBinder = \r
- mTransferServiceGetter.getFileDownloaderBinder();\r
- FileUploaderBinder uploaderBinder = mTransferServiceGetter.getFileUploaderBinder();\r
- if (downloaderBinder != null && downloaderBinder.isDownloading(mAccount, file)) {\r
- localStateView.setImageResource(R.drawable.downloading_file_indicator);\r
- localStateView.setVisibility(View.VISIBLE);\r
- } else if (uploaderBinder != null && uploaderBinder.isUploading(mAccount, file)) {\r
- localStateView.setImageResource(R.drawable.uploading_file_indicator);\r
- localStateView.setVisibility(View.VISIBLE);\r
- } else if (file.isDown()) {\r
- localStateView.setImageResource(R.drawable.local_file_indicator);\r
- localStateView.setVisibility(View.VISIBLE);\r
- } else {\r
- localStateView.setVisibility(View.INVISIBLE);\r
- }\r
- \r
- TextView fileSizeV = (TextView) view.findViewById(R.id.file_size);\r
- TextView lastModV = (TextView) view.findViewById(R.id.last_mod);\r
- ImageView checkBoxV = (ImageView) view.findViewById(R.id.custom_checkbox);\r
+ if (file != null){\r
+\r
+ ImageView fileIcon = (ImageView) view.findViewById(R.id.thumbnail);\r
+ TextView fileName;\r
+ String name;\r
\r
- if (!file.isFolder()) {\r
- fileSizeV.setVisibility(View.VISIBLE);\r
- fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength()));\r
+ switch (viewType){\r
+ case LIST_ITEM:\r
+ fileName = (TextView) view.findViewById(R.id.Filename);\r
+ name = file.getFileName();\r
+ fileName.setText(name);\r
+ \r
+ TextView fileSizeV = (TextView) view.findViewById(R.id.file_size);\r
+ TextView lastModV = (TextView) view.findViewById(R.id.last_mod);\r
+ ImageView checkBoxV = (ImageView) view.findViewById(R.id.custom_checkbox);\r
+ \r
lastModV.setVisibility(View.VISIBLE);\r
- lastModV.setText(DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp()));\r
+ lastModV.setText(showRelativeTimestamp(file));\r
- // this if-else is needed even thoe fav icon is visible by default\r
- // because android reuses views in listview\r
- if (!file.keepInSync()) {\r
- view.findViewById(R.id.imageView3).setVisibility(View.GONE);\r
+ \r
+ checkBoxV.setVisibility(View.GONE);\r
+ \r
+ fileSizeV.setVisibility(View.VISIBLE);\r
+ fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength()));\r
+ \r
+ ImageView sharedIconV = (ImageView) view.findViewById(R.id.sharedIcon);\r
+ \r
+\r
+ if (file.isShareByLink()) {\r
+ sharedIconV.setVisibility(View.VISIBLE);\r
} else {\r
- view.findViewById(R.id.imageView3).setVisibility(View.VISIBLE);\r
+ sharedIconV.setVisibility(View.GONE);\r
}\r
\r
- ListView parentList = (ListView)parent;\r
- if (parentList.getChoiceMode() == ListView.CHOICE_MODE_NONE) { \r
- checkBoxV.setVisibility(View.GONE);\r
- } else {\r
- if (parentList.isItemChecked(position)) {\r
- checkBoxV.setImageResource(android.R.drawable.checkbox_on_background);\r
+ ImageView localStateView = (ImageView) view.findViewById(R.id.localFileIndicator);\r
+ \r
+ if (!file.isFolder()) {\r
+ GridView parentList = (GridView)parent;\r
+ if (parentList.getChoiceMode() == GridView.CHOICE_MODE_NONE) { \r
+ checkBoxV.setVisibility(View.GONE);\r
+ } else {\r
+ if (parentList.isItemChecked(position)) {\r
+ checkBoxV.setImageResource(android.R.drawable.checkbox_on_background);\r
+ } else {\r
+ checkBoxV.setImageResource(android.R.drawable.checkbox_off_background);\r
+ }\r
+ checkBoxV.setVisibility(View.VISIBLE);\r
+ }\r
+ \r
+ localStateView.bringToFront();\r
+ FileDownloaderBinder downloaderBinder = mTransferServiceGetter.getFileDownloaderBinder();\r
+ FileUploaderBinder uploaderBinder = mTransferServiceGetter.getFileUploaderBinder();\r
+ if (downloaderBinder != null && downloaderBinder.isDownloading(mAccount, file)) {\r
+ localStateView.setImageResource(R.drawable.downloading_file_indicator);\r
+ localStateView.setVisibility(View.VISIBLE);\r
+ } else if (uploaderBinder != null && uploaderBinder.isUploading(mAccount, file)) {\r
+ localStateView.setImageResource(R.drawable.uploading_file_indicator);\r
+ localStateView.setVisibility(View.VISIBLE);\r
+ } else if (file.isDown()) {\r
+ localStateView.setImageResource(R.drawable.local_file_indicator);\r
+ localStateView.setVisibility(View.VISIBLE);\r
} else {\r
- checkBoxV.setImageResource(android.R.drawable.checkbox_off_background);\r
+ localStateView.setVisibility(View.INVISIBLE);\r
}\r
- checkBoxV.setVisibility(View.VISIBLE);\r
- } \r
- \r
- // get Thumbnail if file is image\r
+ \r
+ ImageView sharedWithMeIconV = (ImageView) view.findViewById(R.id.sharedWithMeIcon);\r
+ if (checkIfFileIsSharedWithMe(file)) {\r
+ sharedWithMeIconV.setVisibility(View.VISIBLE);\r
+ } else {\r
+ sharedWithMeIconV.setVisibility(View.GONE);\r
+ }\r
+ } else {\r
+ localStateView.setVisibility(View.INVISIBLE);\r
+ }\r
+ break;\r
+ case GRID_ITEM:\r
+ fileName = (TextView) view.findViewById(R.id.Filename);\r
+ name = file.getFileName();\r
+ fileName.setText(name);\r
+ break;\r
+ case GRID_IMAGE:\r
+ break;\r
+ }\r
+ \r
+ // For all Views\r
+ \r
+ // this if-else is needed even though favorite icon is visible by default\r
+ // because android reuses views in listview\r
+ if (!file.keepInSync()) {\r
+ view.findViewById(R.id.favoriteIcon).setVisibility(View.GONE);\r
+ } else {\r
+ view.findViewById(R.id.favoriteIcon).setVisibility(View.VISIBLE);\r
+ }\r
+ \r
+ // No Folder\r
+ if (!file.isFolder()) {\r
if (file.isImage() && file.getRemoteId() != null){\r
- // Thumbnail in Cache?\r
+ // Thumbnail in Cache?\r
Bitmap thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache(\r
String.valueOf(file.getRemoteId())\r
- );\r
+ );\r
if (thumbnail != null && !file.needsUpdateThumbnail()){\r
fileIcon.setImageBitmap(thumbnail);\r
} else {\r
mSortAscending = ascending;\r
\r
sortDirectory();\r
- } \r
+ }
+ \r
+ private CharSequence showRelativeTimestamp(OCFile file){\r
+ return DisplayUtils.getRelativeDateTimeString(mContext, file.getModificationTimestamp(),\r
+ DateUtils.SECOND_IN_MILLIS, DateUtils.WEEK_IN_MILLIS, 0);\r
+ }
}\r