diff options
11 files changed, 269 insertions, 126 deletions
diff --git a/OpenKeychain/src/main/AndroidManifest.xml b/OpenKeychain/src/main/AndroidManifest.xml index af09019e8..476964e37 100644 --- a/OpenKeychain/src/main/AndroidManifest.xml +++ b/OpenKeychain/src/main/AndroidManifest.xml @@ -89,7 +89,11 @@ android:name=".ui.CreateKeyActivity" android:configChanges="orientation|screenSize|keyboardHidden|keyboard" android:label="@string/title_create_key" - android:windowSoftInputMode="stateHidden" /> + android:windowSoftInputMode="stateHidden"> + <meta-data + android:name="android.support.PARENT_ACTIVITY" + android:value=".ui.KeyListActivity" /> + </activity> <activity android:name=".ui.EditKeyActivityOld" android:configChanges="orientation|screenSize|keyboardHidden|keyboard" diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java index fe1b7e688..3cf89f6a4 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java @@ -20,6 +20,7 @@ package org.sufficientlysecure.keychain.ui; import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; +import android.net.Uri; import android.os.Bundle; import android.os.Message; import android.os.Messenger; @@ -31,7 +32,11 @@ import android.view.View; import android.widget.ArrayAdapter; import android.widget.AutoCompleteTextView; import android.widget.Button; +import android.widget.CheckBox; import android.widget.EditText; +import android.widget.Spinner; + +import com.devspark.appmsg.AppMsg; import org.spongycastle.bcpg.sig.KeyFlags; import org.sufficientlysecure.keychain.Constants; @@ -48,7 +53,8 @@ public class CreateKeyActivity extends ActionBarActivity { AutoCompleteTextView mNameEdit; AutoCompleteTextView mEmailEdit; EditText mPassphraseEdit; - Button mCreateButton; + View mCreateButton; + CheckBox mUploadCheckbox; @Override protected void onCreate(Bundle savedInstanceState) { @@ -59,7 +65,8 @@ public class CreateKeyActivity extends ActionBarActivity { mNameEdit = (AutoCompleteTextView) findViewById(R.id.name); mEmailEdit = (AutoCompleteTextView) findViewById(R.id.email); mPassphraseEdit = (EditText) findViewById(R.id.passphrase); - mCreateButton = (Button) findViewById(R.id.create_key_button); + mCreateButton = findViewById(R.id.create_key_button); + mUploadCheckbox = (CheckBox) findViewById(R.id.create_key_upload); mEmailEdit.setThreshold(1); // Start working from first character mEmailEdit.setAdapter( @@ -134,10 +141,15 @@ public class CreateKeyActivity extends ActionBarActivity { // handle messages by standard KeychainIntentServiceHandler first super.handleMessage(message); - if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) { - CreateKeyActivity.this.setResult(RESULT_OK); - CreateKeyActivity.this.finish(); - } + // TODO +// if (mUploadCheckbox.isChecked()) { +// uploadKey(); +// } else { + if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) { + CreateKeyActivity.this.setResult(RESULT_OK); + CreateKeyActivity.this.finish(); + } +// } } }; @@ -166,6 +178,54 @@ public class CreateKeyActivity extends ActionBarActivity { startService(intent); } + private void uploadKey() { + // Send all information needed to service to upload key in other thread + Intent intent = new Intent(this, KeychainIntentService.class); + + intent.setAction(KeychainIntentService.ACTION_UPLOAD_KEYRING); + + // set data uri as path to keyring + // TODO +// Uri blobUri = KeychainContract.KeyRingData.buildPublicKeyRingUri(mDataUri); +// intent.setData(blobUri); + + // fill values for this action + Bundle data = new Bundle(); + + Spinner keyServer = (Spinner) findViewById(R.id.upload_key_keyserver); + String server = (String) keyServer.getSelectedItem(); + data.putString(KeychainIntentService.UPLOAD_KEY_SERVER, server); + + intent.putExtra(KeychainIntentService.EXTRA_DATA, data); + + // Message is received after uploading is done in KeychainIntentService + KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(this, + getString(R.string.progress_exporting), ProgressDialog.STYLE_HORIZONTAL) { + public void handleMessage(Message message) { + // handle messages by standard KeychainIntentServiceHandler first + super.handleMessage(message); + + if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) { + AppMsg.makeText(CreateKeyActivity.this, R.string.key_send_success, + AppMsg.STYLE_INFO).show(); + + CreateKeyActivity.this.setResult(RESULT_OK); + CreateKeyActivity.this.finish(); + } + } + }; + + // Create a new Messenger for the communication back + Messenger messenger = new Messenger(saveHandler); + intent.putExtra(KeychainIntentService.EXTRA_MESSENGER, messenger); + + // show progress dialog + saveHandler.showProgressDialog(this); + + // start service with intent + startService(intent); + } + /** * Checks if text of given EditText is not empty. If it is empty an error is * set and the EditText gets the focus. @@ -177,7 +237,7 @@ public class CreateKeyActivity extends ActionBarActivity { private static boolean isEditTextNotEmpty(Context context, EditText editText) { boolean output = true; if (editText.getText().toString().length() == 0) { - editText.setError("empty!"); + editText.setError(context.getString(R.string.create_key_empty)); editText.requestFocus(); output = false; } else { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFileFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFileFragment.java index f5d89d186..fa6d6fab5 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFileFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFileFragment.java @@ -58,7 +58,7 @@ public class EncryptFileFragment extends Fragment { public static final String ARG_FILENAME = "filename"; public static final String ARG_ASCII_ARMOR = "ascii_armor"; - private static final int RESULT_CODE_FILE = 0x00007003; + private static final int REQUEST_CODE_FILE = 0x00007003; private EncryptActivityInterface mEncryptInterface; @@ -109,10 +109,10 @@ public class EncryptFileFragment extends Fragment { mBrowse.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { if (Constants.KITKAT) { - FileHelper.openDocument(EncryptFileFragment.this, mInputUri, "*/*", RESULT_CODE_FILE); + FileHelper.openDocument(EncryptFileFragment.this, mInputUri, "*/*", REQUEST_CODE_FILE); } else { FileHelper.openFile(EncryptFileFragment.this, mFilename.getText().toString(), "*/*", - RESULT_CODE_FILE); + REQUEST_CODE_FILE); } } }); @@ -390,7 +390,7 @@ public class EncryptFileFragment extends Fragment { @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { - case RESULT_CODE_FILE: { + case REQUEST_CODE_FILE: { if (resultCode == Activity.RESULT_OK && data != null) { if (Constants.KITKAT) { mInputUri = data.getData(); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/FirstTimeActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/FirstTimeActivity.java index 4271b2d5a..5f3f170a1 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/FirstTimeActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/FirstTimeActivity.java @@ -22,16 +22,19 @@ import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.view.View; import android.view.Window; -import android.widget.Button; +import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.helper.Preferences; +import org.sufficientlysecure.keychain.util.Log; public class FirstTimeActivity extends ActionBarActivity { - Button mCreateKey; - Button mImportKey; - Button mSkipSetup; + View mCreateKey; + View mImportKey; + View mSkipSetup; + + public static final int REQUEST_CODE_CREATE_OR_IMPORT_KEY = 0x00007012; @Override protected void onCreate(Bundle savedInstanceState) { @@ -41,9 +44,9 @@ public class FirstTimeActivity extends ActionBarActivity { setContentView(R.layout.first_time_activity); - mCreateKey = (Button) findViewById(R.id.first_time_create_key); - mImportKey = (Button) findViewById(R.id.first_time_import_key); - mSkipSetup = (Button) findViewById(R.id.first_time_cancel); + mCreateKey = findViewById(R.id.first_time_create_key); + mImportKey = findViewById(R.id.first_time_import_key); + mSkipSetup = findViewById(R.id.first_time_cancel); mSkipSetup.setOnClickListener(new View.OnClickListener() { @Override @@ -57,7 +60,7 @@ public class FirstTimeActivity extends ActionBarActivity { public void onClick(View v) { Intent intent = new Intent(FirstTimeActivity.this, ImportKeysActivity.class); intent.setAction(ImportKeysActivity.ACTION_IMPORT_KEY_FROM_FILE_AND_RETURN); - startActivityForResult(intent, 1); + startActivityForResult(intent, REQUEST_CODE_CREATE_OR_IMPORT_KEY); } }); @@ -65,7 +68,7 @@ public class FirstTimeActivity extends ActionBarActivity { @Override public void onClick(View v) { Intent intent = new Intent(FirstTimeActivity.this, CreateKeyActivity.class); - startActivityForResult(intent, 1); + startActivityForResult(intent, REQUEST_CODE_CREATE_OR_IMPORT_KEY); } }); @@ -75,8 +78,12 @@ public class FirstTimeActivity extends ActionBarActivity { protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); - if (resultCode == RESULT_OK) { - finishSetup(); + if (requestCode == REQUEST_CODE_CREATE_OR_IMPORT_KEY) { + if (resultCode == RESULT_OK) { + finishSetup(); + } + } else { + Log.e(Constants.TAG, "No valid request code!"); } } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListActivity.java index 095762283..588d9ead6 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListActivity.java @@ -109,6 +109,8 @@ public class KeyListActivity extends DrawerActivity { return true; case R.id.menu_key_list_debug_first_time: + Preferences prefs = Preferences.getPreferences(this); + prefs.setFirstTime(true); Intent intent = new Intent(this, FirstTimeActivity.class); startActivity(intent); finish(); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java index 9d0a80406..5ace66f79 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java @@ -86,6 +86,7 @@ public class KeyListFragment extends LoaderFragment private Button mButtonEmptyCreate; private Button mButtonEmptyImport; + public static final int REQUEST_CODE_CREATE_OR_IMPORT_KEY = 0x00007012; /** * Load custom layout with StickyListView from library @@ -104,11 +105,8 @@ public class KeyListFragment extends LoaderFragment @Override public void onClick(View v) { - Intent intent = new Intent(getActivity(), EditKeyActivityOld.class); - intent.setAction(EditKeyActivityOld.ACTION_CREATE_KEY); - intent.putExtra(EditKeyActivityOld.EXTRA_GENERATE_DEFAULT_KEYS, true); - intent.putExtra(EditKeyActivityOld.EXTRA_USER_IDS, ""); // show user id view - startActivityForResult(intent, 0); + Intent intent = new Intent(getActivity(), CreateKeyActivity.class); + startActivityForResult(intent, REQUEST_CODE_CREATE_OR_IMPORT_KEY); } }); mButtonEmptyImport = (Button) view.findViewById(R.id.key_list_empty_button_import); @@ -117,8 +115,8 @@ public class KeyListFragment extends LoaderFragment @Override public void onClick(View v) { Intent intent = new Intent(getActivity(), ImportKeysActivity.class); - intent.setAction(ImportKeysActivity.ACTION_IMPORT_KEY_FROM_FILE); - startActivityForResult(intent, 0); + intent.setAction(ImportKeysActivity.ACTION_IMPORT_KEY_FROM_FILE_AND_RETURN); + startActivityForResult(intent, REQUEST_CODE_CREATE_OR_IMPORT_KEY); } }); diff --git a/OpenKeychain/src/main/res/layout/certify_key_activity.xml b/OpenKeychain/src/main/res/layout/certify_key_activity.xml index bb43fa805..1443ffd46 100644 --- a/OpenKeychain/src/main/res/layout/certify_key_activity.xml +++ b/OpenKeychain/src/main/res/layout/certify_key_activity.xml @@ -1,6 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:bootstrapbutton="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="wrap_content" android:layout_height="match_parent"> diff --git a/OpenKeychain/src/main/res/layout/create_key_activity.xml b/OpenKeychain/src/main/res/layout/create_key_activity.xml index 673f43084..050aa2b23 100644 --- a/OpenKeychain/src/main/res/layout/create_key_activity.xml +++ b/OpenKeychain/src/main/res/layout/create_key_activity.xml @@ -1,54 +1,82 @@ <?xml version="1.0" encoding="UTF-8"?> -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:padding="8dp" - android:orientation="vertical"> +<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="wrap_content" + android:layout_height="match_parent"> - <TextView + <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" - android:paddingBottom="4dp" - android:text="Enter Full Name, Email and Passphrase!" - android:textAppearance="?android:attr/textAppearanceMedium" /> + android:paddingLeft="16dp" + android:paddingRight="16dp" + android:orientation="vertical"> - <AutoCompleteTextView - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:inputType="textPersonName" - android:hint="Name" - android:ems="10" - android:id="@+id/name" /> + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingTop="16dp" + android:paddingBottom="8dp" + android:text="@string/create_key_text" + android:textAppearance="?android:attr/textAppearanceMedium" /> - <AutoCompleteTextView - android:id="@+id/email" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:hint="bla@example.com" - android:layout_weight="1" - android:ems="10" - android:inputType="textEmailAddress" /> + <AutoCompleteTextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginBottom="8dp" + android:inputType="textPersonName" + android:hint="@string/label_name" + android:ems="10" + android:id="@+id/name" /> - <EditText - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:inputType="textPassword" - android:hint="passphrase" - android:ems="10" - android:id="@+id/passphrase" - android:layout_gravity="center_horizontal" /> + <AutoCompleteTextView + android:id="@+id/email" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginBottom="8dp" + android:hint="@string/label_email" + android:ems="10" + android:inputType="textEmailAddress" /> + <EditText + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginBottom="8dp" + android:inputType="textPassword" + android:hint="@string/label_passphrase" + android:ems="10" + android:id="@+id/passphrase" + android:layout_gravity="center_horizontal" /> - <Button - android:id="@+id/create_key_button" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_weight="1" - android:layout_gravity="center_horizontal" - android:layout_margin="8dp" - android:text="@string/first_time_create_key" - android:background="@drawable/button_edgy" - android:drawableLeft="@drawable/ic_action_new_account" /> + <CheckBox + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginBottom="8dp" + android:text="@string/create_key_upload" + android:id="@+id/create_key_upload" /> + + <View + android:layout_width="match_parent" + android:layout_height="1dip" + android:background="?android:attr/listDivider" /> + + <TextView + android:id="@+id/create_key_button" + android:paddingLeft="8dp" + android:paddingRight="8dp" + android:textAppearance="?android:attr/textAppearanceMedium" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:text="@string/first_time_create_key" + android:minHeight="?android:attr/listPreferredItemHeight" + android:drawableRight="@drawable/ic_action_new_account" + android:drawablePadding="8dp" + android:gravity="center_vertical" + android:clickable="true" + style="@style/SelectableItem" /> + <View + android:layout_width="match_parent" + android:layout_height="1dip" + android:background="?android:attr/listDivider" /> -</LinearLayout>
\ No newline at end of file + </LinearLayout> +</ScrollView>
\ No newline at end of file diff --git a/OpenKeychain/src/main/res/layout/first_time_activity.xml b/OpenKeychain/src/main/res/layout/first_time_activity.xml index 514f34212..e1a67a077 100644 --- a/OpenKeychain/src/main/res/layout/first_time_activity.xml +++ b/OpenKeychain/src/main/res/layout/first_time_activity.xml @@ -2,18 +2,97 @@ <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:paddingTop="16dp" - android:paddingBottom="8dp"> + android:paddingTop="16dp"> <LinearLayout + android:id="@+id/first_time_buttons" android:layout_width="match_parent" - android:layout_height="match_parent" + android:layout_height="wrap_content" + android:paddingLeft="16dp" + android:paddingRight="16dp" + android:layout_alignParentBottom="true" android:orientation="vertical"> + <View + android:layout_width="match_parent" + android:layout_height="1dip" + android:background="?android:attr/listDivider" /> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal"> + + <TextView + android:id="@+id/first_time_create_key" + android:paddingLeft="8dp" + android:paddingRight="8dp" + android:textAppearance="?android:attr/textAppearanceMedium" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_weight="1" + android:text="@string/first_time_create_key" + android:minHeight="?android:attr/listPreferredItemHeight" + android:drawableRight="@drawable/ic_action_new_account" + android:drawablePadding="8dp" + android:gravity="center_vertical" + android:clickable="true" + style="@style/SelectableItem" /> + + <View + android:layout_width="1dp" + android:layout_height="match_parent" + android:layout_marginTop="8dp" + android:layout_marginBottom="8dp" + android:background="?android:attr/listDivider" /> + + <TextView + android:id="@+id/first_time_import_key" + android:paddingLeft="8dp" + android:paddingRight="8dp" + android:textAppearance="?android:attr/textAppearanceMedium" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_weight="1" + android:text="@string/first_time_import_key" + android:minHeight="?android:attr/listPreferredItemHeight" + android:drawableRight="@drawable/ic_action_download" + android:drawablePadding="8dp" + android:gravity="center_vertical" + android:clickable="true" + style="@style/SelectableItem" /> + </LinearLayout> + + <View + android:layout_width="match_parent" + android:layout_height="1dip" + android:background="?android:attr/listDivider" /> + + <TextView + android:id="@+id/first_time_cancel" + android:paddingLeft="8dp" + android:paddingRight="8dp" + android:textAppearance="?android:attr/textAppearanceMedium" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/first_time_skip" + android:minHeight="?android:attr/listPreferredItemHeight" + android:gravity="center" + android:clickable="true" + style="@style/SelectableItem" + android:layout_gravity="center_horizontal" /> + + </LinearLayout> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical" + android:layout_above="@+id/first_time_buttons"> + <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginLeft="8dp" android:textAppearance="?android:attr/textAppearanceLarge" android:text="@string/app_name" android:drawableLeft="@drawable/ic_launcher" @@ -23,12 +102,15 @@ <ImageView android:layout_width="wrap_content" - android:layout_marginLeft="64dp" - android:layout_marginRight="64dp" + android:layout_height="0dp" + android:layout_marginLeft="16dp" + android:layout_marginRight="16dp" android:layout_marginTop="16dp" android:layout_marginBottom="16dp" - android:layout_height="256dp" - android:src="@drawable/first_time_1" /> + android:adjustViewBounds="true" + android:src="@drawable/first_time_1" + android:layout_gravity="center_horizontal" + android:layout_weight="1" /> <TextView android:layout_width="wrap_content" @@ -38,51 +120,9 @@ android:textAppearance="?android:attr/textAppearanceMedium" android:text="@string/first_time_text1" android:layout_gravity="center_horizontal" - android:gravity="center_horizontal" /> + android:gravity="center_horizontal" + android:layout_marginBottom="16dp" /> - - </LinearLayout> - - <Button - android:id="@+id/first_time_cancel" - android:layout_alignParentBottom="true" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginBottom="8dp" - android:layout_marginLeft="8dp" - android:layout_marginRight="8dp" - android:text="@string/first_time_skip" - android:background="@drawable/button_edgy" /> - - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_above="@id/first_time_cancel" - android:orientation="horizontal"> - - <Button - android:id="@+id/first_time_create_key" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_gravity="center_horizontal" - android:layout_weight="1" - android:layout_marginLeft="8dp" - android:layout_marginRight="8dp" - android:text="@string/first_time_create_key" - android:background="@drawable/button_edgy" - android:drawableLeft="@drawable/ic_action_new_account" /> - - <Button - android:id="@+id/first_time_import_key" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_weight="1" - android:layout_gravity="center_horizontal" - android:layout_marginLeft="8dp" - android:layout_marginRight="8dp" - android:text="@string/first_time_import_key" - android:background="@drawable/button_edgy" - android:drawableLeft="@drawable/ic_action_download" /> </LinearLayout> diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml index d1a20813b..dd8ae0ac1 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -487,6 +487,11 @@ <item>Revoke Subkey</item> </string-array> + <!-- Create key --> + <string name="create_key_text">Enter Full Name, Email and Passphrase!</string> + <string name="create_key_upload">Upload key to keyserver</string> + <string name="create_key_empty">This field is required</string> + <!-- Navigation Drawer --> <string name="nav_keys">Keys</string> <string name="nav_encrypt">Sign and Encrypt</string> diff --git a/extern/spongycastle b/extern/spongycastle -Subproject 41ef8b1f539dd3d8748865d68a34ed307f699ee +Subproject a68ebd1ffc5af880903b2905c17e4f6ac0f1398 |