Use VaultLockReceiver in a Context-registered manner

Turns out we can't listen from ACTION_SCREEN_OFF from a
manifest-registered broadcast receiver
This commit is contained in:
Alexander Bakker 2022-10-15 11:15:45 +02:00
parent 8292173297
commit 3d124d225e
4 changed files with 14 additions and 7 deletions

View file

@ -97,7 +97,6 @@
<receiver android:name=".receivers.VaultLockReceiver" android:exported="false"> <receiver android:name=".receivers.VaultLockReceiver" android:exported="false">
<intent-filter> <intent-filter>
<action android:name="${applicationId}.LOCK_VAULT" /> <action android:name="${applicationId}.LOCK_VAULT" />
<action android:name="android.intent.action.SCREEN_OFF" />
</intent-filter> </intent-filter>
</receiver> </receiver>

View file

@ -4,6 +4,7 @@ import android.app.Application;
import android.app.NotificationChannel; import android.app.NotificationChannel;
import android.app.NotificationManager; import android.app.NotificationManager;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ShortcutInfo; import android.content.pm.ShortcutInfo;
import android.content.pm.ShortcutManager; import android.content.pm.ShortcutManager;
import android.graphics.drawable.Icon; import android.graphics.drawable.Icon;
@ -11,11 +12,13 @@ import android.os.Build;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi; import androidx.annotation.RequiresApi;
import androidx.core.content.ContextCompat;
import androidx.lifecycle.Lifecycle; import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleEventObserver; import androidx.lifecycle.LifecycleEventObserver;
import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.ProcessLifecycleOwner; import androidx.lifecycle.ProcessLifecycleOwner;
import com.beemdevelopment.aegis.receivers.VaultLockReceiver;
import com.beemdevelopment.aegis.ui.MainActivity; import com.beemdevelopment.aegis.ui.MainActivity;
import com.beemdevelopment.aegis.util.IOUtils; import com.beemdevelopment.aegis.util.IOUtils;
import com.beemdevelopment.aegis.vault.VaultManager; import com.beemdevelopment.aegis.vault.VaultManager;
@ -48,6 +51,10 @@ public abstract class AegisApplicationBase extends Application {
Iconics.init(this); Iconics.init(this);
Iconics.registerFont(new MaterialDesignIconic()); Iconics.registerFont(new MaterialDesignIconic());
VaultLockReceiver lockReceiver = new VaultLockReceiver();
IntentFilter intentFilter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
ContextCompat.registerReceiver(this, lockReceiver, intentFilter, ContextCompat.RECEIVER_NOT_EXPORTED);
// lock the app if the user moves the application to the background // lock the app if the user moves the application to the background
ProcessLifecycleOwner.get().getLifecycle().addObserver(new AppLifecycleObserver()); ProcessLifecycleOwner.get().getLifecycle().addObserver(new AppLifecycleObserver());

View file

@ -22,8 +22,9 @@ public class VaultLockReceiver extends BroadcastReceiver {
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
if (!intent.getAction().equals(ACTION_LOCK_VAULT) if (intent.getAction() == null
&& !intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { || (!intent.getAction().equals(ACTION_LOCK_VAULT)
&& !intent.getAction().equals(Intent.ACTION_SCREEN_OFF))) {
return; return;
} }

View file

@ -29,14 +29,14 @@ public class NotificationService extends Service {
@SuppressLint("LaunchActivityFromNotification") @SuppressLint("LaunchActivityFromNotification")
public void serviceMethod() { public void serviceMethod() {
Intent intent = new Intent(this, VaultLockReceiver.class);
intent.setAction(VaultLockReceiver.ACTION_LOCK_VAULT);
intent.setPackage(BuildConfig.APPLICATION_ID);
int flags = PendingIntent.FLAG_ONE_SHOT; int flags = PendingIntent.FLAG_ONE_SHOT;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
flags |= PendingIntent.FLAG_IMMUTABLE; flags |= PendingIntent.FLAG_IMMUTABLE;
} }
Intent intent = new Intent(this, VaultLockReceiver.class);
intent.setAction(VaultLockReceiver.ACTION_LOCK_VAULT);
intent.setPackage(BuildConfig.APPLICATION_ID);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 1, intent, flags); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 1, intent, flags);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID) NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)