Merge remote-tracking branch 'remotes/upstream/master' into beta
authortobiasKaminsky <tobias@kaminsky.me>
Fri, 27 Nov 2015 16:37:34 +0000 (17:37 +0100)
committertobiasKaminsky <tobias@kaminsky.me>
Fri, 27 Nov 2015 16:37:34 +0000 (17:37 +0100)
61 files changed:
1  2 
build.gradle
owncloud-android-library
res/menu/file_actions_menu.xml
res/values-ar/strings.xml
res/values-az/strings.xml
res/values-bg-rBG/strings.xml
res/values-bn-rBD/strings.xml
res/values-ca/strings.xml
res/values-cs-rCZ/strings.xml
res/values-da/strings.xml
res/values-de-rDE/strings.xml
res/values-de/strings.xml
res/values-el/strings.xml
res/values-en-rGB/strings.xml
res/values-eo/strings.xml
res/values-es-rAR/strings.xml
res/values-es/strings.xml
res/values-et-rEE/strings.xml
res/values-eu/strings.xml
res/values-fi-rFI/strings.xml
res/values-fr/strings.xml
res/values-gl/strings.xml
res/values-he/strings.xml
res/values-hu-rHU/strings.xml
res/values-id/strings.xml
res/values-it/strings.xml
res/values-ja-rJP/strings.xml
res/values-ko/strings.xml
res/values-lb/strings.xml
res/values-lt-rLT/strings.xml
res/values-mk/strings.xml
res/values-nb-rNO/strings.xml
res/values-nl/strings.xml
res/values-oc/strings.xml
res/values-pl/strings.xml
res/values-pt-rBR/strings.xml
res/values-pt-rPT/strings.xml
res/values-ro/strings.xml
res/values-ru/strings.xml
res/values-sk-rSK/strings.xml
res/values-sl/strings.xml
res/values-sr/strings.xml
res/values-sv/strings.xml
res/values-th-rTH/strings.xml
res/values-tr/strings.xml
res/values-uk/strings.xml
res/values-zh-rCN/strings.xml
res/values-zh-rTW/strings.xml
res/values/strings.xml
src/com/owncloud/android/datamodel/FileDataStorageManager.java
src/com/owncloud/android/files/FileMenuFilter.java
src/com/owncloud/android/files/FileOperationsHelper.java
src/com/owncloud/android/operations/RefreshFolderOperation.java
src/com/owncloud/android/ui/activity/FileActivity.java
src/com/owncloud/android/ui/activity/FileDisplayActivity.java
src/com/owncloud/android/ui/fragment/FileDetailFragment.java
src/com/owncloud/android/ui/fragment/OCFileListFragment.java
src/com/owncloud/android/ui/preview/PreviewImageActivity.java
src/com/owncloud/android/ui/preview/PreviewImageFragment.java
src/com/owncloud/android/ui/preview/PreviewMediaFragment.java
src/com/owncloud/android/ui/preview/PreviewTextFragment.java

