diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 02f9247..8551446 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -5,6 +5,7 @@ + diff --git a/app/src/main/java/com/wesaphzt/privatelock/service/LockService.java b/app/src/main/java/com/wesaphzt/privatelock/service/LockService.java index 92eb0b0..69157f4 100644 --- a/app/src/main/java/com/wesaphzt/privatelock/service/LockService.java +++ b/app/src/main/java/com/wesaphzt/privatelock/service/LockService.java @@ -15,12 +15,15 @@ import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Build; +import android.os.CountDownTimer; import android.os.IBinder; import androidx.annotation.NonNull; import androidx.core.app.JobIntentService; import androidx.core.app.NotificationCompat; +import android.os.VibrationEffect; +import android.os.Vibrator; import android.preference.PreferenceManager; import android.widget.Toast; @@ -32,6 +35,8 @@ import com.wesaphzt.privatelock.receivers.PauseReceiver; import com.wesaphzt.privatelock.receivers.PresenceReceiver; import com.wesaphzt.privatelock.widget.LockWidgetProvider; +import java.util.Objects; + import static androidx.core.app.NotificationCompat.PRIORITY_LOW; import static androidx.core.app.NotificationCompat.PRIORITY_MIN; @@ -73,6 +78,13 @@ public class LockService extends JobIntentService { PresenceReceiver presenceReceiver; + //check to stop multiple triggers + boolean isHit = false; + + //vibrate + boolean isHaptic = false; + private final int vibrateTime = 100; + @Override public int onStartCommand(Intent intent, int flags, int startId) { context = getApplicationContext(); @@ -193,6 +205,11 @@ public class LockService extends JobIntentService { if(LockService.disabled) return; + //check prefs here so options can be changed without service restart + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + + isHaptic = prefs.getBoolean("HAPTIC_FEEDBACK", false); + sensorCalc(event); } @@ -230,7 +247,28 @@ public class LockService extends JobIntentService { if (total > SENSITIVITY) { try { if (isActiveAdmin()) { - mDPM.lockNow(); + + if(!isHaptic) { + mDPM.lockNow(); + } else { //if haptic + if(!isHit) { //run if not triggered yet + isHit = true; + + mDPM.lockNow(); + vibrateItBaby(); + + //stop multiple haptic triggers in a row + new CountDownTimer(1000, 1000) { + public void onTick(long millisUntilFinished) { + isHit = true; + } + public void onFinish() { + isHit = false; + } + }.start(); + } + } + } else { Toast.makeText(context, "Device admin not enabled", Toast.LENGTH_LONG).show(); } @@ -240,6 +278,15 @@ public class LockService extends JobIntentService { } } } + + private void vibrateItBaby() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + ((Vibrator) Objects.requireNonNull(getSystemService(VIBRATOR_SERVICE))).vibrate(VibrationEffect.createOneShot(vibrateTime, VibrationEffect.DEFAULT_AMPLITUDE)); + } else { + ((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(vibrateTime); + } + } + private boolean isActiveAdmin() { return mDPM.isAdminActive(mDeviceAdmin); } diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index c60b8a6..b9ad5ab 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -8,6 +8,12 @@ android:key="START_ON_BOOT" android:title="System start" /> + +