along with this program. If not, see <http://www.gnu.org/licenses/>.\r
-->\r
<manifest package="com.owncloud.android"\r
- android:versionCode="103020"\r
- android:versionName="1.3.20" xmlns:android="http://schemas.android.com/apk/res/android">\r
+ android:versionCode="103022"\r
+ android:versionName="1.3.22" xmlns:android="http://schemas.android.com/apk/res/android">\r
\r
<uses-permission android:name="android.permission.GET_ACCOUNTS" />\r
<uses-permission android:name="android.permission.USE_CREDENTIALS" />\r
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />\r
<uses-permission android:name="android.permission.READ_PHONE_STATE" />\r
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>\r
-\r
+ <uses-permission android:name="android.permission.WAKE_LOCK"/>\r
+ \r
<uses-sdk\r
android:minSdkVersion="8"\r
android:targetSdkVersion="13" />\r
</activity>\r
<activity android:name=".ui.activity.UploadFilesActivity">\r
</activity>\r
+ <activity android:name=".ui.activity.InstantUploadActivity">\r
+ </activity>\r
+ <activity android:name=".ui.activity.FailedUploadActivity" android:theme="@android:style/Theme.Dialog" android:excludeFromRecents="true"/>\r
<activity android:name=".Uploader" >\r
<intent-filter>\r
<action android:name="android.intent.action.SEND" >\r
</activity>\r
<activity android:name=".ui.activity.PreferencesNewSessionewSession" >\r
</activity>\r
+ \r
+ <activity android:name="com.owncloud.android.ui.preview.PreviewImageActivity" />\r
+ \r
+ <activity android:name="com.owncloud.android.ui.preview.PreviewVideoActivity"\r
+ android:label="@string/app_name"\r
+ android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >\r
+ </activity> \r
\r
<service\r
android:name=".authenticator.AccountAuthenticatorService"\r
</intent-filter>\r
</activity>\r
\r
- <service android:name=".files.services.FileDownloader" >\r
- </service>\r
+ <service android:name=".files.services.FileDownloader" />\r
+ <service android:name=".files.services.FileUploader" />\r
+ <service android:name=".media.MediaService" />\r
\r
- <activity android:name=".ui.activity.FileDetailActivity" />
+ <activity android:name=".ui.activity.FileDetailActivity" />\r
<activity android:name=".ui.activity.PinCodeActivity" />\r
- <activity android:name=".extensions.ExtensionsAvailableActivity"></activity>
+ <activity android:name=".extensions.ExtensionsAvailableActivity"></activity>\r
<activity android:name=".extensions.ExtensionsListActivity"></activity>\r
<activity android:name=".ui.activity.AccountSelectActivity" android:uiOptions="none" android:label="@string/prefs_accounts"></activity>\r
- <activity android:name=".ui.activity.ConflictsResolveActivity"/>
+ <activity android:name=".ui.activity.ConflictsResolveActivity"/>\r
<activity android:name=".ui.activity.GenericExplanationActivity"/>\r
<activity android:name=".ui.activity.ErrorsWhileCopyingHandlerActivity"/>\r
- <service android:name=".files.services.FileUploader" >\r
- </service>
<service android:name=".files.services.InstantUploadService" />
<receiver android:name=".files.InstantUploadBroadcastReceiver">\r
<intent-filter>\r
<action android:name="com.android.camera.NEW_PICTURE" />\r
<data android:mimeType="image/*" />\r
- </intent-filter>
- <intent-filter>
- <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
+ </intent-filter>\r
+ <intent-filter>\r
+ <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>\r
</intent-filter>\r
</receiver>\r
<receiver android:name=".files.BootupBroadcastReceiver">\r
<action android:name="android.intent.action.BOOT_COMPLETED"/>\r
</intent-filter>\r
</receiver>\r
- <service android:name=".files.services.FileObserverService"/>
+ <service android:name=".files.services.FileObserverService"/>\r
</application>\r
\r
-</manifest>
+</manifest>\r
<string name="setup_title">Mit Ihrer %1$s verbinden</string>
<string name="setup_btn_connect">Verbinden</string>
<string name="uploader_btn_upload_text">Hochladen</string>
+ <string name="uploader_top_message">Wähle Zielverzeichnis:</string>
<string name="uploader_wrn_no_account_title">Kein Konto gefunden</string>
<string name="uploader_wrn_no_account_text">Es sind keine %1$s-Konten auf Ihrem Gerät eingerichtet. Bitte richten Sie zuerst ein Konto ein.</string>
<string name="uploader_wrn_no_account_setup_btn_text">Einrichten</string>
<string name="common_save_exit">Speichern & Schließen</string>
<string name="common_exit">%1$s verlassen</string>
<string name="common_error">Fehler</string>
+ <string name="common_loading">Wird geladen …</string>
+ <string name="common_error_unknown">Unbekannter Fehler</string>
<string name="about_title">Über</string>
<string name="delete_account">Account löschen</string>
<string name="create_account">Account erstellen</string>
<string name="downloader_download_succeeded_content">%1$s wurde erfolgreich heruntergeladen</string>
<string name="downloader_download_failed_ticker">Herunterladen fehlgeschlagen</string>
<string name="downloader_download_failed_content">Herunterladen von %1$s konnte nicht abgeschlossen werden</string>
+ <string name="downloader_not_downloaded_yet">Noch nicht heruntergeladen</string>
<string name="common_choose_account">Konto auswählen</string>
<string name="sync_string_contacts">Kontakte</string>
<string name="sync_fail_ticker">Synchronisation fehlgeschlagen</string>
<string name="pincode_wrong">Falsche App-PIN</string>
<string name="pincode_removed">Die App-PIN wurde entfernt</string>
<string name="pincode_stored">Die App-PIN wurde gespeichert</string>
+ <string name="media_notif_ticker">"%1$s Musik Player"</string>
+ <string name="media_state_playing">"%1$s (wird abgespielt)"</string>
+ <string name="media_state_loading">"%1$s (wird geladen)"</string>
+ <string name="media_event_done">"%1$s Wiedergabe beendet"</string>
+ <string name="media_err_nothing_to_play">Keine Media-Datei gefunden</string>
+ <string name="media_err_no_account">Ungültiger Account</string>
+ <string name="media_err_not_in_owncloud">Datei ist nicht in einem gültigen Account</string>
+ <string name="media_err_unsupported">Nicht unterstützter Medien-Codec</string>
+ <string name="media_err_io">Media-Datei konnte nicht gelesen werden</string>
+ <string name="media_err_malformed">Die Media-Datei ist noch nicht kodiert</string>
+ <string name="media_err_timeout">Zeitüberschreitung ist beim Abspielen aufgetreten</string>
+ <string name="media_err_invalid_progressive_playback">Media-Datei konnte nicht gestreamt werden</string>
+ <string name="media_err_unknown">Media-Datei kann nicht vom Standard Player wiedergegeben werden</string>
+ <string name="media_err_security_ex">Sicherheits-Fehler ist beim Abspielen aufgetreten %1$s</string>
+ <string name="media_err_io_ex">Eingabe-Fehler ist beim Abspielen aufgetreten %1$s</string>
+ <string name="media_err_unexpected">Unerwarteter Fehler bei der Wiedergabe %1$s</string>
+ <string name="media_rewind_description">Zurückspulen</string>
+ <string name="media_play_pause_description">Wiedergabe oder Pause</string>
+ <string name="media_forward_description">Vorspulen</string>
+
<string-array name="prefs_trackmydevice_intervall_keys">
<item>15 Minuten</item>
<item>30 Minuten</item>
<string name="extensions_avail_title">Erweiterung verfügbar!</string>
<string name="extensions_avail_message">Scheinbar unterstützt Ihr Server weitere Erweiterungen. Möchten Sie die verfügbaren Erweiterungen für Android sehen?</string>
<string name="fd_keep_in_sync">Datei aktuell halten</string>
- <string name="common_share">Freigeben</string>
+ <string name="common_share">Teilen</string>
<string name="common_rename">Umbenennen</string>
<string name="common_remove">Löschen</string>
<string name="confirmation_remove_alert">Möchten Sie %1$s wirklich löschen?</string>
<string name="conflict_keep_both">Beide behalten</string>
<string name="conflict_overwrite">Überschreiben</string>
<string name="conflict_dont_upload">Nicht hochladen</string>
+ <string name="preview_image_description">Bildvorschau</string>
+ <string name="preview_image_error_unknown_format">Das Bild kann nicht angezeigt werden</string>
+ <string name="preview_image_error_out_of_memory">"Nicht genug Speicherplatz um das Bild anzuzeigen</string>
+
+ <string name="actionbar_failed_instant_upload">Fehlgeschlagene Sofortuploads</string>
+ <string name="failed_upload_headline_text">Fehlgeschlagene Sofortuploads</string>
+ <string name="failed_upload_headline_hint">Auflistung aller fehlgeschlagenen Softuploads</string>
+ <string name="failed_upload_all_cb">Alle auswählen</string>
+ <string name="failed_upload_headline_retryall_btn">Ausgewählte wiederholen</string>
+ <string name="failed_upload_headline_delete_all_btn">Ausgewählte löschen </string>
+ <string name="failed_upload_retry_text">Versuche ausgewählte erneut hochzuladen</string>
+ <string name="failed_upload_load_more_images">Load more Picrures</string>
+ <string name="failed_upload_retry_do_nothing_text">do nothing you are not online for instant upload</string>
</resources>
<string name="setup_title">Mit Deiner %1$s verbinden</string>
<string name="setup_btn_connect">Verbinden</string>
<string name="uploader_btn_upload_text">Hochladen</string>
+ <string name="uploader_top_message">Wähle Zielverzeichnis:</string>
<string name="uploader_wrn_no_account_title">Kein Account gefunden</string>
<string name="uploader_wrn_no_account_text">Es sind keine %1$s-Accounts auf Deinem Gerät eingerichtet. Bitte richte zuerst ein Konto ein.</string>
<string name="uploader_wrn_no_account_setup_btn_text">Einrichten</string>
<string name="sync_fail_ticker">Synchronisation fehlgeschlagen</string>
<string name="sync_fail_content">Bei der Synchronisation konnte %1$s nicht übertragen werden</string>
<string name="sync_conflicts_in_favourites_ticker">Konflikte gefunden</string>
- <string name="sync_conflicts_in_favourites_content">%1$d synchrongehaltene Dateien konnte nicht synchronisiert werden.</string>
- <string name="sync_fail_in_favourites_ticker">Synchronhalten schlug fehl.</string>
+ <string name="sync_conflicts_in_favourites_content">%1$d synchron zu haltende Dateien konnte nicht synchronisiert werden.</string>
+ <string name="sync_fail_in_favourites_ticker">Synchron halten schlug fehl.</string>
<string name="sync_fail_in_favourites_content">Inhalte von %1$d konnte nicht synchronisiert werden (%2$d Konflikte)</string>
<string name="use_ssl">Sichere Verbindung benutzen</string>
<string name="location_no_provider">%1$s kann Dein Gerät nicht verfolgen. Bitte überprüfe Deine Standorteinstellungen</string>
<string name="sync_file_fail_msg">Die entfernte Datei konnte nicht überprüft werden</string>
<string name="sync_file_nothing_to_do_msg">Dateiinhalte bereits synchronisiert</string>
<string name="create_dir_fail_msg">Das Verzeichnis konnte nicht erstellt werden.</string>
- <string name="wait_a_moment">Bitte warten Sie einen Moment.</string>
+ <string name="wait_a_moment">Bitte warte einen Moment.</string>
<string name="filedisplay_unexpected_bad_get_content">Ein unerwartetes Problem ist aufgetreten. Bitte versuche, die Datei in einer anderen App zu öffnen</string>
<string name="filedisplay_no_file_selected">Es wurde keine Datei ausgewählt.</string>
<string name="ssl_validator_title">Warnung</string>
<string name="conflict_keep_both">Beide behalten</string>
<string name="conflict_overwrite">Überschreiben</string>
<string name="conflict_dont_upload">Nicht hochladen</string>
+
+ <string name="actionbar_failed_instant_upload">Fehlgeschlagene Sofortuploads</string>
+ <string name="failed_upload_headline_text">Fehlgeschlagene Sofortuploads</string>
+ <string name="failed_upload_headline_hint">Auflistung aller fehlgeschlagenen Softuploads</string>
+ <string name="failed_upload_all_cb">Alle auswählen</string>
+ <string name="failed_upload_headline_retryall_btn">Ausgewählte wiederholen</string>
+ <string name="failed_upload_headline_delete_all_btn">Ausgewählte löschen </string>
+ <string name="failed_upload_retry_text">Versuche ausgewählte erneut hochzuladen</string>
+ <string name="failed_upload_load_more_images">Weitere Bilder laden</string>
+ <string name="failed_upload_retry_do_nothing_text">Upload nicht gestarted, Sie sind nicht online für ein Softupload</string>
+ <string name="failed_upload_failure_text">Fehlermeldung: </string>
+ <string name="failed_upload_quota_exceeded_text">Bitte überprüfen sie ihre Serverkonfiguration, möglicherweise ist ihre Upload Limit überschritten</string>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<resources>
+
<string name="app_name">ownCloud</string>
- <string name="whats_new">What\'s new</string>
<string name="main_password">Password:</string>
<string name="main_login">Username:</string>
<string name="main_button_login">Login</string>
<string name="main_settings">Settings</string>
<string name="main_tit_accsetup">Setup Account</string>
<string name="main_wrn_accsetup">There is no account set up on your device. In order to use this App, you need to create one.</string>
-
<string name="about_message">%1$s Android App\n\nversion: %2$s</string>
-
<string name="actionbar_sync">Refresh</string>
<string name="actionbar_upload">Upload</string>
<string name="actionbar_upload_from_apps">Content from other apps</string>
<string name="actionbar_mkdir">Create directory</string>
<string name="actionbar_search">Search</string>
<string name="actionbar_settings">Settings</string>
+ <string name="actionbar_see_details">Details</string>
<string name="prefs_category_general">General</string>
- <string name="prefs_category_trackmydevice">Device tracking</string>
<string name="prefs_add_session">Add new session</string>
<string name="prefs_create_img_thumbnails">Create image thumbnails</string>
<string name="prefs_select_oc_account">Select an account</string>
<string name="prefs_pincode_summary">Protect your client</string>
<string name="prefs_instant_upload">Enable instant uploads</string>
<string name="prefs_instant_upload_summary">Instantly upload photos taken by camera</string>
-
<string name="auth_host_url">URL</string>
<string name="auth_username">Username</string>
<string name="auth_password">Password</string>
<string name="setup_title">Connect to your %1$s</string>
<string name="setup_btn_connect">Connect</string>
<string name="uploader_btn_upload_text">Upload</string>
+ <string name="uploader_top_message">Choose upload directory:</string>
<string name="uploader_wrn_no_account_title">No account found</string>
<string name="uploader_wrn_no_account_text">There are no %1$s accounts on your device. Please setup an account first.</string>
<string name="uploader_wrn_no_account_setup_btn_text">Setup</string>
<string name="uploader_wrn_no_account_quit_btn_text">Quit</string>
- <string name="uploader_wrn_no_content_title">No content to upload</string>
- <string name="uploader_wrn_no_content_text">No content was received. Nothing to upload.</string>
+ <string name="uploader_wrn_no_content_title">No content to upload</string>
+ <string name="uploader_wrn_no_content_text">No content was received. Nothing to upload.</string>
<string name="uploader_error_forbidden_content">%1$s is not allowed to access the shared content</string>
<string name="uploader_info_uploading">Uploading</string>
<string name="uploader_btn_create_dir_text">Create directory for upload</string>
- <string name="file_list_empty">There are no files in this folder.\nNew files can be added with the \"Upload\" menu option.</string>
+ <string name="file_list_empty">There are no files in this folder.\nNew files can be added with the \"Upload\" menu option.</string>
<string name="filedetails_select_file">Tap on a file to display additional information.</string>
<string name="filedetails_size">Size:</string>
<string name="filedetails_type">Type:</string>
<string name="filedetails_modified">Modified:</string>
<string name="filedetails_download">Download</string>
<string name="filedetails_sync_file">Refresh</string>
- <string name="filedetails_redownload">Redownload</string>
+ <string name="filedetails_redownload">Redownload</string>
<string name="filedetails_open">Open</string>
<string name="filedetails_renamed_in_upload_msg">File was renamed to %1$s during upload</string>
<string name="common_yes">Yes</string>
<string name="common_ok">OK</string>
<string name="common_cancel_download">Cancel download</string>
<string name="common_cancel_upload">Cancel upload</string>
- <string name="common_cancel">Cancel</string>
+ <string name="common_cancel">Cancel</string>
<string name="common_save_exit">Save & Exit</string>
<string name="common_exit">Leave %1$s</string>
<string name="common_error">Error</string>
+ <string name="common_loading">Loading …</string>
+ <string name="common_error_unknown">Unknown error</string>
<string name="about_title">About</string>
-
<string name="delete_account">Delete account</string>
<string name="create_account">Create account</string>
-
<string name="upload_chooser_title">Upload from …</string>
<string name="uploader_info_dirname">Directory name</string>
- <string name="uploader_upload_in_progress_ticker">Uploading …</string>
- <string name="uploader_upload_in_progress_content">%1$d%% Uploading %2$s</string>
- <string name="uploader_upload_succeeded_ticker">Upload succeeded</string>
+ <string name="uploader_upload_in_progress_ticker">Uploading …</string>
+ <string name="uploader_upload_in_progress_content">%1$d%% Uploading %2$s</string>
+ <string name="uploader_upload_succeeded_ticker">Upload succeeded</string>
<string name="uploader_upload_succeeded_content_single">%1$s was successfully uploaded</string>
<string name="uploader_upload_succeeded_content_multiple">%1$d files were successfully uploaded</string>
<string name="uploader_upload_failed_ticker">Upload failed</string>
<string name="downloader_download_succeeded_content">%1$s was successfully downloaded</string>
<string name="downloader_download_failed_ticker">Download failed</string>
<string name="downloader_download_failed_content">Download of %1$s could not be completed</string>
+ <string name="downloader_not_downloaded_yet">Not downloaded yet</string>
<string name="common_choose_account">Choose account</string>
<string name="sync_string_contacts">Contacts</string>
- <string name="sync_fail_ticker">Synchronization failed</string>
+ <string name="sync_fail_ticker">Synchronization failed</string>
<string name="sync_fail_content">Synchronization of %1$s could not be completed</string>
- <string name="sync_conflicts_in_favourites_ticker">Conflicts found</string>
- <string name="sync_conflicts_in_favourites_content">%1$d kept-in-sync files could not be sync\'ed</string>
+ <string name="sync_conflicts_in_favourites_ticker">Conflicts found</string>
+ <string name="sync_conflicts_in_favourites_content">%1$d kept-in-sync files could not be sync\'ed</string>
<string name="sync_fail_in_favourites_ticker">Kept-in-sync files failed</string>
- <string name="sync_fail_in_favourites_content">Contents of %1$d files could not be sync\'ed (%2$d conflicts)</string>
- <string name="sync_foreign_files_forgotten_ticker">Some local files were forgotten</string>
- <string name="sync_foreign_files_forgotten_content">%1$d files out of the %2$s directory could not be copied into</string>
- <string name="sync_foreign_files_forgotten_explanation">"As of version 1.3.16, files uploaded from this device are copied into the local %1$s folder to prevent data loss when a single file is synced with multiple accounts.\n\nDue to this change, all files uploaded in previous versions of this app were copied into the %2$s folder. However, an error prevented the completion of this operation during account synchronization. You may either leave the file(s) as is and remove the link to %3$s, or move the file(s) into the %1$s directory and retain the link to %4$s.\n\nListed below are the local file(s), and the the remote file(s) in %5$s they were linked to.</string>
-
+ <string name="sync_fail_in_favourites_content">Contents of %1$d files could not be sync\'ed (%2$d conflicts)</string>
+ <string name="sync_foreign_files_forgotten_ticker">Some local files were forgotten</string>
+ <string name="sync_foreign_files_forgotten_content">%1$d files out of the %2$s directory could not be copied into</string>
+ <string name="sync_foreign_files_forgotten_explanation">"As of version 1.3.16, files uploaded from this device are copied into the local %1$s folder to prevent data loss when a single file is synced with multiple accounts.\n\nDue to this change, all files uploaded in previous versions of this app were copied into the %2$s folder. However, an error prevented the completion of this operation during account synchronization. You may either leave the file(s) as is and remove the link to %3$s, or move the file(s) into the %1$s directory and retain the link to %4$s.\n\nListed below are the local file(s), and the the remote file(s) in %5$s they were linked to.</string>
<string name="foreign_files_move">"Move all"</string>
<string name="foreign_files_success">"All files were moved"</string>
<string name="foreign_files_fail">"Some files could not be moved"</string>
<string name="foreign_files_local_text">"Local: %1$s"</string>
- <string name="foreign_files_remote_text">"Remote: %1$s"</string>
-
- <string name="upload_query_move_foreign_files">There is not space enough to copy the selected files into the %1$s folder. Would like to move them into instead? </string>
-
- <string name="use_ssl">Use Secure Connection</string>
+ <string name="foreign_files_remote_text">"Remote: %1$s"</string>
+ <string name="upload_query_move_foreign_files">There is not space enough to copy the selected files into the %1$s folder. Would like to move them into instead? </string>
+ <string name="use_ssl">Use Secure Connection</string>
<string name="location_no_provider">%1$s cannot track your device. Please check your location settings</string>
-
<string name="pincode_enter_pin_code">Please, insert your App PIN</string>
<string name="pincode_enter_new_pin_code">Please, insert your new App PIN</string>
<string name="pincode_configure_your_pin">Enter your App PIN</string>
- <string name="pincode_configure_your_pin_explanation">The PIN will be requested every time the app is started</string>
+ <string name="pincode_configure_your_pin_explanation">The PIN will be requested every time the app is started</string>
<string name="pincode_reenter_your_pincode">Please, reenter your App PIN</string>
<string name="pincode_remove_your_pincode">Remove your App PIN</string>
- <string name="pincode_mismatch">The App PINs are not the same</string>
+ <string name="pincode_mismatch">The App PINs are not the same</string>
<string name="pincode_wrong">Incorrect App PIN</string>
<string name="pincode_removed">App PIN removed</string>
<string name="pincode_stored">App PIN stored</string>
+ <string name="media_notif_ticker">"%1$s music player"</string>
+ <string name="media_state_playing">"%1$s (playing)"</string>
+ <string name="media_state_loading">"%1$s (loading)"</string>
+ <string name="media_event_done">"%1$s playback finished"</string>
+ <string name="media_err_nothing_to_play">No media file found</string>
+ <string name="media_err_no_account">No account provided</string>
+ <string name="media_err_not_in_owncloud">File not in a valid account</string>
+ <string name="media_err_unsupported">Unsupported media codec</string>
+ <string name="media_err_io">Media file could not be read</string>
+ <string name="media_err_malformed">Media file not correctly encoded</string>
+ <string name="media_err_timeout">Too much time trying to play</string>
+ <string name="media_err_invalid_progressive_playback">Media file cannot be streamed</string>
+ <string name="media_err_unknown">Media file cannot be played with the stock media player</string>
+ <string name="media_err_security_ex">Security error trying to play %1$s</string>
+ <string name="media_err_io_ex">Input error trying to play %1$s</string>
+ <string name="media_err_unexpected">Unexpected error trying to play %1$s</string>
+ <string name="media_previous_description">Previous track button</string>
+ <string name="media_rewind_description">Rewind button</string>
+ <string name="media_play_pause_description">Play or pause button</string>
+ <string name="media_forward_description">Fast forward button</string>
+ <string name="media_next_description">Next track button</string>
<string-array name="prefs_trackmydevice_intervall_keys">
- <item>15 Minutes</item>
- <item>30 Minutes</item>
- <item>60 Minutes</item>
- </string-array>
-
+ <item>15 Minutes</item>
+ <item>30 Minutes</item>
+ <item>60 Minutes</item>
+ </string-array>
<string-array name="prefs_trackmydevice_intervall_values">
- <item>15</item>
- <item>30</item>
- <item>60</item>
- </string-array>
+ <item>15</item>
+ <item>30</item>
+ <item>60</item>
+ </string-array>
+
<string name="auth_trying_to_login">Trying to login…</string>
<string name="auth_no_net_conn_title">No network connection</string>
<string name="auth_no_net_conn_message">No network connection has been detected, check your Internet connection and try again.</string>
<string name="auth_incorrect_path_message">Application couldn\'t find a server instance at the given path. Please check your path and try again.</string>
<string name="auth_timeout_title">The server took too long to respond</string>
<string name="auth_incorrect_address_title">Malformed URL</string>
- <string name="auth_ssl_general_error_title">SSL initialization failed</string>
- <string name="auth_ssl_unverified_server_title">Unverified SSL server\'s identity</string>
- <string name="auth_bad_oc_version_title">Unrecognized server version</string>
- <string name="auth_wrong_connection_title">Couldn\'t establish connection</string>
- <string name="auth_secure_connection">Secure connection established</string>
+ <string name="auth_ssl_general_error_title">SSL initialization failed</string>
+ <string name="auth_ssl_unverified_server_title">Unverified SSL server\'s identity</string>
+ <string name="auth_bad_oc_version_title">Unrecognized server version</string>
+ <string name="auth_wrong_connection_title">Couldn\'t establish connection</string>
+ <string name="auth_secure_connection">Secure connection established</string>
<string name="auth_login_details">Login details</string>
<string name="auth_unauthorized">Invalid login / password</string>
<string name="auth_not_found">Wrong path given</string>
<string name="auth_internal">Internal server error, code %1$d</string>
-
<string name="crashlog_message">Application terminated unexpectedly. Would you like to submit a crash report?</string>
<string name="crashlog_send_report">Send report</string>
<string name="crashlog_dont_send_report">Don\'t send report</string>
-
<string name="extensions_avail_title">Extensions available!</string>
<string name="extensions_avail_message">Looks like your server instance is supporting advanced extensions. Would you like to see extensions available for android ?</string>
<string name="fd_keep_in_sync">Keep file up to date</string>
<string name="common_share">Share</string>
<string name="common_rename">Rename</string>
<string name="common_remove">Remove</string>
-
- <string name="confirmation_remove_alert">"Do you really want to remove %1$s ?"</string>
- <string name="confirmation_remove_folder_alert">"Do you really want to remove %1$s and its contents ?"</string>
- <string name="confirmation_remove_local">Local only</string>
- <string name="confirmation_remove_folder_local">Local contents only</string>
- <string name="confirmation_remove_remote">Remove from server</string>
- <string name="confirmation_remove_remote_and_local">Remote and local</string>
-
+ <string name="confirmation_remove_alert">"Do you really want to remove %1$s ?"</string>
+ <string name="confirmation_remove_folder_alert">"Do you really want to remove %1$s and its contents ?"</string>
+ <string name="confirmation_remove_local">Local only</string>
+ <string name="confirmation_remove_folder_local">Local contents only</string>
+ <string name="confirmation_remove_remote">Remove from server</string>
+ <string name="confirmation_remove_remote_and_local">Remote and local</string>
<string name="remove_success_msg">"Removal succeeded"</string>
<string name="remove_fail_msg">"Removal failed"</string>
-
<string name="rename_dialog_title">Enter a new name</string>
<string name="rename_local_fail_msg">"Local copy could not be renamed; try a different name"</string>
<string name="rename_server_fail_msg">"Rename could not be completed"</string>
-
- <string name="sync_file_fail_msg">Remote file could not be checked</string>
- <string name="sync_file_nothing_to_do_msg">File contents already synchronized</string>
-
+ <string name="sync_file_fail_msg">Remote file could not be checked</string>
+ <string name="sync_file_nothing_to_do_msg">File contents already synchronized</string>
<string name="create_dir_fail_msg">Directory could not be created</string>
-
<string name="wait_a_moment">Wait a moment</string>
-
<string name="filedisplay_unexpected_bad_get_content">"Unexpected problem ; please select the file from a different app"</string>
<string name="filedisplay_no_file_selected">No file was selected</string>
-
<string name="ssl_validator_title">Warning</string>
<string name="ssl_validator_header">The identity of the site could not be verified</string>
<string name="ssl_validator_reason_cert_not_trusted">- The server certificate is not trusted</string>
<string name="ssl_validator_label_issuer">Issued by:</string>
<string name="ssl_validator_label_CN">Common name:</string>
<string name="ssl_validator_label_O">Organization:</string>
- <string name="ssl_validator_label_OU">Organizational unit:</string>
- <string name="ssl_validator_label_C">Country:</string>
- <string name="ssl_validator_label_ST">State:</string>
- <string name="ssl_validator_label_L">Location:</string>
+ <string name="ssl_validator_label_OU">Organizational unit:</string>
+ <string name="ssl_validator_label_C">Country:</string>
+ <string name="ssl_validator_label_ST">State:</string>
+ <string name="ssl_validator_label_L">Location:</string>
<string name="ssl_validator_label_validity">Validity:</string>
<string name="ssl_validator_label_validity_from">From:</string>
<string name="ssl_validator_label_validity_to">To:</string>
<string name="ssl_validator_label_signature">Signature:</string>
<string name="ssl_validator_label_signature_algorithm">Algorithm:</string>
- <string name="text_placeholder">This is a placeholder</string>
+ <string name="placeholder_sentence">This is a placeholder</string>
+ <string name="placeholder_filename">placeholder.txt</string>
+ <string name="placeholder_filetype">PNG Image</string>
+ <string name="placeholder_filesize">389 KB</string>
+ <string name="placeholder_timestamp">2012/05/18 12:23 PM</string>
+ <string name="placeholder_media_time">12:23:45</string>
<string name="instant_upload_on_wifi">Upload pictures via WiFi only</string>
- <string name="instant_upload_path">/InstantUpload</string>
-
+ <string name="instant_upload_path">/InstantUpload</string>
<string name="conflict_title">Update conflict</string>
<string name="conflict_message">Remote file %s is not synchronized with local file. Continuing will replace content of file on server.</string>
<string name="conflict_keep_both">Keep both</string>
<string name="conflict_overwrite">Overwrite</string>
<string name="conflict_dont_upload">Don\'t upload</string>
+ <string name="preview_image_description">Image preview</string>
+ <string name="preview_image_error_unknown_format">This image can not be shown</string>
+ <string name="preview_image_error_out_of_memory">"Not enough memory to show this image</string>
+
<!-- we need to improve the communication of errors to the user -->
<string name="error__upload__local_file_not_copied">%1$s could not be copied to %2$s local directory</string>
-
+ <string name="actionbar_failed_instant_upload">Failed InstantUpload"</string>
+ <string name="failed_upload_headline_text">Failed instant uploads</string>
+ <string name="failed_upload_headline_hint">Summary of all failed instant uploads</string>
+ <string name="failed_upload_all_cb">select all</string>
+ <string name="failed_upload_headline_retryall_btn">retry all selected</string>
+ <string name="failed_upload_headline_delete_all_btn">delete all selected from uploadqueue</string>
+ <string name="failed_upload_retry_text">retry to upload the image: </string>
+ <string name="failed_upload_load_more_images">Load more Picrures</string>
+ <string name="failed_upload_retry_do_nothing_text">do nothing you are not online for instant upload</string>
+ <string name="failed_upload_failure_text">Failure Message: </string>
+ <string name="failed_upload_quota_exceeded_text">Please check your server configuration,maybe your quota is exceeded.</string>
</resources>
*\r
* This program is free software: you can redistribute it and/or modify\r
* it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation, either version 2 of the License, or\r
+ * the Free Software Foundation, either version 3 of the License, or\r
* (at your option) any later version.\r
*\r
* This program is distributed in the hope that it will be useful,\r
import android.os.IBinder;\r
import android.preference.PreferenceManager;\r
import android.provider.MediaStore;\r
+import android.support.v4.app.Fragment;\r
import android.support.v4.app.FragmentTransaction;\r
import android.util.Log;\r
import android.view.View;\r
import com.owncloud.android.operations.RemoteOperationResult.ResultCode;\r
import com.owncloud.android.syncadapter.FileSyncService;\r
import com.owncloud.android.ui.dialog.ChangelogDialog;\r
+ import com.owncloud.android.ui.dialog.EditNameDialog;\r
import com.owncloud.android.ui.dialog.SslValidatorDialog;\r
+ import com.owncloud.android.ui.dialog.EditNameDialog.EditNameDialogListener;\r
import com.owncloud.android.ui.dialog.SslValidatorDialog.OnSslValidatorListener;\r
import com.owncloud.android.ui.fragment.FileDetailFragment;\r
+import com.owncloud.android.ui.fragment.FileFragment;\r
import com.owncloud.android.ui.fragment.OCFileListFragment;\r
+import com.owncloud.android.ui.preview.PreviewImageActivity;\r
+import com.owncloud.android.ui.preview.PreviewImageFragment;\r
+import com.owncloud.android.ui.preview.PreviewMediaFragment;\r
\r
import com.owncloud.android.R;\r
import eu.alefzero.webdav.WebdavClient;\r
* Displays, what files the user has available in his ownCloud.\r
* \r
* @author Bartek Przybylski\r
- * \r
+ * @author David A. Velasco\r
*/\r
\r
public class FileDisplayActivity extends SherlockFragmentActivity implements\r
- OCFileListFragment.ContainerActivity, FileFragment.ContainerActivity, OnNavigationListener, OnSslValidatorListener, OnRemoteOperationListener {\r
+ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNavigationListener, OnSslValidatorListener, OnRemoteOperationListener, EditNameDialogListener {\r
\r
private ArrayAdapter<String> mDirectories;\r
private OCFile mCurrentDir = null;\r
\r
private static final String TAG = "FileDisplayActivity";\r
\r
- private static int[] mMenuIdentifiersToPatch = {R.id.about_app};\r
+ private static int[] mMenuIdentifiersToPatch = {R.id.action_about_app};\r
+ \r
+ private OCFile mWaitingToPreview;\r
+ private Handler mHandler;\r
+\r
\r
@Override\r
public void onCreate(Bundle savedInstanceState) {\r
super.onCreate(savedInstanceState);\r
\r
/// Load of parameters from received intent\r
- mCurrentDir = getIntent().getParcelableExtra(FileDetailFragment.EXTRA_FILE); // no check necessary, mCurrenDir == null if the parameter is not in the intent\r
Account account = getIntent().getParcelableExtra(FileDetailFragment.EXTRA_ACCOUNT);\r
- if (account != null)\r
- AccountUtils.setCurrentOwnCloudAccount(this, account.name);\r
+ if (account != null && AccountUtils.setCurrentOwnCloudAccount(this, account.name)) {\r
+ mCurrentDir = getIntent().getParcelableExtra(FileDetailFragment.EXTRA_FILE); \r
+ }\r
\r
/// Load of saved instance state: keep this always before initDataFromCurrentAccount()\r
if(savedInstanceState != null) {\r
// TODO - test if savedInstanceState should take precedence over file in the intent ALWAYS (now), NEVER, or SOME TIMES\r
mCurrentDir = savedInstanceState.getParcelable(FileDetailFragment.EXTRA_FILE);\r
+ mWaitingToPreview = (OCFile) savedInstanceState.getParcelable(FileDetailActivity.KEY_WAITING_TO_PREVIEW);\r
+\r
+ } else {\r
+ mWaitingToPreview = null;\r
}\r
\r
if (!AccountUtils.accountsAreSetup(this)) {\r
// Drop-down navigation \r
mDirectories = new CustomArrayAdapter<String>(this, R.layout.sherlock_spinner_dropdown_item);\r
OCFile currFile = mCurrentDir;\r
- while(currFile != null && currFile.getFileName() != OCFile.PATH_SEPARATOR) {\r
+ while(mStorageManager != null && currFile != null && currFile.getFileName() != OCFile.PATH_SEPARATOR) {\r
mDirectories.add(currFile.getFileName());\r
currFile = mStorageManager.getFileById(currFile.getParentId());\r
}\r
mDualPane = (findViewById(R.id.file_details_container) != null);\r
if (mDualPane) {\r
initFileDetailsInDualPane();\r
+ } else {\r
+ // quick patchES to fix problem in turn from landscape to portrait, when a file is selected in the right pane\r
+ // TODO serious refactorization in activities and fragments providing file browsing and handling \r
+ if (mCurrentFile != null) {\r
+ onFileClick(mCurrentFile);\r
+ mCurrentFile = null;\r
+ }\r
+ Fragment rightPanel = getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);\r
+ if (rightPanel != null) {\r
+ FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();\r
+ transaction.remove(rightPanel);\r
+ transaction.commit();\r
+ }\r
}\r
\r
// Action bar setup\r
\r
\r
// show changelog, if needed\r
- showChangeLog();\r
+ //showChangeLog();\r
\r
Log.d(getClass().toString(), "onCreate() end");\r
}\r
startActivity(intent); // the new activity won't be created until this.onStart() and this.onResume() are finished;\r
}\r
\r
-\r
+ \r
/**\r
* Load of state dependent of the existence of an ownCloud account\r
*/\r
if (mDualPane && getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG) == null) {\r
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();\r
if (mCurrentFile != null) {\r
- transaction.replace(R.id.file_details_container, new FileDetailFragment(mCurrentFile, AccountUtils.getCurrentOwnCloudAccount(this)), FileDetailFragment.FTAG); // empty FileDetailFragment\r
+ if (PreviewMediaFragment.canBePreviewed(mCurrentFile)) {\r
+ if (mCurrentFile.isDown()) {\r
+ transaction.replace(R.id.file_details_container, new PreviewMediaFragment(mCurrentFile, AccountUtils.getCurrentOwnCloudAccount(this)), FileDetailFragment.FTAG);\r
+ } else {\r
+ transaction.replace(R.id.file_details_container, new FileDetailFragment(mCurrentFile, AccountUtils.getCurrentOwnCloudAccount(this)), FileDetailFragment.FTAG);\r
+ mWaitingToPreview = mCurrentFile;\r
+ }\r
+ } else {\r
+ transaction.replace(R.id.file_details_container, new FileDetailFragment(mCurrentFile, AccountUtils.getCurrentOwnCloudAccount(this)), FileDetailFragment.FTAG);\r
+ }\r
mCurrentFile = null;\r
+ \r
} else {\r
transaction.replace(R.id.file_details_container, new FileDetailFragment(null, null), FileDetailFragment.FTAG); // empty FileDetailFragment\r
}\r
@Override\r
public boolean onCreateOptionsMenu(Menu menu) {\r
MenuInflater inflater = getSherlock().getMenuInflater();\r
- inflater.inflate(R.menu.menu, menu);\r
+ inflater.inflate(R.menu.main_menu, menu);\r
\r
patchHiddenAccents(menu);\r
\r
public boolean onOptionsItemSelected(MenuItem item) {\r
boolean retval = true;\r
switch (item.getItemId()) {\r
- case R.id.createDirectoryItem: {\r
- //showDialog(DIALOG_CREATE_DIR);\r
+ case R.id.action_create_dir: {\r
- showDialog(DIALOG_CREATE_DIR);\r
+ EditNameDialog dialog = EditNameDialog.newInstance(getString(R.string.uploader_info_dirname), "", this);\r
+ dialog.show(getSupportFragmentManager(), "createdirdialog");\r
+ break;\r
}\r
- case R.id.startSync: {\r
+ case R.id.action_sync_account: {\r
startSynchronization();\r
break;\r
}\r
startActivity(settingsIntent);\r
break;\r
}\r
- case R.id.about_app : {\r
+ case R.id.action_about_app: {\r
showDialog(DIALOG_ABOUT_APP);\r
break;\r
}\r
\r
if (mDualPane) {\r
// Resets the FileDetailsFragment on Tablets so that it always displays\r
- FileDetailFragment fileDetails = (FileDetailFragment) getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);\r
- if (fileDetails != null && !fileDetails.isEmpty()) {\r
+ Fragment fileFragment = getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);\r
+ if (fileFragment != null && (fileFragment instanceof PreviewMediaFragment || !((FileDetailFragment) fileFragment).isEmpty())) {\r
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();\r
- transaction.remove(fileDetails);\r
- transaction.add(R.id.file_details_container, new FileDetailFragment(null, null), FileDetailFragment.FTAG);\r
+ transaction.replace(R.id.file_details_container, new FileDetailFragment(null, null), FileDetailFragment.FTAG); // empty FileDetailFragment \r
transaction.commit();\r
}\r
}\r
super.onSaveInstanceState(outState);\r
outState.putParcelable(FileDetailFragment.EXTRA_FILE, mCurrentDir);\r
if (mDualPane) {\r
- FileDetailFragment fragment = (FileDetailFragment) getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);\r
+ FileFragment fragment = (FileFragment) getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);\r
if (fragment != null) {\r
- OCFile file = fragment.getDisplayedFile();\r
+ OCFile file = fragment.getFile();\r
if (file != null) {\r
outState.putParcelable(FileDetailFragment.EXTRA_FILE, file);\r
}\r
}\r
}\r
+ outState.putParcelable(FileDetailActivity.KEY_WAITING_TO_PREVIEW, mWaitingToPreview);\r
Log.d(getClass().toString(), "onSaveInstanceState() end");\r
}\r
\r
@Override\r
- protected void onResume() {\r
+ public void onResume() {\r
Log.d(getClass().toString(), "onResume() start");\r
super.onResume();\r
\r
registerReceiver(mUploadFinishReceiver, uploadIntentFilter);\r
\r
// Listen for download messages\r
- IntentFilter downloadIntentFilter = new IntentFilter(FileDownloader.DOWNLOAD_FINISH_MESSAGE);\r
+ IntentFilter downloadIntentFilter = new IntentFilter(FileDownloader.DOWNLOAD_ADDED_MESSAGE);\r
+ downloadIntentFilter.addAction(FileDownloader.DOWNLOAD_FINISH_MESSAGE);\r
mDownloadFinishReceiver = new DownloadFinishReceiver();\r
registerReceiver(mDownloadFinishReceiver, downloadIntentFilter);\r
\r
\r
\r
@Override\r
- protected void onPause() {\r
+ public void onPause() {\r
Log.d(getClass().toString(), "onPause() start");\r
super.onPause();\r
if (mSyncBroadcastReceiver != null) {\r
break;\r
}\r
case DIALOG_CHOOSE_UPLOAD_SOURCE: {\r
- final String [] items = { getString(R.string.actionbar_upload_files), \r
- getString(R.string.actionbar_upload_from_apps) }; \r
+ final String[] items = { getString(R.string.actionbar_upload_files),\r
+ getString(R.string.actionbar_upload_from_apps), \r
+ getString(R.string.actionbar_failed_instant_upload) };\r
builder = new AlertDialog.Builder(this);\r
builder.setTitle(R.string.actionbar_upload);\r
builder.setItems(items, new DialogInterface.OnClickListener() {\r
public void onClick(DialogInterface dialog, int item) {\r
if (item == 0) {\r
- //if (!mDualPane) { \r
- Intent action = new Intent(FileDisplayActivity.this, UploadFilesActivity.class);\r
- action.putExtra(UploadFilesActivity.EXTRA_ACCOUNT, AccountUtils.getCurrentOwnCloudAccount(FileDisplayActivity.this));\r
- startActivityForResult(action, ACTION_SELECT_MULTIPLE_FILES);\r
- //} else {\r
- // TODO create and handle new fragment LocalFileListFragment\r
- //}\r
+ // if (!mDualPane) {\r
+ Intent action = new Intent(FileDisplayActivity.this, UploadFilesActivity.class);\r
+ action.putExtra(UploadFilesActivity.EXTRA_ACCOUNT,\r
+ AccountUtils.getCurrentOwnCloudAccount(FileDisplayActivity.this));\r
+ startActivityForResult(action, ACTION_SELECT_MULTIPLE_FILES);\r
+ // } else {\r
+ // TODO create and handle new fragment\r
+ // LocalFileListFragment\r
+ // }\r
} else if (item == 1) {\r
Intent action = new Intent(Intent.ACTION_GET_CONTENT);\r
- action = action.setType("*/*")\r
- .addCategory(Intent.CATEGORY_OPENABLE);\r
- startActivityForResult(\r
- Intent.createChooser(action, getString(R.string.upload_chooser_title)),\r
+ action = action.setType("*/*").addCategory(Intent.CATEGORY_OPENABLE);\r
+ startActivityForResult(Intent.createChooser(action, getString(R.string.upload_chooser_title)),\r
ACTION_SELECT_CONTENT_FROM_APPS);\r
+ } else if (item == 2) {\r
+ Account account = AccountUtils.getCurrentOwnCloudAccount(FileDisplayActivity.this);\r
+ Intent action = new Intent(FileDisplayActivity.this, InstantUploadActivity.class);\r
+ action.putExtra(FileUploader.KEY_ACCOUNT, account);\r
+ startActivity(action);\r
}\r
}\r
});\r
\r
\r
/**\r
- * Once the file download has finished -> update view\r
+ * Class waiting for broadcast events from the {@link FielDownloader} service.\r
+ * \r
+ * Updates the UI when a download is started or finished, provided that it is relevant for the\r
+ * current folder.\r
*/\r
private class DownloadFinishReceiver extends BroadcastReceiver {\r
@Override\r
public void onReceive(Context context, Intent intent) {\r
+ boolean sameAccount = isSameAccount(context, intent);\r
String downloadedRemotePath = intent.getStringExtra(FileDownloader.EXTRA_REMOTE_PATH);\r
- String accountName = intent.getStringExtra(FileDownloader.ACCOUNT_NAME);\r
- boolean sameAccount = accountName.equals(AccountUtils.getCurrentOwnCloudAccount(context).name);\r
- boolean isDescendant = (mCurrentDir != null) && (downloadedRemotePath != null) && (downloadedRemotePath.startsWith(mCurrentDir.getRemotePath()));\r
+ boolean isDescendant = isDescendant(downloadedRemotePath);\r
+ \r
if (sameAccount && isDescendant) {\r
- OCFileListFragment fileListFragment = (OCFileListFragment) getSupportFragmentManager().findFragmentById(R.id.fileList);\r
- if (fileListFragment != null) { \r
- fileListFragment.listDirectory();\r
+ updateLeftPanel();\r
+ if (mDualPane) {\r
+ updateRightPanel(intent.getAction(), downloadedRemotePath, intent.getBooleanExtra(FileDownloader.EXTRA_DOWNLOAD_RESULT, false));\r
}\r
}\r
+ \r
+ removeStickyBroadcast(intent);\r
+ }\r
+\r
+ private boolean isDescendant(String downloadedRemotePath) {\r
+ return (mCurrentDir != null && downloadedRemotePath != null && downloadedRemotePath.startsWith(mCurrentDir.getRemotePath()));\r
+ }\r
+\r
+ private boolean isSameAccount(Context context, Intent intent) {\r
+ String accountName = intent.getStringExtra(FileDownloader.ACCOUNT_NAME);\r
+ return (accountName != null && accountName.equals(AccountUtils.getCurrentOwnCloudAccount(context).name));\r
}\r
}\r
\r
\r
- \r
- \r
+ protected void updateLeftPanel() {\r
+ OCFileListFragment fileListFragment = (OCFileListFragment) getSupportFragmentManager().findFragmentById(R.id.fileList);\r
+ if (fileListFragment != null) { \r
+ fileListFragment.listDirectory();\r
+ }\r
+ }\r
+\r
+ protected void updateRightPanel(String downloadEvent, String downloadedRemotePath, boolean success) {\r
+ Fragment fragment = getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);\r
+ boolean waitedPreview = (mWaitingToPreview != null && mWaitingToPreview.getRemotePath().equals(downloadedRemotePath));\r
+ if (fragment != null && fragment instanceof FileDetailFragment) {\r
+ FileDetailFragment detailsFragment = (FileDetailFragment) fragment;\r
+ OCFile fileInFragment = detailsFragment.getFile();\r
+ if (fileInFragment != null && !downloadedRemotePath.equals(fileInFragment.getRemotePath())) {\r
+ // the user browsed to other file ; forget the automatic preview \r
+ mWaitingToPreview = null;\r
+ \r
+ } else if (downloadEvent.equals(FileDownloader.DOWNLOAD_ADDED_MESSAGE)) {\r
+ // grant that the right panel updates the progress bar\r
+ detailsFragment.listenForTransferProgress();\r
+ detailsFragment.updateFileDetails(true, false);\r
+ \r
+ } else if (downloadEvent.equals(FileDownloader.DOWNLOAD_FINISH_MESSAGE)) {\r
+ // update the right panel \r
+ if (success && waitedPreview) {\r
+ mWaitingToPreview = mStorageManager.getFileById(mWaitingToPreview.getFileId()); // update the file from database, for the local storage path\r
+ FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();\r
+ transaction.replace(R.id.file_details_container, new PreviewMediaFragment(mWaitingToPreview, AccountUtils.getCurrentOwnCloudAccount(this)), FileDetailFragment.FTAG);\r
+ transaction.commit();\r
+ mWaitingToPreview = null;\r
+ \r
+ } else {\r
+ detailsFragment.updateFileDetails(false, (success));\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+\r
/**\r
* {@inheritDoc}\r
*/\r
return mStorageManager;\r
}\r
\r
- \r
+\r
/**\r
* {@inheritDoc}\r
*/\r
\r
if (mDualPane) {\r
// Resets the FileDetailsFragment on Tablets so that it always displays\r
- FileDetailFragment fileDetails = (FileDetailFragment) getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);\r
- if (fileDetails != null && !fileDetails.isEmpty()) {\r
+ Fragment fileFragment = getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);\r
+ if (fileFragment != null && (fileFragment instanceof PreviewMediaFragment || !((FileDetailFragment) fileFragment).isEmpty())) {\r
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();\r
- transaction.remove(fileDetails);\r
- transaction.add(R.id.file_details_container, new FileDetailFragment(null, null), FileDetailFragment.FTAG);\r
+ transaction.replace(R.id.file_details_container, new FileDetailFragment(null, null), FileDetailFragment.FTAG); // empty FileDetailFragment \r
transaction.commit();\r
}\r
}\r
*/\r
@Override\r
public void onFileClick(OCFile file) {\r
- \r
- // If we are on a large device -> update fragment\r
+ if (file != null && PreviewImageFragment.canBePreviewed(file)) {\r
+ // preview image - it handles the download, if needed\r
+ startPreviewImage(file);\r
+ \r
+ } else if (file != null && PreviewMediaFragment.canBePreviewed(file)) {\r
+ if (file.isDown()) {\r
+ // general preview\r
+ startMediaPreview(file);\r
+ \r
+ } else {\r
+ // automatic download, preview on finish\r
+ startDownloadForPreview(file);\r
+ \r
+ }\r
+ } else {\r
+ // details view\r
+ startDetails(file);\r
+ }\r
+ }\r
+\r
+ private void startPreviewImage(OCFile file) {\r
+ Intent showDetailsIntent = new Intent(this, PreviewImageActivity.class);\r
+ showDetailsIntent.putExtra(FileDetailFragment.EXTRA_FILE, file);\r
+ showDetailsIntent.putExtra(FileDetailFragment.EXTRA_ACCOUNT, AccountUtils.getCurrentOwnCloudAccount(this));\r
+ startActivity(showDetailsIntent);\r
+ }\r
+ \r
+ private void startMediaPreview(OCFile file) {\r
if (mDualPane) {\r
- // buttons in the details view are problematic when trying to reuse an existing fragment; create always a new one solves some of them, BUT no all; downloads are 'dangerous'\r
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();\r
- transaction.replace(R.id.file_details_container, new FileDetailFragment(file, AccountUtils.getCurrentOwnCloudAccount(this)), FileDetailFragment.FTAG);\r
- transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);\r
+ transaction.replace(R.id.file_details_container, new PreviewMediaFragment(file, AccountUtils.getCurrentOwnCloudAccount(this)), FileDetailFragment.FTAG);\r
transaction.commit();\r
\r
- } else { // small or medium screen device -> new Activity\r
+ } else {\r
Intent showDetailsIntent = new Intent(this, FileDetailActivity.class);\r
showDetailsIntent.putExtra(FileDetailFragment.EXTRA_FILE, file);\r
showDetailsIntent.putExtra(FileDetailFragment.EXTRA_ACCOUNT, AccountUtils.getCurrentOwnCloudAccount(this));\r
}\r
}\r
\r
+ private void startDownloadForPreview(OCFile file) {\r
+ if (mDualPane) {\r
+ FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();\r
+ transaction.replace(R.id.file_details_container, new FileDetailFragment(file, AccountUtils.getCurrentOwnCloudAccount(this)), FileDetailFragment.FTAG);\r
+ transaction.commit();\r
+ mWaitingToPreview = file;\r
+ requestForDownload();\r
+ \r
+ } else {\r
+ Intent showDetailsIntent = new Intent(this, FileDetailActivity.class);\r
+ showDetailsIntent.putExtra(FileDetailFragment.EXTRA_FILE, file);\r
+ showDetailsIntent.putExtra(FileDetailFragment.EXTRA_ACCOUNT, AccountUtils.getCurrentOwnCloudAccount(this));\r
+ startActivity(showDetailsIntent);\r
+ }\r
+ }\r
+\r
\r
+ private void startDetails(OCFile file) {\r
+ if (mDualPane && !file.isImage()) {\r
+ FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();\r
+ transaction.replace(R.id.file_details_container, new FileDetailFragment(file, AccountUtils.getCurrentOwnCloudAccount(this)), FileDetailFragment.FTAG);\r
+ transaction.commit();\r
+ } else {\r
+ Intent showDetailsIntent = new Intent(this, FileDetailActivity.class);\r
+ showDetailsIntent.putExtra(FileDetailFragment.EXTRA_FILE, file);\r
+ showDetailsIntent.putExtra(FileDetailFragment.EXTRA_ACCOUNT, AccountUtils.getCurrentOwnCloudAccount(this));\r
+ startActivity(showDetailsIntent);\r
+ }\r
+ }\r
+\r
+\r
/**\r
* {@inheritDoc}\r
*/\r
if (component.equals(new ComponentName(FileDisplayActivity.this, FileDownloader.class))) {\r
Log.d(TAG, "Download service connected");\r
mDownloaderBinder = (FileDownloaderBinder) service;\r
+ if (mWaitingToPreview != null) {\r
+ requestForDownload();\r
+ }\r
+ \r
} else if (component.equals(new ComponentName(FileDisplayActivity.this, FileUploader.class))) {\r
Log.d(TAG, "Upload service connected");\r
mUploaderBinder = (FileUploaderBinder) service;\r
if (mFileList != null)\r
mFileList.listDirectory();\r
if (mDualPane) {\r
- FileDetailFragment fragment = (FileDetailFragment) getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);\r
- if (fragment != null)\r
- fragment.updateFileDetails(false);\r
+ Fragment fragment = getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);\r
+ if (fragment != null && fragment instanceof FileDetailFragment) {\r
+ FileDetailFragment detailFragment = (FileDetailFragment)fragment;\r
+ detailFragment.listenForTransferProgress();\r
+ detailFragment.updateFileDetails(false, false);\r
+ }\r
}\r
}\r
\r
msg.show();\r
OCFile removedFile = operation.getFile();\r
if (mDualPane) {\r
- FileDetailFragment details = (FileDetailFragment) getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);\r
- if (details != null && removedFile.equals(details.getDisplayedFile()) ) {\r
+ FileFragment details = (FileFragment) getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);\r
+ if (details != null && removedFile.equals(details.getFile())) {\r
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();\r
transaction.replace(R.id.file_details_container, new FileDetailFragment(null, null)); // empty FileDetailFragment\r
transaction.commit();\r
OCFile renamedFile = operation.getFile();\r
if (result.isSuccess()) {\r
if (mDualPane) {\r
- FileDetailFragment details = (FileDetailFragment) getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);\r
- if (details != null && renamedFile.equals(details.getDisplayedFile()) ) {\r
- details.updateFileDetails(renamedFile, AccountUtils.getCurrentOwnCloudAccount(this));\r
+ FileFragment details = (FileFragment) getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);\r
+ if (details != null && details instanceof FileDetailFragment && renamedFile.equals(details.getFile()) ) {\r
+ ((FileDetailFragment) details).updateFileDetails(renamedFile, AccountUtils.getCurrentOwnCloudAccount(this));\r
}\r
}\r
if (mStorageManager.getFileById(renamedFile.getParentId()).equals(mCurrentDir)) {\r
fileListFragment.listDirectory();\r
}*/\r
if (mDualPane) {\r
- FileDetailFragment details = (FileDetailFragment) getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);\r
- if (details != null && file.equals(details.getDisplayedFile()) ) {\r
+ FileFragment details = (FileFragment) getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);\r
+ if (details != null && details instanceof FileDetailFragment && file.equals(details.getFile()) ) {\r
if (downloading || uploading) {\r
- details.updateFileDetails(file, AccountUtils.getCurrentOwnCloudAccount(this));\r
+ ((FileDetailFragment)details).updateFileDetails(file, AccountUtils.getCurrentOwnCloudAccount(this));\r
} else {\r
- details.updateFileDetails(downloading || uploading);\r
+ ((FileDetailFragment)details).updateFileDetails(false, true);\r
}\r
}\r
}\r
\r
\r
@Override\r
+ public void showFragmentWithDetails(OCFile file) {\r
+ if (mDualPane) {\r
+ FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();\r
+ transaction.replace(R.id.file_details_container, new FileDetailFragment(file, AccountUtils.getCurrentOwnCloudAccount(this)), FileDetailFragment.FTAG); \r
+ transaction.commit();\r
+ \r
+ } else {\r
+ Intent showDetailsIntent = new Intent(this, FileDetailActivity.class);\r
+ showDetailsIntent.putExtra(FileDetailFragment.EXTRA_FILE, file);\r
+ showDetailsIntent.putExtra(FileDetailFragment.EXTRA_ACCOUNT, AccountUtils.getCurrentOwnCloudAccount(this));\r
+ showDetailsIntent.putExtra(FileDetailActivity.EXTRA_MODE, FileDetailActivity.MODE_DETAILS);\r
+ startActivity(showDetailsIntent);\r
+ }\r
+ }\r
+\r
+ public void onDismiss(EditNameDialog dialog) {\r
+ //dialog.dismiss();\r
+ if (dialog.getResult()) {\r
+ String newDirectoryName = dialog.getNewFilename().trim();\r
+ Log.d(TAG, "'create directory' dialog dismissed with new name " + newDirectoryName);\r
+ if (newDirectoryName.length() > 0) {\r
+ String path;\r
+ if (mCurrentDir == null) {\r
+ // this is just a patch; we should ensure that mCurrentDir never is null\r
+ if (!mStorageManager.fileExists(OCFile.PATH_SEPARATOR)) {\r
+ OCFile file = new OCFile(OCFile.PATH_SEPARATOR);\r
+ mStorageManager.saveFile(file);\r
+ }\r
+ mCurrentDir = mStorageManager.getFileByPath(OCFile.PATH_SEPARATOR);\r
+ }\r
+ path = FileDisplayActivity.this.mCurrentDir.getRemotePath();\r
+ \r
+ // Create directory\r
+ path += newDirectoryName + OCFile.PATH_SEPARATOR;\r
+ Thread thread = new Thread(new DirectoryCreator(path, AccountUtils.getCurrentOwnCloudAccount(FileDisplayActivity.this), new Handler()));\r
+ thread.start();\r
+ \r
+ showDialog(DIALOG_SHORT_WAIT);\r
+ }\r
+ }\r
+ }\r
\r
+ private void requestForDownload() {\r
+ Account account = AccountUtils.getCurrentOwnCloudAccount(this);\r
+ if (!mDownloaderBinder.isDownloading(account, mWaitingToPreview)) {\r
+ Intent i = new Intent(this, FileDownloader.class);\r
+ i.putExtra(FileDownloader.EXTRA_ACCOUNT, account);\r
+ i.putExtra(FileDownloader.EXTRA_FILE, mWaitingToPreview);\r
+ startService(i);\r
+ }\r
+ }\r
+\r
+ \r
}\r
+