mirror of
https://github.com/moparisthebest/open-keychain
synced 2024-11-24 01:32:16 -05:00
Experiments with fragments in decrypt activity
This commit is contained in:
parent
224e8a7554
commit
4cec2194e0
@ -25,12 +25,17 @@ import android.os.Bundle;
|
|||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
import android.os.Messenger;
|
import android.os.Messenger;
|
||||||
|
import android.support.v4.app.Fragment;
|
||||||
|
import android.support.v4.view.PagerTabStrip;
|
||||||
|
import android.support.v4.view.ViewPager;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
import android.view.animation.AnimationUtils;
|
import android.view.animation.AnimationUtils;
|
||||||
import android.widget.*;
|
import android.widget.*;
|
||||||
|
|
||||||
import com.beardedhen.androidbootstrap.BootstrapButton;
|
import com.beardedhen.androidbootstrap.BootstrapButton;
|
||||||
import com.devspark.appmsg.AppMsg;
|
import com.devspark.appmsg.AppMsg;
|
||||||
|
|
||||||
import org.openintents.openpgp.OpenPgpSignatureResult;
|
import org.openintents.openpgp.OpenPgpSignatureResult;
|
||||||
import org.spongycastle.openpgp.PGPPublicKeyRing;
|
import org.spongycastle.openpgp.PGPPublicKeyRing;
|
||||||
import org.sufficientlysecure.keychain.Constants;
|
import org.sufficientlysecure.keychain.Constants;
|
||||||
@ -49,6 +54,7 @@ import org.sufficientlysecure.keychain.provider.ProviderHelper;
|
|||||||
import org.sufficientlysecure.keychain.service.KeychainIntentService;
|
import org.sufficientlysecure.keychain.service.KeychainIntentService;
|
||||||
import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler;
|
import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler;
|
||||||
import org.sufficientlysecure.keychain.service.PassphraseCacheService;
|
import org.sufficientlysecure.keychain.service.PassphraseCacheService;
|
||||||
|
import org.sufficientlysecure.keychain.ui.adapter.PageTabStripAdapter;
|
||||||
import org.sufficientlysecure.keychain.ui.dialog.DeleteFileDialogFragment;
|
import org.sufficientlysecure.keychain.ui.dialog.DeleteFileDialogFragment;
|
||||||
import org.sufficientlysecure.keychain.ui.dialog.FileDialogFragment;
|
import org.sufficientlysecure.keychain.ui.dialog.FileDialogFragment;
|
||||||
import org.sufficientlysecure.keychain.ui.dialog.PassphraseDialogFragment;
|
import org.sufficientlysecure.keychain.ui.dialog.PassphraseDialogFragment;
|
||||||
@ -57,7 +63,7 @@ import org.sufficientlysecure.keychain.util.Log;
|
|||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
|
|
||||||
@SuppressLint("NewApi")
|
//@SuppressLint("NewApi")
|
||||||
public class DecryptActivity extends DrawerActivity {
|
public class DecryptActivity extends DrawerActivity {
|
||||||
|
|
||||||
/* Intents */
|
/* Intents */
|
||||||
@ -67,28 +73,30 @@ public class DecryptActivity extends DrawerActivity {
|
|||||||
/* EXTRA keys for input */
|
/* EXTRA keys for input */
|
||||||
public static final String EXTRA_TEXT = "text";
|
public static final String EXTRA_TEXT = "text";
|
||||||
|
|
||||||
|
public static final String EXTRA_SELECTED_TAB = "selected_tab";
|
||||||
|
|
||||||
private static final int RESULT_CODE_LOOKUP_KEY = 0x00007006;
|
private static final int RESULT_CODE_LOOKUP_KEY = 0x00007006;
|
||||||
private static final int RESULT_CODE_FILE = 0x00007003;
|
private static final int RESULT_CODE_FILE = 0x00007003;
|
||||||
|
|
||||||
private long mSignatureKeyId = 0;
|
private long mSignatureKeyId = 0;
|
||||||
|
|
||||||
private boolean mReturnResult = false;
|
// private boolean mReturnResult = false;
|
||||||
|
|
||||||
// TODO: replace signed only checks with something more intelligent
|
// TODO: replace signed only checks with something more intelligent
|
||||||
// PgpDecryptVerify should handle all automatically!!!
|
// PgpDecryptVerify should handle all automatically!!!
|
||||||
private boolean mSignedOnly = false;
|
private boolean mSignedOnly = false;
|
||||||
private boolean mAssumeSymmetricEncryption = false;
|
private boolean mAssumeSymmetricEncryption = false;
|
||||||
|
|
||||||
private EditText mMessage = null;
|
// private EditText mMessage = null;
|
||||||
private RelativeLayout mSignatureLayout = null;
|
private RelativeLayout mSignatureLayout = null;
|
||||||
private ImageView mSignatureStatusImage = null;
|
private ImageView mSignatureStatusImage = null;
|
||||||
private TextView mUserId = null;
|
private TextView mUserId = null;
|
||||||
private TextView mUserIdRest = null;
|
private TextView mUserIdRest = null;
|
||||||
|
|
||||||
private ViewFlipper mSource = null;
|
// private ViewFlipper mSource = null;
|
||||||
private TextView mSourceLabel = null;
|
// private TextView mSourceLabel = null;
|
||||||
private ImageView mSourcePrevious = null;
|
// private ImageView mSourcePrevious = null;
|
||||||
private ImageView mSourceNext = null;
|
// private ImageView mSourceNext = null;
|
||||||
|
|
||||||
private int mDecryptTarget;
|
private int mDecryptTarget;
|
||||||
|
|
||||||
@ -107,45 +115,50 @@ public class DecryptActivity extends DrawerActivity {
|
|||||||
|
|
||||||
private FileDialogFragment mFileDialog;
|
private FileDialogFragment mFileDialog;
|
||||||
|
|
||||||
private boolean mDecryptImmediately = false;
|
// private boolean mDecryptImmediately = false;
|
||||||
|
|
||||||
private BootstrapButton mDecryptButton;
|
private BootstrapButton mDecryptButton;
|
||||||
|
|
||||||
|
ViewPager mViewPager;
|
||||||
|
PagerTabStrip mPagerTabStrip;
|
||||||
|
PageTabStripAdapter mTabsAdapter;
|
||||||
|
DecryptMessageFragment mMessageFragment;
|
||||||
|
DecryptFileFragment mFileFragment;
|
||||||
|
|
||||||
private void initView() {
|
private void initView() {
|
||||||
mSource = (ViewFlipper) findViewById(R.id.source);
|
// mSource = (ViewFlipper) findViewById(R.id.source);
|
||||||
mSourceLabel = (TextView) findViewById(R.id.sourceLabel);
|
// mSourceLabel = (TextView) findViewById(R.id.sourceLabel);
|
||||||
mSourcePrevious = (ImageView) findViewById(R.id.sourcePrevious);
|
// mSourcePrevious = (ImageView) findViewById(R.id.sourcePrevious);
|
||||||
mSourceNext = (ImageView) findViewById(R.id.sourceNext);
|
// mSourceNext = (ImageView) findViewById(R.id.sourceNext);
|
||||||
|
//
|
||||||
|
// mSourcePrevious.setClickable(true);
|
||||||
|
// mSourcePrevious.setOnClickListener(new OnClickListener() {
|
||||||
|
// public void onClick(View v) {
|
||||||
|
// mSource.setInAnimation(AnimationUtils.loadAnimation(DecryptActivity.this,
|
||||||
|
// R.anim.push_right_in));
|
||||||
|
// mSource.setOutAnimation(AnimationUtils.loadAnimation(DecryptActivity.this,
|
||||||
|
// R.anim.push_right_out));
|
||||||
|
// mSource.showPrevious();
|
||||||
|
// updateSource();
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
//
|
||||||
|
// mSourceNext.setClickable(true);
|
||||||
|
// OnClickListener nextSourceClickListener = new OnClickListener() {
|
||||||
|
// public void onClick(View v) {
|
||||||
|
// mSource.setInAnimation(AnimationUtils.loadAnimation(DecryptActivity.this,
|
||||||
|
// R.anim.push_left_in));
|
||||||
|
// mSource.setOutAnimation(AnimationUtils.loadAnimation(DecryptActivity.this,
|
||||||
|
// R.anim.push_left_out));
|
||||||
|
// mSource.showNext();
|
||||||
|
// updateSource();
|
||||||
|
// }
|
||||||
|
// };
|
||||||
|
// mSourceNext.setOnClickListener(nextSourceClickListener);
|
||||||
|
//
|
||||||
|
// mSourceLabel.setClickable(true);
|
||||||
|
// mSourceLabel.setOnClickListener(nextSourceClickListener);
|
||||||
|
|
||||||
mSourcePrevious.setClickable(true);
|
|
||||||
mSourcePrevious.setOnClickListener(new OnClickListener() {
|
|
||||||
public void onClick(View v) {
|
|
||||||
mSource.setInAnimation(AnimationUtils.loadAnimation(DecryptActivity.this,
|
|
||||||
R.anim.push_right_in));
|
|
||||||
mSource.setOutAnimation(AnimationUtils.loadAnimation(DecryptActivity.this,
|
|
||||||
R.anim.push_right_out));
|
|
||||||
mSource.showPrevious();
|
|
||||||
updateSource();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
mSourceNext.setClickable(true);
|
|
||||||
OnClickListener nextSourceClickListener = new OnClickListener() {
|
|
||||||
public void onClick(View v) {
|
|
||||||
mSource.setInAnimation(AnimationUtils.loadAnimation(DecryptActivity.this,
|
|
||||||
R.anim.push_left_in));
|
|
||||||
mSource.setOutAnimation(AnimationUtils.loadAnimation(DecryptActivity.this,
|
|
||||||
R.anim.push_left_out));
|
|
||||||
mSource.showNext();
|
|
||||||
updateSource();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
mSourceNext.setOnClickListener(nextSourceClickListener);
|
|
||||||
|
|
||||||
mSourceLabel.setClickable(true);
|
|
||||||
mSourceLabel.setOnClickListener(nextSourceClickListener);
|
|
||||||
|
|
||||||
mMessage = (EditText) findViewById(R.id.message);
|
|
||||||
mSignatureLayout = (RelativeLayout) findViewById(R.id.signature);
|
mSignatureLayout = (RelativeLayout) findViewById(R.id.signature);
|
||||||
mSignatureStatusImage = (ImageView) findViewById(R.id.ic_signature_status);
|
mSignatureStatusImage = (ImageView) findViewById(R.id.ic_signature_status);
|
||||||
mUserId = (TextView) findViewById(R.id.mainUserId);
|
mUserId = (TextView) findViewById(R.id.mainUserId);
|
||||||
@ -153,10 +166,10 @@ public class DecryptActivity extends DrawerActivity {
|
|||||||
|
|
||||||
// measure the height of the source_file view and set the message view's min height to that,
|
// measure the height of the source_file view and set the message view's min height to that,
|
||||||
// so it fills mSource fully... bit of a hack.
|
// so it fills mSource fully... bit of a hack.
|
||||||
View tmp = findViewById(R.id.sourceFile);
|
// View tmp = findViewById(R.id.sourceFile);
|
||||||
tmp.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
|
// tmp.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
|
||||||
int height = tmp.getMeasuredHeight();
|
// int height = tmp.getMeasuredHeight();
|
||||||
mMessage.setMinimumHeight(height);
|
// mMessage.setMinimumHeight(height);
|
||||||
|
|
||||||
mFilename = (EditText) findViewById(R.id.filename);
|
mFilename = (EditText) findViewById(R.id.filename);
|
||||||
mBrowse = (BootstrapButton) findViewById(R.id.btn_browse);
|
mBrowse = (BootstrapButton) findViewById(R.id.btn_browse);
|
||||||
@ -178,11 +191,11 @@ public class DecryptActivity extends DrawerActivity {
|
|||||||
mDeleteAfter = (CheckBox) findViewById(R.id.deleteAfterDecryption);
|
mDeleteAfter = (CheckBox) findViewById(R.id.deleteAfterDecryption);
|
||||||
|
|
||||||
// default: message source
|
// default: message source
|
||||||
mSource.setInAnimation(null);
|
// mSource.setInAnimation(null);
|
||||||
mSource.setOutAnimation(null);
|
// mSource.setOutAnimation(null);
|
||||||
while (mSource.getCurrentView().getId() != R.id.sourceMessage) {
|
// while (mSource.getCurrentView().getId() != R.id.sourceMessage) {
|
||||||
mSource.showNext();
|
// mSource.showNext();
|
||||||
}
|
// }
|
||||||
|
|
||||||
mDecryptButton = (BootstrapButton) findViewById(R.id.action_decrypt);
|
mDecryptButton = (BootstrapButton) findViewById(R.id.action_decrypt);
|
||||||
mDecryptButton.setOnClickListener(new OnClickListener() {
|
mDecryptButton.setOnClickListener(new OnClickListener() {
|
||||||
@ -191,6 +204,49 @@ public class DecryptActivity extends DrawerActivity {
|
|||||||
decryptClicked();
|
decryptClicked();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
mViewPager = (ViewPager) findViewById(R.id.decrypt_pager);
|
||||||
|
mPagerTabStrip = (PagerTabStrip) findViewById(R.id.decrypt_pager_tab_strip);
|
||||||
|
initPager();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final int PAGER_TAB_MESSAGE = 0;
|
||||||
|
private static final int PAGER_TAB_FILE = 1;
|
||||||
|
|
||||||
|
private void initPager() {
|
||||||
|
mTabsAdapter = new PageTabStripAdapter(this);
|
||||||
|
mViewPager.setAdapter(mTabsAdapter);
|
||||||
|
|
||||||
|
Bundle messageBundle = new Bundle();
|
||||||
|
mTabsAdapter.addTab(DecryptMessageFragment.class, messageBundle, getString(R.string.label_message));
|
||||||
|
|
||||||
|
Bundle fileBundle = new Bundle();
|
||||||
|
mTabsAdapter.addTab(DecryptFileFragment.class, fileBundle, getString(R.string.label_file));
|
||||||
|
|
||||||
|
// mPagerTabStrip.
|
||||||
|
getSupportFragmentManager().executePendingTransactions();
|
||||||
|
// for (Fragment f : getSupportFragmentManager().getFragments()) {
|
||||||
|
// Log.d(Constants.TAG, "f: "+f.getTag());
|
||||||
|
// }
|
||||||
|
|
||||||
|
DecryptMessageFragment messageFragment = (DecryptMessageFragment) getFragmentByPosition(PAGER_TAB_MESSAGE);
|
||||||
|
// mFileFragment = (DecryptFileFragment) getFragmentByPosition(PAGER_TAB_FILE);
|
||||||
|
|
||||||
|
// Log.d(Constants.TAG, fr.getTag());
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* find fragment
|
||||||
|
*
|
||||||
|
* @param pos
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public Fragment getFragmentByPosition(int pos) {
|
||||||
|
// based on FragmentPagerAdapter.makeFragmentName()
|
||||||
|
String tag = "android:switcher:" + mViewPager.getId() + ":" + pos;
|
||||||
|
Log.d(Constants.TAG, "findFragmentByTag: "+tag);
|
||||||
|
return getSupportFragmentManager().findFragmentByTag(tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -209,25 +265,25 @@ public class DecryptActivity extends DrawerActivity {
|
|||||||
// Handle intent actions
|
// Handle intent actions
|
||||||
handleActions(getIntent());
|
handleActions(getIntent());
|
||||||
|
|
||||||
if (mSource.getCurrentView().getId() == R.id.sourceMessage
|
// if (mSource.getCurrentView().getId() == R.id.sourceMessage
|
||||||
&& mMessage.getText().length() == 0) {
|
// && mMessage.getText().length() == 0) {
|
||||||
|
//
|
||||||
CharSequence clipboardText = ClipboardReflection.getClipboardText(this);
|
// CharSequence clipboardText = ClipboardReflection.getClipboardText(this);
|
||||||
|
//
|
||||||
String data = "";
|
// String data = "";
|
||||||
if (clipboardText != null) {
|
// if (clipboardText != null) {
|
||||||
Matcher matcher = PgpHelper.PGP_MESSAGE.matcher(clipboardText);
|
// Matcher matcher = PgpHelper.PGP_MESSAGE.matcher(clipboardText);
|
||||||
if (!matcher.matches()) {
|
// if (!matcher.matches()) {
|
||||||
matcher = PgpHelper.PGP_SIGNED_MESSAGE.matcher(clipboardText);
|
// matcher = PgpHelper.PGP_SIGNED_MESSAGE.matcher(clipboardText);
|
||||||
}
|
// }
|
||||||
if (matcher.matches()) {
|
// if (matcher.matches()) {
|
||||||
data = matcher.group(1);
|
// data = matcher.group(1);
|
||||||
mMessage.setText(data);
|
// mMessage.setText(data);
|
||||||
AppMsg.makeText(this, R.string.using_clipboard_content, AppMsg.STYLE_INFO)
|
// AppMsg.makeText(this, R.string.using_clipboard_content, AppMsg.STYLE_INFO)
|
||||||
.show();
|
// .show();
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
mSignatureLayout.setVisibility(View.GONE);
|
mSignatureLayout.setVisibility(View.GONE);
|
||||||
mSignatureLayout.setOnClickListener(new OnClickListener() {
|
mSignatureLayout.setOnClickListener(new OnClickListener() {
|
||||||
@ -246,28 +302,29 @@ public class DecryptActivity extends DrawerActivity {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if (mReturnResult) {
|
// if (mReturnResult) {
|
||||||
mSourcePrevious.setClickable(false);
|
// mSourcePrevious.setClickable(false);
|
||||||
mSourcePrevious.setEnabled(false);
|
// mSourcePrevious.setEnabled(false);
|
||||||
mSourcePrevious.setVisibility(View.INVISIBLE);
|
// mSourcePrevious.setVisibility(View.INVISIBLE);
|
||||||
|
//
|
||||||
|
// mSourceNext.setClickable(false);
|
||||||
|
// mSourceNext.setEnabled(false);
|
||||||
|
// mSourceNext.setVisibility(View.INVISIBLE);
|
||||||
|
//
|
||||||
|
// mSourceLabel.setClickable(false);
|
||||||
|
// mSourceLabel.setEnabled(false);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// updateSource();
|
||||||
|
|
||||||
mSourceNext.setClickable(false);
|
// if (mDecryptImmediately
|
||||||
mSourceNext.setEnabled(false);
|
// || (mSource.getCurrentView().getId() == R.id.sourceMessage && (mMessage.getText()
|
||||||
mSourceNext.setVisibility(View.INVISIBLE);
|
// .length() > 0 || mContentUri != null))) {
|
||||||
|
// decryptClicked();
|
||||||
mSourceLabel.setClickable(false);
|
// }
|
||||||
mSourceLabel.setEnabled(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
updateSource();
|
|
||||||
|
|
||||||
if (mDecryptImmediately
|
|
||||||
|| (mSource.getCurrentView().getId() == R.id.sourceMessage && (mMessage.getText()
|
|
||||||
.length() > 0 || mContentUri != null))) {
|
|
||||||
decryptClicked();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles all actions with this intent
|
* Handles all actions with this intent
|
||||||
*
|
*
|
||||||
@ -316,14 +373,17 @@ public class DecryptActivity extends DrawerActivity {
|
|||||||
* Main Actions
|
* Main Actions
|
||||||
*/
|
*/
|
||||||
if (ACTION_DECRYPT.equals(action) && textData != null) {
|
if (ACTION_DECRYPT.equals(action) && textData != null) {
|
||||||
Log.d(Constants.TAG, "textData null, matching text ...");
|
Log.d(Constants.TAG, "textData not null, matching text ...");
|
||||||
Matcher matcher = PgpHelper.PGP_MESSAGE.matcher(textData);
|
Matcher matcher = PgpHelper.PGP_MESSAGE.matcher(textData);
|
||||||
if (matcher.matches()) {
|
if (matcher.matches()) {
|
||||||
Log.d(Constants.TAG, "PGP_MESSAGE matched");
|
Log.d(Constants.TAG, "PGP_MESSAGE matched");
|
||||||
textData = matcher.group(1);
|
textData = matcher.group(1);
|
||||||
// replace non breakable spaces
|
// replace non breakable spaces
|
||||||
textData = textData.replaceAll("\\xa0", " ");
|
textData = textData.replaceAll("\\xa0", " ");
|
||||||
mMessage.setText(textData);
|
|
||||||
|
mViewPager.setCurrentItem(PAGER_TAB_MESSAGE, false);
|
||||||
|
mMessageFragment.setText(textData);
|
||||||
|
// mMessage.setText(textData);
|
||||||
} else {
|
} else {
|
||||||
matcher = PgpHelper.PGP_SIGNED_MESSAGE.matcher(textData);
|
matcher = PgpHelper.PGP_SIGNED_MESSAGE.matcher(textData);
|
||||||
if (matcher.matches()) {
|
if (matcher.matches()) {
|
||||||
@ -331,7 +391,10 @@ public class DecryptActivity extends DrawerActivity {
|
|||||||
textData = matcher.group(1);
|
textData = matcher.group(1);
|
||||||
// replace non breakable spaces
|
// replace non breakable spaces
|
||||||
textData = textData.replaceAll("\\xa0", " ");
|
textData = textData.replaceAll("\\xa0", " ");
|
||||||
mMessage.setText(textData);
|
// mMessage.setText(textData);
|
||||||
|
mViewPager.setCurrentItem(PAGER_TAB_MESSAGE, false);
|
||||||
|
mMessageFragment = (DecryptMessageFragment) getFragmentByPosition(mViewPager.getCurrentItem());
|
||||||
|
mMessageFragment.setText(textData);
|
||||||
} else {
|
} else {
|
||||||
Log.d(Constants.TAG, "Nothing matched!");
|
Log.d(Constants.TAG, "Nothing matched!");
|
||||||
}
|
}
|
||||||
@ -344,14 +407,14 @@ public class DecryptActivity extends DrawerActivity {
|
|||||||
mInputFilename = path;
|
mInputFilename = path;
|
||||||
mFilename.setText(mInputFilename);
|
mFilename.setText(mInputFilename);
|
||||||
guessOutputFilename();
|
guessOutputFilename();
|
||||||
mSource.setInAnimation(null);
|
// mSource.setInAnimation(null);
|
||||||
mSource.setOutAnimation(null);
|
// mSource.setOutAnimation(null);
|
||||||
while (mSource.getCurrentView().getId() != R.id.sourceFile) {
|
// while (mSource.getCurrentView().getId() != R.id.sourceFile) {
|
||||||
mSource.showNext();
|
// mSource.showNext();
|
||||||
}
|
// }
|
||||||
} else {
|
} else {
|
||||||
Log.e(Constants.TAG,
|
Log.e(Constants.TAG,
|
||||||
"Direct binary data without actual file in filesystem is not supported. Please use the Remote Service API!");
|
"Direct binary data without actual file in filesystem is not supported. Please use the Remote Service API!");
|
||||||
Toast.makeText(this, R.string.error_only_files_are_supported, Toast.LENGTH_LONG)
|
Toast.makeText(this, R.string.error_only_files_are_supported, Toast.LENGTH_LONG)
|
||||||
.show();
|
.show();
|
||||||
// end activity
|
// end activity
|
||||||
@ -373,28 +436,28 @@ public class DecryptActivity extends DrawerActivity {
|
|||||||
mOutputFilename = Constants.Path.APP_DIR + "/" + filename;
|
mOutputFilename = Constants.Path.APP_DIR + "/" + filename;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateSource() {
|
// private void updateSource() {
|
||||||
switch (mSource.getCurrentView().getId()) {
|
// switch (mSource.getCurrentView().getId()) {
|
||||||
case R.id.sourceFile: {
|
// case R.id.sourceFile: {
|
||||||
mSourceLabel.setText(R.string.label_file);
|
// mSourceLabel.setText(R.string.label_file);
|
||||||
mDecryptButton.setText(getString(R.string.btn_decrypt));
|
// mDecryptButton.setText(getString(R.string.btn_decrypt));
|
||||||
break;
|
// break;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
case R.id.sourceMessage: {
|
// case R.id.sourceMessage: {
|
||||||
mSourceLabel.setText(R.string.label_message);
|
// mSourceLabel.setText(R.string.label_message);
|
||||||
mDecryptButton.setText(getString(R.string.btn_decrypt));
|
// mDecryptButton.setText(getString(R.string.btn_decrypt));
|
||||||
break;
|
// break;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
default: {
|
// default: {
|
||||||
break;
|
// break;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
private void decryptClicked() {
|
private void decryptClicked() {
|
||||||
if (mSource.getCurrentView().getId() == R.id.sourceFile) {
|
if (mViewPager.getCurrentItem() == PAGER_TAB_FILE) {
|
||||||
mDecryptTarget = Id.target.file;
|
mDecryptTarget = Id.target.file;
|
||||||
} else {
|
} else {
|
||||||
mDecryptTarget = Id.target.message;
|
mDecryptTarget = Id.target.message;
|
||||||
@ -428,13 +491,13 @@ public class DecryptActivity extends DrawerActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (mDecryptTarget == Id.target.message) {
|
if (mDecryptTarget == Id.target.message) {
|
||||||
String messageData = mMessage.getText().toString();
|
// String messageData = mMessage.getText().toString();
|
||||||
Matcher matcher = PgpHelper.PGP_SIGNED_MESSAGE.matcher(messageData);
|
// Matcher matcher = PgpHelper.PGP_SIGNED_MESSAGE.matcher(messageData);
|
||||||
if (matcher.matches()) {
|
// if (matcher.matches()) {
|
||||||
mSignedOnly = true;
|
// mSignedOnly = true;
|
||||||
decryptStart();
|
// decryptStart();
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
// else treat it as an decrypted message/file
|
// else treat it as an decrypted message/file
|
||||||
@ -519,7 +582,8 @@ public class DecryptActivity extends DrawerActivity {
|
|||||||
AppMsg.STYLE_ALERT).show();
|
AppMsg.STYLE_ALERT).show();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
inStream = new ByteArrayInputStream(mMessage.getText().toString().getBytes());
|
|
||||||
|
// inStream = new ByteArrayInputStream(mMessage.getText().toString().getBytes());
|
||||||
}
|
}
|
||||||
|
|
||||||
// get decryption key for this inStream
|
// get decryption key for this inStream
|
||||||
@ -551,18 +615,6 @@ public class DecryptActivity extends DrawerActivity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void replyClicked() {
|
|
||||||
Intent intent = new Intent(this, EncryptActivity.class);
|
|
||||||
intent.setAction(EncryptActivity.ACTION_ENCRYPT);
|
|
||||||
String data = mMessage.getText().toString();
|
|
||||||
data = data.replaceAll("(?m)^", "> ");
|
|
||||||
data = "\n\n" + data;
|
|
||||||
intent.putExtra(EncryptActivity.EXTRA_TEXT, data);
|
|
||||||
intent.putExtra(EncryptActivity.EXTRA_SIGNATURE_KEY_ID, mSecretKeyId);
|
|
||||||
intent.putExtra(EncryptActivity.EXTRA_ENCRYPTION_KEY_IDS, new long[]{mSignatureKeyId});
|
|
||||||
startActivity(intent);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void askForOutputFilename() {
|
private void askForOutputFilename() {
|
||||||
// Message is received after passphrase is cached
|
// Message is received after passphrase is cached
|
||||||
Handler returnHandler = new Handler() {
|
Handler returnHandler = new Handler() {
|
||||||
@ -620,8 +672,8 @@ public class DecryptActivity extends DrawerActivity {
|
|||||||
} else {
|
} else {
|
||||||
data.putInt(KeychainIntentService.TARGET, KeychainIntentService.TARGET_BYTES);
|
data.putInt(KeychainIntentService.TARGET, KeychainIntentService.TARGET_BYTES);
|
||||||
|
|
||||||
String message = mMessage.getText().toString();
|
// String message = mMessage.getText().toString();
|
||||||
data.putByteArray(KeychainIntentService.DECRYPT_CIPHERTEXT_BYTES, message.getBytes());
|
// data.putByteArray(KeychainIntentService.DECRYPT_CIPHERTEXT_BYTES, message.getBytes());
|
||||||
}
|
}
|
||||||
|
|
||||||
data.putLong(KeychainIntentService.ENCRYPT_SECRET_KEY_ID, mSecretKeyId);
|
data.putLong(KeychainIntentService.ENCRYPT_SECRET_KEY_ID, mSecretKeyId);
|
||||||
@ -647,20 +699,20 @@ public class DecryptActivity extends DrawerActivity {
|
|||||||
|
|
||||||
AppMsg.makeText(DecryptActivity.this, R.string.decryption_successful,
|
AppMsg.makeText(DecryptActivity.this, R.string.decryption_successful,
|
||||||
AppMsg.STYLE_INFO).show();
|
AppMsg.STYLE_INFO).show();
|
||||||
if (mReturnResult) {
|
// if (mReturnResult) {
|
||||||
Intent intent = new Intent();
|
// Intent intent = new Intent();
|
||||||
intent.putExtras(returnData);
|
// intent.putExtras(returnData);
|
||||||
setResult(RESULT_OK, intent);
|
// setResult(RESULT_OK, intent);
|
||||||
finish();
|
// finish();
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
|
|
||||||
switch (mDecryptTarget) {
|
switch (mDecryptTarget) {
|
||||||
case Id.target.message:
|
case Id.target.message:
|
||||||
String decryptedMessage = returnData
|
String decryptedMessage = returnData
|
||||||
.getString(KeychainIntentService.RESULT_DECRYPTED_STRING);
|
.getString(KeychainIntentService.RESULT_DECRYPTED_STRING);
|
||||||
mMessage.setText(decryptedMessage);
|
// mMessage.setText(decryptedMessage);
|
||||||
mMessage.setHorizontallyScrolling(false);
|
// mMessage.setHorizontallyScrolling(false);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -0,0 +1,62 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2013 Dominik Schürmann <dominik@dominikschuermann.de>
|
||||||
|
*
|
||||||
|
* 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 android.os.Bundle;
|
||||||
|
import android.support.v4.app.Fragment;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.EditText;
|
||||||
|
|
||||||
|
import org.sufficientlysecure.keychain.R;
|
||||||
|
|
||||||
|
public class DecryptFileFragment extends Fragment {
|
||||||
|
|
||||||
|
private EditText mMessage;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates new instance of this fragment
|
||||||
|
*/
|
||||||
|
public static DecryptFileFragment newInstance() {
|
||||||
|
DecryptFileFragment frag = new DecryptFileFragment();
|
||||||
|
|
||||||
|
Bundle args = new Bundle();
|
||||||
|
frag.setArguments(args);
|
||||||
|
|
||||||
|
return frag;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Inflate the layout for this fragment
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
|
View view = inflater.inflate(R.layout.decrypt_file_fragment, container, false);
|
||||||
|
|
||||||
|
mMessage = (EditText) view.findViewById(R.id.message);
|
||||||
|
|
||||||
|
return view;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onActivityCreated(Bundle savedInstanceState) {
|
||||||
|
super.onActivityCreated(savedInstanceState);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,78 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2013 Dominik Schürmann <dominik@dominikschuermann.de>
|
||||||
|
*
|
||||||
|
* 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 android.os.Bundle;
|
||||||
|
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.EditText;
|
||||||
|
|
||||||
|
import com.beardedhen.androidbootstrap.BootstrapButton;
|
||||||
|
|
||||||
|
import org.sufficientlysecure.keychain.Constants;
|
||||||
|
import org.sufficientlysecure.keychain.R;
|
||||||
|
import org.sufficientlysecure.keychain.compatibility.ClipboardReflection;
|
||||||
|
import org.sufficientlysecure.keychain.util.Log;
|
||||||
|
|
||||||
|
public class DecryptMessageFragment extends Fragment {
|
||||||
|
|
||||||
|
private EditText mMessage;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates new instance of this fragment
|
||||||
|
*/
|
||||||
|
public static DecryptMessageFragment newInstance() {
|
||||||
|
DecryptMessageFragment frag = new DecryptMessageFragment();
|
||||||
|
|
||||||
|
Bundle args = new Bundle();
|
||||||
|
frag.setArguments(args);
|
||||||
|
|
||||||
|
return frag;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Inflate the layout for this fragment
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
|
View view = inflater.inflate(R.layout.decrypt_message_fragment, container, false);
|
||||||
|
|
||||||
|
mMessage = (EditText) view.findViewById(R.id.message);
|
||||||
|
|
||||||
|
return view;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onActivityCreated(Bundle savedInstanceState) {
|
||||||
|
super.onActivityCreated(savedInstanceState);
|
||||||
|
|
||||||
|
Log.d(Constants.TAG, "tag: " + getTag());
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getText() {
|
||||||
|
return mMessage.getText().toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setText(String message) {
|
||||||
|
mMessage.setText(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,74 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2014 Dominik Schürmann <dominik@dominikschuermann.de>
|
||||||
|
*
|
||||||
|
* 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.adapter;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.support.v4.app.Fragment;
|
||||||
|
import android.support.v4.app.FragmentPagerAdapter;
|
||||||
|
import android.support.v4.app.FragmentStatePagerAdapter;
|
||||||
|
import android.support.v4.app.FragmentTransaction;
|
||||||
|
import android.support.v4.view.ViewPager;
|
||||||
|
import android.support.v7.app.ActionBar;
|
||||||
|
import android.support.v7.app.ActionBarActivity;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
public class PageTabStripAdapter extends FragmentPagerAdapter {
|
||||||
|
private final Context mContext;
|
||||||
|
private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();
|
||||||
|
|
||||||
|
static final class TabInfo {
|
||||||
|
private final Class<?> clss;
|
||||||
|
private final Bundle args;
|
||||||
|
private final String title;
|
||||||
|
|
||||||
|
TabInfo(Class<?> clss, Bundle args, String title) {
|
||||||
|
this.clss = clss;
|
||||||
|
this.args = args;
|
||||||
|
this.title = title;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public PageTabStripAdapter(ActionBarActivity activity) {
|
||||||
|
super(activity.getSupportFragmentManager());
|
||||||
|
mContext = activity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addTab(Class<?> clss, Bundle args, String title) {
|
||||||
|
TabInfo info = new TabInfo(clss, args, title);
|
||||||
|
mTabs.add(info);
|
||||||
|
notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getCount() {
|
||||||
|
return mTabs.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Fragment getItem(int position) {
|
||||||
|
TabInfo info = mTabs.get(position);
|
||||||
|
return Fragment.instantiate(mContext, info.clss.getName(), info.args);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CharSequence getPageTitle(int position) {
|
||||||
|
return mTabs.get(position).title;
|
||||||
|
}
|
||||||
|
}
|
@ -36,12 +36,12 @@ public class TabsAdapter extends FragmentStatePagerAdapter implements ActionBar.
|
|||||||
private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();
|
private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();
|
||||||
|
|
||||||
static final class TabInfo {
|
static final class TabInfo {
|
||||||
private final Class<?> mClss;
|
private final Class<?> clss;
|
||||||
private final Bundle mArgs;
|
private final Bundle args;
|
||||||
|
|
||||||
TabInfo(Class<?> mClss, Bundle mArgs) {
|
TabInfo(Class<?> clss, Bundle args) {
|
||||||
this.mClss = mClss;
|
this.clss = clss;
|
||||||
this.mArgs = mArgs;
|
this.args = args;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -71,7 +71,7 @@ public class TabsAdapter extends FragmentStatePagerAdapter implements ActionBar.
|
|||||||
@Override
|
@Override
|
||||||
public Fragment getItem(int position) {
|
public Fragment getItem(int position) {
|
||||||
TabInfo info = mTabs.get(position);
|
TabInfo info = mTabs.get(position);
|
||||||
return Fragment.instantiate(mContext, info.mClss.getName(), info.mArgs);
|
return Fragment.instantiate(mContext, info.clss.getName(), info.args);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
|
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
|
||||||
|
@ -1,6 +1,25 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<ScrollView
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:bootstrapbutton="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<android.support.v4.view.ViewPager
|
||||||
|
android:id="@+id/decrypt_pager"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="220dp">
|
||||||
|
|
||||||
|
<android.support.v4.view.PagerTabStrip
|
||||||
|
android:id="@+id/decrypt_pager_tab_strip"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="top"
|
||||||
|
android:background="@color/emphasis"
|
||||||
|
android:textColor="#fff" />
|
||||||
|
</android.support.v4.view.ViewPager>
|
||||||
|
|
||||||
|
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:bootstrapbutton="http://schemas.android.com/apk/res-auto"
|
xmlns:bootstrapbutton="http://schemas.android.com/apk/res-auto"
|
||||||
android:id="@+id/content_frame"
|
android:id="@+id/content_frame"
|
||||||
android:layout_marginLeft="@dimen/drawer_content_padding"
|
android:layout_marginLeft="@dimen/drawer_content_padding"
|
||||||
@ -9,7 +28,7 @@
|
|||||||
android:fillViewport="true"
|
android:fillViewport="true"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
@ -17,80 +36,20 @@
|
|||||||
android:paddingLeft="10dp"
|
android:paddingLeft="10dp"
|
||||||
android:paddingRight="10dp">
|
android:paddingRight="10dp">
|
||||||
|
|
||||||
<RelativeLayout
|
<include layout="@layout/decrypt_signature_include" />
|
||||||
android:id="@+id/signature"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:clickable="true"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:padding="4dp"
|
|
||||||
android:paddingLeft="10dp"
|
|
||||||
android:paddingRight="10dp">
|
|
||||||
|
|
||||||
<RelativeLayout
|
<LinearLayout
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:id="@+id/relativeLayout">
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:id="@+id/ic_signature"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:src="@drawable/signed_large"/>
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:id="@+id/ic_signature_status"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:src="@drawable/overlay_error"/>
|
|
||||||
</RelativeLayout>
|
|
||||||
|
|
||||||
<com.beardedhen.androidbootstrap.BootstrapButton
|
|
||||||
android:id="@+id/lookup_key"
|
|
||||||
android:visibility="gone"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="50dp"
|
|
||||||
android:padding="4dp"
|
|
||||||
android:text="@string/btn_lookup_key"
|
|
||||||
bootstrapbutton:bb_icon_left="fa-download"
|
|
||||||
bootstrapbutton:bb_type="info"
|
|
||||||
bootstrapbutton:bb_size="small"
|
|
||||||
android:layout_alignParentTop="true"
|
|
||||||
android:layout_alignParentRight="true"
|
|
||||||
android:layout_alignParentEnd="true"/>
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/mainUserId"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="left"
|
|
||||||
android:text="@string/label_main_user_id"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
|
||||||
android:layout_toRightOf="@+id/relativeLayout"/>
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/mainUserIdRest"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="left"
|
|
||||||
android:text="Main User Id Rest"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
|
||||||
android:layout_below="@+id/mainUserId"
|
|
||||||
android:layout_toRightOf="@+id/relativeLayout"/>
|
|
||||||
</RelativeLayout>
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/sourcePrevious"
|
android:id="@+id/sourcePrevious"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:src="@drawable/ic_previous"/>
|
android:src="@drawable/ic_previous" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/sourceLabel"
|
android:id="@+id/sourceLabel"
|
||||||
style="@style/SectionHeader"
|
style="@style/SectionHeader"
|
||||||
android:layout_width="0dip"
|
android:layout_width="0dip"
|
||||||
@ -98,50 +57,50 @@
|
|||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:gravity="center_horizontal|center_vertical"
|
android:gravity="center_horizontal|center_vertical"
|
||||||
android:text="@string/label_message"
|
android:text="@string/label_message"
|
||||||
android:textAppearance="?android:attr/textAppearanceMedium"/>
|
android:textAppearance="?android:attr/textAppearanceMedium" />
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/sourceNext"
|
android:id="@+id/sourceNext"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:src="@drawable/ic_next"/>
|
android:src="@drawable/ic_next" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<ViewFlipper
|
<ViewFlipper
|
||||||
android:id="@+id/source"
|
android:id="@+id/source"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="0dip"
|
android:layout_height="0dip"
|
||||||
android:layout_weight="1">
|
android:layout_weight="1">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/sourceMessage"
|
android:id="@+id/sourceMessage"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:padding="4dp">
|
android:padding="4dp">
|
||||||
|
|
||||||
<EditText
|
<EditText
|
||||||
android:id="@+id/message"
|
android:id="@+id/message"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:gravity="top"
|
android:gravity="top"
|
||||||
android:inputType="text|textCapSentences|textMultiLine|textLongMessage"
|
android:inputType="text|textCapSentences|textMultiLine|textLongMessage"
|
||||||
android:scrollHorizontally="true"/>
|
android:scrollHorizontally="true" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/sourceFile"
|
android:id="@+id/sourceFile"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:padding="4dp">
|
android:padding="4dp">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<EditText
|
<EditText
|
||||||
android:id="@+id/filename"
|
android:id="@+id/filename"
|
||||||
android:layout_width="0dip"
|
android:layout_width="0dip"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
@ -151,9 +110,9 @@
|
|||||||
android:lines="4"
|
android:lines="4"
|
||||||
android:maxLines="10"
|
android:maxLines="10"
|
||||||
android:minLines="2"
|
android:minLines="2"
|
||||||
android:scrollbars="vertical"/>
|
android:scrollbars="vertical" />
|
||||||
|
|
||||||
<com.beardedhen.androidbootstrap.BootstrapButton
|
<com.beardedhen.androidbootstrap.BootstrapButton
|
||||||
android:id="@+id/btn_browse"
|
android:id="@+id/btn_browse"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
@ -161,45 +120,46 @@
|
|||||||
bootstrapbutton:bb_icon_left="fa-folder-open"
|
bootstrapbutton:bb_icon_left="fa-folder-open"
|
||||||
bootstrapbutton:bb_roundedCorners="true"
|
bootstrapbutton:bb_roundedCorners="true"
|
||||||
bootstrapbutton:bb_size="default"
|
bootstrapbutton:bb_size="default"
|
||||||
bootstrapbutton:bb_type="default"/>
|
bootstrapbutton:bb_type="default" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<CheckBox
|
<CheckBox
|
||||||
android:id="@+id/deleteAfterDecryption"
|
android:id="@+id/deleteAfterDecryption"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:text="@string/label_delete_after_decryption"/>
|
android:text="@string/label_delete_after_decryption" />
|
||||||
|
</LinearLayout>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</LinearLayout>
|
</ViewFlipper>
|
||||||
</ViewFlipper>
|
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
style="@style/SectionHeader"
|
style="@style/SectionHeader"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginBottom="4dp"
|
android:layout_marginBottom="4dp"
|
||||||
android:text="@string/section_decrypt_verify"/>
|
android:text="@string/section_decrypt_verify" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
android:padding="4dp">
|
android:padding="4dp">
|
||||||
|
|
||||||
<com.beardedhen.androidbootstrap.BootstrapButton
|
<com.beardedhen.androidbootstrap.BootstrapButton
|
||||||
android:id="@+id/action_decrypt"
|
android:id="@+id/action_decrypt"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="60dp"
|
android:layout_height="60dp"
|
||||||
android:padding="4dp"
|
android:padding="4dp"
|
||||||
android:text="@string/btn_decrypt_verify"
|
android:text="@string/btn_decrypt_verify"
|
||||||
bootstrapbutton:bb_icon_left="fa-unlock"
|
bootstrapbutton:bb_icon_left="fa-unlock"
|
||||||
bootstrapbutton:bb_type="info"/>
|
bootstrapbutton:bb_type="info" />
|
||||||
|
</LinearLayout>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</LinearLayout>
|
</ScrollView>
|
||||||
</ScrollView>
|
</LinearLayout>
|
@ -0,0 +1,48 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:bootstrapbutton="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/filename"
|
||||||
|
android:layout_width="0dip"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:gravity="top|left"
|
||||||
|
android:inputType="textMultiLine|textUri"
|
||||||
|
android:lines="4"
|
||||||
|
android:maxLines="10"
|
||||||
|
android:minLines="2"
|
||||||
|
android:scrollbars="vertical" />
|
||||||
|
|
||||||
|
<com.beardedhen.androidbootstrap.BootstrapButton
|
||||||
|
android:id="@+id/btn_browse"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="4dp"
|
||||||
|
bootstrapbutton:bb_icon_left="fa-folder-open"
|
||||||
|
bootstrapbutton:bb_roundedCorners="true"
|
||||||
|
bootstrapbutton:bb_size="default"
|
||||||
|
bootstrapbutton:bb_type="default" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<CheckBox
|
||||||
|
android:id="@+id/deleteAfterDecryption"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:text="@string/label_delete_after_decryption" />
|
||||||
|
</LinearLayout>
|
||||||
|
</LinearLayout>
|
@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:bootstrapbutton="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/message"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:gravity="top"
|
||||||
|
android:inputType="text|textCapSentences|textMultiLine|textLongMessage"
|
||||||
|
android:scrollHorizontally="true" />
|
||||||
|
</LinearLayout>
|
@ -0,0 +1,63 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:bootstrapbutton="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:id="@+id/signature"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:clickable="true"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:padding="4dp"
|
||||||
|
android:paddingLeft="10dp"
|
||||||
|
android:paddingRight="10dp">
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/relativeLayout">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/ic_signature"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:src="@drawable/signed_large" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/ic_signature_status"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:src="@drawable/overlay_error" />
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
<com.beardedhen.androidbootstrap.BootstrapButton
|
||||||
|
android:id="@+id/lookup_key"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="50dp"
|
||||||
|
android:padding="4dp"
|
||||||
|
android:text="@string/btn_lookup_key"
|
||||||
|
bootstrapbutton:bb_icon_left="fa-download"
|
||||||
|
bootstrapbutton:bb_type="info"
|
||||||
|
bootstrapbutton:bb_size="small"
|
||||||
|
android:layout_alignParentTop="true"
|
||||||
|
android:layout_alignParentRight="true"
|
||||||
|
android:layout_alignParentEnd="true" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/mainUserId"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="left"
|
||||||
|
android:text="@string/label_main_user_id"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||||
|
android:layout_toRightOf="@+id/relativeLayout" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/mainUserIdRest"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="left"
|
||||||
|
android:text="Main User Id Rest"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||||
|
android:layout_below="@+id/mainUserId"
|
||||||
|
android:layout_toRightOf="@+id/relativeLayout" />
|
||||||
|
</RelativeLayout>
|
Loading…
Reference in New Issue
Block a user