diff options
| author | Vincent Breitmoser <valodim@mugenguild.com> | 2015-03-21 22:18:58 +0100 | 
|---|---|---|
| committer | Vincent Breitmoser <valodim@mugenguild.com> | 2015-03-21 22:18:58 +0100 | 
| commit | 04c7639a5a9b4f85122b7d5f299ba09131ce3036 (patch) | |
| tree | fc4bf4afbca231d107b445487572d24165d2d455 /OpenKeychain/src | |
| parent | 1ad3635d139ea5033b06e5cdd87a7b2eab5f2e75 (diff) | |
| download | open-keychain-04c7639a5a9b4f85122b7d5f299ba09131ce3036.tar.gz open-keychain-04c7639a5a9b4f85122b7d5f299ba09131ce3036.tar.bz2 open-keychain-04c7639a5a9b4f85122b7d5f299ba09131ce3036.zip | |
split up wait/action yubikey fragments
Diffstat (limited to 'OpenKeychain/src')
17 files changed, 230 insertions, 86 deletions
| diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/PromoteKeyOperation.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/PromoteKeyOperation.java index fd86d4b92..46db30ad0 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/PromoteKeyOperation.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/PromoteKeyOperation.java @@ -74,7 +74,7 @@ public class PromoteKeyOperation extends BaseOperation {                          mProviderHelper.getCanonicalizedPublicKeyRing(masterKeyId);                  // create divert-to-card secret key from public key -                promotedRing = pubRing.createDummySecretRing(); +                promotedRing = pubRing.createDummySecretRing(true);              } catch (PgpKeyNotFoundException e) {                  log.add(LogType.MSG_PR_ERROR_KEY_NOT_FOUND, 2); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedPublicKeyRing.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedPublicKeyRing.java index c2506685d..fa5b0785e 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedPublicKeyRing.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedPublicKeyRing.java @@ -97,10 +97,12 @@ public class CanonicalizedPublicKeyRing extends CanonicalizedKeyRing {      }      /** Create a dummy secret ring from this key */ -    public UncachedKeyRing createDummySecretRing () { +    public UncachedKeyRing createDummySecretRing (boolean divertToCard) {          PGPSecretKeyRing secRing = PGPSecretKeyRing.constructDummyFromPublic(getRing(), -                S2K.GNU_PROTECTION_MODE_NO_PRIVATE_KEY); +                divertToCard +                        ? S2K.GNU_PROTECTION_MODE_DIVERT_TO_CARD +                        : S2K.GNU_PROTECTION_MODE_NO_PRIVATE_KEY);          return new UncachedKeyRing(secRing);      } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java index 9919e2aab..5c2fcde82 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java @@ -84,7 +84,13 @@ public class CreateKeyActivity extends BaseNfcActivity {      protected void onNfcPerform() throws IOException {          if (mCurrentFragment instanceof NfcListenerFragment) {              ((NfcListenerFragment) mCurrentFragment).onNfcPerform(); +            return;          } + +        byte[] scannedFingerprint = nfcGetFingerprint(0); +        Fragment frag = CreateKeyYubiFragment.createInstance(scannedFingerprint); +        loadFragment(frag, FragAction.TO_RIGHT); +      }      @Override diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyStartFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyStartFragment.java index d23d598fa..3f56949f5 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyStartFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyStartFragment.java @@ -98,7 +98,7 @@ public class CreateKeyStartFragment extends Fragment {          mYubiKey.setOnClickListener(new View.OnClickListener() {              @Override              public void onClick(View v) { -                CreateKeyYubiFragment frag = new CreateKeyYubiFragment(); +                CreateKeyYubiWaitFragment frag = new CreateKeyYubiWaitFragment();                  mCreateKeyActivity.loadFragment(frag, FragAction.TO_RIGHT);              }          }); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyYubiFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyYubiFragment.java index 483a5f4e5..63549c3d6 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyYubiFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyYubiFragment.java @@ -23,8 +23,6 @@ import java.util.ArrayList;  import java.util.Arrays;  import android.app.Activity; -import android.app.ProgressDialog; -import android.content.Context;  import android.content.Intent;  import android.database.Cursor;  import android.net.Uri; @@ -38,11 +36,9 @@ import android.support.v4.content.Loader;  import android.view.LayoutInflater;  import android.view.View;  import android.view.ViewGroup; -import android.widget.EditText;  import android.widget.TextView;  import android.widget.ViewAnimator; -import org.sufficientlysecure.keychain.Constants;  import org.sufficientlysecure.keychain.R;  import org.sufficientlysecure.keychain.keyimport.ParcelableKeyRing;  import org.sufficientlysecure.keychain.operations.results.DecryptVerifyResult; @@ -51,57 +47,59 @@ import org.sufficientlysecure.keychain.operations.results.PromoteKeyResult;  import org.sufficientlysecure.keychain.provider.KeychainContract;  import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;  import org.sufficientlysecure.keychain.service.KeychainIntentService; -import org.sufficientlysecure.keychain.service.KeychainIntentService.IOType;  import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler;  import org.sufficientlysecure.keychain.ui.CreateKeyActivity.FragAction;  import org.sufficientlysecure.keychain.ui.CreateKeyActivity.NfcListenerFragment; -import org.sufficientlysecure.keychain.ui.dialog.DeleteFileDialogFragment;  import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;  import org.sufficientlysecure.keychain.ui.util.Notify;  import org.sufficientlysecure.keychain.ui.util.Notify.Style;  import org.sufficientlysecure.keychain.ui.widget.NameEditText; -import org.sufficientlysecure.keychain.util.Log;  import org.sufficientlysecure.keychain.util.Preferences; -public class CreateKeyYubiFragment extends Fragment implements NfcListenerFragment, -        LoaderManager.LoaderCallbacks<Cursor> { +public class CreateKeyYubiFragment extends Fragment +        implements LoaderManager.LoaderCallbacks<Cursor> { + +    private static final String ARG_FINGERPRINT = "fingerprint";      CreateKeyActivity mCreateKeyActivity; -    NameEditText mNameEdit; -    View mBackButton; -    View mNextButton; -    private TextView mUnknownFingerprint; -    public static final String ARGS_MASTER_KEY_ID = "master_key_id";      private byte[] mScannedFingerprint;      private long mScannedMasterKeyId; +      private ViewAnimator mAnimator; +    private TextView mUnknownFingerprint;      private TextView mFingerprint;      private TextView mUserId; -    private YubiImportState mState = YubiImportState.SCAN; +    private YubiImportState mState; + +    public static Fragment createInstance(byte[] scannedFingerprint) { +        Bundle args = new Bundle(); +        args.putByteArray(ARG_FINGERPRINT, scannedFingerprint); + +        CreateKeyYubiFragment frag = new CreateKeyYubiFragment(); +        frag.setArguments(args); + +        return frag; +    } + +    @Override +    public void onCreate(Bundle savedInstanceState) { +        super.onCreate(savedInstanceState); + +        mScannedFingerprint = getArguments().getByteArray(ARG_FINGERPRINT); +        mScannedMasterKeyId = getKeyIdFromFingerprint(mScannedFingerprint); + +        getLoaderManager().initLoader(0, null, this); +    }      enum YubiImportState { -        SCAN, // waiting for scan          UNKNOWN, // scanned unknown key (ready to import)          BAD_FINGERPRINT, // scanned key, bad fingerprint          IMPORTED, // imported key (ready to promote)      } -    private static boolean isEditTextNotEmpty(Context context, EditText editText) { -        boolean output = true; -        if (editText.getText().length() == 0) { -            editText.setError(context.getString(R.string.create_key_empty)); -            editText.requestFocus(); -            output = false; -        } else { -            editText.setError(null); -        } - -        return output; -    } -      @Override      public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {          View view = inflater.inflate(R.layout.create_yubikey_fragment, container, false); @@ -113,8 +111,8 @@ public class CreateKeyYubiFragment extends Fragment implements NfcListenerFragme          mFingerprint = (TextView) view.findViewById(R.id.create_yubikey_fingerprint);          mUserId = (TextView) view.findViewById(R.id.create_yubikey_user_id); -        mBackButton = view.findViewById(R.id.create_key_back_button); -        mNextButton = view.findViewById(R.id.create_key_next_button); +        View mBackButton = view.findViewById(R.id.create_key_back_button); +        View mNextButton = view.findViewById(R.id.create_key_next_button);          mBackButton.setOnClickListener(new View.OnClickListener() {              @Override @@ -138,16 +136,6 @@ public class CreateKeyYubiFragment extends Fragment implements NfcListenerFragme          mCreateKeyActivity = (CreateKeyActivity) getActivity();      } -    @Override -    public void onNfcPerform() throws IOException { - -        mScannedFingerprint = mCreateKeyActivity.nfcGetFingerprint(0); -        mScannedMasterKeyId = getKeyIdFromFingerprint(mScannedFingerprint); - -        getLoaderManager().initLoader(0, null, this); - -    } -      // These are the rows that we will retrieve.      static final String[] UNIFIED_PROJECTION = new String[]{              KeychainContract.KeyRings._ID, @@ -185,35 +173,26 @@ public class CreateKeyYubiFragment extends Fragment implements NfcListenerFragme                  return;              } -            showKey(data); +            String userId = data.getString(INDEX_USER_ID); +            boolean hasSecret = data.getInt(INDEX_HAS_ANY_SECRET) != 0; -        } else { -            showUnknownKey(); -        } -    } +            String fp = KeyFormattingUtils.convertFingerprintToHex(mScannedFingerprint); +            mFingerprint.setText(KeyFormattingUtils.colorizeFingerprint(fp)); -    public void showUnknownKey() { -        String fp = KeyFormattingUtils.convertFingerprintToHex(mScannedFingerprint); -        mUnknownFingerprint.setText(KeyFormattingUtils.colorizeFingerprint(fp)); - -        mAnimator.setDisplayedChild(1); -        mState = YubiImportState.UNKNOWN; -    } +            mUserId.setText(userId); -    public void showKey(Cursor data) { -        String userId = data.getString(INDEX_USER_ID); -        boolean hasSecret = data.getInt(INDEX_HAS_ANY_SECRET) != 0; +            mAnimator.setDisplayedChild(2); +            mState = YubiImportState.IMPORTED; -        String fp = KeyFormattingUtils.convertFingerprintToHex(mScannedFingerprint); -        mFingerprint.setText(KeyFormattingUtils.colorizeFingerprint(fp)); - -        mUserId.setText(userId); +        } else { +            String fp = KeyFormattingUtils.convertFingerprintToHex(mScannedFingerprint); +            mUnknownFingerprint.setText(KeyFormattingUtils.colorizeFingerprint(fp)); -        mAnimator.setDisplayedChild(2); -        mState = YubiImportState.IMPORTED; +            mAnimator.setDisplayedChild(1); +            mState = YubiImportState.UNKNOWN; +        }      } -      private void nextClicked() {          switch (mState) { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyYubiWaitFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyYubiWaitFragment.java new file mode 100644 index 000000000..c338a0f1f --- /dev/null +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyYubiWaitFragment.java @@ -0,0 +1,88 @@ +/* + * 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; + +import java.io.IOException; +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.Arrays; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.database.Cursor; +import android.net.Uri; +import android.os.Bundle; +import android.os.Message; +import android.os.Messenger; +import android.support.v4.app.Fragment; +import android.support.v4.app.LoaderManager; +import android.support.v4.content.CursorLoader; +import android.support.v4.content.Loader; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.ViewAnimator; + +import org.sufficientlysecure.keychain.R; +import org.sufficientlysecure.keychain.keyimport.ParcelableKeyRing; +import org.sufficientlysecure.keychain.operations.results.DecryptVerifyResult; +import org.sufficientlysecure.keychain.operations.results.ImportKeyResult; +import org.sufficientlysecure.keychain.operations.results.PromoteKeyResult; +import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; +import org.sufficientlysecure.keychain.service.KeychainIntentService; +import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler; +import org.sufficientlysecure.keychain.ui.CreateKeyActivity.FragAction; +import org.sufficientlysecure.keychain.ui.CreateKeyActivity.NfcListenerFragment; +import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; +import org.sufficientlysecure.keychain.ui.util.Notify; +import org.sufficientlysecure.keychain.ui.util.Notify.Style; +import org.sufficientlysecure.keychain.ui.widget.NameEditText; +import org.sufficientlysecure.keychain.util.Preferences; + + +public class CreateKeyYubiWaitFragment extends Fragment { + +    CreateKeyActivity mCreateKeyActivity; +    View mBackButton; + +    @Override +    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { +        View view = inflater.inflate(R.layout.create_yubikey_wait_fragment, container, false); + +        mBackButton = view.findViewById(R.id.create_key_back_button); + +        mBackButton.setOnClickListener(new View.OnClickListener() { +            @Override +            public void onClick(View v) { +                mCreateKeyActivity.loadFragment(null, FragAction.TO_LEFT); +            } +        }); + +        return view; +    } + +    @Override +    public void onAttach(Activity activity) { +        super.onAttach(activity); +        mCreateKeyActivity = (CreateKeyActivity) getActivity(); +    } + +} diff --git a/OpenKeychain/src/main/res/drawable-hdpi/yubi_icon.png b/OpenKeychain/src/main/res/drawable-hdpi/yubi_icon.pngBinary files differ new file mode 100644 index 000000000..428ad6fad --- /dev/null +++ b/OpenKeychain/src/main/res/drawable-hdpi/yubi_icon.png diff --git a/OpenKeychain/src/main/res/drawable-hdpi/yubi_icon_24dp.png b/OpenKeychain/src/main/res/drawable-hdpi/yubi_icon_24dp.pngBinary files differ new file mode 100644 index 000000000..6fb41223d --- /dev/null +++ b/OpenKeychain/src/main/res/drawable-hdpi/yubi_icon_24dp.png diff --git a/OpenKeychain/src/main/res/drawable-mdpi/yubi_icon.png b/OpenKeychain/src/main/res/drawable-mdpi/yubi_icon.pngBinary files differ new file mode 100644 index 000000000..05c21c052 --- /dev/null +++ b/OpenKeychain/src/main/res/drawable-mdpi/yubi_icon.png diff --git a/OpenKeychain/src/main/res/drawable-mdpi/yubi_icon_24dp.png b/OpenKeychain/src/main/res/drawable-mdpi/yubi_icon_24dp.pngBinary files differ new file mode 100644 index 000000000..753f22607 --- /dev/null +++ b/OpenKeychain/src/main/res/drawable-mdpi/yubi_icon_24dp.png diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/yubi_icon.png b/OpenKeychain/src/main/res/drawable-xhdpi/yubi_icon.pngBinary files differ new file mode 100644 index 000000000..cfa799e74 --- /dev/null +++ b/OpenKeychain/src/main/res/drawable-xhdpi/yubi_icon.png diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/yubi_icon_24dp.png b/OpenKeychain/src/main/res/drawable-xhdpi/yubi_icon_24dp.pngBinary files differ new file mode 100644 index 000000000..05c21c052 --- /dev/null +++ b/OpenKeychain/src/main/res/drawable-xhdpi/yubi_icon_24dp.png diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/yubi_icon.png b/OpenKeychain/src/main/res/drawable-xxhdpi/yubi_icon.pngBinary files differ new file mode 100644 index 000000000..f20f562ec --- /dev/null +++ b/OpenKeychain/src/main/res/drawable-xxhdpi/yubi_icon.png diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/yubi_icon_24dp.png b/OpenKeychain/src/main/res/drawable-xxhdpi/yubi_icon_24dp.pngBinary files differ new file mode 100644 index 000000000..9bae15a02 --- /dev/null +++ b/OpenKeychain/src/main/res/drawable-xxhdpi/yubi_icon_24dp.png diff --git a/OpenKeychain/src/main/res/drawable-xxxhdpi/yubi_icon_24dp.png b/OpenKeychain/src/main/res/drawable-xxxhdpi/yubi_icon_24dp.pngBinary files differ new file mode 100644 index 000000000..cfa799e74 --- /dev/null +++ b/OpenKeychain/src/main/res/drawable-xxxhdpi/yubi_icon_24dp.png diff --git a/OpenKeychain/src/main/res/layout/create_yubikey_fragment.xml b/OpenKeychain/src/main/res/layout/create_yubikey_fragment.xml index ec2505706..2fb3737ba 100644 --- a/OpenKeychain/src/main/res/layout/create_yubikey_fragment.xml +++ b/OpenKeychain/src/main/res/layout/create_yubikey_fragment.xml @@ -19,26 +19,12 @@              android:id="@+id/create_yubikey_animator"              > -            <LinearLayout -                android:layout_width="match_parent" +            <ProgressBar +                android:layout_width="wrap_content"                  android:layout_height="wrap_content" -                android:orientation="vertical"> - -                <TextView -                    android:layout_width="wrap_content" -                    android:layout_height="wrap_content" -                    android:layout_marginTop="16dp" -                    android:layout_marginLeft="8dp" -                    android:textAppearance="?android:attr/textAppearanceMedium" -                    android:text="Hold Yubikey against device dawg" -                    /> - -                <ImageView -                    android:layout_width="match_parent" -                    android:layout_height="wrap_content" -                    android:src="@drawable/yubikey_phone" /> - -            </LinearLayout> +                android:layout_gravity="center" +                android:indeterminate="true" +                />              <LinearLayout                  android:layout_width="match_parent" diff --git a/OpenKeychain/src/main/res/layout/create_yubikey_wait_fragment.xml b/OpenKeychain/src/main/res/layout/create_yubikey_wait_fragment.xml new file mode 100644 index 000000000..c7f9821eb --- /dev/null +++ b/OpenKeychain/src/main/res/layout/create_yubikey_wait_fragment.xml @@ -0,0 +1,83 @@ +<?xml version="1.0" encoding="UTF-8"?> +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" +    android:layout_width="match_parent" +    android:layout_height="match_parent"> + +    <ScrollView +        android:layout_width="match_parent" +        android:layout_height="match_parent" +        android:fillViewport="true" +        android:layout_above="@+id/create_key_buttons"> + +        <LinearLayout +            android:layout_width="match_parent" +            android:layout_height="wrap_content" +            android:paddingLeft="10dp" +            android:paddingRight="10dp" +            android:orientation="vertical"> + +            <TextView +                android:layout_width="wrap_content" +                android:layout_height="wrap_content" +                android:layout_marginTop="16dp" +                android:layout_marginLeft="8dp" +                android:textAppearance="?android:attr/textAppearanceMedium" +                android:text="Hold Yubikey against device dawg" +                /> + +            <ImageView +                android:layout_width="match_parent" +                android:layout_height="wrap_content" +                android:src="@drawable/yubikey_phone" /> + +        </LinearLayout> + +    </ScrollView> + +    <LinearLayout +        android:layout_width="match_parent" +        android:layout_height="wrap_content" +        android:orientation="horizontal" +        android:layout_alignParentBottom="true" +        android:layout_alignParentLeft="true" +        android:layout_alignParentStart="true" +        android:background="@color/holo_gray_bright" +        android:id="@+id/create_key_buttons"> + +        <TextView +            android:id="@+id/create_key_back_button" +            android:paddingLeft="16dp" +            android:paddingRight="16dp" +            android:textAppearance="?android:attr/textAppearanceMedium" +            android:layout_width="match_parent" +            android:layout_height="wrap_content" +            android:layout_weight="1" +            android:text="@string/btn_back" +            android:textAllCaps="true" +            android:minHeight="?android:attr/listPreferredItemHeight" +            android:drawableLeft="@drawable/ic_chevron_left_grey_24dp" +            android:drawablePadding="8dp" +            android:gravity="left|center_vertical" +            android:clickable="true" +            style="?android:attr/borderlessButtonStyle" /> + +        <TextView +            android:id="@+id/create_key_next_button" +            android:paddingLeft="16dp" +            android:paddingRight="16dp" +            android:textAppearance="?android:attr/textAppearanceMedium" +            android:layout_width="match_parent" +            android:layout_height="wrap_content" +            android:layout_weight="1" +            android:text="@string/btn_next" +            android:textAllCaps="true" +            android:minHeight="?android:attr/listPreferredItemHeight" +            android:drawableRight="@drawable/yubi_icon_24dp" +            android:drawablePadding="16dp" +            android:gravity="right|center_vertical" +            android:clickable="false" +            style="?android:attr/borderlessButtonStyle" /> + +    </LinearLayout> + +</RelativeLayout>
\ No newline at end of file | 
