-Subproject commit 0dd68c1f65c31bd716b2de26e644c87c98e9b9c2
+Subproject commit 925227b41be9a40e6c30a1fd833ea0a25bc8c3dc
android:layout_weight="1"\r
android:layout_gravity="center"\r
android:background="@color/login_logo_background_color"\r
- android:src="@drawable/logo" \r
+ android:src="@drawable/logo"\r
+ android:contentDescription="@string/app_name"\r
/>\r
\r
<ScrollView\r
android:layout_marginBottom="10dp"\r
android:onClick="onRefreshClick"\r
android:text="@string/auth_check_server"\r
- android:visibility="gone" />\r
+ android:visibility="gone"\r
+ android:contentDescription="@string/auth_check_server"/>\r
<TextView\r
android:id="@+id/instructions_message"\r
android:layout_width="wrap_content"\r
android:layout_gravity="fill_horizontal"\r
android:text="@string/auth_expired_basic_auth_toast" \r
android:visibility="gone"\r
- android:layout_marginBottom="10dp"/>\r
+ android:layout_marginBottom="10dp"\r
+ android:contentDescription="@string/auth_expired_basic_auth_toast"/>\r
<FrameLayout \r
android:id="@+id/hostUrlFrame"\r
android:layout_width="match_parent"\r
android:inputType="textUri"\r
android:drawablePadding="5dp"\r
android:paddingRight="55dp"\r
+ android:contentDescription="@string/auth_host_address"\r
>\r
<requestFocus />\r
</EditText>\r
android:onClick="onRefreshClick"\r
android:visibility="gone"\r
android:background="@android:color/transparent"\r
+ android:contentDescription="@string/auth_refresh_button"\r
/>\r
</FrameLayout>\r
\r
android:drawableLeft="@android:drawable/stat_notify_sync"\r
android:drawablePadding="5dp"\r
android:gravity="center_vertical"\r
- android:text="@string/auth_testing_connection" />\r
+ android:text="@string/auth_testing_connection"\r
+ android:contentDescription="@string/auth_testing_connection"/>\r
\r
<CheckBox\r
android:id="@+id/oauth_onOff_check"\r
android:onClick="onCheckClick"\r
android:text="@string/oauth_check_onoff"\r
android:textAppearance="?android:attr/textAppearanceSmall"\r
+ android:contentDescription="@string/oauth_check_onoff"\r
/>\r
\r
<EditText\r
android:text="@string/oauth2_url_endpoint_auth"\r
android:singleLine="true"\r
android:inputType="textUri"\r
- android:visibility="gone" >\r
+ android:visibility="gone">\r
</EditText> \r
\r
<EditText\r
android:text="@string/oauth2_url_endpoint_access"\r
android:singleLine="true"\r
android:inputType="textUri"\r
- android:visibility="gone" >\r
+ android:visibility="gone">\r
<requestFocus />\r
</EditText> \r
\r
android:layout_height="wrap_content"\r
android:ems="10"\r
android:hint="@string/auth_username"\r
- android:inputType="textNoSuggestions" />\r
+ android:inputType="textNoSuggestions"\r
+ android:contentDescription="@string/auth_username"/>\r
\r
<EditText\r
android:id="@+id/account_password"\r
android:hint="@string/auth_password"\r
android:inputType="textPassword"\r
android:drawablePadding="5dp"\r
+ android:contentDescription="@string/auth_password"\r
/>\r
\r
<TextView\r
android:text="@string/auth_unauthorized"\r
android:drawableLeft="@android:drawable/stat_notify_sync"\r
android:drawablePadding="5dip"\r
+ android:contentDescription="@string/auth_unauthorized"\r
/>\r
\r
</LinearLayout>\r
android:layout_gravity="center_horizontal"\r
android:enabled="false"\r
android:onClick="onOkClick"\r
- android:text="@string/setup_btn_connect" />\r
+ android:text="@string/setup_btn_connect"\r
+ android:contentDescription="@string/setup_btn_connect"/>\r
\r
<Button\r
android:id="@+id/welcome_link"\r
android:paddingBottom="5dp"\r
android:paddingTop="5dp"\r
android:text="@string/auth_register"\r
- android:textColor="#0000FF"/>\r
+ android:textColor="#0000FF"\r
+ android:contentDescription="@string/auth_register"/>\r
</LinearLayout>\r
\r
</RelativeLayout>\r
android:layout_marginBottom="10dp"\r
android:layout_marginTop="10dp"\r
android:background="@color/login_logo_background_color"\r
- android:src="@drawable/logo" />\r
+ android:src="@drawable/logo"\r
+ android:contentDescription="@string/app_name"/>\r
\r
<Button\r
android:id="@+id/centeredRefreshButton"\r
android:layout_marginBottom="10dp"\r
android:onClick="onRefreshClick"\r
android:text="@string/auth_check_server"\r
- android:visibility="gone" />\r
+ android:visibility="gone"\r
+ android:contentDescription="@string/auth_check_server"/>\r
\r
<TextView\r
android:id="@+id/instructions_message"\r
android:layout_gravity="fill_horizontal"\r
android:text="@string/auth_expired_basic_auth_toast"\r
android:visibility="gone"\r
- android:layout_marginBottom="10dp" />\r
+ android:layout_marginBottom="10dp"\r
+ android:contentDescription="@string/auth_expired_basic_auth_toast"/>\r
\r
<FrameLayout \r
android:id="@+id/hostUrlFrame"\r
android:inputType="textUri"\r
android:drawablePadding="5dp"\r
android:paddingRight="55dp"\r
+ android:contentDescription="@string/auth_host_address"\r
>\r
<requestFocus />\r
</EditText>\r
android:onClick="onRefreshClick"\r
android:visibility="gone"\r
android:background="@android:color/transparent"\r
+ android:contentDescription="@string/auth_refresh_button"\r
/>\r
</FrameLayout>\r
\r
android:drawableLeft="@android:drawable/stat_notify_sync"\r
android:drawablePadding="5dp"\r
android:gravity="center_vertical"\r
- android:text="@string/auth_testing_connection" />\r
+ android:text="@string/auth_testing_connection"\r
+ android:contentDescription="@string/auth_testing_connection"/>\r
\r
<CheckBox\r
android:id="@+id/oauth_onOff_check"\r
android:onClick="onCheckClick"\r
android:text="@string/oauth_check_onoff"\r
android:textAppearance="?android:attr/textAppearanceSmall"\r
+ android:contentDescription="@string/oauth_check_onoff"\r
/>\r
\r
<EditText\r
android:text="@string/oauth2_url_endpoint_auth"\r
android:singleLine="true"\r
android:inputType="textUri"\r
- android:visibility="gone" >\r
+ android:visibility="gone">\r
</EditText>\r
\r
<EditText\r
android:text="@string/oauth2_url_endpoint_access"\r
android:singleLine="true"\r
android:inputType="textUri"\r
- android:visibility="gone" />\r
+ android:visibility="gone"/>\r
\r
<EditText\r
android:id="@+id/account_username"\r
android:layout_height="wrap_content"\r
android:ems="10"\r
android:hint="@string/auth_username"\r
- android:inputType="textNoSuggestions" \r
+ android:inputType="textNoSuggestions"\r
+ android:contentDescription="@string/auth_username"\r
/>\r
\r
<EditText\r
android:drawablePadding="5dp"\r
android:ems="10"\r
android:hint="@string/auth_password"\r
- android:inputType="textPassword" \r
+ android:inputType="textPassword"\r
+ android:contentDescription="@string/auth_password"\r
/>\r
\r
<TextView\r
android:drawableLeft="@android:drawable/stat_notify_sync"\r
android:drawablePadding="5dp"\r
android:gravity="center_vertical"\r
- android:text="@string/auth_unauthorized" />\r
+ android:text="@string/auth_unauthorized"\r
+ android:contentDescription="@string/auth_unauthorized"/>\r
\r
<Button\r
android:id="@+id/buttonOK"\r
android:layout_gravity="center_horizontal"\r
android:enabled="false"\r
android:onClick="onOkClick"\r
- android:text="@string/setup_btn_connect" />\r
+ android:text="@string/setup_btn_connect"\r
+ android:contentDescription="@string/setup_btn_connect"/>\r
\r
<Button\r
android:id="@+id/welcome_link"\r
android:paddingBottom="5dp"\r
android:paddingTop="5dp"\r
android:text="@string/auth_register"\r
- android:textColor="#0000FF"/>\r
+ android:textColor="#0000FF"\r
+ android:contentDescription="@string/auth_register"/>\r
\r
</LinearLayout>\r
\r
android:layout_height="fill_parent" android:divider="@drawable/uploader_list_separator"
android:dividerHeight="1dip"></ListView>
</FrameLayout>
- <LinearLayout android:id="@+id/linearLayout1"
- android:layout_width="fill_parent" android:layout_alignParentBottom="true" android:layout_height="wrap_content" android:orientation="vertical">
- <Button android:layout_gravity="bottom" android:layout_height="wrap_content"
- android:layout_width="fill_parent" android:id="@+id/uploader_choose_folder"
- android:text="@string/uploader_btn_upload_text"/>
+
+ <LinearLayout
+ android:id="@+id/linearLayout1"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_alignParentBottom="true"
+ android:orientation="horizontal" >
+
+ <Button
+ android:id="@+id/uploader_new_folder"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="bottom"
+ android:layout_weight="1"
+ android:text="@string/uploader_btn_new_folder_text" />
+
+ <Button
+ android:id="@+id/uploader_choose_folder"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="bottom"
+ android:layout_weight="1"
+ android:text="@string/uploader_btn_upload_text" />
+
</LinearLayout>
</RelativeLayout>
android:icon="@drawable/ic_action_upload"
android:orderInCategory="2"
android:showAsAction="always"
- android:title="@string/actionbar_upload"/>
+ android:title="@string/actionbar_upload"
+ android:contentDescription="@string/actionbar_upload"/>
<item
android:id="@+id/action_create_dir"
android:icon="@drawable/ic_action_create_dir"
android:orderInCategory="2"
android:showAsAction="always"
- android:title="@string/actionbar_mkdir"/>
+ android:title="@string/actionbar_mkdir"
+ android:contentDescription="@string/actionbar_mkdir"/>
<item
android:id="@+id/action_sync_account"
android:icon="@drawable/ic_action_refresh"
android:orderInCategory="2"
android:showAsAction="never"
- android:title="@string/actionbar_sync"/>
+ android:title="@string/actionbar_sync"
+ android:contentDescription="@string/actionbar_sync"/>
<item
android:id="@+id/action_settings"
android:icon="@drawable/ic_action_settings"
android:orderInCategory="2"
android:showAsAction="never"
- android:title="@string/actionbar_settings"/>
+ android:title="@string/actionbar_settings"
+ android:contentDescription="@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"/>
+ android:title="@string/actionbar_logger"
+ android:contentDescription="@string/actionbar_logger"/>
<item
android:id="@+id/action_sort"
android:icon="@android:drawable/ic_menu_sort_alphabetically"
android:orderInCategory="2"
android:showAsAction="never"
- android:title="@string/actionbar_sort"/>
+ android:title="@string/actionbar_sort"
+ android:contentDescription="@string/actionbar_sort"/>
<!-- <item android:id="@+id/search" android:title="@string/actionbar_search" android:icon="@drawable/ic_action_search"></item> -->
<string name="auth_no_net_conn_title">لا يتوفر اتصال</string>
<string name="auth_nossl_plain_ok_title">الاتصال الآمن غير متاح</string>
<string name="auth_connection_established">تم الاتصال</string>
- <string name="auth_testing_connection">اختبار الاتصال ...</string>
<string name="auth_not_configured_title">إعداد الخادم غير صحيحة</string>
<string name="auth_account_not_new">الحساب لنفس المستخدم والخادم موجود مسبقا على الجهاز </string>
<string name="auth_account_not_the_same">المستخدم المدخل لا يتوافق مع المستخدم الموجود في الحساب </string>
<string name="saml_authentication_wrong_pass">كلمة مرور خاطئة</string>
<string name="folder_picker_choose_button_text">اختيار</string>
<string name="prefs_category_security">الأمان</string>
+ <string name="auth_host_address">عنوان الخادم</string>
</resources>
<string name="auth_no_net_conn_title">Şəbəkə qoşulması yoxdur</string>
<string name="auth_nossl_plain_ok_title">Təhlükəsiz qoşulma mümkün deyil.</string>
<string name="auth_connection_established">Əlaqə quruldu</string>
- <string name="auth_testing_connection">Qoşulma test edilir...</string>
+ <string name="auth_testing_connection">Qoşulma test edilir</string>
<string name="auth_not_configured_title">Yalnış qurulmuş server konfiqurasiyası</string>
<string name="auth_account_not_new">Avadanlıqda eyni istifadəçi və server üçün artıq hesab mövcuddur</string>
<string name="auth_account_not_the_same">Daxil edilən hesab bu hesabla üst-üstə düşmür</string>
<string name="share_link_file_error">Bu faylın yada qovluğun paylaşımı zamanı səhv baş verdi </string>
<string name="unshare_link_file_no_exist">Paylaşımı dayandırmaq olmur. Xahiş olunur fayl mövcudluğunu yoxlayasınız</string>
<string name="unshare_link_file_error">Bu fayl və ya qovluğun yayımlanmasının dayandırılmasında səhv baş verdi</string>
+ <string name="share_link_password_title">Şifrəni daxil et</string>
+ <string name="share_link_empty_password">Siz şifrəni daxil etməlisiniz</string>
<string name="activity_chooser_send_file_title">Göndər</string>
<string name="copy_link">linki nüsxələ</string>
<string name="clipboard_text_copied">Mübadilə buferinə nüsxələndi</string>
<string name="prefs_instant_video_upload_path_title">Video ünvanını yüklə</string>
<string name="download_folder_failed_content">Qovluğun endirilməsinin %1$s hissəsi tamamlana bilməz </string>
<string name="subject_token">%1$s paylaşdı \"%2$s\" sizinlə</string>
+ <string name="auth_refresh_button">Qoşulmanı yenilə</string>
+ <string name="auth_host_address">Server ünvanı</string>
</resources>
<string name="auth_no_net_conn_title">Няма интернет връзка</string>
<string name="auth_nossl_plain_ok_title">Няма сигурна връзка</string>
<string name="auth_connection_established">Осъществена връзка</string>
- <string name="auth_testing_connection">Проверка на свързаност...</string>
<string name="auth_not_configured_title">Неправилно зададена сървърна конфигурация.</string>
<string name="auth_account_not_new">Профил за същия потребител на същия сървър е вече настроен на устройството.</string>
<string name="auth_account_not_the_same">Въведният потребител не съвпада с потребителя на профила.</string>
<string name="prefs_category_security">Сигурност</string>
<string name="prefs_instant_video_upload_path_title">Качване на видео път</string>
<string name="download_folder_failed_content">Свалянето на директорията %1$s не може да бъде завършено</string>
+ <string name="auth_host_address">Адрес на сървъра</string>
</resources>
<string name="auth_no_net_conn_title">নেটওয়ার্ক সংযোগ নেই</string>
<string name="auth_nossl_plain_ok_title">নিরাপদ যোগাযোগ পাওয়া গেলনা</string>
<string name="auth_connection_established">যোগাযোগ স্থাপিত হয়েছে</string>
- <string name="auth_testing_connection">যোগাযোগ পরীক্ষা করা হচ্ছে...</string>
<string name="auth_not_configured_title">সার্ভারের কনফিগারেশনে ভুল রয়েছে</string>
<string name="auth_account_not_new">এই যন্ত্রে ইতোমধ্যে এই ব্যবহারকারী এবং সার্ভারের নামে একটি একাউন্ট রয়েছে</string>
<string name="auth_account_not_the_same">এই একাউন্টের ব্যবহারকারীর সঙ্গে প্রদত্ত ব্যবহারকারী মেলেনা</string>
<string name="folder_picker_choose_button_text">বেছে নিন</string>
<string name="move_file_not_found">সরাতে ব্যার্থ হলো। ফাইলটি রয়েছে কিনা দেখুন।</string>
<string name="prefs_category_security">নিরাপত্তা</string>
+ <string name="auth_host_address">সার্ভার ঠিকানা</string>
</resources>
<string name="saml_authentication_wrong_pass">Pogrešna lozinka</string>
<string name="folder_picker_choose_button_text">Izaberite</string>
<string name="prefs_category_security">Sigurnost</string>
+ <string name="auth_host_address">Adresa servera</string>
</resources>
<string name="auth_no_net_conn_title">Sense connexió de xarxa</string>
<string name="auth_nossl_plain_ok_title">La connexió segura no està disponible.</string>
<string name="auth_connection_established">S\'ha establert la connexió</string>
- <string name="auth_testing_connection">S\'està comprovant la connexió...</string>
<string name="auth_not_configured_title">La configuració del servidor està malformada</string>
<string name="auth_account_not_new">Ja hi ha un compte al dispositiu pel mateix usuari i mateix servidor</string>
<string name="auth_account_not_the_same">L\'usuari introduït no coincideix amb l\'usuari d\'aquest compte</string>
<string name="downloader_download_file_not_found">El fitxer ja no està disponible en el servidor</string>
<string name="prefs_category_accounts">Comptes</string>
<string name="prefs_add_account">Afegeix compte</string>
+ <string name="log_progress_dialog_text">Carregant dades...</string>
<string name="saml_authentication_required_text">Es requereix autenticació</string>
<string name="saml_authentication_wrong_pass">Contrasenya incorrecta</string>
+ <string name="actionbar_move">Moure</string>
<string name="folder_picker_choose_button_text">Escull</string>
<string name="prefs_category_security">Seguretat</string>
+ <string name="auth_host_address">Adreça del servidor</string>
</resources>
<string name="auth_no_net_conn_title">Žádné síťové spojení</string>
<string name="auth_nossl_plain_ok_title">Zabezpečené spojení není k dispozici</string>
<string name="auth_connection_established">Spojení navázáno</string>
- <string name="auth_testing_connection">Zkouším spojení...</string>
+ <string name="auth_testing_connection">Testuje se připojení</string>
<string name="auth_not_configured_title">Neplatné nastavení serveru</string>
<string name="auth_account_not_new">Účet pro stejného uživatele a server již v zařízení existuje</string>
<string name="auth_account_not_the_same">Zadaný uživatel neodpovídá uživateli tohoto účtu</string>
<string name="prefs_instant_video_upload_path_title">Cesta pro nahrávání videí</string>
<string name="download_folder_failed_content">Stažení adresáře %1$s nemohlo být dokončeno</string>
<string name="subject_token">%1$s sdílí \"%2$s\" s vámi</string>
+ <string name="auth_refresh_button">Obnovit připojení</string>
+ <string name="auth_host_address">Adresa serveru</string>
</resources>
<string name="auth_no_net_conn_title">Ingen netværksforbindelse</string>
<string name="auth_nossl_plain_ok_title">Sikker forbindelse ikke tilgængelig.</string>
<string name="auth_connection_established">Forbindelse oprettet</string>
- <string name="auth_testing_connection">Afprøver forbindelse ...</string>
+ <string name="auth_testing_connection">Tester forbindelsen</string>
<string name="auth_not_configured_title">Misdannet server konfiguration</string>
<string name="auth_account_not_new">En konto for den samme bruger og server eksisterer allerede på enheden</string>
<string name="auth_account_not_the_same">Den indtastede bruger passer ikke til brugeren for denne konto</string>
<string name="prefs_instant_video_upload_path_title">Sti til videoupload</string>
<string name="download_folder_failed_content">Download af %1$s mappe kunne ikke fuldføres</string>
<string name="subject_token">%1$s delt \"%2$s\" med dig</string>
+ <string name="auth_refresh_button">Genopfrisk forbindelsen</string>
+ <string name="auth_host_address">Serveradresse</string>
</resources>
<string name="common_cancel">Abbrechen</string>
<string name="common_error">Fehler</string>
<string name="empty"></string>
+ <string name="auth_host_address">Adresse des Servers</string>
</resources>
<string name="auth_no_net_conn_title">Keine Netzwerkverbindung</string>
<string name="auth_nossl_plain_ok_title">Sichere Verbindung nicht verfügbar.</string>
<string name="auth_connection_established">Verbindung hergestellt</string>
- <string name="auth_testing_connection">Verbindungstest…</string>
+ <string name="auth_testing_connection">Verbindung testen</string>
<string name="auth_not_configured_title">Fehlerhafte Server Konfiguration</string>
<string name="auth_account_not_new">Ein Benutzerkonto für den gleichen Benutzer und Server existiert auf diesem Gerät bereits</string>
<string name="auth_account_not_the_same">Der eingegebene Benutzer passt nicht zu dem Benutzer dieses Benutzerkontos</string>
<string name="prefs_instant_video_upload_path_title">Verzeichnis zum Hochladen der Videos</string>
<string name="download_folder_failed_content">Herunterladen des %1$s - Ordners konnte nicht abgeschlossen werden</string>
<string name="subject_token">%1$s hat „%2$s“ mit Ihnen geteilt</string>
+ <string name="auth_refresh_button">Verbindung aktualisieren</string>
+ <string name="auth_host_address">Serveradresse</string>
</resources>
<string name="auth_no_net_conn_title">Keine Netzwerkverbindung</string>
<string name="auth_nossl_plain_ok_title">Sichere Verbindung nicht verfügbar.</string>
<string name="auth_connection_established">Verbindung hergestellt</string>
- <string name="auth_testing_connection">Verbindung testen…</string>
+ <string name="auth_testing_connection">Verbindung testen</string>
<string name="auth_not_configured_title">Fehlerhafte Server Konfiguration</string>
<string name="auth_account_not_new">Ein Benutzerkonto für den gleichen Benutzer und Server existiert auf diesem Gerät bereits</string>
<string name="auth_account_not_the_same">Der eingegebene Benutzer passt nicht zu dem Benutzer dieses Benutzerkontos</string>
<string name="prefs_instant_video_upload_path_title">Verzeichnis zum Hochladen der Videos</string>
<string name="download_folder_failed_content">Herunterladen des %1$s - Ordners konnte nicht abgeschlossen werden</string>
<string name="subject_token">%1$s hat „%2$s“ mit Dir geteilt</string>
+ <string name="auth_refresh_button">Verbindung aktualisieren</string>
+ <string name="auth_host_address">Serveradresse</string>
</resources>
<string name="auth_no_net_conn_title">Δεν υπάρχει σύνδεση στο δίκτυο</string>
<string name="auth_nossl_plain_ok_title">Μη διαθέσιμη ασφαλής σύνδεση.</string>
<string name="auth_connection_established">Επετεύχθη σύνδεση</string>
- <string name="auth_testing_connection">Έλεγχος σύνδεσης...</string>
+ <string name="auth_testing_connection">Έλεγχος σύνδεσης</string>
<string name="auth_not_configured_title">Λανθασμένες ρυθμίσεις διακομιστή</string>
<string name="auth_account_not_new">Ένας λογαριασμός για τον ίδιο χρήστη και διακομιστή υπάρχει ήδη στη συσκευή</string>
<string name="auth_account_not_the_same">Ο χρήστης που εισάγατε δεν ταιριάζει με το χρήστη αυτού του λογαριασμού</string>
<string name="prefs_instant_video_upload_path_title">Διαδρομή Μεταφόρτωσης Βίντεο</string>
<string name="download_folder_failed_content">Η λήψη του φακέλου %1$s δεν ολοκληρώθηκε με επιτυχία.</string>
<string name="subject_token">%1$s μοιράστηκε \"%2$s\" μαζί σας</string>
+ <string name="auth_refresh_button">Ανανέωση σύνδεσης</string>
+ <string name="auth_host_address">Διεύθυνση διακομιστή</string>
</resources>
<string name="auth_no_net_conn_title">No network connection</string>
<string name="auth_nossl_plain_ok_title">Secure connection unavailable.</string>
<string name="auth_connection_established">Connection established</string>
- <string name="auth_testing_connection">Testing connection…</string>
+ <string name="auth_testing_connection">Testing connection</string>
<string name="auth_not_configured_title">Malformed server configuration</string>
<string name="auth_account_not_new">An account for the same user and server already exists on the device</string>
<string name="auth_account_not_the_same">The entered user does not match the user of this account</string>
<string name="prefs_instant_video_upload_path_title">Upload Video Path</string>
<string name="download_folder_failed_content">Download of %1$s folder could not be completed</string>
<string name="subject_token">%1$s shared \"%2$s\" with you</string>
+ <string name="auth_refresh_button">Refresh connection</string>
+ <string name="auth_host_address">Server address</string>
</resources>
<string name="auth_no_net_conn_title">Neniu reta konekto</string>
<string name="auth_nossl_plain_ok_title">Sekura konekto ne haveblas.</string>
<string name="auth_connection_established">Konekto stariĝis</string>
- <string name="auth_testing_connection">Testante konekton...</string>
<string name="auth_not_configured_title">Malĝuste formita servilo-agordo</string>
<string name="auth_unknown_error_title">Nekonata eraro okazis</string>
<string name="auth_unknown_host_title">Ne eblis trovi gastigon</string>
<string name="saml_authentication_wrong_pass">Malĝusta pasvorto</string>
<string name="folder_picker_choose_button_text">Elekti</string>
<string name="prefs_category_security">Sekuro</string>
+ <string name="auth_host_address">Servila adreso</string>
</resources>
<string name="auth_no_net_conn_title">Sin conexión de red</string>
<string name="auth_nossl_plain_ok_title">Conexión segura no disponible.</string>
<string name="auth_connection_established">Conexión establecida</string>
- <string name="auth_testing_connection">Probando conexión...</string>
<string name="auth_not_configured_title">Configuración de servidor en formato incorrecto</string>
<string name="auth_account_not_new">Una cuenta para el mismo usuario y servidor ya existe en el dispositivo</string>
<string name="auth_account_not_the_same">El usuario ingresado no concuerda con el usuario de esta cuenta</string>
<string name="prefs_category_security">Seguridad</string>
<string name="prefs_instant_video_upload_path_title">Dirección de subida del video</string>
<string name="download_folder_failed_content">La descarga de la carpeta %1$s no pudo ser completada</string>
+ <string name="auth_host_address">Dirección del servidor</string>
</resources>
<string name="auth_no_net_conn_title">Sin conexión de red</string>
<string name="auth_nossl_plain_ok_title">Conexión segura no disponible.</string>
<string name="auth_connection_established">Conexión establecida</string>
- <string name="auth_testing_connection">Probando conexión...</string>
<string name="auth_not_configured_title">La configuración del servidor está mal formada</string>
<string name="auth_unknown_error_title">Ocurrió un error desconocido</string>
<string name="auth_unknown_host_title">No se puede encontrar el host</string>
<string name="auth_no_net_conn_title">Sin conexión de red</string>
<string name="auth_nossl_plain_ok_title">Conexión segura no disponible.</string>
<string name="auth_connection_established">Conexión establecida</string>
- <string name="auth_testing_connection">Probando conexión...</string>
<string name="auth_not_configured_title">Configuración de servidor en formato incorrecto</string>
<string name="auth_account_not_new">Una cuenta para el mismo usuario y servidor ya existen en el dispositivo</string>
<string name="auth_account_not_the_same">El usuario introducido no concuerda con el usuario de esta cuenta</string>
<string name="saml_authentication_wrong_pass">Contraseña incorrecta</string>
<string name="folder_picker_choose_button_text">Seleccionar</string>
<string name="prefs_category_security">Seguridad</string>
+ <string name="auth_host_address">Dirección del servidor</string>
</resources>
<string name="auth_no_net_conn_title">Sin conexión de red</string>
<string name="auth_nossl_plain_ok_title">Conexión segura no disponible.</string>
<string name="auth_connection_established">Conexión establecida</string>
- <string name="auth_testing_connection">Probando conexión...</string>
+ <string name="auth_testing_connection">Comprobando la conexión</string>
<string name="auth_not_configured_title">Configuración de servidor en formato incorrecto</string>
<string name="auth_account_not_new">Ya existe una cuenta en este dispositivo con los mismos datos de Usuario y Servidor</string>
<string name="auth_account_not_the_same">El usuario introducido no concuerda con el usuario de esta cuenta</string>
<string name="share_link_file_error">Ocurrió un error al tratar de compartir este archivo o carpeta</string>
<string name="unshare_link_file_no_exist">No se puede dejar de compartir. Revise si el archivo existe</string>
<string name="unshare_link_file_error">Ocurrió un error al tratar de ya no compartir este archivo o carpeta</string>
+ <string name="share_link_password_title">Introduzca una contraseña</string>
+ <string name="share_link_empty_password">Debe introducir una contraseña</string>
<string name="activity_chooser_send_file_title">Enviar</string>
<string name="copy_link">Copiar enlace</string>
<string name="clipboard_text_copied">Copiado al portapapeles</string>
<string name="prefs_instant_video_upload_path_title">Guardar videos subidos en la carpeta:</string>
<string name="download_folder_failed_content">La descarga de la carpeta %1$s no ha podido ser completada</string>
<string name="subject_token">%1$s compartió \"%2$s\" contigo</string>
+ <string name="auth_refresh_button">Refrescar la conexión</string>
+ <string name="auth_host_address">Dirección del servidor</string>
</resources>
<string name="auth_no_net_conn_title">Võrguühendust pole</string>
<string name="auth_nossl_plain_ok_title">Turvaline ühendus pole saadaval</string>
<string name="auth_connection_established">Saadi ühendus</string>
- <string name="auth_testing_connection">Ühenduse testimine...</string>
<string name="auth_not_configured_title">Vigases vormingus server seadistus</string>
<string name="auth_account_not_new">Sama konto kasutaja ja server on juba selles seadmes olemas</string>
<string name="auth_account_not_the_same">Sisestatud kasutaja ei kattu selle konto kasutajaga</string>
<string name="forbidden_permissions_move">selle faili liigutamiseks</string>
<string name="prefs_category_instant_uploading">Kohesed üleslaadimised</string>
<string name="prefs_category_security">Turvalisus</string>
+ <string name="auth_host_address">Serveri aadress</string>
</resources>
<string name="auth_no_net_conn_title">Ez dago sare konexiorik</string>
<string name="auth_nossl_plain_ok_title">Konexio segurua ez dago eskuragarri</string>
<string name="auth_connection_established">Konexioa ezarri da</string>
- <string name="auth_testing_connection">Konexioa probatzen...</string>
<string name="auth_not_configured_title">gaizki egindako server konfigurazioa</string>
<string name="auth_account_not_new">Erabiltzaile eta zerbitzari hauendako dagoeneko kontu bat existitzen da gailu honetan</string>
<string name="auth_account_not_the_same">Sartutako erabiltzaileak ez du bat egiten kontu honetako erabiltzailearekin</string>
<string name="prefs_category_security">Segurtasuna</string>
<string name="prefs_instant_video_upload_path_title">Bideo Igoera Bidea</string>
<string name="download_folder_failed_content">%1$s karpetaren deskarga ezin izan da burutu</string>
+ <string name="auth_host_address">Zerbitzariaren helbidea</string>
</resources>
<string name="auth_no_net_conn_title">هیچ ارتباطی به شبکه موجود نیست</string>
<string name="auth_nossl_plain_ok_title">اتصال امن در دسترس نیست</string>
<string name="auth_connection_established">اتصال برقرار شد</string>
- <string name="auth_testing_connection">آزمایش اتصال...</string>
<string name="auth_not_configured_title">پیکربندی سرور ناقص است</string>
<string name="auth_account_not_new">یک اکانت با همین نام کاربری و سرور بر روی این دستگاه موجود میباشد.</string>
<string name="auth_account_not_the_same">نام کاربری وارد شده با نام کاربری این اکانت مطابقت ندارد</string>
<string name="saml_authentication_wrong_pass">رمز عبور اشتباه است</string>
<string name="folder_picker_choose_button_text">انتخاب کردن</string>
<string name="prefs_category_security">امنیت</string>
+ <string name="auth_host_address">آدرس سرور</string>
</resources>
<string name="auth_no_net_conn_title">Ei verkkoyhteyttä</string>
<string name="auth_nossl_plain_ok_title">Salattu yhteys ei ole käytettävissä.</string>
<string name="auth_connection_established">Yhteys muodostettu</string>
- <string name="auth_testing_connection">Testataan yhteyttä...</string>
<string name="auth_not_configured_title">Väärin tehdyt palvelin-asetukset</string>
<string name="auth_account_not_new">Laitteella on jo tili samalle käyttäjälle ja palvelimelle</string>
<string name="auth_account_not_the_same">Syötetty käyttäjä ei täsmää tämän tilin käyttäjän kanssa</string>
<string name="prefs_category_instant_uploading">Välittömät lähetykset</string>
<string name="prefs_category_security">Tietoturva</string>
<string name="subject_token">%1$s jakoi kohteen \"%2$s\" kanssasi</string>
+ <string name="auth_refresh_button">Päivitä yhteys</string>
+ <string name="auth_host_address">Palvelimen osoite</string>
</resources>
<string name="auth_no_net_conn_title">Pas de connexion réseau</string>
<string name="auth_nossl_plain_ok_title">Connexion sécurisée non disponible</string>
<string name="auth_connection_established">Connexion établie</string>
- <string name="auth_testing_connection">Test de la connexion…</string>
+ <string name="auth_testing_connection">Test de connexion</string>
<string name="auth_not_configured_title">Configuration du serveur erronée</string>
<string name="auth_account_not_new">Un compte pour le même utilisateur et serveur existe déjà sur cet appareil</string>
<string name="auth_account_not_the_same">L\'utilisateur entré ne correspond pas à l\'utilisateur de ce compte</string>
<string name="prefs_instant_video_upload_path_title">Répertoire de téléversement des vidéos</string>
<string name="download_folder_failed_content">Le téléchargement du dossier %1$s n\'a pas pu être achevé</string>
<string name="subject_token">%1$s a partagé \"%2$s\" avec vous</string>
+ <string name="auth_refresh_button">Actualiser la connexion</string>
+ <string name="auth_host_address">Adresse du serveur</string>
</resources>
<string name="auth_no_net_conn_title">Sen conexión de rede</string>
<string name="auth_nossl_plain_ok_title">Non hai conexión seguras dispoñíbeis.</string>
<string name="auth_connection_established">Estabeleceuse a conexión</string>
- <string name="auth_testing_connection">Comprobando a conexión...</string>
+ <string name="auth_testing_connection">Probando a conexión</string>
<string name="auth_not_configured_title">Configuración errada do servidor</string>
<string name="auth_account_not_new">Xa existe unha conta do mesmo usuario e servidor neste dispositivo</string>
<string name="auth_account_not_the_same">O usuario que introduciu non coincide co usuario desta conta</string>
<string name="auth_unknown_error_title">Produciuse un erro descoñecido!</string>
<string name="auth_unknown_host_title">Non foi posíbel atopar a máquina</string>
<string name="auth_incorrect_path_title">Non se atopou unha instancia do servidor</string>
- <string name="auth_timeout_title">O servidor tardou demasiado en responder</string>
+ <string name="auth_timeout_title">O servidor tardou de máis en responder</string>
<string name="auth_incorrect_address_title">URL incorrecto</string>
- <string name="auth_ssl_general_error_title">Produciuse un fallo ao iniciar o SSL</string>
+ <string name="auth_ssl_general_error_title">Produciuse un fallo ao preparar o SSL</string>
<string name="auth_ssl_unverified_server_title">Non foi posíbel verificar a identidade do servidor SSL</string>
<string name="auth_bad_oc_version_title">Versión do servidor non recoñecida</string>
<string name="auth_wrong_connection_title">Non é posíbel estabelecer a conexión</string>
<string name="prefs_instant_video_upload_path_title">Enviar a ruta do vídeo</string>
<string name="download_folder_failed_content">Non foi posíbel completar a descarga do cartafol %1$s</string>
<string name="subject_token">%1$s compartiu «%2$s» con vostede</string>
+ <string name="auth_refresh_button">Actualizar a conexión</string>
+ <string name="auth_host_address">Enderezo do servidor</string>
</resources>
<string name="auth_no_net_conn_title">אין חיבור לאינטרנט</string>
<string name="auth_nossl_plain_ok_title">אין חיבור מוצפן זמין.</string>
<string name="auth_connection_established">החיבור נוצר</string>
- <string name="auth_testing_connection">החיבור נבדק…</string>
<string name="auth_not_configured_title">תצורת השרת פגומה</string>
<string name="auth_account_not_new">חשבון לאותו משתמש ושרת כבר קיים במכשיר זה</string>
<string name="auth_account_not_the_same">שם המשתמש שהוכנס לא מתאים לשם המשתמש של חשבון זה</string>
<string name="prefs_add_account">הוספת חשבון</string>
<string name="folder_picker_choose_button_text">בחירה</string>
<string name="prefs_category_security">אבטחה</string>
+ <string name="auth_host_address">כתובת שרת</string>
</resources>
<string name="saml_authentication_wrong_pass">Pogrešna lozinka</string>
<string name="folder_picker_choose_button_text">Odaberite</string>
<string name="prefs_category_security">Sigurnost</string>
+ <string name="auth_host_address">Adresa poslužitelja</string>
</resources>
<string name="auth_no_net_conn_title">Nincs hálózati kapcsolat</string>
<string name="auth_nossl_plain_ok_title">Nem érhető el biztonságos kapcsolat.</string>
<string name="auth_connection_established">A kapcsolat létrejött</string>
- <string name="auth_testing_connection">Kapcsolat tesztelése...</string>
<string name="auth_not_configured_title">Hibás a kiszolgáló beállítása</string>
<string name="auth_account_not_new">Egy bejelentkezési beállítás már létezik ugyanehhez a kiszolgálóhoz és felhasználóhoz</string>
<string name="auth_account_not_the_same">A megadott felhasználó nem azonos ezzel a belépési jogosultsággal</string>
<string name="actionbar_move">Mozgatás</string>
<string name="folder_picker_choose_button_text">Válasszon</string>
<string name="prefs_category_security">Biztonság</string>
+ <string name="auth_host_address">A kiszolgáló címe</string>
</resources>
<item>Biggest - Smallest</item>-->
<string name="prefs_category_general">General</string>
<string name="prefs_category_more">Plus</string>
+ <string name="prefs_accounts">Contos</string>
+ <string name="prefs_log_delete_history_button">Deler historia</string>
<string name="prefs_help">Adjuta</string>
<string name="auth_username">Nomine de usator</string>
<string name="auth_password">Contrasigno</string>
<string name="sync_string_files">Files</string>
<string name="setup_btn_connect">Connecte</string>
<string name="uploader_btn_upload_text">Incargar</string>
+ <string name="uploader_wrn_no_account_title">Nulle contos trovate</string>
<string name="file_list_seconds_ago">secundas passate</string>
<string name="file_list_empty">Nihil hic. Incarga alcun cosa!</string>
+ <string name="file_list_folder">dossier</string>
+ <string name="filedetails_size">Dimension:</string>
+ <string name="filedetails_type">Typo:</string>
<string name="filedetails_download">Discargar</string>
<string name="action_share_file">Compartir ligamine</string>
<string name="common_yes">Si</string>
<string name="common_no">No</string>
<string name="common_ok">Ok</string>
+ <string name="common_cancel_download">Cancellar discarga</string>
<string name="common_cancel">Cancellar</string>
<string name="common_error">Error</string>
<string name="common_error_unknown">Error Incognite</string>
<string name="change_password">Cambiar contrasigno</string>
+ <string name="delete_account">Deler conto</string>
<string name="uploader_info_dirname">Nomine de dossier</string>
<string name="activity_chooser_send_file_title">Invia</string>
<string name="empty"></string>
+ <string name="prefs_category_accounts">Contos</string>
+ <string name="saml_authentication_wrong_pass">Contrasigno errate</string>
<string name="folder_picker_choose_button_text">Seliger</string>
</resources>
<string name="auth_no_net_conn_title">Tidak ada koneksi internet</string>
<string name="auth_nossl_plain_ok_title">Sambungan aman tidak tersedia</string>
<string name="auth_connection_established">Sambungan dibuat</string>
- <string name="auth_testing_connection">Pengetesan koneksi ...</string>
<string name="auth_not_configured_title">Konfigurasi server cacat</string>
<string name="auth_account_not_new">Akun untuk pengguna dan server yang sama sudah ada dalam perangkat</string>
<string name="auth_account_not_the_same">Pengguna yang dimasukkan tidak cocok dengan pengguna akun ini</string>
<string name="forbidden_permissions_move">untuk memindahkan berkas ini</string>
<string name="prefs_category_instant_uploading">Unggah Cepat</string>
<string name="prefs_category_security">Keamanan</string>
+ <string name="auth_host_address">Alamat server</string>
</resources>
<string name="activity_chooser_send_file_title">Senda</string>
<string name="empty"></string>
<string name="folder_picker_choose_button_text">Veldu</string>
+ <string name="auth_host_address">Host nafn netþjóns</string>
</resources>
<string name="auth_no_net_conn_title">Nessuna connessione di rete</string>
<string name="auth_nossl_plain_ok_title">Connessione sicura disponibile.</string>
<string name="auth_connection_established">Connessione stabilita</string>
- <string name="auth_testing_connection">Prova di connessione in corso...</string>
+ <string name="auth_testing_connection">Prova di connessione</string>
<string name="auth_not_configured_title">Configurazione non corretta di il server</string>
<string name="auth_account_not_new">Esiste già un account su questo dispositivo per lo stesso utente e server</string>
<string name="auth_account_not_the_same">L\'utente digitato non corrisponde all\'utente di questo account</string>
<string name="prefs_instant_video_upload_path_title">Percorso di caricamento video</string>
<string name="download_folder_failed_content">Lo scaricamento della cartella %1$s non può essere completato</string>
<string name="subject_token">%1$s ha condiviso \"%2$s\" con te</string>
+ <string name="auth_refresh_button">Aggiorna la connessione</string>
+ <string name="auth_host_address">Indirizzo del server</string>
</resources>
<string name="auth_no_net_conn_title">ネットワークに接続されていません</string>
<string name="auth_nossl_plain_ok_title">暗号化通信が利用できません。</string>
<string name="auth_connection_established">接続が確立しました</string>
- <string name="auth_testing_connection">接続をテスト中...</string>
<string name="auth_not_configured_title">サーバー設定が間違っています</string>
<string name="auth_account_not_new">同じユーザーとサーバーのアカウントがデバイス上にすでに存在します</string>
<string name="auth_account_not_the_same">入力されたユーザーはこのアカウントのユーザーと一致しません</string>
<string name="prefs_instant_video_upload_path_title">動画のアップロードパス</string>
<string name="download_folder_failed_content">%1$s のフォルダのダウンロードが完了しませんでした。</string>
<string name="subject_token">%1$sがあなたと\"%2$s\"を共有しました</string>
+ <string name="auth_host_address">サーバーアドレス</string>
</resources>
<string name="prefs_category_accounts">ანგარიში</string>
<string name="folder_picker_choose_button_text">არჩევა</string>
<string name="prefs_category_security">უსაფრთხოება</string>
+ <string name="auth_host_address">სერვერის მისამართი</string>
</resources>
<string name="pincode_stored">App PIN បានយកមកវិញ</string>
<string name="auth_trying_to_login">កំពុងតែព្យាយាមដើម្បីចូល...</string>
<string name="auth_no_net_conn_title">គ្មានបណ្តាញតភ្ជាប់ទេ</string>
- <string name="auth_testing_connection">ការតភ្ជាប់កំពុងតែធ្វើតេស្ត...</string>
<string name="auth_unknown_error_title">មិនស្គាល់កំហុសបានកើតឡើង!</string>
<string name="fd_keep_in_sync">រក្សាឯកសាររហូតដល់កាលបរិច្ឆេទ</string>
<string name="common_rename">ប្ដូរឈ្មោះ</string>
<string name="saml_authentication_wrong_pass">ខុសពាក្យសម្ងាត់</string>
<string name="folder_picker_choose_button_text">ជ្រើស</string>
<string name="prefs_category_security">សុវត្ថិភាព</string>
+ <string name="auth_host_address">អាសយដ្ឋានម៉ាស៊ីនបម្រើ</string>
</resources>
<string name="saml_authentication_wrong_pass">ದುರ್ಬಲ ಗುಪ್ತಪದ</string>
<string name="folder_picker_choose_button_text">ಆಯ್ಕೆ</string>
<string name="prefs_category_security">ಭದ್ರತೆ</string>
+ <string name="auth_host_address">ಪರಿಚಾರಕ ಗಣಕಯಂತ್ರದ ವಿಳಾಸ</string>
</resources>
<string name="auth_no_net_conn_title">네트워크에 연결할 수 없습니다</string>
<string name="auth_nossl_plain_ok_title">암호화된 연결을 사용할 수 없습니다.</string>
<string name="auth_connection_established">연결됨</string>
- <string name="auth_testing_connection">연결 테스트 중...</string>
<string name="auth_not_configured_title">서버 설정이 잘못됨</string>
<string name="auth_account_not_new">같은 사용자와 서버에 대한 계정이 이미 존재합니다</string>
<string name="auth_account_not_the_same">입력된 사용자가 이 계정의 사용자와 일치하지 않습니다</string>
<string name="prefs_instant_video_upload_path_title">동영상 업로드 경로</string>
<string name="download_folder_failed_content">%1$s 폴더를 다운로드할 수 없습니다</string>
<string name="subject_token">%1$s에서 \"%2$s\"를 당신과 공유하였습니다.</string>
+ <string name="auth_host_address">서버 주소</string>
</resources>
<string name="uploader_info_dirname">ناوی بوخچه</string>
<string name="empty"></string>
<string name="prefs_category_accounts">هەژمارەکان</string>
+ <string name="auth_host_address">ناونیشانی ڕاژه</string>
</resources>
<string name="empty"></string>
<string name="prefs_category_accounts">Accounten</string>
<string name="folder_picker_choose_button_text">Auswielen</string>
+ <string name="auth_host_address">Server Adress</string>
</resources>
<resources>
<!--TODO re-enable when server-side folder size calculation is available
<item>Biggest - Smallest</item>-->
+ <string name="common_error_unknown">ຂໍ້ຜິດພາດທີ່ບໍ່ຮູ້ສາເຫດ</string>
<string name="empty"></string>
</resources>
<string name="auth_no_net_conn_title">Nėra tinklo ryšio</string>
<string name="auth_nossl_plain_ok_title">Saugus prisijungimas negalimas.</string>
<string name="auth_connection_established">Ryšys užmegztas</string>
- <string name="auth_testing_connection">Išbandomas prisijungimas...</string>
<string name="auth_not_configured_title">Sugadinta serverio konfigūracija</string>
<string name="auth_account_not_new">To paties vartotojo ir serverio paskyra jau egzistuoja šiame įrenginyje</string>
<string name="auth_unknown_error_title">Įvyko nežinoma klaida!</string>
<string name="saml_authentication_wrong_pass">Neteisingas slaptažodis</string>
<string name="folder_picker_choose_button_text">Pasirinkite</string>
<string name="prefs_category_security">Saugumas</string>
+ <string name="auth_host_address">Serverio adresas</string>
</resources>
<string name="auth_no_net_conn_title">Nav tīkla savienojumu</string>
<string name="auth_nossl_plain_ok_title">Nav pieejams drošs savienojums.</string>
<string name="auth_connection_established">Savienojums ir izveidots</string>
- <string name="auth_testing_connection">Testē savienojumu...</string>
<string name="auth_not_configured_title">Slikti formatēta servera konfigurācija</string>
<string name="auth_unknown_error_title">Gadījās nezināma kļūda!</string>
<string name="auth_unknown_host_title">Nevarēja atrast datoru</string>
<string name="saml_authentication_wrong_pass">Nepareiza parole</string>
<string name="folder_picker_choose_button_text">Izvēlieties</string>
<string name="prefs_category_security">Drošība</string>
+ <string name="auth_host_address">Servera adrese</string>
</resources>
<string name="auth_no_net_conn_title">Нема мрежна конекција</string>
<string name="auth_nossl_plain_ok_title">Нема безбедна конекција.</string>
<string name="auth_connection_established">Конекцијата е воспоставена</string>
- <string name="auth_testing_connection">Ја тестирам врската...</string>
<string name="auth_unknown_error_title">Се појави непознаа грешка!</string>
<string name="auth_unknown_host_title">Не можев да го најдам хостот</string>
<string name="auth_incorrect_path_title">Серверската инстанца не е пронајдена</string>
<string name="saml_authentication_wrong_pass">Погрешна лозинка</string>
<string name="folder_picker_choose_button_text">Избери</string>
<string name="prefs_category_security">Безбедност</string>
+ <string name="auth_host_address">Адреса на сервер</string>
</resources>
<string name="confirmation_remove_local">Lokal sahaja</string>
<string name="empty"></string>
<string name="prefs_category_accounts">Akaun</string>
+ <string name="auth_host_address">Alamat pelayan</string>
</resources>
<string name="auth_no_net_conn_title">Ingen nettverkstilkobling</string>
<string name="auth_nossl_plain_ok_title">Sikker tilkobling ikke tilgjengelig.</string>
<string name="auth_connection_established">Tilkobling opprettet</string>
- <string name="auth_testing_connection">Tester tilgang...</string>
<string name="auth_not_configured_title">Feil i server konfigurasjon</string>
<string name="auth_account_not_new">En konto for samme bruker og server finnes allerede på enheten</string>
<string name="auth_account_not_the_same">Den innskrevne brukeren matcher ikke brukeren av denne kontoen</string>
<string name="auth_fail_get_user_name">Tjeneren din svarer ikke med korrekt bruker-ID, vennligst ta kontakt med en administrator
</string>
<string name="auth_can_not_auth_against_server">Kan ikke autentisere mot denne serveren</string>
+ <string name="auth_account_does_not_exist">Kontoen eksisterer ikke på enheten enda</string>
<string name="fd_keep_in_sync">Hold filen oppdatert</string>
<string name="common_rename">Endre navn</string>
<string name="common_remove">Fjern</string>
<string name="share_link_file_error">Det skjedde en feil under deling av denne filen eller mappen</string>
<string name="unshare_link_file_no_exist">Kan ikke fjerne deling. Sjekk om filen eksisterer.</string>
<string name="unshare_link_file_error">En feil oppstod ved avslutting av delingen av denne filen eller mappen</string>
+ <string name="share_link_password_title">Skriv inn ett passord</string>
+ <string name="share_link_empty_password">Du må skrive inn ett passord</string>
<string name="activity_chooser_send_file_title">Send</string>
<string name="copy_link">Kopier lenke</string>
<string name="clipboard_text_copied">Kopiert til utklippstavlen</string>
<string name="prefs_category_security">Sikkerhet</string>
<string name="prefs_instant_video_upload_path_title">Sti til video-opplasting</string>
<string name="download_folder_failed_content">Nedlasting av %1$s mappen kunne ikke fullføres</string>
+ <string name="subject_token">%1$s har delt \"%2$s\" med deg</string>
+ <string name="auth_host_address">Server-adresse</string>
</resources>
<string name="auth_no_net_conn_title">Geen netwerkverbinding</string>
<string name="auth_nossl_plain_ok_title">Veilige verbinding niet beschikbaar.</string>
<string name="auth_connection_established">Verbinding tot stand gebracht</string>
- <string name="auth_testing_connection">Probeer verbinding...</string>
+ <string name="auth_testing_connection">Testen verbinding</string>
<string name="auth_not_configured_title">Foutieve server configuratie</string>
<string name="auth_account_not_new">Er bestaat al een account voor deze gebruiker en server op dit apparaat.</string>
<string name="auth_account_not_the_same">De opgegeven gebruiker komt niet overeen met de gebruiker van dit account</string>
<string name="prefs_instant_video_upload_path_title">Upload Video Pad</string>
<string name="download_folder_failed_content">Download van %1$s map kon niet worden voltooid</string>
<string name="subject_token">%1$s deelde \"%2$s\" met u</string>
+ <string name="auth_refresh_button">Verversen verbinding</string>
+ <string name="auth_host_address">Serveradres</string>
</resources>
<string name="auth_no_net_conn_title">Inga nettilkopling</string>
<string name="auth_nossl_plain_ok_title">Trygg tilkopling ikkje tilgjengeleg.</string>
<string name="auth_connection_established">Tilkopling oppretta</string>
- <string name="auth_testing_connection">Testar tilkopling...</string>
<string name="auth_not_configured_title">Ugyldig tenarkonfigurasjon</string>
<string name="auth_unknown_error_title">Ein ukjend feil oppstod!</string>
<string name="auth_unknown_host_title">Klarte ikkje å finna tenaren</string>
<string name="saml_authentication_wrong_pass">Feil passord</string>
<string name="folder_picker_choose_button_text">Vel</string>
<string name="prefs_category_security">Tryggleik</string>
+ <string name="auth_host_address">Tenaradresse</string>
</resources>
<string name="auth_no_net_conn_title">ਕੋਈ ਨੈੱਟਵਰਕ ਕੁਨੈਕਸ਼ਨ ਨਹੀਂ ਹੈ</string>
<string name="auth_nossl_plain_ok_title">ਸੁਰੱਖਿਅਤ ਕੁਨੈਕਸ਼ਨ ਉਪਲੱਬਧ ਨਹੀਂ ਹੈ।</string>
<string name="auth_connection_established">ਕੁਨੈਕਸ਼ਨ ਬਣਾਇਆ ਗਿਆ ਹੈ</string>
- <string name="auth_testing_connection">...ਕੁਨੈਕਸ਼ਨ ਟੈਸਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ</string>
<string name="auth_unknown_error_title">ਅਣਜਾਣ ਗਲਤੀ ਆਈ ਹੈ!</string>
<string name="auth_unknown_host_title">ਹੋਸਟ ਨਹੀਂ ਲੱਭਿਆ ਜਾ ਸਕਿਆ</string>
<string name="auth_ssl_general_error_title">SSL ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਫੇਲ੍ਹ ਹੈ</string>
<string name="empty"></string>
<string name="prefs_category_accounts">ਅਕਾਊਂਟ</string>
<string name="folder_picker_choose_button_text">ਚੁਣੋ</string>
+ <string name="auth_host_address">ਸਰਵਰ ਐਡਰੈਸ</string>
</resources>
<string name="auth_no_net_conn_title">Brak połączenia sieciowego</string>
<string name="auth_nossl_plain_ok_title">Nie można nawiązać bezpiecznego połączenia.</string>
<string name="auth_connection_established">Połączenie nawiązane</string>
- <string name="auth_testing_connection">Testowanie połączenia…</string>
<string name="auth_not_configured_title">Uszkodzona konfiguracja serwera</string>
<string name="auth_account_not_new">Konto tego samego użytkownika i serwera już istnieje na tym urządzeniu</string>
<string name="auth_account_not_the_same">Podany login nie pasuje do użytkowników </string>
<string name="prefs_category_security">Bezpieczeństwo</string>
<string name="prefs_instant_video_upload_path_title">Katalog wysyłania dla wideo</string>
<string name="download_folder_failed_content">Pobieranie %1$s katalogu nie może zostać ukończone</string>
+ <string name="auth_host_address">Adres Serwera</string>
</resources>
<string name="auth_no_net_conn_title">Sem conexão de rede</string>
<string name="auth_nossl_plain_ok_title">Conexão segura indisponível.</string>
<string name="auth_connection_established">Conexão estabelecida</string>
- <string name="auth_testing_connection">Testando conexão...</string>
<string name="auth_not_configured_title">Configuração do servidor mal formada</string>
<string name="auth_account_not_new">Uma conta para o mesmo usuário e servidor já existe no dispositivo</string>
<string name="auth_account_not_the_same">As informações que o usuário digitou não correspondem ao usuário da conta</string>
<string name="prefs_instant_video_upload_path_title">Enviar o Caminho do Vídeo</string>
<string name="download_folder_failed_content">Baixar %1$s da pasta não pode ser completado</string>
<string name="subject_token">%1$s compartilhou \"%2$s\" com você</string>
+ <string name="auth_host_address">Endereço do servidor</string>
</resources>
<string name="auth_no_net_conn_title">Sem ligação à rede</string>
<string name="auth_nossl_plain_ok_title">Ligação segura indisponível.</string>
<string name="auth_connection_established">Ligação estabelecida</string>
- <string name="auth_testing_connection">A testar a ligação...</string>
+ <string name="auth_testing_connection">A testar a ligação</string>
<string name="auth_not_configured_title">Configuração do servidor incorrecta.</string>
<string name="auth_account_not_new">Uma conta para este utilizador e servidor já existe no dispositivo</string>
<string name="auth_account_not_the_same">O utilizador que escreveu não coincide com o nome de utilizador desta conta</string>
<string name="prefs_instant_video_upload_path_title">Envio do Caminho do Vídeo</string>
<string name="download_folder_failed_content">Não foi possível completar o download da pasta %1$s</string>
<string name="subject_token">%1$s partilhou \"%2$s\" consigo</string>
+ <string name="auth_refresh_button">Recarregar ligação</string>
+ <string name="auth_host_address">Endereço do servidor</string>
</resources>
<string name="auth_no_net_conn_title">Nu exista conexiune</string>
<string name="auth_nossl_plain_ok_title">Conexiune securizată indisponibilă</string>
<string name="auth_connection_established">Conexiune stabilită</string>
- <string name="auth_testing_connection">Se testează conexiunea...</string>
<string name="auth_not_configured_title">Configurație serverului incorectă</string>
<string name="auth_account_not_new">Un cont pentru același utilizator și server există deja în dispozitiv</string>
<string name="auth_account_not_the_same">Utilizatorul introdus nu se potrivește cu utilizatorul acestui cont</string>
<string name="prefs_category_security">Securitate</string>
<string name="prefs_instant_video_upload_path_title">Calea de încărcare Video</string>
<string name="download_folder_failed_content">Descărcarea fișierului %1$s nu s-a finisat</string>
+ <string name="auth_host_address">Adresa server-ului</string>
</resources>
<string name="auth_no_net_conn_title">Нет подключения к сети</string>
<string name="auth_nossl_plain_ok_title">Защищённое соединение недоступно.</string>
<string name="auth_connection_established">Соединение установлено</string>
- <string name="auth_testing_connection">ТеÑ\81Ñ\82иÑ\80ование Ñ\81оединениÑ\8f...</string>
+ <string name="auth_testing_connection">Ð\9fÑ\80овеÑ\80ка Ñ\81оединениÑ\8f</string>
<string name="auth_not_configured_title">Конфигурация сервера задана неверно</string>
<string name="auth_account_not_new">Учётная запись такого пользователя и сервера уже существует на устройстве</string>
<string name="auth_account_not_the_same">Введённый пользователь не соответствует этой учётной записи</string>
<string name="prefs_instant_video_upload_path_title">Путь для загрузки Видео</string>
<string name="download_folder_failed_content">Загрузка папки %1$s не может быть завершена</string>
<string name="subject_token">%1$s предоставил вам доступ к \"%2$s\"</string>
+ <string name="auth_refresh_button">Обновить соединение</string>
+ <string name="auth_host_address">Адрес сервера</string>
</resources>
<string name="auth_no_net_conn_title">ජාල සම්බන්ධතාවක් නොමැත</string>
<string name="auth_nossl_plain_ok_title">ආරක්ෂිත සම්බන්ධතාවක් නොලැබුණි</string>
<string name="auth_connection_established">සම්බන්ධතාවක් සාදන ලදී</string>
- <string name="auth_testing_connection">සම්බන්ධතාව පරීක්ෂා කෙරේ</string>
<string name="auth_not_configured_title">විකෘතිවු හැඩගැසුමක්</string>
<string name="auth_unknown_error_title">නොදන්නා දෝෂයක් ඇතිවිය</string>
<string name="auth_unknown_host_title">සේවාදායකයා සොයාගත නොහැක</string>
<string name="empty"></string>
<string name="prefs_category_accounts">ගිණුම්</string>
<string name="folder_picker_choose_button_text">තෝරන්න</string>
+ <string name="auth_host_address">සේවාදායකයේ ලිපිනය</string>
</resources>
<string name="auth_no_net_conn_title">Bez sieťového pripojenia</string>
<string name="auth_nossl_plain_ok_title">Nie je k dispozícii bezpečné pripojenie</string>
<string name="auth_connection_established">Pripojenie vytvorené</string>
- <string name="auth_testing_connection">Testovane pripojenia...</string>
<string name="auth_not_configured_title">Nesprávna konfigurácia servera</string>
<string name="auth_account_not_new">Účet pre tohoto používateľa a tento server už v tomto zariadení existuje</string>
<string name="auth_account_not_the_same">Zadané prihlasovacie údaje používateľa sú nesprávne</string>
<string name="prefs_instant_video_upload_path_title">Cesta pre nahrávanie videí</string>
<string name="download_folder_failed_content">Sťahovanie %1$s priečinka nebolo dokončené</string>
<string name="subject_token">%1$s vám zdieľa „%2$s“</string>
+ <string name="auth_host_address">Adresa servera</string>
</resources>
<string name="auth_no_net_conn_title">Ni omrežne povezave</string>
<string name="auth_nossl_plain_ok_title">Varna povezava ni na voljo.</string>
<string name="auth_connection_established">Povezava je vzpostavljena</string>
- <string name="auth_testing_connection">Preizkušanje povezave ...</string>
<string name="auth_not_configured_title">Napačno oblikovane nastavitve strežnika</string>
<string name="auth_account_not_new">Na napravi račun za istega uporabnika in strežnik že obstaja</string>
<string name="auth_account_not_the_same">Vpisan uporabnik ni lastnik tega računa</string>
<string name="prefs_instant_video_upload_path_title">Pot videa za pošiljanje</string>
<string name="download_folder_failed_content">Imenika %1$s ni mogoče prejeti v celoti</string>
<string name="subject_token">Uporabnik %1$s je omogočil souporabo \"%2$s\".</string>
+ <string name="auth_host_address">Naslov strežnika</string>
</resources>
<string name="pincode_stored">PIN-i u ruajt</string>
<string name="auth_no_net_conn_title">Nuk ka lidhje ne Rrjet</string>
<string name="auth_connection_established">Lidhja u vendos</string>
- <string name="auth_testing_connection">Duke testuar lidhjen</string>
<string name="auth_secure_connection">Lidhja e Sigurt vendos</string>
<string name="common_rename">Riemërto</string>
<string name="common_remove">Hiq</string>
<string name="saml_authentication_wrong_pass">Fjalëkalim i gabuar</string>
<string name="folder_picker_choose_button_text">Zgjidh</string>
<string name="prefs_category_security">Siguria</string>
+ <string name="auth_host_address">Adresa e serverit</string>
</resources>
<string name="uploader_wrn_no_account_quit_btn_text">Напусти</string>
<string name="uploader_wrn_no_content_title">Нема садржаја за отпремање</string>
<string name="uploader_wrn_no_content_text">Садржај није примљен. Нема шта да се отпреми.</string>
+ <string name="uploader_error_forbidden_content">%1$s није дозвољен приступ дељеном садржају</string>
<string name="uploader_info_uploading">Отпремање</string>
<string name="file_list_seconds_ago">пре пар секунди</string>
<string name="file_list_empty">Овде нема ничег. Отпремите нешто!</string>
<string name="file_list_loading">Учитавам</string>
<string name="local_file_list_empty">Нема фајлова у овој фасцикли.</string>
+ <string name="file_list_folder">фасцикла</string>
+ <string name="file_list_folders">фасцикле</string>
+ <string name="file_list_file">фајл</string>
+ <string name="file_list_files">фајлови</string>
<string name="filedetails_select_file">Тапните на фајл ради приказа додатних информација.</string>
<string name="filedetails_size">Величина:</string>
<string name="filedetails_type">Врста:</string>
<string name="sync_fail_content">Не могу да довршим синхронизацију %1$s</string>
<string name="sync_fail_content_unauthorized">Неисправна лозинка за %1$s</string>
<string name="sync_conflicts_in_favourites_ticker">Постоје сукоби</string>
+ <string name="sync_conflicts_in_favourites_content">%1$d држи-синх фајлови нису синхронизовани</string>
+ <string name="sync_fail_in_favourites_ticker">Синхронизација није успела</string>
+ <string name="sync_fail_in_favourites_content">Садржај %1$d фајлова не може бити синхронизован (%2$d сукоба)</string>
+ <string name="sync_foreign_files_forgotten_ticker">Неки локални фајлови нису обрађени</string>
+ <string name="sync_foreign_files_forgotten_content">%1$d фајлова из фасцикле %2$s није се могло копирати у</string>
<string name="sync_foreign_files_forgotten_explanation">Од верзије 1.3.16, фајлови отпремљени са уређаја се копирају у локалну фасциклу %1$s да би се спречио губитак података када се исти фајл синхронизује са више налога.\n\nЗбог ове измене, сви фајлови отпремљени са претходним верзијама ове апликације се копирају у фасциклу %2$s. Међутим, грешка је онемогућила довршавање ове радње током синхронизације налога. Можете или оставити фајлове како јесу и уклонити линк до %3$s или преместити фајлове у фасциклу %1$s и задржати везу до %4$s.\n\nИспод су наведени локални фајлови и удаљени фајлови у %5$s са којима су повезани.</string>
<string name="sync_current_folder_was_removed">Фасцикла %1$s више не постоји</string>
<string name="foreign_files_move">Премести све</string>
<string name="media_err_malformed">Медијски фајл није исправно кодиран</string>
<string name="media_err_timeout">Време истекло у покушавању пуштања</string>
<string name="media_err_invalid_progressive_playback">Медијски фајл се не може пустити</string>
- <string name="media_err_unknown">Ð\9cедиÑ\98Ñ\81ки Ñ\84аÑ\98л Ñ\81е не може пÑ\83Ñ\81Ñ\82иÑ\82и Ñ\81а Ñ\84абÑ\80иÑ\87ким плејером</string>
+ <string name="media_err_unknown">Ð\9cедиÑ\98Ñ\81ки Ñ\84аÑ\98л Ñ\81е не може пÑ\83Ñ\81Ñ\82иÑ\82и Ñ\81а Ñ\81иÑ\81Ñ\82емÑ\81ким плејером</string>
<string name="media_err_security_ex">Безбедносна грешка при покушају пуштања %1$s</string>
<string name="media_err_io_ex">Улазна грешка при покушају пуштања %1$s</string>
<string name="media_err_unexpected">Неочекивана грешка при покушају пуштања %1$s</string>
<string name="auth_no_net_conn_title">Нема мрежне везе</string>
<string name="auth_nossl_plain_ok_title">Безбедна веза није доступна.</string>
<string name="auth_connection_established">Веза је успостављена</string>
- <string name="auth_testing_connection">ТеÑ\81Ñ\82иÑ\80ам везÑ\83...</string>
+ <string name="auth_testing_connection">Ð\9fÑ\80овеÑ\80а везе</string>
<string name="auth_not_configured_title">Лоше подешавање сервера</string>
<string name="auth_account_not_new">Налог са истим корисником и сервером већ постоји на уређају</string>
<string name="auth_account_not_the_same">Унесени корисник се не поклапа са корисником овог налога</string>
<string name="placeholder_media_time">12:23:45</string>
<string name="instant_upload_on_wifi">Отпремај слике само путем бежичне мреже</string>
<string name="instant_video_upload_on_wifi">Отпремај видео само путем бежичне мреже</string>
+ <string name="instant_upload_path">/InstantUpload</string>
<string name="conflict_title">Ажурирај сукоб</string>
<string name="conflict_message">Удаљени фајл %s није синхронизован са локалним. Ако наставите, заменићете фајл на серверу.</string>
<string name="conflict_keep_both">Задржи оба</string>
<string name="log_send_no_mail_app">Нема начина за слање записника. Инсталирајте апликацију е-поште!</string>
<string name="log_send_mail_subject">Записници %1$s Андроид апликације</string>
<string name="log_progress_dialog_text">Учитавам податке...</string>
- <string name="saml_authentication_required_text">Ð\9dеопÑ\85одна пÑ\80овеÑ\80а иденÑ\82иÑ\82еÑ\82а</string>
+ <string name="saml_authentication_required_text">Ð\9dеопÑ\85одна аÑ\83Ñ\82енÑ\82иÑ\84икаÑ\86иÑ\98а</string>
<string name="saml_authentication_wrong_pass">Погрешна лозинка</string>
<string name="actionbar_move">Премести</string>
<string name="file_list_empty_moving">Овде нема ничега. Можете додати фасциклу!</string>
<string name="prefs_instant_video_upload_path_title">Путања отпремања видеа</string>
<string name="download_folder_failed_content">Преузимање фасцикле %1$s не може бити довршено</string>
<string name="subject_token">%1$s подели „%2$s“ са вама</string>
+ <string name="auth_refresh_button">Освежавање везе</string>
+ <string name="auth_host_address">Адреса сервера</string>
</resources>
<string name="auth_no_net_conn_title">Ingen nätverksanslutning</string>
<string name="auth_nossl_plain_ok_title">Säker anslutning inte tillgänglig.</string>
<string name="auth_connection_established">Anslutning etablerad</string>
- <string name="auth_testing_connection">Testar anslutning...</string>
<string name="auth_not_configured_title">Felaktig konfiguration</string>
<string name="auth_account_not_new">En användare med samma namn och server finns redan i denna aparat</string>
<string name="auth_account_not_the_same">Den angivna användaren matchar inte användaren för detta konto</string>
<string name="prefs_category_instant_uploading">Direktuppladning</string>
<string name="prefs_category_security">Säkerhet</string>
<string name="prefs_instant_video_upload_path_title">Uppladdnings-sökväg för video</string>
+ <string name="auth_host_address">Serveradress</string>
</resources>
<string name="auth_no_net_conn_title">வலையமைப்பு இணைப்பு இல்லை</string>
<string name="auth_nossl_plain_ok_title">பாதுகாப்பான இணைப்பு காணப்படவில்லை.</string>
<string name="auth_connection_established">இணைப்பு நிறுவப்பட்டது</string>
- <string name="auth_testing_connection">இணைப்பு சோதிக்கப்படுகிறது.....</string>
<string name="auth_not_configured_title">பிறழ்வான தகவமைப்பு</string>
<string name="auth_unknown_error_title">அறியப்படாத வழு ஏற்பட்டுள்ளது!</string>
<string name="auth_unknown_host_title">ஓம்புனரை கண்டுப்பிடிக்கமுடியவில்லை</string>
<string name="empty"></string>
<string name="prefs_category_accounts">கணக்குகள்</string>
<string name="folder_picker_choose_button_text">தெரிவுசெய்க </string>
+ <string name="auth_host_address">சேவையக முகவரி</string>
</resources>
<string name="uploader_info_dirname">సంచయం పేరు</string>
<string name="activity_chooser_send_file_title">పంపించు</string>
<string name="empty"></string>
+ <string name="auth_host_address">సేవకి చిరునామా</string>
</resources>
<string name="auth_no_net_conn_title">ไม่มีการเชื่อมต่อเครือข่ายใดๆ</string>
<string name="auth_nossl_plain_ok_title">การเชื่อมต่อแบบรักษาความปลอดภัยไม่สามารถใช้งานได้</string>
<string name="auth_connection_established">ติดตั้งการเชื่อมต่อแล้ว</string>
- <string name="auth_testing_connection">กำลังทดสอบการเชื่อมต่อ...</string>
<string name="auth_not_configured_title">การกำหนดค่า Malformed เซิร์ฟเวอร์</string>
<string name="auth_unknown_error_title">เกิดข้อผิดพลาดที่ไม่ทราบสาเหตุ!</string>
<string name="auth_unknown_host_title">ไม่พบโฮสต์ที่ต้องการ</string>
<string name="empty"></string>
<string name="prefs_category_accounts">บัญชี</string>
<string name="folder_picker_choose_button_text">เลือก</string>
+ <string name="auth_host_address">ที่อยู่เซิร์ฟเวอร์</string>
</resources>
<string name="auth_no_net_conn_title">Ağ bağlantısı yok</string>
<string name="auth_nossl_plain_ok_title">Güvenli bağlantı mevcut değil.</string>
<string name="auth_connection_established">Bağlantı kuruldu</string>
- <string name="auth_testing_connection">Bağlantı kontrol ediliyor...</string>
+ <string name="auth_testing_connection">Bağlantı sınanıyor</string>
<string name="auth_not_configured_title">Hatalı sunucu yapılandırması</string>
<string name="auth_account_not_new">Cihazda aynı kullanıcı adı ve sunucu için bir hesap zaten mevcut</string>
<string name="auth_account_not_the_same">Girilen kullanıcı bu hesabın kullanıcısı ile eşleşmiyor</string>
<string name="prefs_instant_video_upload_path_title">Video Yükleme Yolu</string>
<string name="download_folder_failed_content">%1$s klasörün indirilmesi tamamlanamadı</string>
<string name="subject_token">%1$s sizinle \"%2$s\" paylaşımını yaptı</string>
+ <string name="auth_refresh_button">Bağlantıyı yenile</string>
+ <string name="auth_host_address">Sunucu adresi</string>
</resources>
<string name="empty"></string>
<string name="prefs_category_accounts">ھېساباتلار</string>
<string name="prefs_category_security">بىخەتەرلىك</string>
+ <string name="auth_host_address">مۇلازىمېتىر ئادرىسى</string>
</resources>
<string name="auth_no_net_conn_title">Відсутнє підключення до мережі</string>
<string name="auth_nossl_plain_ok_title">Безпечне з\'єднання не доступне.</string>
<string name="auth_connection_established">З\'єднання встановлено</string>
- <string name="auth_testing_connection">Перевірка з\'єднання…</string>
+ <string name="auth_testing_connection">Перевірка з\'єднання</string>
<string name="auth_not_configured_title">Не вірні налаштування сервер </string>
<string name="auth_account_not_new">Такий обліковий запис вже існує на пристрої</string>
<string name="auth_account_not_the_same">Введений користувач не відповідає обліковому запису</string>
<string name="auth_fail_get_user_name">Ваш сервер не повертає коректний ідентифікатор користувача, будь ласка зверніться до адміністратора
⇥</string>
<string name="auth_can_not_auth_against_server">Аутентифікація на цьому сервері неможлива</string>
+ <string name="auth_account_does_not_exist">Користвача в пристрої не існуе</string>
<string name="fd_keep_in_sync">Оновлювати файл</string>
<string name="common_rename">Перейменувати</string>
<string name="common_remove">Видалити</string>
<string name="share_link_file_error">Виникла помилка при спробі поділитися файлом або текою</string>
<string name="unshare_link_file_no_exist">Неможливо заборонити доступ. Будь ласка, перевірте, чи існує файл</string>
<string name="unshare_link_file_error">Виникла помилка при спробі заборонити доступ до файлу або теки</string>
+ <string name="share_link_password_title">Ввести пароль</string>
+ <string name="share_link_empty_password">Ви повинні ввести пароль</string>
<string name="activity_chooser_send_file_title">Надіслати</string>
<string name="copy_link">Копіювати посилання</string>
<string name="clipboard_text_copied">Скопійовано в буфер обміну</string>
<string name="prefs_category_security">Безпека</string>
<string name="prefs_instant_video_upload_path_title">Шлях завантаження відео</string>
<string name="download_folder_failed_content">Скачування теки %1$s не може бути завершено</string>
+ <string name="subject_token">%1$s розшарено \"%2$s\" з вами</string>
+ <string name="auth_refresh_button">Оновити з\'єднання</string>
+ <string name="auth_host_address">Ареса серверу</string>
</resources>
<string name="auth_no_net_conn_title">Không có kết nối mạng</string>
<string name="auth_nossl_plain_ok_title">Bảo mật kết nối không có giá trị.</string>
<string name="auth_connection_established">Kết nối đã thiết lập</string>
- <string name="auth_testing_connection">Đang kiểm tra kết nối...</string>
<string name="auth_not_configured_title">Thay đổi cấu hình máy chủ </string>
<string name="auth_account_not_new">Một tài khoản với cùng tên người dùng và máy chủ đã tồn tại trong thiết bị</string>
<string name="auth_account_not_the_same">Tên người dùng đã nhập không đúng với tên người dùng của tài khoản này</string>
<string name="empty"></string>
<string name="prefs_category_accounts">Tài khoản</string>
<string name="folder_picker_choose_button_text">Chọn</string>
+ <string name="auth_host_address">Địa chỉ máy chủ</string>
</resources>
<string name="auth_no_net_conn_title">没有网络连接</string>
<string name="auth_nossl_plain_ok_title">安全连接不可用。</string>
<string name="auth_connection_established">连接已建立。</string>
- <string name="auth_testing_connection">测试连接……</string>
<string name="auth_not_configured_title">服务器配置不正确</string>
<string name="auth_account_not_new">此设备中已经存在同名同服务器的帐号</string>
<string name="auth_account_not_the_same">输入用户与此帐户的用户不符</string>
<string name="prefs_category_security">安全</string>
<string name="prefs_instant_video_upload_path_title">视频上传路径</string>
<string name="download_folder_failed_content">%1$s 文件夹的下载无法完成</string>
+ <string name="auth_host_address">服务器地址</string>
</resources>
<string name="prefs_category_accounts">帳號</string>
<string name="saml_authentication_wrong_pass">密碼錯誤</string>
<string name="prefs_category_security">安全</string>
+ <string name="auth_host_address">伺服器地址</string>
</resources>
<string name="auth_no_net_conn_title">沒有網際網路連線</string>
<string name="auth_nossl_plain_ok_title">安全連線不可用。</string>
<string name="auth_connection_established">連線已建立</string>
- <string name="auth_testing_connection">測試連線中…</string>
<string name="auth_not_configured_title">伺服器設定有問題</string>
<string name="auth_account_not_new">已經有相同使用者與伺服器的帳號存在於這個裝置</string>
<string name="auth_account_not_the_same">輸入的使用者與這個帳戶的使用者不一致</string>
<string name="prefs_category_security">安全性</string>
<string name="prefs_instant_video_upload_path_title">影片上傳路徑</string>
<string name="download_folder_failed_content">%1$s 目錄的下載未完成</string>
+ <string name="auth_host_address">伺服器位址</string>
</resources>
<string name ="data_folder">owncloud</string>
<string name ="log_name">Owncloud_</string>
<string name ="default_display_name_for_root_folder">ownCloud</string>
+ <string name ="user_agent">Mozilla/5.0 (Android) ownCloud</string>
<!-- URLs and flags related -->
<string name="server_url"></string>
<string name="sync_string_files">Files</string>
<string name="setup_btn_connect">Connect</string>
<string name="uploader_btn_upload_text">Upload</string>
+ <string name="uploader_btn_new_folder_text">New folder</string>
<string name="uploader_top_message">Choose upload folder:</string>
<string name="uploader_wrn_no_account_title">No account found</string>
<string name="uploader_wrn_no_account_text">There are no %1$s accounts on your device. Please setup an account first.</string>
<string name="auth_no_net_conn_title">No network connection</string>
<string name="auth_nossl_plain_ok_title">Secure connection unavailable.</string>
<string name="auth_connection_established">Connection established</string>
- <string name="auth_testing_connection">Testing connection…</string>
+ <string name="auth_testing_connection">Testing connection</string>
<string name="auth_not_configured_title">Malformed server configuration</string>
<string name="auth_account_not_new">An account for the same user and server already exists in the device</string>
<string name="auth_account_not_the_same">The entered user does not match the user of this account</string>
<string name="subject_token">%1$s shared \"%2$s\" with you</string>
+ <string name="auth_refresh_button">Refresh connection</string>
+ <string name="auth_host_address">Server address</string>
+
</resources>
import android.app.Application;
import android.content.Context;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
import com.owncloud.android.datamodel.ThumbnailsCacheManager;
import com.owncloud.android.lib.common.OwnCloudClientManagerFactory;
* classes
*/
public class MainApp extends Application {
-
+
+ private static final String TAG = MainApp.class.getSimpleName();
+
private static final String AUTH_ON = "on";
@SuppressWarnings("unused")
MainApp.mContext = getApplicationContext();
boolean isSamlAuth = AUTH_ON.equals(getString(R.string.auth_method_saml_web_sso));
-
+
+ OwnCloudClientManagerFactory.setUserAgent(getUserAgent());
if (isSamlAuth) {
OwnCloudClientManagerFactory.setDefaultPolicy(Policy.SINGLE_SESSION_PER_ACCOUNT);
return getAppContext().getResources().getString(R.string.log_name);
}
+ // user agent
+ public static String getUserAgent() {
+ String appString = getAppContext().getResources().getString(R.string.user_agent);
+ String packageName = getAppContext().getPackageName();
+ String version = "";
+
+ PackageInfo pInfo = null;
+ try {
+ pInfo = getAppContext().getPackageManager().getPackageInfo(packageName, 0);
+ if (pInfo != null) {
+ version = "/" + pInfo.versionName;
+ }
+ } catch (PackageManager.NameNotFoundException e) {
+ Log_OC.e(TAG, "Trying to get packageName", e.getCause());
+ }
+
+ // Mozilla/5.0 (Android) ownCloud /1.7.0
+ String userAgent = appString + version;
+
+ return userAgent;
+ }
}
import android.net.Uri;
import android.os.AsyncTask;
+import com.owncloud.android.MainApp;
import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.common.OwnCloudClientFactory;
import com.owncloud.android.lib.common.OwnCloudCredentials;
private FileDataStorageManager mStorageManager;
- public ThumbnailGenerationTask(ImageView imageView, FileDataStorageManager storageManager, Account account) {
+ public ThumbnailGenerationTask(ImageView imageView, FileDataStorageManager storageManager,
+ Account account) {
// Use a WeakReference to ensure the ImageView can be garbage collected
mImageViewReference = new WeakReference<ImageView>(imageView);
if (storageManager == null)
AccountManager accountMgr = AccountManager.get(MainApp.getAppContext());
mServerVersion = accountMgr.getUserData(mAccount, Constants.KEY_OC_VERSION);
- OwnCloudAccount ocAccount = new OwnCloudAccount(mAccount, MainApp.getAppContext());
+ OwnCloudAccount ocAccount = new OwnCloudAccount(mAccount,
+ MainApp.getAppContext());
mClient = OwnCloudClientManagerFactory.getDefaultSingleton().
getClientFor(ocAccount, MainApp.getAppContext());
}
// Download thumbnail from server
if (mClient != null && mServerVersion != null) {
OwnCloudVersion serverOCVersion = new OwnCloudVersion(mServerVersion);
- if (serverOCVersion.compareTo(new OwnCloudVersion(MINOR_SERVER_VERSION_FOR_THUMBS)) >= 0) {
+ if (serverOCVersion.compareTo(
+ new OwnCloudVersion(MINOR_SERVER_VERSION_FOR_THUMBS)) >= 0) {
try {
int status = -1;
- String uri = mClient.getBaseUri() + "/index.php/apps/files/api/v1/thumbnail/" +
+ String uri = mClient.getBaseUri() + "" +
+ "/index.php/apps/files/api/v1/thumbnail/" +
px + "/" + px + Uri.encode(file.getRemotePath(), "/");
Log_OC.d("Thumbnail", "URI: " + uri);
GetMethod get = new GetMethod(uri);
status = mClient.executeMethod(get);
if (status == HttpStatus.SC_OK) {
byte[] bytes = get.getResponseBody();
- Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
+ Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0,
+ bytes.length);
thumbnail = ThumbnailUtils.extractThumbnail(bitmap, px, px);
// Add thumbnail to cache
import java.util.Map;
import java.util.Vector;
+import com.owncloud.android.MainApp;
import com.owncloud.android.R;
import com.owncloud.android.authentication.AccountUtils;
import com.owncloud.android.authentication.AuthenticatorActivity;
super.onCreate();
Log_OC.d(TAG, "Creating service");
mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
- HandlerThread thread = new HandlerThread("FileDownloaderThread", Process.THREAD_PRIORITY_BACKGROUND);
+ HandlerThread thread = new HandlerThread("FileDownloaderThread",
+ Process.THREAD_PRIORITY_BACKGROUND);
thread.start();
mServiceLooper = thread.getLooper();
mServiceHandler = new ServiceHandler(mServiceLooper, this);
// Store file on db with state 'downloading'
/*
- TODO - check if helps with UI responsiveness, letting only folders use FileDownloaderBinder to check
- FileDataStorageManager storageManager = new FileDataStorageManager(account, getContentResolver());
+ TODO - check if helps with UI responsiveness,
+ letting only folders use FileDownloaderBinder to check
+ FileDataStorageManager storageManager =
+ new FileDataStorageManager(account, getContentResolver());
file.setDownloading(true);
storageManager.saveFile(file);
*/
public class FileDownloaderBinder extends Binder implements OnDatatransferProgressListener {
/**
- * Map of listeners that will be reported about progress of downloads from a {@link FileDownloaderBinder}
+ * Map of listeners that will be reported about progress of downloads from a
+ * {@link FileDownloaderBinder}
* instance.
*/
private Map<Long, OnDatatransferProgressListener> mBoundListeners =
mCurrentDownload.getRemotePath().startsWith(file.getRemotePath()) &&
account.name.equals(mCurrentAccount.name)) {
/*Log_OC.v( "NOW " + TAG + ", thread " + Thread.currentThread().getName(),
- "Canceling current sync as descendant: " + mCurrentDownload.getRemotePath());*/
+ "Canceling current sync as descendant: " + mCurrentDownload.getRemotePath());*/
mCurrentDownload.cancel();
}
}
/**
- * Returns True when the file described by 'file' in the ownCloud account 'account' is downloading or
- * waiting to download.
+ * Returns True when the file described by 'file' in the ownCloud account 'account'
+ * is downloading or waiting to download.
* <p/>
* If 'file' is a directory, returns 'true' if any of its descendant files is downloading or
* waiting to download.
}
@Override
- public void onTransferProgress(long progressRate, long totalTransferredSoFar, long totalToTransfer,
- String fileName) {
- //String key = buildKey(mCurrentDownload.getAccount(), mCurrentDownload.getFile().getRemotePath());
- OnDatatransferProgressListener boundListener = mBoundListeners.get(mCurrentDownload.getFile().getFileId());
+ public void onTransferProgress(long progressRate, long totalTransferredSoFar,
+ long totalToTransfer, String fileName) {
+ //String key = buildKey(mCurrentDownload.getAccount(),
+ // mCurrentDownload.getFile().getRemotePath());
+ OnDatatransferProgressListener boundListener =
+ mBoundListeners.get(mCurrentDownload.getFile().getFileId());
if (boundListener != null) {
- boundListener.onTransferProgress(progressRate, totalTransferredSoFar, totalToTransfer, fileName);
+ boundListener.onTransferProgress(progressRate, totalTransferredSoFar,
+ totalToTransfer, fileName);
}
}
* Created with the Looper of a new thread, started in {@link FileUploader#onCreate()}.
*/
private static class ServiceHandler extends Handler {
- // don't make it a final class, and don't remove the static ; lint will warn about a possible memory leak
+ // don't make it a final class, and don't remove the static ; lint will warn about a
+ // possible memory leak
FileDownloader mService;
public ServiceHandler(Looper looper, FileDownloader service) {
RemoteOperationResult downloadResult = null;
try {
/// prepare client object to send the request to the ownCloud server
- if (mCurrentAccount == null || !mCurrentAccount.equals(mCurrentDownload.getAccount())) {
+ if (mCurrentAccount == null ||
+ !mCurrentAccount.equals(mCurrentDownload.getAccount())) {
mCurrentAccount = mCurrentDownload.getAccount();
mStorageManager = new FileDataStorageManager(
mCurrentAccount,
);
} // else, reuse storage manager from previous operation
- // always get client from client manager, to get fresh credentials in case of update
+ // always get client from client manager, to get fresh credentials in case
+ // of update
OwnCloudAccount ocAccount = new OwnCloudAccount(mCurrentAccount, this);
mDownloadClient = OwnCloudClientManagerFactory.getDefaultSingleton().
getClientFor(ocAccount, this);
}
} catch (AccountsException e) {
- Log_OC.e(TAG, "Error while trying to get authorization for " + mCurrentAccount.name, e);
+ Log_OC.e(TAG, "Error while trying to get authorization for "
+ + mCurrentAccount.name, e);
downloadResult = new RemoteOperationResult(e);
} catch (IOException e) {
- Log_OC.e(TAG, "Error while trying to get authorization for " + mCurrentAccount.name, e);
+ Log_OC.e(TAG, "Error while trying to get authorization for "
+ + mCurrentAccount.name, e);
downloadResult = new RemoteOperationResult(e);
} finally {
"Removing payload " + mCurrentDownload.getRemotePath());*/
Pair<DownloadFileOperation, String> removeResult =
- mPendingDownloads.removePayload(mCurrentAccount, mCurrentDownload.getRemotePath());
+ mPendingDownloads.removePayload(mCurrentAccount,
+ mCurrentDownload.getRemotePath());
/// notify result
notifyDownloadResult(mCurrentDownload, downloadResult);
- sendBroadcastDownloadFinished(mCurrentDownload, downloadResult, removeResult.second);
+ sendBroadcastDownloadFinished(mCurrentDownload, downloadResult,
+ removeResult.second);
}
} else {
// Cancel the transfer
- Log_OC.d(TAG, "Account " + mCurrentDownload.getAccount().toString() + " doesn't exist");
+ Log_OC.d(TAG, "Account " + mCurrentDownload.getAccount().toString() +
+ " doesn't exist");
cancelDownloadsForAccount(mCurrentDownload.getAccount());
}
* Callback method to update the progress bar in the status notification.
*/
@Override
- public void onTransferProgress(long progressRate, long totalTransferredSoFar, long totalToTransfer, String filePath) {
+ public void onTransferProgress(long progressRate, long totalTransferredSoFar,
+ long totalToTransfer, String filePath) {
int percent = (int) (100.0 * ((double) totalTransferredSoFar) / ((double) totalToTransfer));
if (percent != mLastPercent) {
mNotificationBuilder.setProgress(100, percent, totalToTransfer < 0);
* @param downloadResult Result of the download operation.
* @param download Finished download operation
*/
- private void notifyDownloadResult(DownloadFileOperation download, RemoteOperationResult downloadResult) {
+ private void notifyDownloadResult(DownloadFileOperation download,
+ RemoteOperationResult downloadResult) {
mNotificationManager.cancel(R.string.downloader_download_in_progress_ticker);
if (!downloadResult.isCancelled()) {
int tickerId = (downloadResult.isSuccess()) ? R.string.downloader_download_succeeded_ticker :
// let the user update credentials with one click
Intent updateAccountCredentials = new Intent(this, AuthenticatorActivity.class);
- updateAccountCredentials.putExtra(AuthenticatorActivity.EXTRA_ACCOUNT, download.getAccount());
+ updateAccountCredentials.putExtra(AuthenticatorActivity.EXTRA_ACCOUNT,
+ download.getAccount());
updateAccountCredentials.putExtra(
- AuthenticatorActivity.EXTRA_ACTION, AuthenticatorActivity.ACTION_UPDATE_EXPIRED_TOKEN
+ AuthenticatorActivity.EXTRA_ACTION,
+ AuthenticatorActivity.ACTION_UPDATE_EXPIRED_TOKEN
);
updateAccountCredentials.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
updateAccountCredentials.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
updateAccountCredentials.addFlags(Intent.FLAG_FROM_BACKGROUND);
mNotificationBuilder
.setContentIntent(PendingIntent.getActivity(
- this, (int) System.currentTimeMillis(), updateAccountCredentials, PendingIntent.FLAG_ONE_SHOT));
+ this, (int) System.currentTimeMillis(), updateAccountCredentials,
+ PendingIntent.FLAG_ONE_SHOT));
} else {
// TODO put something smart in showDetailsIntent
}
mNotificationBuilder.setContentText(
- ErrorMessageAdapter.getErrorCauseMessage(downloadResult, download, getResources())
+ ErrorMessageAdapter.getErrorCauseMessage(downloadResult, download,
+ getResources())
);
mNotificationManager.notify(tickerId, mNotificationBuilder.build());
/**
- * Sends a broadcast when a download finishes in order to the interested activities can update their view
+ * Sends a broadcast when a download finishes in order to the interested activities can
+ * update their view
*
* @param download Finished download operation
* @param downloadResult Result of the download operation
* @param download Added download operation
* @param linkedToRemotePath Path in the downloads tree where the download was linked to
*/
- private void sendBroadcastNewDownload(DownloadFileOperation download, String linkedToRemotePath) {
+ private void sendBroadcastNewDownload(DownloadFileOperation download,
+ String linkedToRemotePath) {
Intent added = new Intent(getDownloadAddedMessage());
added.putExtra(ACCOUNT_NAME, download.getAccount().name);
added.putExtra(EXTRA_REMOTE_PATH, download.getRemotePath());
import android.support.v4.app.NotificationCompat;
import android.webkit.MimeTypeMap;
+import com.owncloud.android.MainApp;
import com.owncloud.android.R;
import com.owncloud.android.authentication.AccountUtils;
import com.owncloud.android.authentication.AuthenticatorActivity;
super.onCreate();
Log_OC.d(TAG, "Creating service");
mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
- HandlerThread thread = new HandlerThread("FileUploaderThread", Process.THREAD_PRIORITY_BACKGROUND);
+ HandlerThread thread = new HandlerThread("FileUploaderThread",
+ Process.THREAD_PRIORITY_BACKGROUND);
thread.start();
mServiceLooper = thread.getLooper();
mServiceHandler = new ServiceHandler(mServiceLooper, this);
}
}
- FileDataStorageManager storageManager = new FileDataStorageManager(account, getContentResolver());
+ FileDataStorageManager storageManager = new FileDataStorageManager(account,
+ getContentResolver());
boolean forceOverwrite = intent.getBooleanExtra(KEY_FORCE_OVERWRITE, false);
boolean isInstant = intent.getBooleanExtra(KEY_INSTANT_UPLOAD, false);
files = new OCFile[localPaths.length];
for (int i = 0; i < localPaths.length; i++) {
- files[i] = obtainNewOCFileToUpload(remotePaths[i], localPaths[i], ((mimeTypes != null) ? mimeTypes[i]
- : (String) null), storageManager);
+ files[i] = obtainNewOCFileToUpload(remotePaths[i], localPaths[i],
+ ((mimeTypes != null) ? mimeTypes[i] : (String) null), storageManager);
if (files[i] == null) {
// TODO @andomaex add failure Notification
return Service.START_NOT_STICKY;
try {
for (int i = 0; i < files.length; i++) {
uploadKey = buildRemoteName(account, files[i].getRemotePath());
- newUpload = new UploadFileOperation(account, files[i], chunked, isInstant, forceOverwrite, localAction,
+ newUpload = new UploadFileOperation(account, files[i], chunked, isInstant,
+ forceOverwrite, localAction,
getApplicationContext());
if (isInstant) {
newUpload.setRemoteFolderToBeCreated();
}
- mPendingUploads.putIfAbsent(uploadKey, newUpload); // Grants that the file only upload once time
+ // Grants that the file only upload once time
+ mPendingUploads.putIfAbsent(uploadKey, newUpload);
newUpload.addDatatransferProgressListener(this);
newUpload.addDatatransferProgressListener((FileUploaderBinder)mBinder);
public class FileUploaderBinder extends Binder implements OnDatatransferProgressListener {
/**
- * Map of listeners that will be reported about progress of uploads from a {@link FileUploaderBinder} instance
+ * Map of listeners that will be reported about progress of uploads from a
+ * {@link FileUploaderBinder} instance
*/
private Map<String, OnDatatransferProgressListener> mBoundListeners = new HashMap<String, OnDatatransferProgressListener>();
* Returns True when the file described by 'file' is being uploaded to
* the ownCloud account 'account' or waiting for it
*
- * If 'file' is a directory, returns 'true' if some of its descendant files is uploading or waiting to upload.
+ * If 'file' is a directory, returns 'true' if some of its descendant files
+ * is uploading or waiting to upload.
*
* @param account ownCloud account where the remote file will be stored.
* @param file A file that could be in the queue of pending uploads
* @param account ownCloud account holding the file of interest.
* @param file {@link OCFile} of interest for listener.
*/
- public void addDatatransferProgressListener (OnDatatransferProgressListener listener, Account account, OCFile file) {
+ public void addDatatransferProgressListener (OnDatatransferProgressListener listener,
+ Account account, OCFile file) {
if (account == null || file == null || listener == null) return;
String targetKey = buildRemoteName(account, file);
mBoundListeners.put(targetKey, listener);
* @param account ownCloud account holding the file of interest.
* @param file {@link OCFile} of interest for listener.
*/
- public void removeDatatransferProgressListener (OnDatatransferProgressListener listener, Account account, OCFile file) {
+ public void removeDatatransferProgressListener (OnDatatransferProgressListener listener,
+ Account account, OCFile file) {
if (account == null || file == null || listener == null) return;
String targetKey = buildRemoteName(account, file);
if (mBoundListeners.get(targetKey) == listener) {
@Override
- public void onTransferProgress(long progressRate, long totalTransferredSoFar, long totalToTransfer,
- String fileName) {
+ public void onTransferProgress(long progressRate, long totalTransferredSoFar,
+ long totalToTransfer, String fileName) {
String key = buildRemoteName(mCurrentUpload.getAccount(), mCurrentUpload.getFile());
OnDatatransferProgressListener boundListener = mBoundListeners.get(key);
if (boundListener != null) {
- boundListener.onTransferProgress(progressRate, totalTransferredSoFar, totalToTransfer, fileName);
+ boundListener.onTransferProgress(progressRate, totalTransferredSoFar,
+ totalToTransfer, fileName);
}
}
try {
/// prepare client object to send requests to the ownCloud server
- if (mUploadClient == null || !mLastAccount.equals(mCurrentUpload.getAccount())) {
+ if (mUploadClient == null ||
+ !mLastAccount.equals(mCurrentUpload.getAccount())) {
mLastAccount = mCurrentUpload.getAccount();
mStorageManager =
new FileDataStorageManager(mLastAccount, getContentResolver());
}
} catch (AccountsException e) {
- Log_OC.e(TAG, "Error while trying to get autorization for " + mLastAccount.name, e);
+ Log_OC.e(TAG, "Error while trying to get autorization for " +
+ mLastAccount.name, e);
uploadResult = new RemoteOperationResult(e);
} catch (IOException e) {
- Log_OC.e(TAG, "Error while trying to get autorization for " + mLastAccount.name, e);
+ Log_OC.e(TAG, "Error while trying to get autorization for " +
+ mLastAccount.name, e);
uploadResult = new RemoteOperationResult(e);
} finally {
Log_OC.i(TAG, "Remove CurrentUploadItem from pending upload Item Map.");
}
if (uploadResult.isException()) {
- // enforce the creation of a new client object for next uploads; this grant that a new socket will
- // be created in the future if the current exception is due to an abrupt lose of network connection
+ // enforce the creation of a new client object for next uploads;
+ // this grant that a new socket will be created in the future if
+ // the current exception is due to an abrupt lose of network connection
mUploadClient = null;
}
}
} else {
// Cancel the transfer
- Log_OC.d(TAG, "Account " + mCurrentUpload.getAccount().toString() + " doesn't exist");
+ Log_OC.d(TAG, "Account " + mCurrentUpload.getAccount().toString() +
+ " doesn't exist");
cancelUploadForAccount(mCurrentUpload.getAccount().name);
}
}
/**
- * Checks the existence of the folder where the current file will be uploaded both in the remote server
- * and in the local database.
+ * Checks the existence of the folder where the current file will be uploaded both
+ * in the remote server and in the local database.
*
- * If the upload is set to enforce the creation of the folder, the method tries to create it both remote
- * and locally.
+ * If the upload is set to enforce the creation of the folder, the method tries to
+ * create it both remote and locally.
*
* @param pathToGrant Full remote path whose existence will be granted.
- * @return An {@link OCFile} instance corresponding to the folder where the file will be uploaded.
+ * @return An {@link OCFile} instance corresponding to the folder where the file
+ * will be uploaded.
*/
private RemoteOperationResult grantFolderExistence(String pathToGrant) {
RemoteOperation operation = new ExistenceCheckRemoteOperation(pathToGrant, this, false);
// new PROPFIND to keep data consistent with server
// in theory, should return the same we already have
- ReadRemoteFileOperation operation = new ReadRemoteFileOperation(mCurrentUpload.getRemotePath());
+ ReadRemoteFileOperation operation =
+ new ReadRemoteFileOperation(mCurrentUpload.getRemotePath());
RemoteOperationResult result = operation.execute(mUploadClient);
if (result.isSuccess()) {
updateOCFile(file, (RemoteFile) result.getData().get(0));
mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(
remotePath.substring(remotePath.lastIndexOf('.') + 1));
} catch (IndexOutOfBoundsException e) {
- Log_OC.e(TAG, "Trying to find out MIME type of a file without extension: " + remotePath);
+ Log_OC.e(TAG, "Trying to find out MIME type of a file without extension: " +
+ remotePath);
}
}
if (mimeType == null) {
* Callback method to update the progress bar in the status notification
*/
@Override
- public void onTransferProgress(long progressRate, long totalTransferredSoFar, long totalToTransfer, String filePath) {
+ public void onTransferProgress(long progressRate, long totalTransferredSoFar,
+ long totalToTransfer, String filePath) {
int percent = (int) (100.0 * ((double) totalTransferredSoFar) / ((double) totalToTransfer));
if (percent != mLastPercent) {
mNotificationBuilder.setProgress(100, percent, false);
- String fileName = filePath.substring(filePath.lastIndexOf(FileUtils.PATH_SEPARATOR) + 1);
+ String fileName = filePath.substring(
+ filePath.lastIndexOf(FileUtils.PATH_SEPARATOR) + 1);
String text = String.format(getString(R.string.uploader_upload_in_progress_content), percent, fileName);
mNotificationBuilder.setContentText(text);
mNotificationManager.notify(R.string.uploader_upload_in_progress_ticker, mNotificationBuilder.build());
* @param mimeType
* @return true if is needed to add the pdf file extension to the file
*/
- private boolean isPdfFileFromContentProviderWithoutExtension(String localPath, String mimeType) {
+ private boolean isPdfFileFromContentProviderWithoutExtension(String localPath,
+ String mimeType) {
return localPath.startsWith(UriUtils.URI_CONTENT_SCHEME) &&
mimeType.equals(MIME_TYPE_PDF) &&
!localPath.endsWith(FILE_EXTENSION_PDF);
package com.owncloud.android.operations;
+import com.owncloud.android.MainApp;
import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.resources.files.CreateRemoteFolderOperation;
/**
* Constructor
*
- * @param createFullPath 'True' means that all the ancestor folders should be created if don't exist yet.
+ * @param createFullPath 'True' means that all the ancestor folders should be created
+ * if don't exist yet.
*/
public CreateFolderOperation(String remotePath, boolean createFullPath) {
mRemotePath = remotePath;
@Override
protected RemoteOperationResult run(OwnCloudClient client) {
- CreateRemoteFolderOperation operation = new CreateRemoteFolderOperation(mRemotePath, mCreateFullPath);
+ CreateRemoteFolderOperation operation = new CreateRemoteFolderOperation(mRemotePath,
+ mCreateFullPath);
RemoteOperationResult result = operation.execute(client);
if (result.isSuccess()) {
}
- private void onCreateRemoteFolderOperationFinish(CreateRemoteFolderOperation operation, RemoteOperationResult result) {
+ private void onCreateRemoteFolderOperationFinish(CreateRemoteFolderOperation operation,
+ RemoteOperationResult result) {
if (result.isSuccess()) {
saveFolderInDB();
} else {
import android.content.Context;
import android.content.Intent;
+import com.owncloud.android.MainApp;
import com.owncloud.android.R;
import com.owncloud.android.datamodel.FileDataStorageManager;
import com.owncloud.android.datamodel.OCFile;
* @param context The context that the share is coming from.
* @param path Full path of the file/folder being shared. Mandatory argument
* @param shareType 0 = user, 1 = group, 3 = Public link. Mandatory argument
- * @param shareWith User/group ID with who the file should be shared. This is mandatory for shareType of 0 or 1
+ * @param shareWith User/group ID with who the file should be shared.
+ * This is mandatory for shareType of 0 or 1
* @param publicUpload If false (default) public cannot upload to a public shared folder.
- * If true public can upload to a shared folder. Only available for public link shares
- * @param password Password to protect a public link share. Only available for public link shares
+ * If true public can upload to a shared folder.
+ * Only available for public link shares
+ * @param password Password to protect a public link share.
+ * Only available for public link shares
* @param permissions 1 - Read only - Default for public shares
* 2 - Update
* 4 - Create
// Check if the share link already exists
operation = new GetRemoteSharesForFileOperation(mPath, false, false);
- RemoteOperationResult result = ((GetRemoteSharesForFileOperation)operation).execute(client);
+ RemoteOperationResult result =
+ ((GetRemoteSharesForFileOperation)operation).execute(client);
if (!result.isSuccess() || result.getData().size() <= 0) {
operation = new CreateRemoteShareOperation(mPath, mShareType, mShareWith, mPublicUpload,
import java.util.ArrayList;
+import com.owncloud.android.MainApp;
import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.common.operations.OnRemoteOperationListener;
import com.owncloud.android.lib.common.operations.RemoteOperation;
* Constructor
*
* @param context Android context of the caller.
- * @param webdavUrl
*/
public DetectAuthenticationMethodOperation(Context context) {
mContext = context;
ArrayList<Object> data = new ArrayList<Object>();
data.add(authMethod);
result.setData(data);
- return result; // same result instance, so that other errors can be handled by the caller transparently
+ return result; // same result instance, so that other errors
+ // can be handled by the caller transparently
}
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
+import com.owncloud.android.MainApp;
import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.lib.common.network.OnDatatransferProgressListener;
import com.owncloud.android.lib.common.OwnCloudClient;
public DownloadFileOperation(Account account, OCFile file) {
if (account == null)
- throw new IllegalArgumentException("Illegal null account in DownloadFileOperation creation");
+ throw new IllegalArgumentException("Illegal null account in DownloadFileOperation " +
+ "creation");
if (file == null)
- throw new IllegalArgumentException("Illegal null file in DownloadFileOperation creation");
+ throw new IllegalArgumentException("Illegal null file in DownloadFileOperation " +
+ "creation");
mAccount = account;
mFile = file;
}
public String getSavePath() {
- String path = mFile.getStoragePath(); // re-downloads should be done over the original file
+ String path = mFile.getStoragePath(); // re-downloads should be done over the original file
if (path != null && path.length() > 0) {
return path;
}
try {
mimeType = MimeTypeMap.getSingleton()
.getMimeTypeFromExtension(
- mFile.getRemotePath().substring(mFile.getRemotePath().lastIndexOf('.') + 1));
+ mFile.getRemotePath().substring(
+ mFile.getRemotePath().lastIndexOf('.') + 1));
} catch (IndexOutOfBoundsException e) {
- Log_OC.e(TAG, "Trying to find out MIME type of a file without extension: " + mFile.getRemotePath());
+ Log_OC.e(TAG, "Trying to find out MIME type of a file without extension: " +
+ mFile.getRemotePath());
}
}
if (mimeType == null) {
}
public long getModificationTimestamp() {
- return (mModificationTimestamp > 0) ? mModificationTimestamp : mFile.getModificationTimestamp();
+ return (mModificationTimestamp > 0) ? mModificationTimestamp :
+ mFile.getModificationTimestamp();
}
@Override
newFile.getParentFile().mkdirs();
moved = tmpFile.renameTo(newFile);
if (!moved)
- result = new RemoteOperationResult(RemoteOperationResult.ResultCode.LOCAL_STORAGE_NOT_MOVED);
+ result = new RemoteOperationResult(
+ RemoteOperationResult.ResultCode.LOCAL_STORAGE_NOT_MOVED);
}
- Log_OC.i(TAG, "Download of " + mFile.getRemotePath() + " to " + getSavePath() + ": " + result.getLogMessage());
+ Log_OC.i(TAG, "Download of " + mFile.getRemotePath() + " to " + getSavePath() + ": " +
+ result.getLogMessage());
return result;
}
import java.util.ArrayList;
+import com.owncloud.android.MainApp;
import com.owncloud.android.authentication.AccountUtils;
import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.common.operations.RemoteOperation;
import java.util.ArrayList;
+import com.owncloud.android.MainApp;
import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.resources.shares.OCShare;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
@Override
protected RemoteOperationResult run(OwnCloudClient client) {
- GetRemoteSharesForFileOperation operation = new GetRemoteSharesForFileOperation(mPath, mReshares, mSubfiles);
+ GetRemoteSharesForFileOperation operation = new GetRemoteSharesForFileOperation(mPath,
+ mReshares, mSubfiles);
RemoteOperationResult result = operation.execute(client);
if (result.isSuccess()) {
import java.util.ArrayList;
+import com.owncloud.android.MainApp;
import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
import com.owncloud.android.lib.common.utils.Log_OC;
package com.owncloud.android.operations;
+import com.owncloud.android.MainApp;
import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
/**
* Constructor
*
- * @param path Remote path of the {@link OCFile} to move.
- * @param newParentPath Path to the folder where the file will be moved into.
+ * @param srcPath Remote path of the {@link OCFile} to move.
+ * @param targetParentPath Path to the folder where the file will be moved into.
* @param account OwnCloud account containing both the file and the target folder
*/
public MoveFileOperation(String srcPath, String targetParentPath, Account account) {
import android.util.Log;
//import android.support.v4.content.LocalBroadcastManager;
+import com.owncloud.android.MainApp;
import com.owncloud.android.datamodel.FileDataStorageManager;
import com.owncloud.android.datamodel.OCFile;
* @param syncFullAccount 'True' means that this operation is part of a full account
* synchronization.
* @param isShareSupported 'True' means that the server supports the sharing API.
- * @param ignoreEtag 'True' means that the content of the remote folder should
+ * @param ignoreETag 'True' means that the content of the remote folder should
* be fetched and updated even though the 'eTag' did not
* change.
* @param dataStorageManager Interface with the local database.
remoteFile.setFileLength(localFile.getFileLength());
// TODO move operations about size of folders to FileContentProvider
} else if (mRemoteFolderChanged && remoteFile.isImage() &&
- remoteFile.getModificationTimestamp() != localFile.getModificationTimestamp()) {
+ remoteFile.getModificationTimestamp() !=
+ localFile.getModificationTimestamp()) {
remoteFile.setNeedsUpdateThumbnail(true);
Log.d(TAG, "Image " + remoteFile.getFileName() + " updated on the server");
}
package com.owncloud.android.operations;
+import com.owncloud.android.MainApp;
import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
import java.io.File;
import java.io.IOException;
+import com.owncloud.android.MainApp;
import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
/**
* Constructor
*
- * @param remotePath RemotePath of the OCFile instance describing the remote file or folder to rename
+ * @param remotePath RemotePath of the OCFile instance describing the remote file or
+ * folder to rename
* @param newName New name to set as the name of file.
*/
public RenameFileOperation(String remotePath, String newName) {
return new RemoteOperationResult(ResultCode.INVALID_LOCAL_FILE_NAME);
}
String parent = (new File(mFile.getRemotePath())).getParent();
- parent = (parent.endsWith(OCFile.PATH_SEPARATOR)) ? parent : parent + OCFile.PATH_SEPARATOR;
+ parent = (parent.endsWith(OCFile.PATH_SEPARATOR)) ? parent : parent +
+ OCFile.PATH_SEPARATOR;
mNewRemotePath = parent + mNewName;
if (mFile.isFolder()) {
mNewRemotePath += OCFile.PATH_SEPARATOR;
return new RemoteOperationResult(ResultCode.INVALID_OVERWRITE);
}
- RenameRemoteFileOperation operation = new RenameRemoteFileOperation(mFile.getFileName(), mFile.getRemotePath(),
+ RenameRemoteFileOperation operation = new RenameRemoteFileOperation(mFile.getFileName(),
+ mFile.getRemotePath(),
mNewName, mFile.isFolder());
result = operation.execute(client);
}
} catch (IOException e) {
- Log_OC.e(TAG, "Rename " + mFile.getRemotePath() + " to " + ((mNewRemotePath==null) ? mNewName : mNewRemotePath) + ": " +
+ Log_OC.e(TAG, "Rename " + mFile.getRemotePath() + " to " + ((mNewRemotePath==null) ?
+ mNewName : mNewRemotePath) + ": " +
((result!= null) ? result.getLogMessage() : ""), e);
}
// notify to scan about new file
getStorageManager().triggerMediaScan(newPath);
}
- // else - NOTHING: the link to the local file is kept although the local name can't be updated
+ // else - NOTHING: the link to the local file is kept although the local name
+ // can't be updated
// TODO - study conditions when this could be a problem
}
/**
* Checks if the new name to set is valid in the file system
*
- * The only way to be sure is trying to create a file with that name. It's made in the temporal directory
- * for downloads, out of any account, and then removed.
+ * The only way to be sure is trying to create a file with that name. It's made in the
+ * temporal directory for downloads, out of any account, and then removed.
*
- * IMPORTANT: The test must be made in the same file system where files are download. The internal storage
- * could be formatted with a different file system.
+ * IMPORTANT: The test must be made in the same file system where files are download.
+ * The internal storage could be formatted with a different file system.
*
- * TODO move this method, and maybe FileDownload.get***Path(), to a class with utilities specific for the interactions with the file system
+ * TODO move this method, and maybe FileDownload.get***Path(), to a class with utilities
+ * specific for the interactions with the file system
*
- * @return 'True' if a temporal file named with the name to set could be created in the file system where
- * local files are stored.
+ * @return 'True' if a temporal file named with the name to set could be
+ * created in the file system where local files are stored.
* @throws IOException When the temporal folder can not be created.
*/
private boolean isValidNewName() throws IOException {
throw new IOException("Unexpected error: temporal directory could not be created");
}
try {
- testFile.createNewFile(); // return value is ignored; it could be 'false' because the file already existed, that doesn't invalidate the name
+ testFile.createNewFile(); // return value is ignored; it could be 'false' because
+ // the file already existed, that doesn't invalidate the name
} catch (IOException e) {
Log_OC.i(TAG, "Test for validity of name " + mNewName + " in the file system failed");
return false;
}
boolean result = (testFile.exists() && testFile.isFile());
- // cleaning ; result is ignored, since there is not much we could do in case of failure, but repeat and repeat...
+ // cleaning ; result is ignored, since there is not much we could do in case of failure,
+ // but repeat and repeat...
testFile.delete();
return result;
package com.owncloud.android.operations;
+import com.owncloud.android.MainApp;
import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.files.services.FileDownloader;
import com.owncloud.android.files.services.FileUploader;
/**
* Constructor for "full synchronization mode".
*
- * Uses remotePath to retrieve all the data both in local cache and in the remote OC server when the operation
- * is executed, instead of reusing {@link OCFile} instances.
+ * Uses remotePath to retrieve all the data both in local cache and in the remote OC server
+ * when the operation is executed, instead of reusing {@link OCFile} instances.
*
* Useful for direct synchronization of a single file.
*
/**
- * Constructor allowing to reuse {@link OCFile} instances just queried from local cache or from remote OC server.
+ * Constructor allowing to reuse {@link OCFile} instances just queried from local cache or
+ * from remote OC server.
*
- * Useful to include this operation as part of the synchronization of a folder (or a full account), avoiding the
- * repetition of fetch operations (both in local database or remote server).
+ * Useful to include this operation as part of the synchronization of a folder
+ * (or a full account), avoiding the repetition of fetch operations (both in local database
+ * or remote server).
*
- * At least one of localFile or serverFile MUST NOT BE NULL. If you don't have none of them, use the other
- * constructor.
+ * At least one of localFile or serverFile MUST NOT BE NULL. If you don't have none of them,
+ * use the other constructor.
*
* @param localFile Data of file (just) retrieved from local cache/database.
- * @param serverFile Data of file (just) retrieved from a remote server. If null, will be
- * retrieved from network by the operation when executed.
+ * @param serverFile Data of file (just) retrieved from a remote server. If null,
+ * will be retrieved from network by the operation when executed.
* @param account ownCloud account holding the file.
* @param syncFileContents When 'true', transference of data will be started by the
* operation if needed and no conflict is detected.
if (mLocalFile != null) {
mRemotePath = mLocalFile.getRemotePath();
if (mServerFile != null && !mServerFile.getRemotePath().equals(mRemotePath)) {
- throw new IllegalArgumentException("serverFile and localFile do not correspond to the same OC file");
+ throw new IllegalArgumentException("serverFile and localFile do not correspond" +
+ " to the same OC file");
}
} else if (mServerFile != null) {
mRemotePath = mServerFile.getRemotePath();
/**
* Temporal constructor.
*
- * Extends the previous one to allow constrained synchronizations where uploads are never performed - only
- * downloads or conflict detection.
+ * Extends the previous one to allow constrained synchronizations where uploads are never
+ * performed - only downloads or conflict detection.
*
- * Do not use unless you are involved in 'folder synchronization' or 'folder download' work in progress.
+ * Do not use unless you are involved in 'folder synchronization' or 'folder download' work
+ * in progress.
*
* TODO Remove when 'folder synchronization' replaces 'folder download'.
*
- * @param localFile Data of file (just) retrieved from local cache/database. MUSTN't be null.
- * @param serverFile Data of file (just) retrieved from a remote server. If null, will be
- * retrieved from network by the operation when executed.
+ * @param localFile Data of file (just) retrieved from local cache/database.
+ * MUSTN't be null.
+ * @param serverFile Data of file (just) retrieved from a remote server.
+ * If null, will be retrieved from network by the operation
+ * when executed.
* @param account ownCloud account holding the file.
* @param syncFileContents When 'true', transference of data will be started by the
* operation if needed and no conflict is detected.
- * @param allowUploads When 'false', uploads to the server are not done; only downloads or conflict
- * detection.
+ * @param allowUploads When 'false', uploads to the server are not done;
+ * only downloads or conflict detection.
* @param context Android context; needed to start transfers.
*/
public SynchronizeFileOperation(
serverChanged = (!mServerFile.getEtag().equals(mLocalFile.getEtag()));
} else { */
serverChanged = (
- mServerFile.getModificationTimestamp() != mLocalFile.getModificationTimestampAtLastSyncForData()
+ mServerFile.getModificationTimestamp() !=
+ mLocalFile.getModificationTimestampAtLastSyncForData()
);
//}
boolean localChanged = (
} else if (localChanged) {
if (mSyncFileContents && mAllowUploads) {
requestForUpload(mLocalFile);
- // the local update of file properties will be done by the FileUploader service when the upload finishes
+ // the local update of file properties will be done by the FileUploader
+ // service when the upload finishes
} else {
- // NOTHING TO DO HERE: updating the properties of the file in the server without uploading the contents would be stupid;
- // So, an instance of SynchronizeFileOperation created with syncFileContents == false is completely useless when we suspect
+ // NOTHING TO DO HERE: updating the properties of the file in the server
+ // without uploading the contents would be stupid;
+ // So, an instance of SynchronizeFileOperation created with
+ // syncFileContents == false is completely useless when we suspect
// that an upload is necessary (for instance, in FileObserverService).
}
result = new RemoteOperationResult(ResultCode.OK);
mLocalFile.setRemoteId(mServerFile.getRemoteId());
if (mSyncFileContents) {
- requestForDownload(mLocalFile); // local, not server; we won't to keep the value of keepInSync!
- // the update of local data will be done later by the FileUploader service when the upload finishes
+ requestForDownload(mLocalFile); // local, not server; we won't to keep
+ // the value of keepInSync!
+ // the update of local data will be done later by the FileUploader
+ // service when the upload finishes
} else {
// TODO CHECK: is this really useful in some point in the code?
mServerFile.setKeepInSync(mLocalFile.keepInSync());
}
- Log_OC.i(TAG, "Synchronizing " + mAccount.name + ", file " + mLocalFile.getRemotePath() + ": "
- + result.getLogMessage());
+ Log_OC.i(TAG, "Synchronizing " + mAccount.name + ", file " + mLocalFile.getRemotePath() +
+ ": " + result.getLogMessage());
return result;
}
Intent i = new Intent(mContext, FileUploader.class);
i.putExtra(FileUploader.KEY_ACCOUNT, mAccount);
i.putExtra(FileUploader.KEY_FILE, file);
- /*i.putExtra(FileUploader.KEY_REMOTE_FILE, mRemotePath); // doing this we would lose the value of keepInSync in the road, and maybe it's not updated in the database when the FileUploader service gets it!
+ /*i.putExtra(FileUploader.KEY_REMOTE_FILE, mRemotePath);
+ // doing this we would lose the value of keepInSync in the road, and maybe
+ // it's not updated in the database when the FileUploader service gets it!
i.putExtra(FileUploader.KEY_LOCAL_FILE, localFile.getStoragePath());*/
i.putExtra(FileUploader.KEY_UPLOAD_TYPE, FileUploader.UPLOAD_SINGLE_FILE);
i.putExtra(FileUploader.KEY_FORCE_OVERWRITE, true);
import android.content.Intent;
import android.util.Log;
+import com.owncloud.android.MainApp;
import com.owncloud.android.datamodel.FileDataStorageManager;
import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.files.services.FileDownloader;
* @param account ownCloud account where the folder is located.
* @param currentSyncTime Time stamp for the synchronization process in progress.
*/
- public SynchronizeFolderOperation(Context context, String remotePath, Account account, long currentSyncTime){
+ public SynchronizeFolderOperation(Context context, String remotePath, Account account,
+ long currentSyncTime){
mRemotePath = remotePath;
mCurrentSyncTime = currentSyncTime;
mAccount = account;
}
- private RemoteOperationResult checkForChanges(OwnCloudClient client) throws OperationCancelledException {
+ private RemoteOperationResult checkForChanges(OwnCloudClient client)
+ throws OperationCancelledException {
Log_OC.d(TAG, "Checking changes in " + mAccount.name + mRemotePath);
mRemoteFolderChanged = true;
}
- private RemoteOperationResult fetchAndSyncRemoteFolder(OwnCloudClient client) throws OperationCancelledException {
+ private RemoteOperationResult fetchAndSyncRemoteFolder(OwnCloudClient client)
+ throws OperationCancelledException {
if (mCancellationRequested.get()) {
throw new OperationCancelledException();
}
storageManager.removeFolder(
mLocalFolder,
true,
- ( mLocalFolder.isDown() && // TODO: debug, I think this is always false for folders
+ ( mLocalFolder.isDown() && // TODO: debug, I think this is
+ // always false for folders
mLocalFolder.getStoragePath().startsWith(currentSavePath)
)
);
remoteFile.setFileLength(localFile.getFileLength());
// TODO move operations about size of folders to FileContentProvider
} else if (mRemoteFolderChanged && remoteFile.isImage() &&
- remoteFile.getModificationTimestamp() != localFile.getModificationTimestamp()) {
+ remoteFile.getModificationTimestamp() !=
+ localFile.getModificationTimestamp()) {
remoteFile.setNeedsUpdateThumbnail(true);
Log.d(TAG, "Image " + remoteFile.getFileName() + " updated on the server");
}
* @param filesToSyncContents Synchronization operations to execute.
* @param client Interface to the remote ownCloud server.
*/
- private void startContentSynchronizations(List<SyncOperation> filesToSyncContents, OwnCloudClient client)
+ private void startContentSynchronizations(List<SyncOperation> filesToSyncContents,
+ OwnCloudClient client)
throws OperationCancelledException {
Log_OC.v(TAG, "Starting content synchronization... ");
/**
- * Creates and populates a new {@link com.owncloud.android.datamodel.OCFile} object with the data read from the server.
+ * Creates and populates a new {@link com.owncloud.android.datamodel.OCFile}
+ * object with the data read from the server.
*
* @param remote remote file read from the server (remote file or folder).
* @return New OCFile instance representing the remote resource described by we.
/**
* Scans the default location for saving local copies of files searching for
- * a 'lost' file with the same full name as the {@link com.owncloud.android.datamodel.OCFile} received as
- * parameter.
+ * a 'lost' file with the same full name as the {@link com.owncloud.android.datamodel.OCFile}
+ * received as parameter.
*
* @param file File to associate a possible 'lost' local file.
*/
import android.content.Context;
+import com.owncloud.android.MainApp;
import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.lib.common.OwnCloudClient;
RemoteOperationResult result = null;
// Get Share for a file
- OCShare share = getStorageManager().getFirstShareByPathAndType(mRemotePath, ShareType.PUBLIC_LINK);
+ OCShare share = getStorageManager().getFirstShareByPathAndType(mRemotePath,
+ ShareType.PUBLIC_LINK);
if (share != null) {
- RemoveRemoteShareOperation operation = new RemoveRemoteShareOperation((int) share.getIdRemoteShared());
+ RemoveRemoteShareOperation operation =
+ new RemoveRemoteShareOperation((int) share.getIdRemoteShared());
result = operation.execute(client);
if (result.isSuccess() || result.getCode() == ResultCode.SHARE_NOT_FOUND) {
}
private boolean existsFile(OwnCloudClient client, String remotePath){
- ExistenceCheckRemoteOperation existsOperation = new ExistenceCheckRemoteOperation(remotePath, mContext, false);
+ ExistenceCheckRemoteOperation existsOperation =
+ new ExistenceCheckRemoteOperation(remotePath, mContext, false);
RemoteOperationResult result = existsOperation.execute(client);
return result.isSuccess();
}
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
-import java.util.concurrent.CancellationException;
import java.util.concurrent.atomic.AtomicBoolean;
import org.apache.commons.httpclient.methods.PutMethod;
int localBehaviour,
Context context) {
if (account == null)
- throw new IllegalArgumentException("Illegal NULL account in UploadFileOperation creation");
+ throw new IllegalArgumentException("Illegal NULL account in UploadFileOperation " +
+ "creation");
if (file == null)
throw new IllegalArgumentException("Illegal NULL file in UploadFileOperation creation");
if (file.getStoragePath() == null || file.getStoragePath().length() <= 0) {
package com.owncloud.android.operations.common;
+import com.owncloud.android.MainApp;
import com.owncloud.android.datamodel.FileDataStorageManager;
import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.common.operations.OnRemoteOperationListener;
*
* Do not call this method from the main thread.
*
- * This method should be used whenever an ownCloud account is available, instead of {@link #execute(OwnCloudClient)}.
+ * This method should be used whenever an ownCloud account is available, instead of
+ * {@link #execute(OwnCloudClient, com.owncloud.android.datamodel.FileDataStorageManager)}.
*
- * @param account ownCloud account in remote ownCloud server to reach during the execution of the operation.
+ * @param storageManager
* @param context Android context for the component calling the method.
* @return Result of the operation.
*/
public RemoteOperationResult execute(FileDataStorageManager storageManager, Context context) {
if (storageManager == null) {
- throw new IllegalArgumentException("Trying to execute a sync operation with a NULL storage manager");
+ throw new IllegalArgumentException("Trying to execute a sync operation with a " +
+ "NULL storage manager");
}
if (storageManager.getAccount() == null) {
- throw new IllegalArgumentException("Trying to execute a sync operation with a storage manager for a NULL account");
+ throw new IllegalArgumentException("Trying to execute a sync operation with a " +
+ "storage manager for a NULL account");
}
mStorageManager = storageManager;
return super.execute(mStorageManager.getAccount(), context);
*
* Do not call this method from the main thread.
*
- * @param client Client object to reach an ownCloud server during the execution of the operation.
+ * @param client Client object to reach an ownCloud server during the execution of the o
+ * peration.
+ * @param storageManager
* @return Result of the operation.
*/
- public RemoteOperationResult execute(OwnCloudClient client, FileDataStorageManager storageManager) {
+ public RemoteOperationResult execute(OwnCloudClient client,
+ FileDataStorageManager storageManager) {
if (storageManager == null)
- throw new IllegalArgumentException("Trying to execute a sync operation with a NULL storage manager");
+ throw new IllegalArgumentException("Trying to execute a sync operation with a " +
+ "NULL storage manager");
mStorageManager = storageManager;
return super.execute(client);
}
/**
* Asynchronously executes the remote operation
*
- * This method should be used whenever an ownCloud account is available, instead of {@link #execute(OwnCloudClient)}.
+ * This method should be used whenever an ownCloud account is available, instead of
+ * {@link #execute(OwnCloudClient)}.
*
- * @param account ownCloud account in remote ownCloud server to reach during the execution of the operation.
+ * @param account ownCloud account in remote ownCloud server to reach during the
+ * execution of the operation.
* @param context Android context for the component calling the method.
* @param listener Listener to be notified about the execution of the operation.
- * @param listenerHandler Handler associated to the thread where the methods of the listener objects must be called.
+ * @param listenerHandler Handler associated to the thread where the methods of the listener
+ * objects must be called.
* @return Thread were the remote operation is executed.
*/
/*
- public Thread execute(FileDataStorageManager storageManager, Context context, OnRemoteOperationListener listener, Handler listenerHandler, Activity callerActivity) {
+ public Thread execute(FileDataStorageManager storageManager,
+ Context context, OnRemoteOperationListener listener, Handler listenerHandler, Activity callerActivity) {
if (storageManager == null) {
- throw new IllegalArgumentException("Trying to execute a sync operation with a NULL storage manager");
+ throw new IllegalArgumentException("Trying to execute a sync operation
+ with a NULL storage manager");
}
if (storageManager.getAccount() == null) {
- throw new IllegalArgumentException("Trying to execute a sync operation with a storage manager for a NULL account");
+ throw new IllegalArgumentException("Trying to execute a sync operation with a
+ storage manager for a NULL account");
}
mStorageManager = storageManager;
- return super.execute(storageManager.getAccount(), context, listener, listenerHandler, callerActivity);
+ return super.execute(storageManager.getAccount(), context, listener, listenerHandler,
+ callerActivity);
}
*/
/**
* Asynchronously executes the remote operation
*
- * @param client Client object to reach an ownCloud server during the execution of the operation.
+ * @param client Client object to reach an ownCloud server during the
+ * execution of the operation.
* @param listener Listener to be notified about the execution of the operation.
- * @param listenerHandler Handler associated to the thread where the methods of the listener objects must be called.
+ * @param listenerHandler Handler associated to the thread where the methods of
+ * the listener objects must be called.
* @return Thread were the remote operation is executed.
*/
- public Thread execute(OwnCloudClient client, FileDataStorageManager storageManager, OnRemoteOperationListener listener, Handler listenerHandler) {
+ public Thread execute(OwnCloudClient client, FileDataStorageManager storageManager,
+ OnRemoteOperationListener listener, Handler listenerHandler) {
if (storageManager == null) {
- throw new IllegalArgumentException("Trying to execute a sync operation with a NULL storage manager");
+ throw new IllegalArgumentException("Trying to execute a sync operation " +
+ "with a NULL storage manager");
}
mStorageManager = storageManager;
return super.execute(client, listener, listenerHandler);
public static final String ACTION_REMOVE = "REMOVE";
public static final String ACTION_CREATE_FOLDER = "CREATE_FOLDER";
public static final String ACTION_SYNC_FILE = "SYNC_FILE";
- public static final String ACTION_SYNC_FOLDER = "SYNC_FOLDER"; // for the moment, just to download
+ public static final String ACTION_SYNC_FOLDER = "SYNC_FOLDER";//for the moment, just to download
public static final String ACTION_MOVE_FILE = "MOVE_FILE";
- public static final String ACTION_OPERATION_ADDED = OperationsService.class.getName() + ".OPERATION_ADDED";
- public static final String ACTION_OPERATION_FINISHED = OperationsService.class.getName() + ".OPERATION_FINISHED";
+ public static final String ACTION_OPERATION_ADDED = OperationsService.class.getName() +
+ ".OPERATION_ADDED";
+ public static final String ACTION_OPERATION_FINISHED = OperationsService.class.getName() +
+ ".OPERATION_FINISHED";
private ConcurrentMap<Integer, Pair<RemoteOperation, RemoteOperationResult>>
Log_OC.d(TAG, "Creating service");
/// First worker thread for most of operations
- HandlerThread thread = new HandlerThread("Operations thread", Process.THREAD_PRIORITY_BACKGROUND);
+ HandlerThread thread = new HandlerThread("Operations thread",
+ Process.THREAD_PRIORITY_BACKGROUND);
thread.start();
mOperationsHandler = new ServiceHandler(thread.getLooper(), this);
mOperationsBinder = new OperationsServiceBinder(mOperationsHandler);
Pair<Target, RemoteOperation> itemToQueue = newOperation(intent);
if (itemToQueue != null) {
- mSyncFolderHandler.add(account, remotePath, (SynchronizeFolderOperation)itemToQueue.second);
+ mSyncFolderHandler.add(account, remotePath,
+ (SynchronizeFolderOperation)itemToQueue.second);
Message msg = mSyncFolderHandler.obtainMessage();
msg.arg1 = startId;
msg.obj = itemSyncKey;
public class OperationsServiceBinder extends Binder /* implements OnRemoteOperationListener */ {
/**
- * Map of listeners that will be reported about the end of operations from a {@link OperationsServiceBinder} instance
+ * Map of listeners that will be reported about the end of operations from a
+ * {@link OperationsServiceBinder} instance
*/
private ConcurrentMap<OnRemoteOperationListener, Handler> mBoundListeners =
new ConcurrentHashMap<OnRemoteOperationListener, Handler>();
* Adds a listener interested in being reported about the end of operations.
*
* @param listener Object to notify about the end of operations.
- * @param callbackHandler {@link Handler} to access the listener without breaking Android threading protection.
+ * @param callbackHandler {@link Handler} to access the listener without
+ * breaking Android threading protection.
*/
- public void addOperationListener (OnRemoteOperationListener listener, Handler callbackHandler) {
+ public void addOperationListener (OnRemoteOperationListener listener,
+ Handler callbackHandler) {
synchronized (mBoundListeners) {
mBoundListeners.put(listener, callbackHandler);
}
/**
- * Removes a listener from the list of objects interested in the being reported about the end of operations.
+ * Removes a listener from the list of objects interested in the being reported about
+ * the end of operations.
*
* @param listener Object to notify about progress of transfer.
*/
/**
* TODO - IMPORTANT: update implementation when more operations are moved into the service
*
- * @return 'True' when an operation that enforces the user to wait for completion is in process.
+ * @return 'True' when an operation that enforces the user to wait for completion is
+ * in process.
*/
public boolean isPerformingBlockingOperation() {
return (!mServiceHandler.mPendingOperations.isEmpty());
}
- public boolean dispatchResultIfFinished(int operationId, OnRemoteOperationListener listener) {
+ public boolean dispatchResultIfFinished(int operationId,
+ OnRemoteOperationListener listener) {
Pair<RemoteOperation, RemoteOperationResult> undispatched =
mUndispatchedFinishedOperations.remove(operationId);
if (undispatched != null) {
/**
- * Returns True when the file described by 'file' in the ownCloud account 'account' is downloading or waiting
- * to download.
+ * Returns True when the file described by 'file' in the ownCloud account 'account' is
+ * downloading or waiting to download.
*
- * If 'file' is a directory, returns 'true' if some of its descendant files is downloading or waiting
- * to download.
+ * If 'file' is a directory, returns 'true' if some of its descendant files is downloading
+ * or waiting to download.
*
* @param account ownCloud account where the remote file is stored.
- * @param remotePath Path of the folder to check if something is synchronizing / downloading / uploading
- * inside.
+ * @param remotePath Path of the folder to check if something is synchronizing
+ * / downloading / uploading inside.
*/
public boolean isSynchronizing(Account account, String remotePath) {
return mSyncFolderHandler.isSynchronizing(account, remotePath);
* Created with the Looper of a new thread, started in {@link OperationsService#onCreate()}.
*/
private static class ServiceHandler extends Handler {
- // don't make it a final class, and don't remove the static ; lint will warn about a possible memory leak
+ // don't make it a final class, and don't remove the static ; lint will warn about a p
+ // ossible memory leak
OperationsService mService;
if (mLastTarget == null || !mLastTarget.equals(next.first)) {
mLastTarget = next.first;
if (mLastTarget.mAccount != null) {
- OwnCloudAccount ocAccount = new OwnCloudAccount(mLastTarget.mAccount, mService);
+ OwnCloudAccount ocAccount = new OwnCloudAccount(mLastTarget.mAccount,
+ mService);
mOwnCloudClient = OwnCloudClientManagerFactory.getDefaultSingleton().
getClientFor(ocAccount, mService);
mStorageManager = new FileDataStorageManager(
if (mLastTarget.mCookie != null &&
mLastTarget.mCookie.length() > 0) {
// just used for GetUserName
- // TODO refactor to run GetUserName as AsyncTask in the context of AuthenticatorActivity
+ // TODO refactor to run GetUserName as AsyncTask in the context of
+ // AuthenticatorActivity
credentials = OwnCloudCredentialsFactory.newSamlSsoCredentials(
mLastTarget.mCookie); // SAML SSO
}
/// perform the operation
if (mCurrentOperation instanceof SyncOperation) {
- result = ((SyncOperation)mCurrentOperation).execute(mOwnCloudClient, mStorageManager);
+ result = ((SyncOperation)mCurrentOperation).execute(mOwnCloudClient,
+ mStorageManager);
} else {
result = mCurrentOperation.execute(mOwnCloudClient);
}
} catch (AccountsException e) {
if (mLastTarget.mAccount == null) {
- Log_OC.e(TAG, "Error while trying to get authorization for a NULL account", e);
+ Log_OC.e(TAG, "Error while trying to get authorization for a NULL account",
+ e);
} else {
- Log_OC.e(TAG, "Error while trying to get authorization for " + mLastTarget.mAccount.name, e);
+ Log_OC.e(TAG, "Error while trying to get authorization for " +
+ mLastTarget.mAccount.name, e);
}
result = new RemoteOperationResult(e);
} catch (IOException e) {
if (mLastTarget.mAccount == null) {
- Log_OC.e(TAG, "Error while trying to get authorization for a NULL account", e);
+ Log_OC.e(TAG, "Error while trying to get authorization for a NULL account",
+ e);
} else {
- Log_OC.e(TAG, "Error while trying to get authorization for " + mLastTarget.mAccount.name, e);
+ Log_OC.e(TAG, "Error while trying to get authorization for " +
+ mLastTarget.mAccount.name, e);
}
result = new RemoteOperationResult(e);
} catch (Exception e) {
* TODO - move to ServiceHandler (probably)
*
* @param operationIntent Intent describing a new operation to queue and execute.
- * @return Pair with the new operation object and the information about its target server.
+ * @return Pair with the new operation object and the information about its
+ * target server.
*/
private Pair<Target , RemoteOperation> newOperation(Intent operationIntent) {
RemoteOperation operation = null;
} else if (action.equals(ACTION_REMOVE)) {
// Remove file or folder
String remotePath = operationIntent.getStringExtra(EXTRA_REMOTE_PATH);
- boolean onlyLocalCopy = operationIntent.getBooleanExtra(EXTRA_REMOVE_ONLY_LOCAL, false);
+ boolean onlyLocalCopy = operationIntent.getBooleanExtra(EXTRA_REMOVE_ONLY_LOCAL,
+ false);
operation = new RemoveFileOperation(remotePath, onlyLocalCopy);
} else if (action.equals(ACTION_CREATE_FOLDER)) {
// Create Folder
String remotePath = operationIntent.getStringExtra(EXTRA_REMOTE_PATH);
- boolean createFullPath = operationIntent.getBooleanExtra(EXTRA_CREATE_FULL_PATH, true);
+ boolean createFullPath = operationIntent.getBooleanExtra(EXTRA_CREATE_FULL_PATH,
+ true);
operation = new CreateFolderOperation(remotePath, createFullPath);
} else if (action.equals(ACTION_SYNC_FILE)) {
// Sync file
String remotePath = operationIntent.getStringExtra(EXTRA_REMOTE_PATH);
- boolean syncFileContents = operationIntent.getBooleanExtra(EXTRA_SYNC_FILE_CONTENTS, true);
+ boolean syncFileContents =
+ operationIntent.getBooleanExtra(EXTRA_SYNC_FILE_CONTENTS, true);
operation = new SynchronizeFileOperation(
remotePath, account, syncFileContents, getApplicationContext()
);
// Sync file
String remotePath = operationIntent.getStringExtra(EXTRA_REMOTE_PATH);
operation = new SynchronizeFolderOperation(
- this, // TODO remove this dependency from construction time
+ this, // TODO remove this dependency from construction time
remotePath,
account,
System.currentTimeMillis() // TODO remove this dependency from construction time
/**
* Sends a broadcast when a new operation is added to the queue.
*
- * Local broadcasts are only delivered to activities in the same process, but can't be done sticky :\
+ * Local broadcasts are only delivered to activities in the same process, but can't be
+ * done sticky :\
*
* @param target Account or URL pointing to an OC server.
* @param operation Added operation.
// TODO - maybe add a notification for real start of operations
/**
- * Sends a LOCAL broadcast when an operations finishes in order to the interested activities can update their view
+ * Sends a LOCAL broadcast when an operations finishes in order to the interested activities c
+ * an update their view
*
* Local broadcasts are only delivered to activities in the same process.
*
* @param operation Finished operation.
* @param result Result of the operation.
*/
- private void sendBroadcastOperationFinished(Target target, RemoteOperation operation, RemoteOperationResult result) {
+ private void sendBroadcastOperationFinished(Target target, RemoteOperation operation,
+ RemoteOperationResult result) {
Intent intent = new Intent(ACTION_OPERATION_FINISHED);
intent.putExtra(EXTRA_RESULT, result);
if (target.mAccount != null) {
final RemoteOperation operation, final RemoteOperationResult result
) {
int count = 0;
- Iterator<OnRemoteOperationListener> listeners = mOperationsBinder.mBoundListeners.keySet().iterator();
+ Iterator<OnRemoteOperationListener> listeners =
+ mOperationsBinder.mBoundListeners.keySet().iterator();
while (listeners.hasNext()) {
final OnRemoteOperationListener listener = listeners.next();
final Handler handler = mOperationsBinder.mBoundListeners.get(listener);
import android.os.Message;
import android.util.Pair;
+import com.owncloud.android.MainApp;
import com.owncloud.android.datamodel.FileDataStorageManager;
import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.files.services.FileDownloader;
}
}
- public void add(Account account, String remotePath, SynchronizeFolderOperation syncFolderOperation){
+ public void add(Account account, String remotePath,
+ SynchronizeFolderOperation syncFolderOperation){
mPendingOperations.putIfAbsent(account, remotePath, syncFolderOperation);
sendBroadcastNewSyncFolder(account, remotePath); // TODO upgrade!
}
}
/**
- * TODO review this method when "folder synchronization" replaces "folder download"; this is a fast and ugly
- * patch.
+ * TODO review this method when "folder synchronization" replaces "folder download";
+ * this is a fast and ugly patch.
*/
private void sendBroadcastNewSyncFolder(Account account, String remotePath) {
Intent added = new Intent(FileDownloader.getDownloadAddedMessage());
added.putExtra(FileDownloader.ACCOUNT_NAME, account.name);
added.putExtra(FileDownloader.EXTRA_REMOTE_PATH, remotePath);
- added.putExtra(FileDownloader.EXTRA_FILE_PATH, FileStorageUtils.getSavePath(account.name) + remotePath);
+ added.putExtra(FileDownloader.EXTRA_FILE_PATH, FileStorageUtils.getSavePath(account.name)
+ + remotePath);
mService.sendStickyBroadcast(added);
}
/**
- * TODO review this method when "folder synchronization" replaces "folder download"; this is a fast and ugly
- * patch.
+ * TODO review this method when "folder synchronization" replaces "folder download";
+ * this is a fast and ugly patch.
*/
- private void sendBroadcastFinishedSyncFolder(Account account, String remotePath, boolean success) {
+ private void sendBroadcastFinishedSyncFolder(Account account, String remotePath,
+ boolean success) {
Intent finished = new Intent(FileDownloader.getDownloadFinishMessage());
finished.putExtra(FileDownloader.ACCOUNT_NAME, account.name);
finished.putExtra(FileDownloader.EXTRA_REMOTE_PATH, remotePath);
- finished.putExtra(FileDownloader.EXTRA_FILE_PATH, FileStorageUtils.getSavePath(account.name) + remotePath);
+ finished.putExtra(FileDownloader.EXTRA_FILE_PATH,
+ FileStorageUtils.getSavePath(account.name) + remotePath);
finished.putExtra(FileDownloader.EXTRA_DOWNLOAD_RESULT, success);
mService.sendStickyBroadcast(finished);
}
import org.apache.http.HttpResponse;\r
import org.apache.http.client.ClientProtocolException;\r
\r
+import com.owncloud.android.MainApp;\r
import com.owncloud.android.datamodel.FileDataStorageManager;\r
import com.owncloud.android.lib.common.accounts.AccountUtils;\r
import com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException;\r
this.setAccountManager(AccountManager.get(context));\r
}\r
\r
- public AbstractOwnCloudSyncAdapter(Context context, boolean autoInitialize, boolean allowParallelSyncs) {\r
+ public AbstractOwnCloudSyncAdapter(Context context, boolean autoInitialize,\r
+ boolean allowParallelSyncs) {\r
super(context, autoInitialize, allowParallelSyncs);\r
this.setAccountManager(AccountManager.get(context));\r
}\r
return mStoreManager;\r
}\r
\r
- protected void initClientForCurrentAccount() throws OperationCanceledException, AuthenticatorException, IOException, AccountNotFoundException {\r
+ protected void initClientForCurrentAccount() throws OperationCanceledException,\r
+ AuthenticatorException, IOException, AccountNotFoundException {\r
AccountUtils.constructFullURLForAccount(getContext(), account);\r
OwnCloudAccount ocAccount = new OwnCloudAccount(account, getContext());\r
mClient = OwnCloudClientManagerFactory.getDefaultSingleton().\r
import org.apache.jackrabbit.webdav.DavException;
+import com.owncloud.android.MainApp;
import com.owncloud.android.R;
import com.owncloud.android.authentication.AuthenticatorActivity;
import com.owncloud.android.datamodel.FileDataStorageManager;
* Implementation of {@link AbstractThreadedSyncAdapter} responsible for synchronizing
* ownCloud files.
*
- * Performs a full synchronization of the account recieved in {@link #onPerformSync(Account, Bundle, String, ContentProviderClient, SyncResult)}.
+ * Performs a full synchronization of the account recieved in {@link #onPerformSync(Account, Bundle,
+ * String, ContentProviderClient, SyncResult)}.
*/
public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
private final static String TAG = FileSyncAdapter.class.getSimpleName();
- /** Maximum number of failed folder synchronizations that are supported before finishing the synchronization operation */
+ /** Maximum number of failed folder synchronizations that are supported before finishing
+ * the synchronization operation */
private static final int MAX_FAILED_RESULTS = 3;
- public static final String EVENT_FULL_SYNC_START = FileSyncAdapter.class.getName() + ".EVENT_FULL_SYNC_START";
- public static final String EVENT_FULL_SYNC_END = FileSyncAdapter.class.getName() + ".EVENT_FULL_SYNC_END";
- public static final String EVENT_FULL_SYNC_FOLDER_CONTENTS_SYNCED = FileSyncAdapter.class.getName() + ".EVENT_FULL_SYNC_FOLDER_CONTENTS_SYNCED";
- //public static final String EVENT_FULL_SYNC_FOLDER_SIZE_SYNCED = FileSyncAdapter.class.getName() + ".EVENT_FULL_SYNC_FOLDER_SIZE_SYNCED";
+ public static final String EVENT_FULL_SYNC_START = FileSyncAdapter.class.getName() +
+ ".EVENT_FULL_SYNC_START";
+ public static final String EVENT_FULL_SYNC_END = FileSyncAdapter.class.getName() +
+ ".EVENT_FULL_SYNC_END";
+ public static final String EVENT_FULL_SYNC_FOLDER_CONTENTS_SYNCED =
+ FileSyncAdapter.class.getName() + ".EVENT_FULL_SYNC_FOLDER_CONTENTS_SYNCED";
+ //public static final String EVENT_FULL_SYNC_FOLDER_SIZE_SYNCED =
+ // FileSyncAdapter.class.getName() + ".EVENT_FULL_SYNC_FOLDER_SIZE_SYNCED";
- public static final String EXTRA_ACCOUNT_NAME = FileSyncAdapter.class.getName() + ".EXTRA_ACCOUNT_NAME";
- public static final String EXTRA_FOLDER_PATH = FileSyncAdapter.class.getName() + ".EXTRA_FOLDER_PATH";
+ public static final String EXTRA_ACCOUNT_NAME = FileSyncAdapter.class.getName() +
+ ".EXTRA_ACCOUNT_NAME";
+ public static final String EXTRA_FOLDER_PATH = FileSyncAdapter.class.getName() +
+ ".EXTRA_FOLDER_PATH";
public static final String EXTRA_RESULT = FileSyncAdapter.class.getName() + ".EXTRA_RESULT";
/** Flag made 'true' when a request to cancel the synchronization is received */
private boolean mCancellation;
- /** When 'true' the process was requested by the user through the user interface; when 'false', it was requested automatically by the system */
+ /** When 'true' the process was requested by the user through the user interface;
+ * when 'false', it was requested automatically by the system */
private boolean mIsManualSync;
/** Counter for failed operations in the synchronization process */
/** Counter of failed operations in synchronization of kept-in-sync files */
private int mFailsInFavouritesFound;
- /** Map of remote and local paths to files that where locally stored in a location out of the ownCloud folder and couldn't be copied automatically into it */
+ /** Map of remote and local paths to files that where locally stored in a location out
+ * of the ownCloud folder and couldn't be copied automatically into it */
private Map<String, String> mForgottenLocalFiles;
/** {@link SyncResult} instance to return to the system when the synchronization finish */
try {
this.initClientForCurrentAccount();
} catch (IOException e) {
- /// the account is unknown for the Synchronization Manager, unreachable this context, or can not be authenticated; don't try this again
+ /// the account is unknown for the Synchronization Manager, unreachable this context,
+ // or can not be authenticated; don't try this again
mSyncResult.tooManyRetries = true;
notifyFailedSynchronization();
return;
} catch (AccountsException e) {
- /// the account is unknown for the Synchronization Manager, unreachable this context, or can not be authenticated; don't try this again
+ /// the account is unknown for the Synchronization Manager, unreachable this context,
+ // or can not be authenticated; don't try this again
mSyncResult.tooManyRetries = true;
notifyFailedSynchronization();
return;
}
Log_OC.d(TAG, "Synchronization of ownCloud account " + account.name + " starting");
- sendLocalBroadcast(EVENT_FULL_SYNC_START, null, null); // message to signal the start of the synchronization to the UI
+ sendLocalBroadcast(EVENT_FULL_SYNC_START, null, null); // message to signal the start
+ // of the synchronization to the UI
try {
updateOCVersion();
synchronizeFolder(getStorageManager().getFileByPath(OCFile.ROOT_PATH));
} else {
- Log_OC.d(TAG, "Leaving synchronization before synchronizing the root folder because cancelation request");
+ Log_OC.d(TAG, "Leaving synchronization before synchronizing the root folder " +
+ "because cancelation request");
}
} finally {
- // it's important making this although very unexpected errors occur; that's the reason for the finally
+ // it's important making this although very unexpected errors occur;
+ // that's the reason for the finally
if (mFailedResultsCounter > 0 && mIsManualSync) {
/// don't let the system synchronization manager retries MANUAL synchronizations
- // (be careful: "MANUAL" currently includes the synchronization requested when a new account is created and when the user changes the current account)
+ // (be careful: "MANUAL" currently includes the synchronization requested when
+ // a new account is created and when the user changes the current account)
mSyncResult.tooManyRetries = true;
/// notify the user about the failure of MANUAL synchronization
if (mForgottenLocalFiles.size() > 0) {
notifyForgottenLocalFiles();
}
- sendLocalBroadcast(EVENT_FULL_SYNC_END, null, mLastFailedResult); // message to signal the end to the UI
+ sendLocalBroadcast(EVENT_FULL_SYNC_END, null, mLastFailedResult); // message to signal
+ // the end to the UI
}
}
* locally saved.
*
* See {@link #onPerformSync(Account, Bundle, String, ContentProviderClient, SyncResult)}
- * and {@link #synchronizeFolder(String, long)}.
+ * and {@link #synchronizeFolder(OCFile)}.
*/
@Override
public void onSyncCanceled() {
}
*/
// folder synchronization
- RefreshFolderOperation synchFolderOp = new RefreshFolderOperation( folder,
- mCurrentSyncTime,
- true,
- mIsShareSupported,
- false,
- getStorageManager(),
- getAccount(),
- getContext()
+ RefreshFolderOperation synchFolderOp = new RefreshFolderOperation( folder,
+ mCurrentSyncTime,
+ true,
+ mIsShareSupported,
+ false,
+ getStorageManager(),
+ getAccount(),
+ getContext()
);
RemoteOperationResult result = synchFolderOp.execute(getClient());
if (result.isSuccess()) {
// synchronize children folders
List<OCFile> children = synchFolderOp.getChildren();
- fetchChildren(folder, children, synchFolderOp.getRemoteFolderChanged()); // beware of the 'hidden' recursion here!
+ // beware of the 'hidden' recursion here!
+ fetchChildren(folder, children, synchFolderOp.getRemoteFolderChanged());
}
} else {
}
/**
- * Checks if a failed result should terminate the synchronization process immediately, according to
- * OUR OWN POLICY
+ * Checks if a failed result should terminate the synchronization process immediately,
+ * according to OUR OWN POLICY
*
* @param failedResult Remote operation result to check.
- * @return 'True' if the result should immediately finish the synchronization
+ * @return 'True' if the result should immediately finish the
+ * synchronization
*/
private boolean isFinisher(RemoteOperationResult failedResult) {
if (failedResult != null) {
syncDown = (parentEtagChanged || etag == null || etag.length() == 0);
if(syncDown) { */
synchronizeFolder(newFile);
- //sendLocalBroadcast(EVENT_FULL_SYNC_FOLDER_SIZE_SYNCED, parent.getRemotePath(), null);
+ //sendLocalBroadcast(EVENT_FULL_SYNC_FOLDER_SIZE_SYNCED, parent.getRemotePath(),
+ // null);
//}
}
}
- if (mCancellation && i <files.size()) Log_OC.d(TAG, "Leaving synchronization before synchronizing " + files.get(i).getRemotePath() + " due to cancelation request");
+ if (mCancellation && i <files.size()) Log_OC.d(TAG,
+ "Leaving synchronization before synchronizing " + files.get(i).getRemotePath() +
+ " due to cancelation request");
}
/**
- * Sends a message to any application component interested in the progress of the synchronization.
+ * Sends a message to any application component interested in the progress of the
+ * synchronization.
*
* @param event Event in the process of synchronization to be notified.
* @param dirRemotePath Remote path of the folder target of the event occurred.
- * @param result Result of an individual {@ SynchronizeFolderOperation}, if completed; may be null.
+ * @param result Result of an individual {@ SynchronizeFolderOperation},
+ * if completed; may be null.
*/
- private void sendLocalBroadcast(String event, String dirRemotePath, RemoteOperationResult result) {
+ private void sendLocalBroadcast(String event, String dirRemotePath,
+ RemoteOperationResult result) {
Log_OC.d(TAG, "Send broadcast " + event);
Intent intent = new Intent(event);
intent.putExtra(FileSyncAdapter.EXTRA_ACCOUNT_NAME, getAccount().name);
// let the user update credentials with one click
Intent updateAccountCredentials = new Intent(getContext(), AuthenticatorActivity.class);
updateAccountCredentials.putExtra(AuthenticatorActivity.EXTRA_ACCOUNT, getAccount());
- updateAccountCredentials.putExtra(AuthenticatorActivity.EXTRA_ACTION, AuthenticatorActivity.ACTION_UPDATE_EXPIRED_TOKEN);
+ updateAccountCredentials.putExtra(AuthenticatorActivity.EXTRA_ACTION,
+ AuthenticatorActivity.ACTION_UPDATE_EXPIRED_TOKEN);
updateAccountCredentials.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
updateAccountCredentials.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
updateAccountCredentials.addFlags(Intent.FLAG_FROM_BACKGROUND);
.setTicker(i18n(R.string.sync_fail_ticker_unauthorized))
.setContentTitle(i18n(R.string.sync_fail_ticker_unauthorized))
.setContentIntent(PendingIntent.getActivity(
- getContext(), (int)System.currentTimeMillis(), updateAccountCredentials, PendingIntent.FLAG_ONE_SHOT
+ getContext(), (int)System.currentTimeMillis(), updateAccountCredentials,
+ PendingIntent.FLAG_ONE_SHOT
))
.setContentText(i18n(R.string.sync_fail_content_unauthorized, getAccount().name));
} else {
/**
- * Notifies the user about conflicts and strange fails when trying to synchronize the contents of kept-in-sync files.
+ * Notifies the user about conflicts and strange fails when trying to synchronize the contents
+ * of kept-in-sync files.
*
* By now, we won't consider a failed synchronization.
*/
getContext(), (int) System.currentTimeMillis(), new Intent(), 0
))
.setContentTitle(i18n(R.string.sync_fail_in_favourites_ticker))
- .setContentText(i18n(R.string.sync_fail_in_favourites_content, mFailedResultsCounter + mConflictsFound, mConflictsFound));
+ .setContentText(i18n(R.string.sync_fail_in_favourites_content,
+ mFailedResultsCounter + mConflictsFound, mConflictsFound));
showNotification(R.string.sync_fail_in_favourites_ticker, notificationBuilder);
} else {
}
/**
- * Notifies the user about local copies of files out of the ownCloud local directory that were 'forgotten' because
- * copying them inside the ownCloud local directory was not possible.
+ * Notifies the user about local copies of files out of the ownCloud local directory that
+ * were 'forgotten' because copying them inside the ownCloud local directory was not possible.
*
- * We don't want links to files out of the ownCloud local directory (foreign files) anymore. It's easy to have
- * synchronization problems if a local file is linked to more than one remote file.
+ * We don't want links to files out of the ownCloud local directory (foreign files) anymore.
+ * It's easy to have synchronization problems if a local file is linked to more than one
+ * remote file.
*
- * We won't consider a synchronization as failed when foreign files can not be copied to the ownCloud local directory.
+ * We won't consider a synchronization as failed when foreign files can not be copied to
+ * the ownCloud local directory.
*/
private void notifyForgottenLocalFiles() {
NotificationCompat.Builder notificationBuilder = createNotificationBuilder();
getContext(), (int) System.currentTimeMillis(), explanationIntent, 0
))
.setContentTitle(i18n(R.string.sync_foreign_files_forgotten_ticker))
- .setContentText(i18n(R.string.sync_foreign_files_forgotten_content, mForgottenLocalFiles.size(), i18n(R.string.app_name)));
+ .setContentText(i18n(R.string.sync_foreign_files_forgotten_content,
+ mForgottenLocalFiles.size(), i18n(R.string.app_name)));
showNotification(R.string.sync_foreign_files_forgotten_ticker, notificationBuilder);
}
private boolean mRedirectingToSetupAccount = false;
/** Flag to signal when the value of mAccount was set */
- private boolean mAccountWasSet;
+ protected boolean mAccountWasSet;
/** Flag to signal when the value of mAccount was restored from a saved state */
- private boolean mAccountWasRestored;
+ protected boolean mAccountWasRestored;
/** Flag to signal if the activity is launched by a notification */
private boolean mFromNotification;
* @param account New {@link Account} to set.
* @param savedAccount When 'true', account was retrieved from a saved instance state.
*/
- private void setAccount(Account account, boolean savedAccount) {
+ protected void setAccount(Account account, boolean savedAccount) {
Account oldAccount = mAccount;
boolean validAccount = (account != null && AccountUtils.setCurrentOwnCloudAccount(getApplicationContext(), account.name));
if (validAccount) {
return mAccount;
}
+ protected void setAccount(Account account) {
+ mAccount = account;
+ }
+
/**
* @return Value of mFromNotification: True if the Activity is launched by a notification
*/
* TODO
*/
private void updateNavigationElementsInActionBar(OCFile chosenFile) {
- ActionBar actionBar = getSupportActionBar();
+ ActionBar actionBar = getSupportActionBar();
+
+ // For adding content description tag to a title field in the action bar
+ int actionBarTitleId = getResources().getIdentifier("action_bar_title", "id", "android");
+
if (chosenFile == null || mDualPane) {
// only list of files - set for browsing through folders
OCFile currentDir = getCurrentDir();
actionBar.setDisplayShowTitleEnabled(!noRoot);
if (!noRoot) {
actionBar.setTitle(getString(R.string.default_display_name_for_root_folder));
+ View actionBarView = getWindow().getDecorView().findViewById(actionBarTitleId);
+ if (actionBarView != null) { // it's null in Android 2.x (at least)
+ actionBarView.setContentDescription(getString(R.string.default_display_name_for_root_folder));
+ }
}
actionBar.setNavigationMode(!noRoot ? ActionBar.NAVIGATION_MODE_STANDARD : ActionBar.NAVIGATION_MODE_LIST);
actionBar.setListNavigationCallbacks(mDirectories, this); // assuming mDirectories is updated
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setTitle(chosenFile.getFileName());
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
+ getWindow().getDecorView().findViewById(actionBarTitleId).setContentDescription(chosenFile.getFileName());
}
}
if (file.isFolder()) {
return file;
} else if (getStorageManager() != null) {
- String parentPath = file.getRemotePath().substring(0, file.getRemotePath().lastIndexOf(file.getFileName()));
+ String parentPath = file.getRemotePath().substring(0,
+ file.getRemotePath().lastIndexOf(file.getFileName()));
return getStorageManager().getFileByPath(parentPath);
}
}
getAccount(),
getApplicationContext()
);
- synchFolderOp.execute(getAccount(), this, null, null);
+ synchFolderOp.execute(getAccount(), MainApp.getAppContext(), this, null, null);
setSupportProgressBarIndeterminateVisibility(true);
*/
public void showUntrustedCertDialog(RemoteOperationResult result) {
// Show a dialog with the certificate info
- SslUntrustedCertDialog dialog = SslUntrustedCertDialog.newInstanceForFullSslError((CertificateCombinedException)result.getException());
+ SslUntrustedCertDialog dialog = SslUntrustedCertDialog.newInstanceForFullSslError(
+ (CertificateCombinedException)result.getException());
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
dialog.show(ft, DIALOG_UNTRUSTED_CERT);
import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;
import com.actionbarsherlock.view.Window;
+import com.owncloud.android.MainApp;
import com.owncloud.android.R;
import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.lib.common.OwnCloudAccount;
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setTitle(R.string.actionbar_settings);
+ // For adding content description tag to a title field in the action bar
+ int actionBarTitleId = getResources().getIdentifier("action_bar_title", "id", "android");
+ getWindow().getDecorView().findViewById(actionBarTitleId).setContentDescription(getString(R.string.actionbar_settings));
+
// Load the accounts category for adding the list of accounts
mAccountsPrefCategory = (PreferenceCategory) findPreference("accounts_category");
import java.util.Stack;
import java.util.Vector;
-import com.owncloud.android.MainApp;
-import com.owncloud.android.R;
-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.lib.common.utils.Log_OC;
-
import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.AlertDialog;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.content.SharedPreferences;
+import android.content.res.Resources.NotFoundException;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.EditText;
+import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import com.actionbarsherlock.app.ActionBar;
-import com.actionbarsherlock.app.SherlockListActivity;
import com.actionbarsherlock.view.MenuItem;
+import com.owncloud.android.MainApp;
+import com.owncloud.android.R;
+import com.owncloud.android.authentication.AccountAuthenticator;
+import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.files.services.FileUploader;
+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.CreateFolderOperation;
+import com.owncloud.android.ui.dialog.CreateFolderDialogFragment;
import com.owncloud.android.utils.DisplayUtils;
+import com.owncloud.android.utils.ErrorMessageAdapter;
+
/**
* This can be used to upload things to an ownCloud instance.
*/
-public class Uploader extends SherlockListActivity implements OnItemClickListener, android.view.View.OnClickListener {
- private static final String TAG = "ownCloudUploader";
+public class Uploader extends FileActivity
+ implements OnItemClickListener, android.view.View.OnClickListener {
+
+ private static final String TAG = Uploader.class.getSimpleName();
- private Account mAccount;
private AccountManager mAccountManager;
private Stack<String> mParents;
private ArrayList<Parcelable> mStreamsToUpload;
private boolean mCreateDir;
private String mUploadPath;
- private FileDataStorageManager mStorageManager;
private OCFile mFile;
-
+ private boolean mAccountSelected;
+
private final static int DIALOG_NO_ACCOUNT = 0;
private final static int DIALOG_WAITING = 1;
private final static int DIALOG_NO_STREAM = 2;
private final static int REQUEST_CODE_SETUP_ACCOUNT = 0;
+ private final static String KEY_PARENTS = "PARENTS";
+ private final static String KEY_FILE = "FILE";
+ private final static String KEY_ACCOUNT_SELECTED = "ACCOUNT_SELECTED";
+
@Override
protected void onCreate(Bundle savedInstanceState) {
+ prepareStreamsToUpload();
+
+ if (savedInstanceState == null) {
+ mParents = new Stack<String>();
+ mAccountSelected = false;
+ } else {
+ mParents = (Stack<String>) savedInstanceState.getSerializable(KEY_PARENTS);
+ mFile = savedInstanceState.getParcelable(KEY_FILE);
+ mAccountSelected = savedInstanceState.getBoolean(KEY_ACCOUNT_SELECTED);
+ }
super.onCreate(savedInstanceState);
- mParents = new Stack<String>();
ActionBar actionBar = getSupportActionBar();
actionBar.setIcon(DisplayUtils.getSeasonalIconId());
- if (prepareStreamsToUpload()) {
+ }
+
+ @Override
+ protected void setAccount(Account account, boolean savedAccount) {
+ if (somethingToUpload()) {
mAccountManager = (AccountManager) getSystemService(Context.ACCOUNT_SERVICE);
Account[] accounts = mAccountManager.getAccountsByType(MainApp.getAccountType());
if (accounts.length == 0) {
Log_OC.i(TAG, "No ownCloud account is available");
showDialog(DIALOG_NO_ACCOUNT);
- } else if (accounts.length > 1) {
- Log_OC.i(TAG, "More then one ownCloud is available");
+ } else if (accounts.length > 1 && !mAccountSelected) {
+ Log_OC.i(TAG, "More than one ownCloud is available");
showDialog(DIALOG_MULTIPLE_ACCOUNT);
} else {
- mAccount = accounts[0];
- mStorageManager = new FileDataStorageManager(mAccount, getContentResolver());
- initTargetFolder();
- populateDirectoryList();
-
+ if (!savedAccount) {
+ setAccount(accounts[0]);
+ }
}
-
+
} else {
showDialog(DIALOG_NO_STREAM);
}
+
+ super.setAccount(account, savedAccount);
}
-
+
+ @Override
+ protected void onAccountSet(boolean stateWasRecovered) {
+ super.onAccountSet(mAccountWasRestored);
+ initTargetFolder();
+ populateDirectoryList();
+ }
+
+ @Override
+ protected void onSaveInstanceState(Bundle outState) {
+ Log_OC.d(TAG, "onSaveInstanceState() start");
+ super.onSaveInstanceState(outState);
+ outState.putSerializable(KEY_PARENTS, mParents);
+ //outState.putParcelable(KEY_ACCOUNT, mAccount);
+ outState.putParcelable(KEY_FILE, mFile);
+ outState.putBoolean(KEY_ACCOUNT_SELECTED, mAccountSelected);
+
+ Log_OC.d(TAG, "onSaveInstanceState() end");
+ }
+
@Override
protected Dialog onCreateDialog(final int id) {
final AlertDialog.Builder builder = new Builder(this);
case DIALOG_NO_ACCOUNT:
builder.setIcon(android.R.drawable.ic_dialog_alert);
builder.setTitle(R.string.uploader_wrn_no_account_title);
- builder.setMessage(String.format(getString(R.string.uploader_wrn_no_account_text), getString(R.string.app_name)));
+ builder.setMessage(String.format(
+ getString(R.string.uploader_wrn_no_account_text), getString(R.string.app_name)));
builder.setCancelable(false);
builder.setPositiveButton(R.string.uploader_wrn_no_account_setup_btn_text, new OnClickListener() {
@Override
});
return builder.create();
case DIALOG_MULTIPLE_ACCOUNT:
- CharSequence ac[] = new CharSequence[mAccountManager.getAccountsByType(MainApp.getAccountType()).length];
+ CharSequence ac[] = new CharSequence[
+ mAccountManager.getAccountsByType(MainApp.getAccountType()).length];
for (int i = 0; i < ac.length; ++i) {
- ac[i] = DisplayUtils.convertIdn(mAccountManager.getAccountsByType(MainApp.getAccountType())[i].name, false);
+ ac[i] = DisplayUtils.convertIdn(
+ mAccountManager.getAccountsByType(MainApp.getAccountType())[i].name, false);
}
builder.setTitle(R.string.common_choose_account);
builder.setItems(ac, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
- mAccount = mAccountManager.getAccountsByType(MainApp.getAccountType())[which];
- mStorageManager = new FileDataStorageManager(mAccount, getContentResolver());
- initTargetFolder();
- populateDirectoryList();
+ setAccount(mAccountManager.getAccountsByType(MainApp.getAccountType())[which]);
+ onAccountSet(mAccountWasRestored);
+ dialog.dismiss();
+ mAccountSelected = true;
}
});
builder.setCancelable(true);
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// click on folder in the list
Log_OC.d(TAG, "on item click");
- Vector<OCFile> tmpfiles = mStorageManager.getFolderContent(mFile);
+ Vector<OCFile> tmpfiles = getStorageManager().getFolderContent(mFile);
if (tmpfiles.size() <= 0) return;
// filter on dirtype
Vector<OCFile> files = new Vector<OCFile>();
// click on button
switch (v.getId()) {
case R.id.uploader_choose_folder:
- mUploadPath = ""; // first element in mParents is root dir, represented by ""; init mUploadPath with "/" results in a "//" prefix
+ mUploadPath = ""; // first element in mParents is root dir, represented by "";
+ // init mUploadPath with "/" results in a "//" prefix
for (String p : mParents)
mUploadPath += p + OCFile.PATH_SEPARATOR;
Log_OC.d(TAG, "Uploading file to dir " + mUploadPath);
uploadFiles();
break;
+
+ case R.id.uploader_new_folder:
+ CreateFolderDialogFragment dialog = CreateFolderDialogFragment.newInstance(mFile);
+ dialog.show(getSupportFragmentManager(), "createdirdialog");
+ break;
+
+
default:
throw new IllegalArgumentException("Wrong element clicked");
}
// there is no need for checking for is there more then one
// account at this point
// since account setup can set only one account at time
- mAccount = accounts[0];
+ setAccount(accounts[0]);
populateDirectoryList();
}
}
private void populateDirectoryList() {
setContentView(R.layout.uploader_layout);
+
+ ListView mListView = (ListView) findViewById(android.R.id.list);
String current_dir = mParents.peek();
if(current_dir.equals("")){
Log_OC.d(TAG, "Populating view with content of : " + full_path);
- mFile = mStorageManager.getFileByPath(full_path);
+ mFile = getStorageManager().getFileByPath(full_path);
if (mFile != null) {
- Vector<OCFile> files = mStorageManager.getFolderContent(mFile);
+ Vector<OCFile> files = getStorageManager().getFolderContent(mFile);
List<HashMap<String, Object>> data = new LinkedList<HashMap<String,Object>>();
for (OCFile f : files) {
HashMap<String, Object> h = new HashMap<String, Object>();
R.layout.uploader_list_item_layout,
new String[] {"dirname"},
new int[] {R.id.textView1});
- setListAdapter(sa);
- Button btn = (Button) findViewById(R.id.uploader_choose_folder);
- btn.setOnClickListener(this);
- getListView().setOnItemClickListener(this);
+
+ mListView.setAdapter(sa);
+ Button btnChooseFolder = (Button) findViewById(R.id.uploader_choose_folder);
+ btnChooseFolder.setOnClickListener(this);
+
+ Button btnNewFolder = (Button) findViewById(R.id.uploader_new_folder);
+ btnNewFolder.setOnClickListener(this);
+
+ mListView.setOnItemClickListener(this);
}
}
return full_path;
}
- private boolean prepareStreamsToUpload() {
+ private void prepareStreamsToUpload() {
if (getIntent().getAction().equals(Intent.ACTION_SEND)) {
mStreamsToUpload = new ArrayList<Parcelable>();
mStreamsToUpload.add(getIntent().getParcelableExtra(Intent.EXTRA_STREAM));
} else if (getIntent().getAction().equals(Intent.ACTION_SEND_MULTIPLE)) {
mStreamsToUpload = getIntent().getParcelableArrayListExtra(Intent.EXTRA_STREAM);
}
+ }
+
+ private boolean somethingToUpload() {
return (mStreamsToUpload != null && mStreamsToUpload.get(0) != null);
}
String mimeType = getContentResolver().getType(uri);
if (mimeType.contains("image")) {
- String[] CONTENT_PROJECTION = { Images.Media.DATA, Images.Media.DISPLAY_NAME, Images.Media.MIME_TYPE, Images.Media.SIZE};
- Cursor c = getContentResolver().query(uri, CONTENT_PROJECTION, null, null, null);
+ String[] CONTENT_PROJECTION = { Images.Media.DATA,
+ Images.Media.DISPLAY_NAME, Images.Media.MIME_TYPE,
+ Images.Media.SIZE};
+ Cursor c = getContentResolver().query(uri, CONTENT_PROJECTION, null,
+ null, null);
c.moveToFirst();
int index = c.getColumnIndex(Images.Media.DATA);
String data = c.getString(index);
local.add(data);
- remote.add(mUploadPath + c.getString(c.getColumnIndex(Images.Media.DISPLAY_NAME)));
+ remote.add(mUploadPath +
+ c.getString(c.getColumnIndex(Images.Media.DISPLAY_NAME)));
}
else if (mimeType.contains("video")) {
- String[] CONTENT_PROJECTION = { Video.Media.DATA, Video.Media.DISPLAY_NAME, Video.Media.MIME_TYPE, Video.Media.SIZE, Video.Media.DATE_MODIFIED };
- Cursor c = getContentResolver().query(uri, CONTENT_PROJECTION, null, null, null);
+ String[] CONTENT_PROJECTION = { Video.Media.DATA,
+ Video.Media.DISPLAY_NAME, Video.Media.MIME_TYPE,
+ Video.Media.SIZE, Video.Media.DATE_MODIFIED };
+ Cursor c = getContentResolver().query(uri, CONTENT_PROJECTION, null,
+ null, null);
c.moveToFirst();
int index = c.getColumnIndex(Video.Media.DATA);
String data = c.getString(index);
local.add(data);
- remote.add(mUploadPath + c.getString(c.getColumnIndex(Video.Media.DISPLAY_NAME)));
+ remote.add(mUploadPath +
+ c.getString(c.getColumnIndex(Video.Media.DISPLAY_NAME)));
}
else if (mimeType.contains("audio")) {
- String[] CONTENT_PROJECTION = { Audio.Media.DATA, Audio.Media.DISPLAY_NAME, Audio.Media.MIME_TYPE, Audio.Media.SIZE };
- Cursor c = getContentResolver().query(uri, CONTENT_PROJECTION, null, null, null);
+ String[] CONTENT_PROJECTION = { Audio.Media.DATA,
+ Audio.Media.DISPLAY_NAME, Audio.Media.MIME_TYPE,
+ Audio.Media.SIZE };
+ Cursor c = getContentResolver().query(uri, CONTENT_PROJECTION, null,
+ null, null);
c.moveToFirst();
int index = c.getColumnIndex(Audio.Media.DATA);
String data = c.getString(index);
local.add(data);
- remote.add(mUploadPath + c.getString(c.getColumnIndex(Audio.Media.DISPLAY_NAME)));
+ remote.add(mUploadPath +
+ c.getString(c.getColumnIndex(Audio.Media.DISPLAY_NAME)));
}
else {
- String filePath = Uri.decode(uri.toString()).replace(uri.getScheme() + "://", "");
- // cut everything whats before mnt. It occured to me that sometimes apps send their name into the URI
+ String filePath = Uri.decode(uri.toString()).replace(uri.getScheme() +
+ "://", "");
+ // cut everything whats before mnt. It occurred to me that sometimes
+ // apps send their name into the URI
if (filePath.contains("mnt")) {
String splitedFilePath[] = filePath.split("/mnt");
filePath = splitedFilePath[1];
}
} else if (uri.getScheme().equals("file")) {
- String filePath = Uri.decode(uri.toString()).replace(uri.getScheme() + "://", "");
+ String filePath = Uri.decode(uri.toString()).replace(uri.getScheme() +
+ "://", "");
if (filePath.contains("mnt")) {
String splitedFilePath[] = filePath.split("/mnt");
filePath = splitedFilePath[1];
Intent intent = new Intent(getApplicationContext(), FileUploader.class);
intent.putExtra(FileUploader.KEY_UPLOAD_TYPE, FileUploader.UPLOAD_MULTIPLE_FILES);
intent.putExtra(FileUploader.KEY_LOCAL_FILE, local.toArray(new String[local.size()]));
- intent.putExtra(FileUploader.KEY_REMOTE_FILE, remote.toArray(new String[remote.size()]));
- intent.putExtra(FileUploader.KEY_ACCOUNT, mAccount);
+ intent.putExtra(FileUploader.KEY_REMOTE_FILE,
+ remote.toArray(new String[remote.size()]));
+ intent.putExtra(FileUploader.KEY_ACCOUNT, getAccount());
startService(intent);
//Save the path to shared preferences
}
} catch (SecurityException e) {
- String message = String.format(getString(R.string.uploader_error_forbidden_content), getString(R.string.app_name));
+ String message = String.format(getString(R.string.uploader_error_forbidden_content),
+ getString(R.string.app_name));
Toast.makeText(this, message, Toast.LENGTH_LONG).show();
}
}
+ @Override
+ public void onRemoteOperationFinish(RemoteOperation operation, RemoteOperationResult result) {
+ super.onRemoteOperationFinish(operation, result);
+
+
+ if (operation instanceof CreateFolderOperation) {
+ onCreateFolderOperationFinish((CreateFolderOperation)operation, result);
+ }
+
+ }
+
+ /**
+ * Updates the view associated to the activity after the finish of an operation
+ * trying create a new folder
+ *
+ * @param operation Creation operation performed.
+ * @param result Result of the creation.
+ */
+ private void onCreateFolderOperationFinish(CreateFolderOperation operation,
+ RemoteOperationResult result) {
+ if (result.isSuccess()) {
+ dismissLoadingDialog();
+ populateDirectoryList();
+ } else {
+ dismissLoadingDialog();
+ try {
+ Toast msg = Toast.makeText(this,
+ ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()),
+ Toast.LENGTH_LONG);
+ msg.show();
+
+ } catch (NotFoundException e) {
+ Log_OC.e(TAG, "Error while trying to show fail message " , e);
+ }
+ }
+ }
+
+
/**
* Loads the target folder initialize shown to the user.
*
* The target account has to be chosen before this method is called.
*/
private void initTargetFolder() {
- if (mStorageManager == null) {
- throw new IllegalStateException("Do not call this method before initializing mStorageManager");
+ if (getStorageManager() == null) {
+ throw new IllegalStateException("Do not call this method before " +
+ "initializing mStorageManager");
}
SharedPreferences appPreferences = PreferenceManager
mParents.add(dir);
}
//Make sure that path still exists, if it doesn't pop the stack and try the previous path
- while(!mStorageManager.fileExists(generatePath(mParents)) && mParents.size() > 1){
+ while(!getStorageManager().fileExists(generatePath(mParents)) && mParents.size() > 1){
mParents.pop();
}
}
import android.content.Context;\r
import android.content.SharedPreferences;\r
import android.graphics.Bitmap;\r
+import android.os.Build;\r
import android.preference.PreferenceManager;\r
import android.text.format.DateUtils;\r
import android.view.LayoutInflater;\r
import android.view.ViewGroup;\r
import android.widget.AbsListView;\r
import android.widget.BaseAdapter;\r
-import android.widget.GridView;\r
import android.widget.ImageView;\r
+import android.widget.LinearLayout;\r
import android.widget.ListAdapter;\r
import android.widget.TextView;\r
\r
// Read sorting order, default to sort by name ascending\r
FileStorageUtils.mSortOrder = mAppPreferences.getInt("sortOrder", 0);\r
FileStorageUtils.mSortAscending = mAppPreferences.getBoolean("sortAscending", true);\r
-\r
\r
// initialise thumbnails cache on background thread\r
new ThumbnailsCacheManager.InitDiskCacheTask().execute();\r
if (file != null){\r
\r
ImageView fileIcon = (ImageView) view.findViewById(R.id.thumbnail);\r
+\r
fileIcon.setTag(file.getFileId());\r
TextView fileName;\r
- String name;\r
+ String name = file.getFileName();\r
+\r
+ LinearLayout linearLayout = (LinearLayout) view.findViewById(R.id.ListItemLayout);\r
+ linearLayout.setContentDescription("LinearLayout-" + name);\r
\r
switch (viewType){\r
case LIST_ITEM:\r
\r
if (!file.isFolder()) {\r
AbsListView parentList = (AbsListView)parent;\r
- if (parentList.getChoiceMode() == AbsListView.CHOICE_MODE_NONE) {\r
- checkBoxV.setVisibility(View.GONE);\r
- } else {\r
- if (parentList.isItemChecked(position)) {\r
- checkBoxV.setImageResource(android.R.drawable.checkbox_on_background);\r
+ if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {\r
+ if (parentList.getChoiceMode() == AbsListView.CHOICE_MODE_NONE) {\r
+ checkBoxV.setVisibility(View.GONE);\r
} else {\r
- checkBoxV.setImageResource(android.R.drawable.checkbox_off_background);\r
+ if (parentList.isItemChecked(position)) {\r
+ checkBoxV.setImageResource(\r
+ android.R.drawable.checkbox_on_background);\r
+ } else {\r
+ checkBoxV.setImageResource(\r
+ android.R.drawable.checkbox_off_background);\r
+ }\r
+ checkBoxV.setVisibility(View.VISIBLE);\r
}\r
- checkBoxV.setVisibility(View.VISIBLE);\r
}\r
\r
} else { //Folder\r
// local state\r
ImageView localStateView = (ImageView) view.findViewById(R.id.localFileIndicator);\r
localStateView.bringToFront();\r
- FileDownloaderBinder downloaderBinder = mTransferServiceGetter.getFileDownloaderBinder();\r
- FileUploaderBinder uploaderBinder = mTransferServiceGetter.getFileUploaderBinder();\r
- boolean downloading = (downloaderBinder != null && downloaderBinder.isDownloading(mAccount, file));\r
- OperationsServiceBinder opsBinder = mTransferServiceGetter.getOperationsServiceBinder();\r
- downloading |= (opsBinder != null && opsBinder.isSynchronizing(mAccount, file.getRemotePath()));\r
+ FileDownloaderBinder downloaderBinder =\r
+ mTransferServiceGetter.getFileDownloaderBinder();\r
+ FileUploaderBinder uploaderBinder =\r
+ mTransferServiceGetter.getFileUploaderBinder();\r
+ boolean downloading = (downloaderBinder != null &&\r
+ downloaderBinder.isDownloading(mAccount, file));\r
+ OperationsServiceBinder opsBinder =\r
+ mTransferServiceGetter.getOperationsServiceBinder();\r
+ downloading |= (opsBinder != null &&\r
+ opsBinder.isSynchronizing(mAccount, file.getRemotePath()));\r
if (downloading) {\r
localStateView.setImageResource(R.drawable.downloading_file_indicator);\r
localStateView.setVisibility(View.VISIBLE);\r
- } else if (uploaderBinder != null && uploaderBinder.isUploading(mAccount, file)) {\r
+ } else if (uploaderBinder != null &&\r
+ uploaderBinder.isUploading(mAccount, file)) {\r
localStateView.setImageResource(R.drawable.uploading_file_indicator);\r
localStateView.setVisibility(View.VISIBLE);\r
} else if (file.isDown()) {\r
\r
// share with me icon\r
if (!file.isFolder()) {\r
- ImageView sharedWithMeIconV = (ImageView) view.findViewById(R.id.sharedWithMeIcon);\r
+ ImageView sharedWithMeIconV = (ImageView)\r
+ view.findViewById(R.id.sharedWithMeIcon);\r
sharedWithMeIconV.bringToFront();\r
if (checkIfFileIsSharedWithMe(file)) {\r
sharedWithMeIconV.setVisibility(View.VISIBLE);\r
}\r
}\r
} else {\r
- fileIcon.setImageResource(DisplayUtils.getFileTypeIconId(file.getMimetype(), file.getFileName()));\r
+ fileIcon.setImageResource(DisplayUtils.getFileTypeIconId(file.getMimetype(),\r
+ file.getFileName()));\r
}\r
+\r
} else {\r
// Folder\r
if (checkIfFileIsSharedWithMe(file)) {\r
import com.owncloud.android.utils.BitmapUtils;
import com.owncloud.android.utils.DisplayUtils;
-import third_parties.in.srain.cube.GridViewWithHeaderAndFooter;
-
/**
* This Adapter populates a ListView with all files and directories contained
* in a local directory
import android.widget.RelativeLayout;
import com.actionbarsherlock.app.SherlockDialogFragment;
+import com.owncloud.android.MainApp;
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.lib.common.utils.Log_OC;
/**
* Public factory method to get dialog instances.
- *
- * @param handler
- * @param Url Url to open at WebView
- * @param targetURL mBaseUrl + AccountUtils.getWebdavPath(mDiscoveredVersion, mCurrentAuthTokenType)
+ *
+ * @param url Url to open at WebView
+ * @param targetUrl mBaseUrl + AccountUtils.getWebdavPath(mDiscoveredVersion, mCurrentAuthTokenType)
* @return New dialog instance, ready to show.
*/
public static SamlWebViewDialog newInstance(String url, String targetUrl) {
mWebViewClient = new SsoWebViewClient(activity, mHandler, mSsoWebViewClientListener);
} catch (ClassCastException e) {
- throw new ClassCastException(activity.toString() + " must implement " + SsoWebViewClientListener.class.getSimpleName());
+ throw new ClassCastException(activity.toString() + " must implement " +
+ SsoWebViewClientListener.class.getSimpleName());
}
}
@SuppressWarnings("deprecation")
@SuppressLint("SetJavaScriptEnabled")
@Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
Log_OC.v(TAG, "onCreateView, savedInsanceState is " + savedInstanceState);
// Inflate layout of the dialog
- RelativeLayout ssoRootView = (RelativeLayout) inflater.inflate(R.layout.sso_dialog, container, false); // null parent view because it will go in the dialog layout
+ RelativeLayout ssoRootView = (RelativeLayout) inflater.inflate(R.layout.sso_dialog,
+ container, false); // null parent view because it will go in the dialog layout
if (mSsoWebView == null) {
// initialize the WebView
webSettings.setBuiltInZoomControls(false);
webSettings.setLoadWithOverviewMode(false);
webSettings.setSavePassword(false);
- webSettings.setUserAgentString(OwnCloudClient.USER_AGENT);
+ webSettings.setUserAgentString(MainApp.getUserAgent());
webSettings.setSaveFormData(false);
CookieManager cookieManager = CookieManager.getInstance();
import java.util.ArrayList;
-import android.content.Context;
+import android.os.Build;
import android.os.Bundle;
import android.support.v4.widget.SwipeRefreshLayout;
import android.view.LayoutInflater;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import android.widget.ListAdapter;
+import android.widget.ListView;
import android.widget.TextView;
import com.actionbarsherlock.app.SherlockFragment;
private ListAdapter mAdapter;
-
protected void setListAdapter(ListAdapter listAdapter) {
mAdapter = listAdapter;
- mCurrentListView.setAdapter(listAdapter);
+ if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
+ mCurrentListView.setAdapter(listAdapter);
+ } else {
+ ((ListView)mCurrentListView).setAdapter(listAdapter);
+ }
+
mCurrentListView.invalidate();
}
*/
protected int getReferencePosition() {
if (mCurrentListView != null) {
- return (mCurrentListView.getFirstVisiblePosition() + mCurrentListView.getLastVisiblePosition()) / 2;
+ return (mCurrentListView.getFirstVisiblePosition() +
+ mCurrentListView.getLastVisiblePosition()) / 2;
} else {
return 0;
}
final int firstPosition = mFirstPositions.remove(mFirstPositions.size() -1);
int top = mTops.remove(mTops.size() - 1);
- Log_OC.v(TAG, "Setting selection to position: " + firstPosition + "; top: " + top + "; index: " + index);
+ Log_OC.v(TAG, "Setting selection to position: " + firstPosition + "; top: "
+ + top + "; index: " + index);
if (mCurrentListView == mListView) {
if (mHeightCell*index <= mListView.getHeight()) {
private void onCreateSwipeToRefresh(SwipeRefreshLayout refreshLayout) {
// Colors in animations: background
- refreshLayout.setColorScheme(R.color.background_color, R.color.background_color, R.color.background_color,
- R.color.background_color);
+ refreshLayout.setColorScheme(R.color.background_color, R.color.background_color,
+ R.color.background_color, R.color.background_color);
refreshLayout.setOnRefreshListener(this);
}
}
}
-
protected void setChoiceMode(int choiceMode) {
- mListView.setChoiceMode(choiceMode);
- mGridView.setChoiceMode(choiceMode);
+ if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
+ mListView.setChoiceMode(choiceMode);
+ mGridView.setChoiceMode(choiceMode);
+ } else {
+ ((ListView)mListView).setChoiceMode(choiceMode);
+ }
}
protected void registerForContextMenu() {
mListFooterView.invalidate();
} else {
- mGridView.removeFooterView(mGridFooterView);
- mListView.removeFooterView(mListFooterView);
+// mGridView.removeFooterView(mGridFooterView);
+// mListView.removeFooterView(mListFooterView);
}
}
try {
mContainerActivity = (ContainerActivity) activity;
} catch (ClassCastException e) {
- throw new ClassCastException(activity.toString() + " must implement " + LocalFileListFragment.ContainerActivity.class.getSimpleName());
+ throw new ClassCastException(activity.toString() + " must implement " +
+ LocalFileListFragment.ContainerActivity.class.getSimpleName());
}
}
}
/**
- * Checks the file clicked over. Browses inside if it is a directory. Notifies the container activity in any case.
+ * Checks the file clicked over. Browses inside if it is a directory.
+ * Notifies the container activity in any case.
*/
@Override
public void onItemClick(AdapterView<?> l, View v, int position, long id) {
} else { /// Click on a file
ImageView checkBoxV = (ImageView) v.findViewById(R.id.custom_checkbox);
if (checkBoxV != null) {
- if (getListView().isItemChecked(position)) {
+ if (((ListView)getListView()).isItemChecked(position)) {
checkBoxV.setImageResource(android.R.drawable.checkbox_on_background);
} else {
checkBoxV.setImageResource(android.R.drawable.checkbox_off_background);
if(mDirectory != null){
directory = mDirectory;
} else {
- directory = Environment.getExternalStorageDirectory(); // TODO be careful with the state of the storage; could not be available
+ directory = Environment.getExternalStorageDirectory();
+ // TODO be careful with the state of the storage; could not be available
if (directory == null) return; // no files to show
}
}
directory = directory.getParentFile();
}
- mCurrentListView.clearChoices(); // by now, only files in the same directory will be kept as selected
+ // by now, only files in the same directory will be kept as selected
+ ((ListView)mCurrentListView).clearChoices();
mAdapter.swapDirectory(directory);
if (mDirectory == null || !mDirectory.equals(directory)) {
mCurrentListView.setSelection(0);
*/
public String[] getCheckedFilePaths() {
ArrayList<String> result = new ArrayList<String>();
- SparseBooleanArray positions = mCurrentListView.getCheckedItemPositions();
+ SparseBooleanArray positions = ((ListView)mCurrentListView).getCheckedItemPositions();
if (positions.size() > 0) {
for (int i = 0; i < positions.size(); i++) {
if (positions.get(positions.keyAt(i)) == true) {
- result.add(((File) mCurrentListView.getItemAtPosition(positions.keyAt(i))).getAbsolutePath());
+ result.add(((File) mCurrentListView.getItemAtPosition(
+ positions.keyAt(i))).getAbsolutePath());
}
}
public void onDirectoryClick(File directory);
/**
- * Callback method invoked when a file (non directory) is clicked by the user on the files list
+ * Callback method invoked when a file (non directory)
+ * is clicked by the user on the files list
*
* @param file
*/
/**
- * Callback method invoked when the parent activity is fully created to get the directory to list firstly.
+ * Callback method invoked when the parent activity
+ * is fully created to get the directory to list firstly.
*
* @return Directory to list firstly. Can be NULL.
*/