Skip to content

Commit

Permalink
feat: Auto hide after screen off
Browse files Browse the repository at this point in the history
  • Loading branch information
deltazefiro committed Feb 10, 2024
1 parent 39d68c7 commit 38571a7
Show file tree
Hide file tree
Showing 5 changed files with 103 additions and 18 deletions.
1 change: 1 addition & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ dependencies {
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
implementation 'androidx.preference:preference:1.2.1'
implementation 'androidx.work:work-runtime:2.9.0'
}

configurations.configureEach {
Expand Down
8 changes: 6 additions & 2 deletions app/src/main/java/deltazero/amarok/AmarokApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import com.google.android.material.color.DynamicColors;
import com.rosan.dhizuku.api.Dhizuku;

import deltazero.amarok.receivers.ScreenLockReceiver;
import deltazero.amarok.receivers.ScreenStatusReceiver;
import deltazero.amarok.utils.AppCenterUtil;
import jonathanfinerty.once.Once;

Expand All @@ -25,7 +25,11 @@ public void onCreate() {
if (PrefMgr.getEnableDynamicColor())
DynamicColors.applyToActivitiesIfAvailable(this);

registerReceiver(new ScreenLockReceiver(), new IntentFilter(Intent.ACTION_SCREEN_OFF));
// Register ScreenStatusReceiver
var screenStatusIntentFilter = new IntentFilter();
screenStatusIntentFilter.addAction(Intent.ACTION_SCREEN_ON);
screenStatusIntentFilter.addAction(Intent.ACTION_SCREEN_OFF);
registerReceiver(new ScreenStatusReceiver(), screenStatusIntentFilter);

// Start PanicButton service
QuickHideService.startService(this);
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package deltazero.amarok.receivers;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

import deltazero.amarok.utils.AutoHideUtil;
import deltazero.amarok.utils.SecurityUtil;

public class ScreenStatusReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
assert intent.getAction() != null;
switch (intent.getAction()) {
case Intent.ACTION_SCREEN_ON -> {
Log.i("ScreenStatusReceiver", "Screen unlocked.");
AutoHideUtil.cancelAutoHide(context);
}
case Intent.ACTION_SCREEN_OFF -> {
Log.i("ScreenStatusReceiver", "Screen locked.");
SecurityUtil.lockAndDisguise();
AutoHideUtil.setAutoHide(context);
}
}
}
}
69 changes: 69 additions & 0 deletions app/src/main/java/deltazero/amarok/utils/AutoHideUtil.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package deltazero.amarok.utils;

import android.content.Context;
import android.util.Log;

import androidx.annotation.NonNull;
import androidx.work.ExistingWorkPolicy;
import androidx.work.OneTimeWorkRequest;
import androidx.work.WorkInfo;
import androidx.work.WorkManager;
import androidx.work.Worker;
import androidx.work.WorkerParameters;

import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;

import deltazero.amarok.Hider;
import deltazero.amarok.PrefMgr;

public class AutoHideUtil {

private static final String AUTO_HIDE_WORK_NAME = "deltazero.amarok.AUTO_HIDE_WORK";
private static final String TAG = "AutoHideUtil";

public static class AutoHideWorker extends Worker {
public AutoHideWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}

@NonNull
@Override
public Result doWork() {
Log.i(TAG, "Auto hide triggered. Start hiding.");
Hider.hide(getApplicationContext());
return Result.success();
}
}

public static void setAutoHide(Context context) {
if (!PrefMgr.getEnableAutoHide() || Hider.getState() == Hider.State.HIDDEN) return;
Log.i(TAG, "Auto hide set. Delay: " + PrefMgr.getAutoHideDelay() + " minutes.");
WorkManager.getInstance(context).enqueueUniqueWork(
AUTO_HIDE_WORK_NAME,
ExistingWorkPolicy.REPLACE,
new OneTimeWorkRequest.Builder(AutoHideWorker.class)
.setInitialDelay(PrefMgr.getAutoHideDelay(), TimeUnit.MINUTES)
.build()
);
}

public static void cancelAutoHide(Context context) {
var workManager = WorkManager.getInstance(context);

var future = workManager.getWorkInfosForUniqueWork(AUTO_HIDE_WORK_NAME);
List<WorkInfo> workInfos;
try {
workInfos = future.get();
} catch (ExecutionException | InterruptedException e) {
throw new RuntimeException("Should not happen.", e);
}

if (workInfos.size() == 0) return;
if (workInfos.get(0).getState() != WorkInfo.State.RUNNING) {
workManager.cancelUniqueWork(AUTO_HIDE_WORK_NAME);
Log.i(TAG, "Auto hide cancelled.");
}
}
}

0 comments on commit 38571a7

Please sign in to comment.