From: masensio Date: Wed, 10 Jul 2013 07:24:16 +0000 (-0700) Subject: Merge pull request #215 from owncloud/branding_configurable_URL_input_field X-Git-Tag: oc-android-1.4.3~5 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/b4a85deafc489c666363d38cb92b84156c141a31?hp=fa57455a745d4042642253bd9ba0013d0e975029 Merge pull request #215 from owncloud/branding_configurable_URL_input_field Configurable url input field --- diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index 2a7030ca..819be00f 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -13,9 +13,11 @@ Ρυθμίσεις Ρύθμιση Λογαριασμού Δεν υπάρχουν λογαριασμοί ownCloud στη συσκευή σας. Για να χρησιμοποιήσετε την εφαρμογή, πρέπει να δημιουργήσετε ένα. + έκδοση %1$s Μεταφόρτωση Περιεχόμενο από άλλες εφαρμογές Αρχεία + Άνοιγμα με Δημιουργία καταλόγου Αναζήτηση Ρυθμίσεις @@ -36,6 +38,7 @@ Προστατέψτε την ownCloud εφαρμογή Ενεργοποιήστε την άμεση μεταφόρτωση Άμεση μεταφόρτωση των φωτογραφιών που τραβάει η φωτογρ. μηχανή + Διαγραφή Ιστορικού Διεύθυνση εξυπηρέτη Όνομα χρήστη Συνθηματικό @@ -67,6 +70,7 @@ Δημιουργήθηκε: Τροποποιήθηκε: Λήψη + Ανανέωση αρχείου Κατέβασμα ξανά Το αρχείο μετονομάστηκε σε %1$s κατά την μεταφόρτωση Ναι @@ -127,6 +131,7 @@ Εσφαλμένο PIN της εφαρμογής ownCloud Αφαιρέθηκε το PIN της εφαρμογής ownCloud Το PIN της εφαρμογής ownCloud αποθηκεύτηκε + Κουμπί αναπαραγωγής ή παύσης 15 Λεπτά 30 Λεπτά @@ -211,6 +216,11 @@ Υπογραφή: Αλγόριθμος: Αυτό είναι ένα σημείο κράτησης θέσης + placeholder.txt + Εικόνα PNG + 389 KB + 2012/05/18 12:23 PM + 12:23:45 Μεταφόρτωση εικόνων μόνο μέσω WiFi /InstantUpload Ενημέρωση σύγκρουσης @@ -220,4 +230,5 @@ Δεν μεταφορτώθηκε %1$s δεν μπορεσε να αντιγραφθεί στον %2$s τοπικο καταλόγο + επιλογή όλων diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml index 6186d02e..7a6d9c95 100644 --- a/res/values-et-rEE/strings.xml +++ b/res/values-et-rEE/strings.xml @@ -13,9 +13,13 @@ Seaded Konto seadistamine Sinu seadmes pole ühtegi ownCloudi kontot. Selle rakenduse kasutamiseks pead sa ühe looma. + %1$s Android App + versioon %1$s + Värskenda kontot Lae fail üles Sisu teistest rakendustest Failid + Ava rakendusega Loo kaust Otsi Seaded @@ -36,6 +40,11 @@ Kaitse oma ownCloudi klienti Luba kohene üleslaadimine Lae kaamera poolt tehtud fotod automaatselt üles + Luba logimine + Kasutatakse probleemide logimiseks + Logi ajalugu + See näitab salvestatud logisid + Kustuta ajaludu Serveri aadress Kasutajanimi Parool @@ -68,6 +77,7 @@ Loodud: Muudetud: Lae alla + Värskenda faili Lae uuesti alla Fail nimetati üleslaadimise käigus ümber %1$ Jah @@ -105,12 +115,14 @@ Kontaktid Sünkroniseerimine ebaõnnestus %1$s sünkroniseerimise lõpetamine ebaõnnestus + Vigased kasutajaandmed %1$s jaoks Leite konflikte %1$d sünkroniseeritavad faile ei suudeta sünkroniseerida Sünkroniseeritavad failid ebaõnnestusid Faili %1$d sisu ei suudeta sünkroniseerida (konflikt %2$d) Osad kohalikud faili ununesid %1$d faili %2$s kataloogist ei suudeta kopeerida + Alates versioonist 1.3.16 failid, mis on üles laetud kopeeritakse kohalikku kataloogi %1$s vältimaks andmete kadu, kui ühte faili sünkroniseeritakse mitmelt kontolt.\n\nSelle muudatusega seoses kõik failid, mis on üles laetud rakenduse vanemate versioonidega, kopeeriti kataloogi %2$s. Selle tegevuse peatas viga, mis tekkis konto sünkroniseerimise käigus. Sa saad jätta failid nagu nad on ning eemaldata viide %3$s või tõsta failid %1$s kataloogi ja säilitada viide %4$s.\n\nAllpool on loend kohalikest failidest ning serveris asuvatest failidest %5$s millele nad viitavad. Tõsta ümber Kõik failid tõsteti ümber Osasid faile ei saa ümber tõsta @@ -160,12 +172,14 @@ 30 60 + Proovitakse sisse logida... Võrguühendust pole Internetiühendust ei leitud, kontrolli oma interneti ühendust ja proovi uuesti. Ühenda sellegipoolest Turvaline ühendus pole saadaval Rakendus ei suutnud serveriga turvalist ühendust luua. Kuid saadaval on mitteturvaline ühendus. Sa võid jätkata või loobuda. Saadi ühendus + Ühenduse testimine... Vigases vormingus ownCloud seadistus Näib, et sinu ownCloud pole korralikult seadistatud. Lisainfo saamiseks võta ühendust oma administraatoriga. Tekkis tundmatu tõrge! @@ -181,8 +195,14 @@ Tundmatu ownCloud serveri versioon Ühenduse loomine ebaõnnestus Saavutati turvaline ühendus + Vigased kasutajaandmed + Autoriseerimine ebaõnnestus + Ligipääs keelatud autoriseeriva serveri poolt Sisestati vale asukoht Sisemine serveri viga, kood %1$d + Ootamatu seisund; palun sisesta serveri URL uuesti + Sinu autoriseering on aegunud.⏎\nPalun autoriseeri uuesti + Sinu salvestatud kasutajaandmed pole korrektsed.⏎\nPalun sisesta uued konto andmed. Rakdnus suleti ootamatult. Kas sa sooviksid saata kokkujooksmise kohta teavitust arendajale? Saada veateade Ära saada veateadet @@ -209,6 +229,11 @@ Oota hetk Ootamatu tõrge ; palun kasuta faili valimiseks mõnda teist rakendust Ühtegi faili pole valitud + oAuth2 URL + Logi sisse oAuth2 kasutades. + Ühendun oAuth2 serverisse... + Palun ava veebibrauser ning mine:⏎\n%1$s.⏎\nKontrolli seda koodi seal:\n%2$s + Ühendus sellel aadressile pole saadaval Hoiatus Saidi identiteeti ei suudetud kinnitada - Serveri sertifikaat pole usaldusväärne diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index 525e2b72..6c32f653 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -134,8 +134,15 @@ اتصال برقرار شد پیکربندی سرور ناقص است خطای ناشناخته رخ داده است! + میزبان را نمیتواند پیدا نماید. + میزبان وارد شده را نمیتواند پیدا کند. لطفا نام میزبان و در دسترس بودن سرور را بررسی و دوباره تلاش نمایید. نمونه ی سرور یافت نشد + زمان زیادی برای پاسخ سرور صورت گرفت. + آدرس ناقص + مقداردهی SSL ناموفق بود. + هویت تائید نشده سرویس SSL دهنده. نسخه ی سرور ناشناخته + نمیتوان ارتباط برقرار نمود. ایجاد ارتباط ایمن مسیر داده شده اشتباه است خطای سرور داخلی، کد %1$d @@ -164,6 +171,7 @@ هویت این سایت نمی تواند تایید شود - گواهی سرور نامعتبر است - گواهی سرور انقضا یافته + URL با آدرس هاست موجود در گواهی نامه مطابقت ندارد. آیا می خواهید در هر صورت به این مدرک اطمینان کنید؟ گواهی نمی تواند ذخیره شود جزییات diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index 99b9c78b..bca88972 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -6,6 +6,7 @@ पासवर्ड प्रयोक्ता का नाम पासवर्ड + त्रुटि साझा करें diff --git a/res/values-lb/strings.xml b/res/values-lb/strings.xml index 17a14e38..28c8decd 100644 --- a/res/values-lb/strings.xml +++ b/res/values-lb/strings.xml @@ -18,19 +18,24 @@ Astellungen Allgemeng Nei Sessioun bäisetzen + Thumbnails Biller erstellen Account auswielen + All 1 Minute updaten Accounten Benotzernumm Passwuert Dateien + Et ass kee Fichier ausgewielt ginn Benotzernumm Passwuert + Link Passwuert uweisen? Verbannen Eroplueden Keen Account fonnt Setup Erausgoen + Heichlueden Gréisst: Typ: Erstallt: @@ -44,6 +49,7 @@ Fehler Kontakter Deelen + Läschen Warnung diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml-rIN/strings.xml new file mode 100644 index 00000000..dc99dc44 --- /dev/null +++ b/res/values-ml-rIN/strings.xml @@ -0,0 +1,5 @@ + + + സംഗീതം + + diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index e713b7a5..eb80ff0b 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -51,6 +51,7 @@ Соединение с вашим ownCloud Соединить Загрузка + Выбрать место для загрузки: Аккаунты не найдены На вашем устройстве нет аккаунтов ownCloud. Настройте сначала аккаунт. Установка diff --git a/res/values-sk-rSK/strings.xml b/res/values-sk-rSK/strings.xml index 8ef94447..bf65d525 100644 --- a/res/values-sk-rSK/strings.xml +++ b/res/values-sk-rSK/strings.xml @@ -13,9 +13,12 @@ Nastavenia Nastavenie účtu Vo vašom zariadení nie sú žiadne účty. Vytvorte si účet ak chcete používať túto aplikáciu. + %1$s Android App + verzia %1$s Nahraj súbor Obsah z inej aplikácie Súbory + Otvoriť v Vytvor priečinok Hľadaj Nastavenia @@ -36,6 +39,7 @@ Chrániť klienta ownCloud Zapnúť okamžité odosielanie Okamžite odosielať fotky z fotoaparátu + Zmazať históriu Adresa servera Používateľské meno Heslo @@ -105,12 +109,14 @@ Kontakty Synchronizácia zlyhala Synchronizáciu %1$s nemožno dokončiť + Neplatné poverenia pre %1$s Objavené konflikty %1$d súborov z automatickej synchronizácie nemožno synchronizovať Automatická synchronizácia súborov zlyhala Obsah %1$d súborov nemohol byť synchronizovaný (%2$d konfliktov) Niektoré lokálne súbory boli zabudnuté %1$d súborov z priečinka %2$s nemožno skopírovať do + Od verzie 1.3.16 sú súbory nahrané z tohoto zariadenia, skopírovné do lokálneho priečinka %1$s, aby sa zabránilo strate dát, keď je jeden súbor synchronizovný s viacerými účtami.\n\nPre túto zmenu, všetky súbory nahraté v predchádzajúcich verziách tejto aplikácie boli skopírované do priečinka %2$s. Je nám to ľúto, chyba zabránila dokončeniu tejto operácie počas synchronizácie účtu. Súbor(y) môžete ponechať v súčasnom stave a zmazať odkaz na %3$s, alebo presunúť súbor(y) do priečinka %1$s a zachovať odkaz na %4$s.\n\nĎalej lokálny súbor(y) a vzdialený súbor(y) sú spojené v priečinku %5$s. Premiestniť všetko Všetky súbory boli premiestnené Niektoré súbory nebolo možné premiestniť @@ -134,6 +140,14 @@ %1$s (načítava) %1$s prehrávanie dokončené Nenájdený žiaden multimediálny súbor + Účet neposkytnutý + Súbor nie je v platnom účte + Nepodporovaný kodek + Mediálny súbor nemožno čítať + Mediálny súbor nemá správne kódovanie + Mediálny súbor nemožno streamovať + Mediálny súbor nemožno prehrať s východzím prehrávačom + Chyba zabezpečenia pri pokuse o prehranie %1$s 15 minút 30 minút @@ -144,12 +158,14 @@ 30 60 + Pokus o prihlásenie ... Bez sieťového pripojenia Skontrolujte pripojenie k sieti a opakujte pripojenie znovu. Aj tak pripojiť Nie je k dispozícii bezpečné pripojenie Aplikácia nemôže nadviazať zabezpečené spojenie so serverom. Nezabezpečené pripojenie je k dispozícii. Môžete pokračovať alebo prerušiť spojenie. Pripojenie vytvorené + Testovanie pripojenia ... Nesprávna konfigurácia ownCloud Nastavenie ownCloud nie je správne. Kontaktujte administrátora pre získanie viac informácií. Nastala neznáma chyba! @@ -165,6 +181,8 @@ Nerozpoznaná verzia servera Nie je možne vytvoriť spojenie Vytvorené zabezpečené spojenie + Neplatné poverenia + Neúspešná autorizácia Je zadaná neplatná cesta Interná chyba servera, kód %1$d Aplikácia neočakávane ukončila činnosť. Chcete poslať správu o chybe? @@ -193,6 +211,9 @@ Počkať chvíľu Neočakávaný problém; skúste vybrať súbor inou aplikáciou Nebol vybraný súbor + oAuth2 URL + Prihlásiť prostredníctvom oAuth2. + Pripájam sa na oAuth2 server… Upozornenie Identitu stránky nemožno overiť - Certifikát servera nie je overený @@ -217,6 +238,10 @@ Do: Podpis: Algoritmus: + PNG obrázok + 389 KB + 2012/05/18 12:23 PM + 12:23:45 Odoslať fotografie iba cez WiFi /InstantUpload Konflikt pri aktualizácii @@ -226,4 +251,7 @@ Nenahrávajte %1$s nemožno skopírovať do lokálneho priečinka %2$s + vybrať všetko + opakovať všetky vybrané + Chybová správa: diff --git a/src/com/owncloud/android/datamodel/DataStorageManager.java b/src/com/owncloud/android/datamodel/DataStorageManager.java index 31515a1a..133ab8de 100644 --- a/src/com/owncloud/android/datamodel/DataStorageManager.java +++ b/src/com/owncloud/android/datamodel/DataStorageManager.java @@ -46,4 +46,7 @@ public interface DataStorageManager { public void moveDirectory(OCFile dir, String newPath); public Vector getDirectoryImages(OCFile mParentFolder); + + public void calculateFolderSize(long id); + } diff --git a/src/com/owncloud/android/datamodel/FileDataStorageManager.java b/src/com/owncloud/android/datamodel/FileDataStorageManager.java index 1b0f083e..d84eb2a0 100644 --- a/src/com/owncloud/android/datamodel/FileDataStorageManager.java +++ b/src/com/owncloud/android/datamodel/FileDataStorageManager.java @@ -25,6 +25,7 @@ import java.util.Iterator; import java.util.List; import java.util.Vector; +import com.owncloud.android.DisplayUtils; import com.owncloud.android.Log_OC; import com.owncloud.android.db.ProviderMeta; import com.owncloud.android.db.ProviderMeta.ProviderTableMeta; @@ -46,9 +47,9 @@ public class FileDataStorageManager implements DataStorageManager { private ContentResolver mContentResolver; private ContentProviderClient mContentProvider; private Account mAccount; - + private static String TAG = "FileDataStorageManager"; - + public FileDataStorageManager(Account account, ContentResolver cr) { mContentProvider = null; mContentResolver = cr; @@ -75,7 +76,7 @@ public class FileDataStorageManager implements DataStorageManager { return file; } - + private OCFile createRootDir() { OCFile file = new OCFile(OCFile.PATH_SEPARATOR); file.setMimetype("DIR"); @@ -94,7 +95,7 @@ public class FileDataStorageManager implements DataStorageManager { c.close(); return file; } - + public OCFile getFileByLocalPath(String path) { Cursor c = getCursorForValue(ProviderTableMeta.FILE_STORAGE_PATH, path); OCFile file = null; @@ -136,13 +137,18 @@ public class FileDataStorageManager implements DataStorageManager { cv.put(ProviderTableMeta.FILE_KEEP_IN_SYNC, file.keepInSync() ? 1 : 0); boolean sameRemotePath = fileExists(file.getRemotePath()); + boolean changesSizeOfAncestors = false; if (sameRemotePath || - fileExists(file.getFileId()) ) { // for renamed files; no more delete and create - + fileExists(file.getFileId()) ) { // for renamed files; no more delete and create + + OCFile oldFile = null; if (sameRemotePath) { - OCFile oldFile = getFileByPath(file.getRemotePath()); + oldFile = getFileByPath(file.getRemotePath()); file.setFileId(oldFile.getFileId()); + } else { + oldFile = getFileById(file.getFileId()); } + changesSizeOfAncestors = (oldFile.getFileLength() != file.getFileLength()); overriden = true; if (getContentResolver() != null) { @@ -161,6 +167,7 @@ public class FileDataStorageManager implements DataStorageManager { } } } else { + changesSizeOfAncestors = true; Uri result_uri = null; if (getContentResolver() != null) { result_uri = getContentResolver().insert( @@ -179,20 +186,28 @@ public class FileDataStorageManager implements DataStorageManager { long new_id = Long.parseLong(result_uri.getPathSegments() .get(1)); file.setFileId(new_id); - } + } } - if (file.isDirectory() && file.needsUpdatingWhileSaving()) - for (OCFile f : getDirectoryContent(file)) - saveFile(f); - + if (file.isDirectory()) { + calculateFolderSize(file.getFileId()); + if (file.needsUpdatingWhileSaving()) { + for (OCFile f : getDirectoryContent(file)) + saveFile(f); + } + } + + if (changesSizeOfAncestors || file.isDirectory()) { + updateSizesToTheRoot(file.getParentId()); + } + return overriden; } @Override public void saveFiles(List files) { - + Iterator filesIt = files.iterator(); ArrayList operations = new ArrayList(files.size()); OCFile file = null; @@ -223,44 +238,44 @@ public class FileDataStorageManager implements DataStorageManager { operations.add(ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI). withValues(cv). withSelection( ProviderTableMeta._ID + "=?", - new String[] { String.valueOf(file.getFileId()) }) - .build()); - + new String[] { String.valueOf(file.getFileId()) }) + .build()); + } else if (fileExists(file.getFileId())) { - OCFile oldFile = getFileById(file.getFileId()); - if (file.getStoragePath() == null && oldFile.getStoragePath() != null) - file.setStoragePath(oldFile.getStoragePath()); - if (!file.isDirectory()); - cv.put(ProviderTableMeta.FILE_STORAGE_PATH, file.getStoragePath()); + OCFile oldFile = getFileById(file.getFileId()); + if (file.getStoragePath() == null && oldFile.getStoragePath() != null) + file.setStoragePath(oldFile.getStoragePath()); + if (!file.isDirectory()); + cv.put(ProviderTableMeta.FILE_STORAGE_PATH, file.getStoragePath()); + + operations.add(ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI). + withValues(cv). + withSelection( ProviderTableMeta._ID + "=?", + new String[] { String.valueOf(file.getFileId()) }) + .build()); - operations.add(ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI). - withValues(cv). - withSelection( ProviderTableMeta._ID + "=?", - new String[] { String.valueOf(file.getFileId()) }) - .build()); - } else { operations.add(ContentProviderOperation.newInsert(ProviderTableMeta.CONTENT_URI).withValues(cv).build()); } } - + // apply operations in batch ContentProviderResult[] results = null; try { if (getContentResolver() != null) { results = getContentResolver().applyBatch(ProviderMeta.AUTHORITY_FILES, operations); - + } else { results = getContentProvider().applyBatch(operations); } - + } catch (OperationApplicationException e) { Log_OC.e(TAG, "Fail to update/insert list of files to database " + e.getMessage()); - + } catch (RemoteException e) { Log_OC.e(TAG, "Fail to update/insert list of files to database " + e.getMessage()); } - + // update new id in file objects for insertions if (results != null) { long newId; @@ -279,7 +294,7 @@ public class FileDataStorageManager implements DataStorageManager { } } - + public void setAccount(Account account) { mAccount = account; } @@ -303,46 +318,56 @@ public class FileDataStorageManager implements DataStorageManager { public ContentProviderClient getContentProvider() { return mContentProvider; } - + @Override public Vector getDirectoryContent(OCFile f) { - Vector ret = new Vector(); if (f != null && f.isDirectory() && f.getFileId() != -1) { + return getDirectoryContent(f.getFileId()); - Uri req_uri = Uri.withAppendedPath( - ProviderTableMeta.CONTENT_URI_DIR, - String.valueOf(f.getFileId())); - Cursor c = null; + } else { + return new Vector(); + } + } - if (getContentProvider() != null) { - try { - c = getContentProvider().query(req_uri, null, - ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?", - new String[] { mAccount.name }, null); - } catch (RemoteException e) { - Log_OC.e(TAG, e.getMessage()); - return ret; - } - } else { - c = getContentResolver().query(req_uri, null, - ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?", - new String[] { mAccount.name }, null); - } + private Vector getDirectoryContent(long parentId) { - if (c.moveToFirst()) { - do { - OCFile child = createFileInstance(c); - ret.add(child); - } while (c.moveToNext()); + Vector ret = new Vector(); + + Uri req_uri = Uri.withAppendedPath( + ProviderTableMeta.CONTENT_URI_DIR, + String.valueOf(parentId)); + Cursor c = null; + + if (getContentProvider() != null) { + try { + c = getContentProvider().query(req_uri, null, + ProviderTableMeta.FILE_PARENT + "=?" , + new String[] { String.valueOf(parentId)}, null); + } catch (RemoteException e) { + Log_OC.e(TAG, e.getMessage()); + return ret; } + } else { + c = getContentResolver().query(req_uri, null, + ProviderTableMeta.FILE_PARENT + "=?" , + new String[] { String.valueOf(parentId)}, null); + } - c.close(); - - Collections.sort(ret); - + if (c.moveToFirst()) { + do { + OCFile child = createFileInstance(c); + ret.add(child); + } while (c.moveToNext()); } + + c.close(); + + Collections.sort(ret); + return ret; } + + private boolean fileExists(String cmp_key, String value) { Cursor c; @@ -353,7 +378,7 @@ public class FileDataStorageManager implements DataStorageManager { cmp_key + "=? AND " + ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?", - new String[] { value, mAccount.name }, null); + new String[] { value, mAccount.name }, null); } else { try { c = getContentProvider().query( @@ -361,7 +386,7 @@ public class FileDataStorageManager implements DataStorageManager { null, cmp_key + "=? AND " + ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?", - new String[] { value, mAccount.name }, null); + new String[] { value, mAccount.name }, null); } catch (RemoteException e) { Log_OC.e(TAG, "Couldn't determine file existance, assuming non existance: " @@ -383,14 +408,14 @@ public class FileDataStorageManager implements DataStorageManager { key + "=? AND " + ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?", - new String[] { value, mAccount.name }, null); + new String[] { value, mAccount.name }, null); } else { try { c = getContentProvider().query( ProviderTableMeta.CONTENT_URI, null, key + "=? AND " + ProviderTableMeta.FILE_ACCOUNT_OWNER - + "=?", new String[] { value, mAccount.name }, + + "=?", new String[] { value, mAccount.name }, null); } catch (RemoteException e) { Log_OC.e(TAG, "Could not get file details: " + e.getMessage()); @@ -435,26 +460,26 @@ public class FileDataStorageManager implements DataStorageManager { file.setLastSyncDateForData(c.getLong(c. getColumnIndex(ProviderTableMeta.FILE_LAST_SYNC_DATE_FOR_DATA))); file.setKeepInSync(c.getInt( - c.getColumnIndex(ProviderTableMeta.FILE_KEEP_IN_SYNC)) == 1 ? true : false); + c.getColumnIndex(ProviderTableMeta.FILE_KEEP_IN_SYNC)) == 1 ? true : false); } return file; } - + @Override public void removeFile(OCFile file, boolean removeLocalCopy) { Uri file_uri = Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_FILE, ""+file.getFileId()); if (getContentProvider() != null) { try { getContentProvider().delete(file_uri, - ProviderTableMeta.FILE_ACCOUNT_OWNER+"=?", - new String[]{mAccount.name}); + ProviderTableMeta.FILE_ACCOUNT_OWNER+"=?", + new String[]{mAccount.name}); } catch (RemoteException e) { e.printStackTrace(); } } else { getContentResolver().delete(file_uri, - ProviderTableMeta.FILE_ACCOUNT_OWNER+"=?", - new String[]{mAccount.name}); + ProviderTableMeta.FILE_ACCOUNT_OWNER+"=?", + new String[]{mAccount.name}); } if (file.isDown() && removeLocalCopy) { new File(file.getStoragePath()).delete(); @@ -465,6 +490,10 @@ public class FileDataStorageManager implements DataStorageManager { f.delete(); } } + + if (file.getFileLength() > 0) { + updateSizesToTheRoot(file.getParentId()); + } } @Override @@ -492,10 +521,14 @@ public class FileDataStorageManager implements DataStorageManager { if (removeDBData) { removeFile(dir, true); } + + if (dir.getFileLength() > 0) { + updateSizesToTheRoot(dir.getParentId()); + } } } - - + + /** * Updates database for a folder that was moved to a different location. * @@ -505,24 +538,24 @@ public class FileDataStorageManager implements DataStorageManager { @Override public void moveDirectory(OCFile dir, String newPath) { // TODO check newPath - + if (dir != null && dir.isDirectory() && dir.fileExists() && !dir.getFileName().equals(OCFile.PATH_SEPARATOR)) { /// 1. get all the descendants of 'dir' in a single QUERY (including 'dir') Cursor c = null; if (getContentProvider() != null) { try { c = getContentProvider().query(ProviderTableMeta.CONTENT_URI, - null, - ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " + ProviderTableMeta.FILE_PATH + " LIKE ?", - new String[] { mAccount.name, dir.getRemotePath() + "%" }, null); + null, + ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " + ProviderTableMeta.FILE_PATH + " LIKE ?", + new String[] { mAccount.name, dir.getRemotePath() + "%" }, null); } catch (RemoteException e) { Log_OC.e(TAG, e.getMessage()); } } else { c = getContentResolver().query(ProviderTableMeta.CONTENT_URI, - null, - ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " + ProviderTableMeta.FILE_PATH + " LIKE ?", - new String[] { mAccount.name, dir.getRemotePath() + "%" }, null); + null, + ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " + ProviderTableMeta.FILE_PATH + " LIKE ?", + new String[] { mAccount.name, dir.getRemotePath() + "%" }, null); } /// 2. prepare a batch of update operations to change all the descendants @@ -539,30 +572,30 @@ public class FileDataStorageManager implements DataStorageManager { cv.put(ProviderTableMeta.FILE_STORAGE_PATH, defaultSavePath + newPath + child.getStoragePath().substring(lengthOfOldStoragePath)); } operations.add(ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI). - withValues(cv). - withSelection( ProviderTableMeta._ID + "=?", - new String[] { String.valueOf(child.getFileId()) }) - .build()); + withValues(cv). + withSelection( ProviderTableMeta._ID + "=?", + new String[] { String.valueOf(child.getFileId()) }) + .build()); } while (c.moveToNext()); } c.close(); - + /// 3. apply updates in batch try { if (getContentResolver() != null) { getContentResolver().applyBatch(ProviderMeta.AUTHORITY_FILES, operations); - + } else { getContentProvider().applyBatch(operations); } - + } catch (OperationApplicationException e) { Log_OC.e(TAG, "Fail to update descendants of " + dir.getFileId() + " in database", e); - + } catch (RemoteException e) { Log_OC.e(TAG, "Fail to update desendants of " + dir.getFileId() + " in database", e); } - + } } @@ -583,4 +616,65 @@ public class FileDataStorageManager implements DataStorageManager { return ret; } + /** + * Calculate and save the folderSize on DB + * @param id + */ + @Override + public void calculateFolderSize(long id) { + long folderSize = 0; + + Vector files = getDirectoryContent(id); + + for (OCFile f: files) + { + folderSize = folderSize + f.getFileLength(); + } + + updateSize(id, folderSize); + } + + /** + * Update the size value of an OCFile in DB + */ + private int updateSize(long id, long size) { + ContentValues cv = new ContentValues(); + cv.put(ProviderTableMeta.FILE_CONTENT_LENGTH, size); + int result = -1; + if (getContentResolver() != null) { + result = getContentResolver().update(ProviderTableMeta.CONTENT_URI, cv, ProviderTableMeta._ID + "=?", + new String[] { String.valueOf(id) }); + } else { + try { + result = getContentProvider().update(ProviderTableMeta.CONTENT_URI, cv, ProviderTableMeta._ID + "=?", + new String[] { String.valueOf(id) }); + } catch (RemoteException e) { + Log_OC.e(TAG,"Fail to update size column into database " + e.getMessage()); + } + } + return result; + } + + /** + * Update the size of a subtree of folder from a file to the root + * @param parentId: parent of the file + */ + private void updateSizesToTheRoot(long parentId) { + + OCFile file; + + while (parentId != 0) { + + Log_OC.d(TAG, "parent = " + parentId); + // Update the size of the parent + calculateFolderSize(parentId); + + // search the next parent + file = getFileById(parentId); + parentId = file.getParentId(); + + } + + } + } diff --git a/src/com/owncloud/android/operations/CreateFolderOperation.java b/src/com/owncloud/android/operations/CreateFolderOperation.java index 5965db32..03c6868c 100644 --- a/src/com/owncloud/android/operations/CreateFolderOperation.java +++ b/src/com/owncloud/android/operations/CreateFolderOperation.java @@ -73,6 +73,7 @@ public class CreateFolderOperation extends RemoteOperation { OCFile newDir = new OCFile(mRemotePath); newDir.setMimetype("DIR"); newDir.setParentId(mParentDirId); + newDir.setModificationTimestamp(System.currentTimeMillis()); mStorageManager.saveFile(newDir); } diff --git a/src/com/owncloud/android/syncadapter/FileSyncAdapter.java b/src/com/owncloud/android/syncadapter/FileSyncAdapter.java index f0d7b161..44fe4014 100644 --- a/src/com/owncloud/android/syncadapter/FileSyncAdapter.java +++ b/src/com/owncloud/android/syncadapter/FileSyncAdapter.java @@ -37,6 +37,8 @@ import com.owncloud.android.operations.SynchronizeFolderOperation; import com.owncloud.android.operations.UpdateOCVersionOperation; import com.owncloud.android.operations.RemoteOperationResult.ResultCode; import com.owncloud.android.ui.activity.ErrorsWhileCopyingHandlerActivity; +import com.owncloud.android.utils.FileStorageUtils; + import android.accounts.Account; import android.accounts.AccountsException; import android.app.Notification; @@ -263,8 +265,12 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter { OCFile newFile = files.get(i); if (newFile.isDirectory()) { fetchData(newFile.getRemotePath(), newFile.getFileId()); + + // Update folder size on DB + getStorageManager().calculateFolderSize(newFile.getFileId()); } } + if (mCancellation && i mDirectories; /** Access point to the cached database for the current ownCloud {@link Account} */ private DataStorageManager mStorageManager = null; - + private SyncBroadcastReceiver mSyncBroadcastReceiver; private UploadFinishReceiver mUploadFinishReceiver; private DownloadFinishReceiver mDownloadFinishReceiver; @@ -109,23 +109,23 @@ public class FileDisplayActivity extends FileActivity implements private FileUploaderBinder mUploaderBinder = null; private ServiceConnection mDownloadConnection = null, mUploadConnection = null; private RemoteOperationResult mLastSslUntrustedServerResult = null; - + private boolean mDualPane; private View mLeftFragmentContainer; private View mRightFragmentContainer; - + private static final String KEY_WAITING_TO_PREVIEW = "WAITING_TO_PREVIEW"; - + public static final int DIALOG_SHORT_WAIT = 0; private static final int DIALOG_CHOOSE_UPLOAD_SOURCE = 1; private static final int DIALOG_SSL_VALIDATOR = 2; private static final int DIALOG_CERT_NOT_SAVED = 3; - + public static final String ACTION_DETAILS = "com.owncloud.android.ui.activity.action.DETAILS"; - + private static final int ACTION_SELECT_CONTENT_FROM_APPS = 1; private static final int ACTION_SELECT_MULTIPLE_FILES = 2; - + private static final String TAG = FileDisplayActivity.class.getSimpleName(); private static final String TAG_LIST_OF_FILES = "LIST_OF_FILES"; @@ -137,10 +137,10 @@ public class FileDisplayActivity extends FileActivity implements @Override protected void onCreate(Bundle savedInstanceState) { Log_OC.d(TAG, "onCreate() start"); - super.onCreate(savedInstanceState); - requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); - + + super.onCreate(savedInstanceState); // this calls onAccountChanged() when ownCloud Account is valid + mHandler = new Handler(); /// bindings to transference services @@ -158,7 +158,7 @@ public class FileDisplayActivity extends FileActivity implements Intent observer_intent = new Intent(this, FileObserverService.class); observer_intent.putExtra(FileObserverService.KEY_FILE_CMD, FileObserverService.CMD_INIT_OBSERVED_LIST); startService(observer_intent); - + /// Load of saved instance state if(savedInstanceState != null) { mWaitingToPreview = (OCFile) savedInstanceState.getParcelable(FileDisplayActivity.KEY_WAITING_TO_PREVIEW); @@ -166,9 +166,9 @@ public class FileDisplayActivity extends FileActivity implements } else { mWaitingToPreview = null; } - + /// USER INTERFACE - + // Inflate and set the layout view setContentView(R.layout.files); mDualPane = getResources().getBoolean(R.bool.large_land_layout); @@ -177,7 +177,7 @@ public class FileDisplayActivity extends FileActivity implements if (savedInstanceState == null) { createMinFragments(); } - + // Action bar setup mDirectories = new CustomArrayAdapter(this, R.layout.sherlock_spinner_dropdown_item); getSupportActionBar().setHomeButtonEnabled(true); // mandatory since Android ICS, according to the official documentation @@ -186,7 +186,7 @@ public class FileDisplayActivity extends FileActivity implements Log_OC.d(TAG, "onCreate() end"); } - + @Override protected void onDestroy() { super.onDestroy(); @@ -195,8 +195,8 @@ public class FileDisplayActivity extends FileActivity implements if (mUploadConnection != null) unbindService(mUploadConnection); } - - + + /** * Called when the ownCloud {@link Account} associated to the Activity was just updated. */ @@ -204,7 +204,7 @@ public class FileDisplayActivity extends FileActivity implements protected void onAccountSet(boolean stateWasRecovered) { if (getAccount() != null) { mStorageManager = new FileDataStorageManager(getAccount(), getContentResolver()); - + /// Check whether the 'main' OCFile handled by the Activity is contained in the current Account OCFile file = getFile(); if (file != null) { @@ -245,8 +245,8 @@ public class FileDisplayActivity extends FileActivity implements Log_OC.wtf(TAG, "onAccountChanged was called with NULL account associated!"); } } - - + + private void createMinFragments() { OCFileListFragment listOfFiles = new OCFileListFragment(); FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); @@ -275,7 +275,7 @@ public class FileDisplayActivity extends FileActivity implements } else { cleanSecondFragment(); } - + } else { Log.wtf(TAG, "initFragments() called with invalid NULLs!"); if (getAccount() == null) { @@ -296,7 +296,7 @@ public class FileDisplayActivity extends FileActivity implements int startPlaybackPosition = getIntent().getIntExtra(PreviewVideoActivity.EXTRA_START_POSITION, 0); boolean autoplay = getIntent().getBooleanExtra(PreviewVideoActivity.EXTRA_AUTOPLAY, true); secondFragment = new PreviewMediaFragment(file, getAccount(), startPlaybackPosition, autoplay); - + } else { secondFragment = new FileDetailFragment(file, getAccount()); } @@ -304,7 +304,7 @@ public class FileDisplayActivity extends FileActivity implements return secondFragment; } - + /** * Replaces the second fragment managed by the activity with the received as * a parameter. @@ -318,8 +318,8 @@ public class FileDisplayActivity extends FileActivity implements transaction.replace(R.id.right_fragment_container, fragment, TAG_SECOND_FRAGMENT); transaction.commit(); } - - + + private void updateFragmentsVisibility(boolean existsSecondFragment) { if (mDualPane) { if (mLeftFragmentContainer.getVisibility() != View.VISIBLE) { @@ -328,7 +328,7 @@ public class FileDisplayActivity extends FileActivity implements if (mRightFragmentContainer.getVisibility() != View.VISIBLE) { mRightFragmentContainer.setVisibility(View.VISIBLE); } - + } else if (existsSecondFragment) { if (mLeftFragmentContainer.getVisibility() != View.GONE) { mLeftFragmentContainer.setVisibility(View.GONE); @@ -336,7 +336,7 @@ public class FileDisplayActivity extends FileActivity implements if (mRightFragmentContainer.getVisibility() != View.VISIBLE) { mRightFragmentContainer.setVisibility(View.VISIBLE); } - + } else { if (mLeftFragmentContainer.getVisibility() != View.VISIBLE) { mLeftFragmentContainer.setVisibility(View.VISIBLE); @@ -347,7 +347,7 @@ public class FileDisplayActivity extends FileActivity implements } } - + private OCFileListFragment getListOfFilesFragment() { Fragment listOfFiles = getSupportFragmentManager().findFragmentByTag(FileDisplayActivity.TAG_LIST_OF_FILES); if (listOfFiles != null) { @@ -356,7 +356,7 @@ public class FileDisplayActivity extends FileActivity implements Log_OC.wtf(TAG, "Access to unexisting list of files fragment!!"); return null; } - + protected FileFragment getSecondFragment() { Fragment second = getSupportFragmentManager().findFragmentByTag(FileDisplayActivity.TAG_SECOND_FRAGMENT); if (second != null) { @@ -375,7 +375,7 @@ public class FileDisplayActivity extends FileActivity implements updateFragmentsVisibility(false); updateNavigationElementsInActionBar(null); } - + protected void refeshListOfFilesFragment() { OCFileListFragment fileListFragment = getListOfFilesFragment(); if (fileListFragment != null) { @@ -392,12 +392,12 @@ public class FileDisplayActivity extends FileActivity implements if (fileInFragment != null && !downloadedRemotePath.equals(fileInFragment.getRemotePath())) { // the user browsed to other file ; forget the automatic preview mWaitingToPreview = null; - + } else if (downloadEvent.equals(FileDownloader.DOWNLOAD_ADDED_MESSAGE)) { // grant that the right panel updates the progress bar detailsFragment.listenForTransferProgress(); detailsFragment.updateFileDetails(true, false); - + } else if (downloadEvent.equals(FileDownloader.DOWNLOAD_FINISH_MESSAGE)) { // update the right panel boolean detailsFragmentChanged = false; @@ -432,35 +432,35 @@ public class FileDisplayActivity extends FileActivity implements public boolean onOptionsItemSelected(MenuItem item) { boolean retval = true; switch (item.getItemId()) { - case R.id.action_create_dir: { - EditNameDialog dialog = EditNameDialog.newInstance(getString(R.string.uploader_info_dirname), "", -1, -1, this); - dialog.show(getSupportFragmentManager(), "createdirdialog"); - break; - } - case R.id.action_sync_account: { - startSynchronization(); - break; - } - case R.id.action_upload: { - showDialog(DIALOG_CHOOSE_UPLOAD_SOURCE); - break; - } - case R.id.action_settings: { - Intent settingsIntent = new Intent(this, Preferences.class); - startActivity(settingsIntent); - break; - } - case android.R.id.home: { - FileFragment second = getSecondFragment(); - OCFile currentDir = getCurrentDir(); - if((currentDir != null && currentDir.getParentId() != 0) || - (second != null && second.getFile() != null)) { - onBackPressed(); - } - break; + case R.id.action_create_dir: { + EditNameDialog dialog = EditNameDialog.newInstance(getString(R.string.uploader_info_dirname), "", -1, -1, this); + dialog.show(getSupportFragmentManager(), "createdirdialog"); + break; + } + case R.id.action_sync_account: { + startSynchronization(); + break; + } + case R.id.action_upload: { + showDialog(DIALOG_CHOOSE_UPLOAD_SOURCE); + break; + } + case R.id.action_settings: { + Intent settingsIntent = new Intent(this, Preferences.class); + startActivity(settingsIntent); + break; + } + case android.R.id.home: { + FileFragment second = getSecondFragment(); + OCFile currentDir = getCurrentDir(); + if((currentDir != null && currentDir.getParentId() != 0) || + (second != null && second.getFile() != null)) { + onBackPressed(); } - default: - retval = super.onOptionsItemSelected(item); + break; + } + default: + retval = super.onOptionsItemSelected(item); } return retval; } @@ -494,13 +494,13 @@ public class FileDisplayActivity extends FileActivity implements */ protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); - + if (requestCode == ACTION_SELECT_CONTENT_FROM_APPS && (resultCode == RESULT_OK || resultCode == UploadFilesActivity.RESULT_OK_AND_MOVE)) { requestSimpleUpload(data, resultCode); - + } else if (requestCode == ACTION_SELECT_MULTIPLE_FILES && (resultCode == RESULT_OK || resultCode == UploadFilesActivity.RESULT_OK_AND_MOVE)) { requestMultipleUpload(data, resultCode); - + } } @@ -526,7 +526,7 @@ public class FileDisplayActivity extends FileActivity implements if (resultCode == UploadFilesActivity.RESULT_OK_AND_MOVE) i.putExtra(FileUploader.KEY_LOCAL_BEHAVIOUR, FileUploader.LOCAL_BEHAVIOUR_MOVE); startService(i); - + } else { Log_OC.d(TAG, "User clicked on 'Update' with no selection"); Toast t = Toast.makeText(this, getString(R.string.filedisplay_no_file_selected), Toast.LENGTH_LONG); @@ -548,11 +548,11 @@ public class FileDisplayActivity extends FileActivity implements filepath = selectedImagePath; else filepath = filemanagerstring; - + } catch (Exception e) { Log_OC.e(TAG, "Unexpected exception when trying to read the result of Intent.ACTION_GET_CONTENT", e); e.printStackTrace(); - + } finally { if (filepath == null) { Log_OC.e(TAG, "Couldnt resolve path to file"); @@ -609,7 +609,6 @@ public class FileDisplayActivity extends FileActivity implements Log_OC.d(TAG, "onSaveInstanceState() end"); } - @Override protected void onResume() { super.onResume(); @@ -619,12 +618,12 @@ public class FileDisplayActivity extends FileActivity implements IntentFilter syncIntentFilter = new IntentFilter(FileSyncService.SYNC_MESSAGE); mSyncBroadcastReceiver = new SyncBroadcastReceiver(); registerReceiver(mSyncBroadcastReceiver, syncIntentFilter); - + // Listen for upload messages IntentFilter uploadIntentFilter = new IntentFilter(FileUploader.UPLOAD_FINISH_MESSAGE); mUploadFinishReceiver = new UploadFinishReceiver(); registerReceiver(mUploadFinishReceiver, uploadIntentFilter); - + // Listen for download messages IntentFilter downloadIntentFilter = new IntentFilter(FileDownloader.DOWNLOAD_ADDED_MESSAGE); downloadIntentFilter.addAction(FileDownloader.DOWNLOAD_FINISH_MESSAGE); @@ -634,7 +633,7 @@ public class FileDisplayActivity extends FileActivity implements Log_OC.d(TAG, "onResume() end"); } - + @Override protected void onPause() { super.onPause(); @@ -651,11 +650,11 @@ public class FileDisplayActivity extends FileActivity implements unregisterReceiver(mDownloadFinishReceiver); mDownloadFinishReceiver = null; } - + Log_OC.d(TAG, "onPause() end"); } - + @Override protected void onPrepareDialog(int id, Dialog dialog, Bundle args) { if (id == DIALOG_SSL_VALIDATOR && mLastSslUntrustedServerResult != null) { @@ -663,7 +662,7 @@ public class FileDisplayActivity extends FileActivity implements } } - + @Override protected Dialog onCreateDialog(int id) { Dialog dialog = null; @@ -679,34 +678,34 @@ public class FileDisplayActivity extends FileActivity implements break; } case DIALOG_CHOOSE_UPLOAD_SOURCE: { - + String[] items = null; - + String[] allTheItems = { getString(R.string.actionbar_upload_files), - getString(R.string.actionbar_upload_from_apps), - getString(R.string.actionbar_failed_instant_upload) }; - + getString(R.string.actionbar_upload_from_apps), + getString(R.string.actionbar_failed_instant_upload) }; + String[] commonItems = { getString(R.string.actionbar_upload_files), - getString(R.string.actionbar_upload_from_apps) }; - + getString(R.string.actionbar_upload_from_apps) }; + if (InstantUploadActivity.IS_ENABLED) items = allTheItems; else items = commonItems; - + builder = new AlertDialog.Builder(this); builder.setTitle(R.string.actionbar_upload); builder.setItems(items, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { if (item == 0) { // if (!mDualPane) { - Intent action = new Intent(FileDisplayActivity.this, UploadFilesActivity.class); - action.putExtra(UploadFilesActivity.EXTRA_ACCOUNT, FileDisplayActivity.this.getAccount()); - startActivityForResult(action, ACTION_SELECT_MULTIPLE_FILES); - // } else { - // TODO create and handle new fragment - // LocalFileListFragment - // } + Intent action = new Intent(FileDisplayActivity.this, UploadFilesActivity.class); + action.putExtra(UploadFilesActivity.EXTRA_ACCOUNT, FileDisplayActivity.this.getAccount()); + startActivityForResult(action, ACTION_SELECT_MULTIPLE_FILES); + // } else { + // TODO create and handle new fragment + // LocalFileListFragment + // } } else if (item == 1) { Intent action = new Intent(Intent.ACTION_GET_CONTENT); action = action.setType("*/*").addCategory(Intent.CATEGORY_OPENABLE); @@ -731,22 +730,22 @@ public class FileDisplayActivity extends FileActivity implements builder.setMessage(getResources().getString(R.string.ssl_validator_not_saved)); builder.setCancelable(false); builder.setPositiveButton(R.string.common_ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - }; - }); + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + }; + }); dialog = builder.create(); break; } default: dialog = null; } - + return dialog; } - + /** * Translates a content URI of an image to a physical path * on the disk @@ -764,7 +763,7 @@ public class FileDisplayActivity extends FileActivity implements } return null; } - + /** * Pushes a directory to the drop down list * @param directory to push @@ -789,29 +788,29 @@ public class FileDisplayActivity extends FileActivity implements // Custom array adapter to override text colors private class CustomArrayAdapter extends ArrayAdapter { - + public CustomArrayAdapter(FileDisplayActivity ctx, int view) { super(ctx, view); } - + public View getView(int position, View convertView, ViewGroup parent) { View v = super.getView(position, convertView, parent); - + ((TextView) v).setTextColor(getResources().getColorStateList( android.R.color.white)); return v; } - + public View getDropDownView(int position, View convertView, ViewGroup parent) { View v = super.getDropDownView(position, convertView, parent); - + ((TextView) v).setTextColor(getResources().getColorStateList( android.R.color.white)); - + return v; } - + } private class SyncBroadcastReceiver extends BroadcastReceiver { @@ -827,14 +826,14 @@ public class FileDisplayActivity extends FileActivity implements Log_OC.d(TAG, "sync of account " + accountName + " is in_progress: " + inProgress); if (getAccount() != null && accountName.equals(getAccount().name)) { - + String synchFolderRemotePath = intent.getStringExtra(FileSyncService.SYNC_FOLDER_REMOTE_PATH); - + boolean fillBlankRoot = false; OCFile currentDir = getCurrentDir(); if (currentDir == null) { currentDir = mStorageManager.getFileByPath(OCFile.PATH_SEPARATOR); - fillBlankRoot = (currentDir != null); + fillBlankRoot = (currentDir != null); } if ((synchFolderRemotePath != null && currentDir != null && (currentDir.getRemotePath().equals(synchFolderRemotePath))) @@ -851,9 +850,9 @@ public class FileDisplayActivity extends FileActivity implements setSupportProgressBarIndeterminateVisibility(inProgress); removeStickyBroadcast(intent); - + } - + RemoteOperationResult synchResult = (RemoteOperationResult)intent.getSerializableExtra(FileSyncService.SYNC_RESULT); if (synchResult != null) { if (synchResult.getCode().equals(RemoteOperationResult.ResultCode.SSL_RECOVERABLE_PEER_UNVERIFIED)) { @@ -863,7 +862,7 @@ public class FileDisplayActivity extends FileActivity implements } } } - + private class UploadFinishReceiver extends BroadcastReceiver { /** @@ -882,10 +881,10 @@ public class FileDisplayActivity extends FileActivity implements refeshListOfFilesFragment(); } } - + } - - + + /** * Class waiting for broadcast events from the {@link FielDownloader} service. * @@ -898,12 +897,12 @@ public class FileDisplayActivity extends FileActivity implements boolean sameAccount = isSameAccount(context, intent); String downloadedRemotePath = intent.getStringExtra(FileDownloader.EXTRA_REMOTE_PATH); boolean isDescendant = isDescendant(downloadedRemotePath); - + if (sameAccount && isDescendant) { refeshListOfFilesFragment(); refreshSecondFragment(intent.getAction(), downloadedRemotePath, intent.getBooleanExtra(FileDownloader.EXTRA_DOWNLOAD_RESULT, false)); } - + removeStickyBroadcast(intent); } @@ -917,8 +916,8 @@ public class FileDisplayActivity extends FileActivity implements return (accountName != null && getAccount() != null && accountName.equals(getAccount().name)); } } - - + + /** * {@inheritDoc} */ @@ -926,7 +925,7 @@ public class FileDisplayActivity extends FileActivity implements public DataStorageManager getStorageManager() { return mStorageManager; } - + /** * {@inheritDoc} @@ -938,7 +937,7 @@ public class FileDisplayActivity extends FileActivity implements pushDirname(directory); cleanSecondFragment(); } - + /** * Opens the image gallery showing the image {@link OCFile} received as parameter. * @@ -951,7 +950,7 @@ public class FileDisplayActivity extends FileActivity implements showDetailsIntent.putExtra(EXTRA_ACCOUNT, getAccount()); startActivity(showDetailsIntent); } - + /** * Stars the preview of an already down media {@link OCFile}. * @@ -967,7 +966,7 @@ public class FileDisplayActivity extends FileActivity implements updateNavigationElementsInActionBar(file); setFile(file); } - + /** * Requests the download of the received {@link OCFile} , updates the UI * to monitor the download progress and prepares the activity to preview @@ -986,7 +985,7 @@ public class FileDisplayActivity extends FileActivity implements setFile(file); } - + /** * Shows the information of the {@link OCFile} received as a * parameter in the second fragment. @@ -1001,8 +1000,8 @@ public class FileDisplayActivity extends FileActivity implements updateNavigationElementsInActionBar(file); setFile(file); } - - + + /** * TODO */ @@ -1015,7 +1014,7 @@ public class FileDisplayActivity extends FileActivity implements actionBar.setDisplayShowTitleEnabled(false); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); actionBar.setListNavigationCallbacks(mDirectories, this); // assuming mDirectories is updated - + } else { actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setDisplayShowTitleEnabled(true); @@ -1023,8 +1022,8 @@ public class FileDisplayActivity extends FileActivity implements actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); } } - - + + /** * {@inheritDoc} */ @@ -1034,7 +1033,7 @@ public class FileDisplayActivity extends FileActivity implements updateNavigationElementsInActionBar(getSecondFragment().getFile()); } - + /** * {@inheritDoc} */ @@ -1043,7 +1042,7 @@ public class FileDisplayActivity extends FileActivity implements return mDownloaderBinder; } - + /** * {@inheritDoc} */ @@ -1051,8 +1050,8 @@ public class FileDisplayActivity extends FileActivity implements public FileUploaderBinder getFileUploaderBinder() { return mUploaderBinder; } - - + + /** Defines callbacks for service binding, passed to bindService() */ private class ListServiceConnection implements ServiceConnection { @@ -1064,7 +1063,7 @@ public class FileDisplayActivity extends FileActivity implements if (mWaitingToPreview != null) { requestForDownload(); } - + } else if (component.equals(new ComponentName(FileDisplayActivity.this, FileUploader.class))) { Log_OC.d(TAG, "Upload service connected"); mUploaderBinder = (FileUploaderBinder) service; @@ -1096,8 +1095,8 @@ public class FileDisplayActivity extends FileActivity implements } }; - - + + /** * Launch an intent to request the PIN code to the user before letting him use the app */ @@ -1136,10 +1135,10 @@ public class FileDisplayActivity extends FileActivity implements public void onRemoteOperationFinish(RemoteOperation operation, RemoteOperationResult result) { if (operation instanceof RemoveFileOperation) { onRemoveFileOperationFinish((RemoveFileOperation)operation, result); - + } else if (operation instanceof RenameFileOperation) { onRenameFileOperationFinish((RenameFileOperation)operation, result); - + } else if (operation instanceof SynchronizeFileOperation) { onSynchronizeFileOperationFinish((SynchronizeFileOperation)operation, result); @@ -1170,7 +1169,7 @@ public class FileDisplayActivity extends FileActivity implements if (mStorageManager.getFileById(removedFile.getParentId()).equals(getCurrentDir())) { refeshListOfFilesFragment(); } - + } else { Toast msg = Toast.makeText(this, R.string.remove_fail_msg, Toast.LENGTH_LONG); msg.show(); @@ -1191,20 +1190,20 @@ public class FileDisplayActivity extends FileActivity implements if (result.isSuccess()) { dismissDialog(DIALOG_SHORT_WAIT); refeshListOfFilesFragment(); - + } else { dismissDialog(DIALOG_SHORT_WAIT); try { Toast msg = Toast.makeText(FileDisplayActivity.this, R.string.create_dir_fail_msg, Toast.LENGTH_LONG); msg.show(); - + } catch (NotFoundException e) { Log_OC.e(TAG, "Error while trying to show fail message " , e); } } } - - + + /** * Updates the view associated to the activity after the finish of an operation trying to rename a * file. @@ -1225,7 +1224,7 @@ public class FileDisplayActivity extends FileActivity implements if (mStorageManager.getFileById(renamedFile.getParentId()).equals(getCurrentDir())) { refeshListOfFilesFragment(); } - + } else { if (result.getCode().equals(ResultCode.INVALID_LOCAL_FILE_NAME)) { Toast msg = Toast.makeText(this, R.string.rename_local_fail_msg, Toast.LENGTH_LONG); @@ -1252,17 +1251,17 @@ public class FileDisplayActivity extends FileActivity implements i.putExtra(ConflictsResolveActivity.EXTRA_FILE, syncedFile); i.putExtra(ConflictsResolveActivity.EXTRA_ACCOUNT, getAccount()); startActivity(i); - + } else { Toast msg = Toast.makeText(this, R.string.sync_file_fail_msg, Toast.LENGTH_LONG); msg.show(); } - + } else { if (operation.transferWasRequested()) { refeshListOfFilesFragment(); onTransferStateChanged(syncedFile, true, true); - + } else { Toast msg = Toast.makeText(this, R.string.sync_file_nothing_to_do_msg, Toast.LENGTH_LONG); msg.show(); @@ -1295,22 +1294,22 @@ public class FileDisplayActivity extends FileActivity implements Log_OC.d(TAG, "'create directory' dialog dismissed with new name " + newDirectoryName); if (newDirectoryName.length() > 0) { String path = getCurrentDir().getRemotePath(); - + // Create directory path += newDirectoryName + OCFile.PATH_SEPARATOR; RemoteOperation operation = new CreateFolderOperation(path, getCurrentDir().getFileId(), mStorageManager); operation.execute( getAccount(), - FileDisplayActivity.this, - FileDisplayActivity.this, - mHandler, - FileDisplayActivity.this); - + FileDisplayActivity.this, + FileDisplayActivity.this, + mHandler, + FileDisplayActivity.this); + showDialog(DIALOG_SHORT_WAIT); } } } - - + + private void requestForDownload() { Account account = getAccount(); if (!mDownloaderBinder.isDownloading(account, mWaitingToPreview)) { @@ -1320,8 +1319,8 @@ public class FileDisplayActivity extends FileActivity implements startService(i); } } - - + + private OCFile getCurrentDir() { OCFile file = getFile(); if (file != null) { diff --git a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java index 16c74d38..3e8eecd5 100644 --- a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java +++ b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java @@ -98,7 +98,6 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { return 0; } - @Override public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; @@ -163,20 +162,11 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { } else { - - getDirectorySizeNumber(file,true); - if (lastModifiedOfAllSubdirectories == null) - { - lastModV.setVisibility(View.GONE); - fileSizeV.setVisibility(View.GONE); - } - else - { - lastModV.setVisibility(View.VISIBLE); - lastModV.setText(DisplayUtils.unixTimeToHumanReadable(lastModifiedOfAllSubdirectories)); - fileSizeV.setVisibility(View.VISIBLE); - fileSizeV.setText(DisplayUtils.bytesToHumanReadable((totalSizeOfDirectoriesRecursive == null) ? 0 : totalSizeOfDirectoriesRecursive)); - } + + fileSizeV.setVisibility(View.VISIBLE); + fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength())); + lastModV.setVisibility(View.VISIBLE); + lastModV.setText(DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp())); checkBoxV.setVisibility(View.GONE); view.findViewById(R.id.imageView3).setVisibility(View.GONE); } @@ -184,40 +174,7 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { return view; } - - - /** - * - This method counts recursively all subdirectories and their files from the root directory. - * - It also shows a timestamp of the last modificated file inside the root directory - * - * @param OCFile : startDirectory - * @param boolean : counting starts from here ? - */ - private void getDirectorySizeNumber(OCFile directory,boolean startOfRecursive) { - if (startOfRecursive) { - totalSizeOfDirectoriesRecursive = null; - } - Vector files = mStorageManager.getDirectoryContent(directory); - for (OCFile file : files) { - if(!file.isDirectory()) { - if (totalSizeOfDirectoriesRecursive == null) { - totalSizeOfDirectoriesRecursive = file.getFileLength(); - lastModifiedOfAllSubdirectories = file.getModificationTimestamp(); - continue; - } - - totalSizeOfDirectoriesRecursive += file.getFileLength(); - if (lastModifiedOfAllSubdirectories < file.getModificationTimestamp()) { - lastModifiedOfAllSubdirectories = file.getModificationTimestamp(); - } - } - else { - this.getDirectorySizeNumber(file, false); - } - } - } - - + @Override public int getViewTypeCount() { return 1; diff --git a/src/com/owncloud/android/ui/fragment/OCFileListFragment.java b/src/com/owncloud/android/ui/fragment/OCFileListFragment.java index 5ae80c1b..c6744422 100644 --- a/src/com/owncloud/android/ui/fragment/OCFileListFragment.java +++ b/src/com/owncloud/android/ui/fragment/OCFileListFragment.java @@ -107,6 +107,7 @@ public class OCFileListFragment extends ExtendedListFragment implements EditName getListView().setOnCreateContextMenuListener(this); mHandler = new Handler(); + } /** @@ -117,7 +118,7 @@ public class OCFileListFragment extends ExtendedListFragment implements EditName super.onSaveInstanceState(outState); outState.putParcelable(EXTRA_FILE, mFile); } - + /** * Call this, when the user presses the up button @@ -370,6 +371,7 @@ public class OCFileListFragment extends ExtendedListFragment implements EditName mList.setSelectionFromTop(0, 0); } mFile = directory; + } } diff --git a/src/com/owncloud/android/utils/FileStorageUtils.java b/src/com/owncloud/android/utils/FileStorageUtils.java index dda7b5a5..29553c41 100644 --- a/src/com/owncloud/android/utils/FileStorageUtils.java +++ b/src/com/owncloud/android/utils/FileStorageUtils.java @@ -74,4 +74,5 @@ public class FileStorageUtils { String value = uploadPath + OCFile.PATH_SEPARATOR + (fileName == null ? "" : fileName); return value; } + } \ No newline at end of file