Browse Source

Merge branch 'develop' into release-1.6.0

David A. Velasco 10 years ago
parent
commit
aa354e5d73
70 changed files with 443 additions and 365 deletions
  1. 1 1
      owncloud-android-library
  2. 40 32
      res/layout/log_send_file.xml
  3. 6 0
      res/menu/main_menu.xml
  4. 6 6
      res/values-de-rDE/strings.xml
  5. 1 0
      res/values-el/strings.xml
  6. 1 0
      res/values-en-rGB/strings.xml
  7. 1 0
      res/values-it/strings.xml
  8. 11 0
      res/values-pl/strings.xml
  9. 8 0
      res/values-sl/strings.xml
  10. 3 0
      res/values/setup.xml
  11. 5 0
      res/values/strings.xml
  12. 15 4
      src/com/owncloud/android/MainApp.java
  13. 1 1
      src/com/owncloud/android/authentication/AccountAuthenticator.java
  14. 1 1
      src/com/owncloud/android/authentication/AuthenticatorActivity.java
  15. 3 3
      src/com/owncloud/android/authentication/SsoWebViewClient.java
  16. 1 1
      src/com/owncloud/android/datamodel/FileDataStorageManager.java
  17. 1 1
      src/com/owncloud/android/datamodel/OCFile.java
  18. 1 1
      src/com/owncloud/android/db/DbHandler.java
  19. 1 1
      src/com/owncloud/android/files/BootupBroadcastReceiver.java
  20. 1 1
      src/com/owncloud/android/files/FileOperationsHelper.java
  21. 1 1
      src/com/owncloud/android/files/InstantUploadBroadcastReceiver.java
  22. 1 1
      src/com/owncloud/android/files/services/FileDownloader.java
  23. 1 1
      src/com/owncloud/android/files/services/FileUploader.java
  24. 1 1
      src/com/owncloud/android/media/MediaService.java
  25. 1 1
      src/com/owncloud/android/media/MediaServiceBinder.java
  26. 1 1
      src/com/owncloud/android/operations/CreateFolderOperation.java
  27. 1 1
      src/com/owncloud/android/operations/CreateShareOperation.java
  28. 2 1
      src/com/owncloud/android/operations/DetectAuthenticationMethodOperation.java
  29. 1 1
      src/com/owncloud/android/operations/DownloadFileOperation.java
  30. 1 1
      src/com/owncloud/android/operations/GetServerInfoOperation.java
  31. 1 1
      src/com/owncloud/android/operations/GetSharesForFileOperation.java
  32. 1 1
      src/com/owncloud/android/operations/GetSharesOperation.java
  33. 1 1
      src/com/owncloud/android/operations/OAuth2GetAccessToken.java
  34. 1 1
      src/com/owncloud/android/operations/RenameFileOperation.java
  35. 1 1
      src/com/owncloud/android/operations/SynchronizeFileOperation.java
  36. 13 6
      src/com/owncloud/android/operations/SynchronizeFolderOperation.java
  37. 1 1
      src/com/owncloud/android/operations/UnshareLinkOperation.java
  38. 1 1
      src/com/owncloud/android/operations/UpdateOCVersionOperation.java
  39. 1 1
      src/com/owncloud/android/operations/UploadFileOperation.java
  40. 1 1
      src/com/owncloud/android/providers/FileContentProvider.java
  41. 1 1
      src/com/owncloud/android/services/OperationsService.java
  42. 1 1
      src/com/owncloud/android/services/observer/FileObserverService.java
  43. 1 1
      src/com/owncloud/android/services/observer/FolderObserver.java
  44. 2 1
      src/com/owncloud/android/syncadapter/FileSyncAdapter.java
  45. 1 1
      src/com/owncloud/android/ui/activity/ConflictsResolveActivity.java
  46. 1 1
      src/com/owncloud/android/ui/activity/ErrorsWhileCopyingHandlerActivity.java
  47. 1 1
      src/com/owncloud/android/ui/activity/FileActivity.java
  48. 40 18
      src/com/owncloud/android/ui/activity/FileDisplayActivity.java
  49. 193 54
      src/com/owncloud/android/ui/activity/LogHistoryActivity.java
  50. 7 6
      src/com/owncloud/android/ui/activity/MoveActivity.java
  51. 10 0
      src/com/owncloud/android/ui/activity/OnEnforceableRefreshListener.java
  52. 1 41
      src/com/owncloud/android/ui/activity/Preferences.java
  53. 1 1
      src/com/owncloud/android/ui/activity/UploadFilesActivity.java
  54. 1 1
      src/com/owncloud/android/ui/activity/Uploader.java
  55. 1 1
      src/com/owncloud/android/ui/dialog/ConfirmationDialogFragment.java
  56. 1 1
      src/com/owncloud/android/ui/dialog/SamlWebViewDialog.java
  57. 1 1
      src/com/owncloud/android/ui/dialog/ShareLinkToDialog.java
  58. 1 1
      src/com/owncloud/android/ui/dialog/SslUntrustedCertDialog.java
  59. 1 1
      src/com/owncloud/android/ui/dialog/SslValidatorDialog.java
  60. 14 4
      src/com/owncloud/android/ui/fragment/ExtendedListFragment.java
  61. 1 1
      src/com/owncloud/android/ui/fragment/FileDetailFragment.java
  62. 1 1
      src/com/owncloud/android/ui/fragment/LocalFileListFragment.java
  63. 4 3
      src/com/owncloud/android/ui/fragment/OCFileListFragment.java
  64. 1 1
      src/com/owncloud/android/ui/preview/FileDownloadFragment.java
  65. 3 3
      src/com/owncloud/android/ui/preview/PreviewImageActivity.java
  66. 1 1
      src/com/owncloud/android/ui/preview/PreviewImageFragment.java
  67. 9 9
      src/com/owncloud/android/ui/preview/PreviewImagePagerAdapter.java
  68. 1 1
      src/com/owncloud/android/ui/preview/PreviewMediaFragment.java
  69. 1 1
      src/com/owncloud/android/ui/preview/PreviewVideoActivity.java
  70. 0 129
      src/com/owncloud/android/utils/Log_OC.java

+ 1 - 1
owncloud-android-library

@@ -1 +1 @@
-Subproject commit 79d586637ee306fdbefbbc4439eb3b058f6877c9
+Subproject commit ff0de72ea5352ba22a21cdac289e9314706cdb2e

+ 40 - 32
res/layout/log_send_file.xml

@@ -1,35 +1,43 @@
 <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout 
-      	 xmlns:android="http://schemas.android.com/apk/res/android"
-         android:orientation="vertical"
-         android:layout_width="match_parent"
-         android:layout_height="match_parent"
-         android:paddingLeft="8dp"
-         android:paddingRight="8dp">
-      
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical"
+    android:padding="10dp"
+    android:paddingLeft="8dp"
+    android:paddingRight="8dp"
+    android:weightSum="1" >
 
-     <ListView 	android:id="@android:id/list"
-               	android:layout_width="match_parent"
-               	android:layout_height="wrap_content"
-               />
+    <ScrollView
+        android:id="@+id/scrollView1"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:layout_marginBottom="15dp"
+        android:layout_weight="1" >
 
-     <TextView 	android:id="@android:id/empty"
-               	android:layout_width="match_parent"
-               	android:layout_height="wrap_content"
-               	android:background="#FF0000"
-               	android:text="No data"/>
-     <LinearLayout 
-         android:orientation="vertical"
-         android:layout_width="match_parent"
-         android:layout_height="wrap_content"
-         android:gravity="bottom">
-        
-     <Button
-            	android:id="@+id/deleteLogHistoryButton"
-         		android:layout_width="match_parent"
-     		   	android:layout_height="wrap_content"
-     		   	android:text="@string/prefs_log_delete_history_button"/>
-     
-     </LinearLayout>
-     
- </LinearLayout>
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical" >
+
+            <TextView
+                android:id="@+id/logTV"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:text="@string/empty" />
+        </LinearLayout>
+    </ScrollView>
+
+    <Button
+        android:id="@+id/deleteLogHistoryButton"
+        android:layout_width="match_parent"
+        android:layout_height="50dp"
+        android:text="@string/prefs_log_delete_history_button" />
+
+    <Button
+        android:id="@+id/sendLogHistoryButton"
+        android:layout_width="match_parent"
+       android:layout_height="50dp"
+        android:text="@string/log_send_history_button" />
+
+</LinearLayout>

+ 6 - 0
res/menu/main_menu.xml

@@ -43,6 +43,12 @@
         android:orderInCategory="2"
         android:showAsAction="never"
         android:title="@string/actionbar_settings"/>
+    <item
+        android:id="@+id/action_logger"
+        android:icon="@drawable/ic_action_settings"
+        android:orderInCategory="2"
+        android:showAsAction="never"
+        android:title="@string/actionbar_logger"/>
 
     <!-- <item android:id="@+id/search" android:title="@string/actionbar_search" android:icon="@drawable/ic_action_search"></item> -->
 

+ 6 - 6
res/values-de-rDE/strings.xml

@@ -7,7 +7,7 @@
   <string name="actionbar_upload_from_apps">Inhalt von anderen Apps</string>
   <string name="actionbar_upload_files">Dateien</string>
   <string name="actionbar_open_with">Öffnen mit</string>
-  <string name="actionbar_mkdir">Neues Ordner</string>
+  <string name="actionbar_mkdir">Neuer Ordner</string>
   <string name="actionbar_settings">Einstellungen</string>
   <string name="actionbar_see_details">Details</string>
   <string name="actionbar_send_file">Senden</string>
@@ -22,16 +22,16 @@
   <string name="prefs_instant_video_upload">Sofortiges Videohochladen</string>
   <string name="prefs_instant_video_upload_summary">Videos von der Kamera sofort hochladen</string>
   <string name="prefs_log_title">Protokollierung aktivieren</string>
-  <string name="prefs_log_summary">Dies wird zur Protokollierung von Problemen genutzt</string>
+  <string name="prefs_log_summary">Dieses wird zur Protokollierung von Problemen benutzt</string>
   <string name="prefs_log_title_history">Protokollierungsverlauf</string>
-  <string name="prefs_log_summary_history">Dies zeigt die gespeicherten Protokollierungen</string>
+  <string name="prefs_log_summary_history">Dieses zeigt die gespeicherten Protokollierungen</string>
   <string name="prefs_log_delete_history_button">Verlauf löschen</string>
   <string name="prefs_help">Hilfe</string>
   <string name="prefs_recommend">Dieses einem Freund empfehlen</string>
   <string name="prefs_feedback">Rückmeldungen</string>
   <string name="prefs_imprint">Impressum</string>
-  <string name="recommend_subject">Probieren Sie %1$s auf Ihrem Smartphone!</string>
-  <string name="recommend_text">Ich möchte Sie zum Benutzen von %1$s auf Ihrem Smartphone einladen!\nLaden Sie es hier herunter: %2$s</string>
+  <string name="recommend_subject">%1$s auf Ihrem Smartphone ausprobieren!</string>
+  <string name="recommend_text">Ich möchte Sie zum Benutzen von %1$s auf Ihrem Smartphone einladen!\nHier herunterladen: %2$s</string>
   <string name="auth_check_server">Server überprüfen</string>
   <string name="auth_host_url">Server-Adresse https://…</string>
   <string name="auth_username">Benutzername</string>
