diff --git a/.gitmodules b/.gitmodules
index fdc6dddb3..d12dc6223 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -10,10 +10,6 @@
path = extern/minidns
url = https://github.com/open-keychain/minidns.git
ignore = dirty
-[submodule "extern/safeslinger-exchange"]
- path = extern/safeslinger-exchange
- url = https://github.com/open-keychain/exchange-android
- ignore = dirty
[submodule "OpenKeychain/src/test/resources/openpgp-interop"]
path = OpenKeychain/src/test/resources/openpgp-interop
url = https://github.com/google/openpgp-interop
diff --git a/OpenKeychain/build.gradle b/OpenKeychain/build.gradle
index 8b4c4251d..010a9a929 100644
--- a/OpenKeychain/build.gradle
+++ b/OpenKeychain/build.gradle
@@ -62,7 +62,6 @@ dependencies {
implementation project(':extern:bouncycastle:prov')
implementation project(':extern:minidns')
implementation project(':KeybaseLib')
- implementation project(':safeslinger-exchange')
implementation project(':extern:MaterialChipsInput')
implementation "android.arch.work:work-runtime:1.0.0-alpha02"
diff --git a/OpenKeychain/src/main/AndroidManifest.xml b/OpenKeychain/src/main/AndroidManifest.xml
index 2d3ec5fc8..eb99d3ff6 100644
--- a/OpenKeychain/src/main/AndroidManifest.xml
+++ b/OpenKeychain/src/main/AndroidManifest.xml
@@ -166,16 +166,6 @@
-
-
-
.
- */
-
-package org.sufficientlysecure.keychain.ui;
-
-
-import java.io.IOException;
-import java.util.ArrayList;
-
-import android.annotation.TargetApi;
-import android.content.Intent;
-import android.graphics.PorterDuff;
-import android.os.Build;
-import android.os.Bundle;
-import android.view.View;
-import android.widget.ImageView;
-import android.widget.NumberPicker;
-
-import edu.cmu.cylab.starslinger.exchange.ExchangeActivity;
-import edu.cmu.cylab.starslinger.exchange.ExchangeConfig;
-import org.sufficientlysecure.keychain.Constants;
-import org.sufficientlysecure.keychain.R;
-import org.sufficientlysecure.keychain.keyimport.HkpKeyserverAddress;
-import org.sufficientlysecure.keychain.keyimport.ParcelableKeyRing;
-import org.sufficientlysecure.keychain.operations.ImportOperation;
-import org.sufficientlysecure.keychain.operations.results.ImportKeyResult;
-import org.sufficientlysecure.keychain.operations.results.OperationResult;
-import org.sufficientlysecure.keychain.daos.KeyRepository;
-import org.sufficientlysecure.keychain.daos.KeyRepository.NotFoundException;
-import org.sufficientlysecure.keychain.service.ImportKeyringParcel;
-import org.sufficientlysecure.keychain.ui.base.BaseActivity;
-import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper;
-import org.sufficientlysecure.keychain.ui.util.FormattingUtils;
-import org.sufficientlysecure.keychain.ui.util.Notify;
-import org.sufficientlysecure.keychain.util.ParcelableFileCache;
-import timber.log.Timber;
-
-
-@TargetApi(Build.VERSION_CODES.HONEYCOMB)
-public class SafeSlingerActivity extends BaseActivity
- implements CryptoOperationHelper.Callback {
-
- private static final int REQUEST_CODE_SAFE_SLINGER = 211;
-
- public static final String EXTRA_MASTER_KEY_ID = "master_key_id";
-
- private long mMasterKeyId;
- private int mSelectedNumber = 2;
-
- // for CryptoOperationHelper
- private ArrayList mKeyList;
- private HkpKeyserverAddress mKeyserver;
- private CryptoOperationHelper mOperationHelper;
- private KeyRepository keyRepository;
-
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- keyRepository = KeyRepository.create(this);
- mMasterKeyId = getIntent().getLongExtra(EXTRA_MASTER_KEY_ID, 0);
-
- NumberPicker picker = findViewById(R.id.safe_slinger_picker);
- picker.setMinValue(2);
- picker.setMaxValue(10);
- picker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
- @Override
- public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
- mSelectedNumber = newVal;
- }
- });
-
- ImageView buttonIcon = findViewById(R.id.safe_slinger_button_image);
- buttonIcon.setColorFilter(FormattingUtils.getColorFromAttr(this, R.attr.colorTertiaryText),
- PorterDuff.Mode.SRC_IN);
-
- View button = findViewById(R.id.safe_slinger_button);
- button.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- startExchange(mMasterKeyId, mSelectedNumber);
- }
- });
- }
-
- @Override
- protected void initLayout() {
- setContentView(R.layout.safe_slinger_activity);
- }
-
- private void startExchange(long masterKeyId, int number) {
- try {
- byte[] keyBlob = keyRepository.loadPublicKeyRingData(masterKeyId);
-
- Intent slingerIntent = new Intent(this, ExchangeActivity.class);
-
- slingerIntent.putExtra(ExchangeConfig.extra.NUM_USERS, number);
- slingerIntent.putExtra(ExchangeConfig.extra.USER_DATA, keyBlob);
- slingerIntent.putExtra(ExchangeConfig.extra.HOST_NAME, Constants.SAFESLINGER_SERVER);
- startActivityForResult(slingerIntent, REQUEST_CODE_SAFE_SLINGER);
- } catch (NotFoundException e) {
- Timber.e(e, "key for transfer not found");
- }
- }
-
-
- @Override
- public void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (mOperationHelper != null) {
- mOperationHelper.handleActivityResult(requestCode, resultCode, data);
- }
-
- if (requestCode == REQUEST_CODE_SAFE_SLINGER) {
- if (resultCode == ExchangeActivity.RESULT_EXCHANGE_CANCELED) {
- return;
- }
-
- Timber.d("importKeys started");
-
- // instead of giving the entries by Intent extra, cache them into a
- // file to prevent Java Binder problems on heavy imports
- // read FileImportCache for more info.
- try {
- // import exchanged keys
- ArrayList it = getSlingedKeys(data.getExtras());
-
- // We parcel this iteratively into a file - anything we can
- // display here, we should be able to import.
- ParcelableFileCache cache =
- new ParcelableFileCache<>(this, ImportOperation.CACHE_FILE_NAME);
- cache.writeCache(it.size(), it.iterator());
-
- mOperationHelper =
- new CryptoOperationHelper(1, this, this, R.string.progress_importing);
-
- mKeyList = null;
- mKeyserver = null;
- mOperationHelper.cryptoOperation();
- } catch (IOException e) {
- Timber.e(e, "Problem writing cache file");
- Notify.create(this, "Problem writing cache file!", Notify.Style.ERROR).show();
- }
- } else {
- // give everything else down to KeyListActivity!
- setResult(resultCode, data);
- finish();
- }
- }
-
- private static ArrayList getSlingedKeys(Bundle extras) {
- ArrayList list = new ArrayList<>();
-
- if (extras != null) {
- byte[] d;
- int i = 0;
- do {
- d = extras.getByteArray(ExchangeConfig.extra.MEMBER_DATA + i);
- if (d != null) {
- list.add(ParcelableKeyRing.createFromEncodedBytes(d));
- i++;
- }
- } while (d != null);
- }
-
- return list;
- }
-
- // CryptoOperationHelper.Callback functions
-
- @Override
- public ImportKeyringParcel createOperationInput() {
- return ImportKeyringParcel.createImportKeyringParcel(mKeyList, mKeyserver);
- }
-
- @Override
- public void onCryptoOperationSuccess(ImportKeyResult result) {
- Intent certifyIntent = new Intent(this, CertifyKeyActivity.class);
- certifyIntent.putExtra(CertifyKeyActivity.EXTRA_RESULT, result);
- certifyIntent.putExtra(CertifyKeyActivity.EXTRA_KEY_IDS, result.getImportedMasterKeyIds());
- certifyIntent.putExtra(CertifyKeyActivity.EXTRA_CERTIFY_KEY_ID, mMasterKeyId);
- startActivityForResult(certifyIntent, 0);
- }
-
- @Override
- public void onCryptoOperationCancelled() {
-
- }
-
- @Override
- public void onCryptoOperationError(ImportKeyResult result) {
- Bundle returnData = new Bundle();
- returnData.putParcelable(OperationResult.EXTRA_RESULT, result);
- Intent data = new Intent();
- data.putExtras(returnData);
- setResult(RESULT_OK, data);
- finish();
- }
-
- @Override
- public boolean onCryptoSetProgress(String msg, int progress, int max) {
- return false;
- }
-}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvShareFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvShareFragment.java
index 6f080c468..a705c783d 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvShareFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvShareFragment.java
@@ -28,7 +28,6 @@ import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
-import android.graphics.PorterDuff;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
@@ -40,15 +39,14 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AlphaAnimation;
-import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
+
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.livedata.GenericLiveData;
import org.sufficientlysecure.keychain.model.SubKey.UnifiedKeyInfo;
import org.sufficientlysecure.keychain.ui.ViewKeyAdvActivity.ViewKeyAdvViewModel;
-import org.sufficientlysecure.keychain.ui.util.FormattingUtils;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.ui.util.Notify.Style;
@@ -99,12 +97,9 @@ public class ViewKeyAdvShareFragment extends Fragment {
View vFingerprintClipboardButton = view.findViewById(R.id.view_key_action_fingerprint_clipboard);
View vKeyShareButton = view.findViewById(R.id.view_key_action_key_share);
View vKeyClipboardButton = view.findViewById(R.id.view_key_action_key_clipboard);
- ImageButton vKeySafeSlingerButton = view.findViewById(R.id.view_key_action_key_safeslinger);
View vKeySshShareButton = view.findViewById(R.id.view_key_action_key_ssh_share);
View vKeySshClipboardButton = view.findViewById(R.id.view_key_action_key_ssh_clipboard);
View vKeyUploadButton = view.findViewById(R.id.view_key_action_upload);
- vKeySafeSlingerButton.setColorFilter(FormattingUtils.getColorFromAttr(requireContext(), R.attr.colorTertiaryText),
- PorterDuff.Mode.SRC_IN);
vFingerprintShareButton.setOnClickListener(v -> shareFingerprint(false));
vFingerprintClipboardButton.setOnClickListener(v -> shareFingerprint(true));
@@ -113,7 +108,6 @@ public class ViewKeyAdvShareFragment extends Fragment {
vKeyClipboardButton.setOnClickListener(v -> ShareKeyHelper.shareKeyToClipboard(getActivity(), unifiedKeyInfo.master_key_id()));
- vKeySafeSlingerButton.setOnClickListener(v -> startSafeSlinger());
vKeySshShareButton.setOnClickListener(v -> ShareKeyHelper.shareSshKey(getActivity(), unifiedKeyInfo.master_key_id()));
vKeySshClipboardButton.setOnClickListener(v -> ShareKeyHelper.shareSshKeyToClipboard(getActivity(), unifiedKeyInfo.master_key_id()));
@@ -122,12 +116,6 @@ public class ViewKeyAdvShareFragment extends Fragment {
return view;
}
- private void startSafeSlinger() {
- Intent safeSlingerIntent = new Intent(getActivity(), SafeSlingerActivity.class);
- safeSlingerIntent.putExtra(SafeSlingerActivity.EXTRA_MASTER_KEY_ID, unifiedKeyInfo.master_key_id());
- startActivityForResult(safeSlingerIntent, 0);
- }
-
private void shareFingerprint(boolean toClipboard) {
Activity activity = getActivity();
if (activity == null || unifiedKeyInfo == null) {
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/keyview/ViewKeyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/keyview/ViewKeyActivity.java
index 6f013c34f..29ab5d785 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/keyview/ViewKeyActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/keyview/ViewKeyActivity.java
@@ -91,7 +91,6 @@ import org.sufficientlysecure.keychain.ui.ImportKeysProxyActivity;
import org.sufficientlysecure.keychain.ui.MainActivity;
import org.sufficientlysecure.keychain.ui.PassphraseDialogActivity;
import org.sufficientlysecure.keychain.ui.QrCodeViewActivity;
-import org.sufficientlysecure.keychain.ui.SafeSlingerActivity;
import org.sufficientlysecure.keychain.ui.ViewKeyAdvActivity;
import org.sufficientlysecure.keychain.ui.ViewKeyKeybaseFragment;
import org.sufficientlysecure.keychain.ui.base.BaseSecurityTokenActivity;
@@ -267,11 +266,7 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity {
actionShareClipboard.setOnClickListener(v -> ShareKeyHelper.shareKeyToClipboard(this, masterKeyId));
floatingActionButton.setOnClickListener(v -> {
- if (unifiedKeyInfo.has_any_secret()) {
- startSafeSlinger();
- } else {
- scanQrCode();
- }
+ scanQrCode();
});
qrCodeLayout.setOnClickListener(v -> showQrCodeDialog());
@@ -592,12 +587,6 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity {
startActivityForResult(intent, 0);
}
- private void startSafeSlinger() {
- Intent safeSlingerIntent = new Intent(this, SafeSlingerActivity.class);
- safeSlingerIntent.putExtra(SafeSlingerActivity.EXTRA_MASTER_KEY_ID, unifiedKeyInfo.master_key_id());
- startActivityForResult(safeSlingerIntent, 0);
- }
-
/**
* Load QR Code asynchronously and with a fade in animation
*/
@@ -778,8 +767,7 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity {
actionShare.setVisibility(View.VISIBLE);
actionShareClipboard.setVisibility(View.VISIBLE);
- showFab();
- floatingActionButton.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.ic_repeat_white_24dp));
+ hideFab();
} else {
actionEncryptFile.setVisibility(View.VISIBLE);
actionEncryptText.setVisibility(View.VISIBLE);
diff --git a/OpenKeychain/src/main/res/layout/view_key_adv_share_fragment.xml b/OpenKeychain/src/main/res/layout/view_key_adv_share_fragment.xml
index b144d0201..5d9e6cb75 100644
--- a/OpenKeychain/src/main/res/layout/view_key_adv_share_fragment.xml
+++ b/OpenKeychain/src/main/res/layout/view_key_adv_share_fragment.xml
@@ -134,23 +134,6 @@
android:layout_gravity="center_vertical"
android:background="?android:selectableItemBackground" />
-
-
-
-