From 840d57bf3b2c91f63f0df9d8988c16eb467b4a29 Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Fri, 13 Nov 2015 16:56:35 +0100 Subject: passphraseactivity: add inline spinner to password dialog --- .../keychain/ui/PassphraseDialogActivity.java | 10 ++- .../keychain/ui/widget/CacheTTLSpinner.java | 79 ++++++++++++++++++++++ 2 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/CacheTTLSpinner.java (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/PassphraseDialogActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/PassphraseDialogActivity.java index 897719fc2..2ddbe376b 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/PassphraseDialogActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/PassphraseDialogActivity.java @@ -63,6 +63,7 @@ import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; import org.sufficientlysecure.keychain.service.input.RequiredInputParcel; import org.sufficientlysecure.keychain.ui.dialog.CustomAlertDialogBuilder; import org.sufficientlysecure.keychain.ui.util.ThemeChanger; +import org.sufficientlysecure.keychain.ui.widget.CacheTTLSpinner; import org.sufficientlysecure.keychain.util.Log; import org.sufficientlysecure.keychain.util.Passphrase; import org.sufficientlysecure.keychain.util.Preferences; @@ -200,6 +201,7 @@ public class PassphraseDialogActivity extends FragmentActivity { private Intent mServiceIntent; private ViewAnimator mLayout; + private CacheTTLSpinner mTimeToLiveSpinner; @NonNull @Override @@ -241,6 +243,8 @@ public class PassphraseDialogActivity extends FragmentActivity { mPassphraseText = (TextView) mLayout.findViewById(R.id.passphrase_text); mPassphraseEditText = (EditText) mLayout.findViewById(R.id.passphrase_passphrase); + mTimeToLiveSpinner = (CacheTTLSpinner) mLayout.findViewById(R.id.ttl_spinner); + alert.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { @Override @@ -415,12 +419,14 @@ public class PassphraseDialogActivity extends FragmentActivity { CryptoInputParcel cryptoInputParcel = ((PassphraseDialogActivity) getActivity()).mCryptoInputParcel; + final long timeToLiveSeconds = mTimeToLiveSpinner.getSelectedTimeToLive(); + // Early breakout if we are dealing with a symmetric key if (mSecretRing == null) { if (cryptoInputParcel.mCachePassphrase) { PassphraseCacheService.addCachedPassphrase(getActivity(), Constants.key.symmetric, Constants.key.symmetric, passphrase, - getString(R.string.passp_cache_notif_pwd)); + getString(R.string.passp_cache_notif_pwd), timeToLiveSeconds); } finishCaching(passphrase); @@ -484,7 +490,7 @@ public class PassphraseDialogActivity extends FragmentActivity { try { PassphraseCacheService.addCachedPassphrase(getActivity(), mSecretRing.getMasterKeyId(), mSubKeyId, passphrase, - mSecretRing.getPrimaryUserIdWithFallback()); + mSecretRing.getPrimaryUserIdWithFallback(), timeToLiveSeconds); } catch (PgpKeyNotFoundException e) { Log.e(Constants.TAG, "adding of a passphrase failed", e); } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/CacheTTLSpinner.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/CacheTTLSpinner.java new file mode 100644 index 000000000..9a8a2f1d1 --- /dev/null +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/CacheTTLSpinner.java @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2015 Vincent Breitmoser + * + * 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 . + */ + +package org.sufficientlysecure.keychain.ui.widget; + + +import android.content.Context; +import android.content.res.Resources.Theme; +import android.database.Cursor; +import android.database.MatrixCursor; +import android.os.Bundle; +import android.os.Parcelable; +import android.support.annotation.NonNull; +import android.support.annotation.StringRes; +import android.support.v4.widget.SimpleCursorAdapter; +import android.support.v7.widget.AppCompatSpinner; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.BaseAdapter; +import android.widget.SpinnerAdapter; +import android.widget.TextView; + +import org.sufficientlysecure.keychain.Constants; +import org.sufficientlysecure.keychain.R; +import org.sufficientlysecure.keychain.provider.KeychainContract; +import org.sufficientlysecure.keychain.ui.adapter.KeyAdapter; +import org.sufficientlysecure.keychain.ui.adapter.KeyAdapter.KeyItem; + + +public class CacheTTLSpinner extends AppCompatSpinner { + + public CacheTTLSpinner(Context context, AttributeSet attrs) { + super(context, attrs); + initView(); + } + + public CacheTTLSpinner(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + initView(); + } + + private void initView() { + MatrixCursor cursor = new MatrixCursor(new String[] { "_id", "TTL", "description" }, 5); + cursor.addRow(new Object[] { 0, 60*5, "Five Minutes" }); + cursor.addRow(new Object[] { 1, 60*60, "One Hour" }); + cursor.addRow(new Object[] { 2, 60*60*3, "Three Hours" }); + cursor.addRow(new Object[] { 3, 60*60*24, "One Day" }); + cursor.addRow(new Object[] { 4, 60*60*24*3, "Three Days" }); + + setAdapter(new SimpleCursorAdapter(getContext(), R.layout.simple_item, cursor, + new String[] { "description" }, + new int[] { R.id.simple_item_text }, + 0)); + } + + public long getSelectedTimeToLive() { + int selectedItemPosition = getSelectedItemPosition(); + Object item = getAdapter().getItem(selectedItemPosition); + return ((Cursor) item).getLong(0); + } + +} -- cgit v1.2.3