use final fragment superclass for dns

This commit is contained in:
Vincent Breitmoser 2015-03-06 16:49:40 +01:00
parent 088282483f
commit 73ba19460b
2 changed files with 19 additions and 214 deletions

View File

@ -17,37 +17,21 @@
package org.sufficientlysecure.keychain.ui.linked;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.graphics.PorterDuff;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.Message;
import android.os.Messenger;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.operations.results.LinkedVerifyResult;
import org.sufficientlysecure.keychain.operations.results.OperationResult;
import org.sufficientlysecure.keychain.pgp.WrappedUserAttribute;
import org.sufficientlysecure.keychain.pgp.linked.LinkedIdentity;
import org.sufficientlysecure.keychain.pgp.linked.RawLinkedIdentity;
import org.sufficientlysecure.keychain.pgp.linked.LinkedCookieResource;
import org.sufficientlysecure.keychain.pgp.linked.resources.DnsResource;
import org.sufficientlysecure.keychain.service.KeychainIntentService;
import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler;
import org.sufficientlysecure.keychain.service.SaveKeyringParcel;
import org.sufficientlysecure.keychain.ui.PassphraseDialogActivity;
import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.ui.util.Notify.Style;
import org.sufficientlysecure.keychain.util.FileHelper;
@ -56,38 +40,25 @@ import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
public class LinkedIdCreateDnsStep2Fragment extends Fragment {
public class LinkedIdCreateDnsStep2Fragment extends LinkedIdCreateFinalFragment {
private static final int REQUEST_CODE_OUTPUT = 0x00007007;
private static final int REQUEST_CODE_PASSPHRASE = 0x00007008;
public static final String DOMAIN = "domain", NONCE = "nonce", TEXT = "text";
LinkedIdWizard mLinkedIdWizard;
public static final String DOMAIN = "domain", TEXT = "text";
TextView mTextView;
ImageView mVerifyImage;
View mVerifyProgress;
TextView mVerifyStatus;
String mResourceDomain;
int mResourceNonce;
String mResourceString;
// This is a resource, set AFTER it has been verified
DnsResource mVerifiedResource = null;
/**
* Creates new instance of this fragment
*/
public static LinkedIdCreateDnsStep2Fragment newInstance
(String uri, int proofNonce, String proofText) {
LinkedIdCreateDnsStep2Fragment frag = new LinkedIdCreateDnsStep2Fragment();
Bundle args = new Bundle();
args.putInt(ARG_NONCE, proofNonce);
args.putString(DOMAIN, uri);
args.putInt(NONCE, proofNonce);
args.putString(TEXT, proofText);
frag.setArguments(args);
@ -95,30 +66,22 @@ public class LinkedIdCreateDnsStep2Fragment extends Fragment {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.linked_create_dns_fragment_step2, container, false);
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mResourceDomain = getArguments().getString(DOMAIN);
mResourceNonce = getArguments().getInt(NONCE);
mResourceString = getArguments().getString(TEXT);
view.findViewById(R.id.next_button).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startCertify();
}
});
}
view.findViewById(R.id.back_button).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mLinkedIdWizard.loadFragment(null, null, LinkedIdWizard.FRAG_ACTION_TO_LEFT);
}
});
@Override
protected View newView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.linked_create_dns_fragment_step2, container, false);
}
mVerifyImage = (ImageView) view.findViewById(R.id.verify_image);
mVerifyProgress = view.findViewById(R.id.verify_progress);
mVerifyStatus = (TextView) view.findViewById(R.id.verify_status);
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = super.onCreateView(inflater, container, savedInstanceState);
view.findViewById(R.id.button_send).setOnClickListener(new OnClickListener() {
@Override
@ -134,48 +97,15 @@ public class LinkedIdCreateDnsStep2Fragment extends Fragment {
}
});
view.findViewById(R.id.button_verify).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
proofVerify();
}
});
mTextView = (TextView) view.findViewById(R.id.linked_create_dns_text);
mTextView.setText(mResourceString);
setVerifyProgress(false, null);
mVerifyStatus.setText(R.string.linked_verify_pending);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mLinkedIdWizard = (LinkedIdWizard) getActivity();
}
public void setVerifyProgress(boolean on, Boolean success) {
mVerifyProgress.setVisibility(on ? View.VISIBLE : View.GONE);
mVerifyImage.setVisibility(on ? View.GONE : View.VISIBLE);
if (success == null) {
mVerifyStatus.setText(R.string.linked_verifying);
mVerifyImage.setImageResource(R.drawable.status_signature_unverified_cutout_24dp);
mVerifyImage.setColorFilter(getResources().getColor(R.color.tertiary_text_light),
PorterDuff.Mode.SRC_IN);
} else if (success) {
mVerifyStatus.setText(R.string.linked_verify_success);
mVerifyImage.setImageResource(R.drawable.status_signature_verified_cutout_24dp);
mVerifyImage.setColorFilter(getResources().getColor(R.color.android_green_dark),
PorterDuff.Mode.SRC_IN);
} else {
mVerifyStatus.setText(R.string.linked_verify_error);
mVerifyImage.setImageResource(R.drawable.status_signature_unknown_cutout_24dp);
mVerifyImage.setColorFilter(getResources().getColor(R.color.android_red_dark),
PorterDuff.Mode.SRC_IN);
}
LinkedCookieResource getResource() {
return DnsResource.createNew(mResourceDomain);
}
private void proofSend () {
@ -218,125 +148,6 @@ public class LinkedIdCreateDnsStep2Fragment extends Fragment {
}
}
public void proofVerify() {
setVerifyProgress(true, null);
final DnsResource resource = DnsResource.createNew(mResourceDomain);
new AsyncTask<Void,Void,LinkedVerifyResult>() {
@Override
protected LinkedVerifyResult doInBackground(Void... params) {
return resource.verify(mLinkedIdWizard.mFingerprint, mResourceNonce);
}
@Override
protected void onPostExecute(LinkedVerifyResult result) {
super.onPostExecute(result);
if (result.success()) {
setVerifyProgress(false, true);
mVerifiedResource = resource;
} else {
setVerifyProgress(false, false);
mVerifiedResource = resource;
// on error, show error message
result.createNotify(getActivity()).show();
}
}
}.execute();
}
public void startCertify() {
if (mVerifiedResource == null) {
Notify.showNotify(getActivity(), R.string.linked_need_verify, Style.ERROR);
return;
}
Intent intent = new Intent(getActivity(), PassphraseDialogActivity.class);
intent.putExtra(PassphraseDialogActivity.EXTRA_SUBKEY_ID, mLinkedIdWizard.mMasterKeyId);
startActivityForResult(intent, REQUEST_CODE_PASSPHRASE);
}
public void certifyLinkedIdentity (String passphrase) {
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(
getActivity(),
getString(R.string.progress_saving),
ProgressDialog.STYLE_HORIZONTAL,
true) {
public void handleMessage(Message message) {
// handle messages by standard KeychainIntentServiceHandler first
super.handleMessage(message);
if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) {
// get returned data bundle
Bundle returnData = message.getData();
if (returnData == null) {
return;
}
final OperationResult result =
returnData.getParcelable(OperationResult.EXTRA_RESULT);
if (result == null) {
return;
}
// if bad -> display here!
if (!result.success()) {
result.createNotify(getActivity()).show();
return;
}
result.createNotify(getActivity()).show();
// if good -> finish, return result to showkey and display there!
// Intent intent = new Intent();
// intent.putExtra(OperationResult.EXTRA_RESULT, result);
// getActivity().setResult(EditKeyActivity.RESULT_OK, intent);
// AffirmationCreateHttpsStep3Fragment frag =
// AffirmationCreateHttpsStep3Fragment.newInstance(
// mResourceDomain, mResourceNonce, mResourceString);
// mAffirmationWizard.loadFragment(null, frag, AffirmationWizard.FRAG_ACTION_TO_RIGHT);
}
}
};
SaveKeyringParcel skp =
new SaveKeyringParcel(mLinkedIdWizard.mMasterKeyId, mLinkedIdWizard.mFingerprint);
WrappedUserAttribute ua =
LinkedIdentity.fromResource(mVerifiedResource, mResourceNonce).toUserAttribute();
skp.mAddUserAttribute.add(ua);
// Send all information needed to service to import key in other thread
Intent intent = new Intent(getActivity(), KeychainIntentService.class);
intent.setAction(KeychainIntentService.ACTION_EDIT_KEYRING);
// fill values for this action
Bundle data = new Bundle();
data.putString(KeychainIntentService.EDIT_KEYRING_PASSPHRASE, passphrase);
data.putParcelable(KeychainIntentService.EDIT_KEYRING_PARCEL, skp);
intent.putExtra(KeychainIntentService.EXTRA_DATA, data);
// Create a new Messenger for the communication back
Messenger messenger = new Messenger(saveHandler);
intent.putExtra(KeychainIntentService.EXTRA_MESSENGER, messenger);
// show progress dialog
saveHandler.showProgressDialog(getActivity());
// start service with intent
getActivity().startService(intent);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
@ -348,15 +159,9 @@ public class LinkedIdCreateDnsStep2Fragment extends Fragment {
Uri uri = data.getData();
saveFile(uri);
break;
case REQUEST_CODE_PASSPHRASE:
if (resultCode == Activity.RESULT_OK && data != null) {
String passphrase =
data.getStringExtra(PassphraseDialogActivity.MESSAGE_DATA_PASSPHRASE);
certifyLinkedIdentity(passphrase);
}
break;
default:
super.onActivityResult(requestCode, resultCode, data);
}
super.onActivityResult(requestCode, resultCode, data);
}
}

View File

@ -33,7 +33,7 @@ public abstract class LinkedIdCreateFinalFragment extends Fragment {
public static final String ARG_NONCE = "nonce";
protected static final int REQUEST_CODE_PASSPHRASE = 0x00007008;
LinkedIdWizard mLinkedIdWizard;
private LinkedIdWizard mLinkedIdWizard;
private ImageView mVerifyImage;
private View mVerifyProgress;