diff --git a/default.properties b/default.properties
index 51e933a98..e735ffa56 100644
--- a/default.properties
+++ b/default.properties
@@ -10,4 +10,4 @@
# Indicates whether an apk should be generated for each density.
split.density=false
# Project target.
-target=android-8
+target=android-13
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
new file mode 100644
index 000000000..f64e123c2
--- /dev/null
+++ b/res/values-pt/strings.xml
@@ -0,0 +1,361 @@
+
+
+
+
+ APG
+
+
+ Caixa de Entrada
+ Gerir Chaves Públicas
+ Gerir Chaves Privadas
+
+ Escolher Destinatários
+ Escolher Assinatura
+ Cifrar
+ Decifrar
+ Senha
+ Criar Chave
+
+ Editar Chave
+ Preferências
+ Preferências de Servidor de Chaves
+ Alterar Senha
+ Definir Senha
+ "Enviar Email..."
+
+ Cifrar Para Arquivo
+ Descifrar Para Arquivo
+ Adicionar Conta
+ Importar Chaves
+ Exportar Chave
+ Exportar Chaves
+
+ Chave Não Encontrada
+ Conhecendo
+ Busca no Servidor de Chaves
+ Assinatura Desconhecida
+
+
+ IDs de Usuários
+
+ Chaves
+ Geral
+ Padrões
+ Avançado
+
+
+ Assinar Para Clipboard
+
+ Cifrar Para Clipboard
+ Cifrar Para Email
+ Assinar Para Email
+ Cifrar
+ Assinar
+ Decifrar
+
+ Verificar
+ Escolher Destinatários
+ Responder
+ Cifrar Mensagem
+ Decifrar Mesagem
+ Cifrar Arquivo
+
+ Decifrar Arquivo
+ Salvar
+ Cancelar
+ Apagar
+ Nenhuma
+ Limpar Filtro
+
+ Alterar Senha
+ Definir Senha
+ Buscar
+
+
+ Sobre
+ Adicionar Conta GMail
+
+ Apagar Conta
+ Gerir Chaves Públicas
+ Gerir Chaves Privadas
+ Configurações
+ Importar Chaves
+ Exportar Chaves
+
+ Exportar Chave
+ Apagar Chave
+ Criar Chave
+ Editar Chave
+ Buscar
+ Ajuda
+
+ Servidor de Chaves
+ Atualizar
+
+
+ Assinar
+ Mensagem
+ Arquivo
+
+ Senha
+ Novamente
+ Algoritmo
+ Armadura ASCII
+ Chave(s) Pública(s)
+ Apagar Após Cifrar
+
+ Apagar Após Decifrar
+ Apagar Após Importar
+ Algoritmo de Cifragem
+ Algoritmo de Hash
+ Chave Pública
+ Senha
+
+ Cache de Senhas
+ Compressão de Mensagem
+ Compressão de Arquivo
+ Língua
+ Forçar Assinaturas V3
+ Servidores de Chave
+
+ ID da Chave
+ Criação
+ Expiração
+ Uso
+ Tamanho da Chave
+ ID do Usuário Principal
+
+ Nome
+ Comentário
+ Email
+
+ Selecionar
+ 1 Selecionada
+ Selecionada
+
+ <desconhecido>
+ <ninguém>
+ <sem chave>
+ -
+ <não expira>
+
+
+ pode cifrar
+ pode assinar
+ expirada
+ não válida
+ %s servidor(es) de chave(s)
+ fingerprint
+
+
+ Nenhum
+ Assinar apenas
+ Cifrar apenas
+ Assinar e Cifrar
+ 15 segs
+
+ 1 min
+ 3 mins
+ 5 mins
+ 10 mins
+ 20 mins
+ 40 mins
+
+ 1 hora
+ 2 horas
+ 4 horas
+ 8 horas
+ até sair
+ Padrões do sistema
+
+ DSA
+ ElGamal
+ RSA
+
+ Abrir...
+ Salvar Como...
+
+ Selecionar Arquivo para Cifrar...
+ Selecionar Arquivo para Decifrar...
+ Abrir
+ Salvar
+
+ Advertência
+ Erro
+
+ Advertência: %s
+ Erro: %s
+
+
+ Chave errada.
+ Usando conteúdo do clipboard.
+ Chave salva.
+
+ Defina uma senha antes.
+ Não há gerenciador de arquivos compatível instalado.
+ A senha não confere.
+ Não são permitidas senhas vazias.
+ Cifragem simétrica.
+ %s
+
+ Tem certeza que deseja apagar\n%s?
+ Apagado com sucesso.
+ Selecione um arquivo primeiro.
+ Decifrado com sucesso.
+ Cifrado com sucesso.
+ Cifrado para clipboard com sucesso.
+
+ Insira a senha duas vezes.
+ Selecione pelo menos uma chave de cifragem.
+ Selecione pelo menos uma chave de cifragem ou uma chave de assinatura.
+ Especifique o arquivo a cifrar sobre.\nATENÇÃO! O arquivo, se existir, será sobrescrito!
+ Especifique o arquivo a decifrar sobre.\nATENÇÃO! O arquivo, se existir, será sobrescrito!
+ Especifique a conta de Email do Google que deseja adicionar.
+
+ Especifique o arquivo para importação de chaves. (.asc or .gpg)
+
+ Especifique o arquivo de exportação.\nATENÇÃO! O arquivo, se existir, será sobrescrito!
+ Especifique o arquivo de exportação.\nATENÇÃO! Você está exportando suas chaves PRIVADAS (SECRETAS).\nATENÇÃO! O arquivo, se existir, será sobrescrito.
+ Você realmente deseja apagar a chave \'%s\'?\nEssa ação não pode ser desfeita!
+ Você realmente deseja apagar a chave PRIVADA \'%s\'?\nEssa ação não pode ser desfeita!
+ Adicionada(s) com sucesso %1$s chave(s) e atualizada(s) %2$s chave(s).
+
+ Adicionada(s) %s chave(s) com sucesso.
+ Atualizada(s) %s chaves(s) com sucesso.
+ Nenhuma chave adicionada ou atualizada.
+ 1 chave exportada com sucesso.
+ %s chaves exportadas com sucesso.
+ Nenhuma chave exportada.
+
+ Nota: apenas as sub-chaves suportam ElGamal, e para ElGamal se usuára o tamanho mais próximo a 1536, 2048, 3072, 4096, ou 8192.
+ Não se pode encontrar a chave %08X.
+ %s chave(s) encontrada(s).
+ Assinatura desconhecida, toque para buscar a chave.
+ A edição de chaves ainda está na versão beta.
+
+
+ %s chave(s) secreta(s) ignoradas. Provavelmente foram exportadas com a opção\n --export-secret-subkeys\nCertifique-se de exporta com a opção\n --export-secret-keys
+ Chave %s desconhecida, você gostaria de procurá-la em um servidor de chaves?
+
+
+ erro ao apagar \'%s\'
+ arquivo não encontrado
+ não foi encontrado uma chave secreta adequada
+
+ não foi encontrado tipo de cifragem conhecido
+ armazenamento externo não disponível
+ conta \'%s\' não encontrada
+ sem permissões para ler a conta
+ falha ao adicionar a conta \'%s\'
+ email inválido \'%s\'
+
+ o tamanho da chave deve ser pelo menos 512bit
+ a chave primária não pode ser do tipo ElGamal
+ algoritmo selecionado desconhecido
+ é necessário informar um nome
+ é necessário informar um endereço de email
+ é necessário pelo menos um id de usuário
+
+ id de usuário principal não pode ser vazio
+ é necessário pelo menos uma chave primária
+ data de expiração deve ser após a data de criação
+ não foram inseridos chave(s) de cifragem ou senha
+ falha na assinatura
+ senha não inserida
+
+ chave para assinatura não inserida
+ dados a serem cifrados inválidos
+ dados corrompidos
+ não foi encontrado um pacote com criptografia simétrica
+ senha inválida
+ erro ao salvar chave(s)
+
+ não foi possível extrair chave privada
+
+
+ pronto.
+ inicializando...
+ salvando...
+ importando...
+
+ exportando...
+ criando chave, isso pode demorar um pouco...
+ criando chave...
+ preparando chave primária...
+ certificando chave primária...
+ criando anel de chave primária...
+
+ adicionando sub-chaves...
+ salvando anel de chaves...
+ importando chaves secretas...
+ importando chaves públicas...
+ recarregando chaves...
+ exportando chave...
+
+ exportando chaves...
+ extraindo chave de assinatura...
+ extraindo chave...
+ preparando fluxos...
+ cifrando dados...
+ decifrando dados...
+
+ preparando assinatura...
+ gerando assinatura...
+ processando assinatura...
+ verificando assinatura...
+ assinando...
+ carregando dados...
+
+ buscando chave...
+ descompactando dados...
+ verificando integridade...
+ apagando \'%s\' de forma segura...
+ buscando...
+ buscando %s...
+
+
+ Ler detalhes de chaves do APG.
+ Ler detalhes de chaves públicas e privadas salvas no APG, tais como ID da chave e ID do usuário. As chaves NÃO podem ser lidas.
+
+
+ Cifrar
+ Decifrar
+
+ Importar Chaves Públicas
+ Importar Chaves Privadas
+
+ Buscar Chaves Públicas
+ Buscar Chaves Privadas
+ Filter: \"%s\"
+
+
+ rápido
+ lento
+ muito lento
+
+
+
+
+
+ Instale o leitor de emails K-9 para uma melhor integração. Ele suporta o APG para PGP/INLINE e permite cifragem e decifragem de emails diretamente.
+\n\nÉ recomendado o uso dos Gerenciadores de Arquivos OI ou ASTRO para ser possível a utilização do botão de buscar arquivos no APG.
+\n\nSão necessárias chaves para o APG. Importe-as pela opção do menu \"Gerir Chaves Públicas\" ou \"Gerir Chaves Privadas\" ou crie-as no menu \"Gerir Chaves Privadas\".
+\n\nVocê também pode adicionar uma conta GMail pela opção \"Adicionar Conta\", isso simplifica a decifragem de emails.
+\n\nVerifique as opções de menus para conhecer as funcionalides disponíveis.
+
+
+
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index df87ab61c..25a4e66df 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -206,6 +206,7 @@
- es
- it
- no
+ - pt
- sl
- zh
diff --git a/src/org/thialfihar/android/apg/Apg.java b/src/org/thialfihar/android/apg/Apg.java
index cf71185e1..0d61d4f42 100644
--- a/src/org/thialfihar/android/apg/Apg.java
+++ b/src/org/thialfihar/android/apg/Apg.java
@@ -1262,6 +1262,7 @@ public class Apg {
}
if( progress != null )
progress.setProgress(R.string.progress_preparingStreams, 5, 100);
+
// encrypt and compress input file content
PGPEncryptedDataGenerator cPk =
new PGPEncryptedDataGenerator(symmetricAlgorithm, true, new SecureRandom(),
@@ -1327,6 +1328,7 @@ public class Apg {
new Date(), new byte[1 << 16]);
if( progress != null )
progress.setProgress(R.string.progress_encrypting, 20, 100);
+
long done = 0;
int n = 0;
byte[] buffer = new byte[1 << 16];
diff --git a/src/org/thialfihar/android/apg/EncryptActivity.java b/src/org/thialfihar/android/apg/EncryptActivity.java
index 29af975bf..9ba71f570 100644
--- a/src/org/thialfihar/android/apg/EncryptActivity.java
+++ b/src/org/thialfihar/android/apg/EncryptActivity.java
@@ -18,6 +18,7 @@ package org.thialfihar.android.apg;
import java.io.ByteArrayOutputStream;
import java.io.File;
+import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.security.NoSuchAlgorithmException;
@@ -30,6 +31,7 @@ import org.bouncycastle2.openpgp.PGPPublicKey;
import org.bouncycastle2.openpgp.PGPPublicKeyRing;
import org.bouncycastle2.openpgp.PGPSecretKey;
import org.bouncycastle2.openpgp.PGPSecretKeyRing;
+import org.thialfihar.android.apg.provider.DataProvider;
import org.thialfihar.android.apg.utils.Choice;
import android.app.Dialog;
@@ -699,21 +701,30 @@ public class EncryptActivity extends BaseActivity {
out.close();
if (mEncryptTarget != Id.target.file) {
- if (useAsciiArmour) {
- String extraData = new String(((ByteArrayOutputStream)out).toByteArray());
- if (mGenerateSignature) {
- data.putString(Apg.EXTRA_SIGNATURE_TEXT, extraData);
- } else {
- data.putString(Apg.EXTRA_ENCRYPTED_MESSAGE, extraData);
- }
- } else {
- byte extraData[] = ((ByteArrayOutputStream)out).toByteArray();
- if (mGenerateSignature) {
- data.putByteArray(Apg.EXTRA_SIGNATURE_DATA, extraData);
- } else {
- data.putByteArray(Apg.EXTRA_ENCRYPTED_DATA, extraData);
- }
- }
+
+ if(out instanceof ByteArrayOutputStream) {
+ if (useAsciiArmour) {
+ String extraData = new String(((ByteArrayOutputStream)out).toByteArray());
+ if (mGenerateSignature) {
+ data.putString(Apg.EXTRA_SIGNATURE_TEXT, extraData);
+ } else {
+ data.putString(Apg.EXTRA_ENCRYPTED_MESSAGE, extraData);
+ }
+ } else {
+ byte extraData[] = ((ByteArrayOutputStream)out).toByteArray();
+ if (mGenerateSignature) {
+ data.putByteArray(Apg.EXTRA_SIGNATURE_DATA, extraData);
+ } else {
+ data.putByteArray(Apg.EXTRA_ENCRYPTED_DATA, extraData);
+ }
+ }
+ } else if(out instanceof FileOutputStream) {
+ String fileName = mDataDestination.getStreamFilename();
+ String uri = "content://" + DataProvider.AUTHORITY + "/data/" + fileName;
+ data.putString(Apg.EXTRA_RESULT_URI, uri);
+ } else {
+ throw new Apg.GeneralException("No output-data found.");
+ }
}
} catch (IOException e) {
error = "" + e;