diff --git a/app/src/main/java/com/keepassdroid/activities/EntryActivity.java b/app/src/main/java/com/keepassdroid/activities/EntryActivity.java index 52b898d04..8c6b22a93 100644 --- a/app/src/main/java/com/keepassdroid/activities/EntryActivity.java +++ b/app/src/main/java/com/keepassdroid/activities/EntryActivity.java @@ -56,6 +56,7 @@ import com.keepassdroid.database.PwDatabase; import com.keepassdroid.database.PwEntry; import com.keepassdroid.database.exception.SamsungClipboardException; import com.keepassdroid.intents.Intents; +import com.keepassdroid.password.PasswordActivity; import com.keepassdroid.settings.PrefsUtil; import com.keepassdroid.tasks.UIToastTask; import com.keepassdroid.utils.EmptyUtils; @@ -63,7 +64,6 @@ import com.keepassdroid.utils.MenuUtil; import com.keepassdroid.utils.Types; import com.keepassdroid.utils.Util; import com.keepassdroid.view.EntryContentsView; -import com.kunzisoft.keepass.KeePass; import com.kunzisoft.keepass.R; import java.util.Date; @@ -74,7 +74,7 @@ import java.util.UUID; 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 int NOTIFY_USERNAME = 1; @@ -91,7 +91,7 @@ public class EntryActivity extends LockCloseHideActivity { private BroadcastReceiver mIntentReceiver; 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.putExtra(KEY_ENTRY, Types.UUIDtoBytes(pw.getUUID())); act.startActivityForResult(intent, EntryEditActivity.ADD_OR_UPDATE_ENTRY_REQUEST_CODE); @@ -120,8 +120,6 @@ public class EntryActivity extends LockCloseHideActivity { mShowPassword = !PrefsUtil.isPasswordMask(this); - setResult(KeePass.EXIT_NORMAL); - // Get Entry from UUID Intent i = getIntent(); UUID uuid = Types.bytestoUUID(i.getByteArrayExtra(KEY_ENTRY)); @@ -388,7 +386,7 @@ public class EntryActivity extends LockCloseHideActivity { case R.id.menu_lock: App.setShutdown(); - setResult(KeePass.EXIT_LOCK); + setResult(PasswordActivity.RESULT_EXIT_LOCK); finish(); return true; diff --git a/app/src/main/java/com/keepassdroid/activities/EntryEditActivity.java b/app/src/main/java/com/keepassdroid/activities/EntryEditActivity.java index 38f5ebb93..65a94729a 100644 --- a/app/src/main/java/com/keepassdroid/activities/EntryEditActivity.java +++ b/app/src/main/java/com/keepassdroid/activities/EntryEditActivity.java @@ -59,7 +59,6 @@ import com.keepassdroid.utils.MenuUtil; import com.keepassdroid.utils.Types; import com.keepassdroid.utils.Util; import com.keepassdroid.view.EntryEditNewField; -import com.kunzisoft.keepass.KeePass; import com.kunzisoft.keepass.R; import java.util.ArrayList; @@ -68,7 +67,7 @@ import java.util.Date; import java.util.Map; import java.util.UUID; -public class EntryEditActivity extends LockCloseHideActivity +public class EntryEditActivity extends LockingHideActivity implements IconPickerDialogFragment.IconPickerListener, GeneratePasswordDialogFragment.GeneratePasswordListener { @@ -123,7 +122,6 @@ public class EntryEditActivity extends LockCloseHideActivity protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.entry_edit); - setResult(KeePass.EXIT_NORMAL); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); toolbar.setTitle(getString(R.string.app_name)); diff --git a/app/src/main/java/com/keepassdroid/activities/GroupActivity.java b/app/src/main/java/com/keepassdroid/activities/GroupActivity.java index 0f579cfde..75c62472d 100644 --- a/app/src/main/java/com/keepassdroid/activities/GroupActivity.java +++ b/app/src/main/java/com/keepassdroid/activities/GroupActivity.java @@ -54,10 +54,10 @@ import com.keepassdroid.dialog.ReadOnlyDialog; import com.keepassdroid.fragments.AssignMasterKeyDialogFragment; import com.keepassdroid.fragments.GroupEditDialogFragment; import com.keepassdroid.fragments.IconPickerDialogFragment; +import com.keepassdroid.password.PasswordActivity; import com.keepassdroid.search.SearchResultsActivity; import com.keepassdroid.tasks.ProgressTask; import com.keepassdroid.view.ListNodesWithAddButtonView; -import com.kunzisoft.keepass.KeePass; import com.kunzisoft.keepass.R; public class GroupActivity extends ListNodesActivity @@ -76,11 +76,11 @@ public class GroupActivity extends ListNodesActivity private static final String TAG = "Group Activity:"; - public static void Launch(Activity act) { - Launch(act, null); + public static void launch(Activity act) { + 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); if ( group != null ) { intent.putExtra(KEY_ENTRY, group.getId()); @@ -175,10 +175,10 @@ public class GroupActivity extends ListNodesActivity mAdapter.registerANodeToUpdate(node); switch (node.getType()) { case GROUP: - GroupActivity.Launch(GroupActivity.this, (PwGroup) node); + GroupActivity.launch(GroupActivity.this, (PwGroup) node); break; case ENTRY: - EntryActivity.Launch(GroupActivity.this, (PwEntry) node); + EntryActivity.launch(GroupActivity.this, (PwEntry) node); break; } return true; @@ -296,7 +296,7 @@ public class GroupActivity extends ListNodesActivity case R.id.menu_lock: App.setShutdown(); - setResult(KeePass.EXIT_LOCK); + setResult(PasswordActivity.RESULT_EXIT_LOCK); finish(); return true; diff --git a/app/src/main/java/com/keepassdroid/activities/ListNodesActivity.java b/app/src/main/java/com/keepassdroid/activities/ListNodesActivity.java index 083660e2b..8ea457ebb 100644 --- a/app/src/main/java/com/keepassdroid/activities/ListNodesActivity.java +++ b/app/src/main/java/com/keepassdroid/activities/ListNodesActivity.java @@ -53,10 +53,9 @@ import com.keepassdroid.tasks.UIToastTask; import com.keepassdroid.utils.MenuUtil; import com.keepassdroid.database.SortNodeEnum; import com.keepassdroid.view.AssignPasswordHelper; -import com.kunzisoft.keepass.KeePass; import com.kunzisoft.keepass.R; -public abstract class ListNodesActivity extends LockCloseListActivity +public abstract class ListNodesActivity extends LockingActivity implements AssignMasterKeyDialogFragment.AssignPasswordDialogListener, NodeAdapter.OnNodeClickCallback, SortDialogFragment.SortSelectionListener { @@ -87,7 +86,6 @@ public abstract class ListNodesActivity extends LockCloseListActivity ActivityCompat.invalidateOptionsMenu(this); setContentView(R.layout.list_nodes); - setResult(KeePass.EXIT_NORMAL); mCurrentGroup = initCurrentGroup(); @@ -139,10 +137,10 @@ public abstract class ListNodesActivity extends LockCloseListActivity mAdapter.registerANodeToUpdate(node); switch (node.getType()) { case GROUP: - GroupActivity.Launch(this, (PwGroup) node); + GroupActivity.launch(this, (PwGroup) node); break; case ENTRY: - EntryActivity.Launch(this, (PwEntry) node); + EntryActivity.launch(this, (PwEntry) node); break; } } diff --git a/app/src/main/java/com/keepassdroid/activities/LockCloseHideActivity.java b/app/src/main/java/com/keepassdroid/activities/LockCloseHideActivity.java deleted file mode 100644 index 4490e6a2c..000000000 --- a/app/src/main/java/com/keepassdroid/activities/LockCloseHideActivity.java +++ /dev/null @@ -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 . - * - */ -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); - } - } - -} diff --git a/app/src/main/java/com/keepassdroid/activities/LockCloseListActivity.java b/app/src/main/java/com/keepassdroid/activities/LockCloseListActivity.java deleted file mode 100644 index 4aa3dd2bc..000000000 --- a/app/src/main/java/com/keepassdroid/activities/LockCloseListActivity.java +++ /dev/null @@ -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 . - * - */ -package com.keepassdroid.activities; - -import com.keepassdroid.timeout.TimeoutHelper; - -public abstract class LockCloseListActivity extends LockingActivity { - - @Override - protected void onResume() { - super.onResume(); - - TimeoutHelper.checkShutdown(this); - } -} diff --git a/app/src/main/java/com/keepassdroid/activities/LockCloseActivity.java b/app/src/main/java/com/keepassdroid/activities/LockingHideActivity.java similarity index 66% rename from app/src/main/java/com/keepassdroid/activities/LockCloseActivity.java rename to app/src/main/java/com/keepassdroid/activities/LockingHideActivity.java index 2b5f7d658..494ed94ee 100644 --- a/app/src/main/java/com/keepassdroid/activities/LockCloseActivity.java +++ b/app/src/main/java/com/keepassdroid/activities/LockingHideActivity.java @@ -21,8 +21,27 @@ package com.keepassdroid.activities; import android.content.ActivityNotFoundException; 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 * @see android.app.Activity#startActivity(android.content.Intent) diff --git a/app/src/main/java/com/keepassdroid/fileselect/FileSelectActivity.java b/app/src/main/java/com/keepassdroid/fileselect/FileSelectActivity.java index cb0b2e25f..147fba914 100644 --- a/app/src/main/java/com/keepassdroid/fileselect/FileSelectActivity.java +++ b/app/src/main/java/com/keepassdroid/fileselect/FileSelectActivity.java @@ -130,7 +130,7 @@ public class FileSelectActivity extends StylishActivity implements public void onClick(View v) { String fileName = openFileNameView.getText().toString(); try { - PasswordActivity.Launch(FileSelectActivity.this, fileName); + PasswordActivity.launch(FileSelectActivity.this, fileName); } catch (ContentFileNotFoundException e) { Toast.makeText(FileSelectActivity.this, @@ -185,7 +185,7 @@ public class FileSelectActivity extends StylishActivity implements if (db.exists()) { try { - PasswordActivity.Launch(FileSelectActivity.this, path); + PasswordActivity.launch(FileSelectActivity.this, path); } catch (Exception e) { // Ignore exception } @@ -193,7 +193,7 @@ public class FileSelectActivity extends StylishActivity implements } else { try { - PasswordActivity.Launch(FileSelectActivity.this, dbUri.toString()); + PasswordActivity.launch(FileSelectActivity.this, dbUri.toString()); } catch (Exception e) { // Ignore exception } @@ -377,7 +377,7 @@ public class FileSelectActivity extends StylishActivity implements fileHistory.createFile(mUri, getFilename()); mAdapter.notifyDataSetChanged(); updateTitleFileListView(); - GroupActivity.Launch(FileSelectActivity.this); + GroupActivity.launch(FileSelectActivity.this); } } } @@ -388,7 +388,7 @@ public class FileSelectActivity extends StylishActivity implements @Override public void afterOpenFile(String fileName, String keyFile) { try { - PasswordActivity.Launch(FileSelectActivity.this, + PasswordActivity.launch(FileSelectActivity.this, fileName, keyFile); } catch (ContentFileNotFoundException e) { Toast.makeText(FileSelectActivity.this, diff --git a/app/src/main/java/com/keepassdroid/password/PasswordActivity.java b/app/src/main/java/com/keepassdroid/password/PasswordActivity.java index 96d0517f6..29be99b2d 100644 --- a/app/src/main/java/com/keepassdroid/password/PasswordActivity.java +++ b/app/src/main/java/com/keepassdroid/password/PasswordActivity.java @@ -69,7 +69,6 @@ import com.keepassdroid.utils.MenuUtil; import com.keepassdroid.utils.UriUtil; import com.keepassdroid.view.FingerPrintDialog; import com.keepassdroid.view.KeyFileHelper; -import com.kunzisoft.keepass.KeePass; import com.kunzisoft.keepass.R; import java.io.File; @@ -91,6 +90,8 @@ public class PasswordActivity extends LockingActivity implements FingerPrintHelper.FingerPrintCallback, UriIntentInitTaskCallback { 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_LAUNCH_IMMEDIATELY = "launchImmediately"; @@ -122,13 +123,13 @@ public class PasswordActivity extends LockingActivity private KeyFileHelper keyFileHelper; - public static void Launch( + public static void launch( Activity act, String fileName) throws FileNotFoundException { - Launch(act, fileName, ""); + launch(act, fileName, ""); } - public static void Launch( + public static void launch( Activity act, String fileName, String keyFile) throws FileNotFoundException { @@ -147,12 +148,11 @@ public class PasswordActivity extends LockingActivity } } - Intent i = new Intent(act, PasswordActivity.class); - i.putExtra(UriIntentInitTask.KEY_FILENAME, fileName); - i.putExtra(UriIntentInitTask.KEY_KEYFILE, keyFile); - - act.startActivityForResult(i, 0); - + Intent intent = new Intent(act, PasswordActivity.class); + intent.putExtra(UriIntentInitTask.KEY_FILENAME, fileName); + intent.putExtra(UriIntentInitTask.KEY_KEYFILE, keyFile); + // only to avoid visible flickering when redirecting + act.startActivityForResult(intent, 0); } @Override @@ -162,8 +162,9 @@ public class PasswordActivity extends LockingActivity Intent data) { super.onActivityResult(requestCode, resultCode, data); + boolean stopResult = false; if (keyFileHelper != null) { - keyFileHelper.onActivityResultCallback(requestCode, resultCode, data, + stopResult = keyFileHelper.onActivityResultCallback(requestCode, resultCode, data, new KeyFileHelper.KeyFileCallback() { @Override public void onKeyFileResultCallback(Uri uri) { @@ -174,18 +175,14 @@ public class PasswordActivity extends LockingActivity }); } - switch (requestCode) { - case KeePass.EXIT_NORMAL: - setEmptyViews(); - App.getDB().clear(); - break; - - case KeePass.EXIT_LOCK: - setResult(KeePass.EXIT_LOCK); - setEmptyViews(); - finish(); - App.getDB().clear(); - break; + if (!stopResult) { + switch (resultCode) { + case RESULT_EXIT_LOCK: + case Activity.RESULT_CANCELED: + setEmptyViews(); + App.getDB().clear(); + break; + } } } @@ -778,12 +775,12 @@ public class PasswordActivity extends LockingActivity public void onClick( DialogInterface dialog, int which) { - GroupActivity.Launch(PasswordActivity.this); + GroupActivity.launch(PasswordActivity.this); } }); } else if (mSuccess) { - GroupActivity.Launch(PasswordActivity.this); + GroupActivity.launch(PasswordActivity.this); } else { displayMessage(PasswordActivity.this); } diff --git a/app/src/main/java/com/keepassdroid/timeout/TimeoutHelper.java b/app/src/main/java/com/keepassdroid/timeout/TimeoutHelper.java index 18d5a6d9c..f093b1240 100644 --- a/app/src/main/java/com/keepassdroid/timeout/TimeoutHelper.java +++ b/app/src/main/java/com/keepassdroid/timeout/TimeoutHelper.java @@ -23,7 +23,7 @@ import android.app.Activity; import android.content.SharedPreferences; import android.preference.PreferenceManager; -import com.kunzisoft.keepass.KeePass; +import com.keepassdroid.password.PasswordActivity; import com.kunzisoft.keepass.R; import com.keepassdroid.app.App; import com.keepassdroid.compat.EditorCompat; @@ -88,7 +88,7 @@ public class TimeoutHelper { public static void checkShutdown(Activity act) { if ( App.isShutdown() && App.getDB().Loaded() ) { - act.setResult(KeePass.EXIT_LOCK); + act.setResult(PasswordActivity.RESULT_EXIT_LOCK); act.finish(); } } diff --git a/app/src/main/java/com/keepassdroid/view/KeyFileHelper.java b/app/src/main/java/com/keepassdroid/view/KeyFileHelper.java index 0deddb549..779e1a993 100644 --- a/app/src/main/java/com/keepassdroid/view/KeyFileHelper.java +++ b/app/src/main/java/com/keepassdroid/view/KeyFileHelper.java @@ -147,7 +147,12 @@ public class KeyFileHelper { 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 resultCode, Intent data, @@ -164,7 +169,7 @@ public class KeyFileHelper { if (keyFileCallback != null) keyFileCallback.onKeyFileResultCallback(keyUri); } - break; + return true; case GET_CONTENT: case OPEN_DOC: if (resultCode == RESULT_OK) { @@ -189,8 +194,9 @@ public class KeyFileHelper { } } } - break; + return true; } + return false; } public interface KeyFileCallback { diff --git a/app/src/main/java/com/kunzisoft/keepass/KeePass.java b/app/src/main/java/com/kunzisoft/keepass/KeePass.java index 1ef941793..aeff4a248 100644 --- a/app/src/main/java/com/kunzisoft/keepass/KeePass.java +++ b/app/src/main/java/com/kunzisoft/keepass/KeePass.java @@ -21,20 +21,11 @@ package com.kunzisoft.keepass; import android.app.Activity; import android.content.Intent; -import android.os.Bundle; import com.keepassdroid.fileselect.FileSelectActivity; 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 protected void onStart() { super.onStart(); @@ -43,19 +34,14 @@ public class KeePass extends Activity { private void startFileSelect() { Intent intent = new Intent(this, FileSelectActivity.class); + // only to avoid visible flickering when redirecting startActivityForResult(intent, 0); } - @Override - protected void onDestroy() { - super.onDestroy(); - } - @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); - - if (resultCode == EXIT_NORMAL) { + if (resultCode == Activity.RESULT_CANCELED) { finish(); } }