@@ -103,7 +103,7 @@
   <string name="sync_fail_in_favourites_ticker">Synchronisationsdateien konnten nicht synchronisiert werden.</string>
   <string name="sync_fail_in_favourites_content">Inhalte von %1$d konnte nicht synchronisiert werden (%2$d Konflikte)</string>
   <string name="sync_foreign_files_forgotten_ticker">Einige lokale Dateien wurden vergessen</string>
-  <string name="sync_foreign_files_forgotten_content">%1$d Dateien aus dem %2$s Verzeichnis konnten nicht kopiert werden nach</string>
+  <string name="sync_foreign_files_forgotten_content">%1$d Dateien aus dem %2$s Ordner konnten nicht kopiert werden nach</string>
   <string name="sync_foreign_files_forgotten_explanation">Mit Version 1.3.16 werden Dateien die von diesem Gerät aus hochgeladen werden in den lokalen Ordner %1$s kopiert um Datenverlust zu vermeiden, wenn eine einzelne Datei mit mehreren Accounts synchronisiert wird.\n\nInfolge dieser Änderung wurden alle Dateien, die mit vorherigen Versionen dieser App hochgeladen wurden, in den Ordner %2$s verschoben. Jedoch ist während der Account-Synchronisation ein Fehler aufgetreten, der das Abschließen dieses Vorgangs verhindert. Sie können die Datei(en) entweder wie sie sind belassen und den Link zu %3$s entfernen oder die Datei(en) in den %1$s Ordner verschieben und  den Link zu %4$s beibehalten.\n\nUnten befindet sich eine Liste der lokalen Datei(en) und der mit ihnen verbundenen Remote-Datei(en) in %5$s.</string>
   <string name="sync_current_folder_was_removed">Das Verzeichnis %1$s existiert nicht mehr</string>
   <string name="foreign_files_move">Verschiebe alle</string>

+ 1 - 0
res/values-el/strings.xml

@@ -31,6 +31,7 @@
   <string name="prefs_feedback">Σχόλια </string>
   <string name="prefs_imprint">Αποτύπωμα</string>
   <string name="recommend_subject">Δοκιμάστε %1$s στο κινητό σας!</string>
+  <string name="recommend_text">Θα ήθελα να σε προσκαλέσω να χρησιμοποιήσεις το %1$s στο κινητό σου!\nΛήψη εδώ: %2$s</string>
   <string name="auth_check_server">Έλεγχος Διακομιστή</string>
   <string name="auth_host_url">Διεύθυνση διακομιστή https://…</string>
   <string name="auth_username">Όνομα χρήστη</string>

+ 1 - 0
res/values-en-rGB/strings.xml

@@ -31,6 +31,7 @@
   <string name="prefs_feedback">Feedback</string>
   <string name="prefs_imprint">Imprint</string>
   <string name="recommend_subject">Try %1$s on your smartphone!</string>
+  <string name="recommend_text">I want to invite you to use %1$s on your smartphone!\nDownload here: %2$s</string>
   <string name="auth_check_server">Check Server</string>
   <string name="auth_host_url">Server address https://…</string>
   <string name="auth_username">Username</string>

+ 1 - 0
res/values-it/strings.xml

@@ -31,6 +31,7 @@
   <string name="prefs_feedback">Segnalazioni</string>
   <string name="prefs_imprint">Imprint</string>
   <string name="recommend_subject">Prova %1$s sul tuo smartphone!</string>
+  <string name="recommend_text">Vorrei invitarti a usare %1$s sul tuo smartphone!\nScarica qui: %2$s</string>
   <string name="auth_check_server">Verifica server</string>
   <string name="auth_host_url">Indirizzo server https://...</string>
   <string name="auth_username">Nome utente</string>

+ 11 - 0
res/values-pl/strings.xml

@@ -31,6 +31,7 @@
   <string name="prefs_feedback">Wsparcie</string>
   <string name="prefs_imprint">Stopka</string>
   <string name="recommend_subject">Wypróbuj %1$s na swoim smartphonie!</string>
+  <string name="recommend_text">Chciałbym zaprosić Cię do używania %1$s na swoim smartfonie!\nŚciągnij tutaj: %2$s</string>
   <string name="auth_check_server">Sprawdź serwer</string>
   <string name="auth_host_url">Adres serwera https://...</string>
   <string name="auth_username">Nazwa użytkownika</string>
@@ -103,6 +104,7 @@
   <string name="sync_fail_in_favourites_content">Zawartość %1$d plików nie może zostać synchronizowana (%2$d konfliktów)</string>
   <string name="sync_foreign_files_forgotten_ticker">Niektóre lokalne pliki zostały zgubione.</string>
   <string name="sync_foreign_files_forgotten_content">%1$d plików z folderu %2$s nie udało się się przekopiować</string>
+  <string name="sync_foreign_files_forgotten_explanation">Od wersji 1.3.16, pliki wysyłane z tego urządzenia są kopiowane do lokalnego folderu %1$s aby zapobiec utracie danych gdy pojedynczy plik jest synchronizowany z wieloma kontami.\n\nZ powodu tej zmiany, wszystkie pliki wysłane za pomocą poprzedniej wersji tej aplikacji były kopiowane do folderu %2$s. Jednakże, błąd uniemożliwiał dokończenie tej operacji podczas synchronizacji konta. Możesz albo pozostawić plik(i) tak jak jest i usunąć link do %3$s lub przenieść plik(i) do folderu %1$s i pozostawić link do %4$s.\n\nPoniżej plik(i) lokalny i plik(i) zdalny w %5$s, do którego zostały zlinkowane.</string>
   <string name="sync_current_folder_was_removed">Folder  %1$s nie istnieje.</string>
   <string name="foreign_files_move">Przenieś wszystko</string>
   <string name="foreign_files_success">Wszystkie pliki zostały przeniesione</string>
@@ -238,7 +240,9 @@
   <string name="error__upload__local_file_not_copied">%1$s nie może zostać skopiowany do lokalnego folderu %2$s</string>
   <string name="share_link_no_support_share_api">Przepraszamy, ale współdzielenie nie jest włączone na Twoim serwerze. Proszę skontaktuj się z
 		administratorem.</string>
+  <string name="share_link_file_no_exist">Nie można udostępnić. Proszę sprawdzić, czy plik istnieje</string>
   <string name="share_link_file_error">Wystąpił błąd podczas udostępniania tego pliku lub folderu.</string>
+  <string name="unshare_link_file_no_exist">Nie można wyłączyć udostępniania. Proszę sprawdzić, czy plik istnieje</string>
   <string name="unshare_link_file_error">Wystąpił błąd podczas anulowania udostępniania tego pliku lub folderu.</string>
   <string name="activity_chooser_send_file_title">Wyślij</string>
   <string name="copy_link">Skopiuj link</string>
@@ -262,5 +266,12 @@
   <string name="auth_redirect_non_secure_connection_title">Bezpieczne połączenie jest przekierowywane przez niezabezpieczone trasy.</string>
   <string name="saml_authentication_required_text">Wymagana autoryzacja</string>
   <string name="saml_authentication_wrong_pass">Złe hasło</string>
+  <string name="actionbar_move">Przenieś</string>
+  <string name="file_list_empty_moving">Nic tu nie ma. Możesz dodać folder!</string>
   <string name="move_choose_button_text">Wybierz</string>
+  <string name="move_file_not_found">Nie można przenieść. Proszę sprawdzić, czy plik istnieje</string>
+  <string name="move_file_invalid_into_descendent">Nie jest możliwe przeniesienie folderu do potomka</string>
+  <string name="move_file_invalid_overwrite">Plik istnieje już w folderze docelowym</string>
+  <string name="move_file_error">Pojawił się błąd podczas próby przeniesienia tego pliku lub folderu</string>
+  <string name="forbidden_permissions_move">aby przenieść ten plik</string>
 </resources>

+ 8 - 0
res/values-sl/strings.xml

@@ -31,6 +31,7 @@
   <string name="prefs_feedback">Odziv</string>
   <string name="prefs_imprint">Natis</string>
   <string name="recommend_subject">Preizkusi %1$s na pametnem telefonu!</string>
+  <string name="recommend_text">Želim ti predstaviti %1$s na pametnem telefonu!\nPrejmeš ga lahko na: %2$s</string>
   <string name="auth_check_server">Preveri strežnik</string>
   <string name="auth_host_url">Naslov strežnika https://…</string>
   <string name="auth_username">Uporabniško ime</string>
@@ -238,7 +239,9 @@
   <string name="error__upload__local_file_not_copied">Datoteke %1$s ni mogoče kopirati v krajevno mapo %2$s</string>
   <string name="share_link_no_support_share_api">Souporaba je na strežniku onemogočena. Možnost lahko spreminjajo le
 		uporabniki s skrbniškimi dovoljenji.</string>
+  <string name="share_link_file_no_exist">Souporaba ni mogoča. Preverite, ali datoteka obstaja.</string>
   <string name="share_link_file_error">Prišlo je do napake med poskusom omogočanja souporabe te datoteke ali mape</string>
+  <string name="unshare_link_file_no_exist">Ni mogoče prekiniti souporabe. Preverite, ali datoteka obstaja.</string>
   <string name="unshare_link_file_error">Prišlo je do napake med poskusom odstranjevanja souporabe te datoteke ali mape</string>
   <string name="activity_chooser_send_file_title">Pošlji</string>
   <string name="copy_link">Kopiraj povezavo</string>
@@ -263,5 +266,10 @@
   <string name="saml_authentication_required_text">Zahtevana je overitev</string>
   <string name="saml_authentication_wrong_pass">Napačno geslo</string>
   <string name="actionbar_move">Premakni</string>
+  <string name="file_list_empty_moving">Ni vsebine in datotek. Lahko ustvarite na primer mapo.</string>
   <string name="move_choose_button_text">Izbor</string>
+  <string name="move_file_not_found">Ni mogoče premakniti datoteke. Preverite, ali obstaja.</string>
+  <string name="move_file_invalid_into_descendent">Ni mogoče premakniti mape v podrejeno mapo.</string>
+  <string name="move_file_invalid_overwrite">Datoteka v ciljni mapi že obstaja.</string>
+  <string name="move_file_error">Prišlo je do napake med premikanjem datoteke v mapo</string>
 </resources>

+ 3 - 0
res/values/setup.xml

@@ -49,6 +49,9 @@
     <string name="mail_feedback">"mailto:apps@owncloud.com"</string>
     <string name="url_app_download">"https://play.google.com/store/apps/details?id=com.owncloud.android"</string>
 
+    <!--Destination mail for sending log files -->
+    <string name="mail_logger"></string>
+
 </resources>
 
 

+ 5 - 0
res/values/strings.xml