diff --combined build.gradle
@@@ -3,12 -3,13 +3,12 @@@ buildscript 
          mavenCentral()
      }
      dependencies {
 -        classpath 'com.android.tools.build:gradle:1.2.3'
 +        classpath 'com.android.tools.build:gradle:1.3.0'
      }
  }
  
  apply plugin: 'com.android.application'
  
 -
  repositories {
      mavenCentral()
  
@@@ -23,19 -24,11 +23,19 @@@ dependencies 
      compile 'com.android.support:support-v4:22.2.1'
      compile 'com.jakewharton:disklrucache:2.0.2'
      compile 'com.android.support:appcompat-v7:22.2.1'
 +    compile 'com.getbase:floatingactionbutton:1.10.1'
  }
  
  android {
      compileSdkVersion 22
      buildToolsVersion "22.0.1"
 +
 +    defaultConfig {
 +        applicationId "com.owncloud.android.beta"
 +        versionCode 20151125
 +        versionName "ownCloud beta"
 +    }
 +
      sourceSets {
          main {
              manifest.srcFile 'AndroidManifest.xml'
      packagingOptions {
          exclude 'META-INF/LICENSE.txt'
      }
 -}
 -
 -
 -
  
-             storeFile file("../beta.jks")
-             storePassword KSTOREPWD
-             keyAlias "beta"
-             keyPassword KSTOREPWD
 +    signingConfigs {
 +        release {
++            storeFile file(RELEASE_STORE_FILE)
++            storePassword RELEASE_STORE_PASSWORD
++            keyAlias RELEASE_KEY_ALIAS
++            keyPassword RELEASE_KEY_PASSWORD
 +        }
 +    }
  
 +     buildTypes {
 +        release {
 +            signingConfig signingConfigs.release
 +        }
 +    }
  
 +}
diff --combined owncloud-android-library
@@@ -1,1 -1,1 +1,1 @@@
- Subproject commit 2d9ab65553e8f4b85aa10cb636921df9976e9878
 -Subproject commit 9e5c44ddb58970f1bbdf6723145a47379bdbccba
++Subproject commit 8966dbcee044cec726633fdfd208ea106cf176c0
@@@ -1,5 -1,4 +1,5 @@@
 -<?xml version="1.0" encoding="utf-8"?><!--
 +<?xml version="1.0" encoding="utf-8"?>
 +<!--
    ownCloud Android client application
  
    Copyright (C) 2012  Bartek Przybylski
  
      <item
          android:id="@+id/action_share_file"
-         android:title="@string/action_share_file"
+         android:title="@string/action_share"
          android:icon="@android:drawable/ic_menu_share"
          android:orderInCategory="1" />
 -
 +    <item
 +        android:id="@+id/action_stream_file"
 +        android:title="@string/action_stream_file"
 +        android:icon="@android:drawable/ic_menu_view"
 +        android:orderInCategory="1" />
      <item
-         android:id="@+id/action_unshare_file"
-         android:title="@string/action_unshare_file"
-         android:icon="@android:drawable/ic_menu_share"
-         android:orderInCategory="1" />
-     <item
-         android:id="@+id/action_share_with_users"
-         android:title="@string/action_share_with_users"
-         android:orderInCategory="1" />
-     <item
          android:id="@+id/action_open_file_with"
          android:title="@string/actionbar_open_with"
          android:icon="@android:drawable/ic_menu_set_as"
          android:icon="@android:drawable/ic_menu_set_as"
          android:orderInCategory="1" />
      <item
 +        android:id="@+id/action_set_as_wallpaper"
 +        android:title="@string/set_picture_as"
 +        android:icon="@android:drawable/ic_menu_set_as"
 +        android:orderInCategory="1" />
 +    <item
          android:id="@+id/action_see_details"
          android:title="@string/actionbar_see_details"
          android:icon="@android:drawable/ic_menu_info_details"
@@@ -78,8 -78,6 +78,6 @@@
    <string name="filedetails_modified">عُدل في :</string>
    <string name="filedetails_download">تحميل</string>
    <string name="filedetails_renamed_in_upload_msg">تم تغيير اسم الملف إلى  %1$s أثناء الرفع</string>
-   <string name="action_share_file">شارك الرابط</string>
-   <string name="action_unshare_file">الغاء مشاركة الرابط</string>
    <string name="common_yes">نعم</string>
    <string name="common_no">لا</string>
    <string name="common_ok">تم</string>
    <string name="favorite">المفضلة</string>
    <string name="common_rename">إعادة التسمية</string>
    <string name="common_remove">حذف</string>
 -  <string name="confirmation_remove_alert">هل تريد حقاً حذف %1$s ؟</string>
 +  <string name="confirmation_remove_file_alert">هل تريد حقاً حذف %1$s ؟</string>
    <string name="confirmation_remove_folder_alert">هل ترغب في حذف %1$s و جهات الإتصال التابعة له؟ </string>
    <string name="confirmation_remove_local">محليا فقط</string>
    <string name="confirmation_remove_folder_local">محليا فقط</string>
@@@ -73,8 -73,6 +73,6 @@@
    <string name="filedetails_modified">Dəyişdirildi:</string>
    <string name="filedetails_download">Yüklə</string>
    <string name="filedetails_renamed_in_upload_msg">Yüklənmə müddətində fayl buna %1$s yeniləndi</string>
-   <string name="action_share_file">Linki yayımla</string>
-   <string name="action_unshare_file">Link yayımlanmasını dayandır</string>
    <string name="common_yes">Bəli</string>
    <string name="common_no">Xeyir</string>
    <string name="common_ok">Oldu</string>
@@@ -181,7 -179,7 +179,7 @@@ Aşağıda göstərilən %5$s-də olan 
    <string name="favorite">İstəkli</string>
    <string name="common_rename">Adı dəyiş</string>
    <string name="common_remove">Sil</string>
 -  <string name="confirmation_remove_alert">Siz həqiqətən %1$s silmək istəyirsiniz?</string>
 +  <string name="confirmation_remove_file_alert">Siz həqiqətən %1$s silmək istəyirsiniz?</string>
    <string name="confirmation_remove_folder_alert">Siz həqiqətəndə %1$s və onun kontentini silmək istəyirsiniz?</string>
    <string name="confirmation_remove_local">Yalnız daxili</string>
    <string name="confirmation_remove_folder_local">Yalnız daxili</string>
@@@ -80,8 -80,6 +80,6 @@@
    <string name="filedetails_download">Изтегляне</string>
    <string name="filedetails_renamed_in_upload_msg">Файлът беше преименуван на %1$s по време на качването.</string>
    <string name="list_layout">Списък с изгледи</string>
-   <string name="action_share_file">Връзка за споделяне</string>
-   <string name="action_unshare_file">Премахване връзка за споделяне</string>
    <string name="common_yes">Да</string>
    <string name="common_no">Не</string>
    <string name="common_ok">ОК</string>
    <string name="favorite">Любими</string>
    <string name="common_rename">Преименуване</string>
    <string name="common_remove">Премахване</string>
 -  <string name="confirmation_remove_alert">Наистина ли искате да изтриете %1$s ?</string>
 +  <string name="confirmation_remove_file_alert">Наистина ли искате да изтриете %1$s ?</string>
    <string name="confirmation_remove_folder_alert">Наистина ли искате да премахнете %1$s и съдържанието му?</string>
    <string name="confirmation_remove_local">Само локално</string>
    <string name="confirmation_remove_folder_local">Само локално</string>
@@@ -64,8 -64,6 +64,6 @@@
    <string name="filedetails_modified">পরিবর্তিতঃ</string>
    <string name="filedetails_download">ডাউনলোড</string>
    <string name="filedetails_renamed_in_upload_msg">আপলোডের সময় ফাইলের পূণঃনামকরণ করা হয়েছে %1$s</string>
-   <string name="action_share_file">লিংক ভাগাভাগি করেন</string>
-   <string name="action_unshare_file">লিংক ছিনন করেন</string>
    <string name="common_yes">হ্যাঁ</string>
    <string name="common_no">না</string>
    <string name="common_ok">তথাস্তু</string>
    <string name="favorite">প্রিয়জন</string>
    <string name="common_rename">পূনঃনামকরণ</string>
    <string name="common_remove">অপসারণ</string>
 -  <string name="confirmation_remove_alert">আপনি কি সত্যিই %1$s অপসারণ করতে চান?</string>
 +  <string name="confirmation_remove_file_alert">আপনি কি সত্যিই %1$s অপসারণ করতে চান?</string>
    <string name="confirmation_remove_folder_alert">আপনি কি সত্যিই %1$s এবং এর কনটেন্ট অপসারণ করতে চান?</string>
    <string name="confirmation_remove_local">শুধুমাত্র লোকাল</string>
    <string name="confirmation_remove_folder_local">শুধুমাত্র লোকাল</string>
@@@ -73,8 -73,6 +73,6 @@@
    <string name="filedetails_modified">Modificat:</string>
    <string name="filedetails_download">Baixa</string>
    <string name="filedetails_renamed_in_upload_msg">L\'arxiu s\'ha canviat de nom a %1$s durant la càrrega</string>
-   <string name="action_share_file">Enllaç de compartició</string>
-   <string name="action_unshare_file">Deixa de compartir l\'enllaç</string>
    <string name="common_yes">Sí</string>
    <string name="common_no">No</string>
    <string name="common_ok">D\'acord</string>
    <string name="favorite">Preferits</string>
    <string name="common_rename">Reanomena</string>
    <string name="common_remove">Elimina</string>
 -  <string name="confirmation_remove_alert">Esteu segur que voleu eliminar %1$s?</string>
 +  <string name="confirmation_remove_file_alert">Esteu segur que voleu eliminar %1$s?</string>
    <string name="confirmation_remove_folder_alert">Estàs segur que vols esborrar %1$s i els seus continguts?</string>
    <string name="confirmation_remove_local">Només local</string>
    <string name="confirmation_remove_folder_local">Només local</string>
@@@ -82,9 -82,6 +82,6 @@@
    <string name="filedetails_sync_file">Synchronizovat</string>
    <string name="filedetails_renamed_in_upload_msg">Soubor byl v průběhu odesílání přejmenován na %1$s</string>
    <string name="list_layout">Náhled seznamu</string>
-   <string name="action_share_file">Sdílet odkaz</string>
-   <string name="action_unshare_file">Zrušit sdílení odkazu</string>
-   <string name="action_share_with_users">Sdílet s uživateli</string>
    <string name="common_yes">Ano</string>
    <string name="common_no">Ne</string>
    <string name="common_ok">OK</string>
    <string name="unfavorite">Odebrat z oblíbených</string>
    <string name="common_rename">Přejmenovat</string>
    <string name="common_remove">Odstranit</string>
 -  <string name="confirmation_remove_alert">Opravdu chcete odstranit %1$s ?</string>
 +  <string name="confirmation_remove_file_alert">Opravdu chcete odstranit %1$s ?</string>
    <string name="confirmation_remove_folder_alert">Opravdu chcete odstranit %1$s a jeho obsah?</string>
    <string name="confirmation_remove_local">Pouze místní</string>
    <string name="confirmation_remove_folder_local">Pouze místní</string>
 -  <string name="confirmation_remove_remote">Ze serveru</string>
 +  <string name="confirmation_remove_file_remote">Ze serveru</string>
    <string name="confirmation_remove_remote_and_local">Vzdálený &amp; místní</string>
    <string name="remove_success_msg">Úspěšně odstraněno</string>
    <string name="remove_fail_msg">Odstranění nelze dokončit</string>
@@@ -336,7 -333,6 +333,6 @@@ správce systému.</string
    <string name="file_list__footer__files_and_folder">%1$d soubory(ů), 1 adresář</string>
    <string name="file_list__footer__files_and_folders">%1$d soubory(ů), %2$d adresáře(ů)</string>
    <string name="share_dialog_title">Sdílení</string>
-   <string name="share_with_user_section_title">Sdílet s uživateli a skupinami</string>
    <string name="share_no_users">Zatím nebyla s uživateli sdílena žádná data</string>
    <string name="share_add_user_or_group">Přidat uživatele nebo skupinu</string>
    <string name="share_search">Hledat</string>
@@@ -80,8 -80,6 +80,6 @@@
    <string name="filedetails_download">Hent</string>
    <string name="filedetails_renamed_in_upload_msg">Filen blev omdøbt til %1$s under upload</string>
    <string name="list_layout">Listevisning</string>
-   <string name="action_share_file">Del link</string>
-   <string name="action_unshare_file">Ophæv deling</string>
    <string name="common_yes">Ja</string>
    <string name="common_no">Nej</string>
    <string name="common_ok">OK</string>
    <string name="unfavorite">Fjern markering som foretrukket</string>
    <string name="common_rename">Omdøb</string>
    <string name="common_remove">Fjern</string>
 -  <string name="confirmation_remove_alert">Er du sikker på at du vil fjerne %1$s ?</string>
 +  <string name="confirmation_remove_file_alert">Er du sikker på at du vil fjerne %1$s ?</string>
    <string name="confirmation_remove_folder_alert">Ønsker du virkelig at slette %1$s og dets indhold?</string>
    <string name="confirmation_remove_local">Kun lokal</string>
    <string name="confirmation_remove_folder_local">Kun lokal</string>
 -  <string name="confirmation_remove_remote">Fra server</string>
 +  <string name="confirmation_remove_file_remote">Fra server</string>
    <string name="confirmation_remove_remote_and_local">Fjernbeliggende og lokalt</string>
    <string name="remove_success_msg">Vellykket fjernelse</string>
    <string name="remove_fail_msg">Fjernelse kunne ikke fuldføres</string>
@@@ -80,8 -80,6 +80,6 @@@
    <string name="filedetails_download">Herunterladen</string>
    <string name="filedetails_renamed_in_upload_msg">Datei wurde wärend des Uploads zu %1$s umbenannt</string>
    <string name="list_layout">Listen-Layout</string>
-   <string name="action_share_file">Link teilen</string>
-   <string name="action_unshare_file">Link nicht mehr teilen</string>
    <string name="common_yes">Ja</string>
    <string name="common_no">Nein</string>
    <string name="common_ok">OK</string>
    <string name="unfavorite">Nicht mehr favorisieren</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="confirmation_remove_file_alert">Möchten Sie %1$s wirklich löschen?</string>
    <string name="confirmation_remove_folder_alert">Möchten Sie wirklich %1$s und dessen Inhalte entfernen?</string>
    <string name="confirmation_remove_local">Nur lokal</string>
    <string name="confirmation_remove_folder_local">Nur lokal</string>
@@@ -81,8 -81,6 +81,6 @@@
    <string name="filedetails_download">Herunterladen</string>
    <string name="filedetails_renamed_in_upload_msg">Datei wurde wärend des Uploads zu %1$s umbenannt</string>
    <string name="list_layout">Listen-Layout</string>
-   <string name="action_share_file">Link teilen</string>
-   <string name="action_unshare_file">Link nicht mehr freigeben</string>
    <string name="common_yes">Ja</string>
    <string name="common_no">Nein</string>
    <string name="common_ok">OK</string>
    <string name="unfavorite">Favorit entfernen</string>
    <string name="common_rename">Umbenennen</string>
    <string name="common_remove">Löschen</string>
 -  <string name="confirmation_remove_alert">Möchtest Du %1$s wirklich löschen?</string>
 +  <string name="confirmation_remove_file_alert">Möchtest Du %1$s wirklich löschen?</string>
    <string name="confirmation_remove_folder_alert">Möchtest Du wirklich %1$s und dessen Inhalte entfernen?</string>
    <string name="confirmation_remove_local">Nur lokal</string>
    <string name="confirmation_remove_folder_local">Nur lokal</string>
    <string name="file_list__footer__files_and_folder">%1$d Dateien, 1 Ordner</string>
    <string name="file_list__footer__files_and_folders">%1$d Dateien, %2$d Ordner</string>
    <string name="share_dialog_title">Teilen</string>
+   <string name="share_no_users">Es wurden noch keine Dateien mit Benutzern geteilt</string>
+   <string name="share_add_user_or_group">Benutzer oder Gruppe hinzufügen</string>
    <string name="share_search">Suche</string>
  </resources>
@@@ -82,9 -82,6 +82,6 @@@
    <string name="filedetails_sync_file">Συγχρονισμός</string>
    <string name="filedetails_renamed_in_upload_msg">Το αρχείο μετονομάστηκε σε %1$s κατά τη μεταφόρτωση</string>
    <string name="list_layout">Διάταξη Λίστας</string>
-   <string name="action_share_file">Διαμοιρασμός συνδέσμου</string>
-   <string name="action_unshare_file">Ακύρωση διαμοιρασμού συνδέσμου</string>
-   <string name="action_share_with_users">Διαμοιρασμός με χρήστες</string>
    <string name="common_yes">Ναι</string>
    <string name="common_no">Όχι</string>
    <string name="common_ok">ΟΚ</string>
    <string name="unfavorite">Κατάργηση από τα αγαπημένα</string>
    <string name="common_rename">Μετονομασία</string>
    <string name="common_remove">Αφαίρεση</string>
 -  <string name="confirmation_remove_alert">Θέλετε στ\' αλήθεια να αφαιρέσετε το  %1$s;</string>
 +  <string name="confirmation_remove_file_alert">Θέλετε στ\' αλήθεια να αφαιρέσετε το  %1$s;</string>
    <string name="confirmation_remove_folder_alert">Θέλετε στ\' αλήθεια να διαγράψετε το %1$s και τα περιεχόμενά του;</string>
    <string name="confirmation_remove_local">Μόνο τοπικά</string>
    <string name="confirmation_remove_folder_local">Μόνο τοπικά</string>
 -  <string name="confirmation_remove_remote">Από το διακομιστή</string>
 +  <string name="confirmation_remove_file_remote">Από το διακομιστή</string>
    <string name="confirmation_remove_remote_and_local">Απομακρυσμένα &amp; τοπικά</string>
    <string name="remove_success_msg">Αφαίρεση επιτυχής</string>
    <string name="remove_fail_msg">Η αφαίρεση απέτυχε</string>
    <string name="file_list__footer__files_and_folder">%1$d αρχεία, 1 φάκελος</string>
    <string name="file_list__footer__files_and_folders">%1$d αρχεία, %2$d φάκελοι</string>
    <string name="share_dialog_title">Διαμοιρασμός</string>
-   <string name="share_with_user_section_title">Διαμοιρασμός με χρήστες και ομάδες</string>
    <string name="share_no_users">Δεν έχουν διαμοιραστεί ακόμα δεδομένα με τους χρήστες</string>
    <string name="share_add_user_or_group">Προσθήκη χρήστη ή ομάδας</string>
    <string name="share_search">Αναζήτηση</string>
@@@ -74,8 -74,6 +74,6 @@@
    <string name="filedetails_modified">Modified:</string>
    <string name="filedetails_download">Download</string>
    <string name="filedetails_renamed_in_upload_msg">File was renamed to %1$s during upload</string>
-   <string name="action_share_file">Share link</string>
-   <string name="action_unshare_file">Unshare link</string>
    <string name="common_yes">Yes</string>
    <string name="common_no">No</string>
    <string name="common_ok">OK</string>
    <string name="unfavorite">Unfavourite</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_file_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 only</string>
@@@ -48,8 -48,6 +48,6 @@@
    <string name="filedetails_modified">Modifita je:</string>
    <string name="filedetails_download">Elŝuti</string>
    <string name="filedetails_renamed_in_upload_msg">La dosiero alinomiĝis al %1$s dum alŝuto</string>
-   <string name="action_share_file">Konhavigi ligilon</string>
-   <string name="action_unshare_file">Malkunhavigi ligilon</string>
    <string name="common_yes">Jes</string>
    <string name="common_no">Ne</string>
    <string name="common_ok">Akcepti</string>
    <string name="unfavorite">Nefavoratigi</string>
    <string name="common_rename">Alinomigi</string>
    <string name="common_remove">Forigi</string>
 -  <string name="confirmation_remove_alert">Ĉu vi vere volas forigi %1$s?</string>
 +  <string name="confirmation_remove_file_alert">Ĉu vi vere volas forigi %1$s?</string>
    <string name="confirmation_remove_folder_alert">Ĉu vi vere volas forigi %1$s kaj ĝia enhavo?</string>
    <string name="confirmation_remove_local">Nur loka</string>
    <string name="confirmation_remove_folder_local">Nur loka</string>
@@@ -21,6 -21,7 +21,7 @@@
        <item>Biggest - Smallest</item>-->
    <!--TODO re-enable when "Accounts" is available in Navigation Drawer-->
    <!--<string name="drawer_item_accounts">Accounts</string>-->
+   <string name="drawer_item_all_files">Todos los archivos</string>
    <!--TODO re-enable when "On Device" is available
      <string name="drawer_item_on_device">On device</string>-->
    <string name="drawer_open">Abrir</string>
@@@ -73,8 -74,6 +74,6 @@@
    <string name="filedetails_modified">Modificado:</string>
    <string name="filedetails_download">Descargar</string>
    <string name="filedetails_renamed_in_upload_msg">El archivo fue renombrado como %1$s durante la subida</string>
-   <string name="action_share_file">Compartir vínculo</string>
-   <string name="action_unshare_file">Dejar de compartir vínculo</string>
    <string name="common_yes">Sí</string>
    <string name="common_no">No</string>
    <string name="common_ok">Aceptar</string>
    <string name="favorite">Favorito</string>
    <string name="common_rename">Renombrar</string>
    <string name="common_remove">Borrar</string>
 -  <string name="confirmation_remove_alert">¿Realmente quieres eliminar %1$s?</string>
 +  <string name="confirmation_remove_file_alert">¿Realmente quieres eliminar %1$s?</string>
    <string name="confirmation_remove_folder_alert">¿Realmente deseas eliminar %1$s y todo su contenido?</string>
    <string name="confirmation_remove_local">Sólo local</string>
    <string name="confirmation_remove_folder_local">Sólo local</string>
@@@ -82,9 -82,6 +82,6 @@@
    <string name="filedetails_sync_file">Sincronizar</string>
    <string name="filedetails_renamed_in_upload_msg">El fichero fue renombrado como %1$s durante la subida</string>
    <string name="list_layout">Diseño de lista</string>
-   <string name="action_share_file">Compartir con enlace</string>
-   <string name="action_unshare_file">Dejar de compartir</string>
-   <string name="action_share_with_users">Compartir con usuarios</string>
    <string name="common_yes">Sí</string>
    <string name="common_no">No</string>
    <string name="common_ok">Aceptar</string>
    <string name="unfavorite">No-favorito</string>
    <string name="common_rename">Renombrar</string>
    <string name="common_remove">Borrar</string>
 -  <string name="confirmation_remove_alert">¿Realmente desea eliminar %1$s?</string>
 +  <string name="confirmation_remove_file_alert">¿Realmente desea eliminar %1$s?</string>
    <string name="confirmation_remove_folder_alert">¿Realmente desea eliminar %1$s y todo su contenido?</string>
    <string name="confirmation_remove_local">Sólo local</string>
    <string name="confirmation_remove_folder_local">Sólo local</string>
 -  <string name="confirmation_remove_remote">Desde el servidor</string>
 +  <string name="confirmation_remove_file_remote">Desde el servidor</string>
    <string name="confirmation_remove_remote_and_local">Remoto &amp; local</string>
    <string name="remove_success_msg">Borrado correctamente</string>
    <string name="remove_fail_msg">El borrado no pudo ser completado</string>
    <string name="file_list__footer__files_and_folder">%1$d archivos, 1 carpeta</string>
    <string name="file_list__footer__files_and_folders">%1$d archivos, %2$d carpetas</string>
    <string name="share_dialog_title">Compartiendo</string>
-   <string name="share_with_user_section_title">Compartir con Usuarios y Grupos</string>
    <string name="share_no_users">Aún no se ha compartido con ningún usuario.</string>
    <string name="share_add_user_or_group">Añadir usuario o grupo</string>
    <string name="share_search">Buscar</string>
@@@ -80,8 -80,6 +80,6 @@@
    <string name="filedetails_download">Lae alla</string>
    <string name="filedetails_renamed_in_upload_msg">Fail nimetati üleslaadimise käigus ümber %1$ </string>
    <string name="list_layout">Nimekirja paigutus</string>
-   <string name="action_share_file">Jaga linki</string>
-   <string name="action_unshare_file">Tühista lingi jagamine</string>
    <string name="common_yes">Jah</string>
    <string name="common_no">Ei</string>
    <string name="common_ok">OK</string>
@@@ -199,11 -197,11 +197,11 @@@ Allpool on loend kohalikest failidest n
    <string name="unfavorite">Eemalda lemmik</string>
    <string name="common_rename">Nimeta ümber</string>
    <string name="common_remove">Eemalda</string>
 -  <string name="confirmation_remove_alert">Oled sa kindel, et soovid %1$s eemaldada?</string>
 +  <string name="confirmation_remove_file_alert">Oled sa kindel, et soovid %1$s eemaldada?</string>
    <string name="confirmation_remove_folder_alert">Kas sa tõesti soovid eemaldada %1$s ja selle sisu?</string>
    <string name="confirmation_remove_local">Ainult kohalik</string>
    <string name="confirmation_remove_folder_local">Ainult kohalik</string>
 -  <string name="confirmation_remove_remote">Serverist</string>
 +  <string name="confirmation_remove_file_remote">Serverist</string>
    <string name="confirmation_remove_remote_and_local">Kaugfail &amp; kohalik</string>
    <string name="remove_success_msg">Eemaldamine oli edukas</string>
    <string name="remove_fail_msg">Eemaldamine ebaõnnestus</string>
@@@ -71,8 -71,6 +71,6 @@@
    <string name="filedetails_modified">Aldatuta:</string>
    <string name="filedetails_download">Deskargatu</string>
    <string name="filedetails_renamed_in_upload_msg">Fitxategiaren izena %1$sra aldatu da igotzean</string>
-   <string name="action_share_file">Elkarbanatu lotura</string>
-   <string name="action_unshare_file">Lotura partekatzeari utzi</string>
    <string name="common_yes">Bai</string>
    <string name="common_no">Ez</string>
    <string name="common_ok">Ados</string>
@@@ -174,7 -172,7 +172,7 @@@ Mesedez, baimendu berriz</string
    <string name="favorite">Gogokoa</string>
    <string name="common_rename">Berrizendatu</string>
    <string name="common_remove">Ezabatu</string>
 -  <string name="confirmation_remove_alert">Ziur zaude %1$s ezabatu nahi duzula?</string>
 +  <string name="confirmation_remove_file_alert">Ziur zaude %1$s ezabatu nahi duzula?</string>
    <string name="confirmation_remove_folder_alert">Ziru zaude %1$s eta bere edukiak ezabatu nahi dituzula?</string>
    <string name="confirmation_remove_local">Bertakoa bakarrik</string>
    <string name="confirmation_remove_folder_local">Bertakoa bakarrik</string>
@@@ -82,9 -82,6 +82,6 @@@
    <string name="filedetails_sync_file">Synkronoi</string>
    <string name="filedetails_renamed_in_upload_msg">Tiedoston nimeksi muutettiin %1$s siirron yhteydessä</string>
    <string name="list_layout">Luettelon asettelu</string>
-   <string name="action_share_file">Jaa linkki</string>
-   <string name="action_unshare_file">Poista linkin jako</string>
-   <string name="action_share_with_users">Jaa käyttäjien kanssa</string>
    <string name="common_yes">Kyllä</string>
    <string name="common_no">Ei</string>
    <string name="common_ok">OK</string>
    <string name="unfavorite">Poista suosikeista</string>
    <string name="common_rename">Nimeä uudelleen</string>
    <string name="common_remove">Poista</string>
 -  <string name="confirmation_remove_alert">Haluatko varmasti poistaa kohteen %1$s?</string>
 +  <string name="confirmation_remove_file_alert">Haluatko varmasti poistaa kohteen %1$s?</string>
    <string name="confirmation_remove_folder_alert">Haluatko varmasti poistaa kohteen %1$s ja sen sisällön?</string>
    <string name="confirmation_remove_local">Vain paikallinen</string>
    <string name="confirmation_remove_folder_local">Vain paikallinen</string>
 -  <string name="confirmation_remove_remote">Palvelimelta</string>
 +  <string name="confirmation_remove_file_remote">Palvelimelta</string>
    <string name="confirmation_remove_remote_and_local">Etä ja paikallinen</string>
    <string name="remove_success_msg">Poistettu onnistuneesti</string>
    <string name="remove_fail_msg">Poistamista ei voitu suorittaa loppuun asti</string>
    <string name="file_list__footer__files_and_folder">%1$d tiedostoa, 1 kansio</string>
    <string name="file_list__footer__files_and_folders">%1$d tiedostoa, %2$d kansiota</string>
    <string name="share_dialog_title">Jakaminen</string>
-   <string name="share_with_user_section_title">Jaa käyttäjien tai ryhmien kanssa</string>
    <string name="share_add_user_or_group">Lisää käyttäjä tai ryhmä</string>
    <string name="share_search">Etsi</string>
    <string name="search_users_and_groups_hint">Etsi käyttäjiä ja ryhmiä</string>
@@@ -83,9 -83,6 +83,6 @@@ Téléchargez-le ici : %2$s</string
    <string name="filedetails_sync_file">Synchroniser</string>
    <string name="filedetails_renamed_in_upload_msg">Le fichier a été renommé en %s pendant le téléversement</string>
    <string name="list_layout">Affichage en liste</string>
-   <string name="action_share_file">Partager le lien</string>
-   <string name="action_unshare_file">Ne plus partager ce lien</string>
-   <string name="action_share_with_users">Partager avec des utilisateurs</string>
    <string name="common_yes">Oui</string>
    <string name="common_no">Non</string>
    <string name="common_ok">OK</string>
@@@ -204,11 -201,11 +201,11 @@@ Ci-dessous la liste des fichiers locaux
    <string name="unfavorite">Retirer des favoris</string>
    <string name="common_rename">Renommer</string>
    <string name="common_remove">Supprimer</string>
 -  <string name="confirmation_remove_alert">Voulez-vous vraiment supprimer %1$s ?</string>
 +  <string name="confirmation_remove_file_alert">Voulez-vous vraiment supprimer %1$s ?</string>
    <string name="confirmation_remove_folder_alert">Voulez-vous vraiment supprimer %1$s et son contenu ?</string>
    <string name="confirmation_remove_local">Local seulement</string>
    <string name="confirmation_remove_folder_local">Local seulement</string>
 -  <string name="confirmation_remove_remote">Depuis le serveur</string>
 +  <string name="confirmation_remove_file_remote">Depuis le serveur</string>
    <string name="confirmation_remove_remote_and_local">Distant &amp; local</string>
    <string name="remove_success_msg">Suppression effectuée avec succès</string>
    <string name="remove_fail_msg">Suppression impossible</string>
    <string name="file_list__footer__files_and_folder">%1$d fichiers, 1 dossier</string>
    <string name="file_list__footer__files_and_folders">%1$d fichiers, %2$d dossiers</string>
    <string name="share_dialog_title">Partage</string>
-   <string name="share_with_user_section_title">Partager avec des Utilisateurs et des Groupes</string>
    <string name="share_no_users">Aucune donnée partagée avec des utilisateurs pour le moment</string>
    <string name="share_add_user_or_group">Ajouter un Utilisateur ou un Groupe</string>
    <string name="share_search">Rechercher</string>
@@@ -83,9 -83,6 +83,6 @@@ Descárgueo de aquí: %2$s</string
    <string name="filedetails_sync_file">Sincronizar</string>
    <string name="filedetails_renamed_in_upload_msg">O ficheiro foi renomeado a %1$s durante o envío</string>
    <string name="list_layout">Deseño da lista</string>
-   <string name="action_share_file">Ligazón para compartir</string>
-   <string name="action_unshare_file">Deixar de compartir a ligazón</string>
-   <string name="action_share_with_users">Compartir con usuarios</string>
    <string name="common_yes">Si</string>
    <string name="common_no">Non</string>
    <string name="common_ok">Aceptar</string>
    <string name="unfavorite">Retirar de favoritos</string>
    <string name="common_rename">Renomear</string>
    <string name="common_remove">Retirar</string>
 -  <string name="confirmation_remove_alert">Confirma que quere retirar %1$s?</string>
 +  <string name="confirmation_remove_file_alert">Confirma que quere retirar %1$s?</string>
    <string name="confirmation_remove_folder_alert">Confirma que quere retirar %1$s e o seu contido?</string>
    <string name="confirmation_remove_local">Só local</string>
    <string name="confirmation_remove_folder_local">Só local</string>
    <string name="file_list__footer__files_and_folder">%1$d ficheiros, 1 cartafol</string>
    <string name="file_list__footer__files_and_folders">%1$d ficheiros, %2$d cartafoles</string>
    <string name="share_dialog_title">Compartindo</string>
-   <string name="share_with_user_section_title">Compartir con Usuarios e Grupos</string>
    <string name="share_no_users">Aínda non hai datos compartidos con usuarios</string>
    <string name="share_add_user_or_group">Engadir Usuario ou Grupo</string>
    <string name="share_search">Buscar</string>
@@@ -64,8 -64,6 +64,6 @@@
    <string name="filedetails_modified">מועד השינוי:</string>
    <string name="filedetails_download">הורדה</string>
    <string name="filedetails_renamed_in_upload_msg">שם הקובץ השתנה ל־ %1$s במהלך ההעלאה</string>
-   <string name="action_share_file">קישור לשיתוף</string>
-   <string name="action_unshare_file">ביטול קישור לשיתוף</string>
    <string name="common_yes">כן</string>
    <string name="common_no">לא</string>
    <string name="common_ok">אישור</string>
    <string name="favorite">מועדף</string>
    <string name="common_rename">שינוי שם</string>
    <string name="common_remove">הסרה</string>
 -  <string name="confirmation_remove_alert">האם באמת להסיר %1$s?</string>
 +  <string name="confirmation_remove_file_alert">האם באמת להסיר %1$s?</string>
    <string name="confirmation_remove_folder_alert">האם באמת להסיר %1$s ואת כל התכולה?</string>
    <string name="confirmation_remove_local">מקומי בלבד</string>
    <string name="confirmation_remove_folder_local">מקומי בלבד</string>
@@@ -78,8 -78,6 +78,6 @@@
    <string name="filedetails_sync_file">Szinkronizálás</string>
    <string name="filedetails_renamed_in_upload_msg">A feltöltés során az állmányt erre neveztük át: %1$s</string>
    <string name="list_layout">Lista Elrendezés</string>
-   <string name="action_share_file">Megosztás hivatkozással</string>
-   <string name="action_unshare_file">Megosztás visszavonása</string>
    <string name="common_yes">Igen</string>
    <string name="common_no">Nem</string>
    <string name="common_ok">OK</string>
    <string name="unfavorite">Nem kedvenc</string>
    <string name="common_rename">Átnevezés</string>
    <string name="common_remove">Eltávolítás</string>
 -  <string name="confirmation_remove_alert">Tényleg el akarod távolítani %1$s?</string>
 +  <string name="confirmation_remove_file_alert">Tényleg el akarod távolítani %1$s?</string>
    <string name="confirmation_remove_folder_alert">Tényleg el akarod távolítani a %1$s és tartalmát?</string>
    <string name="confirmation_remove_local">Csak a helyi példány</string>
    <string name="confirmation_remove_folder_local">Csak a helyi példány</string>
@@@ -81,8 -81,6 +81,6 @@@
    <string name="filedetails_download">Unduh</string>
    <string name="filedetails_renamed_in_upload_msg">Berkas diubah namanya menjadi %1$s saat pengunggahan</string>
    <string name="list_layout">Daftar Tata Letak</string>
-   <string name="action_share_file">Bagikan tautan</string>
-   <string name="action_unshare_file">Batal bagikan tautan</string>
    <string name="common_yes">Ya</string>
    <string name="common_no">Tidak</string>
    <string name="common_ok">Oke</string>
    <string name="unfavorite">Hapus favorit</string>
    <string name="common_rename">Ubah nama</string>
    <string name="common_remove">Hapus</string>
 -  <string name="confirmation_remove_alert">Apakah Anda yakin ingin menghapus %1$s?</string>
 +  <string name="confirmation_remove_file_alert">Apakah Anda yakin ingin menghapus %1$s?</string>
    <string name="confirmation_remove_folder_alert">Apakah Anda yakin ingin menghapus %1$s dan isinya?</string>
    <string name="confirmation_remove_local">Lokal saja</string>
    <string name="confirmation_remove_folder_local">Lokal saja</string>
 -  <string name="confirmation_remove_remote">Dari server</string>
 +  <string name="confirmation_remove_file_remote">Dari server</string>
    <string name="confirmation_remove_remote_and_local">Remot &amp; lokal</string>
    <string name="remove_success_msg">Penghapusan berhasil</string>
    <string name="remove_fail_msg">Penghapusan gagal</string>
    <string name="file_list__footer__files_and_folder">%1$d berkas, 1 folder</string>
    <string name="file_list__footer__files_and_folders">%1$d berkas, %2$d folder</string>
    <string name="share_dialog_title">Berbagi</string>
-   <string name="share_with_user_section_title">Bagikan dengan Pengguna dan Grup</string>
    <string name="share_no_users">Tidak ada data yang dibagikan dengan pengguna</string>
    <string name="share_add_user_or_group">Tambah Pengguna atau Grup</string>
    <string name="share_search">Cari</string>
@@@ -82,9 -82,6 +82,6 @@@
    <string name="filedetails_sync_file">Sincronizza</string>
    <string name="filedetails_renamed_in_upload_msg">Il file è stato rinominato in %1$s durante il caricamento</string>
    <string name="list_layout">Struttura elenco</string>
-   <string name="action_share_file">Condividi collegamento</string>
-   <string name="action_unshare_file">Rimuovi condivisione collegamento</string>
-   <string name="action_share_with_users">Condividi con utenti</string>
    <string name="common_yes">Sì</string>
    <string name="common_no">No</string>
    <string name="common_ok">OK</string>
    <string name="unfavorite">Rimuovi dai preferiti</string>
    <string name="common_rename">Rinomina</string>
    <string name="common_remove">Rimuovi</string>
 -  <string name="confirmation_remove_alert">Vuoi davvero rimuovere %1$s?</string>
 +  <string name="confirmation_remove_file_alert">Vuoi davvero rimuovere %1$s?</string>
    <string name="confirmation_remove_folder_alert">Vuoi davvero rimuovere %1$s e il suo contenuto?</string>
    <string name="confirmation_remove_local">Solo localmente</string>
    <string name="confirmation_remove_folder_local">Solo locale</string>
 -  <string name="confirmation_remove_remote">Dal server</string>
 +  <string name="confirmation_remove_file_remote">Dal server</string>
    <string name="confirmation_remove_remote_and_local">Remota e locale</string>
    <string name="remove_success_msg">Rimozione effettuata con successo</string>
    <string name="remove_fail_msg">La rimozione non può essere completata</string>
    <string name="file_list__footer__files_and_folder">%1$d file, 1 cartella</string>
    <string name="file_list__footer__files_and_folders">%1$d file, %2$d cartelle</string>
    <string name="share_dialog_title">Condivisione</string>
-   <string name="share_with_user_section_title">Condividi con utenti e gruppi</string>
    <string name="share_no_users">Ancora nessun dato condiviso con gli utenti </string>
    <string name="share_add_user_or_group">Aggiungi utente o gruppo</string>
    <string name="share_search">Cerca</string>
@@@ -83,9 -83,6 +83,6 @@@
    <string name="filedetails_sync_file">ファイルを同期</string>
    <string name="filedetails_renamed_in_upload_msg">アップロード中にファイル名を %1$s に変更しました</string>
    <string name="list_layout">リストレイアウト</string>
-   <string name="action_share_file">URLで共有</string>
-   <string name="action_unshare_file">未共有のリンク</string>
-   <string name="action_share_with_users">ユーザーと共有</string>
    <string name="common_yes">はい</string>
    <string name="common_no">いいえ</string>
    <string name="common_ok">OK</string>
    <string name="unfavorite">お気に入りを解除</string>
    <string name="common_rename">名前を変更</string>
    <string name="common_remove">削除</string>
 -  <string name="confirmation_remove_alert">本当に %1$s を削除しますか?</string>
 +  <string name="confirmation_remove_file_alert">本当に %1$s を削除しますか?</string>
    <string name="confirmation_remove_folder_alert">本当に %1$s およびそのコンテンツを削除してもよろしいですか?</string>
    <string name="confirmation_remove_local">ローカルのみ</string>
    <string name="confirmation_remove_folder_local">ローカルのみ</string>
    <string name="file_list__footer__files_and_folder">%1$d ファイル、1 フォルダー</string>
    <string name="file_list__footer__files_and_folders">%1$d ファイル、%2$d フォルダー</string>
    <string name="share_dialog_title">共有</string>
-   <string name="share_with_user_section_title">ユーザーまたはグループに共有</string>
    <string name="share_no_users">ユーザーと共有されているデータはありません</string>
    <string name="share_add_user_or_group">ユーザーまたはグループを追加</string>
    <string name="share_search">検索</string>
@@@ -81,8 -81,6 +81,6 @@@
    <string name="filedetails_download">다운로드</string>
    <string name="filedetails_renamed_in_upload_msg">업로드 중 파일 이름을 %1$s(으)로 변경하였습니다</string>
    <string name="list_layout">목록 레이아웃</string>
-   <string name="action_share_file">링크 공유</string>
-   <string name="action_unshare_file">링크 공유 해제</string>
    <string name="common_yes">예</string>
    <string name="common_no">아니요</string>
    <string name="common_ok">확인</string>
    <string name="unfavorite">책갈피 해제</string>
    <string name="common_rename">이름 바꾸기</string>
    <string name="common_remove">삭제</string>
 -  <string name="confirmation_remove_alert">%1$s을(를) 삭제하시겠습니까?</string>
 +  <string name="confirmation_remove_file_alert">%1$s을(를) 삭제하시겠습니까?</string>
    <string name="confirmation_remove_folder_alert">%1$s 및 포함된 내용을 삭제하시겠습니까?</string>
    <string name="confirmation_remove_local">로컬만</string>
    <string name="confirmation_remove_folder_local">로컬만</string>
    <string name="file_list__footer__files_and_folder">파일 %1$d개, 폴더 1개</string>
    <string name="file_list__footer__files_and_folders">파일 %1$d개, 폴더 %2$d개</string>
    <string name="share_dialog_title">공유</string>
-   <string name="share_with_user_section_title">Share with Users and Groups</string>
    <string name="share_no_users">No data shared with users yet</string>
    <string name="share_add_user_or_group">Add User or Group</string>
    <string name="share_search">검색</string>
@@@ -62,7 -62,6 +62,6 @@@
    <string name="filedetails_created">Erstallt:</string>
    <string name="filedetails_modified">Geännert:</string>
    <string name="filedetails_download">Eroflueden</string>
-   <string name="action_share_file">Link deelen</string>
    <string name="common_yes">Jo</string>
    <string name="common_no">Nee</string>
    <string name="common_ok">OK</string>
    <string name="auth_unsupported_auth_method">De Server ënnerstëtzt dës Authentifizéierungsmethod net</string>
    <string name="common_rename">Ëmbenennen</string>
    <string name="common_remove">Läschen</string>
 -  <string name="confirmation_remove_alert">Wëlls du %1$s wierklech läschen?</string>
 +  <string name="confirmation_remove_file_alert">Wëlls du %1$s wierklech läschen?</string>
    <string name="confirmation_remove_folder_alert">Wëlls du %1$s an de ganzen Inhalt wierklech läschen?</string>
    <string name="confirmation_remove_local">Nemme lokal</string>
    <string name="confirmation_remove_folder_local">Nemme lokal</string>
@@@ -82,8 -82,6 +82,6 @@@
    <string name="filedetails_sync_file">Sinchronizuojama</string>
    <string name="filedetails_renamed_in_upload_msg">Įkėlimo metu failas buvo pervadintas į %1$s</string>
    <string name="list_layout">Sąrašo išdėstymas</string>
-   <string name="action_share_file">Dalintis nuoroda</string>
-   <string name="action_unshare_file">Nebesidalinti nuoroda</string>
    <string name="common_yes">Taip</string>
    <string name="common_no">Ne</string>
    <string name="common_ok">Gerai</string>
    <string name="uploader_info_dirname">Katalogo pavadinimas</string>
    <string name="uploader_upload_in_progress_ticker">Įkeliama ...</string>
    <string name="uploader_upload_in_progress_content">%1$d%% Siunčiama %2$s</string>
-   <string name="uploader_upload_succeeded_ticker">Nusiuntimas pavyko</string>
+   <string name="uploader_upload_succeeded_ticker">Įkėlimas pavyko</string>
    <string name="uploader_upload_succeeded_content_single">%1$s buvo sėkmingai nusiųstas</string>
    <string name="uploader_upload_failed_ticker">Nusiuntimas nepavyko</string>
    <string name="uploader_upload_failed_content_single">Nepavyko baigti %1$s nusiuntimo</string>
    <string name="unfavorite">Nebemėgti</string>
    <string name="common_rename">Pervadinti</string>
    <string name="common_remove">Pašalinti</string>
 -  <string name="confirmation_remove_alert">Ar tikrai norite pašalinti %1$s?</string>
 +  <string name="confirmation_remove_file_alert">Ar tikrai norite pašalinti %1$s?</string>
    <string name="confirmation_remove_folder_alert">Ar tikrai norite pašalinti %1$s ir ten esantį turinį?</string>
    <string name="confirmation_remove_local">Tik vietiniai</string>
    <string name="confirmation_remove_folder_local">Tik vietiniai</string>
    <string name="ssl_validator_label_validity_to">Iki:</string>
    <string name="ssl_validator_label_signature">Parašas:</string>
    <string name="ssl_validator_label_signature_algorithm">Algoritmas:</string>
+   <string name="digest_algorithm_not_available">Tavo telefonas nepalaiko digest algoritmo.</string>
+   <string name="ssl_validator_label_certificate_fingerprint">Kontrolinis kodas:</string>
+   <string name="certificate_load_problem">Klaida įkeliant sertifikatą.</string>
    <string name="ssl_validator_null_cert">Sertifikatas negali būti parodytas.</string>
    <string name="ssl_validator_no_info_about_error">- Nėra informacijos apie klaidą</string>
    <string name="placeholder_sentence">Rezervas</string>
    <string name="file_list__footer__files_and_folder">%1$d failai, 1 aplankas</string>
    <string name="file_list__footer__files_and_folders">%1$d failai, %2$d aplankai</string>
    <string name="share_dialog_title">Dalijimasis</string>
+   <string name="share_no_users">Su vartotojais niekuo nesidalinama</string>
+   <string name="share_add_user_or_group">Pridėti vartotoją ar grupę</string>
    <string name="share_search">Ieškoti</string>
+   <string name="search_users_and_groups_hint">Surasti vartotoją ar grupę</string>
+   <string name="share_group_clarification">%1$s (grupė)</string>
+   <string name="share_sharee_unavailable">Serveris nepalaiko dalinimosi su vartotojais kliente.
+ \nSusisiekite su administratoriumi.</string>
  </resources>
@@@ -74,8 -74,6 +74,6 @@@
    <string name="filedetails_modified">Изменето:</string>
    <string name="filedetails_download">Преземање</string>
    <string name="filedetails_renamed_in_upload_msg">Датотеката беше преименувана во %1$s за време на префрлањето</string>
-   <string name="action_share_file">Сподели ја врската</string>
-   <string name="action_unshare_file">Тргнете го споделувањето на врската</string>
    <string name="common_yes">Да</string>
    <string name="common_no">Не</string>
    <string name="common_ok">Во ред</string>
    <string name="auth_account_does_not_exist">Сметката сеуште не постои на овој уред</string>
    <string name="common_rename">Преименувај</string>
    <string name="common_remove">Отстрани</string>
 -  <string name="confirmation_remove_alert">Дали навистина сакаш да ја отстраниш %1$s?</string>
 +  <string name="confirmation_remove_file_alert">Дали навистина сакаш да ја отстраниш %1$s?</string>
    <string name="confirmation_remove_folder_alert">Дали навистина сакаш да го отстранам %1$s и неговата содржина?</string>
    <string name="confirmation_remove_local">Само локално</string>
    <string name="confirmation_remove_folder_local">Само локално</string>
@@@ -81,8 -81,6 +81,6 @@@
    <string name="filedetails_download">Last ned</string>
    <string name="filedetails_renamed_in_upload_msg">Filnavnet ble endret til  %1$s under opplasting</string>
    <string name="list_layout">Listeoppsett</string>
-   <string name="action_share_file">Del lenke</string>
-   <string name="action_unshare_file">Avslutt deling av lenke</string>
    <string name="common_yes">Ja</string>
    <string name="common_no">Nei</string>
    <string name="common_ok">OK</string>
    <string name="unfavorite">Fjern favoritt</string>
    <string name="common_rename">Endre navn</string>
    <string name="common_remove">Fjern</string>
 -  <string name="confirmation_remove_alert">Vil du virkelig fjerne %1$s?</string>
 +  <string name="confirmation_remove_file_alert">Vil du virkelig fjerne %1$s?</string>
    <string name="confirmation_remove_folder_alert">Vil du virkelig fjerne %1$s inkludert innholdet?</string>
    <string name="confirmation_remove_local">Kun lokalt</string>
    <string name="confirmation_remove_folder_local">Kun lokalt</string>
 -  <string name="confirmation_remove_remote">Fra server</string>
 +  <string name="confirmation_remove_file_remote">Fra server</string>
    <string name="confirmation_remove_remote_and_local">Ekstern &amp; lokal</string>
    <string name="remove_success_msg">Fjerning var vellykket</string>
    <string name="remove_fail_msg">Fjerning mislyktes</string>
    <string name="file_list__footer__files_and_folder">%1$d filer, 1 mappe</string>
    <string name="file_list__footer__files_and_folders">%1$d filer, %2$d mapper</string>
    <string name="share_dialog_title">Deling</string>
-   <string name="share_with_user_section_title">Del med brukere og grupper</string>
    <string name="share_no_users">Ingen data delt med brukere ennå</string>
    <string name="share_add_user_or_group">Legg til bruker eller gruppe</string>
    <string name="share_search">Søk</string>
@@@ -83,9 -83,6 +83,6 @@@ Download hier: %2$s</string
    <string name="filedetails_sync_file">Synchroniseren</string>
    <string name="filedetails_renamed_in_upload_msg">Bestand is tijdens het uploaden hernoemd naar %1$s</string>
    <string name="list_layout">Lijst layout</string>
-   <string name="action_share_file">Deel link</string>
-   <string name="action_unshare_file">Link niet meer delen</string>
-   <string name="action_share_with_users">Delen met gebruiker</string>
    <string name="common_yes">Ja</string>
    <string name="common_no">Nee</string>
    <string name="common_ok">OK</string>
@@@ -202,11 -199,11 +199,11 @@@ Hieronder staan de lokale bestanden en 
    <string name="unfavorite">Niet meer favoriet</string>
    <string name="common_rename">Hernoemen</string>
    <string name="common_remove">Verwijderen</string>
 -  <string name="confirmation_remove_alert">Wilt u %1$s werkelijk verwijderen?</string>
 +  <string name="confirmation_remove_file_alert">Wilt u %1$s werkelijk verwijderen?</string>
    <string name="confirmation_remove_folder_alert">Wilt u %1$s en de inhoud ervan werkelijk verwijderen?</string>
    <string name="confirmation_remove_local">Alleen lokaal</string>
    <string name="confirmation_remove_folder_local">Alleen lokaal</string>
 -  <string name="confirmation_remove_remote">Van server</string>
 +  <string name="confirmation_remove_file_remote">Van server</string>
    <string name="confirmation_remove_remote_and_local">Extern &amp; lokaal</string>
    <string name="remove_success_msg">Succesvol verwijderd</string>
    <string name="remove_fail_msg">Verwijdering kon niet voltooid worden</string>
    <string name="file_list__footer__files_and_folder">%1$d bestanden, 1 map</string>
    <string name="file_list__footer__files_and_folders">%1$d bestanden, %2$d mappen</string>
    <string name="share_dialog_title">Delen</string>
-   <string name="share_with_user_section_title">Delen met gebruikers en groepen</string>
    <string name="share_no_users">Nog geen gegevens met gebruikers gedeeld</string>
    <string name="share_add_user_or_group">Toevoegen gebruiker of groep</string>
    <string name="share_search">Zoeken</string>
@@@ -83,9 -83,6 +83,6 @@@ Telecargatz-lo aicí : %2$s</string
    <string name="filedetails_sync_file">Sincronizar</string>
    <string name="filedetails_renamed_in_upload_msg">Lo fichièr es estat renomenat en %s pendent lo mandadís</string>
    <string name="list_layout">Afichatge en lista</string>
-   <string name="action_share_file">Partejar lo ligam</string>
-   <string name="action_unshare_file">Partejar pas mai aqueste ligam</string>
-   <string name="action_share_with_users">Partejar amb d\'Utilizaires</string>
    <string name="common_yes">Òc</string>
    <string name="common_no">Non</string>
    <string name="common_ok">D\'acòrdi</string>
@@@ -204,11 -201,11 +201,11 @@@ En rason d\'aquesta modificacion, tote
    <string name="unfavorite">Suprimir dels favorits</string>
    <string name="common_rename">Renomenar</string>
    <string name="common_remove">Suprimir</string>
 -  <string name="confirmation_remove_alert">Sètz segur que volètz suprimir %1$s ?</string>
 +  <string name="confirmation_remove_file_alert">Sètz segur que volètz suprimir %1$s ?</string>
    <string name="confirmation_remove_folder_alert">Sètz segur que volètz suprimir %1$s e son contengut ?</string>
    <string name="confirmation_remove_local">Local solament</string>
    <string name="confirmation_remove_folder_local">Local solament</string>
 -  <string name="confirmation_remove_remote">Dempuèi lo servidor</string>
 +  <string name="confirmation_remove_file_remote">Dempuèi lo servidor</string>
    <string name="confirmation_remove_remote_and_local">Distant &amp; local</string>
    <string name="remove_success_msg">Supression efectuada amb succès</string>
    <string name="remove_fail_msg">Supression impossibla</string>
    <string name="file_list__footer__files_and_folder">%1$d fichièrs, 1 dorsièr</string>
    <string name="file_list__footer__files_and_folders">%1$d fichièrs, %2$d dorsièrs</string>
    <string name="share_dialog_title">Partiment</string>
-   <string name="share_with_user_section_title">Partejar amb d\'utilizaires e de gropes</string>
    <string name="share_no_users">Cap de donada es pas partejada amb d\'utilizaires pel moment</string>
    <string name="share_add_user_or_group">Apondre un utilizaire o un grop</string>
    <string name="share_search">Recercar</string>
@@@ -80,8 -80,6 +80,6 @@@
    <string name="filedetails_download">Pobierz</string>
    <string name="filedetails_renamed_in_upload_msg">Podczas wysyłania nazwa pliku została zmieniona na %1$s</string>
    <string name="list_layout">Lista szablonów wyglądu</string>
-   <string name="action_share_file">Udostępnij link</string>
-   <string name="action_unshare_file">Anuluj udostępnianie</string>
    <string name="common_yes">Tak</string>
    <string name="common_no">Nie</string>
    <string name="common_ok">OK</string>
    <string name="unfavorite">Usuń z ulubionych</string>
    <string name="common_rename">Zmień nazwę</string>
    <string name="common_remove">Usuń</string>
 -  <string name="confirmation_remove_alert">Czy naprawdę chcesz usunąć %1$s?</string>
 +  <string name="confirmation_remove_file_alert">Czy naprawdę chcesz usunąć %1$s?</string>
    <string name="confirmation_remove_folder_alert">Czy naprawdę chcesz usunąć %1$s i jego zawartość?</string>
    <string name="confirmation_remove_local">Tylko lokalnie</string>
    <string name="confirmation_remove_folder_local">Tylko lokalnie</string>
 -  <string name="confirmation_remove_remote">Z serwera</string>
 +  <string name="confirmation_remove_file_remote">Z serwera</string>
    <string name="remove_success_msg">Usunięto</string>
    <string name="remove_fail_msg">Nie można usunąć</string>
    <string name="rename_dialog_title">Wprowadź nową nazwę</string>
@@@ -82,9 -82,6 +82,6 @@@
    <string name="filedetails_sync_file">Sincronizar</string>
    <string name="filedetails_renamed_in_upload_msg">Arquivo foi renomeado para %1$s durante o envio</string>
    <string name="list_layout">Lista de Layout</string>
-   <string name="action_share_file">Compartilhar link</string>
-   <string name="action_unshare_file">Descompartilhar o link</string>
-   <string name="action_share_with_users">Compartilhado com usuários</string>
    <string name="common_yes">Sim</string>
    <string name="common_no">Não</string>
    <string name="common_ok">OK</string>
    <string name="unfavorite">Nãofavorito</string>
    <string name="common_rename">Renomear</string>
    <string name="common_remove">Remover</string>
 -  <string name="confirmation_remove_alert">Você realmente deseja remover %1$s?</string>
 +  <string name="confirmation_remove_file_alert">Você realmente deseja remover %1$s?</string>
    <string name="confirmation_remove_folder_alert">Você realmente deseja remover %1$s e seus conteúdos?</string>
    <string name="confirmation_remove_local">Somente local</string>
    <string name="confirmation_remove_folder_local">Somente local</string>
 -  <string name="confirmation_remove_remote">Do servidor</string>
 +  <string name="confirmation_remove_file_remote">Do servidor</string>
    <string name="confirmation_remove_remote_and_local">Remoto &amp; local</string>
    <string name="remove_success_msg">Removido com sucesso</string>
    <string name="remove_fail_msg">Erro ao remover</string>
    <string name="file_list__footer__files_and_folder">%1$d arquivos, 1 pasta</string>
    <string name="file_list__footer__files_and_folders">%1$d arquivos, %2$d pastas</string>
    <string name="share_dialog_title">Compartilhamento</string>
-   <string name="share_with_user_section_title">Compartilhar com Usuários e Grupos</string>
    <string name="share_no_users">Ainda não existe nenhum dado compartilhado com usuários</string>
    <string name="share_add_user_or_group">Adicionar Usuário ou Grupo</string>
    <string name="share_search">Perquisar</string>
@@@ -82,8 -82,6 +82,6 @@@
    <string name="filedetails_sync_file">Sincronizar</string>
    <string name="filedetails_renamed_in_upload_msg">O ficheiro foi renomeado para %1$s durante o envio.</string>
    <string name="list_layout">Apresentação da Lista</string>
-   <string name="action_share_file">Partilhar a hiperligação</string>
-   <string name="action_unshare_file">Cancelar partilha da hiperligação</string>
    <string name="common_yes">Sim</string>
    <string name="common_no">Não</string>
    <string name="common_ok">ACEITAR</string>
    <string name="unfavorite">Retirar Favorito</string>
    <string name="common_rename">Renomear</string>
    <string name="common_remove">Remover</string>
 -  <string name="confirmation_remove_alert">Tem a certeza que deseja remover %1$s ?</string>
 +  <string name="confirmation_remove_file_alert">Tem a certeza que deseja remover %1$s ?</string>
    <string name="confirmation_remove_folder_alert">Deseja realmente remover %1$s e o seu conteúdo?</string>
    <string name="confirmation_remove_local">Apenas localmente</string>
    <string name="confirmation_remove_folder_local">Apenas localmente</string>
 -  <string name="confirmation_remove_remote">Do servidor</string>
 +  <string name="confirmation_remove_file_remote">Do servidor</string>
    <string name="confirmation_remove_remote_and_local">Remoto &amp; local</string>
    <string name="remove_success_msg">Removido com sucesso</string>
    <string name="remove_fail_msg">Não foi possível remover</string>
    <string name="file_list__footer__files_and_folder">%1$d ficheiros, 1 pasta</string>
    <string name="file_list__footer__files_and_folders">%1$d ficheiros, %2$d pastas</string>
    <string name="share_dialog_title">Partilha</string>
-   <string name="share_with_user_section_title">Partilhar com Utilizadores e Grupos</string>
    <string name="share_no_users">Ainda não foram partilhados os dados com os utilizadores</string>
    <string name="share_add_user_or_group">Adicionar Utilziador ou Grupo</string>
    <string name="share_search">Procurar</string>
@@@ -80,8 -80,6 +80,6 @@@
    <string name="filedetails_download">Descarcă</string>
    <string name="filedetails_renamed_in_upload_msg">Fișierul a fost redenumit %1$s în timpul încărcării</string>
    <string name="list_layout">Aspect listă</string>
-   <string name="action_share_file">Partajază legătură</string>
-   <string name="action_unshare_file">Departajează legătura</string>
    <string name="common_yes">Da</string>
    <string name="common_no">Nu</string>
    <string name="common_ok">OK</string>
    <string name="unfavorite">Defavoritați</string>
    <string name="common_rename">Redenumește</string>
    <string name="common_remove">Elimină</string>
 -  <string name="confirmation_remove_alert">Doriti sigur sa stergeti %1$s?</string>
 +  <string name="confirmation_remove_file_alert">Doriti sigur sa stergeti %1$s?</string>
    <string name="confirmation_remove_folder_alert">Sigur vrei să elimini %1$s și conținutul său?</string>
    <string name="confirmation_remove_local">Doar local</string>
    <string name="confirmation_remove_folder_local">Doar local</string>
 -  <string name="confirmation_remove_remote">De pe server</string>
 +  <string name="confirmation_remove_file_remote">De pe server</string>
    <string name="confirmation_remove_remote_and_local">Ambele</string>
    <string name="remove_success_msg">Eliminat cu succes</string>
    <string name="remove_fail_msg">Eliminarea nu a reușit</string>
@@@ -82,8 -82,6 +82,6 @@@
    <string name="filedetails_download">Скачать</string>
    <string name="filedetails_renamed_in_upload_msg">Файл был переименован в %1$s во время загрузки</string>
    <string name="list_layout">Макет списка</string>
-   <string name="action_share_file">Поделиться ссылкой</string>
-   <string name="action_unshare_file">Убрать ссылку</string>
    <string name="common_yes">Да</string>
    <string name="common_no">Нет</string>
    <string name="common_ok">ОК</string>
    <string name="unfavorite">Убрать из избранного</string>
    <string name="common_rename">Переименовать</string>
    <string name="common_remove">Удалить</string>
 -  <string name="confirmation_remove_alert">Вы действительно хотите удалить %1$s?</string>
 +  <string name="confirmation_remove_file_alert">Вы действительно хотите удалить %1$s?</string>
    <string name="confirmation_remove_folder_alert">Вы действительно хотите удалить %1$s и его содержимое?</string>
    <string name="confirmation_remove_local">Только локально</string>
    <string name="confirmation_remove_folder_local">Только локально</string>
    <string name="file_list__footer__files_and_folder">%1$d файлов, 1 каталог</string>
    <string name="file_list__footer__files_and_folders">%1$d файлов, %2$d каталогов</string>
    <string name="share_dialog_title">Общий доступ</string>
-   <string name="share_with_user_section_title">Поделиться с пользователями или группами</string>
    <string name="share_no_users">Нет данных используемых совместно с другими пользователями</string>
    <string name="share_add_user_or_group">Добавить пользователя или группу</string>
    <string name="share_search">Найти</string>
@@@ -82,9 -82,6 +82,6 @@@
    <string name="filedetails_sync_file">Synchronizovať</string>
    <string name="filedetails_renamed_in_upload_msg">Súbor bol premenovaný na %1$s počas nahrávania</string>
    <string name="list_layout">Rozvrhnutie zoznamu</string>
-   <string name="action_share_file">Zdieľať linku</string>
-   <string name="action_unshare_file">Zrušiť zdieľanie odkazu</string>
-   <string name="action_share_with_users">Zdieľať s používateľmi</string>
    <string name="common_yes">Áno</string>
    <string name="common_no">Nie</string>
    <string name="common_ok">OK</string>
    <string name="unfavorite">Odobrať z obľúbených</string>
    <string name="common_rename">Premenuj</string>
    <string name="common_remove">Odober</string>
 -  <string name="confirmation_remove_alert">Naozaj chcete odstrániť %1$s?</string>
 +  <string name="confirmation_remove_file_alert">Naozaj chcete odstrániť %1$s?</string>
    <string name="confirmation_remove_folder_alert">Naozaj chcete odstrániť %1$s a jeho obsah?</string>
    <string name="confirmation_remove_local">Iba lokálne</string>
    <string name="confirmation_remove_folder_local">Iba lokálne</string>
 -  <string name="confirmation_remove_remote">Zo servera</string>
 +  <string name="confirmation_remove_file_remote">Zo servera</string>
    <string name="confirmation_remove_remote_and_local">Vzdialene aj lokálne</string>
    <string name="remove_success_msg">Úspešne odstránené</string>
    <string name="remove_fail_msg">Odstránenie zlyhalo</string>
    <string name="file_list__footer__files_and_folder">%1$d súb., 1 priečinok</string>
    <string name="file_list__footer__files_and_folders">%1$d súb., %2$d prieč.</string>
    <string name="share_dialog_title">Zdieľanie</string>
-   <string name="share_with_user_section_title">Zdieľať s používateľmi alebo skupinami</string>
    <string name="share_no_users">Zatiaľ s používateľmi nezdieľate žiadne dáta.</string>
    <string name="share_add_user_or_group">Pridať používateľa alebo skupinu</string>
    <string name="share_search">Hľadať</string>
@@@ -80,8 -80,6 +80,6 @@@
    <string name="filedetails_download">Prejmi</string>
    <string name="filedetails_renamed_in_upload_msg">Datoteka je bila med nalaganjem preimenovana v %1$s</string>
    <string name="list_layout">Postavitev seznama</string>
-   <string name="action_share_file">Povezava za souporabo</string>
-   <string name="action_unshare_file">Odstrani možnost souporabe</string>
    <string name="common_yes">Da</string>
    <string name="common_no">Ne</string>
    <string name="common_ok">V redu</string>
    <string name="unfavorite">Odstrani priljubljeno</string>
    <string name="common_rename">Preimenuj</string>
    <string name="common_remove">Odstrani</string>
 -  <string name="confirmation_remove_alert">Ali res želite odstraniti %1$s?</string>
 +  <string name="confirmation_remove_file_alert">Ali res želite odstraniti %1$s?</string>
    <string name="confirmation_remove_folder_alert">Ali res želite odstraniti %1$s skupaj s celotno vsebino?</string>
    <string name="confirmation_remove_local">Le krajevno</string>
    <string name="confirmation_remove_folder_local">Le krajevno</string>
 -  <string name="confirmation_remove_remote">S strežnika</string>
 +  <string name="confirmation_remove_file_remote">S strežnika</string>
    <string name="confirmation_remove_remote_and_local">Oddaljeno &amp; krajevno</string>
    <string name="remove_success_msg">Odstranitev je uspešno končana</string>
    <string name="remove_fail_msg">Odstranjevanje je spodletelo</string>
@@@ -80,8 -80,6 +80,6 @@@
    <string name="filedetails_download">Преузми</string>
    <string name="filedetails_renamed_in_upload_msg">Фајл је преименован у %1$s током отпремања</string>
    <string name="list_layout">Распоред листе</string>
-   <string name="action_share_file">Веза дељења</string>
-   <string name="action_unshare_file">Не дели везом</string>
    <string name="common_yes">Да</string>
    <string name="common_no">Не</string>
    <string name="common_ok">У реду</string>
    <string name="unfavorite">Неомиљени</string>
    <string name="common_rename">Преименуј</string>
    <string name="common_remove">Уклони</string>
 -  <string name="confirmation_remove_alert">Желите да уклоните %1$s?</string>
 +  <string name="confirmation_remove_file_alert">Желите да уклоните %1$s?</string>
    <string name="confirmation_remove_folder_alert">Желите да уклоните %1$s и њен садржај?</string>
    <string name="confirmation_remove_local">Само локално</string>
    <string name="confirmation_remove_folder_local">Само локално</string>
@@@ -73,8 -73,6 +73,6 @@@
    <string name="filedetails_modified">Ändrad:</string>
    <string name="filedetails_download">Ladda ner</string>
    <string name="filedetails_renamed_in_upload_msg">Filen bytte namn till %1$s under uppladdningen</string>
-   <string name="action_share_file">Dela länk</string>
-   <string name="action_unshare_file">Sluta dela länk</string>
    <string name="common_yes">Ja</string>
    <string name="common_no">Nej</string>
    <string name="common_ok">OK</string>
    <string name="unfavorite">Avfavoritisera</string>
    <string name="common_rename">Byt namn</string>
    <string name="common_remove">Radera</string>
 -  <string name="confirmation_remove_alert">Vill du verkligen ta bort %1$s?</string>
 +  <string name="confirmation_remove_file_alert">Vill du verkligen ta bort %1$s?</string>
    <string name="confirmation_remove_folder_alert">Vill du verkligen ta bort %1$s och dess innehåll?</string>
    <string name="confirmation_remove_local">Endast lokalt</string>
    <string name="confirmation_remove_folder_local">Endast lokalt</string>
@@@ -82,9 -82,6 +82,6 @@@
    <string name="filedetails_sync_file">ประสานข้อมูล</string>
    <string name="filedetails_renamed_in_upload_msg">ไฟล์ได้ถูกเปลี่ยนชื่อเป็น %1$s ในระหว่างการอัพโหลด</string>
    <string name="list_layout">เค้าโครงรายการ</string>
-   <string name="action_share_file">แชร์ลิงค์</string>
-   <string name="action_unshare_file">ยกเลิกการแชร์ลิงค์</string>
-   <string name="action_share_with_users">แชร์กับผู้ใช้</string>
    <string name="common_yes">ตกลง</string>
    <string name="common_no">ไม่ตกลง</string>
    <string name="common_ok">ตกลง</string>
    <string name="unfavorite">ออกจากรายการโปรด</string>
    <string name="common_rename">เปลี่ยนชื่อ</string>
    <string name="common_remove">ลบออก</string>
 -  <string name="confirmation_remove_alert">คุณต้องการที่จะลบ %1$s?</string>
 +  <string name="confirmation_remove_file_alert">คุณต้องการที่จะลบ %1$s?</string>
    <string name="confirmation_remove_folder_alert">คุณต้องการที่จะลบ %1$s และเนื้อหาของมัน?</string>
    <string name="confirmation_remove_local">เฉพาะต้นทางเท่านั้น</string>
    <string name="confirmation_remove_folder_local">เฉพาะต้นทางเท่านั้น</string>
    <string name="file_list__footer__files_and_folder">%1$d ไฟล์, 1 โฟลเดอร์</string>
    <string name="file_list__footer__files_and_folders">%1$d ไฟล์, %2$d โฟลเดอร์</string>
    <string name="share_dialog_title">การแชร์ข้อมูล</string>
-   <string name="share_with_user_section_title">แชร์ไปยังผู้ใช้หรือกลุ่ม</string>
    <string name="share_no_users">ยังไม่มีข้อมูลที่แชร์กับผู้ใช้ในตอนนี้</string>
    <string name="share_add_user_or_group">เพิ่มผู้ใช่หรือกลุ่ม</string>
    <string name="share_search">ค้นหา</string>
@@@ -71,6 -71,7 +71,7 @@@
    <string name="file_list_seconds_ago">saniyeler önce</string>
    <string name="file_list_empty">Burada hiçbir şey yok. Bir şeyler yükleyin!</string>
    <string name="file_list_loading">Yükleniyor...</string>
+   <string name="file_list_no_app_for_file_type">Dosya tipi için uygulama bulunamadı!</string>
    <string name="local_file_list_empty">Bu klasörde dosya yok.</string>
    <string name="filedetails_select_file">Ek bilgileri görmek için dosyaya dokunun.</string>
    <string name="filedetails_size">Boyut:</string>
    <string name="filedetails_created">Oluşturulma:</string>
    <string name="filedetails_modified">Değiştirilme:</string>
    <string name="filedetails_download">İndir</string>
+   <string name="filedetails_sync_file">Eşitleme</string>
    <string name="filedetails_renamed_in_upload_msg">Dosya adı, yükleme sırasında %1$s olarak değiştirildi</string>
    <string name="list_layout">Liste Yerleşimi</string>
-   <string name="action_share_file">Paylaşma bağlantısı</string>
-   <string name="action_unshare_file">Bağlantı paylaşımını kaldır</string>
    <string name="common_yes">Evet</string>
    <string name="common_no">Hayır</string>
    <string name="common_ok">Tamam</string>
+   <string name="common_cancel_sync">Eşitlemeyi iptal et</string>
    <string name="common_cancel">İptal</string>
    <string name="common_save_exit">Kaydet ve Çık</string>
    <string name="common_error">Hata</string>
    <string name="unfavorite">Favoriden kaldır</string>
    <string name="common_rename">Yeniden adlandır</string>
    <string name="common_remove">Kaldır</string>
 -  <string name="confirmation_remove_alert">Gerçekten %1$s dosyasını kaldırmak istiyor musunuz?</string>
 +  <string name="confirmation_remove_file_alert">Gerçekten %1$s dosyasını kaldırmak istiyor musunuz?</string>
    <string name="confirmation_remove_folder_alert">Gerçekten %1$s ve içeriğini kaldırmak istediğinizden emin misiniz?</string>
    <string name="confirmation_remove_local">Sadece yerel</string>
    <string name="confirmation_remove_folder_local">Sadece yerel</string>
 -  <string name="confirmation_remove_remote">Sunucudan</string>
 +  <string name="confirmation_remove_file_remote">Sunucudan</string>
    <string name="confirmation_remove_remote_and_local">Uzak ve yerel</string>
    <string name="remove_success_msg">Kaldırma başarılı</string>
    <string name="remove_fail_msg">Kaldırma başarısız</string>
    <string name="ssl_validator_label_validity_to">Bitiş:</string>
    <string name="ssl_validator_label_signature">İmza:</string>
    <string name="ssl_validator_label_signature_algorithm">Algoritma:</string>
+   <string name="digest_algorithm_not_available">Özümlenen algoritma telefonunuz için mevcut değil</string>
+   <string name="ssl_validator_label_certificate_fingerprint">Parmak izi:</string>
+   <string name="certificate_load_problem">Sertifika yüklemesinde problem var.</string>
    <string name="ssl_validator_null_cert">Sertifika gösterilemedi.</string>
    <string name="ssl_validator_no_info_about_error">- Hata hakkında bilgi yok</string>
    <string name="placeholder_sentence">Bu bir yer tutucudur</string>
    <string name="prefs_category_instant_uploading">Anında Yüklemeler</string>
    <string name="prefs_category_security">Güvenlik</string>
    <string name="prefs_instant_video_upload_path_title">Video Yükleme Yolu</string>
+   <string name="sync_folder_failed_content">%1$s klasörünün eşitlemesi tamamlanamadı</string>
    <string name="shared_subject_header">sizinle</string>
    <string name="with_you_subject_header">paylaştı</string>
    <string name="subject_user_shared_with_you">%1$s, sizinle \"%2$s\" paylaşımını yaptı</string>
    <string name="file_list__footer__files_and_folder">%1$d dosya, 1 klasör</string>
    <string name="file_list__footer__files_and_folders">%1$d dosya, %2$d klasör</string>
    <string name="share_dialog_title">Paylaşım</string>
+   <string name="share_no_users">Henüz kullanıcılara paylaşılan veri yok</string>
+   <string name="share_add_user_or_group">Kullanıcı veya Grup ekle</string>
    <string name="share_search">Ara</string>
+   <string name="search_users_and_groups_hint">Kullanıcı ve Grupları Ara</string>
+   <string name="share_group_clarification">%1$s (grup)</string>
+   <string name="share_sharee_unavailable">Üzgünüz sunucu versiyonunuz istemcilerdeki kullanıcılara paylaşıma izin vermiyor.
+ \nLütfen yöneticinize başvurun</string>
  </resources>
@@@ -81,8 -81,6 +81,6 @@@
    <string name="filedetails_download">Завантажити</string>
    <string name="filedetails_renamed_in_upload_msg">Файл був переіменований в %1$s протягом вивантаження</string>
    <string name="list_layout">Вигляд списку</string>
-   <string name="action_share_file">Опублікувати посилання</string>
-   <string name="action_unshare_file">Видалити посилання</string>
    <string name="common_yes">Так</string>
    <string name="common_no">Ні</string>
    <string name="common_ok">OK</string>
    <string name="unfavorite">Прибрати з вибраного</string>
    <string name="common_rename">Перейменувати</string>
    <string name="common_remove">Видалити</string>
 -  <string name="confirmation_remove_alert">Ви дійсно бажаєте видалити %1$s?</string>
 +  <string name="confirmation_remove_file_alert">Ви дійсно бажаєте видалити %1$s?</string>
    <string name="confirmation_remove_folder_alert">Ви дійсно бажаєте видалити %1$s та весь вміст?</string>
    <string name="confirmation_remove_local">Лише локально</string>
    <string name="confirmation_remove_folder_local">Лише локально</string>
@@@ -81,8 -81,6 +81,6 @@@
    <string name="filedetails_download">下载</string>
    <string name="filedetails_renamed_in_upload_msg">上传过程中文件被更名为了 %1$s</string>
    <string name="list_layout">列表布局</string>
-   <string name="action_share_file">分享链接</string>
-   <string name="action_unshare_file">取消分享链接</string>
    <string name="common_yes">是</string>
    <string name="common_no">否</string>
    <string name="common_ok">确定</string>
    <string name="unfavorite">取消收藏</string>
    <string name="common_rename">重命名</string>
    <string name="common_remove">删除</string>
 -  <string name="confirmation_remove_alert">你确定要删除 %1$s 吗?</string>
 +  <string name="confirmation_remove_file_alert">你确定要删除 %1$s 吗?</string>
    <string name="confirmation_remove_folder_alert">您确定要删除 %1$s 及其内容吗?</string>
    <string name="confirmation_remove_local">仅本地</string>
    <string name="confirmation_remove_folder_local">仅本地</string>
 -  <string name="confirmation_remove_remote">来自服务器</string>
 +  <string name="confirmation_remove_file_remote">来自服务器</string>
    <string name="confirmation_remove_remote_and_local">远程 &amp; 本地</string>
    <string name="remove_success_msg">成功删除</string>
    <string name="remove_fail_msg">无法完成删除</string>
@@@ -80,8 -80,6 +80,6 @@@
    <string name="filedetails_download">下載</string>
    <string name="filedetails_renamed_in_upload_msg">檔案名稱在上傳時已被更改為 %1$s</string>
    <string name="list_layout">列表版型</string>
-   <string name="action_share_file">分享連結</string>
-   <string name="action_unshare_file">取消共享連結</string>
    <string name="common_yes">是</string>
    <string name="common_no">否</string>
    <string name="common_ok">好</string>
    <string name="unfavorite">不喜愛的</string>
    <string name="common_rename">重新命名</string>
    <string name="common_remove">移除</string>
 -  <string name="confirmation_remove_alert">您真的要移除 %1$s ?</string>
 +  <string name="confirmation_remove_file_alert">您真的要移除 %1$s ?</string>
    <string name="confirmation_remove_folder_alert">您真的要移除 %1$s 與裡頭的檔案?</string>
    <string name="confirmation_remove_local">只有本地</string>
    <string name="confirmation_remove_folder_local">只有本地</string>
 -  <string name="confirmation_remove_remote">來自伺服器</string>
 +  <string name="confirmation_remove_file_remote">來自伺服器</string>
    <string name="confirmation_remove_remote_and_local">遠端 &amp; 本地</string>
    <string name="remove_success_msg">成功地移除</string>
    <string name="remove_fail_msg">刪除失敗</string>
    <string name="file_list__footer__files_and_folder">%1$d 個檔案, 1 個資料夾</string>
    <string name="file_list__footer__files_and_folders">%1$d 個檔案, %2$d 個資料夾</string>
    <string name="share_dialog_title">分享</string>
-   <string name="share_with_user_section_title">與用戶或群組分享</string>
    <string name="share_no_users">目前沒有任何您分享的內容</string>
    <string name="share_add_user_or_group">新增使用者或是群組</string>
    <string name="share_search">搜尋</string>
diff --combined res/values/strings.xml
@@@ -23,7 -23,8 +23,7 @@@
      <!-- TODO re-enable when "Accounts" is available in Navigation Drawer -->
      <!--<string name="drawer_item_accounts">Accounts</string>-->
      <string name="drawer_item_all_files">All files</string>
 -    <!-- TODO re-enable when "On Device" is available
 -    <string name="drawer_item_on_device">On device</string>-->
 +    <string name="drawer_item_on_device">On device</string>
      <string name="drawer_item_settings">Settings</string>
      <string name="drawer_item_logs">Logs</string>
        <string name="drawer_close">Close</string>
@@@ -61,7 -62,7 +61,7 @@@
      <string name="setup_btn_connect">Connect</string>
      <string name="uploader_btn_upload_text">Upload</string>
      <string name="uploader_btn_new_folder_text">New folder</string>
 -    <string name="uploader_top_message">Choose upload folder:</string>
 +    <string name="uploader_top_message">Choose upload folder</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>
@@@ -84,9 -85,7 +84,7 @@@
      <string name="filedetails_sync_file">Synchronize</string>
      <string name="filedetails_renamed_in_upload_msg">File was renamed to %1$s during upload</string>
      <string name="list_layout">List Layout</string>
-     <string name="action_share_file">Share link</string>
-     <string name="action_unshare_file">Unshare link</string>
-     <string name="action_share_with_users">Share with users</string>
+     <string name="action_share">Share</string>
      <string name="common_yes">Yes</string>
      <string name="common_no">No</string>
      <string name="common_ok">OK</string>
      <string name="unfavorite">Unfavorite</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_file_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 only</string>
 -    <string name="confirmation_remove_remote">From server</string>
 +    <string name="confirmation_remove_file_remote">From server</string>
      <string name="confirmation_remove_remote_and_local">Remote &amp; local</string>
      <string name="remove_success_msg">"Removal succeeded"</string>
      <string name="remove_fail_msg">"Removal failed"</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_video_upload_on_wifi">Upload videos via WiFi only</string>
 +    
 +    <string name="instant_upload_on_wifi">Upload pictures via wifi only</string>
 +    <string name="instant_upload_on_charging">Upload when charging only</string>
 +    <string name="instant_video_upload_on_wifi">Upload videos via wifi only</string>
 +    <string name="instant_video_upload_on_charging">Upload when charging only</string>
      <string name="instant_upload_path">/InstantUpload</string>
      <string name="conflict_title">File conflict</string>
      <string name="conflict_message">Which files do you want to keep? If you select both versions, the local file will have a number added to its name.</string>
      <string name="preview_image_error_unknown_format">This image cannot be shown</string>
  
      <string name="error__upload__local_file_not_copied">%1$s could not be copied to %2$s local folder</string>
 -    <string name="prefs_instant_upload_path_title">Upload Path</string>
 +    <string name="prefs_instant_upload_path_title">Upload path</string>
  
        <string name="share_link_no_support_share_api">Sorry, sharing is not enabled on your server. Please contact your
                administrator.</string>
        <string name="share_link_file_error">An error occurred while trying to share this file or folder</string>
        <string name="unshare_link_file_no_exist">Unable to unshare. Please check whether the file exists</string>
        <string name="unshare_link_file_error">An error occurred while trying to unshare this file or folder</string>
+     <string name="update_link_file_no_exist">Unable to update. Please check whether the file exists </string>
+     <string name="update_link_file_error">An error occurred while trying to update the shared link</string>
      <string name="share_link_password_title">Enter a password</string>
      <string name="share_link_empty_password">You must enter a password</string>
  
      <string name="forbidden_permissions_delete">to delete this file</string>
      <string name="share_link_forbidden_permissions">to share this file</string>
      <string name="unshare_link_forbidden_permissions">to unshare this file</string>
+     <string name="update_link_forbidden_permissions">to update this shared link</string>
      <string name="forbidden_permissions_create">to create the file</string>
      <string name="uploader_upload_forbidden_permissions">to upload in this folder</string>
      <string name="downloader_download_file_not_found">The file is no longer available on the server</string>
  
 +    <string name="file_migration_finish_button">Finish</string>
 +    <string name="file_migration_preparing">Preparing for migration...</string>
 +    <string name="file_migration_checking_destination">Checking destination...</string>
 +    <string name="file_migration_saving_accounts_configuration">Saving accounts configuration...</string>
 +    <string name="file_migration_waiting_for_unfinished_sync">Waiting for unfinished synchronizations...</string>
 +    <string name="file_migration_migrating">Moving data...</string>
 +    <string name="file_migration_updating_index">Updating index...</string>
 +    <string name="file_migration_cleaning">Cleaning...</string>
 +    <string name="file_migration_restoring_accounts_configuration">Restoring accounts configuration...</string>
 +    <string name="file_migration_ok_finished">Finished</string>
 +    <string name="file_migration_failed_not_enough_space">ERROR: Not enough space</string>
 +    <string name="file_migration_failed_not_writable">ERROR: File is not writable</string>
 +    <string name="file_migration_failed_not_readable">ERROR: File is not readable</string>
 +    <string name="file_migration_failed_dir_already_exists">ERROR: owncloud directory already exists</string>
 +    <string name="file_migration_failed_while_coping">ERROR: While migrating</string>
 +    <string name="file_migration_failed_while_updating_index">ERROR: While updating index</string>
 +
      <string name="prefs_category_accounts">Accounts</string>
      <string name="prefs_add_account">Add account</string>
      <string name="auth_redirect_non_secure_connection_title">Secure connection is redirected through an unsecured route.</string>
      <string name="prefs_category_instant_uploading">Instant Uploads</string>
        <string name="prefs_category_security">Security</string>
  
 -      <string name="prefs_instant_video_upload_path_title">Upload Video Path</string>
 +      <string name="prefs_instant_video_upload_path_title">Upload video path</string>
 +    <string name="download_folder_failed_content">Download of %1$s folder could not be completed</string>
      <string name="sync_folder_failed_content">Synchronization of %1$s folder could not be completed</string>
  
        <string name="shared_subject_header">shared</string>
      <string name="file_list__footer__files">%1$d files</string>
      <string name="file_list__footer__files_and_folder">%1$d files, 1 folder</string>
      <string name="file_list__footer__files_and_folders">%1$d files, %2$d folders</string>
 +    <string name="action_switch_grid_view">Switch to grid view</string>
 +    <string name="action_switch_list_view">Switch to list view</string>
 +    <string name="common_category">Common</string>
 +    <string name="pref_cache_size">Cache size</string>
 +    <string name="prefs_instant_behaviour_dialogTitle">Upload file to server and ...</string>
 +    <string name="prefs_instant_behaviour_title">Behaviour</string>
 +    <string name="upload_copy_files">Copy file</string>
 +    <string name="upload_move_files">Move file</string>
 +    <string name="prefs_storage_path">Storage path</string>
 +    <string name="prefs_common">Common</string>
 +
 +    <string name="pref_behaviour_entries_do_nothing">do nothing</string>
 +    <string name="pref_behaviour_entries_copy">copy file to OC folder</string>
 +    <string name="pref_behaviour_entries_move">move file to OC folder</string>
 +    <string name="pref_behaviour_entries_delete">delete origin file</string>
 +    <string name="confirmation_remove_files_alert">Do you really want to remove selected items?</string>
 +    <string name="confirmation_remove_folders_alert">Do you really want to remove a folder and its content?</string>
 +    <string name="confirmation_remove_files">selected items</string>
 +    <string name="error_log_exit">Exit</string>
 +    <string name="error_log_send">Send Log</string>
 +    <string name="error_log_title">Error Log</string>
 +    <string name="action_stream_file">Stream file with external player</string>
 +    <string name="stream_expose_password">Do you want to stream this file with an external app?\n\nCAUTION: This may expose your password!</string>
 +    <string name="set_picture_as">Set picture as</string>
 +    <string name="set_as">Set As</string>
  
      <string name="share_dialog_title">Sharing</string>
-     <string name="share_with_user_section_title">Share with Users and Groups</string>
+     <string name="share_with_user_section_title">Share with users and groups</string>
      <string name="share_no_users">No data shared with users yet</string>
      <string name="share_add_user_or_group">Add User or Group</string>
+     <string name="share_via_link_section_title">Share link</string>
+     <string name="share_via_link_expiration_date_label">Set expiration date</string>
+     <string name="share_via_link_password_label">Password protect</string>
+     <string name="share_via_link_password_title">Secured</string>
+     <string name="share_get_public_link_button">Get link</string>
      <string name="share_search">Search</string>
  
      <string name="search_users_and_groups_hint">Search users and groups</string>
  
      <string name="share_sharee_unavailable">Sorry, your server version does not allow share with users within clients.
          \nPlease contact your administrator</string>
 +    <string name="changelog">https://github.com/owncloud/android/raw/beta/CHANGELOG.md</string>
  
  </resources>
  
  package com.owncloud.android.datamodel;
  
- import java.io.File;
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.Collections;
- import java.util.HashSet;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Set;
- import java.util.Vector;
  import android.accounts.Account;
  import android.content.ContentProviderClient;
  import android.content.ContentProviderOperation;
@@@ -53,6 -43,21 +43,21 @@@ import com.owncloud.android.lib.resourc
  import com.owncloud.android.lib.resources.status.OCCapability;
  import com.owncloud.android.utils.FileStorageUtils;
  
+ import java.io.File;
+ import java.io.FileInputStream;
+ import java.io.FileOutputStream;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.OutputStream;
+ import java.util.ArrayList;
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.List;
+ import java.util.Set;
+ import java.util.Vector;
  public class FileDataStorageManager {
  
      public static final int ROOT_PARENT_ID = 0;
      }
  
  
 -    public Vector<OCFile> getFolderContent(OCFile f/*, boolean onlyOnDevice*/) {
 +    public Vector<OCFile> getFolderContent(OCFile f, boolean onlyOnDevice) {
          if (f != null && f.isFolder() && f.getFileId() != -1) {
 -            // TODO Enable when "On Device" is recovered ?
 -            return getFolderContent(f.getFileId()/*, onlyOnDevice*/);
 +            return getFolderContent(f.getFileId(), onlyOnDevice);
  
          } else {
              return new Vector<OCFile>();
      }
  
  
 -    public Vector<OCFile> getFolderImages(OCFile folder/*, boolean onlyOnDevice*/) {
 -        Vector<OCFile> ret = new Vector<OCFile>();
 +    public Vector<OCFile> getFolderImages(OCFile folder, boolean onlyOnDevice) {
 +        Vector<OCFile> ret = new Vector<OCFile>(); 
          if (folder != null) {
              // TODO better implementation, filtering in the access to database instead of here
 -            // TODO Enable when "On Device" is recovered ?
 -            Vector<OCFile> tmp = getFolderContent(folder/*, onlyOnDevice*/);
 -            OCFile current = null;
 +            Vector<OCFile> tmp = getFolderContent(folder, onlyOnDevice);
 +            OCFile current = null; 
              for (int i=0; i<tmp.size(); i++) {
                  current = tmp.get(i);
                  if (current.isImage()) {
          File localFolder = new File(localFolderPath);
          if (localFolder.exists()) {
              // stage 1: remove the local files already registered in the files database
 -            // TODO Enable when "On Device" is recovered ?
 -            Vector<OCFile> files = getFolderContent(folder.getFileId()/*, false*/);
 +            Vector<OCFile> files = getFolderContent(folder.getFileId(), false);
              if (files != null) {
                  for (OCFile file : files) {
                      if (file.isFolder()) {
                  if (!targetFolder.exists()) {
                      targetFolder.mkdirs();
                  }
 -                copied = copyFile(localFile, targetFile);
 +                copied = FileStorageUtils.copyFile(localFile, targetFile);
              }
              Log_OC.d(TAG, "Local file COPIED : " + copied);
          }
      }
  
 -    private boolean copyFile(File src, File target) {
 -        boolean ret = true;
 +    public void migrateStoredFiles(String srcPath, String dstPath) throws Exception {
 +        Cursor c = null;
 +        if (getContentResolver() != null) {
 +            c = getContentResolver().query(ProviderTableMeta.CONTENT_URI_FILE,
 +                    null,
 +                    ProviderTableMeta.FILE_STORAGE_PATH  + " IS NOT NULL",
 +                    null,
 +                    null);
 +
 +        } else {
 +            try {
 +                c = getContentProviderClient().query(ProviderTableMeta.CONTENT_URI_FILE,
 +                        new String[]{ProviderTableMeta._ID, ProviderTableMeta.FILE_STORAGE_PATH},
 +                        ProviderTableMeta.FILE_STORAGE_PATH + " IS NOT NULL",
 +                        null,
 +                        null);
 +            } catch (RemoteException e) {
 +                Log_OC.e(TAG, e.getMessage());
 +                throw e;
 +            }
 +        }
 +
 +        ArrayList<ContentProviderOperation> operations =
 +                new ArrayList<ContentProviderOperation>(c.getCount());
 +        if (c.moveToFirst()) {
 +            do {
 +                ContentValues cv = new ContentValues();
 +                long fileId = c.getLong(c.getColumnIndex(ProviderTableMeta._ID));
 +                String oldFileStoragePath = c.getString(c.getColumnIndex(ProviderTableMeta.FILE_STORAGE_PATH));
 +
 +                if (oldFileStoragePath.startsWith(srcPath)) {
  
 -        InputStream in = null;
 -        OutputStream out = null;
 +                    cv.put(
 +                            ProviderTableMeta.FILE_STORAGE_PATH,
 +                            oldFileStoragePath.replaceFirst(srcPath, dstPath));
  
 +                    operations.add(
 +                            ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI).
 +                                    withValues(cv).
 +                                    withSelection(
 +                                            ProviderTableMeta._ID + "=?",
 +                                            new String[]{String.valueOf(fileId)}
 +                                    )
 +                                    .build());
 +                }
 +
 +            } while (c.moveToNext());
 +        }
 +        c.close();
 +
 +        /// 3. apply updates in batch
          try {
 -            in = new FileInputStream(src);
 -            out = new FileOutputStream(target);
 -            byte[] buf = new byte[1024];
 -            int len;
 -            while ((len = in.read(buf)) > 0) {
 -                out.write(buf, 0, len);
 -            }
 -        } catch (IOException ex) {
 -            ret = false;
 -        } finally {
 -            if (in != null) try {
 -                in.close();
 -            } catch (IOException e) {
 -                e.printStackTrace(System.err);
 -            }
 -            if (out != null) try {
 -                out.close();
 -            } catch (IOException e) {
 -                e.printStackTrace(System.err);
 +            if (getContentResolver() != null) {
 +                getContentResolver().applyBatch(MainApp.getAuthority(), operations);
 +
 +            } else {
 +                getContentProviderClient().applyBatch(operations);
              }
 -        }
  
 -        return ret;
 +        } catch (Exception e) {
 +            throw e;
 +        }
      }
  
 -
 -    private Vector<OCFile> getFolderContent(long parentId/*, boolean onlyOnDevice*/) {
 +    
 +    private Vector<OCFile> getFolderContent(long parentId, boolean onlyOnDevice) {
  
          Vector<OCFile> ret = new Vector<OCFile>();
  
          if (c.moveToFirst()) {
              do {
                  OCFile child = createFileInstance(c);
 -                // TODO Enable when "On Device" is recovered ?
 -                // if (child.isFolder() || !onlyOnDevice || onlyOnDevice && child.isDown()){
 -                ret.add(child);
 -                // }
 +                 if (child.isFolder() || !onlyOnDevice || onlyOnDevice && child.isDown()){
 +                    ret.add(child);
 +                 }
              } while (c.moveToNext());
          }
  
          );
          cv.put(ProviderTableMeta.OCSHARES_IS_DIRECTORY, share.isFolder() ? 1 : 0);
          cv.put(ProviderTableMeta.OCSHARES_USER_ID, share.getUserId());
-         cv.put(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, share.getIdRemoteShared());
+         cv.put(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, share.getRemoteId());
          cv.put(ProviderTableMeta.OCSHARES_ACCOUNT_OWNER, mAccount.name);
  
-         if (shareExists(share.getIdRemoteShared())) {// for renamed files; no more delete and create
+         if (shareExists(share.getRemoteId())) {// for renamed files; no more delete and create
              overriden = true;
              if (getContentResolver() != null) {
                  getContentResolver().update(ProviderTableMeta.CONTENT_URI_SHARE, cv,
                          ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED + "=?",
-                         new String[]{String.valueOf(share.getIdRemoteShared())});
+                         new String[]{String.valueOf(share.getRemoteId())});
              } else {
                  try {
                      getContentProviderClient().update(ProviderTableMeta.CONTENT_URI_SHARE,
                              cv, ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED + "=?",
-                             new String[]{String.valueOf(share.getIdRemoteShared())});
+                             new String[]{String.valueOf(share.getRemoteId())});
                  } catch (RemoteException e) {
                      Log_OC.e(TAG,
                              "Fail to insert insert file to database "
      }
  
  
+     /**
+      * Get first share bound to a file with a known path and given {@link ShareType}.
+      *
+      * @param path          Path of the file.
+      * @param type          Type of the share to get
+      * @param shareWith     Target of the share. Ignored in type is {@link ShareType#PUBLIC_LINK}
+      * @return              First {@OCShare} instance found in DB bound to the file in 'path'
+      */
      public OCShare getFirstShareByPathAndType(String path, ShareType type, String shareWith) {
          Cursor c = null;
+         if (shareWith == null) {
+             shareWith = "";
+         }
  
          String selection = ProviderTableMeta.OCSHARES_PATH + "=? AND "
                  + ProviderTableMeta.OCSHARES_SHARE_TYPE + "=? AND "
-                 + ProviderTableMeta.OCSHARES_SHARE_WITH + "=? AND "
                  + ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?" ;
+         if (!ShareType.PUBLIC_LINK.equals(type)) {
+             selection += " AND " + ProviderTableMeta.OCSHARES_SHARE_WITH + "=?";
+         }
  
-         String [] selectionArgs =  new String[]{path, Integer.toString(type.getValue()),
-                 shareWith, mAccount.name};
+         String [] selectionArgs;
+         if (ShareType.PUBLIC_LINK.equals(type)) {
+             selectionArgs = new String[]{
+                     path,
+                     Integer.toString(type.getValue()),
+                     mAccount.name
+             };
+         } else {
+             selectionArgs = new String[]{
+                     path,
+                     Integer.toString(type.getValue()),
+                     mAccount.name,
+                     shareWith
+             };
+         }
  
          if (getContentResolver() != null) {
              c = getContentResolver().query(
                  );
                  cv.put(ProviderTableMeta.OCSHARES_IS_DIRECTORY, share.isFolder() ? 1 : 0);
                  cv.put(ProviderTableMeta.OCSHARES_USER_ID, share.getUserId());
-                 cv.put(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, share.getIdRemoteShared());
+                 cv.put(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, share.getRemoteId());
                  cv.put(ProviderTableMeta.OCSHARES_ACCOUNT_OWNER, mAccount.name);
  
-                 if (shareExists(share.getIdRemoteShared())) {
+                 if (shareExists(share.getRemoteId())) {
                      // updating an existing file
                      operations.add(
                              ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI_SHARE).
                                      withValues(cv).
                                      withSelection(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED + "=?",
-                                             new String[]{String.valueOf(share.getIdRemoteShared())})
+                                             new String[]{String.valueOf(share.getRemoteId())})
                                      .build());
                  } else {
                      // adding a new file
  //        updateSharedFiles(sharedFiles);
      }
  
+     public void removeSharesForFile(String remotePath) {
+         resetShareFlagInAFile(remotePath);
+         ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();
+         operations = prepareRemoveSharesInFile(remotePath, operations);
+         // apply operations in batch
+         if (operations.size() > 0) {
+             Log_OC.d(TAG, "Sending " + operations.size() + " operations to FileContentProvider");
+             try {
+                 if (getContentResolver() != null) {
+                     getContentResolver().applyBatch(MainApp.getAuthority(), operations);
+                 } else {
+                     getContentProviderClient().applyBatch(operations);
+                 }
+             } catch (OperationApplicationException e) {
+                 Log_OC.e(TAG, "Exception in batch of operations " + e.getMessage());
+             } catch (RemoteException e) {
+                 Log_OC.e(TAG, "Exception in batch of operations  " + e.getMessage());
+             }
+         }
+     }
  
      public void saveSharesInFolder(ArrayList<OCShare> shares, OCFile folder) {
          resetShareFlagsInFolder(folder);
                  );
                  cv.put(ProviderTableMeta.OCSHARES_IS_DIRECTORY, share.isFolder() ? 1 : 0);
                  cv.put(ProviderTableMeta.OCSHARES_USER_ID, share.getUserId());
-                 cv.put(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, share.getIdRemoteShared());
+                 cv.put(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, share.getRemoteId());
                  cv.put(ProviderTableMeta.OCSHARES_ACCOUNT_OWNER, mAccount.name);
  
                  // adding a new share resource
                      + ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?";
              String [] whereArgs = new String[]{ "", mAccount.name };
  
 -            // TODO Enable when "On Device" is recovered ?
 -            Vector<OCFile> files = getFolderContent(folder /*, false*/);
 -
 +            Vector<OCFile> files = getFolderContent(folder, false);
 +            
              for (OCFile file : files) {
                  whereArgs[0] = file.getRemotePath();
                  preparedOperations.add(
          return shares;
      }
  
 -    public void triggerMediaScan(String path) {
 -        Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
 -        intent.setData(Uri.fromFile(new File(path)));
 -        MainApp.getAppContext().sendBroadcast(intent);
 +    public static void triggerMediaScan(String path) {
 +        if (path != null) {
 +            Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
 +            intent.setData(Uri.fromFile(new File(path)));
 +            MainApp.getAppContext().sendBroadcast(intent);
 +        }
      }
  
      public void deleteFileInMediaScan(String path) {
  
          if (c.moveToFirst()) {
              capability = createCapabilityInstance(c);
+         } else {
+             capability = new OCCapability();    // return default with all UNKNOWN
          }
          c.close();
          return capability;
@@@ -184,34 -184,19 +184,19 @@@ public class FileMenuFilter 
          }
  
          // SHARE FILE
-         // TODO add check on SHARE available on server side?
          boolean shareAllowed = (mContext != null  &&
                  mContext.getString(R.string.share_feature).equalsIgnoreCase("on"));
-         if (!shareAllowed || mFile == null) {
-             toHide.add(R.id.action_share_file);
-         } else {
-             toShow.add(R.id.action_share_file);
-         }
-         // UNSHARE FILE
-         // TODO add check on SHARE available on server side?
-         if ( !shareAllowed || (mFile == null || !mFile.isSharedViaLink())) {
-             toHide.add(R.id.action_unshare_file);
-         } else {
-             toShow.add(R.id.action_unshare_file);
-         }
-         // SHARE FILE, with Users
          OCCapability capability = mComponentsGetter.getStorageManager().getCapability(mAccount.name);
          boolean shareApiEnabled  = capability != null &&
-                 (capability.getFilesSharingApiEnabled().isTrue() || capability.getFilesSharingApiEnabled().isUnknown());
-         if (!shareAllowed ||  mFile == null || !shareApiEnabled ) {
-             toHide.add(R.id.action_share_with_users);
+                 (capability.getFilesSharingApiEnabled().isTrue() ||
+                         capability.getFilesSharingApiEnabled().isUnknown()
+                 );
+         if (!shareAllowed ||  mFile == null || !shareApiEnabled) {
+             toHide.add(R.id.action_share_file);
          } else {
-             toShow.add(R.id.action_share_with_users);
+             toShow.add(R.id.action_share_file);
          }
  
          // SEE DETAILS
          if (mFile == null || mFile.isFolder()) {
              toHide.add(R.id.action_see_details);
              toShow.add(R.id.action_unfavorite_file);
          }
  
 +        // STREAM
 +        if (mFile != null && !mFile.isDown() && (mFile.isAudio() || mFile.isVideo())){
 +            toShow.add(R.id.action_stream_file);
 +        } else {
 +            toHide.add(R.id.action_stream_file);
 +        }
 +
 +        // SET PICTURE AS
 +        if (mFile == null || !mFile.isImage()){
 +            toHide.add(R.id.action_set_as_wallpaper);
 +        } else {
 +            toShow.add(R.id.action_set_as_wallpaper);
 +        }
 +
      }
  
  }
@@@ -25,20 -25,16 +25,20 @@@ import android.accounts.Account
  import android.content.ActivityNotFoundException;
  import android.content.Context;
  import android.content.Intent;
 +import android.graphics.Bitmap;
  import android.content.pm.PackageManager;
  import android.content.pm.ResolveInfo;
 +import android.graphics.Bitmap;
  import android.net.Uri;
  import android.support.v4.app.DialogFragment;
  import android.webkit.MimeTypeMap;
  import android.widget.Toast;
  
 +import com.owncloud.android.MainApp;
  import com.owncloud.android.R;
  import com.owncloud.android.authentication.AccountUtils;
  import com.owncloud.android.datamodel.OCFile;
 +import com.owncloud.android.datamodel.ThumbnailsCacheManager;
  import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
  import com.owncloud.android.files.services.FileUploader.FileUploaderBinder;
  import com.owncloud.android.lib.common.network.WebdavUtils;
@@@ -48,24 -44,11 +48,24 @@@ import com.owncloud.android.lib.resourc
  import com.owncloud.android.services.OperationsService;
  import com.owncloud.android.services.observer.FileObserverService;
  import com.owncloud.android.ui.activity.FileActivity;
 +import com.owncloud.android.ui.adapter.DiskLruImageCacheFileProvider;
  import com.owncloud.android.ui.activity.ShareActivity;
  import com.owncloud.android.ui.dialog.ShareLinkToDialog;
+ import com.owncloud.android.ui.dialog.SharePasswordDialogFragment;
  
- import org.apache.http.protocol.HTTP;
  
 +import java.io.File;
 +import java.util.List;
 +
 +import java.io.ByteArrayOutputStream;
 +import java.io.File;
 +import java.io.FileNotFoundException;
 +import java.io.FileOutputStream;
 +import java.io.IOException;
 +
 +import org.apache.http.protocol.HTTP;
 +
 +import java.util.ArrayList;
  import java.util.List;
  
  /**
@@@ -156,19 -139,32 +156,32 @@@ public class FileOperationsHelper 
                  .show();
      }
  
-     public void shareFileWithLink(OCFile file) {
  
+     /**
+      * Helper method to share a file via a public link. Starts a request to do it in {@link OperationsService}
+      *
+      * @param file          The file to share.
+      * @param password      Optional password to protect the public share.
+      */
+     public void shareFileViaLink(OCFile file, String password) {
          if (isSharedSupported()) {
              if (file != null) {
-                 String link = "https://fake.url";
-                 Intent intent = createShareWithLinkIntent(link);
-                 String[] packagesToExclude = new String[]{mFileActivity.getPackageName()};
-                 DialogFragment chooserDialog = ShareLinkToDialog.newInstance(intent,
-                         packagesToExclude, file);
-                 chooserDialog.show(mFileActivity.getSupportFragmentManager(), FTAG_CHOOSER_DIALOG);
+                 mFileActivity.showLoadingDialog(
+                         mFileActivity.getApplicationContext().
+                                 getString(R.string.wait_a_moment)
+                 );
+                 Intent service = new Intent(mFileActivity, OperationsService.class);
+                 service.setAction(OperationsService.ACTION_CREATE_SHARE_VIA_LINK);
+                 service.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
+                 if (password != null && password.length() > 0) {
+                     service.putExtra(OperationsService.EXTRA_SHARE_PASSWORD, password);
+                 }
+                 service.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath());
+                 mWaitingForOpId = mFileActivity.getOperationsServiceBinder().queueNewOperation(service);
  
              } else {
                  Log_OC.wtf(TAG, "Trying to share a NULL OCFile");
+                 // TODO user-level error?
              }
  
          } else {
          }
      }
  
+     public void getFileWithLink(OCFile file){
+         if (isSharedSupported()) {
+             if (file != null) {
+                 mFileActivity.showLoadingDialog(mFileActivity.getApplicationContext().
+                         getString(R.string.wait_a_moment));
+                 Intent service = new Intent(mFileActivity, OperationsService.class);
+                 service.setAction(OperationsService.ACTION_CREATE_SHARE_VIA_LINK);
+                 service.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
+                 service.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath());
+                 mWaitingForOpId = mFileActivity.getOperationsServiceBinder().queueNewOperation(service);
+             } else {
+                 Log_OC.wtf(TAG, "Trying to share a NULL OCFile");
+             }
+         } else {
+             // Show a Message
+             Toast t = Toast.makeText(
+                     mFileActivity, mFileActivity.getString(R.string.share_link_no_support_share_api),
+                     Toast.LENGTH_LONG
+             );
+             t.show();
+         }
+     }
  
      public void shareFileWithLinkToApp(OCFile file, String password, Intent sendIntent) {
          
              service.setAction(OperationsService.ACTION_CREATE_SHARE_VIA_LINK);
              service.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
              service.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath());
-             service.putExtra(OperationsService.EXTRA_PASSWORD_SHARE, password);
+             service.putExtra(OperationsService.EXTRA_SHARE_PASSWORD, password);
              service.putExtra(OperationsService.EXTRA_SEND_INTENT, sendIntent);
              mWaitingForOpId = mFileActivity.getOperationsServiceBinder().queueNewOperation(service);
              
          }
      }
  
-     private Intent createShareWithLinkIntent(String link) {
-         Intent intentToShareLink = new Intent(Intent.ACTION_SEND);
-         intentToShareLink.putExtra(Intent.EXTRA_TEXT, link);
-         intentToShareLink.setType(HTTP.PLAIN_TEXT_TYPE);
-         return intentToShareLink;
-     }
      /**
-      * Helper method to share a file with a know sharee. Starts a request to do it in {@link OperationsService}
+      * Helper method to share a file with a known sharee. Starts a request to do it in {@link OperationsService}
       *
       * @param file          The file to share.
       * @param shareeName    Name (user name or group name) of the target sharee.
      }
  
  
-     public void unshareFileWithLink(OCFile file) {
+     /**
+      * Helper method to unshare a file publicly shared via link.
+      * Starts a request to do it in {@link OperationsService}
+      *
+      * @param file      The file to unshare.
+      */
+     public void unshareFileViaLink(OCFile file) {
  
          // Unshare the file: Create the intent
          Intent unshareService = new Intent(mFileActivity, OperationsService.class);
          unshareService.putExtra(OperationsService.EXTRA_SHARE_TYPE, ShareType.PUBLIC_LINK);
          unshareService.putExtra(OperationsService.EXTRA_SHARE_WITH, "");
  
-         unshareFile(unshareService);
+         queueShareIntent(unshareService);
      }
  
      public void unshareFileWithUserOrGroup(OCFile file, ShareType shareType, String userOrGroup){
          unshareService.putExtra(OperationsService.EXTRA_SHARE_TYPE, shareType);
          unshareService.putExtra(OperationsService.EXTRA_SHARE_WITH, userOrGroup);
  
-         unshareFile(unshareService);
+         queueShareIntent(unshareService);
      }
  
  
-     private void unshareFile(Intent unshareService){
+     private void queueShareIntent(Intent shareIntent){
          if (isSharedSupported()) {
              // Unshare the file
              mWaitingForOpId = mFileActivity.getOperationsServiceBinder().
-                     queueNewOperation(unshareService);
+                     queueNewOperation(shareIntent);
  
              mFileActivity.showLoadingDialog(mFileActivity.getApplicationContext().
                      getString(R.string.wait_a_moment));
  
  
      /**
+      * Starts a dialog that requests a password to the user to protect a share link.
+      *
+      * @param   file            File which public share will be protected by the requested password
+      * @param   createShare     When 'true', the request for password will be followed by the creation of a new
+      *                          public link; when 'false', a public share is assumed to exist, and the password
+      *                          is bound to it.
+      */
+     public void requestPasswordForShareViaLink(OCFile file, boolean createShare) {
+         SharePasswordDialogFragment dialog =
+                 SharePasswordDialogFragment.newInstance(file, createShare);
+         dialog.show(
+                 mFileActivity.getSupportFragmentManager(),
+                 SharePasswordDialogFragment.PASSWORD_FRAGMENT
+         );
+     }
+     /**
+      * Updates a public share on a file to set its password.
+      * Starts a request to do it in {@link OperationsService}
+      *
+      * @param file          File which public share will be protected with a password.
+      * @param password      Password to set for the public link; null or empty string to clear
+      *                      the current password
+      */
+     public void setPasswordToShareViaLink(OCFile file, String password) {
+         // Set password updating share
+         Intent updateShareIntent = new Intent(mFileActivity, OperationsService.class);
+         updateShareIntent.setAction(OperationsService.ACTION_UPDATE_SHARE);
+         updateShareIntent.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
+         updateShareIntent.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath());
+         updateShareIntent.putExtra(
+                 OperationsService.EXTRA_SHARE_PASSWORD,
+                 (password == null) ? "" : password
+         );
+         queueShareIntent(updateShareIntent);
+     }
+     /**
+      * Updates a public share on a file to set its expiration date.
+      * Starts a request to do it in {@link OperationsService}
+      *
+      * @param file                      File which public share will be constrained with an expiration date.
+      * @param expirationTimeInMillis    Expiration date to set. A negative value clears the current expiration
+      *                                  date, leaving the link unrestricted. Zero makes no change.
+      */
+     public void setExpirationDateToShareViaLink(OCFile file, long expirationTimeInMillis) {
+         Intent updateShareIntent = new Intent(mFileActivity, OperationsService.class);
+         updateShareIntent.setAction(OperationsService.ACTION_UPDATE_SHARE);
+         updateShareIntent.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
+         updateShareIntent.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath());
+         updateShareIntent.putExtra(
+                 OperationsService.EXTRA_SHARE_EXPIRATION_DATE_IN_MILLIS,
+                 expirationTimeInMillis
+         );
+         queueShareIntent(updateShareIntent);
+     }
+     /**
       * @return 'True' if the server supports the Search Users API
       */
      public boolean isSearchUsersSupportedSupported() {
  
              // Show dialog, without the own app
              String[] packagesToExclude = new String[]{mFileActivity.getPackageName()};
-             DialogFragment chooserDialog = ShareLinkToDialog.newInstance(sendIntent,
-                     packagesToExclude, file);
+             DialogFragment chooserDialog = ShareLinkToDialog.newInstance(sendIntent, packagesToExclude);
              chooserDialog.show(mFileActivity.getSupportFragmentManager(), FTAG_CHOOSER_DIALOG);
  
          } else {
          }
      }
  
 +    public void setPictureAs(OCFile file) {
 +        if (file != null){
 +            if (file.isDown()) {
 +                File externalFile = new File(file.getStoragePath());
 +                Uri sendUri = Uri.fromFile(externalFile);
 +                Intent intent = new Intent(Intent.ACTION_ATTACH_DATA);
 +                intent.setDataAndType(sendUri, file.getMimetype());
 +                intent.putExtra("mimeType", file.getMimetype());
 +                mFileActivity.startActivityForResult(Intent.createChooser(intent,
 +                                                    mFileActivity.getString(R.string.set_as)), 200);
 +            } else {
 +                // TODO re-enable after resized images is available
 +                Uri sendUri = Uri.parse("content://" + DiskLruImageCacheFileProvider.AUTHORITY + file.getRemotePath());
 +                Intent intent = new Intent(Intent.ACTION_ATTACH_DATA);
 +                intent.setDataAndType(sendUri, file.getMimetype());
 +                intent.putExtra("mimeType", file.getMimetype());
 +                mFileActivity.startActivityForResult(Intent.createChooser(intent, "Set As"), 200);
 +
 +//                Intent sendIntent = new Intent(android.content.Intent.ACTION_SEND);
 +//                // set MimeType
 +//                sendIntent.setType(file.getMimetype());
 +////            sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://" + DiskLruImageCacheFileProvider.AUTHORITY + "/#" + file.getRemoteId() + "#" + file.getFileName()));
 +//                sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://" + DiskLruImageCacheFileProvider.AUTHORITY + file.getRemotePath()));
 +//                sendIntent.putExtra(Intent.ACTION_SEND, true);      // Send Action
 +//
 +//                // Show dialog, without the own app
 +//                String[] packagesToExclude = new String[] { mFileActivity.getPackageName() };
 +//                DialogFragment chooserDialog = ShareLinkToDialog.newInstance(sendIntent, packagesToExclude, file);
 +//                chooserDialog.show(mFileActivity.getSupportFragmentManager(), FTAG_CHOOSER_DIALOG);
 +            }
 +        } else {
 +            Log_OC.wtf(TAG, "Trying to send a NULL OCFile");
 +        }
 +    }
 +
 +    public void sendCachedImage(OCFile file) {
 +        if (file != null) {
 +            Intent sendIntent = new Intent(android.content.Intent.ACTION_SEND);
 +            // set MimeType
 +            sendIntent.setType(file.getMimetype());
 +//            sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://" + DiskLruImageCacheFileProvider.AUTHORITY + "/#" + file.getRemoteId() + "#" + file.getFileName()));
 +            sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://" + DiskLruImageCacheFileProvider.AUTHORITY + file.getRemotePath()));
 +            sendIntent.putExtra(Intent.ACTION_SEND, true);      // Send Action
 +
 +            // Show dialog, without the own app
 +            String[] packagesToExclude = new String[] { mFileActivity.getPackageName() };
 +            DialogFragment chooserDialog = ShareLinkToDialog.newInstance(sendIntent, packagesToExclude, file);
 +            chooserDialog.show(mFileActivity.getSupportFragmentManager(), FTAG_CHOOSER_DIALOG);
 +        } else {
 +            Log_OC.wtf(TAG, "Trying to send a NULL OCFile");
 +        }
 +    }
 +
 +    public void syncFiles(ArrayList<OCFile> files) {
 +        for (OCFile file: files) {
 +            syncFile(file);
 +        }
 +    }
 +
      /**
       * Request the synchronization of a file or folder with the OC server, including its contents.
       *
          }
      }
  
 +    public void toggleFavorites(ArrayList<OCFile> files, boolean isFavorite){
 +        for (OCFile file: files) {
 +            toggleFavorite(file, isFavorite);
 +        }
 +    }
 +
      public void toggleFavorite(OCFile file, boolean isFavorite) {
          file.setFavorite(isFavorite);
          mFileActivity.getStorageManager().saveFile(file);
          service.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
          mWaitingForOpId =  mFileActivity.getOperationsServiceBinder().queueNewOperation(service);
  
 -        mFileActivity.showLoadingDialog(mFileActivity.getApplicationContext().
 -                getString(R.string.wait_a_moment));
 +        // TODO Tobi loading dialog?
 +//        mFileActivity.showLoadingDialog(mFileActivity.getApplicationContext().
 +//                getString(R.string.wait_a_moment));
      }
  
      /**
          }
          return false;
      }
  }
@@@ -197,7 -197,7 +197,7 @@@ public class RefreshFolderOperation ext
                  result = fetchAndSyncRemoteFolder(client);
              } else {
                  fetchFavoritesToSyncFromLocalData();
 -                mChildren = mStorageManager.getFolderContent(mLocalFolder/*, false*/);
 +                mChildren = mStorageManager.getFolderContent(mLocalFolder, false);
              }
  
              if (result.isSuccess()) {
          GetCapabilitiesOperarion getCapabilities = new GetCapabilitiesOperarion();
          RemoteOperationResult  result = getCapabilities.execute(mStorageManager,mContext);
          if (!result.isSuccess()){
-             Log_OC.d(TAG, "Update Capabilities unsuccessfully");
+             Log_OC.w(TAG, "Update Capabilities unsuccessfully");
          }
      }
  
          mFilesToSyncContents.clear();
  
          // get current data about local contents of the folder to synchronize
 -        // TODO Enable when "On Device" is recovered ?
 -        List<OCFile> localFiles = mStorageManager.getFolderContent(mLocalFolder/*, false*/);
 +        List<OCFile> localFiles = mStorageManager.getFolderContent(mLocalFolder, false);
          Map<String, OCFile> localFilesMap = new HashMap<String, OCFile>(localFiles.size());
          for (OCFile file : localFiles) {
              localFilesMap.put(file.getRemotePath(), file);
  
  
      private void fetchFavoritesToSyncFromLocalData() {
 -        List<OCFile> children = mStorageManager.getFolderContent(mLocalFolder);
 +        List<OCFile> children = mStorageManager.getFolderContent(mLocalFolder, false);
          for (OCFile child : children) {
              if (!child.isFolder() && child.isFavorite()) {
                  SynchronizeFileOperation operation = new SynchronizeFileOperation(
@@@ -67,12 -67,14 +67,14 @@@ import com.owncloud.android.lib.common.
  import com.owncloud.android.lib.common.operations.RemoteOperationResult;
  import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
  import com.owncloud.android.lib.common.utils.Log_OC;
+ import com.owncloud.android.lib.resources.status.OCCapability;
  import com.owncloud.android.operations.CreateShareViaLinkOperation;
  import com.owncloud.android.operations.CreateShareWithShareeOperation;
  import com.owncloud.android.operations.GetSharesForFileOperation;
  import com.owncloud.android.operations.SynchronizeFileOperation;
  import com.owncloud.android.operations.SynchronizeFolderOperation;
  import com.owncloud.android.operations.UnshareOperation;
+ import com.owncloud.android.operations.UpdateShareViaLinkOperation;
  import com.owncloud.android.services.OperationsService;
  import com.owncloud.android.services.OperationsService.OperationsServiceBinder;
  import com.owncloud.android.ui.NavigationDrawerItem;
@@@ -93,8 -95,6 +95,6 @@@ public class FileActivity extends AppCo
  
      public static final String EXTRA_FILE = "com.owncloud.android.ui.activity.FILE";
      public static final String EXTRA_ACCOUNT = "com.owncloud.android.ui.activity.ACCOUNT";
-     public static final String EXTRA_WAITING_TO_PREVIEW =
-             "com.owncloud.android.ui.activity.WAITING_TO_PREVIEW";
      public static final String EXTRA_FROM_NOTIFICATION =
              "com.owncloud.android.ui.activity.FROM_NOTIFICATION";
  
      /** OwnCloud {@link Account} where the main {@link OCFile} handled by the activity is located.*/
      private Account mAccount;
  
-     /** Main {@link OCFile} handled by the activity.*/
+     /** Capabilites of the server where {@link #mAccount} lives */
+      private OCCapability mCapabilities;
+      /** Main {@link OCFile} handled by the activity.*/
      private OCFile mFile;
  
      /** Flag to signal that the activity will is finishing to enforce the creation of an ownCloud
       * {@link Account} */
      private boolean mRedirectingToSetupAccount = false;
  
      private OperationsServiceBinder mOperationsServiceBinder = null;
  
+     private boolean mResumed = false;
      protected FileDownloaderBinder mDownloaderBinder = null;
      protected FileUploaderBinder mUploaderBinder = null;
      private ServiceConnection mDownloadServiceConnection, mUploadServiceConnection = null;
  
-     private boolean mTryShareAgain = false;
      // Navigation Drawer
      protected DrawerLayout mDrawerLayout;
      protected ActionBarDrawerToggle mDrawerToggle;
      protected NavigationDrawerListAdapter mNavigationDrawerAdapter = null;
  
  
      // TODO re-enable when "Accounts" is available in Navigation Drawer
  //    protected boolean mShowAccounts = false;
  
              mFileOperationsHelper.setOpIdWaitingFor(
                      savedInstanceState.getLong(KEY_WAITING_FOR_OP_ID, Long.MAX_VALUE)
                      );
-             mTryShareAgain = savedInstanceState.getBoolean(KEY_TRY_SHARE_AGAIN);
              if (getSupportActionBar() != null) {
                  getSupportActionBar().setTitle(savedInstanceState.getString(KEY_ACTION_BAR_TITLE));
              }
      @Override
      protected void onResume() {
          super.onResume();
+         mResumed = true;
          if (mOperationsServiceBinder != null) {
              doOnResumeAndBound();
          }
          if (mOperationsServiceBinder != null) {
              mOperationsServiceBinder.removeOperationListener(this);
          }
+         mResumed = false;
          super.onPause();
      }
  
  //        }
  
          // Display username in drawer
 -        Account account = AccountUtils.getCurrentOwnCloudAccount(getApplicationContext());
 -        if (account != null) {
 -            TextView username = (TextView) navigationDrawerLayout.findViewById(R.id.drawer_username);
 -            int lastAtPos = account.name.lastIndexOf("@");
 -            username.setText(account.name.substring(0, lastAtPos));
 -        }
 +        setUsernameInDrawer(navigationDrawerLayout, AccountUtils.getCurrentOwnCloudAccount(getApplicationContext()));
  
          // load slide menu items
          mDrawerTitles = getResources().getStringArray(R.array.drawer_items);
          mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[0], mDrawerContentDescriptions[0],
                  R.drawable.ic_folder_open));
  
 -        // TODO Enable when "On Device" is recovered
          // On Device
 -        //mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[2],
 -        //        mDrawerContentDescriptions[2]));
 +        mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[1], mDrawerContentDescriptions[1],
 +                R.drawable.ic_action_download_grey));
  
          // Settings
 -        mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[1], mDrawerContentDescriptions[1],
 -                R.drawable.ic_settings));
 +        mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[2], mDrawerContentDescriptions[2],
 +                R.drawable.ic_action_settings));
          // Logs
          if (BuildConfig.DEBUG) {
 -            mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[2],
 -                    mDrawerContentDescriptions[2],R.drawable.ic_log));
 +            mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[3],
 +                    mDrawerContentDescriptions[3],R.drawable.ic_log));
          }
  
          // setting the nav drawer list adapter
      }
  
      /**
 +     * sets the given account name in the drawer in case the drawer is available. The account name
 +     * is shortened beginning from the @-sign in the username.
 +     *
 +     * @param navigationDrawerLayout the drawer layout to be used
 +     * @param account                the account to be set in the drawer
 +     */
 +    protected void setUsernameInDrawer(RelativeLayout navigationDrawerLayout, Account account) {
 +        if (navigationDrawerLayout != null && getAccount() != null) {
 +            TextView username = (TextView) navigationDrawerLayout.findViewById(R.id.drawer_username);
 +            int lastAtPos = account.name.lastIndexOf("@");
 +            username.setText(account.name.substring(0, lastAtPos));
 +        }
 +    }
 +
 +    /**
       * Updates title bar and home buttons (state and icon).
       *
       * Assumes that navigation drawer is NOT visible.
          outState.putParcelable(FileActivity.EXTRA_FILE, mFile);
          outState.putBoolean(FileActivity.EXTRA_FROM_NOTIFICATION, mFromNotification);
          outState.putLong(KEY_WAITING_FOR_OP_ID, mFileOperationsHelper.getOpIdWaitingFor());
-         outState.putBoolean(KEY_TRY_SHARE_AGAIN, mTryShareAgain);
          if(getSupportActionBar() != null && getSupportActionBar().getTitle() != null) {
              // Null check in case the actionbar is used in ActionBar.NAVIGATION_MODE_LIST
              // since it doesn't have a title then
          mAccount = account;
      }
  
+     /**
+      * Getter for the capabilities of the server where the current OC account lives.
+      *
+      * @return  Capabilities of the server where the current OC account lives. Null if the account is not
+      *          set yet.
+      */
+     public OCCapability getCapabilities() {
+         return mCapabilities;
+     }
      /**
       * @return Value of mFromNotification: True if the Activity is launched by a notification
       */
          return mRedirectingToSetupAccount;
      }
  
