Merge branch 'bug_hunting' into feature_previews
authorDavid A. Velasco <dvelasco@solidgear.es>
Thu, 4 Apr 2013 14:49:04 +0000 (16:49 +0200)
committerDavid A. Velasco <dvelasco@solidgear.es>
Thu, 4 Apr 2013 14:49:04 +0000 (16:49 +0200)
Conflicts:
src/com/owncloud/android/ui/activity/FileDisplayActivity.java

1  2 
AndroidManifest.xml
res/values-de-rDE/strings.xml
res/values-de/strings.xml
res/values/strings.xml
src/com/owncloud/android/ui/activity/FileDisplayActivity.java

diff --combined AndroidManifest.xml
@@@ -19,8 -19,8 +19,8 @@@
    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
@@@ -35,8 -35,7 +35,8 @@@
      <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
@@@ -59,9 -58,6 +59,9 @@@
          </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
@@@ -53,6 -53,7 +53,7 @@@
    <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>
@@@ -82,8 -83,6 +83,8 @@@
    <string name="common_save_exit">Speichern &amp; Schließen</string>
    <string name="common_exit">%1$s verlassen</string>
    <string name="common_error">Fehler</string>
 +  <string name="common_loading">Wird geladen &#8230;</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>
@@@ -53,6 -53,7 +53,7 @@@
    <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>
diff --combined res/values/strings.xml
@@@ -1,8 -1,6 +1,7 @@@
  <?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>
@@@ -15,7 -13,9 +14,7 @@@
      <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>
@@@ -42,6 -40,7 +40,6 @@@
      <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>
@@@ -74,7 -74,7 +73,7 @@@
      <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 &amp; Exit</string>
      <string name="common_exit">Leave %1$s</string>
      <string name="common_error">Error</string>
 +    <string name="common_loading">Loading &#8230;</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 &#8230;</string>
      <string name="uploader_info_dirname">Directory name</string>
 -      <string name="uploader_upload_in_progress_ticker">Uploading &#8230;</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 &#8230;</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>
@@@ -4,7 -4,7 +4,7 @@@
   *\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
@@@ -49,7 -49,6 +49,7 @@@ import android.os.Handler
  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
@@@ -86,14 -85,12 +86,16 @@@ import com.owncloud.android.operations.
  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
 +