@@ -285,6 +285,11 @@
 	<string name="prefs_add_account">Add account</string>
 	<string name="auth_redirect_non_secure_connection_title">Secure connection is redirected to an unsecured route.</string>
 
+	<string name="actionbar_logger">Logs</string>
+	<string name="log_send_history_button">Send History</string>
+	<string name="log_mail_subject">Owncloud Android app logs</string>
+	<string name="log_progress_dialog_text">Loading data...</string>
+
 	<string name="saml_authentication_required_text">Authentication required</string>
 	<string name="saml_authentication_wrong_pass">Wrong password</string>
 	<string name="actionbar_move">Move</string>

+ 15 - 4
src/com/owncloud/android/MainApp.java

@@ -16,11 +16,12 @@
  */
 package com.owncloud.android;
 
-import com.owncloud.android.lib.common.OwnCloudClientManagerFactory;
-import com.owncloud.android.lib.common.OwnCloudClientManagerFactory.Policy;
-
 import android.app.Application;
 import android.content.Context;
+
+import com.owncloud.android.lib.common.OwnCloudClientManagerFactory;
+import com.owncloud.android.lib.common.OwnCloudClientManagerFactory.Policy;
+import com.owncloud.android.lib.common.utils.Log_OC;
 /**
  * Main Application of the project
  * 
@@ -54,6 +55,16 @@ public class MainApp extends Application {
             OwnCloudClientManagerFactory.setDefaultPolicy(Policy.ALWAYS_NEW_CLIENT);
         }
         
+        if (BuildConfig.DEBUG) {
+
+            String dataFolder = getDataFolder();
+
+            // Set folder for store logs
+            Log_OC.setLogDataFolder(dataFolder);
+
+            Log_OC.startLogging();
+            Log_OC.d("Debug", "start logging");
+        }
     }
 
     public static Context getAppContext() {
@@ -66,7 +77,7 @@ public class MainApp extends Application {
     public static String getAccountType() {
         return getAppContext().getResources().getString(R.string.account_type);
     }
-    
+
     //  From AccountAuthenticator 
     //  public static final String AUTHORITY = "org.owncloud";
     public static String getAuthority() {

+ 1 - 1
src/com/owncloud/android/authentication/AccountAuthenticator.java

@@ -29,7 +29,7 @@ import android.os.Handler;
 import android.widget.Toast;
 
 import com.owncloud.android.lib.common.accounts.AccountTypeUtils;
-import com.owncloud.android.utils.Log_OC;
+import com.owncloud.android.lib.common.utils.Log_OC;
 
 
 /**

+ 1 - 1
src/com/owncloud/android/authentication/AuthenticatorActivity.java

@@ -71,6 +71,7 @@ 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.lib.resources.files.ExistenceCheckRemoteOperation;
 import com.owncloud.android.lib.resources.status.OwnCloudVersion;
 import com.owncloud.android.lib.resources.users.GetRemoteUserNameOperation;
@@ -84,7 +85,6 @@ import com.owncloud.android.ui.dialog.IndeterminateProgressDialog;
 import com.owncloud.android.ui.dialog.SamlWebViewDialog;
 import com.owncloud.android.ui.dialog.SslUntrustedCertDialog;
 import com.owncloud.android.ui.dialog.SslUntrustedCertDialog.OnSslUntrustedCertListener;
-import com.owncloud.android.utils.Log_OC;
 
 /**
  * This Activity is used to add an ownCloud account to the App

+ 3 - 3
src/com/owncloud/android/authentication/SsoWebViewClient.java

@@ -24,6 +24,9 @@ import java.security.cert.CertificateException;
 import java.security.cert.CertificateFactory;
 import java.security.cert.X509Certificate;
 
+import com.owncloud.android.lib.common.network.NetworkUtils;
+import com.owncloud.android.lib.common.utils.Log_OC;
+
 import android.content.Context;
 import android.graphics.Bitmap;
 import android.net.http.SslCertificate;
@@ -40,9 +43,6 @@ import android.webkit.WebResourceResponse;
 import android.webkit.WebView;
 import android.webkit.WebViewClient;
 
-import com.owncloud.android.lib.common.network.NetworkUtils;
-import com.owncloud.android.utils.Log_OC;
-
 
 /**
  * Custom {@link WebViewClient} client aimed to catch the end of a single-sign-on process 

+ 1 - 1
src/com/owncloud/android/datamodel/FileDataStorageManager.java

@@ -27,11 +27,11 @@ import java.util.Vector;
 
 import com.owncloud.android.MainApp;
 import com.owncloud.android.db.ProviderMeta.ProviderTableMeta;
+import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.lib.resources.shares.OCShare;
 import com.owncloud.android.lib.resources.shares.ShareType;
 import com.owncloud.android.lib.resources.files.FileUtils;
 import com.owncloud.android.utils.FileStorageUtils;
-import com.owncloud.android.utils.Log_OC;
 
 
 import android.accounts.Account;

+ 1 - 1
src/com/owncloud/android/datamodel/OCFile.java

@@ -20,7 +20,7 @@ package com.owncloud.android.datamodel;
 
 import java.io.File;
 
-import com.owncloud.android.utils.Log_OC;
+import com.owncloud.android.lib.common.utils.Log_OC;
 
 
 import android.os.Parcel;

+ 1 - 1
src/com/owncloud/android/db/DbHandler.java

@@ -18,7 +18,7 @@
 package com.owncloud.android.db;
 
 import com.owncloud.android.MainApp;
-import com.owncloud.android.utils.Log_OC;
+import com.owncloud.android.lib.common.utils.Log_OC;
 
 import android.content.ContentValues;
 import android.content.Context;

+ 1 - 1
src/com/owncloud/android/files/BootupBroadcastReceiver.java

@@ -18,8 +18,8 @@
 
 package com.owncloud.android.files;
 
+import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.services.observer.FileObserverService;
-import com.owncloud.android.utils.Log_OC;
 
 import android.content.BroadcastReceiver;
 import android.content.Context;

+ 1 - 1
src/com/owncloud/android/files/FileOperationsHelper.java

@@ -34,11 +34,11 @@ import com.owncloud.android.files.services.FileUploader.FileUploaderBinder;
 
 import com.owncloud.android.lib.common.accounts.AccountUtils.Constants;
 import com.owncloud.android.lib.common.network.WebdavUtils;
+import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.lib.resources.status.OwnCloudVersion;
 import com.owncloud.android.services.OperationsService;
 import com.owncloud.android.ui.activity.FileActivity;
 import com.owncloud.android.ui.dialog.ShareLinkToDialog;
-import com.owncloud.android.utils.Log_OC;
 
 /**
  * 

+ 1 - 1
src/com/owncloud/android/files/InstantUploadBroadcastReceiver.java

@@ -24,8 +24,8 @@ import com.owncloud.android.MainApp;
 import com.owncloud.android.authentication.AccountUtils;
 import com.owncloud.android.db.DbHandler;
 import com.owncloud.android.files.services.FileUploader;
+import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.utils.FileStorageUtils;
-import com.owncloud.android.utils.Log_OC;
 
 
 import android.accounts.Account;

+ 1 - 1
src/com/owncloud/android/files/services/FileDownloader.java

@@ -41,6 +41,7 @@ import com.owncloud.android.notifications.NotificationBuilderWithProgressBar;
 import com.owncloud.android.notifications.NotificationDelayer;
 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.files.FileUtils;
 import com.owncloud.android.operations.DownloadFileOperation;
 import com.owncloud.android.ui.activity.FileActivity;
@@ -48,7 +49,6 @@ import com.owncloud.android.ui.activity.FileDisplayActivity;
 import com.owncloud.android.ui.preview.PreviewImageActivity;
 import com.owncloud.android.ui.preview.PreviewImageFragment;
 import com.owncloud.android.utils.ErrorMessageAdapter;
-import com.owncloud.android.utils.Log_OC;
 
 import android.accounts.Account;
 import android.accounts.AccountsException;

+ 1 - 1
src/com/owncloud/android/files/services/FileUploader.java

@@ -59,6 +59,7 @@ import com.owncloud.android.lib.common.network.OnDatatransferProgressListener;
 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.lib.resources.files.ExistenceCheckRemoteOperation;
 import com.owncloud.android.lib.resources.files.FileUtils;
 import com.owncloud.android.lib.resources.files.ReadRemoteFileOperation;
@@ -72,7 +73,6 @@ import com.owncloud.android.operations.common.SyncOperation;
 import com.owncloud.android.ui.activity.FileActivity;
 import com.owncloud.android.ui.activity.FileDisplayActivity;
 import com.owncloud.android.utils.ErrorMessageAdapter;
-import com.owncloud.android.utils.Log_OC;
 
 
 

+ 1 - 1
src/com/owncloud/android/media/MediaService.java

@@ -39,9 +39,9 @@ import java.io.IOException;
 
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.ui.activity.FileActivity;
 import com.owncloud.android.ui.activity.FileDisplayActivity;
-import com.owncloud.android.utils.Log_OC;
 
 
 /**

+ 1 - 1
src/com/owncloud/android/media/MediaServiceBinder.java

@@ -19,8 +19,8 @@ package com.owncloud.android.media;
 
 
 import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.media.MediaService.State;
-import com.owncloud.android.utils.Log_OC;
 
 import android.accounts.Account;
 import android.content.Intent;

+ 1 - 1
src/com/owncloud/android/operations/CreateFolderOperation.java

@@ -23,9 +23,9 @@ import com.owncloud.android.lib.resources.files.CreateRemoteFolderOperation;
 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.utils.Log_OC;
 import com.owncloud.android.operations.common.SyncOperation;
 import com.owncloud.android.utils.FileStorageUtils;
-import com.owncloud.android.utils.Log_OC;
 
 
 /**

+ 1 - 1
src/com/owncloud/android/operations/CreateShareOperation.java

@@ -32,12 +32,12 @@ import com.owncloud.android.lib.common.OwnCloudClient;
 import com.owncloud.android.lib.resources.shares.OCShare;
 import com.owncloud.android.lib.common.operations.RemoteOperation;
 import com.owncloud.android.lib.common.operations.RemoteOperationResult;
+import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.lib.resources.shares.GetRemoteSharesForFileOperation;
 import com.owncloud.android.lib.resources.shares.ShareType;
 import com.owncloud.android.lib.resources.shares.CreateRemoteShareOperation;
 import com.owncloud.android.lib.resources.files.FileUtils;
 import com.owncloud.android.operations.common.SyncOperation;
-import com.owncloud.android.utils.Log_OC;
 
 public class CreateShareOperation extends SyncOperation {
 

+ 2 - 1
src/com/owncloud/android/operations/DetectAuthenticationMethodOperation.java

@@ -31,6 +31,7 @@ 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.lib.resources.files.ExistenceCheckRemoteOperation;
 
 import android.content.Context;
@@ -122,7 +123,7 @@ public class DetectAuthenticationMethodOperation extends RemoteOperation {
             authMethod = AuthenticationMethod.SAML_WEB_SSO;
         }
         // else - fall back to UNKNOWN
-        Log.d(TAG, "Authentication method found: " + authenticationMethodToString(authMethod));
+        Log_OC.d(TAG, "Authentication method found: " + authenticationMethodToString(authMethod));
         
         if (!authMethod.equals(AuthenticationMethod.UNKNOWN)) {
             result = new RemoteOperationResult(true, result.getHttpCode(), null);

+ 1 - 1
src/com/owncloud/android/operations/DownloadFileOperation.java

@@ -29,9 +29,9 @@ import com.owncloud.android.lib.common.OwnCloudClient;
 import com.owncloud.android.lib.common.operations.OperationCancelledException;
 import com.owncloud.android.lib.common.operations.RemoteOperation;
 import com.owncloud.android.lib.common.operations.RemoteOperationResult;
+import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.lib.resources.files.DownloadRemoteFileOperation;
 import com.owncloud.android.utils.FileStorageUtils;
-import com.owncloud.android.utils.Log_OC;
 
 import android.accounts.Account;
 import android.webkit.MimeTypeMap;

+ 1 - 1
src/com/owncloud/android/operations/GetServerInfoOperation.java

@@ -31,10 +31,10 @@ import com.owncloud.android.lib.common.OwnCloudClient;
 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.lib.resources.status.GetRemoteStatusOperation;
 import com.owncloud.android.lib.resources.status.OwnCloudVersion;
 import com.owncloud.android.operations.DetectAuthenticationMethodOperation.AuthenticationMethod;
-import com.owncloud.android.utils.Log_OC;
 
 import android.content.Context;
 

+ 1 - 1
src/com/owncloud/android/operations/GetSharesForFileOperation.java

@@ -23,9 +23,9 @@ import java.util.ArrayList;
 import com.owncloud.android.lib.common.OwnCloudClient;
 import com.owncloud.android.lib.resources.shares.OCShare;
 import com.owncloud.android.lib.common.operations.RemoteOperationResult;
+import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.lib.resources.shares.GetRemoteSharesForFileOperation;
 import com.owncloud.android.operations.common.SyncOperation;
-import com.owncloud.android.utils.Log_OC;
 
 /**
  * Provide a list shares for a specific file.  

+ 1 - 1
src/com/owncloud/android/operations/GetSharesOperation.java

@@ -21,10 +21,10 @@ import java.util.ArrayList;
 
 import com.owncloud.android.lib.common.OwnCloudClient;
 import com.owncloud.android.lib.common.operations.RemoteOperationResult;
+import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.lib.resources.shares.OCShare;
 import com.owncloud.android.lib.resources.shares.GetRemoteSharesOperation;
 import com.owncloud.android.operations.common.SyncOperation;
-import com.owncloud.android.utils.Log_OC;
 
 /**
  * Access to remote operation to get the share files/folders

+ 1 - 1
src/com/owncloud/android/operations/OAuth2GetAccessToken.java

@@ -14,7 +14,7 @@ import com.owncloud.android.lib.common.OwnCloudClient;
 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.utils.Log_OC;
+import com.owncloud.android.lib.common.utils.Log_OC;
 
 
 public class OAuth2GetAccessToken extends RemoteOperation {

+ 1 - 1
src/com/owncloud/android/operations/RenameFileOperation.java

@@ -24,10 +24,10 @@ import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.lib.common.OwnCloudClient;
 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.files.RenameRemoteFileOperation;
 import com.owncloud.android.operations.common.SyncOperation;
 import com.owncloud.android.utils.FileStorageUtils;
-import com.owncloud.android.utils.Log_OC;
 
 import android.accounts.Account;
 

+ 1 - 1
src/com/owncloud/android/operations/SynchronizeFileOperation.java

@@ -25,10 +25,10 @@ import com.owncloud.android.lib.common.OwnCloudClient;
 import com.owncloud.android.lib.resources.files.RemoteFile;
 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.files.ReadRemoteFileOperation;
 import com.owncloud.android.operations.common.SyncOperation;
 import com.owncloud.android.utils.FileStorageUtils;
-import com.owncloud.android.utils.Log_OC;
 
 import android.accounts.Account;
 import android.content.Context;

+ 13 - 6
src/com/owncloud/android/operations/SynchronizeFolderOperation.java

@@ -43,6 +43,7 @@ import com.owncloud.android.lib.resources.shares.OCShare;
 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.lib.resources.shares.GetRemoteSharesForFileOperation;
 import com.owncloud.android.lib.resources.files.FileUtils;
 import com.owncloud.android.lib.resources.files.ReadRemoteFileOperation;
@@ -51,7 +52,6 @@ import com.owncloud.android.lib.resources.files.RemoteFile;
 
 import com.owncloud.android.syncadapter.FileSyncAdapter;
 import com.owncloud.android.utils.FileStorageUtils;
-import com.owncloud.android.utils.Log_OC;
 
 
 
@@ -109,6 +109,9 @@ public class SynchronizeFolderOperation extends RemoteOperation {
     /** 'True' means that the remote folder changed from last synchronization and should be fetched */
     private boolean mRemoteFolderChanged;
 
