diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b7dc9dc5..8141d0cc 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -64,6 +64,11 @@ + { Log.i(TAG, "Toggled tile."); if (prefMgr.getIsHidden()) { - hider.unhide(); + startActivityAndCollapse(new Intent(this, SecurityAuthForQuickHideActivity.class) + .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); } else { hider.hide(); } diff --git a/app/src/main/java/deltazero/amarok/ui/SecurityAuthForQuickHideActivity.java b/app/src/main/java/deltazero/amarok/ui/SecurityAuthForQuickHideActivity.java new file mode 100644 index 00000000..5694184d --- /dev/null +++ b/app/src/main/java/deltazero/amarok/ui/SecurityAuthForQuickHideActivity.java @@ -0,0 +1,38 @@ +package deltazero.amarok.ui; + +import androidx.appcompat.app.AppCompatActivity; + +import android.os.Bundle; +import android.util.Log; + +import deltazero.amarok.Hider; +import deltazero.amarok.R; +import deltazero.amarok.utils.SecurityAuth; + +/** + * An empty & transparent activity with a SecurityAuth dialog only. + * If the SecurityAuth is passed, unhide files and apps. Otherwise, finish the activity. + */ +public class SecurityAuthForQuickHideActivity extends AppCompatActivity { + + private SecurityAuth securityAuth; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_empty); + + securityAuth = new SecurityAuth(this, succeed -> { + if (succeed) + new Hider(this).unhide(); + finish(); + }); + } + + @Override + protected void onStart() { + super.onStart(); + Log.i("SecurityAuth", "Start SecurityAuthForQuickHideActivity"); + securityAuth.authenticate(); + } +} \ No newline at end of file diff --git a/app/src/main/java/deltazero/amarok/utils/SecurityAuth.java b/app/src/main/java/deltazero/amarok/utils/SecurityAuth.java index f5fcdd7e..4967e6da 100644 --- a/app/src/main/java/deltazero/amarok/utils/SecurityAuth.java +++ b/app/src/main/java/deltazero/amarok/utils/SecurityAuth.java @@ -17,14 +17,19 @@ public interface SecurityAuthCallback { private SecurityAuthCallback callback; private FragmentActivity activity; private PrefMgr prefMgr; + private PasswordAuthFragment passwordAuthFragment; public SecurityAuth(FragmentActivity activity, SecurityAuthCallback callback) { this.callback = callback; this.activity = activity; prefMgr = new PrefMgr(activity); + if (passwordAuthFragment == null) + passwordAuthFragment = new PasswordAuthFragment(); } public void authenticate() { + if (passwordAuthFragment.isAdded()) + passwordAuthFragment.dismiss(); if (prefMgr.getAmarokPassword() != null) { if (prefMgr.getEnableAmarokBiometricAuth()) biometricAuthenticate(); else passwordAuthenticate(); @@ -35,7 +40,7 @@ public void authenticate() { private void passwordAuthenticate() { assert prefMgr.getAmarokPassword() != null; - new PasswordAuthFragment() + passwordAuthFragment .setOnVerifiedCallback(succeed -> callback.onSecurityAuthCallback(succeed)) .show(activity.getSupportFragmentManager(), null); } diff --git a/app/src/main/res/layout/activity_empty.xml b/app/src/main/res/layout/activity_empty.xml new file mode 100644 index 00000000..41d2ef14 --- /dev/null +++ b/app/src/main/res/layout/activity_empty.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 1683fb4e..f70af4e5 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -14,4 +14,13 @@ + + \ No newline at end of file