From d7e1cd44e878b12f7394ca1d7070d09aa1337286 Mon Sep 17 00:00:00 2001 From: jens Date: Sun, 12 Dec 2021 20:03:53 +0100 Subject: [PATCH] Rework --- .../java/com/jens/automation2/Actions.java | 39 ++++++++++++----- .../jens/automation2/ActivityManageRule.java | 34 ++++++++------- .../com/jens/automation2/Miscellaneous.java | 18 +++++++- .../jens/automation2/ReceiverCoordinator.java | 5 +-- .../java/com/jens/automation2/Trigger.java | 42 +++++++++++-------- .../receivers/DeviceOrientationListener.java | 32 +++++++++----- app/src/main/res/values/strings.xml | 2 +- 7 files changed, 110 insertions(+), 62 deletions(-) diff --git a/app/src/main/java/com/jens/automation2/Actions.java b/app/src/main/java/com/jens/automation2/Actions.java index ac75830..77dad4e 100644 --- a/app/src/main/java/com/jens/automation2/Actions.java +++ b/app/src/main/java/com/jens/automation2/Actions.java @@ -1119,36 +1119,55 @@ public class Actions } } - public static void turnOnScreen() + /*public static void turnOnScreen() { // turn on screen Miscellaneous.logEvent("i", "Actions", "Turning screen on.", 3); PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); WakeLock wakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, AutomationService.NOTIFICATION_CHANNEL_ID + ":turnOffScreen"); wakeLock.acquire(); - } + }*/ @TargetApi(21) //Suppress lint error for PROXIMITY_SCREEN_OFF_WAKE_LOCK public static void turnOffScreen() { Miscellaneous.logEvent("i", "Actions", "Turning screen off.", 3); - DevicePolicyManager deviceManger = (DevicePolicyManager)Miscellaneous.getAnyContext().getSystemService(Context. DEVICE_POLICY_SERVICE); - deviceManger.lockNow(); - /*params.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON; params.screenBrightness = 0; - getWindow().setAttributes(params); + getWindow().setAttributes(params);*/ PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); - WakeLock wakeLock = pm.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK,AutomationService.NOTIFICATION_CHANNEL_ID + ":turnOffScreen"); -// WakeLock wakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK , AutomationService.NOTIFICATION_CHANNEL_ID + ":turnOffScreen"); +// WakeLock wakeLock = pm.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK,AutomationService.NOTIFICATION_CHANNEL_ID + ":turnOffScreen"); + WakeLock wakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK , AutomationService.NOTIFICATION_CHANNEL_ID + ":turnOffScreen"); wakeLock.acquire(); - WakeLock wakeLock = pm.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, "tag"); + +// WakeLock wakeLock = pm.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, "tag"); // WakeLock wakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK , "tag"); - wakeLock.acquire();*/ +// wakeLock.acquire(); + + try + { + Thread.sleep(100); + } + catch (InterruptedException e) + { + Miscellaneous.logEvent("w", context.getResources().getString(R.string.wakeupDevice), "Error keeping device awake: " + Log.getStackTraceString(e), 4); + } + + wakeLock.release(); } + /*public static void lockScreen() + { + Miscellaneous.logEvent("i", "Actions", "Locking screen.", 3); + + // Works, but requires Manifest.permission.BIND_DEVICE_ADMIN +// https://stackoverflow.com/questions/23898406/java-lang-securityexception-no-active-admin-owned-by-uid-10047-for-policy-4-on + DevicePolicyManager deviceManger = (DevicePolicyManager)Miscellaneous.getAnyContext().getSystemService(Context.DEVICE_POLICY_SERVICE); + deviceManger.lockNow(); + }*/ + // using root /*private void turnOffScreen() { diff --git a/app/src/main/java/com/jens/automation2/ActivityManageRule.java b/app/src/main/java/com/jens/automation2/ActivityManageRule.java index 8f04b14..3580056 100644 --- a/app/src/main/java/com/jens/automation2/ActivityManageRule.java +++ b/app/src/main/java/com/jens/automation2/ActivityManageRule.java @@ -50,6 +50,8 @@ public class ActivityManageRule extends Activity { final static String activityDetectionClassPath = "com.jens.automation2.receivers.ActivityDetectionReceiver"; public final static String intentNameTriggerParameter1 = "triggerParameter1"; + public final static String intentNameActionParameter1 = "actionParameter1"; + public final static String intentNameActionParameter2 = "actionParameter2"; public Context context; private Button cmdTriggerAdd, cmdActionAdd, cmdSaveRule; @@ -96,8 +98,8 @@ public class ActivityManageRule extends Activity final static int requestCodeTriggerBluetoothEdit = 6001; final static int requestCodeActionScreenBrightnessAdd = 401; final static int requestCodeActionScreenBrightnessEdit = 402; - final static int requestCodeTriggerDevicePositionAdd = 301; - final static int requestCodeTriggerDevicePositionEdit = 302; + final static int requestCodeTriggerDeviceOrientationAdd = 301; + final static int requestCodeTriggerDeviceOrientationEdit = 302; final static int requestCodeTriggerNotificationAdd = 8000; final static int requestCodeTriggerNfcNotificationEdit = 8001; final static int requestCodeActionPlaySoundAdd = 501; @@ -268,7 +270,7 @@ public class ActivityManageRule extends Activity Intent devicePositionEditor = new Intent(ActivityManageRule.this, ActivityManageTriggerDeviceOrientation.class); devicePositionEditor.putExtra(ActivityManageRule.intentNameTriggerParameter1, selectedTrigger.getTriggerParameter()); devicePositionEditor.putExtra(ActivityManageTriggerDeviceOrientation.vectorFieldName, selectedTrigger.getTriggerParameter2()); - startActivityForResult(devicePositionEditor, requestCodeTriggerDevicePositionEdit); + startActivityForResult(devicePositionEditor, requestCodeTriggerDeviceOrientationEdit); break; default: break; @@ -341,8 +343,8 @@ public class ActivityManageRule extends Activity case playSound: Intent actionPlaySoundIntent = new Intent(context, ActivityManageActionPlaySound.class); actionPlaySoundIntent.putExtra("edit", true); - actionPlaySoundIntent.putExtra("actionParameter1", a.getParameter1()); - actionPlaySoundIntent.putExtra("actionParameter2", a.getParameter2()); + actionPlaySoundIntent.putExtra(intentNameActionParameter1, a.getParameter1()); + actionPlaySoundIntent.putExtra(intentNameActionParameter2, a.getParameter2()); startActivityForResult(actionPlaySoundIntent, requestCodeActionPlaySoundEdit); break; default: @@ -559,7 +561,7 @@ public class ActivityManageRule extends Activity { newTrigger.setTriggerType(Trigger_Enum.deviceOrientation); Intent devicePositionTriggerEditor = new Intent(myContext, ActivityManageTriggerDeviceOrientation.class); - startActivityForResult(devicePositionTriggerEditor, requestCodeTriggerDevicePositionAdd); + startActivityForResult(devicePositionTriggerEditor, requestCodeTriggerDeviceOrientationAdd); return; // booleanChoices = new String[]{getResources().getString(R.string.started), getResources().getString(R.string.stopped)}; } @@ -1323,8 +1325,8 @@ public class ActivityManageRule extends Activity { if(resultCode == RESULT_OK) { - newAction.setParameter1(data.getBooleanExtra("actionParameter1", false)); - newAction.setParameter2(data.getStringExtra("actionParameter2")); + newAction.setParameter1(data.getBooleanExtra(intentNameActionParameter1, false)); + newAction.setParameter2(data.getStringExtra(intentNameActionParameter2)); ruleToEdit.getActionSet().add(newAction); this.refreshActionList(); } @@ -1333,11 +1335,11 @@ public class ActivityManageRule extends Activity { if(resultCode == RESULT_OK) { - if(data.hasExtra("actionParameter1")) - ruleToEdit.getActionSet().get(editIndex).setParameter1(data.getBooleanExtra("actionParameter1", false)); + if(data.hasExtra(intentNameActionParameter1)) + ruleToEdit.getActionSet().get(editIndex).setParameter1(data.getBooleanExtra(intentNameActionParameter1, false)); - if(data.hasExtra("actionParameter2")) - ruleToEdit.getActionSet().get(editIndex).setParameter2(data.getStringExtra("actionParameter2")); + if(data.hasExtra(intentNameActionParameter2)) + ruleToEdit.getActionSet().get(editIndex).setParameter2(data.getStringExtra(intentNameActionParameter2)); this.refreshActionList(); } @@ -1361,18 +1363,18 @@ public class ActivityManageRule extends Activity this.refreshActionList(); } } - else if(requestCode == requestCodeTriggerDevicePositionAdd) + else if(requestCode == requestCodeTriggerDeviceOrientationAdd) { if(resultCode == RESULT_OK) { -// newTrigger.setTriggerParameter(data.getBooleanExtra("wifiState", false)); + newTrigger.setTriggerParameter(data.getBooleanExtra(ActivityManageRule.intentNameTriggerParameter1, true)); newTrigger.setTriggerParameter2(data.getStringExtra(ActivityManageTriggerDeviceOrientation.vectorFieldName)); newTrigger.setParentRule(ruleToEdit); ruleToEdit.getTriggerSet().add(newTrigger); this.refreshTriggerList(); } } - else if(requestCode == requestCodeTriggerDevicePositionEdit) + else if(requestCode == requestCodeTriggerDeviceOrientationEdit) { if(resultCode == RESULT_OK) { @@ -1581,7 +1583,7 @@ public class ActivityManageRule extends Activity } else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.sendTextMessage.toString())) { - if(ActivityPermissions.isPermissionDeclaratedInManifest(ActivityManageRule.this, "android.permission.SEND_SMS")) + if(ActivityPermissions.isPermissionDeclaratedInManifest(ActivityManageRule.this, Manifest.permission.SEND_SMS)) { //launch other activity to enter parameters; newAction.setAction(Action_Enum.sendTextMessage); diff --git a/app/src/main/java/com/jens/automation2/Miscellaneous.java b/app/src/main/java/com/jens/automation2/Miscellaneous.java index 0658b46..3342cc4 100644 --- a/app/src/main/java/com/jens/automation2/Miscellaneous.java +++ b/app/src/main/java/com/jens/automation2/Miscellaneous.java @@ -14,6 +14,7 @@ import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; +import android.content.res.Configuration; import android.database.Cursor; import android.net.ConnectivityManager; import android.net.NetworkInfo; @@ -543,6 +544,19 @@ public class Miscellaneous extends Service return null; } + + public static boolean isDarkModeEnabled(Context context) + { + switch(context.getResources().getConfiguration().uiMode) + { + case Configuration.UI_MODE_NIGHT_YES: + return true; + case Configuration.UI_MODE_NIGHT_NO: + case Configuration.UI_MODE_NIGHT_UNDEFINED: + default: + return false; + } + } @SuppressLint("NewApi") public static String replaceVariablesInText(String source, Context context) throws Exception @@ -1135,11 +1149,11 @@ public class Miscellaneous extends Service } catch (IllegalAccessException e) { - e.printStackTrace(); + Miscellaneous.logEvent("w", "runMethodReflective", Log.getStackTraceString(e),5 ); } catch (InvocationTargetException e) { - e.printStackTrace(); + Miscellaneous.logEvent("w", "runMethodReflective", Log.getStackTraceString(e),5 ); } return result; diff --git a/app/src/main/java/com/jens/automation2/ReceiverCoordinator.java b/app/src/main/java/com/jens/automation2/ReceiverCoordinator.java index b11b52e..de8b1e5 100644 --- a/app/src/main/java/com/jens/automation2/ReceiverCoordinator.java +++ b/app/src/main/java/com/jens/automation2/ReceiverCoordinator.java @@ -175,10 +175,7 @@ public class ReceiverCoordinator Class testClass = Class.forName(ActivityManageRule.activityDetectionClassPath); //startActivityDetectionReceiver if(Rule.isAnyRuleUsing(Trigger.Trigger_Enum.activityDetection)) - { Miscellaneous.runMethodReflective(activityDetectionClassPath, "startActivityDetectionReceiver", null); - // ActivityDetectionReceiver.startActivityDetectionReceiver(); - } } catch(ClassNotFoundException e) { @@ -206,12 +203,12 @@ public class ReceiverCoordinator DateTimeListener.stopAlarmListener(AutomationService.getInstance()); NoiseListener.stopNoiseListener(); ProcessListener.stopProcessListener(AutomationService.getInstance()); + DeviceOrientationListener.getInstance().stopListener(AutomationService.getInstance()); try { Class testClass = Class.forName(ActivityManageRule.activityDetectionClassPath); Miscellaneous.runMethodReflective("ActivityDetectionReceiver", "stopActivityDetectionReceiver", null); -// ActivityDetectionReceiver.stopActivityDetectionReceiver(); } catch(ClassNotFoundException e) { diff --git a/app/src/main/java/com/jens/automation2/Trigger.java b/app/src/main/java/com/jens/automation2/Trigger.java index fcf9f1b..cc5361e 100644 --- a/app/src/main/java/com/jens/automation2/Trigger.java +++ b/app/src/main/java/com/jens/automation2/Trigger.java @@ -287,16 +287,18 @@ public class Trigger float currentRoll = DeviceOrientationListener.getInstance().getRoll(); if( - desiredAzimuthTolerance < 180 - && !( - currentAzimuth <= desiredAzimuth + desiredAzimuthTolerance - && - currentAzimuth >= desiredAzimuth - desiredAzimuthTolerance + desiredAzimuthTolerance < 180 + && + ( + Math.abs(currentAzimuth) <= Math.abs(desiredAzimuth - desiredAzimuthTolerance) + || + Math.abs(currentAzimuth) <= desiredAzimuth + desiredAzimuthTolerance + ) ) ) { - Miscellaneous.logEvent("i", "DeviceOrientation", "Trigger doesn\'t apply. Azimuth outside of tolerance area.", 5); + Miscellaneous.logEvent("i", "DeviceOrientation", "Azimuth outside of tolerance area.", 5); if(getTriggerParameter()) return false; else @@ -304,16 +306,18 @@ public class Trigger } if( - desiredPitchTolerance < 180 - && !( - currentPitch <= desiredPitch + desiredPitchTolerance - && - currentPitch >= desiredPitch - desiredPitchTolerance + desiredPitchTolerance < 180 + && + ( + Math.abs(currentPitch) <= Math.abs(desiredPitch - desiredPitchTolerance) + || + Math.abs(currentPitch) <= desiredPitch + desiredPitchTolerance + ) ) ) { - Miscellaneous.logEvent("i", "DeviceOrientation", "Trigger doesn\'t apply. Pitch outside of tolerance area.", 5); + Miscellaneous.logEvent("i", "DeviceOrientation", "Pitch outside of tolerance area.", 5); if(getTriggerParameter()) return false; else @@ -321,16 +325,18 @@ public class Trigger } if( - desiredRollTolerance < 180 - && !( - currentRoll <= desiredRoll + desiredRollTolerance - && - currentRoll >= desiredRoll - desiredRollTolerance + desiredRollTolerance < 180 + && + ( + Math.abs(currentRoll) <= Math.abs(desiredRoll - desiredRollTolerance) + || + Math.abs(currentRoll) <= desiredRoll + desiredRollTolerance + ) ) ) { - Miscellaneous.logEvent("i", "DeviceOrientation", "Trigger doesn\'t apply. Roll outside of tolerance area.", 5); + Miscellaneous.logEvent("i", "DeviceOrientation", "Roll outside of tolerance area.", 5); if(getTriggerParameter()) return false; else diff --git a/app/src/main/java/com/jens/automation2/receivers/DeviceOrientationListener.java b/app/src/main/java/com/jens/automation2/receivers/DeviceOrientationListener.java index 435491b..9fcc94b 100644 --- a/app/src/main/java/com/jens/automation2/receivers/DeviceOrientationListener.java +++ b/app/src/main/java/com/jens/automation2/receivers/DeviceOrientationListener.java @@ -31,6 +31,7 @@ public class DeviceOrientationListener implements SensorEventListener, Automatio Calendar now = null; static Calendar lastTimeSignalArrived = null; + static int sensorValueCounter = 0; // Gravity rotational data private float gravity[]; @@ -148,23 +149,32 @@ public class DeviceOrientationListener implements SensorEventListener, Automatio if(activityManageTriggerDeviceOrientationInstance != null) activityManageTriggerDeviceOrientationInstance.updateFields(azimuth, pitch, roll); - now = Calendar.getInstance(); - if(lastTimeSignalArrived == null || now.getTimeInMillis() >= lastTimeSignalArrived.getTimeInMillis() + Settings.acceptDeviceOrientationSignalEveryX_MilliSeconds) + /* + For some reason the first 3 values after starting the listener + are crap. + */ + if(sensorValueCounter > 3) { - lastTimeSignalArrived = now; - - Miscellaneous.logEvent("i", "DeviceOrientation", "Got device orientation update: azimuth: " + String.valueOf(azimuth) + ", pitch: " + String.valueOf(pitch) + ", roll: " + String.valueOf(pitch), 4); - - if (AutomationService.isMyServiceRunning(Miscellaneous.getAnyContext())) + now = Calendar.getInstance(); + if (lastTimeSignalArrived == null || now.getTimeInMillis() >= lastTimeSignalArrived.getTimeInMillis() + Settings.acceptDeviceOrientationSignalEveryX_MilliSeconds) { - ArrayList ruleCandidates = Rule.findRuleCandidates(Trigger.Trigger_Enum.deviceOrientation); - for (int i = 0; i < ruleCandidates.size(); i++) + lastTimeSignalArrived = now; + + Miscellaneous.logEvent("i", "DeviceOrientation", "Got device orientation update: azimuth: " + String.valueOf(azimuth) + ", pitch: " + String.valueOf(pitch) + ", roll: " + String.valueOf(pitch), 4); + + if (AutomationService.isMyServiceRunning(Miscellaneous.getAnyContext())) { - if (ruleCandidates.get(i).getsGreenLight(Miscellaneous.getAnyContext())) - ruleCandidates.get(i).activate(AutomationService.getInstance(), false); + ArrayList ruleCandidates = Rule.findRuleCandidates(Trigger.Trigger_Enum.deviceOrientation); + for (int i = 0; i < ruleCandidates.size(); i++) + { + if (ruleCandidates.get(i).getsGreenLight(Miscellaneous.getAnyContext())) + ruleCandidates.get(i).activate(AutomationService.getInstance(), false); + } } } } + else + sensorValueCounter++; } @Override diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c5951cb..4124cbf 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -445,7 +445,7 @@ Microphone Either Select type of headphone - Rule doesn\'t apply. Wrong headphone type. + Rule %1$s doesn\'t apply. Wrong headphone type. Ignoring activity detection update. Came in sooner that %1$s seconds. What\'s this? At least rule \"%1$s\" is using a trigger of type \"%2$s\".