+    /** 'True' means that Etag will be ignored */
+    private boolean mIgnoreETag;
+
     
     /**
      * Creates a new instance of {@link SynchronizeFolderOperation}.
@@ -126,6 +129,7 @@ public class SynchronizeFolderOperation extends RemoteOperation {
                                         long currentSyncTime, 
                                         boolean syncFullAccount,
                                         boolean isShareSupported,
+                                        boolean ignoreETag,
                                         FileDataStorageManager dataStorageManager, 
                                         Account account, 
                                         Context context ) {
@@ -138,6 +142,7 @@ public class SynchronizeFolderOperation extends RemoteOperation {
         mContext = context;
         mForgottenLocalFiles = new HashMap<String, String>();
         mRemoteFolderChanged = false;
+        mIgnoreETag = ignoreETag;
     }
     
     
@@ -215,7 +220,7 @@ public class SynchronizeFolderOperation extends RemoteOperation {
 
     
     private RemoteOperationResult checkForChanges(OwnCloudClient client) {
-        mRemoteFolderChanged = false;
+        mRemoteFolderChanged = true;
         RemoteOperationResult result = null;
         String remotePath = null;
 
@@ -227,10 +232,12 @@ public class SynchronizeFolderOperation extends RemoteOperation {
         result = operation.execute(client);
         if (result.isSuccess()){
             OCFile remoteFolder = FileStorageUtils.fillOCFile((RemoteFile) result.getData().get(0));
-            
-            // check if remote and local folder are different
-            mRemoteFolderChanged = !(remoteFolder.getEtag().equalsIgnoreCase(mLocalFolder.getEtag()));
-          
+
+            if (!mIgnoreETag) {
+                // check if remote and local folder are different
+                mRemoteFolderChanged = !(remoteFolder.getEtag().equalsIgnoreCase(mLocalFolder.getEtag()));
+            }
+
             result = new RemoteOperationResult(ResultCode.OK);
         
             Log_OC.i(TAG, "Checked " + mAccount.name + remotePath + " : " + (mRemoteFolderChanged ? "changed" : "not changed"));

+ 1 - 1
src/com/owncloud/android/operations/UnshareLinkOperation.java

@@ -24,13 +24,13 @@ import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.lib.common.OwnCloudClient;
 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.files.ExistenceCheckRemoteOperation;
 import com.owncloud.android.lib.resources.shares.OCShare;
 import com.owncloud.android.lib.resources.shares.RemoveRemoteShareOperation;
 import com.owncloud.android.lib.resources.shares.ShareType;
 
 import com.owncloud.android.operations.common.SyncOperation;
-import com.owncloud.android.utils.Log_OC;
 
 /**
  * Unshare file/folder

+ 1 - 1
src/com/owncloud/android/operations/UpdateOCVersionOperation.java

@@ -28,8 +28,8 @@ import com.owncloud.android.lib.common.accounts.AccountUtils.Constants;
 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.lib.resources.status.OwnCloudVersion;
-import com.owncloud.android.utils.Log_OC;
 
 import android.accounts.Account;
 import android.accounts.AccountManager;

+ 1 - 1
src/com/owncloud/android/operations/UploadFileOperation.java

@@ -40,11 +40,11 @@ import com.owncloud.android.lib.common.operations.OperationCancelledException;
 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.lib.resources.files.ChunkedUploadRemoteFileOperation;
 import com.owncloud.android.lib.resources.files.ExistenceCheckRemoteOperation;
 import com.owncloud.android.lib.resources.files.UploadRemoteFileOperation;
 import com.owncloud.android.utils.FileStorageUtils;
-import com.owncloud.android.utils.Log_OC;
 
 import android.accounts.Account;
 import android.content.Context;

+ 1 - 1
src/com/owncloud/android/providers/FileContentProvider.java

@@ -24,8 +24,8 @@ import java.util.HashMap;
 import com.owncloud.android.R;
 import com.owncloud.android.db.ProviderMeta;
 import com.owncloud.android.db.ProviderMeta.ProviderTableMeta;
+import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.lib.resources.shares.ShareType;
-import com.owncloud.android.utils.Log_OC;
 
 
 

+ 1 - 1
src/com/owncloud/android/services/OperationsService.java

@@ -35,6 +35,7 @@ import com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundExce
 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.utils.Log_OC;
 import com.owncloud.android.lib.resources.files.ExistenceCheckRemoteOperation;
 import com.owncloud.android.lib.resources.shares.ShareType;
 import com.owncloud.android.lib.resources.users.GetRemoteUserNameOperation;
@@ -48,7 +49,6 @@ import com.owncloud.android.operations.RemoveFileOperation;
 import com.owncloud.android.operations.RenameFileOperation;
 import com.owncloud.android.operations.SynchronizeFileOperation;
 import com.owncloud.android.operations.UnshareLinkOperation;
-import com.owncloud.android.utils.Log_OC;
 
 import android.accounts.Account;
 import android.accounts.AccountsException;

+ 1 - 1
src/com/owncloud/android/services/observer/FileObserverService.java

@@ -37,9 +37,9 @@ import com.owncloud.android.authentication.AccountUtils;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.db.ProviderMeta.ProviderTableMeta;
 import com.owncloud.android.files.services.FileDownloader;
+import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.operations.SynchronizeFileOperation;
 import com.owncloud.android.utils.FileStorageUtils;
-import com.owncloud.android.utils.Log_OC;
 
 
 /**

+ 1 - 1
src/com/owncloud/android/services/observer/FolderObserver.java

@@ -30,9 +30,9 @@ import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
 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.SynchronizeFileOperation;
 import com.owncloud.android.ui.activity.ConflictsResolveActivity;
-import com.owncloud.android.utils.Log_OC;
 
 /**
  * Observer watching a folder to request the synchronization of kept-in-sync files

+ 2 - 1
src/com/owncloud/android/syncadapter/FileSyncAdapter.java

@@ -34,8 +34,8 @@ import com.owncloud.android.lib.common.operations.RemoteOperationResult;
 import com.owncloud.android.operations.SynchronizeFolderOperation;
 import com.owncloud.android.operations.UpdateOCVersionOperation;
 import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
+import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.ui.activity.ErrorsWhileCopyingHandlerActivity;
-import com.owncloud.android.utils.Log_OC;
 
 import android.accounts.Account;
 import android.accounts.AccountsException;
@@ -264,6 +264,7 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
                                                                                     mCurrentSyncTime, 
                                                                                     true,
                                                                                     mIsShareSupported,
+                                                                                    true,
                                                                                     getStorageManager(), 
                                                                                     getAccount(), 
                                                                                     getContext()

+ 1 - 1
src/com/owncloud/android/ui/activity/ConflictsResolveActivity.java

@@ -21,11 +21,11 @@ package com.owncloud.android.ui.activity;
 import com.actionbarsherlock.app.ActionBar;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.files.services.FileUploader;
+import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.ui.dialog.ConflictsResolveDialog;
 import com.owncloud.android.ui.dialog.ConflictsResolveDialog.Decision;
 import com.owncloud.android.ui.dialog.ConflictsResolveDialog.OnConflictDecisionMadeListener;
 import com.owncloud.android.utils.DisplayUtils;
-import com.owncloud.android.utils.Log_OC;
 
 import android.content.Intent;
 import android.os.Bundle;

+ 1 - 1
src/com/owncloud/android/ui/activity/ErrorsWhileCopyingHandlerActivity.java

@@ -42,10 +42,10 @@ import com.actionbarsherlock.app.SherlockFragmentActivity;
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.lib.common.utils.Log_OC;
 
 import com.owncloud.android.ui.dialog.IndeterminateProgressDialog;
 import com.owncloud.android.utils.FileStorageUtils;
-import com.owncloud.android.utils.Log_OC;
 
 
 

+ 1 - 1
src/com/owncloud/android/ui/activity/FileActivity.java

@@ -52,6 +52,7 @@ 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.CreateShareOperation;
 import com.owncloud.android.operations.UnshareLinkOperation;
 
@@ -59,7 +60,6 @@ import com.owncloud.android.services.OperationsService;
 import com.owncloud.android.services.OperationsService.OperationsServiceBinder;
 import com.owncloud.android.ui.dialog.LoadingDialog;
 import com.owncloud.android.utils.ErrorMessageAdapter;
-import com.owncloud.android.utils.Log_OC;
 
 
 /**

+ 40 - 18
src/com/owncloud/android/ui/activity/FileDisplayActivity.java

@@ -21,8 +21,6 @@ package com.owncloud.android.ui.activity;
 import java.io.File;
 import java.io.IOException;
 
-import org.apache.commons.httpclient.methods.PostMethod;
-
 import android.accounts.Account;
 import android.accounts.AccountManager;
 import android.accounts.AuthenticatorException;
@@ -50,7 +48,6 @@ import android.provider.MediaStore;
 import android.support.v4.app.Fragment;
 import android.support.v4.app.FragmentManager;
 import android.support.v4.app.FragmentTransaction;
-import android.support.v4.widget.SwipeRefreshLayout;
 import android.util.Log;
 import android.view.View;
 import android.view.ViewGroup;
@@ -64,6 +61,7 @@ import com.actionbarsherlock.view.Menu;
 import com.actionbarsherlock.view.MenuInflater;
 import com.actionbarsherlock.view.MenuItem;
 import com.actionbarsherlock.view.Window;
+import com.owncloud.android.BuildConfig;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.OCFile;
@@ -80,6 +78,7 @@ import com.owncloud.android.lib.common.network.CertificateCombinedException;
 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.CreateFolderOperation;
 import com.owncloud.android.operations.CreateShareOperation;
 import com.owncloud.android.operations.MoveFileOperation;
@@ -102,7 +101,6 @@ import com.owncloud.android.ui.preview.PreviewMediaFragment;
 import com.owncloud.android.ui.preview.PreviewVideoActivity;
 import com.owncloud.android.utils.DisplayUtils;
 import com.owncloud.android.utils.ErrorMessageAdapter;
-import com.owncloud.android.utils.Log_OC;
 
 
 /**
@@ -114,7 +112,7 @@ import com.owncloud.android.utils.Log_OC;
 
 public class FileDisplayActivity extends HookActivity implements
 FileFragment.ContainerActivity, OnNavigationListener, 
-OnSslUntrustedCertListener, SwipeRefreshLayout.OnRefreshListener {
+OnSslUntrustedCertListener, OnEnforceableRefreshListener {
     
     private ArrayAdapter<String> mDirectories;
 
@@ -251,7 +249,7 @@ OnSslUntrustedCertListener, SwipeRefreshLayout.OnRefreshListener {
                 Log_OC.e(TAG, "Initializing Fragments in onAccountChanged..");
                 initFragmentsWithFile();
                 if (file.isFolder()) {
-                    startSyncFolderOperation(file);
+                    startSyncFolderOperation(file, false);
                 }
                 
             } else {
@@ -292,7 +290,7 @@ OnSslUntrustedCertListener, SwipeRefreshLayout.OnRefreshListener {
             if (listOfFiles != null) {
                 listOfFiles.listDirectory(getCurrentDir());   
             } else {
-                Log.e(TAG, "Still have a chance to lose the initializacion of list fragment >(");
+                Log_OC.e(TAG, "Still have a chance to lose the initializacion of list fragment >(");
             }
             
             /// Second fragment
@@ -308,12 +306,12 @@ OnSslUntrustedCertListener, SwipeRefreshLayout.OnRefreshListener {
             }
 
         } else {
-            Log.wtf(TAG, "initFragments() called with invalid NULLs!");
+            Log_OC.wtf(TAG, "initFragments() called with invalid NULLs!");
             if (getAccount() == null) {
-                Log.wtf(TAG, "\t account is NULL");
+                Log_OC.wtf(TAG, "\t account is NULL");
             }
             if (getFile() == null) {
-                Log.wtf(TAG, "\t file is NULL");
+                Log_OC.wtf(TAG, "\t file is NULL");
             }
         }
     }
@@ -451,6 +449,16 @@ OnSslUntrustedCertListener, SwipeRefreshLayout.OnRefreshListener {
         }
     }
 
+    @Override
+    public boolean onPrepareOptionsMenu(Menu menu) {
+        if (BuildConfig.DEBUG) {
+            menu.findItem(R.id.action_logger).setVisible(true);
+        } else {
+            menu.findItem(R.id.action_logger).setVisible(false);
+        }
+        return super.onPrepareOptionsMenu(menu);
+    }
+
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
         MenuInflater inflater = getSherlock().getMenuInflater();
@@ -481,6 +489,11 @@ OnSslUntrustedCertListener, SwipeRefreshLayout.OnRefreshListener {
             startActivity(settingsIntent);
             break;
         }
+        case R.id.action_logger: {
+            Intent loggerIntent = new Intent(getApplicationContext(),LogHistoryActivity.class);
+            startActivity(loggerIntent);
+            break;
+        }
         case android.R.id.home: {
             FileFragment second = getSecondFragment();
             OCFile currentDir = getCurrentDir();
@@ -1026,7 +1039,7 @@ OnSslUntrustedCertListener, SwipeRefreshLayout.OnRefreshListener {
             }
             ocFileListFragment.setMessageForEmptyList(getString(message));
         } else {
-            Log.e(TAG, "OCFileListFragment is null");
+            Log_OC.e(TAG, "OCFileListFragment is null");
         }
     }
 
@@ -1153,7 +1166,7 @@ OnSslUntrustedCertListener, SwipeRefreshLayout.OnRefreshListener {
             OCFile root = getStorageManager().getFileByPath(OCFile.ROOT_PATH);
             listOfFiles.listDirectory(root);
             setFile(listOfFiles.getCurrentFile());
-            startSyncFolderOperation(root);
+            startSyncFolderOperation(root, false);
         }
         cleanSecondFragment();
     }
@@ -1168,7 +1181,7 @@ OnSslUntrustedCertListener, SwipeRefreshLayout.OnRefreshListener {
             setNavigationListWithFolder(folder);
             listOfFiles.listDirectory(folder);
             setFile(listOfFiles.getCurrentFile());
-            startSyncFolderOperation(folder);
+            startSyncFolderOperation(folder, false);
         } else {
             Log_OC.e(TAG, "Unexpected null when accessing list fragment");
         }
@@ -1187,7 +1200,7 @@ OnSslUntrustedCertListener, SwipeRefreshLayout.OnRefreshListener {
         cleanSecondFragment();
         
         // Sync Folder
-        startSyncFolderOperation(directory);
+        startSyncFolderOperation(directory, false);
         
     }
 
@@ -1304,7 +1317,7 @@ OnSslUntrustedCertListener, SwipeRefreshLayout.OnRefreshListener {
 
     @Override
     public void onSavedCertificate() {
-        startSyncFolderOperation(getCurrentDir());                
+        startSyncFolderOperation(getCurrentDir(), false);
     }
 
 
@@ -1592,7 +1605,7 @@ OnSslUntrustedCertListener, SwipeRefreshLayout.OnRefreshListener {
         return null;
     }
     
-    public void startSyncFolderOperation(OCFile folder) {
+    public void startSyncFolderOperation(OCFile folder, boolean ignoreETag) {
         long currentSyncTime = System.currentTimeMillis(); 
         
         mSyncInProgress = true;
@@ -1602,6 +1615,7 @@ OnSslUntrustedCertListener, SwipeRefreshLayout.OnRefreshListener {
                                                                         currentSyncTime, 
                                                                         false,
                                                                         getFileOperationsHelper().isSharedSupported(),
+                                                                        ignoreETag,
                                                                         getStorageManager(), 
                                                                         getAccount(), 
                                                                         getApplicationContext()
@@ -1713,17 +1727,25 @@ OnSslUntrustedCertListener, SwipeRefreshLayout.OnRefreshListener {
         onTransferStateChanged(file, false, false);
     }
 
+    @Override
+    public void onRefresh(boolean ignoreETag) {
+        refreshList(ignoreETag);
+    }
+
     @Override
     public void onRefresh() {
+        refreshList(true);
+    }
+
+    private void refreshList(boolean ignoreETag) {
         OCFileListFragment listOfFiles = getListOfFilesFragment();
         if (listOfFiles != null) {
             OCFile folder = listOfFiles.getCurrentFile();
             if (folder != null) {
                 /*mFile = mContainerActivity.getStorageManager().getFileById(mFile.getFileId());
                 listDirectory(mFile);*/
