diff --git a/app/src/main/java/com/keepassdroid/activities/EntryActivity.java b/app/src/main/java/com/keepassdroid/activities/EntryActivity.java index 0475314d0..a24930bf2 100644 --- a/app/src/main/java/com/keepassdroid/activities/EntryActivity.java +++ b/app/src/main/java/com/keepassdroid/activities/EntryActivity.java @@ -57,13 +57,13 @@ import com.keepassdroid.database.PwEntry; import com.keepassdroid.database.exception.SamsungClipboardException; import com.keepassdroid.intents.Intents; import com.keepassdroid.settings.PreferencesUtil; +import com.keepassdroid.password.PasswordActivity; import com.keepassdroid.tasks.UIToastTask; import com.keepassdroid.utils.EmptyUtils; 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.PreferencesUtil.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 = !PreferencesUtil.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 7c16165bf..11fb32a39 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 688cbebeb..cedaf1de1 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 35e538fe2..5ac5a317a 100644 --- a/app/src/main/java/com/keepassdroid/fileselect/FileSelectActivity.java +++ b/app/src/main/java/com/keepassdroid/fileselect/FileSelectActivity.java @@ -105,7 +105,8 @@ public class FileSelectActivity extends StylishActivity implements Intent intent = new Intent(activity, FileSelectActivity.class); if (extras != null) intent.putExtras(extras); - activity.startActivity(intent); + // only to avoid visible flickering when redirecting + activity.startActivityForResult(intent, 0); } @Override @@ -400,7 +401,7 @@ public class FileSelectActivity extends StylishActivity implements fileHistory.createFile(mUri, getFilename()); mAdapter.notifyDataSetChanged(); updateTitleFileListView(); - GroupActivity.Launch(FileSelectActivity.this); + GroupActivity.launch(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 232661dd1..d90298fdb 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"; @@ -125,7 +126,7 @@ public class PasswordActivity extends LockingActivity public static void launch( Activity act, String fileName) throws FileNotFoundException { - launch(act, fileName, "", null); + launch(act, fileName,null); } public static void launch( @@ -155,13 +156,13 @@ public class PasswordActivity extends LockingActivity } } - Intent i = new Intent(act, PasswordActivity.class); - i.putExtra(UriIntentInitTask.KEY_FILENAME, fileName); - i.putExtra(UriIntentInitTask.KEY_KEYFILE, keyFile); + Intent intent = new Intent(act, PasswordActivity.class); + intent.putExtra(UriIntentInitTask.KEY_FILENAME, fileName); + intent.putExtra(UriIntentInitTask.KEY_KEYFILE, keyFile); if (extras != null) - i.putExtras(extras); - - act.startActivityForResult(i, 0); + intent.putExtras(extras); + // only to avoid visible flickering when redirecting + act.startActivityForResult(intent, 0); } @Override @@ -171,8 +172,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) { @@ -183,18 +185,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; + } } } @@ -790,13 +788,13 @@ public class PasswordActivity extends LockingActivity DialogInterface dialog, int which) { // TODO GroupActivity.launch(PasswordActivity.this, getIntent().getExtras()); - GroupActivity.Launch(PasswordActivity.this); + GroupActivity.launch(PasswordActivity.this); } }); } else if (mSuccess) { // TODO GroupActivity.launch(PasswordActivity.this, getIntent().getExtras()); - 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 8d9ce44b0..be9c547af 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(); @@ -42,19 +33,13 @@ public class KeePass extends Activity { } protected void startFileSelectActivity() { - FileSelectActivity.launch(this); - } - - @Override - protected void onDestroy() { - super.onDestroy(); - } + FileSelectActivity.launch(this); + } @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(); } }