Refactor code to lock

This commit is contained in:
J-Jamet
2018-03-04 12:39:21 +01:00
parent f66500f535
commit a1ecc5b399
12 changed files with 75 additions and 151 deletions

View File

@@ -56,6 +56,7 @@ import com.keepassdroid.database.PwDatabase;
import com.keepassdroid.database.PwEntry; import com.keepassdroid.database.PwEntry;
import com.keepassdroid.database.exception.SamsungClipboardException; import com.keepassdroid.database.exception.SamsungClipboardException;
import com.keepassdroid.intents.Intents; import com.keepassdroid.intents.Intents;
import com.keepassdroid.password.PasswordActivity;
import com.keepassdroid.settings.PrefsUtil; import com.keepassdroid.settings.PrefsUtil;
import com.keepassdroid.tasks.UIToastTask; import com.keepassdroid.tasks.UIToastTask;
import com.keepassdroid.utils.EmptyUtils; import com.keepassdroid.utils.EmptyUtils;
@@ -63,7 +64,6 @@ import com.keepassdroid.utils.MenuUtil;
import com.keepassdroid.utils.Types; import com.keepassdroid.utils.Types;
import com.keepassdroid.utils.Util; import com.keepassdroid.utils.Util;
import com.keepassdroid.view.EntryContentsView; import com.keepassdroid.view.EntryContentsView;
import com.kunzisoft.keepass.KeePass;
import com.kunzisoft.keepass.R; import com.kunzisoft.keepass.R;
import java.util.Date; import java.util.Date;
@@ -74,7 +74,7 @@ import java.util.UUID;
import static com.keepassdroid.settings.PrefsUtil.isClipboardNotificationsEnable; import static com.keepassdroid.settings.PrefsUtil.isClipboardNotificationsEnable;
public class EntryActivity extends LockCloseHideActivity { public class EntryActivity extends LockingHideActivity {
public static final String KEY_ENTRY = "entry"; public static final String KEY_ENTRY = "entry";
public static final int NOTIFY_USERNAME = 1; public static final int NOTIFY_USERNAME = 1;
@@ -91,7 +91,7 @@ public class EntryActivity extends LockCloseHideActivity {
private BroadcastReceiver mIntentReceiver; private BroadcastReceiver mIntentReceiver;
protected boolean readOnly = false; protected boolean readOnly = false;
public static void Launch(Activity act, PwEntry pw) { public static void launch(Activity act, PwEntry pw) {
Intent intent = new Intent(act, EntryActivity.class); Intent intent = new Intent(act, EntryActivity.class);
intent.putExtra(KEY_ENTRY, Types.UUIDtoBytes(pw.getUUID())); intent.putExtra(KEY_ENTRY, Types.UUIDtoBytes(pw.getUUID()));
act.startActivityForResult(intent, EntryEditActivity.ADD_OR_UPDATE_ENTRY_REQUEST_CODE); act.startActivityForResult(intent, EntryEditActivity.ADD_OR_UPDATE_ENTRY_REQUEST_CODE);
@@ -120,8 +120,6 @@ public class EntryActivity extends LockCloseHideActivity {
mShowPassword = !PrefsUtil.isPasswordMask(this); mShowPassword = !PrefsUtil.isPasswordMask(this);
setResult(KeePass.EXIT_NORMAL);
// Get Entry from UUID // Get Entry from UUID
Intent i = getIntent(); Intent i = getIntent();
UUID uuid = Types.bytestoUUID(i.getByteArrayExtra(KEY_ENTRY)); UUID uuid = Types.bytestoUUID(i.getByteArrayExtra(KEY_ENTRY));
@@ -388,7 +386,7 @@ public class EntryActivity extends LockCloseHideActivity {
case R.id.menu_lock: case R.id.menu_lock:
App.setShutdown(); App.setShutdown();
setResult(KeePass.EXIT_LOCK); setResult(PasswordActivity.RESULT_EXIT_LOCK);
finish(); finish();
return true; return true;

View File

@@ -59,7 +59,6 @@ import com.keepassdroid.utils.MenuUtil;
import com.keepassdroid.utils.Types; import com.keepassdroid.utils.Types;
import com.keepassdroid.utils.Util; import com.keepassdroid.utils.Util;
import com.keepassdroid.view.EntryEditNewField; import com.keepassdroid.view.EntryEditNewField;
import com.kunzisoft.keepass.KeePass;
import com.kunzisoft.keepass.R; import com.kunzisoft.keepass.R;
import java.util.ArrayList; import java.util.ArrayList;
@@ -68,7 +67,7 @@ import java.util.Date;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
public class EntryEditActivity extends LockCloseHideActivity public class EntryEditActivity extends LockingHideActivity
implements IconPickerDialogFragment.IconPickerListener, implements IconPickerDialogFragment.IconPickerListener,
GeneratePasswordDialogFragment.GeneratePasswordListener { GeneratePasswordDialogFragment.GeneratePasswordListener {
@@ -123,7 +122,6 @@ public class EntryEditActivity extends LockCloseHideActivity
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.entry_edit); setContentView(R.layout.entry_edit);
setResult(KeePass.EXIT_NORMAL);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle(getString(R.string.app_name)); toolbar.setTitle(getString(R.string.app_name));

View File

@@ -54,10 +54,10 @@ import com.keepassdroid.dialog.ReadOnlyDialog;
import com.keepassdroid.fragments.AssignMasterKeyDialogFragment; import com.keepassdroid.fragments.AssignMasterKeyDialogFragment;
import com.keepassdroid.fragments.GroupEditDialogFragment; import com.keepassdroid.fragments.GroupEditDialogFragment;
import com.keepassdroid.fragments.IconPickerDialogFragment; import com.keepassdroid.fragments.IconPickerDialogFragment;
import com.keepassdroid.password.PasswordActivity;
import com.keepassdroid.search.SearchResultsActivity; import com.keepassdroid.search.SearchResultsActivity;
import com.keepassdroid.tasks.ProgressTask; import com.keepassdroid.tasks.ProgressTask;
import com.keepassdroid.view.ListNodesWithAddButtonView; import com.keepassdroid.view.ListNodesWithAddButtonView;
import com.kunzisoft.keepass.KeePass;
import com.kunzisoft.keepass.R; import com.kunzisoft.keepass.R;
public class GroupActivity extends ListNodesActivity public class GroupActivity extends ListNodesActivity
@@ -76,11 +76,11 @@ public class GroupActivity extends ListNodesActivity
private static final String TAG = "Group Activity:"; private static final String TAG = "Group Activity:";
public static void Launch(Activity act) { public static void launch(Activity act) {
Launch(act, null); launch(act, null);
} }
public static void Launch(Activity act, PwGroup group) { public static void launch(Activity act, PwGroup group) {
Intent intent = new Intent(act, GroupActivity.class); Intent intent = new Intent(act, GroupActivity.class);
if ( group != null ) { if ( group != null ) {
intent.putExtra(KEY_ENTRY, group.getId()); intent.putExtra(KEY_ENTRY, group.getId());
@@ -175,10 +175,10 @@ public class GroupActivity extends ListNodesActivity
mAdapter.registerANodeToUpdate(node); mAdapter.registerANodeToUpdate(node);
switch (node.getType()) { switch (node.getType()) {
case GROUP: case GROUP:
GroupActivity.Launch(GroupActivity.this, (PwGroup) node); GroupActivity.launch(GroupActivity.this, (PwGroup) node);
break; break;
case ENTRY: case ENTRY:
EntryActivity.Launch(GroupActivity.this, (PwEntry) node); EntryActivity.launch(GroupActivity.this, (PwEntry) node);
break; break;
} }
return true; return true;
@@ -296,7 +296,7 @@ public class GroupActivity extends ListNodesActivity
case R.id.menu_lock: case R.id.menu_lock:
App.setShutdown(); App.setShutdown();
setResult(KeePass.EXIT_LOCK); setResult(PasswordActivity.RESULT_EXIT_LOCK);
finish(); finish();
return true; return true;

View File

@@ -53,10 +53,9 @@ import com.keepassdroid.tasks.UIToastTask;
import com.keepassdroid.utils.MenuUtil; import com.keepassdroid.utils.MenuUtil;
import com.keepassdroid.database.SortNodeEnum; import com.keepassdroid.database.SortNodeEnum;
import com.keepassdroid.view.AssignPasswordHelper; import com.keepassdroid.view.AssignPasswordHelper;
import com.kunzisoft.keepass.KeePass;
import com.kunzisoft.keepass.R; import com.kunzisoft.keepass.R;
public abstract class ListNodesActivity extends LockCloseListActivity public abstract class ListNodesActivity extends LockingActivity
implements AssignMasterKeyDialogFragment.AssignPasswordDialogListener, implements AssignMasterKeyDialogFragment.AssignPasswordDialogListener,
NodeAdapter.OnNodeClickCallback, NodeAdapter.OnNodeClickCallback,
SortDialogFragment.SortSelectionListener { SortDialogFragment.SortSelectionListener {
@@ -87,7 +86,6 @@ public abstract class ListNodesActivity extends LockCloseListActivity
ActivityCompat.invalidateOptionsMenu(this); ActivityCompat.invalidateOptionsMenu(this);
setContentView(R.layout.list_nodes); setContentView(R.layout.list_nodes);
setResult(KeePass.EXIT_NORMAL);
mCurrentGroup = initCurrentGroup(); mCurrentGroup = initCurrentGroup();
@@ -139,10 +137,10 @@ public abstract class ListNodesActivity extends LockCloseListActivity
mAdapter.registerANodeToUpdate(node); mAdapter.registerANodeToUpdate(node);
switch (node.getType()) { switch (node.getType()) {
case GROUP: case GROUP:
GroupActivity.Launch(this, (PwGroup) node); GroupActivity.launch(this, (PwGroup) node);
break; break;
case ENTRY: case ENTRY:
EntryActivity.Launch(this, (PwEntry) node); EntryActivity.launch(this, (PwEntry) node);
break; break;
} }
} }

View File

@@ -1,46 +0,0 @@
/*
* Copyright 2017 Brian Pellin, Jeremy Jamet / Kunzisoft.
*
* This file is part of KeePass DX.
*
* KeePass DX 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 2 of the License, or
* (at your option) any later version.
*
* KeePass DX 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 KeePass DX. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.keepassdroid.activities;
import com.keepassdroid.compat.BuildCompat;
import android.os.Bundle;
import android.view.WindowManager.LayoutParams;
/**
* Locking Close Activity that sets FLAG_SECURE to prevent screenshots, and from
* appearing in the recent app preview
* @author Brian Pellin
*
*/
public abstract class LockCloseHideActivity extends LockCloseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Several gingerbread devices have problems with FLAG_SECURE
int ver = BuildCompat.getSdkVersion();
if (ver >= BuildCompat.VERSION_CODE_ICE_CREAM_SANDWICH || ver < BuildCompat.VERSION_CODE_GINGERBREAD) {
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
}
}
}

View File

@@ -1,32 +0,0 @@
/*
* Copyright 2017 Brian Pellin, Jeremy Jamet / Kunzisoft.
*
* This file is part of KeePass DX.
*
* KeePass DX 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 2 of the License, or
* (at your option) any later version.
*
* KeePass DX 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 KeePass DX. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.keepassdroid.activities;
import com.keepassdroid.timeout.TimeoutHelper;
public abstract class LockCloseListActivity extends LockingActivity {
@Override
protected void onResume() {
super.onResume();
TimeoutHelper.checkShutdown(this);
}
}

View File

@@ -21,8 +21,27 @@ package com.keepassdroid.activities;
import android.content.ActivityNotFoundException; import android.content.ActivityNotFoundException;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle;
import android.view.WindowManager;
public abstract class LockCloseActivity extends LockingActivity { import com.keepassdroid.compat.BuildCompat;
/**
* Locking Hide Activity that sets FLAG_SECURE to prevent screenshots, and from
* appearing in the recent app preview
*/
public abstract class LockingHideActivity extends LockingActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Several gingerbread devices have problems with FLAG_SECURE
int ver = BuildCompat.getSdkVersion();
if (ver >= BuildCompat.VERSION_CODE_ICE_CREAM_SANDWICH || ver < BuildCompat.VERSION_CODE_GINGERBREAD) {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
}
}
/* (non-Javadoc) Workaround for HTC Linkify issues /* (non-Javadoc) Workaround for HTC Linkify issues
* @see android.app.Activity#startActivity(android.content.Intent) * @see android.app.Activity#startActivity(android.content.Intent)

View File

@@ -130,7 +130,7 @@ public class FileSelectActivity extends StylishActivity implements
public void onClick(View v) { public void onClick(View v) {
String fileName = openFileNameView.getText().toString(); String fileName = openFileNameView.getText().toString();
try { try {
PasswordActivity.Launch(FileSelectActivity.this, fileName); PasswordActivity.launch(FileSelectActivity.this, fileName);
} }
catch (ContentFileNotFoundException e) { catch (ContentFileNotFoundException e) {
Toast.makeText(FileSelectActivity.this, Toast.makeText(FileSelectActivity.this,
@@ -185,7 +185,7 @@ public class FileSelectActivity extends StylishActivity implements
if (db.exists()) { if (db.exists()) {
try { try {
PasswordActivity.Launch(FileSelectActivity.this, path); PasswordActivity.launch(FileSelectActivity.this, path);
} catch (Exception e) { } catch (Exception e) {
// Ignore exception // Ignore exception
} }
@@ -193,7 +193,7 @@ public class FileSelectActivity extends StylishActivity implements
} }
else { else {
try { try {
PasswordActivity.Launch(FileSelectActivity.this, dbUri.toString()); PasswordActivity.launch(FileSelectActivity.this, dbUri.toString());
} catch (Exception e) { } catch (Exception e) {
// Ignore exception // Ignore exception
} }
@@ -377,7 +377,7 @@ public class FileSelectActivity extends StylishActivity implements
fileHistory.createFile(mUri, getFilename()); fileHistory.createFile(mUri, getFilename());
mAdapter.notifyDataSetChanged(); mAdapter.notifyDataSetChanged();
updateTitleFileListView(); updateTitleFileListView();
GroupActivity.Launch(FileSelectActivity.this); GroupActivity.launch(FileSelectActivity.this);
} }
} }
} }
@@ -388,7 +388,7 @@ public class FileSelectActivity extends StylishActivity implements
@Override @Override
public void afterOpenFile(String fileName, String keyFile) { public void afterOpenFile(String fileName, String keyFile) {
try { try {
PasswordActivity.Launch(FileSelectActivity.this, PasswordActivity.launch(FileSelectActivity.this,
fileName, keyFile); fileName, keyFile);
} catch (ContentFileNotFoundException e) { } catch (ContentFileNotFoundException e) {
Toast.makeText(FileSelectActivity.this, Toast.makeText(FileSelectActivity.this,

View File

@@ -69,7 +69,6 @@ import com.keepassdroid.utils.MenuUtil;
import com.keepassdroid.utils.UriUtil; import com.keepassdroid.utils.UriUtil;
import com.keepassdroid.view.FingerPrintDialog; import com.keepassdroid.view.FingerPrintDialog;
import com.keepassdroid.view.KeyFileHelper; import com.keepassdroid.view.KeyFileHelper;
import com.kunzisoft.keepass.KeePass;
import com.kunzisoft.keepass.R; import com.kunzisoft.keepass.R;
import java.io.File; import java.io.File;
@@ -91,6 +90,8 @@ public class PasswordActivity extends LockingActivity
implements FingerPrintHelper.FingerPrintCallback, UriIntentInitTaskCallback { implements FingerPrintHelper.FingerPrintCallback, UriIntentInitTaskCallback {
public static final String KEY_DEFAULT_FILENAME = "defaultFileName"; public static final String KEY_DEFAULT_FILENAME = "defaultFileName";
public static final int RESULT_EXIT_LOCK = 1450;
private static final String KEY_PASSWORD = "password"; private static final String KEY_PASSWORD = "password";
private static final String KEY_LAUNCH_IMMEDIATELY = "launchImmediately"; private static final String KEY_LAUNCH_IMMEDIATELY = "launchImmediately";
@@ -122,13 +123,13 @@ public class PasswordActivity extends LockingActivity
private KeyFileHelper keyFileHelper; private KeyFileHelper keyFileHelper;
public static void Launch( public static void launch(
Activity act, Activity act,
String fileName) throws FileNotFoundException { String fileName) throws FileNotFoundException {
Launch(act, fileName, ""); launch(act, fileName, "");
} }
public static void Launch( public static void launch(
Activity act, Activity act,
String fileName, String fileName,
String keyFile) throws FileNotFoundException { String keyFile) throws FileNotFoundException {
@@ -147,12 +148,11 @@ public class PasswordActivity extends LockingActivity
} }
} }
Intent i = new Intent(act, PasswordActivity.class); Intent intent = new Intent(act, PasswordActivity.class);
i.putExtra(UriIntentInitTask.KEY_FILENAME, fileName); intent.putExtra(UriIntentInitTask.KEY_FILENAME, fileName);
i.putExtra(UriIntentInitTask.KEY_KEYFILE, keyFile); intent.putExtra(UriIntentInitTask.KEY_KEYFILE, keyFile);
// only to avoid visible flickering when redirecting
act.startActivityForResult(i, 0); act.startActivityForResult(intent, 0);
} }
@Override @Override
@@ -162,8 +162,9 @@ public class PasswordActivity extends LockingActivity
Intent data) { Intent data) {
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data);
boolean stopResult = false;
if (keyFileHelper != null) { if (keyFileHelper != null) {
keyFileHelper.onActivityResultCallback(requestCode, resultCode, data, stopResult = keyFileHelper.onActivityResultCallback(requestCode, resultCode, data,
new KeyFileHelper.KeyFileCallback() { new KeyFileHelper.KeyFileCallback() {
@Override @Override
public void onKeyFileResultCallback(Uri uri) { public void onKeyFileResultCallback(Uri uri) {
@@ -174,18 +175,14 @@ public class PasswordActivity extends LockingActivity
}); });
} }
switch (requestCode) { if (!stopResult) {
case KeePass.EXIT_NORMAL: switch (resultCode) {
setEmptyViews(); case RESULT_EXIT_LOCK:
App.getDB().clear(); case Activity.RESULT_CANCELED:
break; setEmptyViews();
App.getDB().clear();
case KeePass.EXIT_LOCK: break;
setResult(KeePass.EXIT_LOCK); }
setEmptyViews();
finish();
App.getDB().clear();
break;
} }
} }
@@ -778,12 +775,12 @@ public class PasswordActivity extends LockingActivity
public void onClick( public void onClick(
DialogInterface dialog, DialogInterface dialog,
int which) { int which) {
GroupActivity.Launch(PasswordActivity.this); GroupActivity.launch(PasswordActivity.this);
} }
}); });
} else if (mSuccess) { } else if (mSuccess) {
GroupActivity.Launch(PasswordActivity.this); GroupActivity.launch(PasswordActivity.this);
} else { } else {
displayMessage(PasswordActivity.this); displayMessage(PasswordActivity.this);
} }

View File

@@ -23,7 +23,7 @@ import android.app.Activity;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import com.kunzisoft.keepass.KeePass; import com.keepassdroid.password.PasswordActivity;
import com.kunzisoft.keepass.R; import com.kunzisoft.keepass.R;
import com.keepassdroid.app.App; import com.keepassdroid.app.App;
import com.keepassdroid.compat.EditorCompat; import com.keepassdroid.compat.EditorCompat;
@@ -88,7 +88,7 @@ public class TimeoutHelper {
public static void checkShutdown(Activity act) { public static void checkShutdown(Activity act) {
if ( App.isShutdown() && App.getDB().Loaded() ) { if ( App.isShutdown() && App.getDB().Loaded() ) {
act.setResult(KeePass.EXIT_LOCK); act.setResult(PasswordActivity.RESULT_EXIT_LOCK);
act.finish(); act.finish();
} }
} }

View File

@@ -147,7 +147,12 @@ public class KeyFileHelper {
browserDialog.show(); browserDialog.show();
} }
public void onActivityResultCallback( /**
* To use in onActivityResultCallback in Fragment or Activity
* @param keyFileCallback Callback retrieve from data
* @return true if requestCode was captured, false elsechere
*/
public boolean onActivityResultCallback(
int requestCode, int requestCode,
int resultCode, int resultCode,
Intent data, Intent data,
@@ -164,7 +169,7 @@ public class KeyFileHelper {
if (keyFileCallback != null) if (keyFileCallback != null)
keyFileCallback.onKeyFileResultCallback(keyUri); keyFileCallback.onKeyFileResultCallback(keyUri);
} }
break; return true;
case GET_CONTENT: case GET_CONTENT:
case OPEN_DOC: case OPEN_DOC:
if (resultCode == RESULT_OK) { if (resultCode == RESULT_OK) {
@@ -189,8 +194,9 @@ public class KeyFileHelper {
} }
} }
} }
break; return true;
} }
return false;
} }
public interface KeyFileCallback { public interface KeyFileCallback {

View File

@@ -21,20 +21,11 @@ package com.kunzisoft.keepass;
import android.app.Activity; import android.app.Activity;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle;
import com.keepassdroid.fileselect.FileSelectActivity; import com.keepassdroid.fileselect.FileSelectActivity;
public class KeePass extends Activity { public class KeePass extends Activity {
public static final int EXIT_NORMAL = 0;
public static final int EXIT_LOCK = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override @Override
protected void onStart() { protected void onStart() {
super.onStart(); super.onStart();
@@ -43,19 +34,14 @@ public class KeePass extends Activity {
private void startFileSelect() { private void startFileSelect() {
Intent intent = new Intent(this, FileSelectActivity.class); Intent intent = new Intent(this, FileSelectActivity.class);
// only to avoid visible flickering when redirecting
startActivityForResult(intent, 0); startActivityForResult(intent, 0);
} }
@Override
protected void onDestroy() {
super.onDestroy();
}
@Override @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_CANCELED) {
if (resultCode == EXIT_NORMAL) {
finish(); finish();
} }
} }