-                startSyncFolderOperation(folder);
+                startSyncFolderOperation(folder, ignoreETag);
             }
         }
     }
-
 }

+ 193 - 54
src/com/owncloud/android/ui/activity/LogHistoryActivity.java

@@ -17,106 +17,245 @@
 
 package com.owncloud.android.ui.activity;
 
+import java.io.BufferedReader;
 import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.lang.ref.WeakReference;
+import java.lang.reflect.Field;
 import java.util.ArrayList;
 
 import android.content.Intent;
+import android.net.Uri;
+import android.os.AsyncTask;
 import android.os.Bundle;
-import android.preference.Preference;
-import android.preference.Preference.OnPreferenceChangeListener;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentTransaction;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.Button;
-import android.widget.ListView;
+import android.widget.TextView;
 
 import com.actionbarsherlock.app.ActionBar;
-import com.actionbarsherlock.app.SherlockPreferenceActivity;
+import com.actionbarsherlock.app.SherlockFragmentActivity;
 import com.actionbarsherlock.view.MenuItem;
 import com.owncloud.android.R;
-import com.owncloud.android.ui.adapter.LogListAdapter;
+import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.ui.dialog.LoadingDialog;
 import com.owncloud.android.utils.DisplayUtils;
 import com.owncloud.android.utils.FileStorageUtils;
 
 
