ditch safeslinger
This commit is contained in:
parent
46a25451ba
commit
573ea47a40
4
.gitmodules
vendored
4
.gitmodules
vendored
|
@ -10,10 +10,6 @@
|
||||||
path = extern/minidns
|
path = extern/minidns
|
||||||
url = https://github.com/open-keychain/minidns.git
|
url = https://github.com/open-keychain/minidns.git
|
||||||
ignore = dirty
|
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"]
|
[submodule "OpenKeychain/src/test/resources/openpgp-interop"]
|
||||||
path = OpenKeychain/src/test/resources/openpgp-interop
|
path = OpenKeychain/src/test/resources/openpgp-interop
|
||||||
url = https://github.com/google/openpgp-interop
|
url = https://github.com/google/openpgp-interop
|
||||||
|
|
|
@ -62,7 +62,6 @@ dependencies {
|
||||||
implementation project(':extern:bouncycastle:prov')
|
implementation project(':extern:bouncycastle:prov')
|
||||||
implementation project(':extern:minidns')
|
implementation project(':extern:minidns')
|
||||||
implementation project(':KeybaseLib')
|
implementation project(':KeybaseLib')
|
||||||
implementation project(':safeslinger-exchange')
|
|
||||||
implementation project(':extern:MaterialChipsInput')
|
implementation project(':extern:MaterialChipsInput')
|
||||||
|
|
||||||
implementation "android.arch.work:work-runtime:1.0.0-alpha02"
|
implementation "android.arch.work:work-runtime:1.0.0-alpha02"
|
||||||
|
|
|
@ -166,16 +166,6 @@
|
||||||
<data android:mimeType="vnd.android.cursor.item/vnd.org.sufficientlysecure.keychain.key" />
|
<data android:mimeType="vnd.android.cursor.item/vnd.org.sufficientlysecure.keychain.key" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
<activity
|
|
||||||
android:name=".ui.SafeSlingerActivity"
|
|
||||||
android:configChanges="orientation|screenSize|keyboardHidden|keyboard"
|
|
||||||
android:label="@string/title_exchange_keys"
|
|
||||||
android:parentActivityName=".ui.MainActivity"
|
|
||||||
android:windowSoftInputMode="stateHidden">
|
|
||||||
<meta-data
|
|
||||||
android:name="android.support.PARENT_ACTIVITY"
|
|
||||||
android:value=".ui.MainActivity" />
|
|
||||||
</activity>
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".ui.EncryptFilesActivity"
|
android:name=".ui.EncryptFilesActivity"
|
||||||
android:configChanges="orientation|screenSize|keyboardHidden|keyboard"
|
android:configChanges="orientation|screenSize|keyboardHidden|keyboard"
|
||||||
|
|
|
@ -188,12 +188,6 @@ public class KeyListFragment extends RecyclerFragment<FlexibleAdapter<FlexibleKe
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void startSafeSlingerForKey(long masterKeyId) {
|
|
||||||
Intent safeSlingerIntent = new Intent(getActivity(), SafeSlingerActivity.class);
|
|
||||||
safeSlingerIntent.putExtra(SafeSlingerActivity.EXTRA_MASTER_KEY_ID, masterKeyId);
|
|
||||||
startActivityForResult(safeSlingerIntent, REQUEST_ACTION);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
View view = inflater.inflate(R.layout.key_list_fragment, container, false);
|
View view = inflater.inflate(R.layout.key_list_fragment, container, false);
|
||||||
|
|
|
@ -1,218 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (C) 2017 Schürmann & Breitmoser GbR
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
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<ImportKeyringParcel, ImportKeyResult> {
|
|
||||||
|
|
||||||
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<ParcelableKeyRing> mKeyList;
|
|
||||||
private HkpKeyserverAddress mKeyserver;
|
|
||||||
private CryptoOperationHelper<ImportKeyringParcel, ImportKeyResult> 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<ParcelableKeyRing> it = getSlingedKeys(data.getExtras());
|
|
||||||
|
|
||||||
// We parcel this iteratively into a file - anything we can
|
|
||||||
// display here, we should be able to import.
|
|
||||||
ParcelableFileCache<ParcelableKeyRing> 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<ParcelableKeyRing> getSlingedKeys(Bundle extras) {
|
|
||||||
ArrayList<ParcelableKeyRing> 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;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -28,7 +28,6 @@ import android.content.ClipboardManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.PorterDuff;
|
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
@ -40,15 +39,14 @@ import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.animation.AlphaAnimation;
|
import android.view.animation.AlphaAnimation;
|
||||||
import android.widget.ImageButton;
|
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import org.sufficientlysecure.keychain.Constants;
|
import org.sufficientlysecure.keychain.Constants;
|
||||||
import org.sufficientlysecure.keychain.R;
|
import org.sufficientlysecure.keychain.R;
|
||||||
import org.sufficientlysecure.keychain.livedata.GenericLiveData;
|
import org.sufficientlysecure.keychain.livedata.GenericLiveData;
|
||||||
import org.sufficientlysecure.keychain.model.SubKey.UnifiedKeyInfo;
|
import org.sufficientlysecure.keychain.model.SubKey.UnifiedKeyInfo;
|
||||||
import org.sufficientlysecure.keychain.ui.ViewKeyAdvActivity.ViewKeyAdvViewModel;
|
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.KeyFormattingUtils;
|
||||||
import org.sufficientlysecure.keychain.ui.util.Notify;
|
import org.sufficientlysecure.keychain.ui.util.Notify;
|
||||||
import org.sufficientlysecure.keychain.ui.util.Notify.Style;
|
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 vFingerprintClipboardButton = view.findViewById(R.id.view_key_action_fingerprint_clipboard);
|
||||||
View vKeyShareButton = view.findViewById(R.id.view_key_action_key_share);
|
View vKeyShareButton = view.findViewById(R.id.view_key_action_key_share);
|
||||||
View vKeyClipboardButton = view.findViewById(R.id.view_key_action_key_clipboard);
|
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 vKeySshShareButton = view.findViewById(R.id.view_key_action_key_ssh_share);
|
||||||
View vKeySshClipboardButton = view.findViewById(R.id.view_key_action_key_ssh_clipboard);
|
View vKeySshClipboardButton = view.findViewById(R.id.view_key_action_key_ssh_clipboard);
|
||||||
View vKeyUploadButton = view.findViewById(R.id.view_key_action_upload);
|
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));
|
vFingerprintShareButton.setOnClickListener(v -> shareFingerprint(false));
|
||||||
vFingerprintClipboardButton.setOnClickListener(v -> shareFingerprint(true));
|
vFingerprintClipboardButton.setOnClickListener(v -> shareFingerprint(true));
|
||||||
|
@ -113,7 +108,6 @@ public class ViewKeyAdvShareFragment extends Fragment {
|
||||||
|
|
||||||
vKeyClipboardButton.setOnClickListener(v -> ShareKeyHelper.shareKeyToClipboard(getActivity(), unifiedKeyInfo.master_key_id()));
|
vKeyClipboardButton.setOnClickListener(v -> ShareKeyHelper.shareKeyToClipboard(getActivity(), unifiedKeyInfo.master_key_id()));
|
||||||
|
|
||||||
vKeySafeSlingerButton.setOnClickListener(v -> startSafeSlinger());
|
|
||||||
vKeySshShareButton.setOnClickListener(v -> ShareKeyHelper.shareSshKey(getActivity(), unifiedKeyInfo.master_key_id()));
|
vKeySshShareButton.setOnClickListener(v -> ShareKeyHelper.shareSshKey(getActivity(), unifiedKeyInfo.master_key_id()));
|
||||||
|
|
||||||
vKeySshClipboardButton.setOnClickListener(v -> ShareKeyHelper.shareSshKeyToClipboard(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;
|
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) {
|
private void shareFingerprint(boolean toClipboard) {
|
||||||
Activity activity = getActivity();
|
Activity activity = getActivity();
|
||||||
if (activity == null || unifiedKeyInfo == null) {
|
if (activity == null || unifiedKeyInfo == null) {
|
||||||
|
|
|
@ -91,7 +91,6 @@ import org.sufficientlysecure.keychain.ui.ImportKeysProxyActivity;
|
||||||
import org.sufficientlysecure.keychain.ui.MainActivity;
|
import org.sufficientlysecure.keychain.ui.MainActivity;
|
||||||
import org.sufficientlysecure.keychain.ui.PassphraseDialogActivity;
|
import org.sufficientlysecure.keychain.ui.PassphraseDialogActivity;
|
||||||
import org.sufficientlysecure.keychain.ui.QrCodeViewActivity;
|
import org.sufficientlysecure.keychain.ui.QrCodeViewActivity;
|
||||||
import org.sufficientlysecure.keychain.ui.SafeSlingerActivity;
|
|
||||||
import org.sufficientlysecure.keychain.ui.ViewKeyAdvActivity;
|
import org.sufficientlysecure.keychain.ui.ViewKeyAdvActivity;
|
||||||
import org.sufficientlysecure.keychain.ui.ViewKeyKeybaseFragment;
|
import org.sufficientlysecure.keychain.ui.ViewKeyKeybaseFragment;
|
||||||
import org.sufficientlysecure.keychain.ui.base.BaseSecurityTokenActivity;
|
import org.sufficientlysecure.keychain.ui.base.BaseSecurityTokenActivity;
|
||||||
|
@ -267,11 +266,7 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity {
|
||||||
actionShareClipboard.setOnClickListener(v -> ShareKeyHelper.shareKeyToClipboard(this, masterKeyId));
|
actionShareClipboard.setOnClickListener(v -> ShareKeyHelper.shareKeyToClipboard(this, masterKeyId));
|
||||||
|
|
||||||
floatingActionButton.setOnClickListener(v -> {
|
floatingActionButton.setOnClickListener(v -> {
|
||||||
if (unifiedKeyInfo.has_any_secret()) {
|
scanQrCode();
|
||||||
startSafeSlinger();
|
|
||||||
} else {
|
|
||||||
scanQrCode();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
qrCodeLayout.setOnClickListener(v -> showQrCodeDialog());
|
qrCodeLayout.setOnClickListener(v -> showQrCodeDialog());
|
||||||
|
@ -592,12 +587,6 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity {
|
||||||
startActivityForResult(intent, 0);
|
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
|
* Load QR Code asynchronously and with a fade in animation
|
||||||
*/
|
*/
|
||||||
|
@ -778,8 +767,7 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity {
|
||||||
actionShare.setVisibility(View.VISIBLE);
|
actionShare.setVisibility(View.VISIBLE);
|
||||||
actionShareClipboard.setVisibility(View.VISIBLE);
|
actionShareClipboard.setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
showFab();
|
hideFab();
|
||||||
floatingActionButton.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.ic_repeat_white_24dp));
|
|
||||||
} else {
|
} else {
|
||||||
actionEncryptFile.setVisibility(View.VISIBLE);
|
actionEncryptFile.setVisibility(View.VISIBLE);
|
||||||
actionEncryptText.setVisibility(View.VISIBLE);
|
actionEncryptText.setVisibility(View.VISIBLE);
|
||||||
|
|
|
@ -134,23 +134,6 @@
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:background="?android:selectableItemBackground" />
|
android:background="?android:selectableItemBackground" />
|
||||||
|
|
||||||
<View
|
|
||||||
android:layout_width="1dip"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:gravity="right"
|
|
||||||
android:layout_marginBottom="8dp"
|
|
||||||
android:layout_marginTop="8dp"
|
|
||||||
android:background="?android:attr/listDivider" />
|
|
||||||
|
|
||||||
<ImageButton
|
|
||||||
android:id="@+id/view_key_action_key_safeslinger"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:padding="8dp"
|
|
||||||
android:src="@drawable/ic_repeat_grey_24dp"
|
|
||||||
android:layout_gravity="center_vertical"
|
|
||||||
android:background="?android:selectableItemBackground" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<View
|
<View
|
||||||
|
|
|
@ -8,12 +8,6 @@ include ':extern:minidns'
|
||||||
include ':extern:MaterialChipsInput:library'
|
include ':extern:MaterialChipsInput:library'
|
||||||
|
|
||||||
// Workaround for Android Gradle Plugin 2.0, as described in http://stackoverflow.com/a/36544850
|
// Workaround for Android Gradle Plugin 2.0, as described in http://stackoverflow.com/a/36544850
|
||||||
//include ':libkeychain'
|
|
||||||
include ':libkeychain'
|
|
||||||
project(':libkeychain').projectDir = new File('libkeychain')
|
|
||||||
//include ':extern:safeslinger-exchange:safeslinger-exchange'
|
|
||||||
include ':safeslinger-exchange'
|
|
||||||
project(':safeslinger-exchange').projectDir = new File('extern/safeslinger-exchange/safeslinger-exchange')
|
|
||||||
//include ':extern:openpgp-api-lib:openpgp-api'
|
//include ':extern:openpgp-api-lib:openpgp-api'
|
||||||
include ':openpgp-api-lib'
|
include ':openpgp-api-lib'
|
||||||
project(':openpgp-api-lib').projectDir = new File('extern/openpgp-api-lib/openpgp-api')
|
project(':openpgp-api-lib').projectDir = new File('extern/openpgp-api-lib/openpgp-api')
|
||||||
|
|
Loading…
Reference in a new issue