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" /> - - - -