+public class LogHistoryActivity extends SherlockFragmentActivity  {
+
+    private static final String MAIL_ATTACHMENT_TYPE = "text/plain";
+
+    private static final String TAG = LogHistoryActivity.class.getSimpleName();
+
+    private static final String DIALOG_WAIT_TAG = "DIALOG_WAIT";
+
+    private String mLogPath = FileStorageUtils.getLogPath();
+    private File logDIR = null;
 
 
-public class LogHistoryActivity extends SherlockPreferenceActivity implements OnPreferenceChangeListener {
-    String logpath = FileStorageUtils.getLogPath();
-    File logDIR = null;
-    
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        
+
         setContentView(R.layout.log_send_file);
-        setTitle("Log History");
+        setTitle(getText(R.string.actionbar_logger));
         ActionBar actionBar = getSherlock().getActionBar();
         actionBar.setIcon(DisplayUtils.getSeasonalIconId());
         actionBar.setDisplayHomeAsUpEnabled(true);
-        ListView listView = (ListView) findViewById(android.R.id.list);
         Button deleteHistoryButton = (Button) findViewById(R.id.deleteLogHistoryButton);
-        
+        Button sendHistoryButton = (Button) findViewById(R.id.sendLogHistoryButton);
+
         deleteHistoryButton.setOnClickListener(new OnClickListener() {
             
             @Override
             public void onClick(View v) {
-                File dir = new File(logpath);
-                if (dir != null) {
-                    File[] files = dir.listFiles();
-                    if(files!=null) { 
-                        for(File f: files) {
-                                f.delete();
-                        }
-                    }
-                    dir.delete();
-                }
-                Intent intent = new Intent(getBaseContext(), Preferences.class);
-                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
-                startActivity(intent);
+
+                Log_OC.deleteHistoryLogging();
+                finish();
             }
-            
         });
-        
-       
-        if(logpath != null){
-        logDIR = new File(logpath);
-        }
-        
-        if(logDIR != null && logDIR.isDirectory()) {
-            File[] files = logDIR.listFiles();
-          
-            if (files != null && files.length != 0) {
-                ArrayList<String> logfiles_name = new ArrayList<String>();
-                for (File file : files) {
-                    logfiles_name.add(file.getName());
-                }
-                    String[] logFiles2Array = logfiles_name.toArray(new String[logfiles_name.size()]);
-                    LogListAdapter listadapter = new LogListAdapter(this,logFiles2Array);
-                    listView.setAdapter(listadapter);
+
+        sendHistoryButton.setOnClickListener(new OnClickListener() {
+
+            @Override
+            public void onClick(View v) {
+                sendMail();
             }
+        });
+
+        if (mLogPath != null) {
+            logDIR = new File(mLogPath);
+        }
+
+        if (logDIR != null && logDIR.isDirectory()) {
+            // Show a dialog while log data is being loaded
+            showLoadingDialog();
+
+            TextView logTV = (TextView) findViewById(R.id.logTV);
+
+            // Start a new thread that will load all the log data
+            LoadingLogTask task = new LoadingLogTask(logTV);
+            task.execute();
+
         }
     }
 
-    
     @Override
     public boolean onMenuItemSelected(int featureId, MenuItem item) {
         super.onMenuItemSelected(featureId, item);
-        Intent intent;
-
         switch (item.getItemId()) {
-       
         case android.R.id.home:
-            intent = new Intent(getBaseContext(), Preferences.class);
-            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
-            startActivity(intent);
+            finish();
             break;
         default:
             return false;
         }
         return true;
     }
-    @Override
-    public boolean onPreferenceChange(Preference arg0, Object arg1) {
-        return false;
+
+
+    /**
+     * Start activity for sending email with logs attached
+     */
+    private void sendMail() {
+
+        String emailAddress;
+        try {
+            Class<?> stringClass = R.string.class;
+            Field mailLoggerField = stringClass.getField("mail_logger");
+            int emailAddressId = (Integer)mailLoggerField.get(null);
+            emailAddress = getString(emailAddressId);
+            
+        } catch (Exception e) {
+            emailAddress = "";
+        }
+
+        ArrayList<Uri> uris = new ArrayList<Uri>();
+
+        // Convert from paths to Android friendly Parcelable Uri's
+        for (String file : Log_OC.getLogFileNames())
+        {
+            if (new File(mLogPath + File.separator, file).exists()) {
+                Uri u = Uri.parse("file://" + mLogPath + File.separator + file);
+                uris.add(u);
+            }
+        }
+
+        Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE);
+
+        // Explicitly only use Gmail to send
+        intent.setClassName("com.google.android.gm","com.google.android.gm.ComposeActivityGmail");
+        intent.putExtra(Intent.EXTRA_EMAIL, new String[]{ emailAddress });
+        intent.putExtra(Intent.EXTRA_SUBJECT, getText(R.string.log_mail_subject));
+        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        intent.setType(MAIL_ATTACHMENT_TYPE);
+        intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
+
+        if (intent.resolveActivity(getPackageManager()) != null) {
+            startActivity(intent);
+        }
+    }
+
+    /**
+     *
+     * Class for loading the log data async
+     *
+     */
+    private class LoadingLogTask extends AsyncTask<String, Void, String> {
+        private final WeakReference<TextView> textViewReference;
+
+        public LoadingLogTask(TextView logTV){
+            // Use of a WeakReference to ensure the TextView can be garbage collected
+            textViewReference  = new WeakReference<TextView>(logTV);
+        }
+
+        protected String doInBackground(String... args) {
+            return readLogFile();
+        }
+
+        protected void onPostExecute(String result) {
+            if (textViewReference != null && result != null) {
+                final TextView logTV = textViewReference.get();
+                if (logTV != null) {
+                    logTV.setText(result);
+                    dismissLoadingDialog();
+                }
+            }
+        }
+
+        /**
+         * Read and show log file info
+         */
+        private String readLogFile() {
+
+            String[] logFileName = Log_OC.getLogFileNames();
+
+            //Read text from files
+            StringBuilder text = new StringBuilder();
+
+            BufferedReader br = null;
+            try {
+                String line;
+
+                for (int i = logFileName.length-1; i >= 0; i--) {
+                    File file = new File(mLogPath,logFileName[i]);
+                    if (file.exists()) {
+                        // Check if FileReader is ready
+                        if (new FileReader(file).ready()) {
+                            br = new BufferedReader(new FileReader(file));
+                            while ((line = br.readLine()) != null) {
+                                // Append the log info
+                                text.append(line);
+                                text.append('\n');
+                            }
+                        }
+                    }
+                }
+            }
+            catch (IOException e) {
+                Log_OC.d(TAG, e.getMessage().toString());
+                
+            } finally {
+                if (br != null) {
+                    try {
+                        br.close();
+                    } catch (IOException e) {
+                        // ignore
+                    }
+                }
+            }
+
+            return text.toString();
+        }
+   }
+
+    /**
+     * Show loading dialog
+     */
+    public void showLoadingDialog() {
+        // Construct dialog
+        LoadingDialog loading = new LoadingDialog(
+                getResources().getString(R.string.log_progress_dialog_text)
+        );
+        FragmentManager fm = getSupportFragmentManager();
+        FragmentTransaction ft = fm.beginTransaction();
+        loading.show(ft, DIALOG_WAIT_TAG);
+    }
+
+    /**
+     * Dismiss loading dialog
+     */
+    public void dismissLoadingDialog(){
+        Fragment frag = getSupportFragmentManager().findFragmentByTag(DIALOG_WAIT_TAG);
+        if (frag != null) {
+            LoadingDialog loading = (LoadingDialog) frag;
+            loading.dismiss();
+        }
     }
 }

+ 7 - 6
src/com/owncloud/android/ui/activity/MoveActivity.java

@@ -61,7 +61,7 @@ import com.owncloud.android.ui.fragment.FileFragment;
 import com.owncloud.android.ui.fragment.OCFileListFragment;
 import com.owncloud.android.utils.DisplayUtils;
 import com.owncloud.android.utils.ErrorMessageAdapter;
-import com.owncloud.android.utils.Log_OC;
+import com.owncloud.android.lib.common.utils.Log_OC;
 
 public class MoveActivity extends HookActivity implements FileFragment.ContainerActivity, 
     OnClickListener, SwipeRefreshLayout.OnRefreshListener {
@@ -145,7 +145,7 @@ public class MoveActivity extends HookActivity implements FileFragment.Container
                 OCFileListFragment listOfFolders = getListOfFilesFragment(); 
                 listOfFolders.listDirectory(folder);   
                 
-                startSyncFolderOperation(folder);
+                startSyncFolderOperation(folder, false);
             }
             
             updateNavigationElementsInActionBar();
@@ -201,12 +201,12 @@ public class MoveActivity extends HookActivity implements FileFragment.Container
         setFile(directory);
         updateNavigationElementsInActionBar();
         // Sync Folder
-        startSyncFolderOperation(directory);
+        startSyncFolderOperation(directory, false);
         
     }
 
     
-    public void startSyncFolderOperation(OCFile folder) {
+    public void startSyncFolderOperation(OCFile folder, boolean ignoreETag) {
         long currentSyncTime = System.currentTimeMillis(); 
         
         mSyncInProgress = true;
@@ -216,6 +216,7 @@ public class MoveActivity extends HookActivity implements FileFragment.Container
                                                                         currentSyncTime, 
                                                                         false,
                                                                         getFileOperationsHelper().isSharedSupported(),
+                                                                        ignoreETag,
                                                                         getStorageManager(), 
                                                                         getAccount(), 
                                                                         getApplicationContext()
@@ -323,7 +324,7 @@ public class MoveActivity extends HookActivity implements FileFragment.Container
             listOfFiles.listDirectory(root);
             setFile(listOfFiles.getCurrentFile());
             updateNavigationElementsInActionBar();
-            startSyncFolderOperation(root);
+            startSyncFolderOperation(root, false);
         }
     }
 
@@ -560,7 +561,7 @@ public class MoveActivity extends HookActivity implements FileFragment.Container
         if (listOfFiles != null) {
             OCFile folder = listOfFiles.getCurrentFile();
             if (folder != null) {
-                startSyncFolderOperation(folder);
+                startSyncFolderOperation(folder, true);
             }
         }
     }

+ 10 - 0
src/com/owncloud/android/ui/activity/OnEnforceableRefreshListener.java

@@ -0,0 +1,10 @@
+package com.owncloud.android.ui.activity;
+
+import android.support.v4.widget.SwipeRefreshLayout;
+
+    public interface OnEnforceableRefreshListener extends SwipeRefreshLayout.OnRefreshListener {
+
+        public void onRefresh(boolean enforced);
+
+    }
+

