From: David A. Velasco Date: Mon, 15 Dec 2014 09:22:10 +0000 (+0100) Subject: Merge pull request #801 from owncloud/community_image-preview-save-position X-Git-Tag: oc-android-1.7.0_signed~74 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/46b5e21ef540659c7db2113a72ab7f77ea723343?hp=8fc865ea76176f829faf1ca2303d07837f5c7383 Merge pull request #801 from owncloud/community_image-preview-save-position Restore the current image when the preview activity is hidden --- diff --git a/res/values-bg-rBG/strings.xml b/res/values-bg-rBG/strings.xml index 4b3ecfd1..519754b0 100644 --- a/res/values-bg-rBG/strings.xml +++ b/res/values-bg-rBG/strings.xml @@ -281,8 +281,6 @@ Сигурна връзка е пренасочена по несигурен път. Доклади Изпрати История - ownCloud Android доклади - Зареждане на информация... Нужна е идентификация Грешна парола Премести diff --git a/res/values-cs-rCZ/strings.xml b/res/values-cs-rCZ/strings.xml index 03387293..56b77025 100644 --- a/res/values-cs-rCZ/strings.xml +++ b/res/values-cs-rCZ/strings.xml @@ -281,8 +281,9 @@ správce systému. Bezpečné spojení je přesměrováno na nezabezpečenou trasu. Logy Odeslat historii - Logy aplikace ownCloud pro Android - Načítám data... + Nebyla nalezena žádná aplikace pro zasílání logů. Nainstalujte poÅ¡tovní aplikaci! + %1$s logy aplikace pro Android + Načítání dat… Vyžadováno přihlášení Nesprávné heslo Přesunout diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index ee807fca..149862b0 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -280,8 +280,9 @@ Sikker forbindelse videredirigeres til en usikker rute. Logge Send historik - App-logregistreringer for ownCloud Android - Indlæser data... + Der blev ikke fundet apps, der kan sende logge. Installér mail-app\'en! + %1$s Android-app - logge + Indlæser data ... Godkendelse pÃ¥krævet Forkert kodeord Flyt diff --git a/res/values-de-rDE/strings.xml b/res/values-de-rDE/strings.xml index 00fdce2e..b1a9e68a 100644 --- a/res/values-de-rDE/strings.xml +++ b/res/values-de-rDE/strings.xml @@ -282,8 +282,9 @@ Die gesicherte Verbindung wird auf eine unsichere Route weitergeleitet. Protokolle Verlauf senden - Protokolle der ownCloud-Android-App - Daten werden geladen … + Keine App zum Versenden der Meldungen gefunden. Bitte installieren Sie die Mail-App! + %1$s Android-App Meldungen + Lade Daten… Legitimierung benötigt Falsches Passwort Verschieben diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 2d7ccd4d..23cdb642 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -282,8 +282,9 @@ Die gesicherte Verbindung wird auf eine unsichere Route weitergeleitet. Protokolle Verlauf senden - Protokolle der ownCloud-Android-App - Daten werden geladen … + Keine App zum Versenden der Meldungen gefunden. Bitte installiere die Mail-App! + %1$s Android-App Meldungen + Lade Daten… Legitimierung benötigt Falsches Passwort Verschieben diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index 917ca39c..b037f019 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -278,8 +278,6 @@ Ασφαλής σύνδεση ανακατευθύνεται σε μια μη ασφαλή διαδρομή. Αρχεία καταγραφών Αποστολή ιστορικού - αρχεία καταγραφής της εφαρμογής ownCloud Android - Φόρτωση δεδομένων.... Απαιτείται πιστοποίηση Εσφαλμένο συνθηματικό Μετακίνηση diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml index 27e95793..054cb6b2 100644 --- a/res/values-en-rGB/strings.xml +++ b/res/values-en-rGB/strings.xml @@ -282,8 +282,9 @@ Secure connection is redirected to an unsecured route. Logs Send History - ownCloud Android app logs - Loading data... + No app for sending logs found. Install mail app! + %1$s Android app logs + Loading data… Authentication required Incorrect password Move diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index 63e96215..6d49bccd 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -282,7 +282,6 @@ La conexión segura está siendo desviada por una ruta insegura. Logs Enviar historial - Logs de las apps ownCloud Android Cargando datos... Se necesita autenticación Contraseña incorrecta diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml index 5c25d132..e7ac96be 100644 --- a/res/values-et-rEE/strings.xml +++ b/res/values-et-rEE/strings.xml @@ -286,8 +286,6 @@ Allpool on loend kohalikest failidest ning serveris asuvatest failidest %5$s, mi Turvaline ühendus suunatakse läbi turvamata ühenduse. Logid Saada ajalugu - ownCloud Android rakenduse logid - Andmete laadimine... Autentimine on vajalik Vale parool Tõsta ümber diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml index ac6f3252..d8dd2639 100644 --- a/res/values-eu/strings.xml +++ b/res/values-eu/strings.xml @@ -271,8 +271,6 @@ Mesedez, baimendu berriz Fitxategia jadanik ez dago eskuragarri zerbitzarian Kontuak Gehitu kontua - ownCloud Android programaren egunerokoak - Datuak kargatzen... Autentikazioa beharrezkoa Pasahitz okerra Mugitu diff --git a/res/values-fi-rFI/strings.xml b/res/values-fi-rFI/strings.xml index 571a9123..4ba0fcf0 100644 --- a/res/values-fi-rFI/strings.xml +++ b/res/values-fi-rFI/strings.xml @@ -259,8 +259,8 @@ Salattu yhteys on ohjattu uudelleen salaamatonta reittiä pitkin. Lokit Lähetä historia - ownCloudin Android-sovelluksen lokit - Ladataan tietoja... + Lokien lähettämistä varten ei löytynyt sovellusta. Asenna sähköpostisovellus! + Ladataan tietoja… Tunnistautuminen vaaditaan Väärä salasana Siirrä diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 73d97d56..b69a6ba5 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -286,8 +286,6 @@ Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxq La connexion sécurisée est redirigée via une route non-sécurisée. Journaux Envoyer l\'historique - Journaux de l\'application Android ownCloud - Chargement des données... Authentification requise Mot de passe incorrect Déplacer @@ -300,4 +298,5 @@ Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxq de déplacer ce fichier Téléchargements instantanés Sécurité + Chemin d\'accès pour le téléversement diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml index a7605641..68d5d8c3 100644 --- a/res/values-gl/strings.xml +++ b/res/values-gl/strings.xml @@ -283,8 +283,6 @@ Descárgueo de aquí: %2$s A conexión segura está a ser redirixida a unha ruta non segura. Rexistros Enviar o historial - Rexistros da app ownCloud Android - Cargando os datos... Requírese autenticación Contrasinal incorrecto Mover diff --git a/res/values-id/strings.xml b/res/values-id/strings.xml index 795cfde0..1b0dd761 100644 --- a/res/values-id/strings.xml +++ b/res/values-id/strings.xml @@ -282,8 +282,6 @@ Sambungan aman dialihkan ke rute yang tidak aman. Log Kirim Riwayat - Log apl ownCloud Android - Memuat data... Diperlukan otentikasi Sandi salah Pindah diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 4efe1ef9..94fc138e 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -282,7 +282,8 @@ La connessione sicura è rediretta su un percorso non sicuro. Registri Invia cronologia - Registri applicazione ownCloud Android + Non è stata trovata alcuna applicazione per l\'invio dei registri. Installa l\'applicazione mail! + Registri applicazione %1$s Android Caricamento dati in corso... Autenticazione richiesta Password errata diff --git a/res/values-ja-rJP/strings.xml b/res/values-ja-rJP/strings.xml index 7c0d99c0..cbc84bb5 100644 --- a/res/values-ja-rJP/strings.xml +++ b/res/values-ja-rJP/strings.xml @@ -283,8 +283,6 @@ 暗号化接続は非暗号化接続にリダイレクトされました。 ログ ログを送信 - ownCloud Android アプリログ - 読込中 ... 認証を必要とする 無効なパスワード 移動 diff --git a/res/values-nb-rNO/strings.xml b/res/values-nb-rNO/strings.xml index c9a09ab1..98f4ff6b 100644 --- a/res/values-nb-rNO/strings.xml +++ b/res/values-nb-rNO/strings.xml @@ -272,8 +272,6 @@ Legg til en konto Logger Send historikk - logger for ownCloud Android app - Laster data... Autentisering kreves Feil passord Flytt diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index 84a0e0dd..a6fc894b 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -285,7 +285,8 @@ Hieronder staan de lokale bestanden en de externe bestanden in %5$s waar ze naar De beveiligde verbinding is omgeleid naar een onveilige route. Logs Verstuur geschiedenis - ownCloud Android app logs + Geen app voor versturen van logs gevonden. Installeer de mail app! + %1$s Android app logs Laden data... Authenticatie vereist Onjuist wachtwoord diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index 7715d945..5a0b30da 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -280,8 +280,6 @@ Bezpieczne połączenie jest przekierowywane przez niezabezpieczone trasy. Logi Wyślij historię - Logi aplikacji ownCloud Android - Ładuję dane... Wymagana autoryzacja Złe hasło Przenieś diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml index 004c2ab3..45909b45 100644 --- a/res/values-pt-rBR/strings.xml +++ b/res/values-pt-rBR/strings.xml @@ -282,8 +282,9 @@ Conexão segura esta redirecionada para uma rota não segura. Logs Enviar Histórico - Logs do aplicativo ownCloud Android - Carregamento de dados... + Não foi encontrado nenhum app para envio de logs. Instale o mail app! + %1$s logs do Android app + Carregando dados... Autenticação é requerida Senha incorreta Mover diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index f5ccd30f..60d9377b 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -40,7 +40,7 @@ Imprint Lembrar localização de partilha Lembrar da última localização de envio de partilha - Experimente %1$s no seu smartphone! + Test %1$s no seu smartphone! Quero convidar-te a usares %1$s no teu smartphone!\nFaz download aqui: %2$s Verificar Servidor Endereço do servidor https://.. @@ -60,26 +60,26 @@ O %1$s não está autorizado a aceder aos ficheiro partilhados. A enviar segundos atrás - Vazio. Envie alguma coisa! + Aqui não existe nada. Envie alguma coisa! A carregar ... Não existem ficheiros nesta pasta. pasta pastas ficheiro ficheiros - Clique no ficheiro para visualizar informação adicional. + Toque num ficheiro para visualizar a informação adicional. Tamanho: Tipo: Criado: Modificado: Transferir Atualizar ficheiro - O nome do ficheiro foi alterado para %1$s durante o envio. + O ficheiro foi renomeado para %1$s durante o envio. Partilhar a hiperligação Deixar de partilhar a ligação Sim Não - OK + ACEITAR Cancelar a transferência Cancelar o envio Cancelar @@ -94,20 +94,20 @@ Enviar de ... Nome da pasta A enviar ... - A enviar %1$d%% , %2$s completo. - Carregado com sucesso - %1$s foi carregado com sucesso - Carregamento falhou + %1$d%% A enviar %2$s + Envio bem sucedido + %1$s foi enviado com sucesso + Não foi possível enviar O envio do ficheiro %1$s não foi concluído. Falha no carregamento, é necessário fazer novo login A transferir ... - %1$d%% A decarregar %2$s - Descarga com sucesso + %1$d%% A transferir %2$s + Transferência bem sucedida %1$s foi descarregado com sucesso Descarga falhou O descarregamento %1$s não foi possível descarregar - Não transferido - Falha no download, é necessário fazer login + Ainda não foi transferido + Não foi possível transferir, tem de iniciar a sessão novamente Escolha a conta Falhou a sincronização Falhou a sincronização, necessita fazer um novo login @@ -122,23 +122,23 @@ Tal como na versão 1.3.16, os ficheiros que foram enviados deste dispositivo são copiados para a pasta local %1$s para prevenir perda de dados quando um ficheiro é partilhado com várias contas.\n\nDevido a esta alteração, todos os ficheiros das versões anteriores foram copiados para a pasta %2$s. No entanto, um erro impediu a conclusão deste processo durante a sincronização da conta. Pode deixar o ficheiro(s) como estão e remover o link para %3$s, ou mover o(s) ficheiro(s) para a pasta %1$s e guardar o link para %4$s. \n\nEm baixo estão listados ficheiro(s) locais e remotos em %5$s que foram ligados. A pasta %1$s já não existe Mover Todos - Todos os ficheiros foram movidos + Foram movidos todos os ficheiros Não foi possível mover alguns ficheiros Local: %1$s Remoto: %1$s Não existe espaço disponível para copiar o ficheiro seleccionado para a pasta %1$s . Em vez disso deseja mover o ficheiro? - Por favor escreva o PIN da Aplicação - Escreva o PIN da Aplicação - O PIN vai ser pedido todas as vezes que iniciar a aplicação. - Volte a inserir o App PIN, por favor - Remover o PIN do aplicação. + Por favor, insira o PIN da App + Insira o PIN da App + O PIN será pedido sempre que a app seja iniciada. + Por favor, reinsira o PIN da App + Remover o seu PIN da App Os códigos PIN introduzidos não são iguais. Código PIN Incorrecto. PIN da aplicação removido PIN da aplicação guardado %1$s leitor de música - A tocar: %1$s - %1$s (A carregar) + %1$s (a reproduzir) + %1$s (a carregar) %1$s leitura terminada Não foi encontrado nenhum ficheiro de média Não foi fornecida conta @@ -280,8 +280,9 @@ Ligação segura é redireccionada para um caminho inseguro. Registos de Alterações Enviar Histórico - Registos das alterações da app ownCloud Android - A carregar os dados ... + Não foi encontrado o aplicativo para envio de registos . Instale app e-mail! + %1$s Android Aplicação de Registyos + A carregar os dados... Autenticação necessária Palavra-passe errada Mover @@ -294,4 +295,5 @@ para mover este ficheiro Envios Instantâneos Segurança + Envio do Caminho do Vídeo diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index 123c779b..bb03b024 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -267,7 +267,6 @@ Fișierul nu mai este disponibil pe server Conturi Adaugă cont - Se încarcă datele... Autentificare necesară Parolă greșită Mutare diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 3f58746b..20415883 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -282,8 +282,6 @@ Защищённое соединение перенаправлено по незащищённому маршруту Журналы История Отправлений - Журналы Андроид-приложения ownCloud - Загружаются данные... Требуется аутентификация Неправильный пароль Переместить diff --git a/res/values-sk-rSK/strings.xml b/res/values-sk-rSK/strings.xml index 5c097d37..1566dede 100644 --- a/res/values-sk-rSK/strings.xml +++ b/res/values-sk-rSK/strings.xml @@ -282,8 +282,6 @@ Zabezpečené pripojenie je presmerované na nezabezpečenú trasu. Logy OdoslaÅ¥ históriu - Logy aplikácie ownCloud pre Android - Nahrávam dáta... Vyžaduje sa overenie Nesprávne heslo Presunúť diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index 86be0f34..0b8b52d9 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -282,8 +282,6 @@ Varna povezava je preusmerjena preko ne-varne poti. Dnevnik PoÅ¡lji zgodovino - Dnevnik programa ownCloud - Poteka nalaganje podatkov ... Zahtevana je overitev Napačno geslo Premakni diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index feb002e0..f87edff8 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -267,7 +267,6 @@ Filen är inte längre tillgänglig pÃ¥ servern Konton Lägg till konto - Laddar data... Autentisering krävs Fel lösenord Flytta diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index a35922f7..680190c8 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -282,8 +282,9 @@ Güvenli bağlantı, güvenli olmayan bir rotaya yönlendirildi. Günlükler Geçmişi Gönder - ownCloud Android uygulama kayıtları - Veri yükleniyor... + Logları göndermek için uygulama bulunamadı. Eposta uygulamasını yükleyin! + %1$s Android uygulama kayıtları + Yükleniyor... Kimlik doğrulama gerekli Hatalı parola Taşı diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index e66a5405..4c07d79b 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -279,8 +279,6 @@ Безпечне підключення перенаправляється через незабезпечений маршрут. Журнали Надіслати історію - Журнали Android-додатка ownCloud - Завантаження даних... Потрібна аутентифікація Невірний пароль Перемістити diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 3f198464..e8852f5e 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -272,8 +272,6 @@ 添加账号 日志 发送历史 - ownCloud安卓客户端日志 - 加载数据中... 需要认证 错误密码 移动 diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index c8da742d..827385fe 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -282,8 +282,6 @@ 安全連線被轉向到一個非安全的連線 紀錄 傳送歷史記錄 - ownCloud Android 應用程式記錄 - 資料載入中... 必須驗證 密碼錯誤 移動 diff --git a/res/values/strings.xml b/res/values/strings.xml index 8b828682..2ea02dba 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -304,8 +304,9 @@ Logs Send History - ownCloud Android app logs - Loading data... + No app for sending logs found. Install mail app! + %1$s Android app logs + Loading data… Authentication required Wrong password diff --git a/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java b/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java index 1d2cda8c..ce53c444 100644 --- a/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java +++ b/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java @@ -29,8 +29,10 @@ import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Bitmap.CompressFormat; import android.graphics.BitmapFactory; +import android.graphics.Matrix; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; +import android.media.ExifInterface; import android.media.ThumbnailUtils; import android.net.Uri; import android.os.AsyncTask; @@ -216,6 +218,9 @@ public class ThumbnailsCacheManager { if (bitmap != null) { thumbnail = ThumbnailUtils.extractThumbnail(bitmap, px, px); + + // Rotate image, obeying exif tag + thumbnail = BitmapUtils.rotateImage(thumbnail, mFile.getStoragePath()); // Add thumbnail to cache addBitmapToCache(imageKey, thumbnail); @@ -317,5 +322,5 @@ public class ThumbnailsCacheManager { mThumbnailsDiskCacheLock.notifyAll(); // Wake any waiting threads } } - + } diff --git a/src/com/owncloud/android/ui/activity/LogHistoryActivity.java b/src/com/owncloud/android/ui/activity/LogHistoryActivity.java index 676388d2..793b3d9d 100644 --- a/src/com/owncloud/android/ui/activity/LogHistoryActivity.java +++ b/src/com/owncloud/android/ui/activity/LogHistoryActivity.java @@ -25,6 +25,7 @@ import java.lang.ref.WeakReference; import java.lang.reflect.Field; import java.util.ArrayList; +import android.content.ActivityNotFoundException; import android.content.Intent; import android.net.Uri; import android.os.AsyncTask; @@ -36,6 +37,7 @@ import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; +import android.widget.Toast; import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.app.SherlockFragmentActivity; @@ -51,12 +53,15 @@ public class LogHistoryActivity extends SherlockFragmentActivity { private static final String MAIL_ATTACHMENT_TYPE = "text/plain"; + private static final String KEY_LOG_TEXT = "LOG_TEXT"; + private static final String TAG = LogHistoryActivity.class.getSimpleName(); private static final String DIALOG_WAIT_TAG = "DIALOG_WAIT"; private String mLogPath = FileStorageUtils.getLogPath(); private File logDIR = null; + private String mLogText; @Override @@ -70,6 +75,7 @@ public class LogHistoryActivity extends SherlockFragmentActivity { actionBar.setDisplayHomeAsUpEnabled(true); Button deleteHistoryButton = (Button) findViewById(R.id.deleteLogHistoryButton); Button sendHistoryButton = (Button) findViewById(R.id.sendLogHistoryButton); + TextView logTV = (TextView) findViewById(R.id.logTV); deleteHistoryButton.setOnClickListener(new OnClickListener() { @@ -89,20 +95,22 @@ public class LogHistoryActivity extends SherlockFragmentActivity { } }); - if (mLogPath != null) { - logDIR = new File(mLogPath); - } - - if (logDIR != null && logDIR.isDirectory()) { - // Show a dialog while log data is being loaded - showLoadingDialog(); - - TextView logTV = (TextView) findViewById(R.id.logTV); + if (savedInstanceState == null) { + if (mLogPath != null) { + logDIR = new File(mLogPath); + } - // Start a new thread that will load all the log data - LoadingLogTask task = new LoadingLogTask(logTV); - task.execute(); + if (logDIR != null && logDIR.isDirectory()) { + // Show a dialog while log data is being loaded + showLoadingDialog(); + // Start a new thread that will load all the log data + LoadingLogTask task = new LoadingLogTask(logTV); + task.execute(); + } + } else { + mLogText = savedInstanceState.getString(KEY_LOG_TEXT); + logTV.setText(mLogText); } } @@ -125,41 +133,45 @@ public class LogHistoryActivity extends SherlockFragmentActivity { */ private void sendMail() { + // For the moment we need to consider the possibility that setup.xml + // does not include the "mail_logger" entry. This block prevents that + // compilation fails in this case. String emailAddress; try { Class stringClass = R.string.class; Field mailLoggerField = stringClass.getField("mail_logger"); - int emailAddressId = (Integer)mailLoggerField.get(null); + int emailAddressId = (Integer) mailLoggerField.get(null); emailAddress = getString(emailAddressId); - } catch (Exception e) { emailAddress = ""; } - + ArrayList uris = new ArrayList(); // Convert from paths to Android friendly Parcelable Uri's for (String file : Log_OC.getLogFileNames()) { - if (new File(mLogPath + File.separator, file).exists()) { - Uri u = Uri.parse("file://" + mLogPath + File.separator + file); - uris.add(u); + File logFile = new File(mLogPath, file); + if (logFile.exists()) { + uris.add(Uri.fromFile(logFile)); } } Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE); - // Explicitly only use Gmail to send - intent.setClassName("com.google.android.gm","com.google.android.gm.ComposeActivityGmail"); - intent.putExtra(Intent.EXTRA_EMAIL, new String[]{ emailAddress }); - intent.putExtra(Intent.EXTRA_SUBJECT, getText(R.string.log_mail_subject)); + intent.putExtra(Intent.EXTRA_EMAIL, emailAddress); + String subject = String.format(getString(R.string.log_send_mail_subject), getString(R.string.app_name)); + intent.putExtra(Intent.EXTRA_SUBJECT, subject); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setType(MAIL_ATTACHMENT_TYPE); intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris); - - if (intent.resolveActivity(getPackageManager()) != null) { + try { startActivity(intent); + } catch (ActivityNotFoundException e) { + Toast.makeText(this, getString(R.string.log_send_no_mail_app), Toast.LENGTH_LONG).show(); + Log_OC.i(TAG, "Could not find app for sending log history."); } + } /** @@ -183,7 +195,8 @@ public class LogHistoryActivity extends SherlockFragmentActivity { if (textViewReference != null && result != null) { final TextView logTV = textViewReference.get(); if (logTV != null) { - logTV.setText(result); + mLogText = result; + logTV.setText(mLogText); dismissLoadingDialog(); } } @@ -258,4 +271,12 @@ public class LogHistoryActivity extends SherlockFragmentActivity { loading.dismiss(); } } + + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + + /// global state + outState.putString(KEY_LOG_TEXT, mLogText); + } } \ No newline at end of file diff --git a/src/com/owncloud/android/ui/activity/Preferences.java b/src/com/owncloud/android/ui/activity/Preferences.java index 04a4c7af..1d80a703 100644 --- a/src/com/owncloud/android/ui/activity/Preferences.java +++ b/src/com/owncloud/android/ui/activity/Preferences.java @@ -119,7 +119,18 @@ public class Preferences extends SherlockPreferenceActivity implements AccountMa return false; } }); - + + // Load package info + String temp; + try { + PackageInfo pkg = getPackageManager().getPackageInfo(getPackageName(), 0); + temp = pkg.versionName; + } catch (NameNotFoundException e) { + temp = ""; + Log_OC.e(TAG, "Error while showing about dialog", e); + } + final String appVersion = temp; + // Register context menu for list of preferences. registerForContextMenu(getListView()); @@ -208,7 +219,7 @@ public class Preferences extends SherlockPreferenceActivity implements AccountMa @Override public boolean onPreferenceClick(Preference preference) { String feedbackMail =(String) getText(R.string.mail_feedback); - String feedback =(String) getText(R.string.prefs_feedback); + String feedback =(String) getText(R.string.prefs_feedback) + " - android v" + appVersion; Intent intent = new Intent(Intent.ACTION_SENDTO); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_SUBJECT, feedback); @@ -286,13 +297,7 @@ public class Preferences extends SherlockPreferenceActivity implements AccountMa pAboutApp = (Preference) findPreference("about_app"); if (pAboutApp != null) { pAboutApp.setTitle(String.format(getString(R.string.about_android), getString(R.string.app_name))); - PackageInfo pkg; - try { - pkg = getPackageManager().getPackageInfo(getPackageName(), 0); - pAboutApp.setSummary(String.format(getString(R.string.about_version), pkg.versionName)); - } catch (NameNotFoundException e) { - Log_OC.e(TAG, "Error while showing about dialog", e); - } + pAboutApp.setSummary(String.format(getString(R.string.about_version), appVersion)); } loadInstantUploadPath(); diff --git a/src/com/owncloud/android/ui/preview/PreviewImageFragment.java b/src/com/owncloud/android/ui/preview/PreviewImageFragment.java index a3814c77..0995793d 100644 --- a/src/com/owncloud/android/ui/preview/PreviewImageFragment.java +++ b/src/com/owncloud/android/ui/preview/PreviewImageFragment.java @@ -53,6 +53,7 @@ import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.ui.dialog.ConfirmationDialogFragment; import com.owncloud.android.ui.dialog.RemoveFileDialogFragment; import com.owncloud.android.ui.fragment.FileFragment; +import com.owncloud.android.utils.BitmapUtils; import com.owncloud.android.utils.TouchImageViewCustom; @@ -82,6 +83,8 @@ public class PreviewImageFragment extends FileFragment { private static final String TAG = PreviewImageFragment.class.getSimpleName(); private boolean mIgnoreFirstSavedState; + + private LoadBitmapTask mLoadBitmapTask = null; /** @@ -190,12 +193,22 @@ public class PreviewImageFragment extends FileFragment { public void onStart() { super.onStart(); if (getFile() != null) { - BitmapLoader bl = new BitmapLoader(mImageView, mMessageView, mProgressWheel); - bl.execute(new String[]{getFile().getStoragePath()}); + mLoadBitmapTask = new LoadBitmapTask(mImageView, mMessageView, mProgressWheel); + mLoadBitmapTask.execute(new String[]{getFile().getStoragePath()}); } } + @Override + public void onStop() { + super.onStop(); + if (mLoadBitmapTask != null) { + mLoadBitmapTask.cancel(true); + mLoadBitmapTask = null; + } + + } + /** * {@inheritDoc} */ @@ -328,8 +341,8 @@ public class PreviewImageFragment extends FileFragment { finish(); } - - private class BitmapLoader extends AsyncTask { + + private class LoadBitmapTask extends AsyncTask { /** * Weak reference to the target {@link ImageView} where the bitmap will be loaded into. @@ -365,7 +378,7 @@ public class PreviewImageFragment extends FileFragment { * * @param imageView Target {@link ImageView} where the bitmap will be loaded into. */ - public BitmapLoader(ImageViewCustom imageView, TextView messageView, ProgressBar progressWheel) { + public LoadBitmapTask(ImageViewCustom imageView, TextView messageView, ProgressBar progressWheel) { mImageViewRef = new WeakReference(imageView); mMessageViewRef = new WeakReference(messageView); mProgressWheelRef = new WeakReference(progressWheel); @@ -379,43 +392,65 @@ public class PreviewImageFragment extends FileFragment { String storagePath = params[0]; try { + if (isCancelled()) return result; + File picture = new File(storagePath); if (picture != null) { - //Decode file into a bitmap in real size for being able to make zoom on the image + // Decode file into a bitmap in real size for being able to make zoom on + // the image result = BitmapFactory.decodeStream(new FlushedInputStream (new BufferedInputStream(new FileInputStream(picture)))); } + if (isCancelled()) return result; + if (result == null) { mErrorMessageId = R.string.preview_image_error_unknown_format; Log_OC.e(TAG, "File could not be loaded as a bitmap: " + storagePath); + } else { + // Rotate image, obeying exif tag. + result = BitmapUtils.rotateImage(result, storagePath); } } catch (OutOfMemoryError e) { Log_OC.e(TAG, "Out of memory occured for file " + storagePath, e); - // If out of memory error when loading image, try to load it scaled + if (isCancelled()) return result; + + // If out of memory error when loading or rotating image, try to load it scaled result = loadScaledImage(storagePath); if (result == null) { mErrorMessageId = R.string.preview_image_error_unknown_format; Log_OC.e(TAG, "File could not be loaded as a bitmap: " + storagePath); + } else { + // Rotate scaled image, obeying exif tag + result = BitmapUtils.rotateImage(result, storagePath); } } catch (NoSuchFieldError e) { mErrorMessageId = R.string.common_error_unknown; - Log_OC.e(TAG, "Error from access to unexisting field despite protection; file " + storagePath, e); + Log_OC.e(TAG, "Error from access to unexisting field despite protection; file " + + storagePath, e); } catch (Throwable t) { mErrorMessageId = R.string.common_error_unknown; Log_OC.e(TAG, "Unexpected error loading " + getFile().getStoragePath(), t); } + return result; } @Override + protected void onCancelled(Bitmap result) { + if (result != null) { + result.recycle(); + } + } + + @Override protected void onPostExecute(Bitmap result) { hideProgressWheel(); if (result != null) { @@ -424,7 +459,7 @@ public class PreviewImageFragment extends FileFragment { showErrorMessage(); } } - + @SuppressLint("InlinedApi") private void showLoadedImage(Bitmap result) { if (mImageViewRef != null) { diff --git a/src/com/owncloud/android/utils/BitmapUtils.java b/src/com/owncloud/android/utils/BitmapUtils.java index 687b5a4f..70367278 100644 --- a/src/com/owncloud/android/utils/BitmapUtils.java +++ b/src/com/owncloud/android/utils/BitmapUtils.java @@ -16,9 +16,13 @@ */ package com.owncloud.android.utils; +import com.owncloud.android.lib.common.utils.Log_OC; + import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.graphics.Matrix; import android.graphics.BitmapFactory.Options; +import android.media.ExifInterface; /** * Utility class with methods for decoding Bitmaps. @@ -96,4 +100,75 @@ public class BitmapUtils { return inSampleSize; } + /** + * Rotate bitmap according to EXIF orientation. + * Cf. http://www.daveperrett.com/articles/2012/07/28/exif-orientation-handling-is-a-ghetto/ + * @param bitmap Bitmap to be rotated + * @param storagePath Path to source file of bitmap. Needed for EXIF information. + * @return correctly EXIF-rotated bitmap + */ + public static Bitmap rotateImage(Bitmap bitmap, String storagePath){ + Bitmap resultBitmap = bitmap; + + try + { + ExifInterface exifInterface = new ExifInterface(storagePath); + int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, 1); + + Matrix matrix = new Matrix(); + + // 1: nothing to do + + // 2 + if (orientation == ExifInterface.ORIENTATION_FLIP_HORIZONTAL) + { + matrix.postScale(-1.0f, 1.0f); + } + // 3 + else if (orientation == ExifInterface.ORIENTATION_ROTATE_180) + { + matrix.postRotate(180); + } + // 4 + else if (orientation == ExifInterface.ORIENTATION_FLIP_VERTICAL) + { + matrix.postScale(1.0f, -1.0f); + } + // 5 + else if (orientation == ExifInterface.ORIENTATION_TRANSPOSE) + { + matrix.postRotate(-90); + matrix.postScale(1.0f, -1.0f); + } + // 6 + else if (orientation == ExifInterface.ORIENTATION_ROTATE_90) + { + matrix.postRotate(90); + } + // 7 + else if (orientation == ExifInterface.ORIENTATION_TRANSVERSE) + { + matrix.postRotate(90); + matrix.postScale(1.0f, -1.0f); + } + // 8 + else if (orientation == ExifInterface.ORIENTATION_ROTATE_270) + { + matrix.postRotate(270); + } + + // Rotate the bitmap + resultBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); + if (resultBitmap != bitmap) { + bitmap.recycle(); + } + } + catch (Exception exception) + { + Log_OC.e("BitmapUtil", "Could not rotate the image: " + storagePath); + } + return resultBitmap; + } + + }