Merge branch 'master' of github.com:openpgp-keychain/openpgp-keychain

This commit is contained in:
Dominik Schürmann 2014-03-25 19:11:32 +01:00
commit 7111a4265d
32 changed files with 79 additions and 146 deletions

View File

@ -139,7 +139,7 @@ public class ExportHelper {
intent.putExtra(KeychainIntentService.EXTRA_DATA, data); intent.putExtra(KeychainIntentService.EXTRA_DATA, data);
// Message is received after exporting is done in ApgService // Message is received after exporting is done in KeychainIntentService
KeychainIntentServiceHandler exportHandler = new KeychainIntentServiceHandler(mActivity, KeychainIntentServiceHandler exportHandler = new KeychainIntentServiceHandler(mActivity,
mActivity.getString(R.string.progress_exporting), mActivity.getString(R.string.progress_exporting),
ProgressDialog.STYLE_HORIZONTAL, ProgressDialog.STYLE_HORIZONTAL,
@ -151,7 +151,7 @@ public class ExportHelper {
} }
}) { }) {
public void handleMessage(Message message) { public void handleMessage(Message message) {
// handle messages by standard ApgHandler first // handle messages by standard KeychainIntentServiceHandler first
super.handleMessage(message); super.handleMessage(message);
if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) { if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) {

View File

@ -38,7 +38,7 @@ import java.util.List;
import java.util.UUID; import java.util.UUID;
public class KeychainServiceBlobProvider extends ContentProvider { public class KeychainServiceBlobProvider extends ContentProvider {
private static final String STORE_PATH = Constants.Path.APP_DIR + "/ApgBlobs"; private static final String STORE_PATH = Constants.Path.APP_DIR + "/KeychainBlobs";
private KeychainServiceBlobDatabase mBlobDatabase = null; private KeychainServiceBlobDatabase mBlobDatabase = null;

View File

@ -855,7 +855,7 @@ public class KeychainIntentService extends IntentService
if (this.mIsCanceled) { if (this.mIsCanceled) {
return; return;
} }
Log.e(Constants.TAG, "ApgService Exception: ", e); Log.e(Constants.TAG, "KeychainIntentService Exception: ", e);
e.printStackTrace(); e.printStackTrace();
Bundle data = new Bundle(); Bundle data = new Bundle();

View File

@ -327,11 +327,11 @@ public class CertifyKeyActivity extends ActionBarActivity implements
intent.putExtra(KeychainIntentService.EXTRA_DATA, data); intent.putExtra(KeychainIntentService.EXTRA_DATA, data);
// Message is received after signing is done in ApgService // Message is received after signing is done in KeychainIntentService
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(this, KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(this,
getString(R.string.progress_signing), ProgressDialog.STYLE_SPINNER) { getString(R.string.progress_signing), ProgressDialog.STYLE_SPINNER) {
public void handleMessage(Message message) { public void handleMessage(Message message) {
// handle messages by standard ApgHandler first // handle messages by standard KeychainIntentServiceHandler first
super.handleMessage(message); super.handleMessage(message);
if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) { if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) {
@ -380,11 +380,11 @@ public class CertifyKeyActivity extends ActionBarActivity implements
intent.putExtra(KeychainIntentService.EXTRA_DATA, data); intent.putExtra(KeychainIntentService.EXTRA_DATA, data);
// Message is received after uploading is done in ApgService // Message is received after uploading is done in KeychainIntentService
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(this, KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(this,
getString(R.string.progress_exporting), ProgressDialog.STYLE_HORIZONTAL) { getString(R.string.progress_exporting), ProgressDialog.STYLE_HORIZONTAL) {
public void handleMessage(Message message) { public void handleMessage(Message message) {
// handle messages by standard ApgHandler first // handle messages by standard KeychainIntentServiceHandler first
super.handleMessage(message); super.handleMessage(message);
if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) { if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) {

View File

@ -443,8 +443,7 @@ public class DecryptActivity extends DrawerActivity {
getDecryptionKeyFromInputStream(); getDecryptionKeyFromInputStream();
// if we need a symmetric passphrase or a passphrase to use a secret key ask for it // if we need a symmetric passphrase or a passphrase to use a secret key ask for it
if (mSecretKeyId == Id.key.symmetric if (mAssumeSymmetricEncryption || PassphraseCacheService.getCachedPassphrase(this, mSecretKeyId) == null) {
|| PassphraseCacheService.getCachedPassphrase(this, mSecretKeyId) == null) {
showPassphraseDialog(); showPassphraseDialog();
} else { } else {
if (mDecryptTarget == Id.target.file) { if (mDecryptTarget == Id.target.file) {
@ -494,6 +493,7 @@ public class DecryptActivity extends DrawerActivity {
* TODO: Rework function, remove global variables * TODO: Rework function, remove global variables
*/ */
private void getDecryptionKeyFromInputStream() { private void getDecryptionKeyFromInputStream() {
mAssumeSymmetricEncryption = false;
InputStream inStream = null; InputStream inStream = null;
if (mContentUri != null) { if (mContentUri != null) {
try { try {
@ -517,13 +517,6 @@ public class DecryptActivity extends DrawerActivity {
Log.e(Constants.TAG, "File not found!", e); Log.e(Constants.TAG, "File not found!", e);
AppMsg.makeText(this, getString(R.string.error_file_not_found, e.getMessage()), AppMsg.makeText(this, getString(R.string.error_file_not_found, e.getMessage()),
AppMsg.STYLE_ALERT).show(); AppMsg.STYLE_ALERT).show();
} finally {
try {
if (inStream != null) {
inStream.close();
}
} catch (Exception e) {
}
} }
} else { } else {
inStream = new ByteArrayInputStream(mMessage.getText().toString().getBytes()); inStream = new ByteArrayInputStream(mMessage.getText().toString().getBytes());
@ -540,7 +533,6 @@ public class DecryptActivity extends DrawerActivity {
if (mSecretKeyId == Id.key.none) { if (mSecretKeyId == Id.key.none) {
throw new PgpGeneralException(getString(R.string.error_no_secret_key_found)); throw new PgpGeneralException(getString(R.string.error_no_secret_key_found));
} }
mAssumeSymmetricEncryption = false;
} catch (NoAsymmetricEncryptionException e) { } catch (NoAsymmetricEncryptionException e) {
if (inStream.markSupported()) { if (inStream.markSupported()) {
inStream.reset(); inStream.reset();
@ -553,6 +545,7 @@ public class DecryptActivity extends DrawerActivity {
mAssumeSymmetricEncryption = true; mAssumeSymmetricEncryption = true;
} }
} catch (Exception e) { } catch (Exception e) {
Log.e(Constants.TAG, "error while reading decryption key from input stream", e);
AppMsg.makeText(this, getString(R.string.error_message, e.getMessage()), AppMsg.makeText(this, getString(R.string.error_message, e.getMessage()),
AppMsg.STYLE_ALERT).show(); AppMsg.STYLE_ALERT).show();
} }
@ -638,11 +631,11 @@ public class DecryptActivity extends DrawerActivity {
intent.putExtra(KeychainIntentService.EXTRA_DATA, data); intent.putExtra(KeychainIntentService.EXTRA_DATA, data);
// Message is received after encrypting is done in ApgService // Message is received after encrypting is done in KeychainIntentService
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(this, KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(this,
getString(R.string.progress_decrypting), ProgressDialog.STYLE_HORIZONTAL) { getString(R.string.progress_decrypting), ProgressDialog.STYLE_HORIZONTAL) {
public void handleMessage(Message message) { public void handleMessage(Message message) {
// handle messages by standard ApgHandler first // handle messages by standard KeychainIntentServiceHandler first
super.handleMessage(message); super.handleMessage(message);
if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) { if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) {

View File

@ -180,7 +180,7 @@ public class EditKeyActivity extends ActionBarActivity {
serviceIntent.putExtra(KeychainIntentService.EXTRA_DATA, data); serviceIntent.putExtra(KeychainIntentService.EXTRA_DATA, data);
// Message is received after generating is done in ApgService // Message is received after generating is done in KeychainIntentService
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler( KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(
this, getResources().getQuantityString(R.plurals.progress_generating, 1), this, getResources().getQuantityString(R.plurals.progress_generating, 1),
ProgressDialog.STYLE_HORIZONTAL, true, ProgressDialog.STYLE_HORIZONTAL, true,
@ -197,7 +197,7 @@ public class EditKeyActivity extends ActionBarActivity {
@Override @Override
public void handleMessage(Message message) { public void handleMessage(Message message) {
// handle messages by standard ApgHandler first // handle messages by standard KeychainIntentServiceHandler first
super.handleMessage(message); super.handleMessage(message);
if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) { if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) {
@ -540,11 +540,11 @@ public class EditKeyActivity extends ActionBarActivity {
intent.putExtra(KeychainIntentService.EXTRA_DATA, data); intent.putExtra(KeychainIntentService.EXTRA_DATA, data);
// Message is received after saving is done in ApgService // Message is received after saving is done in KeychainIntentService
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(this, KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(this,
getString(R.string.progress_saving), ProgressDialog.STYLE_HORIZONTAL) { getString(R.string.progress_saving), ProgressDialog.STYLE_HORIZONTAL) {
public void handleMessage(Message message) { public void handleMessage(Message message) {
// handle messages by standard ApgHandler first // handle messages by standard KeychainIntentServiceHandler first
super.handleMessage(message); super.handleMessage(message);
if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) { if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) {

View File

@ -597,11 +597,11 @@ public class EncryptActivity extends DrawerActivity {
intent.putExtra(KeychainIntentService.EXTRA_DATA, data); intent.putExtra(KeychainIntentService.EXTRA_DATA, data);
// Message is received after encrypting is done in ApgService // Message is received after encrypting is done in KeychainIntentService
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(this, KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(this,
getString(R.string.progress_encrypting), ProgressDialog.STYLE_HORIZONTAL) { getString(R.string.progress_encrypting), ProgressDialog.STYLE_HORIZONTAL) {
public void handleMessage(Message message) { public void handleMessage(Message message) {
// handle messages by standard ApgHandler first // handle messages by standard KeychainIntentServiceHandler first
super.handleMessage(message); super.handleMessage(message);
if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) { if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) {

View File

@ -363,7 +363,7 @@ public class ImportKeysActivity extends DrawerActivity implements ActionBar.OnNa
* Import keys with mImportData * Import keys with mImportData
*/ */
public void importKeys() { public void importKeys() {
// Message is received after importing is done in ApgService // Message is received after importing is done in KeychainIntentService
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler( KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(
this, this,
getString(R.string.progress_importing), getString(R.string.progress_importing),

View File

@ -98,11 +98,11 @@ public class UploadKeyActivity extends ActionBarActivity {
intent.putExtra(KeychainIntentService.EXTRA_DATA, data); intent.putExtra(KeychainIntentService.EXTRA_DATA, data);
// Message is received after uploading is done in ApgService // Message is received after uploading is done in KeychainIntentService
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(this, KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(this,
getString(R.string.progress_exporting), ProgressDialog.STYLE_HORIZONTAL) { getString(R.string.progress_exporting), ProgressDialog.STYLE_HORIZONTAL) {
public void handleMessage(Message message) { public void handleMessage(Message message) {
// handle messages by standard ApgHandler first // handle messages by standard KeychainIntentServiceHandler first
super.handleMessage(message); super.handleMessage(message);
if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) { if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) {

View File

@ -87,11 +87,11 @@ public class DeleteFileDialogFragment extends DialogFragment {
false, false,
null); null);
// Message is received after deleting is done in ApgService // Message is received after deleting is done in KeychainIntentService
KeychainIntentServiceHandler saveHandler = KeychainIntentServiceHandler saveHandler =
new KeychainIntentServiceHandler(activity, deletingDialog) { new KeychainIntentServiceHandler(activity, deletingDialog) {
public void handleMessage(Message message) { public void handleMessage(Message message) {
// handle messages by standard ApgHandler first // handle messages by standard KeychainIntentHandler first
super.handleMessage(message); super.handleMessage(message);
if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) { if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) {

View File

@ -256,11 +256,11 @@ public class SectionView extends LinearLayout implements OnClickListener, Editor
} }
}); });
// Message is received after generating is done in ApgService // Message is received after generating is done in KeychainIntentService
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(mActivity, KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(mActivity,
mGeneratingDialog) { mGeneratingDialog) {
public void handleMessage(Message message) { public void handleMessage(Message message) {
// handle messages by standard ApgHandler first // handle messages by standard KeychainIntentServiceHandler first
super.handleMessage(message); super.handleMessage(message);
if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) { if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) {

View File

@ -72,7 +72,8 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical"
android:paddingLeft="16dp"> android:paddingLeft="16dp"
android:paddingRight="4dip">
<TextView <TextView
android:id="@+id/mainUserId" android:id="@+id/mainUserId"
@ -314,4 +315,4 @@
bootstrapbutton:bb_type="info"/> bootstrapbutton:bb_type="info"/>
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
</ScrollView> </ScrollView>

View File

@ -15,9 +15,8 @@
</ul> </ul>
<h2>Developers APG 1.x</h2> <h2>Developers APG 1.x</h2>
<ul> <ul>
<li>'Thialfihar' (Lead developer)</li> <li>Thialfihar (Lead developer)</li>
<li>'Senecaso' (QRCode, sign key, upload key)</li> <li>'Senecaso' (QRCode, sign key, upload key)</li>
<li>Oliver Runge</li>
<li>Markus Doits</li> <li>Markus Doits</li>
</ul> </ul>
<h2>Libraries</h2> <h2>Libraries</h2>
@ -38,8 +37,6 @@
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li> <a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li>
<li> <li>
<a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li> <a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li>
<li>Icons from <a href="http://rrze-icon-set.berlios.de/">RRZE Icon Set</a> (Creative Commons Attribution Share-Alike licence 3.0)</li>
<li>Icons from <a href="http://tango.freedesktop.org/">Tango Icon Set</a> (Public Domain)</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -15,9 +15,8 @@
</ul> </ul>
<h2>Entwickler APG 1.x</h2> <h2>Entwickler APG 1.x</h2>
<ul> <ul>
<li>'Thialfihar' (Leitender Entwickler)</li> <li>Thialfihar (Leitender Entwickler)</li>
<li>'Senecaso' (QR-Code, Schlüssel signtieren, Schlüssel hochladen)</li> <li>'Senecaso' (QR-Code, Schlüssel signtieren, Schlüssel hochladen)</li>
<li>Oliver Runge</li>
<li>Markus Doits</li> <li>Markus Doits</li>
</ul> </ul>
<h2>Bibliotheken</h2> <h2>Bibliotheken</h2>
@ -38,8 +37,6 @@
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache Lizenz v2)</li> <a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache Lizenz v2)</li>
<li> <li>
<a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Bibliothek</a> (Apache Lizenz v2)</li> <a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Bibliothek</a> (Apache Lizenz v2)</li>
<li>Icons von <a href="http://rrze-icon-set.berlios.de/">RRZE Icon Set</a> (Creative Commons Attribution Share-Alike Lizenz 3.0)</li>
<li>Icons von <a href="http://tango.freedesktop.org/">Tango Icon Set</a> (Public Domain)</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -15,9 +15,8 @@
</ul> </ul>
<h2>Developers APG 1.x</h2> <h2>Developers APG 1.x</h2>
<ul> <ul>
<li>'Thialfihar' (Lead developer)</li> <li>Thialfihar (Lead developer)</li>
<li>'Senecaso' (QRCode, sign key, upload key)</li> <li>'Senecaso' (QRCode, sign key, upload key)</li>
<li>Oliver Runge</li>
<li>Markus Doits</li> <li>Markus Doits</li>
</ul> </ul>
<h2>Libraries</h2> <h2>Libraries</h2>
@ -38,8 +37,6 @@
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li> <a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li>
<li> <li>
<a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li> <a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li>
<li>Icons from <a href="http://rrze-icon-set.berlios.de/">RRZE Icon Set</a> (Creative Commons Attribution Share-Alike licence 3.0)</li>
<li>Icons from <a href="http://tango.freedesktop.org/">Tango Icon Set</a> (Public Domain)</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -15,9 +15,8 @@
</ul> </ul>
<h2>Developers APG 1.x</h2> <h2>Developers APG 1.x</h2>
<ul> <ul>
<li>'Thialfihar' (Lead developer)</li> <li>Thialfihar (Lead developer)</li>
<li>'Senecaso' (QRCode, sign key, upload key)</li> <li>'Senecaso' (QRCode, sign key, upload key)</li>
<li>Oliver Runge</li>
<li>Markus Doits</li> <li>Markus Doits</li>
</ul> </ul>
<h2>Libraries</h2> <h2>Libraries</h2>
@ -38,8 +37,6 @@
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li> <a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li>
<li> <li>
<a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li> <a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li>
<li>Icons from <a href="http://rrze-icon-set.berlios.de/">RRZE Icon Set</a> (Creative Commons Attribution Share-Alike licence 3.0)</li>
<li>Icons from <a href="http://tango.freedesktop.org/">Tango Icon Set</a> (Public Domain)</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -15,9 +15,8 @@
</ul> </ul>
<h2>Desarrolladores de APG 1.x</h2> <h2>Desarrolladores de APG 1.x</h2>
<ul> <ul>
<li>'Thialfihar' (Desarrollador principal)</li> <li>Thialfihar (Desarrollador principal)</li>
<li>'Senecaso' (Código QR, clave de firma, carga de clave)</li> <li>'Senecaso' (Código QR, clave de firma, carga de clave)</li>
<li>Oliver Runge</li>
<li>Markus Doits</li> <li>Markus Doits</li>
</ul> </ul>
<h2>Librerías</h2> <h2>Librerías</h2>
@ -38,8 +37,6 @@
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Licencia Apache v2)</li> <a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Licencia Apache v2)</li>
<li> <li>
<a href="https://github.com/johnkil/Android-AppMsg">Librería Android AppMsg</a> (Licencia Apache v2)</li> <a href="https://github.com/johnkil/Android-AppMsg">Librería Android AppMsg</a> (Licencia Apache v2)</li>
<li>Icons de <a href="http://rrze-icon-set.berlios.de/">RRZE Icon Set</a> (Creative Commons Attribution Compartir-Igual licencia 3.0)</li>
<li>Iconos de <a href="http://tango.freedesktop.org/">Tango Icon Set</a> (Dominio Público)</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -15,9 +15,8 @@
</ul> </ul>
<h2>Developers APG 1.x</h2> <h2>Developers APG 1.x</h2>
<ul> <ul>
<li>'Thialfihar' (Lead developer)</li> <li>Thialfihar (Lead developer)</li>
<li>'Senecaso' (QRCode, sign key, upload key)</li> <li>'Senecaso' (QRCode, sign key, upload key)</li>
<li>Oliver Runge</li>
<li>Markus Doits</li> <li>Markus Doits</li>
</ul> </ul>
<h2>Libraries</h2> <h2>Libraries</h2>
@ -38,8 +37,6 @@
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li> <a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li>
<li> <li>
<a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li> <a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li>
<li>Icons from <a href="http://rrze-icon-set.berlios.de/">RRZE Icon Set</a> (Creative Commons Attribution Share-Alike licence 3.0)</li>
<li>Icons from <a href="http://tango.freedesktop.org/">Tango Icon Set</a> (Public Domain)</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -15,9 +15,8 @@
</ul> </ul>
<h2>Les développeurs d'APG 1.x</h2> <h2>Les développeurs d'APG 1.x</h2>
<ul> <ul>
<li>« Thialfihar (développeur principal)</li> <li>Thialfihar (développeur principal)</li>
<li>« Senecaso » (Code QR, signer/téléverser la clef)</li> <li>« Senecaso » (Code QR, signer/téléverser la clef)</li>
<li>Oliver Runge</li>
<li>Markus Doits</li> <li>Markus Doits</li>
</ul> </ul>
<h2>Bibliothèques</h2> <h2>Bibliothèques</h2>
@ -38,8 +37,6 @@
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Licence Apache v2)</li> <a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Licence Apache v2)</li>
<li> <li>
<a href="https://github.com/johnkil/Android-AppMsg">Bibliothèque Android AppMsg</a> (Licence Apache v2)</li> <a href="https://github.com/johnkil/Android-AppMsg">Bibliothèque Android AppMsg</a> (Licence Apache v2)</li>
<li>Icônes du <a href="http://rrze-icon-set.berlios.de/">jeu d'icônes RRZE</a> (Licence Creative Commons Paternité - Partage des Conditions Initiales à l'Identique 3.0)</li>
<li>Icônes du <a href="http://tango.freedesktop.org/">jeu d'icônes Tango</a> (domaine public)</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -15,9 +15,8 @@
</ul> </ul>
<h2>Sviluppatori APG 1.x</h2> <h2>Sviluppatori APG 1.x</h2>
<ul> <ul>
<li>'Thialfihar' (Capo Sviluppatore)</li> <li>Thialfihar (Capo Sviluppatore)</li>
<li>'Senecaso' (QRCode, firma chiavi, caricamento chiavi)</li> <li>'Senecaso' (QRCode, firma chiavi, caricamento chiavi)</li>
<li>Oliver Runge</li>
<li>Markus Doits</li> <li>Markus Doits</li>
</ul> </ul>
<h2>Librerie</h2> <h2>Librerie</h2>
@ -38,8 +37,6 @@
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Licenza Apache v2)</li> <a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Licenza Apache v2)</li>
<li> <li>
<a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Licenza Apache v2)</li> <a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Licenza Apache v2)</li>
<li>Icone da <a href="http://rrze-icon-set.berlios.de/">RRZE Icon Set</a> (Licenza Creative Commons Attribution Share-Alike 3.0)</li>
<li>Icone da <a href="http://tango.freedesktop.org/">Tango Icon Set</a> (Pubblico Dominio)</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -15,9 +15,8 @@
</ul> </ul>
<h2>APG 1.xの開発者達</h2> <h2>APG 1.xの開発者達</h2>
<ul> <ul>
<li>'Thialfihar' (主任開発者)</li> <li>Thialfihar (主任開発者)</li>
<li>'Senecaso' (QRコード, 鍵署名, 鍵アップロード関係)</li> <li>'Senecaso' (QRコード, 鍵署名, 鍵アップロード関係)</li>
<li>Oliver Runge</li>
<li>Markus Doits</li> <li>Markus Doits</li>
</ul> </ul>
<h2>ライブラリ</h2> <h2>ライブラリ</h2>
@ -38,8 +37,6 @@
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li> <a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li>
<li> <li>
<a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li> <a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li>
<li>Icons from <a href="http://rrze-icon-set.berlios.de/">RRZE Icon Set</a> (Creative Commons Attribution Share-Alike licence 3.0)</li>
<li>Icons from <a href="http://tango.freedesktop.org/">Tango Icon Set</a> (パブリックドメイン)</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -15,9 +15,8 @@
</ul> </ul>
<h2>Developers APG 1.x</h2> <h2>Developers APG 1.x</h2>
<ul> <ul>
<li>'Thialfihar' (Lead developer)</li> <li>Thialfihar (Lead developer)</li>
<li>'Senecaso' (QRCode, sign key, upload key)</li> <li>'Senecaso' (QRCode, sign key, upload key)</li>
<li>Oliver Runge</li>
<li>Markus Doits</li> <li>Markus Doits</li>
</ul> </ul>
<h2>Libraries</h2> <h2>Libraries</h2>
@ -38,8 +37,6 @@
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li> <a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li>
<li> <li>
<a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li> <a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li>
<li>Icons from <a href="http://rrze-icon-set.berlios.de/">RRZE Icon Set</a> (Creative Commons Attribution Share-Alike licence 3.0)</li>
<li>Icons from <a href="http://tango.freedesktop.org/">Tango Icon Set</a> (Public Domain)</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -15,9 +15,8 @@
</ul> </ul>
<h2>Deweloperzy APG 1.x</h2> <h2>Deweloperzy APG 1.x</h2>
<ul> <ul>
<li>'Thialfihar' (Wiodacy deweloper)</li> <li>Thialfihar (Wiodacy deweloper)</li>
<li>'Senecaso' (kody QR, podpisy kluczy, wysyłanie kluczy)</li> <li>'Senecaso' (kody QR, podpisy kluczy, wysyłanie kluczy)</li>
<li>Oliver Runge</li>
<li>Markus Doits</li> <li>Markus Doits</li>
</ul> </ul>
<h2>Biblioteki</h2> <h2>Biblioteki</h2>
@ -38,8 +37,6 @@
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Licencja Apache v2)</li> <a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Licencja Apache v2)</li>
<li> <li>
<a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Licencja Apache v2)</li> <a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Licencja Apache v2)</li>
<li>Icons from <a href="http://rrze-icon-set.berlios.de/">RRZE Icon Set</a> (Licencja Uznanie autorstwa - Na tych samych warunkach 3.0 CC-BY-SA)</li>
<li>Icons from <a href="http://tango.freedesktop.org/">Tango Icon Set</a> (Domena Publiczna)</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -15,9 +15,8 @@
</ul> </ul>
<h2>Developers APG 1.x</h2> <h2>Developers APG 1.x</h2>
<ul> <ul>
<li>'Thialfihar' (Lead developer)</li> <li>Thialfihar (Lead developer)</li>
<li>'Senecaso' (QRCode, sign key, upload key)</li> <li>'Senecaso' (QRCode, sign key, upload key)</li>
<li>Oliver Runge</li>
<li>Markus Doits</li> <li>Markus Doits</li>
</ul> </ul>
<h2>Libraries</h2> <h2>Libraries</h2>
@ -38,8 +37,6 @@
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li> <a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li>
<li> <li>
<a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li> <a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li>
<li>Icons from <a href="http://rrze-icon-set.berlios.de/">RRZE Icon Set</a> (Creative Commons Attribution Share-Alike licence 3.0)</li>
<li>Icons from <a href="http://tango.freedesktop.org/">Tango Icon Set</a> (Public Domain)</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -15,9 +15,8 @@
</ul> </ul>
<h2>Разработчики APG 1.x</h2> <h2>Разработчики APG 1.x</h2>
<ul> <ul>
<li>'Thialfihar' (главный разработчик)</li> <li>Thialfihar (главный разработчик)</li>
<li>'Senecaso' (QR коды, подписание и загрузка ключей)</li> <li>'Senecaso' (QR коды, подписание и загрузка ключей)</li>
<li>Oliver Runge</li>
<li>Markus Doits</li> <li>Markus Doits</li>
</ul> </ul>
<h2>Компоненты</h2> <h2>Компоненты</h2>
@ -38,8 +37,6 @@
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li> <a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li>
<li> <li>
<a href="https://github.com/johnkil/Android-AppMsg">Библиотека Android AppMsg</a> (Apache License v2)</li> <a href="https://github.com/johnkil/Android-AppMsg">Библиотека Android AppMsg</a> (Apache License v2)</li>
<li>Иконки <a href="http://rrze-icon-set.berlios.de/">RRZE Icon Set</a> (Creative Commons Attribution Share-Alike licence 3.0)</li>
<li>Иконки <a href="http://tango.freedesktop.org/">Tango Icon Set</a> (Public Domain)</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -15,9 +15,8 @@
</ul> </ul>
<h2>Developers APG 1.x</h2> <h2>Developers APG 1.x</h2>
<ul> <ul>
<li>'Thialfihar' (Lead developer)</li> <li>Thialfihar (Lead developer)</li>
<li>'Senecaso' (QRCode, sign key, upload key)</li> <li>'Senecaso' (QRCode, sign key, upload key)</li>
<li>Oliver Runge</li>
<li>Markus Doits</li> <li>Markus Doits</li>
</ul> </ul>
<h2>Libraries</h2> <h2>Libraries</h2>
@ -38,8 +37,6 @@
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li> <a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li>
<li> <li>
<a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li> <a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li>
<li>Icons from <a href="http://rrze-icon-set.berlios.de/">RRZE Icon Set</a> (Creative Commons Attribution Share-Alike licence 3.0)</li>
<li>Icons from <a href="http://tango.freedesktop.org/">Tango Icon Set</a> (Public Domain)</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -15,9 +15,8 @@
</ul> </ul>
<h2>Geliştiriciler APG 1.x</h2> <h2>Geliştiriciler APG 1.x</h2>
<ul> <ul>
<li>'Thialfihar' (Baş geliştirici)</li> <li>Thialfihar (Baş geliştirici)</li>
<li>'Senecaso' (QR Kodu, anahtar imzalama, anahtar yükleme)</li> <li>'Senecaso' (QR Kodu, anahtar imzalama, anahtar yükleme)</li>
<li>Oliver Runge</li>
<li>Markus Doits</li> <li>Markus Doits</li>
</ul> </ul>
<h2>Kütüphaneler</h2> <h2>Kütüphaneler</h2>
@ -38,8 +37,6 @@
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li> <a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li>
<li> <li>
<a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li> <a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li>
<li>İkonlar <a href="http://rrze-icon-set.berlios.de/">RRZE Icon Set</a> (Creative Commons Attribution Share-Alike licence 3.0)</li>
<li>İkonlar <a href="http://tango.freedesktop.org/">Tango Icon Set</a> (Public Domain)</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -15,9 +15,8 @@
</ul> </ul>
<h2>Розробники APG 1.x</h2> <h2>Розробники APG 1.x</h2>
<ul> <ul>
<li>'Thialfihar' (основний розробник)</li> <li>Thialfihar (основний розробник)</li>
<li>'Senecaso' (штрих-код, підпис і завантаження ключів)</li> <li>'Senecaso' (штрих-код, підпис і завантаження ключів)</li>
<li>Олівер Ранж</li>
<li>Маркус Дойтс</li> <li>Маркус Дойтс</li>
</ul> </ul>
<h2>Бібліотеки</h2> <h2>Бібліотеки</h2>
@ -38,8 +37,6 @@
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (ліцензія Apache в.2)</li> <a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (ліцензія Apache в.2)</li>
<li> <li>
<a href="https://github.com/johnkil/Android-AppMsg">Бібліотека Android AppMsg Library</a> (Ліцензія Apache в. 2)</li> <a href="https://github.com/johnkil/Android-AppMsg">Бібліотека Android AppMsg Library</a> (Ліцензія Apache в. 2)</li>
<li>Піктограми із <a href="http://rrze-icon-set.berlios.de/">набору піктограм RRZE</a> (ліцензія Creative Commons - Із зазначенням авторства - Розповсюдження на тих самих умовах - версія 3.0)</li>
<li>Піктограми із <a href="http://tango.freedesktop.org/">набору піктограм Tango</a> (відкритий домен)</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -15,9 +15,8 @@
</ul> </ul>
<h2>Developers APG 1.x</h2> <h2>Developers APG 1.x</h2>
<ul> <ul>
<li>'Thialfihar' (Lead developer)</li> <li>Thialfihar (Lead developer)</li>
<li>'Senecaso' (QRCode, sign key, upload key)</li> <li>'Senecaso' (QRCode, sign key, upload key)</li>
<li>Oliver Runge</li>
<li>Markus Doits</li> <li>Markus Doits</li>
</ul> </ul>
<h2>Libraries</h2> <h2>Libraries</h2>
@ -38,8 +37,6 @@
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li> <a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li>
<li> <li>
<a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li> <a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li>
<li>Icons from <a href="http://rrze-icon-set.berlios.de/">RRZE Icon Set</a> (Creative Commons Attribution Share-Alike licence 3.0)</li>
<li>Icons from <a href="http://tango.freedesktop.org/">Tango Icon Set</a> (Public Domain)</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -15,9 +15,8 @@
</ul> </ul>
<h2>Developers APG 1.x</h2> <h2>Developers APG 1.x</h2>
<ul> <ul>
<li>'Thialfihar' (Lead developer)</li> <li>Thialfihar (Lead developer)</li>
<li>'Senecaso' (QRCode, sign key, upload key)</li> <li>'Senecaso' (QRCode, sign key, upload key)</li>
<li>Oliver Runge</li>
<li>Markus Doits</li> <li>Markus Doits</li>
</ul> </ul>
<h2>函式庫</h2> <h2>函式庫</h2>
@ -38,8 +37,6 @@
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li> <a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li>
<li> <li>
<a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li> <a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li>
<li>Icons from <a href="http://rrze-icon-set.berlios.de/">RRZE Icon Set</a> (Creative Commons Attribution Share-Alike licence 3.0)</li>
<li>Icons from <a href="http://tango.freedesktop.org/">Tango Icon Set</a> (Public Domain)</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -19,9 +19,8 @@ And don't add newlines before or after p tags because of transifex -->
</ul> </ul>
<h2>Developers APG 1.x</h2> <h2>Developers APG 1.x</h2>
<ul> <ul>
<li>'Thialfihar' (Lead developer)</li> <li>Thialfihar (Lead developer)</li>
<li>'Senecaso' (QRCode, sign key, upload key)</li> <li>'Senecaso' (QRCode, sign key, upload key)</li>
<li>Oliver Runge</li>
<li>Markus Doits</li> <li>Markus Doits</li>
</ul> </ul>
@ -35,8 +34,6 @@ And don't add newlines before or after p tags because of transifex -->
<li><a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (MIT X11 License)</li> <li><a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (MIT X11 License)</li>
<li><a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li> <li><a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li>
<li><a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li> <li><a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li>
<li>Icons from <a href="http://rrze-icon-set.berlios.de/">RRZE Icon Set</a> (Creative Commons Attribution Share-Alike licence 3.0)</li>
<li>Icons from <a href="http://tango.freedesktop.org/">Tango Icon Set</a> (Public Domain)</li>
</ul> </ul>
</body> </body>
</html> </html>

View File

@ -1,6 +1,6 @@
# OpenKeychain (for Android) # OpenKeychain (for Android)
OpenKeychain is an OpenPGP implementation for Android. OpenKeychain is an OpenPGP implementation for Android.
For a more detailed description and installation instructions go to http://www.openkeychain.org . For a more detailed description and installation instructions go to http://www.openkeychain.org .
### Travis CI Build Status ### Travis CI Build Status
@ -31,9 +31,9 @@ Development mailinglist at http://groups.google.com/d/forum/openpgp-keychain-dev
### Build with Gradle ### Build with Gradle
1. Have Android SDK "tools", "platform-tools", and "build-tools" directories in your PATH (http://developer.android.com/sdk/index.html) 1. Have Android SDK "tools", "platform-tools", and "build-tools" directories in your PATH (http://developer.android.com/sdk/index.html)
2. Open the Android SDK Manager (shell command: ``android``). 2. Open the Android SDK Manager (shell command: ``android``).
Expand the Tools directory and select "Android SDK Build-tools (Version 19.0.3)". Expand the Tools directory and select "Android SDK Build-tools (Version 19.0.3)".
Expand the Extras directory and install "Android Support Repository" Expand the Extras directory and install "Android Support Repository"
Select everything for the newest SDK (API-Level 19) Select everything for the newest SDK (API-Level 19)
3. Export ANDROID_HOME pointing to your Android SDK 3. Export ANDROID_HOME pointing to your Android SDK
4. Execute ``./gradlew build`` 4. Execute ``./gradlew build``
@ -59,11 +59,11 @@ I am using the newest [Android Studio](http://developer.android.com/sdk/installi
OpenKeychain provides two APIs, namely the Intent API and the Remote OpenPGP API. OpenKeychain provides two APIs, namely the Intent API and the Remote OpenPGP API.
The Intent API can be used without permissions to start OpenKeychain's activities for cryptographic operations, import of keys, etc. The Intent API can be used without permissions to start OpenKeychain's activities for cryptographic operations, import of keys, etc.
However, it always requires user input, so that no malicious application can use this API without user intervention. However, it always requires user input, so that no malicious application can use this API without user intervention.
The Remote OpenPGP API is more sophisticated and allows to to operations without user interaction in the background. The Remote OpenPGP API is more sophisticated and allows to to operations without user interaction in the background.
When utilizing this API, OpenKeychain asks the user on first use to grant access for the calling client application. When utilizing this API, OpenKeychain asks the user on first use to grant access for the calling client application.
More technical information and examples about these APIs can be found in the project's wiki: More technical information and examples about these APIs can be found in the project's wiki:
* [Intent API](https://github.com/openpgp-keychain/openpgp-keychain/wiki/Intent-API) * [Intent API](https://github.com/openpgp-keychain/openpgp-keychain/wiki/Intent-API)
* [Remote OpenPGP API](https://github.com/openpgp-keychain/openpgp-keychain/wiki/OpenPGP-API) * [Remote OpenPGP API](https://github.com/openpgp-keychain/openpgp-keychain/wiki/OpenPGP-API)
@ -110,7 +110,7 @@ see
### Gradle Build System ### Gradle Build System
We try to make our builds as [reproducible/deterministic](https://blog.torproject.org/blog/deterministic-builds-part-one-cyberwar-and-global-compromise) as possible. We try to make our builds as [reproducible/deterministic](https://blog.torproject.org/blog/deterministic-builds-part-one-cyberwar-and-global-compromise) as possible.
When changing build files or dependencies, respect the following requirements: When changing build files or dependencies, respect the following requirements:
* No precompiled libraries. All libraries should be provided as sourcecode in "libraries" folder (you never know what pre-compiled jar files really contain! The library files are currently directly commited, because git submodules/git subtree are too much of a hassle for new contributors. This could change in the future!) * No precompiled libraries. All libraries should be provided as sourcecode in "libraries" folder (you never know what pre-compiled jar files really contain! The library files are currently directly commited, because git submodules/git subtree are too much of a hassle for new contributors. This could change in the future!)
* No dependencies from Maven (also a soft requirement for inclusion in [F-Droid](https://f-droid.org)) * No dependencies from Maven (also a soft requirement for inclusion in [F-Droid](https://f-droid.org))
@ -180,59 +180,55 @@ Some parts (older parts and some libraries are Apache License v2, MIT X11 Licens
> it under the terms of the GNU General Public License as published by > it under the terms of the GNU General Public License as published by
> the Free Software Foundation, either version 3 of the License, or > the Free Software Foundation, either version 3 of the License, or
> (at your option) any later version. > (at your option) any later version.
> >
> This program is distributed in the hope that it will be useful, > This program is distributed in the hope that it will be useful,
> but WITHOUT ANY WARRANTY; without even the implied warranty of > but WITHOUT ANY WARRANTY; without even the implied warranty of
> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> GNU General Public License for more details. > GNU General Public License for more details.
> >
> You should have received a copy of the GNU General Public License > You should have received a copy of the GNU General Public License
> along with this program. If not, see <http://www.gnu.org/licenses/>. > along with this program. If not, see <http://www.gnu.org/licenses/>.
### Libraries ### Libraries
* SpongyCastle * SpongyCastle
https://github.com/rtyley/spongycastle https://github.com/rtyley/spongycastle
MIT X11 License MIT X11 License
* Android Support Library v4 * Android Support Library v4
http://developer.android.com/tools/support-library/index.html http://developer.android.com/tools/support-library/index.html
Apache License v2
* Android Support Library v7 'appcompat'
http://developer.android.com/tools/support-library/index.html
Apache License v2 Apache License v2
* HtmlTextView * Android Support Library v7 'appcompat'
https://github.com/dschuermann/html-textview http://developer.android.com/tools/support-library/index.html
Apache License v2 Apache License v2
* ZXing * HtmlTextView
https://github.com/zxing/zxing https://github.com/dschuermann/html-textview
Apache License v2 Apache License v2
* StickyListHeaders * ZXing
https://github.com/emilsjolander/StickyListHeaders https://github.com/zxing/zxing
Apache License v2 Apache License v2
* Android-Bootstrap * StickyListHeaders
https://github.com/Bearded-Hen/Android-Bootstrap https://github.com/emilsjolander/StickyListHeaders
Apache License v2
* Android-Bootstrap
https://github.com/Bearded-Hen/Android-Bootstrap
MIT License MIT License
* Android AppMsg * Android AppMsg
https://github.com/johnkil/Android-AppMsg https://github.com/johnkil/Android-AppMsg
Apache License v2 Apache License v2
### Images ### Images
* icon.svg * icon.svg
modified version of kgpg_key2_kopete.svgz modified version of kgpg_key2_kopete.svgz
* key.svg * Menu icons
http://rrze-icon-set.berlios.de/
Creative Commons Attribution Share-Alike licence 3.0
* Menu icons
http://developer.android.com/design/downloads/index.html#action-bar-icon-pack http://developer.android.com/design/downloads/index.html#action-bar-icon-pack