+ 1 - 41
src/com/owncloud/android/ui/activity/Preferences.java

@@ -51,9 +51,9 @@ import com.owncloud.android.R;
 import com.owncloud.android.authentication.AccountUtils;
 import com.owncloud.android.authentication.AuthenticatorActivity;
 import com.owncloud.android.db.DbHandler;
+import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.ui.LongClickableCheckBoxPreference;
 import com.owncloud.android.utils.DisplayUtils;
-import com.owncloud.android.utils.Log_OC;
 
 
 /**
@@ -68,8 +68,6 @@ public class Preferences extends SherlockPreferenceActivity implements AccountMa
 
     private DbHandler mDbHandler;
     private CheckBoxPreference pCode;
-    //private CheckBoxPreference pLogging;
-    //private Preference pLoggingHistory;
     private Preference pAboutApp;
 
     private PreferenceCategory mAccountsPrefCategory = null;
@@ -254,44 +252,6 @@ public class Preferences extends SherlockPreferenceActivity implements AccountMa
                    Log_OC.e(TAG, "Error while showing about dialog", e);
                }
        }
-       
-       /* DISABLED FOR RELEASE UNTIL FIXED 
-       pLogging = (CheckBoxPreference) findPreference("log_to_file");
-       if (pLogging != null) {
-           pLogging.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
-               @Override
-               public boolean onPreferenceChange(Preference preference, Object newValue) {
-                   
-                   String logpath = Environment.getExternalStorageDirectory()+File.separator+"owncloud"+File.separator+"log";
-                
-                   if(!pLogging.isChecked()) {
-                       Log_OC.d("Debug", "start logging");
-                       Log_OC.v("PATH", logpath);
-                       Log_OC.startLogging(logpath);
-                   }
-                   else {
-                       Log_OC.d("Debug", "stop logging");
-                       Log_OC.stopLogging();
-                   }
-                   return true;
-               }
-           });
-       }
-       
-       pLoggingHistory = (Preference) findPreference("log_history");
-       if (pLoggingHistory != null) {
-           pLoggingHistory.setOnPreferenceClickListener(new OnPreferenceClickListener() {
-            
-            @Override
-            public boolean onPreferenceClick(Preference preference) {
-                Intent intent = new Intent(getApplicationContext(),LogHistoryActivity.class);
-                startActivity(intent);
-                return true;
-            }
-        });
-       }
-       */
-       
     }
 
     @Override

+ 1 - 1
src/com/owncloud/android/ui/activity/UploadFilesActivity.java

@@ -36,13 +36,13 @@ import com.actionbarsherlock.app.ActionBar;
 import com.actionbarsherlock.app.ActionBar.OnNavigationListener;
 import com.actionbarsherlock.view.MenuItem;
 import com.owncloud.android.R;
+import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.ui.dialog.ConfirmationDialogFragment;
 import com.owncloud.android.ui.dialog.IndeterminateProgressDialog;
 import com.owncloud.android.ui.dialog.ConfirmationDialogFragment.ConfirmationDialogFragmentListener;
 import com.owncloud.android.ui.fragment.LocalFileListFragment;
 import com.owncloud.android.utils.DisplayUtils;
 import com.owncloud.android.utils.FileStorageUtils;
-import com.owncloud.android.utils.Log_OC;
 
 
 /**

+ 1 - 1
src/com/owncloud/android/ui/activity/Uploader.java

@@ -32,7 +32,7 @@ import com.owncloud.android.authentication.AccountAuthenticator;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.files.services.FileUploader;
-import com.owncloud.android.utils.Log_OC;
+import com.owncloud.android.lib.common.utils.Log_OC;
 
 import android.accounts.Account;
 import android.accounts.AccountManager;

+ 1 - 1
src/com/owncloud/android/ui/dialog/ConfirmationDialogFragment.java

@@ -24,7 +24,7 @@ import android.content.DialogInterface;
 import android.os.Bundle;
 
 import com.actionbarsherlock.app.SherlockDialogFragment;
-import com.owncloud.android.utils.Log_OC;
+import com.owncloud.android.lib.common.utils.Log_OC;
 
 
 public class ConfirmationDialogFragment extends SherlockDialogFragment {

+ 1 - 1
src/com/owncloud/android/ui/dialog/SamlWebViewDialog.java

@@ -39,7 +39,7 @@ import com.owncloud.android.R;
 import com.owncloud.android.authentication.SsoWebViewClient;
 import com.owncloud.android.authentication.SsoWebViewClient.SsoWebViewClientListener;
 import com.owncloud.android.lib.common.OwnCloudClient;
-import com.owncloud.android.utils.Log_OC;
+import com.owncloud.android.lib.common.utils.Log_OC;
 
 
 /**

+ 1 - 1
src/com/owncloud/android/ui/dialog/ShareLinkToDialog.java

@@ -42,10 +42,10 @@ import android.widget.TextView;
 import com.actionbarsherlock.app.SherlockDialogFragment;
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.ui.activity.ComponentsGetter;
 import com.owncloud.android.ui.activity.CopyToClipboardActivity;
 import com.owncloud.android.ui.activity.FileActivity;
-import com.owncloud.android.utils.Log_OC;
 
 /**
  * Dialog showing a list activities able to resolve a given Intent, 

+ 1 - 1
src/com/owncloud/android/ui/dialog/SslUntrustedCertDialog.java

@@ -36,11 +36,11 @@ import com.actionbarsherlock.app.SherlockDialogFragment;
 import com.owncloud.android.R;
 import com.owncloud.android.lib.common.network.CertificateCombinedException;
 import com.owncloud.android.lib.common.network.NetworkUtils;
+import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.ui.adapter.CertificateCombinedExceptionViewAdapter;
 import com.owncloud.android.ui.adapter.SslCertificateViewAdapter;
 import com.owncloud.android.ui.adapter.SslErrorViewAdapter;
 import com.owncloud.android.ui.adapter.X509CertificateViewAdapter;
-import com.owncloud.android.utils.Log_OC;
 
 /**
  * Dialog to show information about an untrusted certificate and allow the user

+ 1 - 1
src/com/owncloud/android/ui/dialog/SslValidatorDialog.java

@@ -42,7 +42,7 @@ import android.widget.TextView;
 import com.owncloud.android.lib.common.network.CertificateCombinedException;
 import com.owncloud.android.lib.common.network.NetworkUtils;
 import com.owncloud.android.lib.common.operations.RemoteOperationResult;
-import com.owncloud.android.utils.Log_OC;
+import com.owncloud.android.lib.common.utils.Log_OC;
 
 /**
  * Dialog to request the user about a certificate that could not be validated with the certificates store in the system.

+ 14 - 4
src/com/owncloud/android/ui/fragment/ExtendedListFragment.java

@@ -33,14 +33,15 @@ import android.widget.TextView;
 
 import com.actionbarsherlock.app.SherlockFragment;
 import com.owncloud.android.R;
+import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.ui.ExtendedListView;
-import com.owncloud.android.utils.Log_OC;
+import com.owncloud.android.ui.activity.OnEnforceableRefreshListener;
 
 /**
  *  TODO extending SherlockListFragment instead of SherlockFragment 
  */
 public class ExtendedListFragment extends SherlockFragment 
