Reorganize classes into separate packages

This commit is contained in:
Alexander Bakker 2018-02-13 21:17:21 +01:00
parent a778cd5661
commit 7eaffc933e
42 changed files with 132 additions and 131 deletions

View file

@ -15,7 +15,7 @@
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/AppTheme"> android:theme="@style/AppTheme">
<activity <activity
android:name=".MainActivity" android:name=".ui.MainActivity"
android:label="@string/app_name" android:label="@string/app_name"
android:theme="@style/AppTheme.Default.NoActionBar" android:theme="@style/AppTheme.Default.NoActionBar"
android:alwaysRetainTaskState="true" android:alwaysRetainTaskState="true"
@ -26,31 +26,31 @@
</intent-filter> </intent-filter>
</activity> </activity>
<activity <activity
android:name=".ScannerActivity" android:name=".ui.ScannerActivity"
android:label="Scan a QR code" android:label="Scan a QR code"
android:theme="@style/AppTheme.Fullscreen" android:theme="@style/AppTheme.Fullscreen"
android:screenOrientation="portrait" android:screenOrientation="portrait"
android:configChanges="keyboardHidden|orientation|screenSize"> android:configChanges="keyboardHidden|orientation|screenSize">
</activity> </activity>
<activity <activity
android:name=".EditProfileActivity" android:name=".ui.EditProfileActivity"
android:label="Edit profile" android:label="Edit profile"
android:theme="@style/AppTheme.Default.TransparentActionBar"> android:theme="@style/AppTheme.Default.TransparentActionBar">
</activity> </activity>
<activity <activity
android:name=".IntroActivity" android:name=".ui.IntroActivity"
android:theme="@style/Theme.Intro" android:theme="@style/Theme.Intro"
android:launchMode="singleTop"> android:launchMode="singleTop">
</activity> </activity>
<activity <activity
android:name=".AuthActivity" android:name=".ui.AuthActivity"
android:launchMode="singleTop" android:launchMode="singleTop"
android:theme="@style/AppTheme.Default.NoActionBar"> android:theme="@style/AppTheme.Default.NoActionBar">
</activity> </activity>
<activity android:name=".PreferencesActivity"> <activity android:name=".ui.PreferencesActivity">
</activity> </activity>
<activity <activity
android:name=".SlotManagerActivity" android:name=".ui.SlotManagerActivity"
android:label="Manage key slots" android:label="Manage key slots"
android:theme="@style/AppTheme.Default.NoActionBar"> android:theme="@style/AppTheme.Default.NoActionBar">
</activity> </activity>

View file

