From: Magnus Sjoqvist Date: Tue, 11 Nov 2014 11:49:22 +0000 (+0100) Subject: merge X-Git-Tag: oc-android-1.7.0_signed~69^2~3 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/437d3315e00d072ff72e23800947abeec2a0fee2?hp=0ba228c064d38b59ee17412d82259804bb8dd96f merge --- diff --git a/owncloud-android-library b/owncloud-android-library index 99f8c869..d7097983 160000 --- a/owncloud-android-library +++ b/owncloud-android-library @@ -1 +1 @@ -Subproject commit 99f8c869702a3261d9868207968700277e208507 +Subproject commit d7097983594347167b5bde3fa5b2b4ad1d843392 diff --git a/res/layout/list_item.xml b/res/layout/list_item.xml index a4113de7..c6c7b92f 100644 --- a/res/layout/list_item.xml +++ b/res/layout/list_item.xml @@ -32,16 +32,16 @@ diff --git a/res/menu/file_select_all.xml b/res/menu/file_select_all.xml new file mode 100644 index 00000000..a8097aae --- /dev/null +++ b/res/menu/file_select_all.xml @@ -0,0 +1,11 @@ + + + + + + diff --git a/res/values-bg-rBG/strings.xml b/res/values-bg-rBG/strings.xml index 5497ee5a..bcd49aa3 100644 --- a/res/values-bg-rBG/strings.xml +++ b/res/values-bg-rBG/strings.xml @@ -38,6 +38,8 @@ Препоръчай на приятел Обратна Връзка Imprint + Запомни мястото за споделяне + Запомни мястото на последната споделена папка Опитай %1$s на смартфона си! Бих желал да те поканя да ползваш %1$s на своя смартфон!\nИзтеглия я от тук:%2$s Проверка на сървъра diff --git a/res/values-cs-rCZ/strings.xml b/res/values-cs-rCZ/strings.xml index a9db9c5b..25b2d560 100644 --- a/res/values-cs-rCZ/strings.xml +++ b/res/values-cs-rCZ/strings.xml @@ -38,6 +38,8 @@ Doporučit přátelům Odezva Imprint + Zapamatovat umístění sdílení + Zapamatovat poslední umístění pro nahrání sdílených souborů Zkuste %1$s na vašem smartphonu! Chtěl bych vás pozvat k používání %1$s na vašem chytrém telefonu!\nKe stažení zde: %2$s Zkontrolovat server diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index 9a275407..6f12a6ed 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -38,6 +38,8 @@ Anbefal til en ven Feedback Imprint + Husk delt placering + Husk seneste delte placering for overførsel Prøv %1$s på din smartphone! Jeg ønsker at invitere dig til at bruge %1$s på din smartphone!\nHent den her: %2$s Tjek server diff --git a/res/values-de-rDE/strings.xml b/res/values-de-rDE/strings.xml index 9f0ebcf9..e4fa850b 100644 --- a/res/values-de-rDE/strings.xml +++ b/res/values-de-rDE/strings.xml @@ -38,6 +38,8 @@ Dieses einem Freund empfehlen Rückmeldungen Impressum + Geteilten Speicherort merken + Geteilten Upload-Speicherort merken %1$s auf Ihrem Smartphone ausprobieren! Ich möchte Sie zum Benutzen von %1$s auf Ihrem Smartphone einladen!\nHier herunterladen: %2$s Server überprüfen diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 2bd365c1..c1212e4a 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -38,6 +38,8 @@ Empfehle dies einem Freund Rückmeldungen Impressum + Geteilten Speicherort merken + Geteilten Upload-Speicherort merken Probiere %1$s auf Deinem Smartphone! Ich möchte Dich zum Benutzen von %1$s auf Deinem Smartphone einladen!\nLade es hier herunter: %2$s Überprüfe den Server diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index 67b16e2a..0a1772b4 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -11,6 +11,10 @@ Ρυθμίσεις Λεπτομέρειες Αποστολή + + A-Z + Νεότερο - Παλαιότερο + Γενικά diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml index 4ef373d2..641fa869 100644 --- a/res/values-en-rGB/strings.xml +++ b/res/values-en-rGB/strings.xml @@ -38,6 +38,8 @@ Recommend to a friend Feedback Imprint + Remember share location + Remember last share upload location Try %1$s on your smartphone! I want to invite you to use %1$s on your smartphone!\nDownload here: %2$s Check Server diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index d78ff809..1e406464 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -38,6 +38,8 @@ Recomendar a un amigo Mensajes de retroalimentación pie de imprenta + Recordar la ubicación de los archivos compartidos + Recordar la ubicación de los últimos archivos compartidos subidos Prueba %1$s en tu smarthphone! ¡Quiero invitarle a usar %1$s en su smartphone!\nDescárguelo aquí: %2$s Compruebe el servidor. diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml index 2a23f187..07fde846 100644 --- a/res/values-et-rEE/strings.xml +++ b/res/values-et-rEE/strings.xml @@ -11,6 +11,12 @@ Seaded Üksikasjad Saada + Sorteeri + Sorteeri + + A-Z + Uuem - vanem + Üldine diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml index e3d598ec..78d39f1c 100644 --- a/res/values-eu/strings.xml +++ b/res/values-eu/strings.xml @@ -11,6 +11,11 @@ Ezarpenak Xehetasunak Bidali + Ordenatu + + A-Z + Berrienak - Zaharrenak + Orokorra @@ -238,6 +243,7 @@ Mesedez, baimendu berriz Irudi aurreikuspena Ezin da irudi hau erakutsi %1$s ezin da %2$s karpeta lokalera kopiatu + Igotzetarako Bidea Sentitzen dut, partekatzea ez dago zure zerbitzarian gaituta. Mesedez jarri harremanetan zure administratzailearekin. Errore bat egon da fitxategaia edo karpeta partekatzerakoan Errore bat egon da fitxategaia edo karpeta partekatzeari uzterakoan @@ -260,8 +266,12 @@ Mesedez, baimendu berriz Fitxategia jadanik ez dago eskuragarri zerbitzarian Kontuak Gehitu kontua + ownCloud Android programaren egunerokoak + Datuak kargatzen... Autentikazioa beharrezkoa Pasahitz okerra + Mugitu Aukeratu + Berehalako Igoerak Segurtasuna diff --git a/res/values-fi-rFI/strings.xml b/res/values-fi-rFI/strings.xml index 18e972fb..d6418540 100644 --- a/res/values-fi-rFI/strings.xml +++ b/res/values-fi-rFI/strings.xml @@ -37,6 +37,8 @@ Ohje Suosittele kaverille Palaute + Muista jaon sijainti + Muista viimeisin jaon lähetyssijainti Kokeile %1$sia älypuhelimellasi! Kutsun sinut käyttämään %1$sia älypuhelimellasi!\nLataa se tästä: %2$s Tarkista palvelin @@ -249,6 +251,7 @@ Tämä tiedosto ei ole enää palvelimella käytettävissä Tilit Lisää tili + Salattu yhteys on ohjattu uudelleen salaamatonta reittiä pitkin. Lokit Lähetä historia ownCloudin Android-sovelluksen lokit diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 90c54a90..d8e35122 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -38,6 +38,8 @@ Recommander à un ami Commentaires Empreinte + Mémoriser l\'emplacement de partage + Mémoriser le dernier emplacement d\'upload Essayez %1$s sur votre smartphone ! J\'aimerais vous inviter à utiliser %1$s sur votre smartphone ! Téléchargez-le ici : %2$s @@ -88,7 +90,7 @@ Téléchargez-le ici : %2$s Téléverser un fichier depuis… Nom du dossier Téléversement… - Envoi du fichier %2$s en cours, %1$d%% effectués + Envoi du fichier %2$s : %1$d%% effectués Téléversement réussi Le fichier %1$s a été envoyé avec succès Échec de l\'envoi @@ -123,7 +125,7 @@ Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxq Tous les fichiers ont été déplacés Certains fichiers n\'ont pu être déplacés Local: %1$s - Distant: %1$s + Distant : %1$s Il n\'y a pas assez de place disponible pour copier les fichiers sélectionnés dans le dossier %1$s. Voulez-vous quand même les déplacer ? Veuillez saisir votre code de sécurité Veuillez saisir votre code de sécurité @@ -205,7 +207,7 @@ Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxq Caractères interdits : / \\ < > : \" | ? * Le nom du fichier ne peut pas être vide Veuillez patienter - Problème inattendu ; veuillez essayer une autre app pour la sélection du fichier + Problème inattendu. Veuillez essayer une autre app pour la sélection du fichier Aucun fichier sélectionné Envoyer un lien à… Connexion avec aAuth2. diff --git a/res/values-id/strings.xml b/res/values-id/strings.xml index 1ed5c03a..4938557d 100644 --- a/res/values-id/strings.xml +++ b/res/values-id/strings.xml @@ -38,8 +38,10 @@ Rekomendasikan ke teman Umpan balik Jejak + Ingat lokasi berbagi + Ingat lokasi unggahan berbagi terakhir Cobalah %1$s pada ponsel cerdas Anda! - Saya ingin mengajak Anda untuk menggunakan %1$s di ponsel cerdas Anda!\nUnduh gratis disini: %2$s + Saya mengajak Anda untuk menggunakan %1$s di ponsel cerdas Anda!\nUnduh gratis disini: %2$s Periksa Server Alamat server https://… Nama Pengguna @@ -112,7 +114,7 @@ Konten berkas %1$d tidak dapat disinkronasikan (%2$d konflik) Beberapa berkas lokal terlupakan %1$d berkas diluar folder %2$s tidak dapat disalin kedalamnya - Sejak versi 1.3.16, berkas-berkas yang diunggah dari piranti ini akan disalin kedalam folder %1$s lokal untuk mencagah kehilangan data ketika berkas tunggal disinkronkan dengan akun lebih dari satu.\n\nAkibat perubahan ini, semua berkas yang diunggah di versi aplikasi sebelumnya disalin kedalam folder %2$s. Namun, sebuah kesalahan mencegah penyelesaian operasi ini saat sinkronisasi berlangsung akun. Anda boleh meninggalkan berkas seperti ini dan menghapus tautan ke %3$s atau memindahkan berkas kedalam folder %1$s dan membiarkan tautan ke %4$s.\n\nYang tampak dibawah adalah berkas lokal, dan berkas remote didalam %5$s yang dihubungkan dengannya. + Sejak versi 1.3.16, berkas-berkas yang diunggah dari piranti ini akan disalin kedalam folder %1$s lokal untuk mencagah kehilangan data saat berkas tunggal disinkronkan dengan akun lebih dari satu.\n\nAkibat perubahan ini, semua berkas yang diunggah di versi aplikasi sebelumnya disalin kedalam folder %2$s. Namun, sebuah kesalahan mencegah penyelesaian operasi ini saat sinkronisasi akun. Anda boleh meninggalkan berkas seperti ini dan menghapus tautan ke %3$s atau memindahkan berkas kedalam folder %1$s dan membiarkan tautan ke %4$s.\n\nYang tampak dibawah adalah berkas lokal, dan berkas remote didalam %5$s yang dihubungkan dengannya. Folder %1$s tidak ada lagi Pindahkan semua Semua berkas sudah dipindahkan @@ -228,7 +230,7 @@ Tanda tangan: Algoritma: Sertifikat tidak dapat ditampilkan. - - Tidak ada informasi tantang terror + - Tidak ada informasi tantang error Ini adalah placeholder placeholder.txt Gambar PNG diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 4a1c5bda..2ff50d75 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -38,6 +38,8 @@ Consiglia ad un amico Segnalazioni Imprint + Ricorda la posizione della condivisione + Ricorda l\'ultima posizione di caricamento della condivisione Prova %1$s sul tuo smartphone! Vorrei invitarti a usare %1$s sul tuo smartphone!\nScarica qui: %2$s Verifica server diff --git a/res/values-ja-rJP/strings.xml b/res/values-ja-rJP/strings.xml index 67c1e6e2..e3680ad9 100644 --- a/res/values-ja-rJP/strings.xml +++ b/res/values-ja-rJP/strings.xml @@ -13,6 +13,10 @@ 送信 ソート ソート: + + A-Z + 最新 - 最古 + 一般 @@ -34,6 +38,8 @@ 友達に推薦 フィードバック インプリント + 共有場所を記憶する + 最後に共有アップロードした場所を記憶する スマートフォンで %1$s を試してください! スマートフォンで %1$s を利用してみませんか! ここからダウンロードしてください: %2$s @@ -243,6 +249,7 @@ イメージプレビュー この画像は表示できません %1$s は、ローカルフォルダー %2$s にコピーできませんでした。 + アップロードパス 申し訳ございません。共有がサーバー上で有効になっていません。 管理者に ご連絡ください。 共有できません。ファイルがあるか確認してください。 @@ -268,6 +275,7 @@ ファイルはサーバー上で利用できません アカウント アカウントを追加 + 暗号化接続は非暗号化接続にリダイレクトされました。 ログ ログを送信 ownCloud Android アプリログ @@ -282,5 +290,6 @@ そのファイルは、宛先フォルダに既に存在しています。 このファイルまたはフォルダーを移動する際にエラーが発生しました このファイルを移動 + 自動アップロード セキュリティ diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index ee3f87db..0ef113a9 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -38,6 +38,8 @@ Aanbevelen bij een vriend Feedback afdruk + Onthoud de share locatie + Onthoud de laatste upload locatie Probeer %1$s op uw smartphone! Uitnodiging om %1$s op uw smartphone uit te proberen! Download hier: %2$s @@ -68,7 +70,7 @@ Download hier: %2$s Aangepast: Download Bestand verversen - Bestand was hernoemt naar %1$s tijdens het uploaden + Bestand is tijdens het uploaden hernoemd naar %1$s Deel link Link niet meer delen Ja @@ -117,7 +119,7 @@ Download hier: %2$s Door deze aanpassing werden alle bestanden die met een eerdere versie zijn ge-uploaded gekopieerd naar de %2$s map. Maar een fout voorkwam het succesvol afronden van deze actie tijdens het synchroniseren. U kunt de/het bestand(en) laten staan zoals ze nu zijn en de link naar %3$s verwijderen, of u kunt de bestanden verplaatsen naar de %1$s map en de link naar %4$s laten staan. Hieronder staan de lokale bestanden en de externe bestanden in %5$s waar ze naar verwezen. Map %1$s bestaat niet meer - Alle verplaatsen + Alles verplaatsen Alle bestanden zijn verplaatst Een paar bestanden konden niet worden verplaatst Lokaal: %1$s diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml index ea2e5971..1169dc45 100644 --- a/res/values-pt-rBR/strings.xml +++ b/res/values-pt-rBR/strings.xml @@ -38,6 +38,8 @@ Recomendar a um amigo Feedback Imprint + Lembre-se do local de compartilhamento + Lembrar do último local de envio de compartilhamento Tentar %1$s em seu smartfone! Gostaria de convida-lo a usar %1$s em seu smartphone!\nBaixe aqui: %2$s Verificar Servidor diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index 1012a167..41b09046 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -2,9 +2,9 @@ %1$s Aplicação(ões) Android versão %1$s - Actualizar + Atualizar conta Enviar - Conteúdo das outras apps + Conteúdo de outras apps Ficheiros Abrir com Nova Pasta @@ -22,22 +22,24 @@ Geral Mais Contas - Gerir contas - App PIN + Gerir Contas + PIN da App Proteja o seu cliente - Transferência instantânea de imagens - Transferência instantânea de imagens tiradas com câmara + Envios instantâneos de imagens + Envio instantâneo de imagens tiradas com a câmara Envios instantâneos dos vídeos - Carregamento instantâneo de vídeos registados com a camera - Ativar Rastreio - Isto é usado para registar problemas - Historico do rastreio + Envio instantâneo de vídeos gravados com a câmara + Ativar Registo de Eventos + Isto é utilizado para registar problemas + Histórico dos Registos Isto mostra os registos guardados - Eliminar Histórico + Apagar Histórico Ajuda Recomendar a um amigo - Resposta + Feedback Imprint + Lembrar localização de partilha + Lembrar da última localização de envio de partilha Experimente %1$s no seu smartphone! Quero convidar-te a usares %1$s no teu smartphone!\nFaz download aqui: %2$s Verificar Servidor @@ -58,42 +60,42 @@ O %1$s não está autorizado a aceder aos ficheiro partilhados. A enviar Vazio. Envie alguma coisa! - A carregar... + A carregar ... Não existem ficheiros nesta pasta. Clique no ficheiro para visualizar informação adicional. Tamanho: Tipo: Criado: Modificado: - Descarregar + Transferir Atualizar ficheiro O nome do ficheiro foi alterado para %1$s durante o envio. - Partilhar o link + Partilhar a hiperligação Deixar de partilhar a ligação Sim Não OK Cancelar a transferência - Cancelar envio + Cancelar o envio Cancelar Guardar & Sair Erro - A carregar... + A carregar ... Erro Desconhecido Sobre - Alterar palavra-chave + Alterar senha Apagar conta Criar conta - Carregar de... + Enviar de ... Nome da pasta - A carregar... + A enviar ... A enviar %1$d%% , %2$s completo. Carregado com sucesso %1$s foi carregado com sucesso Carregamento falhou O envio do ficheiro %1$s não foi concluído. Falha no carregamento, é necessário fazer novo login - A descarregar... + A transferir ... %1$d%% A decarregar %2$s Descarga com sucesso %1$s foi descarregado com sucesso @@ -105,7 +107,7 @@ Falhou a sincronização Falhou a sincronização, necessita fazer um novo login Não foi possível sincronizar %1$s - Password inválida para %1$s + Senha inválida para %1$s Foram encontrados conflitos Não foi possível sincronizar o ficheiro %1$d Falhou a operação de manter os ficheiros sincronizados diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index c043dff8..2b052012 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -11,6 +11,8 @@ Setări Detalii Expediază + Sortare + Sortare după General @@ -259,7 +261,13 @@ pentru a încărca în acest folder Fișierul nu mai este disponibil pe server Conturi + Adaugă cont + Se încarcă datele... + Autentificare necesară Parolă greșită + Mutare + Nu este nimic aici. Poți adăuga un director! Alege + pentru a muta acest fișier Securitate diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 326f51a9..76f388b9 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -11,6 +11,12 @@ Настройки Подробно Отправить + Упорядочить + Упорядочить по + + А-Я + Новые - Старые + Основные @@ -241,6 +247,7 @@ Предпросмотр Это изображение не может быть отображено %1$s не возможно скопировать в локальною папку %2$s + Путь для загрузки К сожалению, на вашем сервере отключен совместный доступ. Пожалуйста, свяжитесь с вашим администратором. Невозможно добавить в общий доступ. Пожалуйста, проверьте, существует ли файл Ошибка предоставления общего доступа к этому файлу или каталогу @@ -265,6 +272,7 @@ Этот файл больше недоступен на сервере Учётные записи Добавить учетную запись + Защищённое соединение перенаправлено по незащищённому маршруту Журналы История Отправлений Журналы Андроид-приложения ownCloud @@ -279,5 +287,6 @@ Файл уже существует в папке назначения Произошла ошибка при попытке перемещения этого файла или папки переместить этот файл + Мгновенные загрузки Безопасность diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index b4d46663..0e8d775f 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -38,6 +38,8 @@ Priporoči prijateljem Odziv Natis + Zapomni si mesto souporabe + Zapomni si zadnje mesto za pošiljanje v oblak Preizkusi %1$s na pametnem telefonu! Želim ti predstaviti %1$s na pametnem telefonu!\nPrejmeš ga lahko na: %2$s Preveri strežnik diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index 656397b7..f1811523 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -38,6 +38,8 @@ Bir arkadaşa öner Geribildirim İzlenim + Konum paylaşmayı hatırla + Son paylaşma yükleme konumunu hatırla %1$s uygulamasını akıllı telefonunda dene! Seni, akıllı telefonunda %1$s kullanmaya davet ediyorum!\nBuradan indirebilirsin: %2$s Sunucuyu Denetle diff --git a/res/values/dims.xml b/res/values/dims.xml new file mode 100644 index 00000000..d433cba3 --- /dev/null +++ b/res/values/dims.xml @@ -0,0 +1,21 @@ + + + + 32dp + diff --git a/res/values/strings.xml b/res/values/strings.xml index af5a684d..2655e29f 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -39,7 +39,9 @@ Recommend to a friend Feedback Imprint - + Remember share location + Remember last share upload location + "Try %1$s on your smartphone!" "I want to invite you to use %1$s on your smartphone!\nDownload here: %2$s" @@ -279,6 +281,7 @@ An error occurred while waiting for the server, the operation couldn\'t have been done An error occurred while waiting for the server, the operation couldn\'t have been done The operation couldn\'t be completed, server is unavailable + You do not have permission %s @@ -313,5 +316,4 @@ Instant Uploads Security - diff --git a/src/com/owncloud/android/MainApp.java b/src/com/owncloud/android/MainApp.java index e04239df..c2a4c68b 100644 --- a/src/com/owncloud/android/MainApp.java +++ b/src/com/owncloud/android/MainApp.java @@ -55,7 +55,7 @@ public class MainApp extends Application { } else { OwnCloudClientManagerFactory.setDefaultPolicy(Policy.ALWAYS_NEW_CLIENT); } - + // initialise thumbnails cache on background thread new ThumbnailsCacheManager.InitDiskCacheTask().execute(); diff --git a/src/com/owncloud/android/datamodel/FileDataStorageManager.java b/src/com/owncloud/android/datamodel/FileDataStorageManager.java index e7895e49..b10e525c 100644 --- a/src/com/owncloud/android/datamodel/FileDataStorageManager.java +++ b/src/com/owncloud/android/datamodel/FileDataStorageManager.java @@ -300,6 +300,7 @@ public class FileDataStorageManager { cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, file.getPublicLink()); cv.put(ProviderTableMeta.FILE_PERMISSIONS, file.getPermissions()); cv.put(ProviderTableMeta.FILE_REMOTE_ID, file.getRemoteId()); + cv.put(ProviderTableMeta.FILE_UPDATE_THUMBNAIL, file.needsUpdateThumbnail()); boolean existsByPath = fileExists(file.getRemotePath()); if (existsByPath || fileExists(file.getFileId())) { diff --git a/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java b/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java index e75404ef..1d2cda8c 100644 --- a/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java +++ b/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java @@ -20,19 +20,30 @@ package com.owncloud.android.datamodel; import java.io.File; import java.lang.ref.WeakReference; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.GetMethod; + +import android.accounts.Account; +import android.accounts.AccountManager; import android.content.res.Resources; import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.graphics.Bitmap.CompressFormat; +import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.media.ThumbnailUtils; +import android.net.Uri; import android.os.AsyncTask; -import android.util.TypedValue; import android.widget.ImageView; import com.owncloud.android.MainApp; +import com.owncloud.android.R; +import com.owncloud.android.lib.common.OwnCloudAccount; +import com.owncloud.android.lib.common.OwnCloudClient; +import com.owncloud.android.lib.common.OwnCloudClientManagerFactory; +import com.owncloud.android.lib.common.accounts.AccountUtils.Constants; import com.owncloud.android.lib.common.utils.Log_OC; +import com.owncloud.android.lib.resources.status.OwnCloudVersion; import com.owncloud.android.ui.adapter.DiskLruImageCache; import com.owncloud.android.utils.BitmapUtils; import com.owncloud.android.utils.DisplayUtils; @@ -47,7 +58,8 @@ public class ThumbnailsCacheManager { private static final String TAG = ThumbnailsCacheManager.class.getSimpleName(); - private static final String CACHE_FOLDER = "thumbnailCache"; + private static final String CACHE_FOLDER = "thumbnailCache"; + private static final String MINOR_SERVER_VERSION_FOR_THUMBS = "7.8.0"; private static final Object mThumbnailsDiskCacheLock = new Object(); private static DiskLruImageCache mThumbnailCache = null; @@ -56,7 +68,9 @@ public class ThumbnailsCacheManager { private static final int DISK_CACHE_SIZE = 1024 * 1024 * 10; // 10MB private static final CompressFormat mCompressFormat = CompressFormat.JPEG; private static final int mCompressQuality = 70; - + private static OwnCloudClient mClient = null; + private static String mServerVersion = null; + public static Bitmap mDefaultImg = BitmapFactory.decodeResource( MainApp.getAppContext().getResources(), @@ -65,10 +79,12 @@ public class ThumbnailsCacheManager { public static class InitDiskCacheTask extends AsyncTask { + @Override protected Void doInBackground(File... params) { synchronized (mThumbnailsDiskCacheLock) { mThumbnailCacheStarting = true; + if (mThumbnailCache == null) { try { // Check if media is mounted or storage is built-in, if so, @@ -153,15 +169,17 @@ public class ThumbnailsCacheManager { public static class ThumbnailGenerationTask extends AsyncTask { private final WeakReference mImageViewReference; + private static Account mAccount; private OCFile mFile; private FileDataStorageManager mStorageManager; - public ThumbnailGenerationTask(ImageView imageView, FileDataStorageManager storageManager) { + public ThumbnailGenerationTask(ImageView imageView, FileDataStorageManager storageManager, Account account) { // Use a WeakReference to ensure the ImageView can be garbage collected mImageViewReference = new WeakReference(imageView); if (storageManager == null) throw new IllegalArgumentException("storageManager must not be NULL"); mStorageManager = storageManager; + mAccount = account; } // Decode image in background. @@ -170,6 +188,15 @@ public class ThumbnailsCacheManager { Bitmap thumbnail = null; try { + if (mAccount != null) { + AccountManager accountMgr = AccountManager.get(MainApp.getAppContext()); + + mServerVersion = accountMgr.getUserData(mAccount, Constants.KEY_OC_VERSION); + OwnCloudAccount ocAccount = new OwnCloudAccount(mAccount, MainApp.getAppContext()); + mClient = OwnCloudClientManagerFactory.getDefaultSingleton(). + getClientFor(ocAccount, MainApp.getAppContext()); + } + mFile = params[0]; final String imageKey = String.valueOf(mFile.getRemoteId()); @@ -180,9 +207,8 @@ public class ThumbnailsCacheManager { if (thumbnail == null || mFile.needsUpdateThumbnail()) { // Converts dp to pixel Resources r = MainApp.getAppContext().getResources(); - int px = (int) Math.round(TypedValue.applyDimension( - TypedValue.COMPLEX_UNIT_DIP, 150, r.getDisplayMetrics() - )); + + int px = (int) Math.round(r.getDimension(R.dimen.file_icon_size)); if (mFile.isDown()){ Bitmap bitmap = BitmapUtils.decodeSampledBitmapFromFile( @@ -198,6 +224,36 @@ public class ThumbnailsCacheManager { mStorageManager.saveFile(mFile); } + } else { + // 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) { + try { + int status = -1; + + String uri = mClient.getBaseUri() + "/index.php/apps/files/api/v1/thumbnail/" + + px + "/" + px + Uri.encode(mFile.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); + thumbnail = ThumbnailUtils.extractThumbnail(bitmap, px, px); + + // Add thumbnail to cache + if (thumbnail != null) { + addBitmapToCache(imageKey, thumbnail); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } else { + Log_OC.d(TAG, "Server too old"); + } + } } } diff --git a/src/com/owncloud/android/operations/SynchronizeFolderOperation.java b/src/com/owncloud/android/operations/SynchronizeFolderOperation.java index cdf12823..d61e6784 100644 --- a/src/com/owncloud/android/operations/SynchronizeFolderOperation.java +++ b/src/com/owncloud/android/operations/SynchronizeFolderOperation.java @@ -33,6 +33,7 @@ import org.apache.http.HttpStatus; import android.accounts.Account; import android.content.Context; import android.content.Intent; +import android.util.Log; //import android.support.v4.content.LocalBroadcastManager; import com.owncloud.android.datamodel.FileDataStorageManager; @@ -325,7 +326,7 @@ public class SynchronizeFolderOperation extends RemoteOperation { private void synchronizeData(ArrayList folderAndFiles, OwnCloudClient client) { // get 'fresh data' from the database mLocalFolder = mStorageManager.getFileByPath(mLocalFolder.getRemotePath()); - + // parse data from remote folder OCFile remoteFolder = fillOCFile((RemoteFile)folderAndFiles.get(0)); remoteFolder.setParentId(mLocalFolder.getParentId()); @@ -372,6 +373,10 @@ public class SynchronizeFolderOperation extends RemoteOperation { if (remoteFile.isFolder()) { remoteFile.setFileLength(localFile.getFileLength()); // TODO move operations about size of folders to FileContentProvider + } else if (mRemoteFolderChanged && remoteFile.isImage() && + remoteFile.getModificationTimestamp() != localFile.getModificationTimestamp()) { + remoteFile.setNeedsUpdateThumbnail(true); + Log.d(TAG, "Image " + remoteFile.getFileName() + " updated on the server"); } remoteFile.setPublicLink(localFile.getPublicLink()); remoteFile.setShareByLink(localFile.isShareByLink()); diff --git a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java index f796aa4f..a5b324f3 100644 --- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -851,7 +851,7 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener { } else if (item == 1) { Intent action = new Intent(Intent.ACTION_GET_CONTENT); action = action.setType("*/*").addCategory(Intent.CATEGORY_OPENABLE); - //putExtra is only supported on api level 18+ + //Intent.EXTRA_ALLOW_MULTIPLE is only supported on api level 18+ if(Build.VERSION.SDK_INT >= 18) { action.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); } diff --git a/src/com/owncloud/android/ui/activity/UploadFilesActivity.java b/src/com/owncloud/android/ui/activity/UploadFilesActivity.java index 09185726..83e7bc07 100644 --- a/src/com/owncloud/android/ui/activity/UploadFilesActivity.java +++ b/src/com/owncloud/android/ui/activity/UploadFilesActivity.java @@ -34,6 +34,9 @@ import android.widget.TextView; import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.app.ActionBar.OnNavigationListener; +import com.actionbarsherlock.internal.view.menu.ActionMenuItemView; +import com.actionbarsherlock.view.Menu; +import com.actionbarsherlock.view.MenuInflater; import com.actionbarsherlock.view.MenuItem; import com.owncloud.android.R; import com.owncloud.android.lib.common.utils.Log_OC; @@ -73,6 +76,8 @@ public class UploadFilesActivity extends FileActivity implements private static final String WAIT_DIALOG_TAG = "WAIT"; private static final String QUERY_TO_MOVE_DIALOG_TAG = "QUERY_TO_MOVE"; + private boolean selectAllToggled = false; + private Menu menu; @Override public void onCreate(Bundle savedInstanceState) { @@ -119,6 +124,7 @@ public class UploadFilesActivity extends FileActivity implements actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); actionBar.setListNavigationCallbacks(mDirectories, this); + // wait dialog if (mCurrentDialog != null) { mCurrentDialog.dismiss(); @@ -127,8 +133,15 @@ public class UploadFilesActivity extends FileActivity implements Log_OC.d(TAG, "onCreate() end"); } - - + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu items for use in the action bar + MenuInflater inflater = getSherlock().getMenuInflater(); + inflater.inflate(R.menu.file_select_all, menu); + this.menu = menu; + return true; + } + @Override public boolean onOptionsItemSelected(MenuItem item) { boolean retval = true; @@ -139,12 +152,33 @@ public class UploadFilesActivity extends FileActivity implements } break; } + case R.id.actionbar_select_all:{ + if(selectAllToggled){ + toggleOffSelectAll(); + }else{ + toggleOnSelectAll(item); + } + break; + } default: retval = super.onOptionsItemSelected(item); } return retval; } - + public void toggleOffSelectAll(MenuItem item){ + selectAllToggled = false; + item.setIcon(android.R.drawable.checkbox_off_background); + mFileListFragment.deselectAll(); + } + public void toggleOffSelectAll(){ + MenuItem item = menu.findItem(R.id.actionbar_select_all); + toggleOffSelectAll(item); + } + public void toggleOnSelectAll(MenuItem item){ + selectAllToggled = true; + item.setIcon(android.R.drawable.checkbox_on_background); + mFileListFragment.selectAll(); + } @Override public boolean onNavigationItemSelected(int itemPosition, long itemId) { @@ -175,6 +209,7 @@ public class UploadFilesActivity extends FileActivity implements ActionBar actionBar = getSupportActionBar(); actionBar.setDisplayHomeAsUpEnabled(false); } + toggleOffSelectAll(); } @@ -242,10 +277,11 @@ public class UploadFilesActivity extends FileActivity implements * {@inheritDoc} */ @Override - public void onDirectoryClick(File directory) { + public void onDirectoryClick(File directory) { pushDirname(directory); ActionBar actionBar = getSupportActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); + toggleOffSelectAll(); } diff --git a/src/com/owncloud/android/ui/activity/Uploader.java b/src/com/owncloud/android/ui/activity/Uploader.java index 62ad44a4..66359f3d 100644 --- a/src/com/owncloud/android/ui/activity/Uploader.java +++ b/src/com/owncloud/android/ui/activity/Uploader.java @@ -39,22 +39,22 @@ import android.accounts.AccountManager; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.app.Dialog; -import android.app.ListActivity; import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnCancelListener; import android.content.DialogInterface.OnClickListener; import android.content.Intent; +import android.content.SharedPreferences; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.os.Parcelable; +import android.preference.PreferenceManager; import android.provider.MediaStore.Audio; import android.provider.MediaStore.Images; import android.provider.MediaStore.Video; import android.view.View; -import android.view.Window; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.Button; @@ -62,6 +62,10 @@ import android.widget.EditText; 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.utils.DisplayUtils; /** * This can be used to upload things to an ownCloud instance. @@ -69,7 +73,7 @@ import android.widget.Toast; * @author Bartek Przybylski * */ -public class Uploader extends ListActivity implements OnItemClickListener, android.view.View.OnClickListener { +public class Uploader extends SherlockListActivity implements OnItemClickListener, android.view.View.OnClickListener { private static final String TAG = "ownCloudUploader"; private Account mAccount; @@ -91,9 +95,11 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - getWindow().requestFeature(Window.FEATURE_NO_TITLE); mParents = new Stack(); - mParents.add(""); + + ActionBar actionBar = getSupportActionBar(); + actionBar.setIcon(DisplayUtils.getSeasonalIconId()); + if (prepareStreamsToUpload()) { mAccountManager = (AccountManager) getSystemService(Context.ACCOUNT_SERVICE); Account[] accounts = mAccountManager.getAccountsByType(MainApp.getAccountType()); @@ -106,8 +112,11 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro } else { mAccount = accounts[0]; mStorageManager = new FileDataStorageManager(mAccount, getContentResolver()); + initTargetFolder(); populateDirectoryList(); + } + } else { showDialog(DIALOG_NO_STREAM); } @@ -169,6 +178,7 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro public void onClick(DialogInterface dialog, int which) { mAccount = mAccountManager.getAccountsByType(MainApp.getAccountType())[which]; mStorageManager = new FileDataStorageManager(mAccount, getContentResolver()); + initTargetFolder(); populateDirectoryList(); } }); @@ -288,12 +298,22 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro private void populateDirectoryList() { setContentView(R.layout.uploader_layout); - String full_path = ""; - for (String a : mParents) - full_path += a + "/"; + String current_dir = mParents.peek(); + if(current_dir.equals("")){ + getSupportActionBar().setTitle(getString(R.string.default_display_name_for_root_folder)); + } + else{ + getSupportActionBar().setTitle(current_dir); + } + boolean notRoot = (mParents.size() > 1); + ActionBar actionBar = getSupportActionBar(); + actionBar.setDisplayHomeAsUpEnabled(notRoot); + actionBar.setHomeButtonEnabled(notRoot); + + String full_path = generatePath(mParents); Log_OC.d(TAG, "Populating view with content of : " + full_path); - + mFile = mStorageManager.getFileByPath(full_path); if (mFile != null) { Vector files = mStorageManager.getFolderContent(mFile); @@ -317,6 +337,14 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro } } + private String generatePath(Stack dirs) { + String full_path = ""; + + for (String a : dirs) + full_path += a + "/"; + return full_path; + } + private boolean prepareStreamsToUpload() { if (getIntent().getAction().equals(Intent.ACTION_SEND)) { mStreamsToUpload = new ArrayList(); @@ -408,6 +436,13 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro intent.putExtra(FileUploader.KEY_REMOTE_FILE, remote.toArray(new String[remote.size()])); intent.putExtra(FileUploader.KEY_ACCOUNT, mAccount); startService(intent); + + //Save the path to shared preferences + SharedPreferences.Editor appPrefs = PreferenceManager + .getDefaultSharedPreferences(getApplicationContext()).edit(); + appPrefs.putString("last_upload_path", mUploadPath); + appPrefs.apply(); + finish(); } @@ -416,5 +451,52 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro Toast.makeText(this, message, Toast.LENGTH_LONG).show(); } } + + /** + * 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"); + } + + SharedPreferences appPreferences = PreferenceManager + .getDefaultSharedPreferences(getApplicationContext()); + + String last_path = appPreferences.getString("last_upload_path", ""); + // "/" equals root-directory + if(last_path.equals("/")) { + mParents.add(""); + } + else{ + String[] dir_names = last_path.split("/"); + for (String dir : dir_names) + 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){ + mParents.pop(); + } + } + + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + boolean retval = true; + switch (item.getItemId()) { + case android.R.id.home: { + if((mParents.size() > 1)) { + onBackPressed(); + } + break; + } + default: + retval = super.onOptionsItemSelected(item); + } + return retval; + } + } diff --git a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java index 9a2a0d3a..e002efb7 100644 --- a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java +++ b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java @@ -82,10 +82,11 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { Context context, ComponentsGetter transferServiceGetter ) { - + mJustFolders = justFolders; mContext = context; mAccount = AccountUtils.getCurrentOwnCloudAccount(mContext); + mTransferServiceGetter = transferServiceGetter; mAppPreferences = PreferenceManager @@ -98,6 +99,7 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { // initialise thumbnails cache on background thread new ThumbnailsCacheManager.InitDiskCacheTask().execute(); + } @Override @@ -217,7 +219,7 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { if (ThumbnailsCacheManager.cancelPotentialWork(file, fileIcon)) { final ThumbnailsCacheManager.ThumbnailGenerationTask task = new ThumbnailsCacheManager.ThumbnailGenerationTask( - fileIcon, mStorageManager + fileIcon, mStorageManager, mAccount ); if (thumbnail == null) { thumbnail = ThumbnailsCacheManager.mDefaultImg; diff --git a/src/com/owncloud/android/ui/fragment/LocalFileListFragment.java b/src/com/owncloud/android/ui/fragment/LocalFileListFragment.java index a9b6ad2c..62b41a3e 100644 --- a/src/com/owncloud/android/ui/fragment/LocalFileListFragment.java +++ b/src/com/owncloud/android/ui/fragment/LocalFileListFragment.java @@ -18,6 +18,7 @@ package com.owncloud.android.ui.fragment; import java.io.File; +import java.util.ArrayList; import android.app.Activity; import android.os.Bundle; @@ -97,13 +98,33 @@ public class LocalFileListFragment extends ExtendedListFragment { Log_OC.i(TAG, "onActivityCreated() stop"); } + public void selectAll(){ + int numberOfFiles = mAdapter.getCount(); + for(int i = 0; i < numberOfFiles; i++){ + File file = (File) mAdapter.getItem(i); + if (file != null) { + if (!file.isDirectory()) { + /// Click on a file + getListView().setItemChecked(i, true); + // notify the change to the container Activity + mContainerActivity.onFileClick(file); + } + } + } + } + + public void deselectAll(){ + mAdapter = new LocalFileListAdapter(mContainerActivity.getInitialDirectory(), getActivity()); + setListAdapter(mAdapter); + } /** * 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) { - File file = (File) mAdapter.getItem(position); + File file = (File) mAdapter.getItem(position); + if (file != null) { /// Click on a directory if (file.isDirectory()) { @@ -209,16 +230,18 @@ public class LocalFileListFragment extends ExtendedListFragment { * @return File paths to the files checked by the user. */ public String[] getCheckedFilePaths() { - String [] result = null; + ArrayList result = new ArrayList(); SparseBooleanArray positions = mList.getCheckedItemPositions(); if (positions.size() > 0) { - Log_OC.d(TAG, "Returning " + positions.size() + " selected files"); - result = new String[positions.size()]; - for (int i=0; i= 354) { + if (Calendar.getInstance().get(Calendar.DAY_OF_YEAR) >= 354 && + MainApp.getAppContext().getString(R.string.app_name).equals(OWNCLOUD_APP_NAME)) { return R.drawable.winter_holidays_icon; } else { return R.drawable.icon;