-implements OnItemClickListener, SwipeRefreshLayout.OnRefreshListener {
+implements OnItemClickListener, OnEnforceableRefreshListener {
     
     private static final String TAG = ExtendedListFragment.class.getSimpleName();
 
@@ -63,7 +64,7 @@ implements OnItemClickListener, SwipeRefreshLayout.OnRefreshListener {
     private ArrayList<Integer> mTops;
     private int mHeightCell = 0;
 
-    private SwipeRefreshLayout.OnRefreshListener mOnRefreshListener = null;
+    private OnEnforceableRefreshListener mOnRefreshListener = null;
     
     
     public void setListAdapter(ListAdapter listAdapter) {
@@ -240,7 +241,7 @@ implements OnItemClickListener, SwipeRefreshLayout.OnRefreshListener {
         }
     }
     
-    public void setOnRefreshListener(SwipeRefreshLayout.OnRefreshListener listener) {
+    public void setOnRefreshListener(OnEnforceableRefreshListener listener) {
         mOnRefreshListener = listener;
     }
     
@@ -300,4 +301,13 @@ implements OnItemClickListener, SwipeRefreshLayout.OnRefreshListener {
         refreshLayout.setOnRefreshListener(this);
     }
 
+    @Override
+    public void onRefresh(boolean ignoreETag) {
+        mRefreshLayout.setRefreshing(false);
+        mRefreshEmptyLayout.setRefreshing(false);
+
+        if (mOnRefreshListener != null) {
+            mOnRefreshListener.onRefresh(ignoreETag);
+        }
+    }
 }

+ 1 - 1
src/com/owncloud/android/ui/fragment/FileDetailFragment.java

@@ -41,13 +41,13 @@ import com.owncloud.android.files.FileMenuFilter;
 import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
 import com.owncloud.android.files.services.FileUploader.FileUploaderBinder;
 import com.owncloud.android.lib.common.network.OnDatatransferProgressListener;
+import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.services.observer.FileObserverService;
 import com.owncloud.android.ui.activity.FileActivity;
 import com.owncloud.android.ui.activity.FileDisplayActivity;
 import com.owncloud.android.ui.dialog.RemoveFileDialogFragment;
 import com.owncloud.android.ui.dialog.RenameFileDialogFragment;
 import com.owncloud.android.utils.DisplayUtils;
-import com.owncloud.android.utils.Log_OC;
 
 
 /**

+ 1 - 1
src/com/owncloud/android/ui/fragment/LocalFileListFragment.java

@@ -31,8 +31,8 @@ import android.widget.ImageView;
 import android.widget.ListView;
 
 import com.owncloud.android.R;
+import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.ui.adapter.LocalFileListAdapter;
-import com.owncloud.android.utils.Log_OC;
 
 
 /**

+ 4 - 3
src/com/owncloud/android/ui/fragment/OCFileListFragment.java

@@ -34,15 +34,16 @@ import com.owncloud.android.R;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.files.FileMenuFilter;
+import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.ui.activity.FileDisplayActivity;
 import com.owncloud.android.ui.activity.MoveActivity;
+import com.owncloud.android.ui.activity.OnEnforceableRefreshListener;
 import com.owncloud.android.ui.adapter.FileListListAdapter;
 import com.owncloud.android.ui.dialog.ConfirmationDialogFragment;
 import com.owncloud.android.ui.dialog.RemoveFileDialogFragment;
 import com.owncloud.android.ui.dialog.RenameFileDialogFragment;
 import com.owncloud.android.ui.preview.PreviewImageFragment;
 import com.owncloud.android.ui.preview.PreviewMediaFragment;
-import com.owncloud.android.utils.Log_OC;
 
 /**
  * A Fragment that lists all files and folders in a given path.
@@ -88,7 +89,7 @@ public class OCFileListFragment extends ExtendedListFragment {
                     FileFragment.ContainerActivity.class.getSimpleName());
         }
         try {
-            setOnRefreshListener((SwipeRefreshLayout.OnRefreshListener) activity);
+            setOnRefreshListener((OnEnforceableRefreshListener) activity);
             
         } catch (ClassCastException e) {
             throw new ClassCastException(activity.toString() + " must implement " + 
@@ -174,7 +175,7 @@ public class OCFileListFragment extends ExtendedListFragment {
             
             listDirectory(mFile);
 
-            onRefresh();
+            onRefresh(false);
             
             // restore index and top position
             restoreIndexAndTopPosition();

+ 1 - 1
src/com/owncloud/android/ui/preview/FileDownloadFragment.java

@@ -23,7 +23,6 @@ import com.owncloud.android.R;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
 import com.owncloud.android.ui.fragment.FileFragment;
-import com.owncloud.android.utils.Log_OC;
 
 import android.accounts.Account;
 import android.os.Bundle;
@@ -38,6 +37,7 @@ import android.widget.ProgressBar;
 import android.widget.TextView;
 
 import com.owncloud.android.lib.common.network.OnDatatransferProgressListener;
+import com.owncloud.android.lib.common.utils.Log_OC;
 
 
 /**

+ 3 - 3
src/com/owncloud/android/ui/preview/PreviewImageActivity.java

@@ -49,6 +49,7 @@ 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.CreateShareOperation;
 import com.owncloud.android.operations.RemoveFileOperation;
 import com.owncloud.android.operations.UnshareLinkOperation;
@@ -57,7 +58,6 @@ import com.owncloud.android.ui.activity.FileDisplayActivity;
 import com.owncloud.android.ui.activity.PinCodeActivity;
 import com.owncloud.android.ui.fragment.FileFragment;
 import com.owncloud.android.utils.DisplayUtils;
-import com.owncloud.android.utils.Log_OC;
 
 
 /**
@@ -320,7 +320,7 @@ ViewPager.OnPageChangeListener, OnRemoteOperationListener {
     @Override
     protected void onResume() {
         super.onResume();
-        //Log.e(TAG, "ACTIVITY, ONRESUME");
+        //Log_OC.e(TAG, "ACTIVITY, ONRESUME");
         mDownloadFinishReceiver = new DownloadFinishReceiver();
         
         IntentFilter filter = new IntentFilter(FileDownloader.getDownloadFinishMessage());
@@ -330,7 +330,7 @@ ViewPager.OnPageChangeListener, OnRemoteOperationListener {
 
     @Override
     protected void onPostResume() {
-        //Log.e(TAG, "ACTIVITY, ONPOSTRESUME");
+        //Log_OC.e(TAG, "ACTIVITY, ONPOSTRESUME");
         super.onPostResume();
     }
     

+ 1 - 1
src/com/owncloud/android/ui/preview/PreviewImageFragment.java

@@ -40,10 +40,10 @@ import com.ortiz.touch.TouchImageView;
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.files.FileMenuFilter;
+import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.ui.dialog.ConfirmationDialogFragment;
 import com.owncloud.android.ui.dialog.RemoveFileDialogFragment;
 import com.owncloud.android.ui.fragment.FileFragment;
-import com.owncloud.android.utils.Log_OC;
 
 
 /**

+ 9 - 9
src/com/owncloud/android/ui/preview/PreviewImagePagerAdapter.java

@@ -199,17 +199,17 @@ public class PreviewImagePagerAdapter extends FragmentStatePagerAdapter {
      *- /
     @Override
     public void startUpdate(ViewGroup container) {
-        Log.e(TAG, "** startUpdate");
+        Log_OC.e(TAG, "** startUpdate");
     }
 
     @Override
     public Object instantiateItem(ViewGroup container, int position) {
-        Log.e(TAG, "** instantiateItem " + position);
+        Log_OC.e(TAG, "** instantiateItem " + position);
         
         if (mFragments.size() > position) {
             Fragment fragment = mFragments.get(position);
             if (fragment != null) {
-                Log.e(TAG, "** \t returning cached item");
+                Log_OC.e(TAG, "** \t returning cached item");
                 return fragment;
             }
         }
@@ -235,7 +235,7 @@ public class PreviewImagePagerAdapter extends FragmentStatePagerAdapter {
         }
         fragment.setMenuVisibility(false);
         mFragments.set(position, fragment);
-        //Log.e(TAG, "** \t adding fragment at position " + position + ", containerId " + container.getId());
+        //Log_OC.e(TAG, "** \t adding fragment at position " + position + ", containerId " + container.getId());
         mCurTransaction.add(container.getId(), fragment);
 
         return fragment;
@@ -243,13 +243,13 @@ public class PreviewImagePagerAdapter extends FragmentStatePagerAdapter {
 
     @Override
     public void destroyItem(ViewGroup container, int position, Object object) {
-        Log.e(TAG, "** destroyItem " + position);
+        Log_OC.e(TAG, "** destroyItem " + position);
         Fragment fragment = (Fragment)object;
         
         if (mCurTransaction == null) {
             mCurTransaction = mFragmentManager.beginTransaction();
         }
-        Log.e(TAG, "** \t removing fragment at position " + position);
+        Log_OC.e(TAG, "** \t removing fragment at position " + position);
         while (mSavedState.size() <= position) {
             mSavedState.add(null);
         }
@@ -275,13 +275,13 @@ public class PreviewImagePagerAdapter extends FragmentStatePagerAdapter {
 
     @Override
     public void finishUpdate(ViewGroup container) {
-        Log.e(TAG, "** finishUpdate (start)");
+        Log_OC.e(TAG, "** finishUpdate (start)");
         if (mCurTransaction != null) {
             mCurTransaction.commitAllowingStateLoss();
             mCurTransaction = null;
             mFragmentManager.executePendingTransactions();
         }
-        Log.e(TAG, "** finishUpdate (end)");
+        Log_OC.e(TAG, "** finishUpdate (end)");
     }
 
     @Override
@@ -336,7 +336,7 @@ public class PreviewImagePagerAdapter extends FragmentStatePagerAdapter {
                         f.setMenuVisibility(false);
                         mFragments.set(index, f);
                     } else {
-                        Log.w(TAG, "Bad fragment at key " + key);
+                        Log_OC.w(TAG, "Bad fragment at key " + key);
                     }
                 }
             }

+ 1 - 1
src/com/owncloud/android/ui/preview/PreviewMediaFragment.java

@@ -47,6 +47,7 @@ import com.actionbarsherlock.view.MenuItem;
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.files.FileMenuFilter;
+import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.media.MediaControlView;
 import com.owncloud.android.media.MediaService;
 import com.owncloud.android.media.MediaServiceBinder;
@@ -54,7 +55,6 @@ import com.owncloud.android.ui.activity.FileActivity;
 import com.owncloud.android.ui.dialog.ConfirmationDialogFragment;
 import com.owncloud.android.ui.dialog.RemoveFileDialogFragment;
 import com.owncloud.android.ui.fragment.FileFragment;
-import com.owncloud.android.utils.Log_OC;
 
 
 /**

+ 1 - 1
src/com/owncloud/android/ui/preview/PreviewVideoActivity.java

@@ -21,7 +21,6 @@ import com.owncloud.android.R;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.media.MediaService;
 import com.owncloud.android.ui.activity.FileActivity;
-import com.owncloud.android.utils.Log_OC;
 
 import android.accounts.Account;
 import android.app.AlertDialog;
@@ -38,6 +37,7 @@ import android.widget.VideoView;
 
 import com.owncloud.android.lib.common.accounts.AccountUtils;
 import com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException;
+import com.owncloud.android.lib.common.utils.Log_OC;
 
 /**
  *  Activity implementing a basic video player.

+ 0 - 129
src/com/owncloud/android/utils/Log_OC.java

@@ -1,129 +0,0 @@
-package com.owncloud.android.utils;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Locale;
-
-import com.owncloud.android.MainApp;
-
-import android.util.Log;
-
-
-
-public class Log_OC {
-    
-
-    private static boolean isEnabled = false;
-    private static File logFile;
-    private static File folder;
-    private static BufferedWriter buf;  
-    
-    public static void i(String TAG, String message){
-        // Printing the message to LogCat console
-        int a = Log.i(TAG, message);
-        // Write the log message to the file
-        appendLog(TAG+" : "+message);
-    }
-
-    public static void d(String TAG, String message){
-        Log.d(TAG, message);
-        appendLog(TAG + " : " + message);
-    }
-    public static void d(String TAG, String message, Exception e) {
-        Log.d(TAG, message, e);
-        appendLog(TAG + " : " + message + " Exception : "+ e.getStackTrace());
-    }
-    public static void e(String TAG, String message){
-        Log.e(TAG, message);
-        appendLog(TAG + " : " + message);
-    }
-    
-    public static void e(String TAG, String message, Throwable e) {
-        Log.e(TAG, message, e);
-        appendLog(TAG+" : " + message +" Exception : " + e.getStackTrace());
-    }
-    
-    public static void v(String TAG, String message){
-        Log.v(TAG, message);
-        appendLog(TAG+" : "+ message);
-    }
-    
-    public static void w(String TAG, String message) {
-        Log.w(TAG,message); 
-        appendLog(TAG+" : "+ message);
-    }
-    
-    public static void wtf(String TAG, String message) {
-        Log.wtf(TAG,message); 
-        appendLog(TAG+" : "+ message);
-    }
-    
-    public static void startLogging(String logPath) {
-        folder = new File(logPath);
-        logFile = new File(folder + File.separator + "log.txt");
-        
-        if (!folder.exists()) {
-            folder.mkdirs();
-        }
-        if (logFile.exists()) {
-            logFile.delete();
-        }
-        try { 
-            logFile.createNewFile();
-            buf = new BufferedWriter(new FileWriter(logFile, true));
-            isEnabled = true;
-            appendPhoneInfo();
-        }catch (IOException e){ 
-            e.printStackTrace(); 
-        } 
-    }
-    
-    public static void stopLogging() {
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault());
-        String currentDateandTime = sdf.format(new Date());
-        if (logFile != null) {
-            logFile.renameTo(new File(folder + File.separator + MainApp.getLogName() + currentDateandTime+".log"));
-          
-            isEnabled = false;
-            try {
-                buf.close();
-            } catch (IOException e) {
-                e.printStackTrace();
-            } 
-        
-        }
-        
-    }
-    
-    private static void appendPhoneInfo() {
-        appendLog("Model : " + android.os.Build.MODEL);
-        appendLog("Brand : " + android.os.Build.BRAND);
-        appendLog("Product : " + android.os.Build.PRODUCT);
-        appendLog("Device : " + android.os.Build.DEVICE);
-        appendLog("Version-Codename : " + android.os.Build.VERSION.CODENAME);
-        appendLog("Version-Release : " + android.os.Build.VERSION.RELEASE);
-    }
-    
-    private static void appendLog(String text) { 
-        if (isEnabled) {
-           try { 
-               buf.append(text); 
-               buf.newLine(); 
-           } catch (IOException e) { 
-               e.printStackTrace(); 
-        } 
-    }
-}
-
-    
-   
-
-  
-
-   
-   
-}