@ -13,6 +13,7 @@ import android.support.annotation.RequiresApi;
import java.util.Collections; import java.util.Collections;
import me.impy.aegis.db.DatabaseManager; import me.impy.aegis.db.DatabaseManager;
import me.impy.aegis.ui.MainActivity;
public class AegisApplication extends Application { public class AegisApplication extends Application {
private boolean _running = false; private boolean _running = false;

View file

@ -1,28 +0,0 @@
package me.impy.aegis;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.BottomSheetDialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
public class EditProfileBottomSheetdialog extends BottomSheetDialogFragment {
LinearLayout _copyLayout;
public static EditProfileBottomSheetdialog getInstance() {
return new EditProfileBottomSheetdialog();
}
public LinearLayout GetCopyLayout()
{
return _copyLayout;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.bottom_sheet_edit_profile, container, false);
}
}

View file

@ -7,7 +7,7 @@ import java.lang.reflect.UndeclaredThrowableException;
import java.util.Arrays; import java.util.Arrays;
import me.impy.aegis.crypto.CryptParameters; import me.impy.aegis.crypto.CryptParameters;
import me.impy.aegis.crypto.slots.SlotCollection; import me.impy.aegis.db.slots.SlotCollection;
import me.impy.aegis.crypto.CryptoUtils; import me.impy.aegis.crypto.CryptoUtils;
import me.impy.aegis.util.LittleByteBuffer; import me.impy.aegis.util.LittleByteBuffer;

View file

@ -1,4 +1,4 @@
package me.impy.aegis.crypto.slots; package me.impy.aegis.db.slots;
public class FingerprintSlot extends RawSlot { public class FingerprintSlot extends RawSlot {
@Override @Override

View file

@ -1,4 +1,4 @@
package me.impy.aegis.crypto.slots; package me.impy.aegis.db.slots;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException; import java.security.spec.InvalidKeySpecException;

View file

@ -1,4 +1,4 @@
package me.impy.aegis.crypto.slots; package me.impy.aegis.db.slots;
import me.impy.aegis.crypto.CryptoUtils; import me.impy.aegis.crypto.CryptoUtils;
import me.impy.aegis.util.LittleByteBuffer; import me.impy.aegis.util.LittleByteBuffer;

View file

@ -1,4 +1,4 @@
package me.impy.aegis.crypto.slots; package me.impy.aegis.db.slots;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
@ -15,7 +15,7 @@ import javax.crypto.spec.SecretKeySpec;
import me.impy.aegis.crypto.CryptoUtils; import me.impy.aegis.crypto.CryptoUtils;
import me.impy.aegis.crypto.MasterKey; import me.impy.aegis.crypto.MasterKey;
import me.impy.aegis.util.Hex; import me.impy.aegis.encoding.Hex;
public abstract class Slot implements Serializable { public abstract class Slot implements Serializable {
public final static byte TYPE_RAW = 0x00; public final static byte TYPE_RAW = 0x00;

View file

@ -1,4 +1,4 @@
package me.impy.aegis.crypto.slots; package me.impy.aegis.db.slots;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;

View file

@ -1,4 +1,4 @@
package me.impy.aegis.crypto.slots; package me.impy.aegis.db.slots;
public class SlotIntegrityException extends Exception { public class SlotIntegrityException extends Exception {

View file

@ -1,4 +1,4 @@
package me.impy.aegis.util; package me.impy.aegis.encoding;
// The hexadecimal utility functions in this file were taken and modified from: http://www.docjar.com/html/api/com/sun/xml/internal/bind/DatatypeConverterImpl.java.html // The hexadecimal utility functions in this file were taken and modified from: http://www.docjar.com/html/api/com/sun/xml/internal/bind/DatatypeConverterImpl.java.html
// It is licensed under GPLv2 with a classpath exception. // It is licensed under GPLv2 with a classpath exception.

View file

@ -7,8 +7,8 @@ import java.util.Arrays;
import me.impy.aegis.crypto.CryptoUtils; import me.impy.aegis.crypto.CryptoUtils;
public class AuthHelper { public class EditTextHelper {
private AuthHelper() { private EditTextHelper() {
} }
public static void clearEditText(EditText text) { public static void clearEditText(EditText text) {
@ -22,7 +22,7 @@ public class AuthHelper {
return chars; return chars;
} }
public static boolean arePasswordsEqual(EditText text1, EditText text2) { public static boolean areEditTextsEqual(EditText text1, EditText text2) {
char[] password = getEditTextChars(text1); char[] password = getEditTextChars(text1);
char[] passwordConfirm = getEditTextChars(text2); char[] passwordConfirm = getEditTextChars(text2);
return password.length != 0 && Arrays.equals(password, passwordConfirm); return password.length != 0 && Arrays.equals(password, passwordConfirm);

View file

@ -1,8 +1,10 @@
package me.impy.aegis; package me.impy.aegis.ui;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.app.AppCompatActivity; import android.support.v7.app.AppCompatActivity;
import me.impy.aegis.AegisApplication;
public abstract class AegisActivity extends AppCompatActivity { public abstract class AegisActivity extends AppCompatActivity {
private AegisApplication _app; private AegisApplication _app;

View file

@ -1,4 +1,4 @@
package me.impy.aegis; package me.impy.aegis.ui;
import android.content.Intent; import android.content.Intent;
import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.FingerprintManager;
@ -15,20 +15,21 @@ import android.widget.TextView;
import com.mattprecious.swirl.SwirlView; import com.mattprecious.swirl.SwirlView;
import java.lang.reflect.UndeclaredThrowableException; import java.lang.reflect.UndeclaredThrowableException;
import java.security.InvalidKeyException;
import javax.crypto.Cipher; import javax.crypto.Cipher;
import javax.crypto.SecretKey; import javax.crypto.SecretKey;
import me.impy.aegis.R;
import me.impy.aegis.crypto.KeyStoreHandle; import me.impy.aegis.crypto.KeyStoreHandle;
import me.impy.aegis.crypto.MasterKey; import me.impy.aegis.crypto.MasterKey;
import me.impy.aegis.crypto.slots.FingerprintSlot; import me.impy.aegis.db.slots.FingerprintSlot;
import me.impy.aegis.crypto.slots.PasswordSlot; import me.impy.aegis.db.slots.PasswordSlot;
import me.impy.aegis.crypto.slots.Slot; import me.impy.aegis.db.slots.Slot;
import me.impy.aegis.crypto.slots.SlotCollection; import me.impy.aegis.db.slots.SlotCollection;
import me.impy.aegis.helpers.FingerprintHelper; import me.impy.aegis.helpers.FingerprintHelper;
import me.impy.aegis.helpers.FingerprintUiHelper; import me.impy.aegis.helpers.FingerprintUiHelper;
import me.impy.aegis.helpers.AuthHelper; import me.impy.aegis.helpers.EditTextHelper;
import me.impy.aegis.ui.tasks.SlotCollectionTask;
public class AuthActivity extends AegisActivity implements FingerprintUiHelper.Callback, SlotCollectionTask.Callback { public class AuthActivity extends AegisActivity implements FingerprintUiHelper.Callback, SlotCollectionTask.Callback {
private EditText _textPassword; private EditText _textPassword;
@ -93,7 +94,7 @@ public class AuthActivity extends AegisActivity implements FingerprintUiHelper.C
button.setOnClickListener(new View.OnClickListener() { button.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
char[] password = AuthHelper.getEditTextChars(_textPassword); char[] password = EditTextHelper.getEditTextChars(_textPassword);
trySlots(PasswordSlot.class, password); trySlots(PasswordSlot.class, password);
} }
}); });

View file

@ -1,4 +1,4 @@
package me.impy.aegis; package me.impy.aegis.ui;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
@ -18,14 +18,15 @@ import android.widget.Spinner;
import com.amulyakhare.textdrawable.TextDrawable; import com.amulyakhare.textdrawable.TextDrawable;
import me.impy.aegis.crypto.CryptoUtils; import me.impy.aegis.R;
import me.impy.aegis.crypto.KeyInfo; import me.impy.aegis.crypto.KeyInfo;
import me.impy.aegis.crypto.KeyInfoException; import me.impy.aegis.crypto.KeyInfoException;
import me.impy.aegis.db.DatabaseEntry; import me.impy.aegis.db.DatabaseEntry;
import me.impy.aegis.encoding.Base32; import me.impy.aegis.encoding.Base32;
import me.impy.aegis.helpers.AuthHelper; import me.impy.aegis.helpers.EditTextHelper;
import me.impy.aegis.helpers.SpinnerHelper; import me.impy.aegis.helpers.SpinnerHelper;
import me.impy.aegis.helpers.TextDrawableHelper; import me.impy.aegis.helpers.TextDrawableHelper;
import me.impy.aegis.ui.views.KeyProfile;
public class EditProfileActivity extends AegisActivity { public class EditProfileActivity extends AegisActivity {
private boolean _isNew = false; private boolean _isNew = false;
@ -217,7 +218,7 @@ public class EditProfileActivity extends AegisActivity {
KeyInfo info = entry.getInfo(); KeyInfo info = entry.getInfo();
try { try {
char[] secret = AuthHelper.getEditTextChars(_textSecret); char[] secret = EditTextHelper.getEditTextChars(_textSecret);
info.setSecret(secret); info.setSecret(secret);
info.setIssuer(_textIssuer.getText().toString()); info.setIssuer(_textIssuer.getText().toString());
info.setPeriod(period); info.setPeriod(period);

View file

@ -1,4 +1,4 @@
package me.impy.aegis; package me.impy.aegis.ui;
import android.Manifest; import android.Manifest;
import android.content.Intent; import android.content.Intent;
@ -12,15 +12,20 @@ import com.github.paolorotolo.appintro.model.SliderPage;
import javax.crypto.Cipher; import javax.crypto.Cipher;
import javax.crypto.SecretKey; import javax.crypto.SecretKey;
import me.impy.aegis.AegisApplication;
import me.impy.aegis.R;
import me.impy.aegis.crypto.CryptResult; import me.impy.aegis.crypto.CryptResult;
import me.impy.aegis.crypto.MasterKey; import me.impy.aegis.crypto.MasterKey;
import me.impy.aegis.crypto.slots.FingerprintSlot; import me.impy.aegis.db.slots.FingerprintSlot;
import me.impy.aegis.crypto.slots.PasswordSlot; import me.impy.aegis.db.slots.PasswordSlot;
import me.impy.aegis.crypto.slots.Slot; import me.impy.aegis.db.slots.Slot;
import me.impy.aegis.crypto.slots.SlotCollection; import me.impy.aegis.db.slots.SlotCollection;
import me.impy.aegis.db.Database; import me.impy.aegis.db.Database;
import me.impy.aegis.db.DatabaseFile; import me.impy.aegis.db.DatabaseFile;
import me.impy.aegis.db.DatabaseManager; import me.impy.aegis.db.DatabaseManager;
import me.impy.aegis.ui.slides.CustomAuthenticatedSlide;
import me.impy.aegis.ui.slides.CustomAuthenticationSlide;
import me.impy.aegis.ui.tasks.DerivationTask;
public class IntroActivity extends AppIntro implements DerivationTask.Callback { public class IntroActivity extends AppIntro implements DerivationTask.Callback {
public static final int RESULT_OK = 0; public static final int RESULT_OK = 0;

View file

@ -1,4 +1,4 @@
package me.impy.aegis; package me.impy.aegis.ui;
import android.Manifest; import android.Manifest;
import android.content.ClipData; import android.content.ClipData;
@ -25,12 +25,16 @@ import java.io.InputStream;
import java.lang.reflect.UndeclaredThrowableException; import java.lang.reflect.UndeclaredThrowableException;
import java.util.List; import java.util.List;
import me.impy.aegis.AegisApplication;
import me.impy.aegis.R;
import me.impy.aegis.crypto.MasterKey; import me.impy.aegis.crypto.MasterKey;
import me.impy.aegis.crypto.slots.SlotCollection; import me.impy.aegis.db.slots.SlotCollection;
import me.impy.aegis.db.DatabaseEntry; import me.impy.aegis.db.DatabaseEntry;
import me.impy.aegis.db.DatabaseManager; import me.impy.aegis.db.DatabaseManager;
import me.impy.aegis.helpers.PermissionHelper; import me.impy.aegis.helpers.PermissionHelper;
import me.impy.aegis.importers.DatabaseImporter; import me.impy.aegis.importers.DatabaseImporter;
import me.impy.aegis.ui.views.KeyProfile;
import me.impy.aegis.ui.views.KeyProfileView;
import me.impy.aegis.util.ByteInputStream; import me.impy.aegis.util.ByteInputStream;
public class MainActivity extends AegisActivity implements KeyProfileView.Listener { public class MainActivity extends AegisActivity implements KeyProfileView.Listener {

View file

@ -1,12 +1,13 @@
package me.impy.aegis; package me.impy.aegis.ui;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.preference.Preference; import android.preference.Preference;
import android.preference.PreferenceFragment; import android.preference.PreferenceFragment;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast; import android.widget.Toast;
import me.impy.aegis.R;
public class PreferencesActivity extends AegisActivity { public class PreferencesActivity extends AegisActivity {
public static final int ACTION_IMPORT = 0; public static final int ACTION_IMPORT = 0;
public static final int ACTION_EXPORT = 1; public static final int ACTION_EXPORT = 1;

View file

@ -1,4 +1,4 @@
package me.impy.aegis; package me.impy.aegis.ui;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
@ -16,6 +16,7 @@ import me.dm7.barcodescanner.zxing.ZXingScannerView;
import me.impy.aegis.crypto.KeyInfo; import me.impy.aegis.crypto.KeyInfo;
import me.impy.aegis.db.DatabaseEntry; import me.impy.aegis.db.DatabaseEntry;
import me.impy.aegis.helpers.SquareFinderView; import me.impy.aegis.helpers.SquareFinderView;
import me.impy.aegis.ui.views.KeyProfile;
public class ScannerActivity extends AegisActivity implements ZXingScannerView.ResultHandler { public class ScannerActivity extends AegisActivity implements ZXingScannerView.ResultHandler {
private ZXingScannerView _scannerView; private ZXingScannerView _scannerView;

View file

@ -1,7 +1,6 @@
package me.impy.aegis; package me.impy.aegis.ui;
import android.content.Intent; import android.content.Intent;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.app.ActionBar; import android.support.v7.app.ActionBar;
import android.support.v7.app.AlertDialog; import android.support.v7.app.AlertDialog;
@ -14,14 +13,19 @@ import android.widget.Toast;
import javax.crypto.Cipher; import javax.crypto.Cipher;
import me.impy.aegis.R;
import me.impy.aegis.crypto.KeyStoreHandle; import me.impy.aegis.crypto.KeyStoreHandle;
import me.impy.aegis.crypto.KeyStoreHandleException; import me.impy.aegis.crypto.KeyStoreHandleException;
import me.impy.aegis.crypto.MasterKey; import me.impy.aegis.crypto.MasterKey;
import me.impy.aegis.crypto.slots.FingerprintSlot; import me.impy.aegis.db.slots.FingerprintSlot;
import me.impy.aegis.crypto.slots.PasswordSlot; import me.impy.aegis.db.slots.PasswordSlot;
import me.impy.aegis.crypto.slots.Slot; import me.impy.aegis.db.slots.Slot;
import me.impy.aegis.crypto.slots.SlotCollection; import me.impy.aegis.db.slots.SlotCollection;
import me.impy.aegis.helpers.FingerprintHelper; import me.impy.aegis.helpers.FingerprintHelper;
import me.impy.aegis.ui.dialogs.FingerprintDialogFragment;
import me.impy.aegis.ui.dialogs.PasswordDialogFragment;
import me.impy.aegis.ui.views.SlotAdapter;
import me.impy.aegis.ui.dialogs.SlotDialogFragment;
public class SlotManagerActivity extends AegisActivity implements SlotAdapter.Listener, SlotDialogFragment.Listener { public class SlotManagerActivity extends AegisActivity implements SlotAdapter.Listener, SlotDialogFragment.Listener {
private MasterKey _masterKey; private MasterKey _masterKey;

View file

@ -1,4 +1,4 @@
package me.impy.aegis; package me.impy.aegis.ui.dialogs;
import android.app.Dialog; import android.app.Dialog;
import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.FingerprintManager;
@ -13,9 +13,10 @@ import com.mattprecious.swirl.SwirlView;
import javax.crypto.Cipher; import javax.crypto.Cipher;
import javax.crypto.SecretKey; import javax.crypto.SecretKey;
import me.impy.aegis.R;
import me.impy.aegis.crypto.KeyStoreHandle; import me.impy.aegis.crypto.KeyStoreHandle;
import me.impy.aegis.crypto.slots.FingerprintSlot; import me.impy.aegis.db.slots.FingerprintSlot;
import me.impy.aegis.crypto.slots.Slot; import me.impy.aegis.db.slots.Slot;
import me.impy.aegis.helpers.FingerprintHelper; import me.impy.aegis.helpers.FingerprintHelper;
import me.impy.aegis.helpers.FingerprintUiHelper; import me.impy.aegis.helpers.FingerprintUiHelper;

View file

@ -1,4 +1,4 @@
package me.impy.aegis; package me.impy.aegis.ui.dialogs;
import android.app.Dialog; import android.app.Dialog;
import android.os.Bundle; import android.os.Bundle;
@ -12,9 +12,11 @@ import android.widget.EditText;
import javax.crypto.Cipher; import javax.crypto.Cipher;
import me.impy.aegis.crypto.slots.PasswordSlot; import me.impy.aegis.R;
import me.impy.aegis.crypto.slots.Slot; import me.impy.aegis.db.slots.PasswordSlot;
import me.impy.aegis.helpers.AuthHelper; import me.impy.aegis.db.slots.Slot;
import me.impy.aegis.helpers.EditTextHelper;
import me.impy.aegis.ui.tasks.DerivationTask;
public class PasswordDialogFragment extends SlotDialogFragment { public class PasswordDialogFragment extends SlotDialogFragment {
private Button _buttonOK; private Button _buttonOK;
@ -39,11 +41,11 @@ public class PasswordDialogFragment extends SlotDialogFragment {
// replace the default listener // replace the default listener
_buttonOK.setOnClickListener(v -> { _buttonOK.setOnClickListener(v -> {
if (!AuthHelper.arePasswordsEqual(textPassword, textPasswordConfirm)) { if (!EditTextHelper.areEditTextsEqual(textPassword, textPasswordConfirm)) {
return; return;
} }
char[] password = AuthHelper.getEditTextChars(textPassword); char[] password = EditTextHelper.getEditTextChars(textPassword);
PasswordSlot slot = new PasswordSlot(); PasswordSlot slot = new PasswordSlot();
DerivationTask task = new DerivationTask(getContext(), key -> { DerivationTask task = new DerivationTask(getContext(), key -> {
Cipher cipher; Cipher cipher;
@ -66,7 +68,7 @@ public class PasswordDialogFragment extends SlotDialogFragment {
TextWatcher watcher = new TextWatcher() { TextWatcher watcher = new TextWatcher() {
public void onTextChanged(CharSequence c, int start, int before, int count) { public void onTextChanged(CharSequence c, int start, int before, int count) {
boolean equal = AuthHelper.arePasswordsEqual(textPassword, textPasswordConfirm); boolean equal = EditTextHelper.areEditTextsEqual(textPassword, textPasswordConfirm);
_buttonOK.setEnabled(equal); _buttonOK.setEnabled(equal);
} }
public void beforeTextChanged(CharSequence c, int start, int count, int after) { } public void beforeTextChanged(CharSequence c, int start, int count, int after) { }

View file

@ -1,11 +1,11 @@
package me.impy.aegis; package me.impy.aegis.ui.dialogs;
import android.content.Context; import android.content.Context;
import android.support.v4.app.DialogFragment; import android.support.v4.app.DialogFragment;
import javax.crypto.Cipher; import javax.crypto.Cipher;
import me.impy.aegis.crypto.slots.Slot; import me.impy.aegis.db.slots.Slot;
public class SlotDialogFragment extends DialogFragment { public class SlotDialogFragment extends DialogFragment {
private Listener _listener; private Listener _listener;

View file

@ -1,4 +1,4 @@
package me.impy.aegis; package me.impy.aegis.ui.slides;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
@ -23,11 +23,12 @@ import java.lang.reflect.UndeclaredThrowableException;
import javax.crypto.Cipher; import javax.crypto.Cipher;
import javax.crypto.SecretKey; import javax.crypto.SecretKey;
import me.impy.aegis.R;
import me.impy.aegis.crypto.KeyStoreHandle; import me.impy.aegis.crypto.KeyStoreHandle;
import me.impy.aegis.crypto.slots.FingerprintSlot; import me.impy.aegis.db.slots.FingerprintSlot;
import me.impy.aegis.crypto.slots.Slot; import me.impy.aegis.db.slots.Slot;
import me.impy.aegis.helpers.FingerprintUiHelper; import me.impy.aegis.helpers.FingerprintUiHelper;
import me.impy.aegis.helpers.AuthHelper; import me.impy.aegis.helpers.EditTextHelper;
public class CustomAuthenticatedSlide extends Fragment implements FingerprintUiHelper.Callback, ISlidePolicy, ISlideSelectionListener { public class CustomAuthenticatedSlide extends Fragment implements FingerprintUiHelper.Callback, ISlidePolicy, ISlideSelectionListener {
private int _cryptType; private int _cryptType;
@ -67,7 +68,7 @@ public class CustomAuthenticatedSlide extends Fragment implements FingerprintUiH
} }
public char[] getPassword() { public char[] getPassword() {
return AuthHelper.getEditTextChars(_textPassword); return EditTextHelper.getEditTextChars(_textPassword);
} }
public Cipher getFingerCipher() { public Cipher getFingerCipher() {
@ -138,7 +139,7 @@ public class CustomAuthenticatedSlide extends Fragment implements FingerprintUiH
} }
// intentional fallthrough // intentional fallthrough
case CustomAuthenticationSlide.CRYPT_TYPE_PASS: case CustomAuthenticationSlide.CRYPT_TYPE_PASS:
return AuthHelper.arePasswordsEqual(_textPassword, _textPasswordConfirm); return EditTextHelper.areEditTextsEqual(_textPassword, _textPasswordConfirm);
default: default:
throw new RuntimeException(); throw new RuntimeException();
} }
@ -147,7 +148,7 @@ public class CustomAuthenticatedSlide extends Fragment implements FingerprintUiH
@Override @Override
public void onUserIllegallyRequestedNextPage() { public void onUserIllegallyRequestedNextPage() {
String message; String message;
if (!AuthHelper.arePasswordsEqual(_textPassword, _textPasswordConfirm)) { if (!EditTextHelper.areEditTextsEqual(_textPassword, _textPasswordConfirm)) {
message = "Passwords should be equal and non-empty"; message = "Passwords should be equal and non-empty";
} else if (!_fingerAuthenticated) { } else if (!_fingerAuthenticated) {
message = "Register your fingerprint"; message = "Register your fingerprint";

View file

@ -1,4 +1,4 @@
package me.impy.aegis; package me.impy.aegis.ui.slides;
import android.content.Intent; import android.content.Intent;
import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.FingerprintManager;
@ -14,6 +14,7 @@ import android.widget.TextView;
import com.github.paolorotolo.appintro.ISlidePolicy; import com.github.paolorotolo.appintro.ISlidePolicy;
import me.impy.aegis.R;
import me.impy.aegis.helpers.FingerprintHelper; import me.impy.aegis.helpers.FingerprintHelper;
public class CustomAuthenticationSlide extends Fragment implements ISlidePolicy, RadioGroup.OnCheckedChangeListener { public class CustomAuthenticationSlide extends Fragment implements ISlidePolicy, RadioGroup.OnCheckedChangeListener {

View file

@ -1,4 +1,4 @@
package me.impy.aegis; package me.impy.aegis.ui.tasks;
import android.content.Context; import android.content.Context;
import android.os.Process; import android.os.Process;
@ -6,7 +6,7 @@ import android.os.Process;
import javax.crypto.SecretKey; import javax.crypto.SecretKey;
import me.impy.aegis.crypto.CryptoUtils; import me.impy.aegis.crypto.CryptoUtils;
import me.impy.aegis.crypto.slots.PasswordSlot; import me.impy.aegis.db.slots.PasswordSlot;
public class DerivationTask extends ProgressDialogTask<DerivationTask.Params, SecretKey> { public class DerivationTask extends ProgressDialogTask<DerivationTask.Params, SecretKey> {
private Callback _cb; private Callback _cb;
@ -36,12 +36,12 @@ public class DerivationTask extends ProgressDialogTask<DerivationTask.Params, Se
_cb.onTaskFinished(key); _cb.onTaskFinished(key);
} }
static class Params { public static class Params {
public PasswordSlot Slot; public PasswordSlot Slot;
public char[] Password; public char[] Password;
} }
interface Callback { public interface Callback {
void onTaskFinished(SecretKey key); void onTaskFinished(SecretKey key);
} }
} }

View file

@ -1,4 +1,4 @@
package me.impy.aegis; package me.impy.aegis.ui.tasks;
import android.app.ProgressDialog; import android.app.ProgressDialog;
import android.content.Context; import android.content.Context;

View file

@ -1,4 +1,4 @@
package me.impy.aegis; package me.impy.aegis.ui.tasks;
import android.content.Context; import android.content.Context;
import android.os.Process; import android.os.Process;
@ -8,13 +8,12 @@ import java.lang.reflect.UndeclaredThrowableException;
import javax.crypto.Cipher; import javax.crypto.Cipher;
import javax.crypto.SecretKey; import javax.crypto.SecretKey;
import me.impy.aegis.crypto.CryptoUtils;
import me.impy.aegis.crypto.MasterKey; import me.impy.aegis.crypto.MasterKey;
import me.impy.aegis.crypto.slots.FingerprintSlot; import me.impy.aegis.db.slots.FingerprintSlot;
import me.impy.aegis.crypto.slots.PasswordSlot; import me.impy.aegis.db.slots.PasswordSlot;
import me.impy.aegis.crypto.slots.Slot; import me.impy.aegis.db.slots.Slot;
import me.impy.aegis.crypto.slots.SlotCollection; import me.impy.aegis.db.slots.SlotCollection;
import me.impy.aegis.crypto.slots.SlotIntegrityException; import me.impy.aegis.db.slots.SlotIntegrityException;
public class SlotCollectionTask<T extends Slot> extends ProgressDialogTask<SlotCollectionTask.Params, MasterKey> { public class SlotCollectionTask<T extends Slot> extends ProgressDialogTask<SlotCollectionTask.Params, MasterKey> {
private Callback _cb; private Callback _cb;
@ -71,12 +70,12 @@ public class SlotCollectionTask<T extends Slot> extends ProgressDialogTask<SlotC
_cb.onTaskFinished(masterKey); _cb.onTaskFinished(masterKey);
} }
static class Params { public static class Params {
public SlotCollection Slots; public SlotCollection Slots;
public Object Obj; public Object Obj;
} }
interface Callback { public interface Callback {
void onTaskFinished(MasterKey key); void onTaskFinished(MasterKey key);
} }
} }

View file

@ -1,7 +1,6 @@
package me.impy.aegis; package me.impy.aegis.ui.views;
import com.amulyakhare.textdrawable.TextDrawable; import com.amulyakhare.textdrawable.TextDrawable;
import com.amulyakhare.textdrawable.util.ColorGenerator;
import java.io.Serializable; import java.io.Serializable;
import java.lang.reflect.UndeclaredThrowableException; import java.lang.reflect.UndeclaredThrowableException;

View file

@ -1,4 +1,4 @@
package me.impy.aegis; package me.impy.aegis.ui.views;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@ -8,6 +8,7 @@ import android.view.ViewGroup;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import me.impy.aegis.R;
import me.impy.aegis.helpers.ItemTouchHelperAdapter; import me.impy.aegis.helpers.ItemTouchHelperAdapter;
public class KeyProfileAdapter extends RecyclerView.Adapter<KeyProfileHolder> implements ItemTouchHelperAdapter { public class KeyProfileAdapter extends RecyclerView.Adapter<KeyProfileHolder> implements ItemTouchHelperAdapter {

View file

@ -1,4 +1,4 @@
package me.impy.aegis; package me.impy.aegis.ui.views;
import android.animation.ObjectAnimator; import android.animation.ObjectAnimator;
import android.os.Handler; import android.os.Handler;
@ -11,6 +11,8 @@ import android.widget.TextView;
import com.amulyakhare.textdrawable.TextDrawable; import com.amulyakhare.textdrawable.TextDrawable;
import me.impy.aegis.R;
public class KeyProfileHolder extends RecyclerView.ViewHolder { public class KeyProfileHolder extends RecyclerView.ViewHolder {
private TextView _profileName; private TextView _profileName;
private TextView _profileCode; private TextView _profileCode;

View file

@ -1,4 +1,4 @@
package me.impy.aegis; package me.impy.aegis.ui.views;
import android.os.Bundle; import android.os.Bundle;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
@ -9,6 +9,7 @@ import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import me.impy.aegis.R;
import me.impy.aegis.db.DatabaseEntry; import me.impy.aegis.db.DatabaseEntry;
import me.impy.aegis.helpers.SimpleItemTouchHelperCallback; import me.impy.aegis.helpers.SimpleItemTouchHelperCallback;

View file

@ -1,4 +1,4 @@
package me.impy.aegis; package me.impy.aegis.ui.views;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@ -7,7 +7,8 @@ import android.view.ViewGroup;
import java.util.ArrayList; import java.util.ArrayList;
import me.impy.aegis.crypto.slots.Slot; import me.impy.aegis.R;
import me.impy.aegis.db.slots.Slot;
public class SlotAdapter extends RecyclerView.Adapter<SlotHolder> { public class SlotAdapter extends RecyclerView.Adapter<SlotHolder> {
private Listener _listener; private Listener _listener;

View file

@ -1,4 +1,4 @@
package me.impy.aegis; package me.impy.aegis.ui.views;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.view.View; import android.view.View;
@ -6,12 +6,13 @@ import android.widget.ImageView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import me.impy.aegis.R;
import me.impy.aegis.crypto.KeyStoreHandle; import me.impy.aegis.crypto.KeyStoreHandle;
import me.impy.aegis.crypto.KeyStoreHandleException; import me.impy.aegis.crypto.KeyStoreHandleException;
import me.impy.aegis.crypto.slots.FingerprintSlot; import me.impy.aegis.db.slots.FingerprintSlot;
import me.impy.aegis.crypto.slots.PasswordSlot; import me.impy.aegis.db.slots.PasswordSlot;
import me.impy.aegis.crypto.slots.RawSlot; import me.impy.aegis.db.slots.RawSlot;
import me.impy.aegis.crypto.slots.Slot; import me.impy.aegis.db.slots.Slot;
import me.impy.aegis.helpers.FingerprintHelper; import me.impy.aegis.helpers.FingerprintHelper;
public class SlotHolder extends RecyclerView.ViewHolder { public class SlotHolder extends RecyclerView.ViewHolder {

View file

@ -5,7 +5,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:fitsSystemWindows="true" android:fitsSystemWindows="true"
tools:context="me.impy.aegis.AuthActivity"> tools:context="me.impy.aegis.ui.AuthActivity">
<LinearLayout <LinearLayout
android:orientation="vertical" android:orientation="vertical"
android:layout_width="match_parent" android:layout_width="match_parent"

View file

@ -5,6 +5,6 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:fitsSystemWindows="true" android:fitsSystemWindows="true"
tools:context="me.impy.aegis.IntroActivity"> tools:context="me.impy.aegis.ui.IntroActivity">
</android.support.design.widget.CoordinatorLayout> </android.support.design.widget.CoordinatorLayout>

View file

@ -5,7 +5,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:fitsSystemWindows="true" android:fitsSystemWindows="true"
tools:context="me.impy.aegis.MainActivity"> tools:context="me.impy.aegis.ui.MainActivity">
<android.support.design.widget.AppBarLayout <android.support.design.widget.AppBarLayout
android:layout_width="match_parent" android:layout_width="match_parent"
@ -22,7 +22,7 @@
</android.support.design.widget.AppBarLayout> </android.support.design.widget.AppBarLayout>
<fragment <fragment
android:name="me.impy.aegis.KeyProfileView" android:name="me.impy.aegis.ui.views.KeyProfileView"
android:id="@+id/key_profiles" android:id="@+id/key_profiles"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_width="match_parent" android:layout_width="match_parent"

View file

@ -9,6 +9,6 @@
android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin" android:paddingTop="@dimen/activity_vertical_margin"
tools:context="me.impy.aegis.ScannerActivity"> tools:context="me.impy.aegis.ui.ScannerActivity">
</RelativeLayout> </RelativeLayout>

View file

@ -5,7 +5,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:fitsSystemWindows="true" android:fitsSystemWindows="true"
tools:context="me.impy.aegis.SlotManagerActivity"> tools:context="me.impy.aegis.ui.SlotManagerActivity">
<android.support.design.widget.AppBarLayout <android.support.design.widget.AppBarLayout
android:layout_width="match_parent" android:layout_width="match_parent"

View file

@ -2,7 +2,7 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android" <menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
tools:context="me.impy.aegis.EditProfileActivity"> tools:context="me.impy.aegis.ui.EditProfileActivity">
<item <item
android:id="@+id/action_save" android:id="@+id/action_save"
app:showAsAction="ifRoom" app:showAsAction="ifRoom"

View file

@ -1,7 +1,7 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android" <menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
tools:context="me.impy.aegis.MainActivity"> tools:context="me.impy.aegis.ui.MainActivity">
<item <item
android:id="@+id/action_lock" android:id="@+id/action_lock"
android:icon="@drawable/ic_lock" android:icon="@drawable/ic_lock"

View file

@ -2,7 +2,7 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android" <menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
tools:context="me.impy.aegis.SlotManagerActivity"> tools:context="me.impy.aegis.ui.SlotManagerActivity">
<item <item
android:id="@+id/action_save" android:id="@+id/action_save"
app:showAsAction="ifRoom" app:showAsAction="ifRoom"