-     public boolean isTryShareAgain(){
-         return mTryShareAgain;
-     }
-     public void setTryShareAgain(boolean tryShareAgain) {
-        mTryShareAgain = tryShareAgain;
-     }
      public OperationsServiceBinder getOperationsServiceBinder() {
          return mOperationsServiceBinder;
      }
      protected void onAccountSet(boolean stateWasRecovered) {
          if (getAccount() != null) {
              mStorageManager = new FileDataStorageManager(getAccount(), getContentResolver());
+             mCapabilities = mStorageManager.getCapability(mAccount.name);
  
          } else {
              Log_OC.wtf(TAG, "onAccountChanged was called with NULL account associated!");
                          Toast.LENGTH_LONG);
                  t.show();
              }
-             mTryShareAgain = false;
  
          } else if (operation == null ||
                  operation instanceof CreateShareWithShareeOperation ||
                  operation instanceof UnshareOperation ||
-                 operation instanceof SynchronizeFolderOperation
+                 operation instanceof SynchronizeFolderOperation ||
+                 operation instanceof UpdateShareViaLinkOperation
                  ) {
              if (result.isSuccess()) {
                  updateFileFromDB();
              onSynchronizeFileOperationFinish((SynchronizeFileOperation) operation, result);
  
          } else if (operation instanceof GetSharesForFileOperation) {
-             if (result.isSuccess()) {
+             if (result.isSuccess() || result.getCode() == ResultCode.SHARE_NOT_FOUND) {
                  updateFileFromDB();
  
-             } else if (result.getCode() != ResultCode.SHARE_NOT_FOUND) {
+             } else {
                  Toast t = Toast.makeText(this,
                          ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()),
                          Toast.LENGTH_LONG);
      private void onCreateShareViaLinkOperationFinish(CreateShareViaLinkOperation operation,
                                                       RemoteOperationResult result) {
          if (result.isSuccess()) {
-             mTryShareAgain = false;
              updateFileFromDB();
  
              Intent sendIntent = operation.getSendIntentWithSubject(this);
-             startActivity(sendIntent);
+             if (sendIntent != null) {
+                 startActivity(sendIntent);
+             }
          } else {
              // Detect Failure (403) --> needs Password
              if (result.getCode() == ResultCode.SHARE_FORBIDDEN) {
-                 if (!isTryShareAgain()) {
+                 String password = operation.getPassword();
+                 if ((password == null || password.length() == 0) &&
+                     getCapabilities().getFilesSharingPublicEnabled().isUnknown())
+                     {
+                     // Was tried without password, but not sure that it's optional. Try with password.
+                     // Try with password before giving up.
+                     // See also ShareFileFragment#OnShareViaLinkListener
                      SharePasswordDialogFragment dialog =
-                             SharePasswordDialogFragment.newInstance(new OCFile(operation.getPath()),
-                                     operation.getSendIntent());
+                             SharePasswordDialogFragment.newInstance(new OCFile(operation.getPath()), true);
                      dialog.show(getSupportFragmentManager(), DIALOG_SHARE_PASSWORD);
                  } else {
                      Toast t = Toast.makeText(this,
                          ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()),
                          Toast.LENGTH_LONG);
                      t.show();
-                     mTryShareAgain = false;
                  }
              } else {
                  Toast t = Toast.makeText(this,
      public void dismissLoadingDialog() {
          Fragment frag = getSupportFragmentManager().findFragmentByTag(DIALOG_WAIT_TAG);
          if (frag != null) {
 +            Log_OC.d(TAG, "dismiss loading dialog");
              LoadingDialog loading = (LoadingDialog) frag;
              loading.dismiss();
          }
                  /*if (!mOperationsServiceBinder.isPerformingBlockingOperation()) {
                      dismissLoadingDialog();
                  }*/
-                 doOnResumeAndBound();
+                 if (mResumed) {
+                     doOnResumeAndBound();
+                 }
  
              } else {
                  return;
          startActivity(i);
      }
  
 +    public void refresh(){
 +        Intent i = new Intent(this, FileDisplayActivity.class);
 +        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
 +        startActivity(i);
 +    }
 +
  //    TODO re-enable when "Accounts" is available in Navigation Drawer
  //    public void closeDrawer() {
  //        mDrawerLayout.closeDrawers();
          restart();
      }
  
 +    public void refreshDirectory(){
 +        // overridden by FileDisplayActivity
 +    }
 +
      private class DrawerItemClickListener implements ListView.OnItemClickListener {
          @Override
          public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
  //                    break;
  
                  case 0: // All Files
 -                    allFilesOption();
 +                    MainApp.showOnlyFilesOnDevice(false);
 +                    refreshDirectory();
                      mDrawerLayout.closeDrawers();
                      break;
  
 -                // TODO Enable when "On Device" is recovered ?
 -//                case 2:
 -//                    MainApp.showOnlyFilesOnDevice(true);
 -//                    mDrawerLayout.closeDrawers();
 -//                    break;
 +                case 1: // On Device
 +                    MainApp.showOnlyFilesOnDevice(true);
 +                    refreshDirectory();
 +                    mDrawerLayout.closeDrawers();
 +                    break;
  
 -                case 1: // Settings
 +                case 2: // Settings
                      Intent settingsIntent = new Intent(getApplicationContext(),
                              Preferences.class);
                      startActivity(settingsIntent);
                      mDrawerLayout.closeDrawers();
                      break;
  
 -                case 2: // Logs
 +                case 3: // Logs
                      Intent loggerIntent = new Intent(getApplicationContext(),
                              LogHistoryActivity.class);
                      startActivity(loggerIntent);
@@@ -26,8 -26,6 +26,8 @@@ import android.accounts.Account
  import android.accounts.AccountManager;
  import android.accounts.AuthenticatorException;
  import android.annotation.TargetApi;
 +import android.os.Parcelable;
 +import android.support.v7.app.AlertDialog;
  import android.content.BroadcastReceiver;
  import android.content.ComponentName;
  import android.content.ContentResolver;
@@@ -51,6 -49,7 +51,7 @@@ import android.support.v4.app.FragmentM
  import android.support.v4.app.FragmentTransaction;
  import android.support.v4.content.ContextCompat;
  import android.support.v4.view.GravityCompat;
+ import android.support.v7.app.AlertDialog;
  import android.view.Menu;
  import android.view.MenuInflater;
  import android.view.MenuItem;
@@@ -80,14 -79,11 +81,11 @@@ import com.owncloud.android.lib.common.
  import com.owncloud.android.lib.common.utils.Log_OC;
  import com.owncloud.android.operations.CopyFileOperation;
  import com.owncloud.android.operations.CreateFolderOperation;
- import com.owncloud.android.operations.CreateShareViaLinkOperation;
- import com.owncloud.android.operations.CreateShareWithShareeOperation;
  import com.owncloud.android.operations.MoveFileOperation;
  import com.owncloud.android.operations.RefreshFolderOperation;
  import com.owncloud.android.operations.RemoveFileOperation;
  import com.owncloud.android.operations.RenameFileOperation;
  import com.owncloud.android.operations.SynchronizeFileOperation;
- import com.owncloud.android.operations.UnshareOperation;
  import com.owncloud.android.services.observer.FileObserverService;
  import com.owncloud.android.syncadapter.FileSyncAdapter;
  import com.owncloud.android.ui.dialog.ConfirmationDialogFragment;
@@@ -109,8 -105,6 +107,8 @@@ import com.owncloud.android.utils.FileS
  import com.owncloud.android.utils.UriUtils;
  
  import java.io.File;
 +import java.util.ArrayList;
 +import java.util.Iterator;
  
  /**
   * Displays, what files the user has available in his ownCloud.
@@@ -151,14 -145,13 +149,14 @@@ public class FileDisplayActivity extend
      private boolean mSyncInProgress = false;
  
      private static String DIALOG_UNTRUSTED_CERT = "DIALOG_UNTRUSTED_CERT";
 -    private static String DIALOG_CREATE_FOLDER = "DIALOG_CREATE_FOLDER";
 +    public static String DIALOG_CREATE_FOLDER = "DIALOG_CREATE_FOLDER";
      private static String DIALOG_UPLOAD_SOURCE = "DIALOG_UPLOAD_SOURCE";
      private static String DIALOG_CERT_NOT_SAVED = "DIALOG_CERT_NOT_SAVED";
  
      private OCFile mWaitingToSend;
 +    private Menu mOptionsMenu;
 +
  
 -    
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          Log_OC.v(TAG, "onCreate() start");
              setFile(file);
  
              if (mAccountWasSet) {
 -                RelativeLayout navigationDrawerLayout = (RelativeLayout) findViewById(R.id.left_drawer);
 -                if (navigationDrawerLayout != null && getAccount() != null) {
 -                    TextView username = (TextView) navigationDrawerLayout.findViewById(R.id.drawer_username);
 -                    int lastAtPos = getAccount().name.lastIndexOf("@");
 -                    username.setText(getAccount().name.substring(0, lastAtPos));
 -                }
 +                setUsernameInDrawer((RelativeLayout) findViewById(R.id.left_drawer), getAccount());
              }
  
              if (!stateWasRecovered) {
              /// First fragment
              OCFileListFragment listOfFiles = getListOfFilesFragment();
              if (listOfFiles != null) {
 -                listOfFiles.listDirectory(getCurrentDir());
 -                // TODO Enable when "On Device" is recovered
 -                // listOfFiles.listDirectory(getCurrentDir(), MainApp.getOnlyOnDevice());
 -
 +                listOfFiles.listDirectory(getCurrentDir(), MainApp.getOnlyOnDevice());
              } else {
                  Log_OC.e(TAG, "Still have a chance to lose the initializacion of list fragment >(");
              }
                      startTextPreview(file);
              }
  
 +            switchLayout(getFile());
 +
          } else {
              Log_OC.wtf(TAG, "initFragments() called with invalid NULLs!");
              if (getAccount() == null) {
          }
      }
  
 +    private void switchLayout(OCFile file){
 +        if (DisplayUtils.isGridView(file, getStorageManager())){
 +            switchToGridView();
 +        } else {
 +            switchToListView();
 +        }
 +    }
 +
      private Fragment chooseInitialSecondFragment(OCFile file) {
          Fragment secondFragment = null;
          if (file != null && !file.isFolder()) {
      protected void refreshListOfFilesFragment() {
          OCFileListFragment fileListFragment = getListOfFilesFragment();
          if (fileListFragment != null) {
 -            fileListFragment.listDirectory();
 -            // TODO Enable when "On Device" is recovered ?
 -            // fileListFragment.listDirectory(MainApp.getOnlyOnDevice());
 +            fileListFragment.listDirectory(MainApp.getOnlyOnDevice());
          }
      }
  
      @Override
      public boolean onPrepareOptionsMenu(Menu menu) {
          boolean drawerOpen = mDrawerLayout.isDrawerOpen(GravityCompat.START);
 -        menu.findItem(R.id.action_upload).setVisible(!drawerOpen);
 -        menu.findItem(R.id.action_create_dir).setVisible(!drawerOpen);
          menu.findItem(R.id.action_sort).setVisible(!drawerOpen);
          menu.findItem(R.id.action_sync_account).setVisible(!drawerOpen);
 +        menu.findItem(R.id.action_switch_view).setVisible(!drawerOpen);
          
          return super.onPrepareOptionsMenu(menu);
      }
      public boolean onCreateOptionsMenu(Menu menu) {
          MenuInflater inflater = getMenuInflater();
          inflater.inflate(R.menu.main_menu, menu);
 +        menu.findItem(R.id.action_create_dir).setVisible(false);
 +        mOptionsMenu = menu;
 +
 +        MenuItem menuItem = mOptionsMenu.findItem(R.id.action_switch_view);
 +
 +        changeGridIcon();
 +
          return true;
      }
      
      public boolean onOptionsItemSelected(MenuItem item) {
          boolean retval = true;
          switch (item.getItemId()) {
 -            case R.id.action_create_dir: {
 -                CreateFolderDialogFragment dialog =
 -                        CreateFolderDialogFragment.newInstance(getCurrentDir());
 -                dialog.show(getSupportFragmentManager(), DIALOG_CREATE_FOLDER);
 -                break;
 -            }
 -
              case R.id.action_sync_account: {
                  startSynchronization();
                  break;
              }
 -            case R.id.action_upload: {
 -                UploadSourceDialogFragment dialog =
 -                        UploadSourceDialogFragment.newInstance(getAccount());
 -                dialog.show(getSupportFragmentManager(), DIALOG_UPLOAD_SOURCE);
 -                break;
 -            }
              case android.R.id.home: {
                  FileFragment second = getSecondFragment();
                  OCFile currentDir = getCurrentDir();
                  builder.create().show();
                  break;
              }
 +            case R.id.action_switch_view:{
 +                if (isGridView()){
 +                    item.setTitle(getApplicationContext().getString(R.string.action_switch_grid_view));
 +                    item.setIcon(ContextCompat.getDrawable(getApplicationContext(),
 +                            R.drawable.ic_view_module));
 +                    DisplayUtils.setViewMode(getFile(), false);
 +                    switchToListView();
 +                } else {
 +                    item.setTitle(getApplicationContext().getString(R.string.action_switch_list_view));
 +                    item.setIcon(ContextCompat.getDrawable(getApplicationContext(),
 +                            R.drawable.ic_view_list));
 +                    DisplayUtils.setViewMode(getFile(), true);
 +                    switchToGridView();
 +                }
 +
 +                return true;
 +            }
          default:
              retval = super.onOptionsItemSelected(item);
          }
          return retval;
      }
  
 +    public void createFolder() {
 +        CreateFolderDialogFragment dialog =
 +                CreateFolderDialogFragment.newInstance(getCurrentDir());
 +        dialog.show(getSupportFragmentManager(), DIALOG_CREATE_FOLDER);
 +    }
 +
 +    public void uploadLocalFilesSelected() {
 +        Intent action = new Intent(this, UploadFilesActivity.class);
 +        action.putExtra(
 +                UploadFilesActivity.EXTRA_ACCOUNT,
 +                getAccount()
 +        );
 +        startActivityForResult(action, ACTION_SELECT_MULTIPLE_FILES);
 +    }
 +
 +    public void uploadFromOtherAppsSelected() {
 +        Intent action = new Intent(Intent.ACTION_GET_CONTENT);
 +        action = action.setType("*/*").addCategory(Intent.CATEGORY_OPENABLE);
 +        //Intent.EXTRA_ALLOW_MULTIPLE is only supported on api level 18+, Jelly Bean
 +        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
 +            action.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
 +        }
 +        startActivityForResult(
 +                Intent.createChooser(action, getString(R.string.upload_chooser_title)),
 +                ACTION_SELECT_CONTENT_FROM_APPS
 +        );
 +    }
 +
      private void startSynchronization() {
          Log_OC.d(TAG, "Got to start sync");
          if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.KITKAT) {
       */
      private void requestMoveOperation(Intent data, int resultCode) {
          OCFile folderToMoveAt = (OCFile) data.getParcelableExtra(FolderPickerActivity.EXTRA_FOLDER);
 -        OCFile targetFile = (OCFile) data.getParcelableExtra(FolderPickerActivity.EXTRA_FILE);
 -        getFileOperationsHelper().moveFile(folderToMoveAt, targetFile);
 +
 +        ArrayList<OCFile> files = data.getParcelableArrayListExtra(FolderPickerActivity.EXTRA_FILES);
 +
 +        for (Parcelable file : files) {
 +            getFileOperationsHelper().moveFile(folderToMoveAt, (OCFile) file);
 +        }
      }
  
      /**
       */
      private void requestCopyOperation(Intent data, int resultCode) {
          OCFile folderToMoveAt = data.getParcelableExtra(FolderPickerActivity.EXTRA_FOLDER);
 -        OCFile targetFile = data.getParcelableExtra(FolderPickerActivity.EXTRA_FILE);
 -        getFileOperationsHelper().copyFile(folderToMoveAt, targetFile);
 +
 +        ArrayList<OCFile> files = data.getParcelableArrayListExtra(FolderPickerActivity.EXTRA_FILES);
 +
 +        for (Parcelable file : files) {
 +            getFileOperationsHelper().copyFile(folderToMoveAt, (OCFile) file);
 +        }
      }
  
      @Override
      public void onBackPressed() {
 -        if (!isDrawerOpen()){
 +        boolean isFabOpen = isFabOpen();
 +        boolean isDrawerOpen = isDrawerOpen();
 +
 +        /*
 +         * BackPressed priority/hierarchy:
 +         *    1. close drawer if opened
 +         *    2. close FAB if open (only if drawer isn't open)
 +         *    3. navigate up (only if drawer and FAB aren't open)
 +         */
 +        if(isDrawerOpen && isFabOpen) {
 +            // close drawer first
 +            super.onBackPressed();
 +        } else if(isDrawerOpen && !isFabOpen) {
 +            // close drawer
 +            super.onBackPressed();
 +        } else if (!isDrawerOpen && isFabOpen) {
 +            // close fab
 +            getListOfFilesFragment().getFabMain().collapse();
 +        } else {
 +            // all closed
              OCFileListFragment listOfFiles = getListOfFilesFragment();
              if (mDualPane || getSecondFragment() == null) {
                  OCFile currentDir = getCurrentDir();
                  setFile(listOfFiles.getCurrentFile());
              }
              cleanSecondFragment();
 +            changeGridIcon();
 +        }
 +    }
 +
 +    private void changeGridIcon(){
 +        MenuItem menuItem = mOptionsMenu.findItem(R.id.action_switch_view);
 +        if (DisplayUtils.isGridView(getFile(), getStorageManager())){
 +            menuItem.setTitle(getApplicationContext().getString(R.string.action_switch_list_view));
 +            menuItem.setIcon(ContextCompat.getDrawable(getApplicationContext(),
 +                    R.drawable.ic_view_list));
          } else {
 -            super.onBackPressed();
 +            menuItem.setTitle(getApplicationContext().getString(R.string.action_switch_grid_view));
 +            menuItem.setIcon(ContextCompat.getDrawable(getApplicationContext(),
 +                    R.drawable.ic_view_module));
          }
      }
  
          Log_OC.v(TAG, "onPause() end");
      }
  
 +    public boolean isFabOpen() {
 +        if(getListOfFilesFragment() != null && getListOfFilesFragment().getFabMain() != null && getListOfFilesFragment().getFabMain().isExpanded()) {
 +            return true;
 +        } else {
 +            return false;
 +        }
 +    }
 +
  
      private class SyncBroadcastReceiver extends BroadcastReceiver {
  
                                      currentDir.getRemotePath().equals(synchFolderRemotePath)) {
                                  OCFileListFragment fileListFragment = getListOfFilesFragment();
                                  if (fileListFragment != null) {
 -                                    fileListFragment.listDirectory();
 -                                    // TODO Enable when "On Device" is recovered ?
 -                                    // fileListFragment.listDirectory(currentDir,
 -                                    // MainApp.getOnlyOnDevice());
 +                                    fileListFragment.listDirectory(currentDir,
 +                                    MainApp.getOnlyOnDevice());
                                  }
                              }
                              setFile(currentFile);
          OCFileListFragment listOfFiles = getListOfFilesFragment();
          if (listOfFiles != null) {  // should never be null, indeed
              OCFile root = getStorageManager().getFileByPath(OCFile.ROOT_PATH);
 -            listOfFiles.listDirectory(root);
 -            // TODO Enable when "On Device" is recovered ?
 -            // listOfFiles.listDirectory(root, MainApp.getOnlyOnDevice());
 +            listOfFiles.listDirectory(root, MainApp.getOnlyOnDevice());
              setFile(listOfFiles.getCurrentFile());
              startSyncFolderOperation(root, false);
          }
          cleanSecondFragment();
          // Sync Folder
          startSyncFolderOperation(directory, false);
 +
 +        MenuItem menuItem = mOptionsMenu.findItem(R.id.action_switch_view);
 +
 +        changeGridIcon();
 +        switchLayout(directory);
      }
  
      /**
              // getFileDownloadBinder() - THIS IS A MESS
              OCFileListFragment listOfFiles = getListOfFilesFragment();
              if (listOfFiles != null) {
 -                listOfFiles.listDirectory();
 -                // TODO Enable when "On Device" is recovered ?
 -                // listOfFiles.listDirectory(MainApp.getOnlyOnDevice());
 +                listOfFiles.listDirectory(MainApp.getOnlyOnDevice());
              }
              FileFragment secondFragment = getSecondFragment();
              if (secondFragment != null && secondFragment instanceof FileDetailFragment) {
          } else if (operation instanceof CreateFolderOperation) {
              onCreateFolderOperationFinish((CreateFolderOperation) operation, result);
  
-         } else if (operation instanceof CreateShareViaLinkOperation ||
-                     operation instanceof CreateShareWithShareeOperation ) {
-             refreshShowDetails();
-             refreshListOfFilesFragment();
-         } else if (operation instanceof UnshareOperation) {
-             onUnshareLinkOperationFinish((UnshareOperation) operation, result);
          } else if (operation instanceof MoveFileOperation) {
              onMoveFileOperationFinish((MoveFileOperation) operation, result);
  
  
      }
  
-     private void onUnshareLinkOperationFinish(UnshareOperation operation,
-                                               RemoteOperationResult result) {
-         if (result.isSuccess()) {
-             refreshShowDetails();
-             refreshListOfFilesFragment();
-         } else if (result.getCode() == ResultCode.SHARE_NOT_FOUND) {
-             cleanSecondFragment();
-             refreshListOfFilesFragment();
-         }
-     }
      private void refreshShowDetails() {
          FileFragment details = getSecondFragment();
          if (details != null) {
      private void sortByName(boolean ascending) {
          getListOfFilesFragment().sortByName(ascending);
      }
 +    private boolean isGridView(){ return getListOfFilesFragment().isGridView(); }
 +    private void switchToGridView() {
 +        getListOfFilesFragment().switchToGridView();
 +    }
 +    private void switchToListView() {
 +        getListOfFilesFragment().switchToListView();
 +    }
  
     public void allFilesOption() {
         browseToRoot();
     }
 +
 +    public void refreshDirectory(){
 +        getListOfFilesFragment().refreshDirectory();
 +    }
  }
@@@ -217,24 -217,6 +217,24 @@@ public class FileDetailFragment extend
              item.setVisible(false);
              item.setEnabled(false);
          }
 +
 +        item = menu.findItem(R.id.action_switch_view);
 +        if (item != null){
 +            item.setVisible(false);
 +            item.setEnabled(false);
 +        }
 +
 +        item = menu.findItem(R.id.action_sync_account);
 +        if (item != null) {
 +            item.setVisible(false);
 +            item.setEnabled(false);
 +        }
 +
 +        item = menu.findItem(R.id.action_sort);
 +        if (item != null) {
 +            item.setVisible(false);
 +            item.setEnabled(false);
 +        }
      }
  
  
      public boolean onOptionsItemSelected(MenuItem item) {
          switch (item.getItemId()) {
              case R.id.action_share_file: {
-                 mContainerActivity.getFileOperationsHelper().shareFileWithLink(getFile());
-                 return true;
-             }
-             case R.id.action_share_with_users: {
                  mContainerActivity.getFileOperationsHelper().showShareFile(getFile());
                  return true;
              }
-             case R.id.action_unshare_file: {
-                 mContainerActivity.getFileOperationsHelper().unshareFileWithLink(getFile());
-                 return true;
-             }
              case R.id.action_open_file_with: {
                  mContainerActivity.getFileOperationsHelper().openFile(getFile());
                  return true;
   */
  package com.owncloud.android.ui.fragment;
  
 +import android.accounts.Account;
  import android.app.Activity;
 +import android.content.Context;
 +import android.content.DialogInterface;
  import android.content.Intent;
 +import android.content.SharedPreferences;
 +import android.os.Build;
 +import android.net.Uri;
  import android.os.Bundle;
 +import android.preference.PreferenceManager;
  import android.support.v4.widget.SwipeRefreshLayout;
 +import android.view.ActionMode;
 +import android.support.v7.app.AlertDialog;
  import android.view.ContextMenu;
  import android.view.Menu;
  import android.view.MenuInflater;
  import android.view.MenuItem;
  import android.view.View;
 +import android.widget.AbsListView;
  import android.widget.AdapterView;
  import android.widget.AdapterView.AdapterContextMenuInfo;
  import android.widget.PopupMenu;
 +import android.widget.TextView;
 +import android.widget.Toast;
  
 +import com.owncloud.android.MainApp;
  import com.owncloud.android.R;
  import com.owncloud.android.authentication.AccountUtils;
  import com.owncloud.android.datamodel.FileDataStorageManager;
@@@ -55,37 -42,29 +55,37 @@@ import com.owncloud.android.datamodel.O
  import com.owncloud.android.files.FileMenuFilter;
  import com.owncloud.android.lib.common.utils.Log_OC;
  import com.owncloud.android.lib.resources.status.OwnCloudVersion;
 +import com.owncloud.android.media.MediaService;
  import com.owncloud.android.ui.activity.FileActivity;
  import com.owncloud.android.ui.activity.FileDisplayActivity;
  import com.owncloud.android.ui.activity.FolderPickerActivity;
  import com.owncloud.android.ui.activity.OnEnforceableRefreshListener;
 +import com.owncloud.android.ui.activity.UploadFilesActivity;
  import com.owncloud.android.ui.adapter.FileListListAdapter;
  import com.owncloud.android.ui.dialog.ConfirmationDialogFragment;
 +import com.owncloud.android.ui.dialog.CreateFolderDialogFragment;
  import com.owncloud.android.ui.dialog.FileActionsDialogFragment;
  import com.owncloud.android.ui.dialog.RemoveFileDialogFragment;
 +import com.owncloud.android.ui.dialog.RemoveFilesDialogFragment;
  import com.owncloud.android.ui.dialog.RenameFileDialogFragment;
 +import com.owncloud.android.ui.dialog.UploadSourceDialogFragment;
  import com.owncloud.android.ui.preview.PreviewImageFragment;
  import com.owncloud.android.ui.preview.PreviewMediaFragment;
 +import com.owncloud.android.utils.DisplayUtils;
 +import com.owncloud.android.utils.ExceptionHandler;
 +import com.owncloud.android.utils.FileStorageUtils;
  import com.owncloud.android.ui.preview.PreviewTextFragment;
  import com.owncloud.android.utils.FileStorageUtils;
  
  import java.io.File;
 +import java.util.ArrayList;
  
  /**
   * A Fragment that lists all files and folders in a given path.
   *
   * TODO refactor to get rid of direct dependency on FileDisplayActivity
   */
 -public class OCFileListFragment extends ExtendedListFragment
 -        implements FileActionsDialogFragment.FileActionsDialogFragmentListener {
 +public class OCFileListFragment extends ExtendedListFragment {
      
      private static final String TAG = OCFileListFragment.class.getSimpleName();
  
  
      public final static String ARG_JUST_FOLDERS = MY_PACKAGE + ".JUST_FOLDERS";
      public final static String ARG_ALLOW_CONTEXTUAL_ACTIONS = MY_PACKAGE + ".ALLOW_CONTEXTUAL";
 +    public final static String ARG_HIDE_FAB = MY_PACKAGE + ".HIDE_FAB";
  
      private static final String KEY_FILE = MY_PACKAGE + ".extra.FILE";
 +    private static final String KEY_FAB_EVER_CLICKED = "FAB_EVER_CLICKED";
 +
 +    private static String DIALOG_CREATE_FOLDER = "DIALOG_CREATE_FOLDER";
  
      private FileFragment.ContainerActivity mContainerActivity;
  
      private boolean mJustFolders;
      
      private OCFile mTargetFile;
 -    
 -   
 +
 +    private boolean miniFabClicked = false;
      
      /**
       * {@inheritDoc}
          setListAdapter(mAdapter);
  
          registerLongClickListener();
 +
 +        boolean hideFab = (args != null) && args.getBoolean(ARG_HIDE_FAB, false);
 +        if (hideFab) {
 +            setFabEnabled(false);
 +        } else {
 +            setFabEnabled(true);
 +            registerFabListeners();
 +
 +            // detect if a mini FAB has ever been clicked
 +            final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
 +            if(prefs.getLong(KEY_FAB_EVER_CLICKED, 0) > 0) {
 +                miniFabClicked = true;
 +            }
 +
 +            // add labels to the min FABs when none of them has ever been clicked on
 +            if(!miniFabClicked) {
 +                setFabLabels();
 +            } else {
 +                removeFabLabels();
 +            }
 +        }
    }
  
 +    /**
 +     * adds labels to all mini FABs.
 +     */
 +    private void setFabLabels() {
 +        getFabUpload().setTitle(getResources().getString(R.string.actionbar_upload));
 +        getFabMkdir().setTitle(getResources().getString(R.string.actionbar_mkdir));
 +        getFabUploadFromApp().setTitle(getResources().getString(R.string.actionbar_upload_from_apps));
 +    }
 +
 +    /**
 +     * registers all listeners on all mini FABs.
 +     */
 +    private void registerFabListeners() {
 +        registerFabUploadListeners();
 +        registerFabMkDirListeners();
 +        registerFabUploadFromAppListeners();
 +    }
 +
 +    /**
 +     * registers {@link android.view.View.OnClickListener} and {@link android.view.View.OnLongClickListener}
 +     * on the Upload mini FAB for the linked action and {@link Toast} showing the underlying action.
 +     */
 +    private void registerFabUploadListeners() {
 +        getFabUpload().setOnClickListener(new View.OnClickListener() {
 +            @Override
 +            public void onClick(View v) {
 +                Intent action = new Intent(getActivity(), UploadFilesActivity.class);
 +                action.putExtra(
 +                        UploadFilesActivity.EXTRA_ACCOUNT,
 +                        ((FileActivity) getActivity()).getAccount()
 +                );
 +                getActivity().startActivityForResult(action, UploadSourceDialogFragment.ACTION_SELECT_MULTIPLE_FILES);
 +                getFabMain().collapse();
 +                recordMiniFabClick();
 +            }
 +        });
 +
 +        getFabUpload().setOnLongClickListener(new View.OnLongClickListener() {
 +            @Override
 +            public boolean onLongClick(View v) {
 +                Toast.makeText(getActivity(), R.string.actionbar_upload, Toast.LENGTH_SHORT).show();
 +                return true;
 +            }
 +        });
 +    }
 +
 +    /**
 +     * registers {@link android.view.View.OnClickListener} and {@link android.view.View.OnLongClickListener}
 +     * on the 'Create Dir' mini FAB for the linked action and {@link Toast} showing the underlying action.
 +     */
 +    private void registerFabMkDirListeners() {
 +        getFabMkdir().setOnClickListener(new View.OnClickListener() {
 +            @Override
 +            public void onClick(View v) {
 +                CreateFolderDialogFragment dialog =
 +                        CreateFolderDialogFragment.newInstance(mFile);
 +                dialog.show(getActivity().getSupportFragmentManager(), FileDisplayActivity.DIALOG_CREATE_FOLDER);
 +                getFabMain().collapse();
 +                recordMiniFabClick();
 +            }
 +        });
 +
 +        getFabMkdir().setOnLongClickListener(new View.OnLongClickListener() {
 +            @Override
 +            public boolean onLongClick(View v) {
 +                Toast.makeText(getActivity(), R.string.actionbar_mkdir, Toast.LENGTH_SHORT).show();
 +                return true;
 +            }
 +        });
 +    }
 +
 +    /**
 +     * registers {@link android.view.View.OnClickListener} and {@link android.view.View.OnLongClickListener}
 +     * on the Upload from App mini FAB for the linked action and {@link Toast} showing the underlying action.
 +     */
 +    private void registerFabUploadFromAppListeners() {
 +        getFabUploadFromApp().setOnClickListener(new View.OnClickListener() {
 +            @Override
 +            public void onClick(View v) {
 +                Intent action = new Intent(Intent.ACTION_GET_CONTENT);
 +                action = action.setType("*/*").addCategory(Intent.CATEGORY_OPENABLE);
 +
 +                //Intent.EXTRA_ALLOW_MULTIPLE is only supported on api level 18+, Jelly Bean
 +                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
 +                    action.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
 +                }
 +
 +                getActivity().startActivityForResult(
 +                        Intent.createChooser(action, getString(R.string.upload_chooser_title)),
 +                        UploadSourceDialogFragment.ACTION_SELECT_CONTENT_FROM_APPS
 +                );
 +                getFabMain().collapse();
 +                recordMiniFabClick();
 +            }
 +        });
 +
 +        getFabUploadFromApp().setOnLongClickListener(new View.OnLongClickListener() {
 +            @Override
 +            public boolean onLongClick(View v) {
 +                Toast.makeText(getActivity(),
 +                        R.string.actionbar_upload_from_apps,
 +                        Toast.LENGTH_SHORT).show();
 +                return true;
 +            }
 +        });
 +    }
 +
 +    /**
 +     * records a click on a mini FAB and thus:
 +     * <ol>
 +     *     <li>persists the click fact</li>
 +     *     <li>removes the mini FAB labels</li>
 +     * </ol>
 +     */
 +    private void recordMiniFabClick() {
 +        // only record if it hasn't been done already at some other time
 +        if(!miniFabClicked) {
 +            final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity());
 +            sp.edit().putLong(KEY_FAB_EVER_CLICKED, 1).commit();
 +            miniFabClicked = true;
 +        }
 +    }
 +
 +    /**
 +     * removes the labels on all known min FABs.
 +     */
 +    private void removeFabLabels() {
 +        getFabUpload().setTitle(null);
 +        getFabMkdir().setTitle(null);
 +        getFabUploadFromApp().setTitle(null);
 +        ((TextView) getFabUpload().getTag(com.getbase.floatingactionbutton.R.id.fab_label)).setVisibility(View.GONE);
 +        ((TextView) getFabMkdir().getTag(com.getbase.floatingactionbutton.R.id.fab_label)).setVisibility(View.GONE);
 +        ((TextView) getFabUploadFromApp().getTag(com.getbase.floatingactionbutton.R.id.fab_label)).setVisibility(View.GONE);
 +    }
 +
      private void registerLongClickListener() {
 -        getListView().setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
 -            public boolean onItemLongClick(AdapterView<?> arg0, View v,
 -                                           int index, long arg3) {
 -                showFileAction(index);
 +        getListView().setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {
 +            private Menu menu;
 +
 +            @Override
 +            public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
 +                final int checkedCount = getListView().getCheckedItemCount();
 +                // TODO Tobi extract to values
 +                mode.setTitle(checkedCount + " selected");
 +
 +                if (checked) {
 +                    mAdapter.setNewSelection(position, checked);
 +                } else {
 +                    mAdapter.removeSelection(position);
 +                }
 +
 +                // TODO maybe change: only recreate menu if count changes
 +                menu.clear();
 +                if (checkedCount == 1) {
 +                    createContextMenu(menu);
 +                } else {
 +                    // download, move, copy, delete
 +                    getActivity().getMenuInflater().inflate(R.menu.multiple_file_actions_menu, menu);
 +                }
 +
 +            }
 +
 +            @Override
 +            public boolean onCreateActionMode(ActionMode mode, Menu menu) {
 +                this.menu = menu;
                  return true;
              }
 +
 +            @Override
 +            public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
 +                return false;
 +            }
 +
 +            @Override
 +            public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
 +                return onFileActionChosen(item.getItemId());
 +            }
 +
 +            @Override
 +            public void onDestroyActionMode(ActionMode mode) {
 +                mAdapter.removeSelection();
 +            }
          });
      }
  
  
      /**
       * Call this, when the user presses the up button.
 -     *
 -     * Tries to move up the current folder one level. If the parent folder was removed from the
 -     * database, it continues browsing up until finding an existing folders.
 -     * <p/>
 -     * return       Count of folder levels browsed up.
 +     * <p>
 +     *     Tries to move up the current folder one level. If the parent folder was removed from the
 +     *     database, it continues browsing up until finding an existing folders.
 +     * </p>
 +     * @return Count of folder levels browsed up.
       */
      public int onBrowseUp() {
          OCFile parentDir = null;
              }   // exit is granted because storageManager.getFileByPath("/") never returns null
              mFile = parentDir;
  
 -            // TODO Enable when "On Device" is recovered ?
 -            listDirectory(mFile /*, MainApp.getOnlyOnDevice()*/);
 +            listDirectory(mFile, MainApp.getOnlyOnDevice());
  
              onRefresh(false);
  
          if (file != null) {
              if (file.isFolder()) {
                  // update state and view of this fragment
 -                // TODO Enable when "On Device" is recovered ?
 -                listDirectory(file/*, MainApp.getOnlyOnDevice()*/);
 +                listDirectory(file, MainApp.getOnlyOnDevice());
                  // then, notify parent activity to let it update its state and view
                  mContainerActivity.onBrowsedDownTo(file);
                  // save index and top position
                      ((FileDisplayActivity)mContainerActivity).startImagePreview(file);
                  } else if (PreviewTextFragment.canBePreviewed(file)){
                      ((FileDisplayActivity)mContainerActivity).startTextPreview(file);
 -                } else if (file.isDown()) {
 -                    if (PreviewMediaFragment.canBePreviewed(file)) {
 +                } else if (PreviewMediaFragment.canBePreviewed(file)) {
                          // media preview
                          ((FileDisplayActivity) mContainerActivity).startMediaPreview(file, 0, true);
 -                    } else {
 +                    } else if (file.isDown()) {
                          mContainerActivity.getFileOperationsHelper().openFile(file);
 -                    }
 -
                  } else {
                      // automatic download, preview on finish
                      ((FileDisplayActivity) mContainerActivity).startDownloadForPreview(file);
                  }
 -
              }
 -
          } else {
              Log_OC.d(TAG, "Null object in ListAdapter!!");
          }
 -
      }
  
      /**
       * {@inheritDoc}
       */
 -    @Override
 -    public void onCreateContextMenu(
 -            ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
 +    // TODO Tobi needed?
 +    public void createContextMenu(Menu menu) {
          Bundle args = getArguments();
          boolean allowContextualActions =
                  (args == null) ? true : args.getBoolean(ARG_ALLOW_CONTEXTUAL_ACTIONS, true);
          if (allowContextualActions) {
              MenuInflater inflater = getActivity().getMenuInflater();
              inflater.inflate(R.menu.file_actions_menu, menu);
 -            AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
 -            OCFile targetFile = (OCFile) mAdapter.getItem(info.position);
 +            OCFile targetFile = null;
 +            if (mAdapter.getCheckedItems().size() == 1){
 +                targetFile = mAdapter.getCheckedItems().get(0);
 +            }
  
              if (mContainerActivity.getStorageManager() != null) {
                  FileMenuFilter mf = new FileMenuFilter(
                      item.setEnabled(false);
                  }
              }
 +
 +//            String.format(mContext.getString(R.string.subject_token),
 +//                    getClient().getCredentials().getUsername(), file.getFileName()));
          }
      }
  
 -    /**
 -     * {@inheritDoc}
 -     */
 -    @Override
 -    public boolean onFileActionChosen(int menuId, int filePosition) {
 -        mTargetFile = (OCFile) mAdapter.getItem(filePosition);
 -        switch (menuId) {
 -            case R.id.action_share_file: {
 -                mContainerActivity.getFileOperationsHelper().showShareFile(mTargetFile);
 -                return true;
 -            }
 -            case R.id.action_open_file_with: {
 -                mContainerActivity.getFileOperationsHelper().openFile(mTargetFile);
 -                return true;
 -            }
 -            case R.id.action_rename_file: {
 -                RenameFileDialogFragment dialog = RenameFileDialogFragment.newInstance(mTargetFile);
 -                dialog.show(getFragmentManager(), FileDetailFragment.FTAG_RENAME_FILE);
 -                return true;
 -            }
 -            case R.id.action_remove_file: {
 -                RemoveFileDialogFragment dialog = RemoveFileDialogFragment.newInstance(mTargetFile);
 -                dialog.show(getFragmentManager(), ConfirmationDialogFragment.FTAG_CONFIRMATION);
 -                return true;
 -            }
 -            case R.id.action_download_file:
 -            case R.id.action_sync_file: {
 -                mContainerActivity.getFileOperationsHelper().syncFile(mTargetFile);
 -                return true;
 -            }
 -            case R.id.action_cancel_sync: {
 -                ((FileDisplayActivity)mContainerActivity).cancelTransference(mTargetFile);
 -                return true;
 -            }
 -            case R.id.action_see_details: {
 -                mContainerActivity.showDetails(mTargetFile);
 -                return true;
 -            }
 -            case R.id.action_send_file: {
 -                // Obtain the file
 -                if (!mTargetFile.isDown()) {  // Download the file
 -                    Log_OC.d(TAG, mTargetFile.getRemotePath() + " : File must be downloaded");
 -                    ((FileDisplayActivity) mContainerActivity).startDownloadForSending(mTargetFile);
 +    public boolean onFileActionChosen(int menuId) {
 +        if (mAdapter.getCheckedItems().size() == 1){
 +            OCFile mTargetFile = mAdapter.getCheckedItems().get(0);
  
 -                } else {
 -                    mContainerActivity.getFileOperationsHelper().sendDownloadedFile(mTargetFile);
 +            switch (menuId) {
 +                case R.id.action_share_file: {
-                     mContainerActivity.getFileOperationsHelper().shareFileWithLink(mTargetFile);
-                     return true;
-                 }
-                 case R.id.action_share_with_users: {
 +                    mContainerActivity.getFileOperationsHelper().showShareFile(mTargetFile);
 +                    return true;
                  }
 -                return true;
 +                case R.id.action_open_file_with: {
 +                    mContainerActivity.getFileOperationsHelper().openFile(mTargetFile);
 +                    return true;
 +                }
-                 case R.id.action_unshare_file: {
-                     mContainerActivity.getFileOperationsHelper().unshareFileWithLink(mTargetFile);
-                     return true;
-                 }
 +                case R.id.action_rename_file: {
 +                    RenameFileDialogFragment dialog = RenameFileDialogFragment.newInstance(mTargetFile);
 +                    dialog.show(getFragmentManager(), FileDetailFragment.FTAG_RENAME_FILE);
 +                    return true;
 +                }
 +                case R.id.action_remove_file: {
 +                    RemoveFileDialogFragment dialog = RemoveFileDialogFragment.newInstance(mTargetFile);
 +                    dialog.show(getFragmentManager(), ConfirmationDialogFragment.FTAG_CONFIRMATION);
 +                    return true;
 +                }
 +                case R.id.action_download_file:
 +                case R.id.action_sync_file: {
 +                    mContainerActivity.getFileOperationsHelper().syncFile(mTargetFile);
 +                    return true;
 +                }
 +                case R.id.action_cancel_sync: {
 +                    ((FileDisplayActivity) mContainerActivity).cancelTransference(mTargetFile);
 +                    return true;
 +                }
 +                case R.id.action_see_details: {
 +                    mContainerActivity.showDetails(mTargetFile);
 +                    return true;
 +                }
 +                case R.id.action_send_file: {
 +                    // Obtain the file
 +                    if (!mTargetFile.isDown()) {  // Download the file
 +                        Log_OC.d(TAG, mTargetFile.getRemotePath() + " : File must be downloaded");
 +                        ((FileDisplayActivity) mContainerActivity).startDownloadForSending(mTargetFile);
 +                        return true;
 +                    } else {
 +                        mContainerActivity.getFileOperationsHelper().sendDownloadedFile(mTargetFile);
 +                    }
 +                }
 +                case R.id.action_stream_file: {
 +                    Account account = ((FileActivity)mContainerActivity).getAccount();
 +                    Context context = MainApp.getAppContext();
 +                    String uri = PreviewMediaFragment.generateUrlWithCredentials(account, context, mTargetFile);
 +                    MediaService.streamWithExternalApp(uri, getActivity()).show();
 +                    return true;
 +                }
 +                case R.id.action_move: {
 +                    Intent action = new Intent(getActivity(), FolderPickerActivity.class);
 +                    ArrayList files = new ArrayList();
 +                    files.add(mTargetFile);
 +                    action.putParcelableArrayListExtra(FolderPickerActivity.EXTRA_FILES, files);
 +                    getActivity().startActivityForResult(action, FileDisplayActivity.ACTION_MOVE_FILES);
 +                    return true;
 +                }
 +                case R.id.action_favorite_file: {
 +                    mContainerActivity.getFileOperationsHelper().toggleFavorite(mTargetFile, true);
 +                    return true;
 +                }
 +                case R.id.action_unfavorite_file: {
 +                    mContainerActivity.getFileOperationsHelper().toggleFavorite(mTargetFile, false);
 +                    return true;
 +                }
 +                case R.id.action_copy:
 +                    Intent action = new Intent(getActivity(), FolderPickerActivity.class);
 +                    ArrayList files = new ArrayList();
 +                    files.add(mTargetFile);
 +                    action.putExtra(FolderPickerActivity.EXTRA_FILES, files);
 +                    getActivity().startActivityForResult(action, FileDisplayActivity.ACTION_COPY_FILES);
 +                    return true;
 +                default:
 +                    return false;
              }
 -            case R.id.action_move: {
 -                Intent action = new Intent(getActivity(), FolderPickerActivity.class);
 +        } else {
 +            ArrayList<OCFile> mTargetFiles = mAdapter.getCheckedItems();
  
 -                // Pass mTargetFile that contains info of selected file/folder
 -                action.putExtra(FolderPickerActivity.EXTRA_FILE, mTargetFile);
 -                getActivity().startActivityForResult(action, FileDisplayActivity.ACTION_MOVE_FILES);
 -                return true;
 -            }
 -            case R.id.action_favorite_file: {
 -                mContainerActivity.getFileOperationsHelper().toggleFavorite(mTargetFile, true);
 -                return true;
 -            }
 -            case R.id.action_unfavorite_file: {
 -                mContainerActivity.getFileOperationsHelper().toggleFavorite(mTargetFile, false);
 -                return true;
 +            switch (menuId) {
 +                case R.id.action_remove_file: {
 +                    RemoveFilesDialogFragment dialog = RemoveFilesDialogFragment.newInstance(mTargetFiles);
 +                    dialog.show(getFragmentManager(), ConfirmationDialogFragment.FTAG_CONFIRMATION);
 +                    return true;
 +                }
 +                case R.id.action_download_file:
 +                case R.id.action_sync_file: {
 +                    mContainerActivity.getFileOperationsHelper().syncFiles(mTargetFiles);
 +                    return true;
 +                }
 +                case R.id.action_move: {
 +                    Intent action = new Intent(getActivity(), FolderPickerActivity.class);
 +                    action.putParcelableArrayListExtra(FolderPickerActivity.EXTRA_FILES, mTargetFiles);
 +                    getActivity().startActivityForResult(action, FileDisplayActivity.ACTION_MOVE_FILES);
 +                    return true;
 +                }
 +                case R.id.action_favorite_file: {
 +                    mContainerActivity.getFileOperationsHelper().toggleFavorites(mTargetFiles, true);
 +                    return true;
 +                }
 +                case R.id.action_unfavorite_file: {
 +                    mContainerActivity.getFileOperationsHelper().toggleFavorites(mTargetFiles, false);
 +                    return true;
 +                }
 +                case R.id.action_copy:
 +                    Intent action = new Intent(getActivity(), FolderPickerActivity.class);
 +                    action.putParcelableArrayListExtra(FolderPickerActivity.EXTRA_FILES, mTargetFiles);
 +                    getActivity().startActivityForResult(action, FileDisplayActivity.ACTION_COPY_FILES);
 +                    return true;
 +                default:
 +                    return false;
              }
 -            case R.id.action_copy:
 -                Intent action = new Intent(getActivity(), FolderPickerActivity.class);
 -
 -                // Pass mTargetFile that contains info of selected file/folder
 -                action.putExtra(FolderPickerActivity.EXTRA_FILE, mTargetFile);
 -                getActivity().startActivityForResult(action, FileDisplayActivity.ACTION_COPY_FILES);
 -                return true;
 -            default:
 -                return false;
          }
      }
      
      @Override
      public boolean onContextItemSelected (MenuItem item) {
          AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
 -        boolean matched = onFileActionChosen(item.getItemId(),
 -                ((AdapterContextMenuInfo) item.getMenuInfo()).position);
 +        boolean matched = onFileActionChosen(item.getItemId())  ;
          if(!matched) {
              return super.onContextItemSelected(item);
          } else {
      }
  
      /**
 -     * Calls {@link OCFileListFragment#listDirectory(OCFile)} with a null parameter
 +     * Calls {@link OCFileListFragment#listDirectory(OCFile, boolean)} with a null parameter
       */
 -    public void listDirectory(/*boolean onlyOnDevice*/){
 -        listDirectory(null);
 -        // TODO Enable when "On Device" is recovered ?
 -        // listDirectory(null, onlyOnDevice);
 +    public void listDirectory(boolean onlyOnDevice){
 +        listDirectory(null, onlyOnDevice);
      }
      
      public void refreshDirectory(){
 -        // TODO Enable when "On Device" is recovered ?
 -        listDirectory(getCurrentFile()/*, MainApp.getOnlyOnDevice()*/);
 +        listDirectory(getCurrentFile(), MainApp.getOnlyOnDevice());
      }
  
      /**
       *
       * @param directory File to be listed
       */
 -    public void listDirectory(OCFile directory/*, boolean onlyOnDevice*/) {
 +    public void listDirectory(OCFile directory, boolean onlyOnDevice) {
          FileDataStorageManager storageManager = mContainerActivity.getStorageManager();
          if (storageManager != null) {
  
                  directory = storageManager.getFileById(directory.getParentId());
              }
  
 -            // TODO Enable when "On Device" is recovered ?
 -            mAdapter.swapDirectory(directory, storageManager/*, onlyOnDevice*/);
 +            mAdapter.swapDirectory(directory, storageManager, onlyOnDevice);
              if (mFile == null || !mFile.equals(directory)) {
                  mCurrentListView.setSelection(0);
              }
                      if (!file.isHidden()) {
                          filesCount++;
  
 -                        if (file.isImage()) {
 +                        if (file.isImage() || file.isVideo()) {
                              imagesCount++;
                          }
                      }
              OwnCloudVersion version = AccountUtils.getServerVersion(
                      ((FileActivity)mContainerActivity).getAccount());
              if (version != null && version.supportsRemoteThumbnails() &&
 -                imagesCount > 0 && imagesCount == filesCount) {
 +                    DisplayUtils.isGridView(mFile, mContainerActivity.getStorageManager())) {
                  switchToGridView();
                  registerLongClickListener();
              } else {
                  switchToListView();
 +//                switchToGridView();
              }
          }
      }
@@@ -40,7 -40,6 +40,7 @@@ import android.view.View
  import android.view.Window;
  
  import com.ortiz.touch.ExtendedViewPager;
 +import com.owncloud.android.MainApp;
  import com.owncloud.android.R;
  import com.owncloud.android.authentication.AccountUtils;
  import com.owncloud.android.datamodel.FileDataStorageManager;
@@@ -52,16 -51,11 +52,11 @@@ import com.owncloud.android.files.servi
  import com.owncloud.android.lib.common.operations.OnRemoteOperationListener;
  import com.owncloud.android.lib.common.operations.RemoteOperation;
  import com.owncloud.android.lib.common.operations.RemoteOperationResult;
- import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
  import com.owncloud.android.lib.common.utils.Log_OC;
- import com.owncloud.android.operations.CreateShareViaLinkOperation;
- import com.owncloud.android.operations.CreateShareWithShareeOperation;
  import com.owncloud.android.operations.RemoveFileOperation;
  import com.owncloud.android.operations.SynchronizeFileOperation;
- import com.owncloud.android.operations.UnshareOperation;
  import com.owncloud.android.ui.activity.FileActivity;
  import com.owncloud.android.ui.activity.FileDisplayActivity;
- import com.owncloud.android.ui.activity.ShareActivity;
  import com.owncloud.android.ui.fragment.FileFragment;
  
  
@@@ -157,8 -151,9 +152,8 @@@ public class PreviewImageActivity exten
              parentFolder = getStorageManager().getFileByPath(OCFile.ROOT_PATH);
          }
  
 -        // TODO Enable when "On Device" is recovered ?
          mPreviewImagePagerAdapter = new PreviewImagePagerAdapter(getSupportFragmentManager(),
 -                parentFolder, getAccount(), getStorageManager()/*, MainApp.getOnlyOnDevice()*/);
 +                parentFolder, getAccount(), getStorageManager(), MainApp.getOnlyOnDevice());
  
          mViewPager = (ExtendedViewPager) findViewById(R.id.fragmentPager);
          int position = mHasSavedPosition ? mSavedPosition :
      public void onRemoteOperationFinish(RemoteOperation operation, RemoteOperationResult result) {
          super.onRemoteOperationFinish(operation, result);
          
-         if (operation instanceof CreateShareViaLinkOperation ||
-                 operation instanceof CreateShareWithShareeOperation) {
-             onCreateShareOperationFinish(result);
-         } else if (operation instanceof UnshareOperation) {
-             onUnshareLinkOperationFinish((UnshareOperation) operation, result);
-             
-         } else if (operation instanceof RemoveFileOperation) {
+         if (operation instanceof RemoveFileOperation) {
              finish();
          } else if (operation instanceof SynchronizeFileOperation) {
              onSynchronizeFileOperationFinish((SynchronizeFileOperation) operation, result);
          }
      }
      
-     
-     private void onUnshareLinkOperationFinish(UnshareOperation operation,
-                                               RemoteOperationResult result) {
-         if (result.isSuccess()) {
-             OCFile file = getStorageManager().getFileByPath(getFile().getRemotePath());
-             if (file != null) {
-                 setFile(file);
-             }
-             invalidateOptionsMenu();
-         } else if  (result.getCode() == ResultCode.SHARE_NOT_FOUND) {
-             backToDisplayActivity();
-         }
-             
-     }
-     
-     private void onCreateShareOperationFinish(RemoteOperationResult result) {
-         if (result.isSuccess()) {
-             OCFile file = getStorageManager().getFileByPath(getFile().getRemotePath());
-             if (file != null) {
-                 setFile(file);
-             }
-             invalidateOptionsMenu();
-         }
-     }
      private void onSynchronizeFileOperationFinish(SynchronizeFileOperation operation,
                                                    RemoteOperationResult result) {
          if (result.isSuccess()) {
              OCFile currentFile = mPreviewImagePagerAdapter.getFileAt(position); 
              getSupportActionBar().setTitle(currentFile.getFileName());
              mDrawerToggle.setDrawerIndicatorEnabled(false);
 -            if (!currentFile.isDown()) {
 -                if (!mPreviewImagePagerAdapter.pendingErrorAt(position)) {
 -                    requestForDownload(currentFile);
 -                }
 -            }
 -
 +            
              // Call to reset image zoom to initial state
              ((PreviewImagePagerAdapter) mViewPager.getAdapter()).resetZoom();
          }
@@@ -41,10 -41,8 +41,10 @@@ import android.widget.ImageView
  import android.widget.ProgressBar;
  import android.widget.TextView;
  
 +import com.owncloud.android.MainApp;
  import com.owncloud.android.R;
  import com.owncloud.android.datamodel.OCFile;
 +import com.owncloud.android.datamodel.ThumbnailsCacheManager;
  import com.owncloud.android.files.FileMenuFilter;
  import com.owncloud.android.lib.common.utils.Log_OC;
  import com.owncloud.android.ui.dialog.ConfirmationDialogFragment;
@@@ -71,14 -69,11 +71,14 @@@ public class PreviewImageFragment exten
  
      private static final String ARG_FILE = "FILE";
      private static final String ARG_IGNORE_FIRST = "IGNORE_FIRST";
 +    private static final String ARG_SHOW_RESIZED_IMAGE = "SHOW_RESIZED_IMAGE";
  
      private TouchImageViewCustom mImageView;
      private TextView mMessageView;
      private ProgressBar mProgressWheel;
  
 +    private Boolean mShowResizedImage = false;
 +
      public Bitmap mBitmap = null;
  
      private static final String TAG = PreviewImageFragment.class.getSimpleName();
       *                                  {@link FragmentStatePagerAdapter}
       *                                  ; TODO better solution
       */
 -    public static PreviewImageFragment newInstance(OCFile imageFile, boolean ignoreFirstSavedState){
 +    public static PreviewImageFragment newInstance(OCFile imageFile, boolean ignoreFirstSavedState,
 +            boolean showResizedImage){
          PreviewImageFragment frag = new PreviewImageFragment();
 +        frag.mShowResizedImage = showResizedImage;
          Bundle args = new Bundle();
          args.putParcelable(ARG_FILE, imageFile);
          args.putBoolean(ARG_IGNORE_FIRST, ignoreFirstSavedState);
 +        args.putBoolean(ARG_SHOW_RESIZED_IMAGE, showResizedImage);
          frag.setArguments(args);
          return frag;
      }
              // not right now
  
          mIgnoreFirstSavedState = args.getBoolean(ARG_IGNORE_FIRST);
 +        mShowResizedImage = args.getBoolean(ARG_SHOW_RESIZED_IMAGE);
          setHasOptionsMenu(true);
      }
  
          if (getFile() == null) {
              throw new IllegalStateException("Instanced with a NULL OCFile");
          }
 -        if (!getFile().isDown()) {
 -            throw new IllegalStateException("There is no local file to preview");
 -        }
      }
  
  
      public void onStart() {
          super.onStart();
          if (getFile() != null) {
 -            mLoadBitmapTask = new LoadBitmapTask(mImageView, mMessageView, mProgressWheel);
 -            //mLoadBitmapTask.execute(new String[]{getFile().getStoragePath()});
 -//            mLoadBitmapTask.execute(getFile().getStoragePath());
 -            mLoadBitmapTask.execute(getFile());
 +            mImageView.setTag(getFile().getFileId());
 +
 +            if (mShowResizedImage){
 +                Bitmap resizedImage = ThumbnailsCacheManager.getBitmapFromDiskCache(
 +                        String.valueOf("r" + getFile().getRemoteId()));
 +
 +                if (resizedImage != null && !getFile().needsUpdateThumbnail()){
 +                    mProgressWheel.setVisibility(View.GONE);
 +                    mImageView.setImageBitmap(resizedImage);
 +                    mImageView.setVisibility(View.VISIBLE);
 +                    mBitmap  = resizedImage;
 +                } else {
 +                    // show thumbnail while loading resized image
 +                    Bitmap thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache(
 +                            String.valueOf("t" + getFile().getRemoteId()));
 +
 +                    if (thumbnail != null){
 +                        mImageView.setImageBitmap(thumbnail);
 +                        mProgressWheel.setVisibility(View.VISIBLE);
 +                        mImageView.setVisibility(View.VISIBLE);
 +                        mBitmap = thumbnail;
 +                    } else {
 +                        thumbnail = ThumbnailsCacheManager.mDefaultImg;
 +                    }
 +
 +                    // generate new resized image
 +                    if (ThumbnailsCacheManager.cancelPotentialWork(getFile(), mImageView) &&
 +                        mContainerActivity.getStorageManager() != null) {
 +                        final ThumbnailsCacheManager.ThumbnailGenerationTask task =
 +                                new ThumbnailsCacheManager.ThumbnailGenerationTask(
 +                                        mImageView, mContainerActivity.getStorageManager(),
 +                                        mContainerActivity.getStorageManager().getAccount(),
 +                                        mProgressWheel);
 +                        if (resizedImage == null) {
 +                            resizedImage = thumbnail;
 +                        }
 +                        final ThumbnailsCacheManager.AsyncDrawable asyncDrawable =
 +                                new ThumbnailsCacheManager.AsyncDrawable(
 +                                        MainApp.getAppContext().getResources(),
 +                                        resizedImage,
 +                                        task
 +                                );
 +                        mImageView.setImageDrawable(asyncDrawable);
 +                        task.execute(getFile(), false);
 +                    }
 +            }
 +            } else {
 +                mLoadBitmapTask = new LoadBitmapTask(mImageView, mMessageView, mProgressWheel);
 +                mLoadBitmapTask.execute(getFile());
 +            }
          }
      }
  
      public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
          super.onCreateOptionsMenu(menu, inflater);
          inflater.inflate(R.menu.file_actions_menu, menu);
 +
 +//        MenuItem item = menu.findItem(R.id.action_set_as_wallpaper);
 +//        item.setVisible(getFile().isDown());
      }
  
      /**
      public boolean onOptionsItemSelected(MenuItem item) {
          switch (item.getItemId()) {
              case R.id.action_share_file: {
-                 mContainerActivity.getFileOperationsHelper().shareFileWithLink(getFile());
-                 return true;
-             }
-             case R.id.action_share_with_users: {
                  mContainerActivity.getFileOperationsHelper().showShareFile(getFile());
                  return true;
              }
-             case R.id.action_unshare_file: {
-                 mContainerActivity.getFileOperationsHelper().unshareFileWithLink(getFile());
-                 return true;
-             }
              case R.id.action_open_file_with: {
                  openFile();
                  return true;
                  return true;
              }
              case R.id.action_send_file: {
 -                mContainerActivity.getFileOperationsHelper().sendDownloadedFile(getFile());
 -                return true;
 +                if (getFile().isImage() && !getFile().isDown()){
 +                    mContainerActivity.getFileOperationsHelper().sendCachedImage(getFile());
 +                    return true;
 +                } else {
 +                    mContainerActivity.getFileOperationsHelper().sendDownloadedFile(getFile());
 +                    return true;
 +                }
              }
 +            case R.id.action_download_file:
              case R.id.action_sync_file: {
                  mContainerActivity.getFileOperationsHelper().syncFile(getFile());
                  return true;
                  mContainerActivity.getFileOperationsHelper().toggleFavorite(getFile(), false);
                  return true;
              }
 +            case R.id.action_set_as_wallpaper:{
 +                mContainerActivity.getFileOperationsHelper().setPictureAs(getFile());
 +                return true;
 +            }
              default:
                  return false;
          }
                      imageView.setBackground(backrepeat);
                  }
  
 -                imageView.setImageBitmap(bitmap);
 +                if (result.ocFile.getMimetype().equalsIgnoreCase("image/gif")){
 +                    imageView.setGifImage(result.ocFile);
 +                } else {
 +                    imageView.setImageBitmap(bitmap);
 +                }
 +
                  imageView.setVisibility(View.VISIBLE);
                  mBitmap  = bitmap;  // needs to be kept for recycling when not useful
              }
  package com.owncloud.android.ui.preview;
  
  import android.accounts.Account;
 +import android.accounts.AuthenticatorException;
 +import android.accounts.OperationCanceledException;
  import android.app.Activity;
 +import android.content.ActivityNotFoundException;
  import android.graphics.Bitmap;
  import android.graphics.BitmapFactory;
  import android.media.MediaMetadataRetriever;
 +import android.net.Uri;
 +import android.os.AsyncTask;
  import android.support.v7.app.AlertDialog;
  import android.content.ComponentName;
  import android.content.Context;
@@@ -55,16 -50,9 +55,16 @@@ import android.widget.ImageView
  import android.widget.Toast;
  import android.widget.VideoView;
  
 +import com.owncloud.android.MainApp;
  import com.owncloud.android.R;
  import com.owncloud.android.datamodel.OCFile;
 +import com.owncloud.android.datamodel.ThumbnailsCacheManager;
  import com.owncloud.android.files.FileMenuFilter;
 +import com.owncloud.android.lib.common.OwnCloudAccount;
 +import com.owncloud.android.lib.common.OwnCloudClient;
 +import com.owncloud.android.lib.common.OwnCloudClientManagerFactory;
 +import com.owncloud.android.lib.common.OwnCloudCredentials;
 +import com.owncloud.android.lib.common.accounts.AccountUtils;
  import com.owncloud.android.lib.common.utils.Log_OC;
  import com.owncloud.android.media.MediaControlView;
  import com.owncloud.android.media.MediaService;
@@@ -74,9 -62,6 +74,9 @@@ import com.owncloud.android.ui.dialog.C
  import com.owncloud.android.ui.dialog.RemoveFileDialogFragment;
  import com.owncloud.android.ui.fragment.FileFragment;
  
 +import java.io.IOException;
 +import java.util.concurrent.ExecutionException;
 +
  
  /**
   * This fragment shows a preview of a downloaded media file (audio or video).
@@@ -100,7 -85,6 +100,7 @@@ public class PreviewMediaFragment exten
      private ImageView mImagePreview;
      private VideoView mVideoPreview;
      private int mSavedPlaybackPosition;
 +    private String mUri;
  
      private MediaServiceBinder mMediaServiceBinder = null;
      private MediaControlView mMediaController = null;
              if (mAccount == null) {
                  throw new IllegalStateException("Instanced with a NULL ownCloud Account");
              }
 -            if (!file.isDown()) {
 -                throw new IllegalStateException("There is no local file to preview");
 -            }
 -
          }
          else {
              file = (OCFile) savedInstanceState.getParcelable(PreviewMediaFragment.EXTRA_FILE);
              mAutoplay = savedInstanceState.getBoolean(PreviewMediaFragment.EXTRA_PLAYING);
  
          }
 -        if (file != null && file.isDown()) {
 +        if (file != null) {
              if (file.isVideo()) {
                  mVideoPreview.setVisibility(View.VISIBLE);
                  mImagePreview.setVisibility(View.GONE);
          Log_OC.v(TAG, "onStart");
  
          OCFile file = getFile();
 -        if (file != null && file.isDown()) {
 +        if (file != null) {
              if (file.isAudio()) {
                  bindMediaService();
  
      public boolean onOptionsItemSelected(MenuItem item) {
          switch (item.getItemId()) {
              case R.id.action_share_file: {
-                 stopPreview(false);
-                 mContainerActivity.getFileOperationsHelper().shareFileWithLink(getFile());
-                 return true;
-             }
-             case R.id.action_share_with_users: {
                  seeShareFile();
                  return true;
              }
-             case R.id.action_unshare_file: {
-                 stopPreview(false);
-                 mContainerActivity.getFileOperationsHelper().unshareFileWithLink(getFile());
-                 return true;
-             }
              case R.id.action_open_file_with: {
                  openFile();
                  return true;
  
          // load the video file in the video player ; 
          // when done, VideoHelper#onPrepared() will be called
 +        if (getFile().isDown()) {
 +            mUri = getFile().getStoragePath();
 +        } else {
 +            Context context = MainApp.getAppContext();
 +            Account account = mContainerActivity.getStorageManager().getAccount();
 +
 +            mUri = generateUrlWithCredentials(account, context, getFile());
 +        }
 +
          mVideoPreview.setVideoURI(getFile().getStorageUri());
      }
  
 +    public static String generateUrlWithCredentials(Account account, Context context, OCFile file){
 +        OwnCloudAccount ocAccount = null;
 +        try {
 +            ocAccount = new OwnCloudAccount(account, context);
 +
 +            final ClientGenerationTask task = new ClientGenerationTask();
 +            task.execute(ocAccount);
 +
 +            OwnCloudClient mClient = task.get();
 +            String url = AccountUtils.constructFullURLForAccount(context, account) + Uri.encode(file.getRemotePath(), "/");
 +            OwnCloudCredentials credentials = mClient.getCredentials();
 +
 +            return url.replace("//", "//" + credentials.getUsername() + ":" + credentials.getAuthToken() + "@");
 +
 +        } catch (AccountUtils.AccountNotFoundException e) {
 +            e.printStackTrace();
 +
 +        } catch (InterruptedException e) {
 +            e.printStackTrace();
 +        } catch (ExecutionException e) {
 +            e.printStackTrace();
 +        }
 +        return "";
 +    }
 +
 +    public static class ClientGenerationTask extends AsyncTask<Object, Void, OwnCloudClient> {
 +        @Override
 +        protected OwnCloudClient doInBackground(Object... params) {
 +            Object account = params[0];
 +            if (account instanceof OwnCloudAccount){
 +                try {
 +                    OwnCloudAccount ocAccount = (OwnCloudAccount) account;
 +                    return OwnCloudClientManagerFactory.getDefaultSingleton().
 +                            getClientFor(ocAccount, MainApp.getAppContext());
 +                } catch (AccountUtils.AccountNotFoundException e) {
 +                    e.printStackTrace();
 +                } catch (OperationCanceledException e) {
 +                    e.printStackTrace();
 +                } catch (AuthenticatorException e) {
 +                    e.printStackTrace();
 +                } catch (IOException e) {
 +                    e.printStackTrace();
 +                }
 +            }
 +
 +            return null;
 +        }
 +    }
 +
  
      private class VideoHelper implements OnCompletionListener, OnPreparedListener, OnErrorListener {
  
           */
          @Override
          public boolean onError(MediaPlayer mp, int what, int extra) {
 -            Log_OC.e(TAG, "Error in video playback, what = " + what + ", extra = " + extra);
 -            if (mVideoPreview.getWindowToken() != null) {
 -                String message = MediaService.getMessageForMediaError(
 -                        getActivity(), what, extra);
 -                new AlertDialog.Builder(getActivity())
 -                        .setMessage(message)
 -                        .setPositiveButton(android.R.string.VideoView_error_button,
 -                                new DialogInterface.OnClickListener() {
 -                                    public void onClick(DialogInterface dialog, int whichButton) {
 -                                        dialog.dismiss();
 -                                        VideoHelper.this.onCompletion(null);
 -                                    }
 -                                })
 -                        .setCancelable(false)
 -                        .show();
 -            }
 +            MediaService.streamWithExternalApp(mUri, getActivity()).show();
              return true;
          }
 -
      }
  
 -
      @Override
      public void onPause() {
          Log_OC.v(TAG, "onPause");
@@@ -290,18 -290,6 +290,18 @@@ public class PreviewTextFragment extend
              item.setVisible(false);
              item.setEnabled(false);
          }
 +
 +        item = menu.findItem(R.id.action_switch_view);
 +        if (item != null){
 +            item.setVisible(false);
 +            item.setEnabled(false);
 +        }
 +
 +        item = menu.findItem(R.id.action_sort);
 +        if (item != null) {
 +            item.setVisible(false);
 +            item.setEnabled(false);
 +        }
      }
  
      /**
      public boolean onOptionsItemSelected(MenuItem item) {
          switch (item.getItemId()) {
              case R.id.action_share_file: {
-                 mContainerActivity.getFileOperationsHelper().shareFileWithLink(getFile());
-                 return true;
-             }
-             case R.id.action_share_with_users: {
                  mContainerActivity.getFileOperationsHelper().showShareFile(getFile());
                  return true;
              }
-             case R.id.action_unshare_file: {
-                 mContainerActivity.getFileOperationsHelper().unshareFileWithLink(getFile());
-                 return true;
-             }
              case R.id.action_open_file_with: {
                  openFile();
                  return true;