From 391479b1643a5625736704731dfbcc5c32ab9a2e Mon Sep 17 00:00:00 2001 From: jens Date: Thu, 9 Dec 2021 18:03:00 +0100 Subject: [PATCH] Rework --- .../java/com/jens/automation2/Rule.java | 32 +++---- .../java/com/jens/automation2/Action.java | 6 +- .../java/com/jens/automation2/Actions.java | 6 +- .../jens/automation2/ActivityManageRule.java | 7 +- .../ActivityManageTriggerDevicePosition.java | 45 +++++++--- .../jens/automation2/ReceiverCoordinator.java | 2 +- .../java/com/jens/automation2/Trigger.java | 83 ++++++++++--------- .../receivers/DevicePositionListener.java | 4 +- .../receivers/HeadphoneJackListener.java | 3 +- ...ctivity_manage_trigger_device_position.xml | 12 +++ app/src/main/res/values/strings.xml | 6 +- build.gradle | 2 +- 12 files changed, 134 insertions(+), 74 deletions(-) diff --git a/app/src/apkFlavor/java/com/jens/automation2/Rule.java b/app/src/apkFlavor/java/com/jens/automation2/Rule.java index 23ed06f0..dffc104f 100644 --- a/app/src/apkFlavor/java/com/jens/automation2/Rule.java +++ b/app/src/apkFlavor/java/com/jens/automation2/Rule.java @@ -348,14 +348,24 @@ public class Rule implements Comparable public boolean getsGreenLight(Context context) { - return applies(context) && hasNotAppliedSinceLastExecution(); + if(applies(context)) + { + if(hasNotAppliedSinceLastExecution()) + return true; + else + Miscellaneous.logEvent("i", "getsGreenLight()", "Rule " + getName() + " has not flipped since its last execution.", 4); + } + else + Miscellaneous.logEvent("i", "getsGreenLight()", "Rule " + getName() + " does not apply.", 4); + + return false; } public boolean applies(Context context) { if(AutomationService.getInstance() == null) { - Miscellaneous.logEvent("i", "RuleCheck", "Automation service not running. Rule cannot apply.", 3); + Miscellaneous.logEvent("i", "RuleCheck", "Automation service not running. Rule " + getName() + " cannot apply.", 3); return false; } @@ -393,7 +403,7 @@ public class Rule implements Comparable if (!found) { - Miscellaneous.logEvent("i", String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.ruleCheckOf), this.getName()), String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.ruleDoesntApplyActivityNotPresent), ActivityDetectionReceiver.getDescription(oneTrigger.getActivityDetectionType())), 3); + Miscellaneous.logEvent("i", String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.ruleCheckOf), this.getName()), String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.ruleDoesntApplyActivityNotPresent), getName(), ActivityDetectionReceiver.getDescription(oneTrigger.getActivityDetectionType())), 3); return false; } else @@ -402,7 +412,7 @@ public class Rule implements Comparable { if (oneDetectedActivity.getType() == oneTrigger.getActivityDetectionType() && oneDetectedActivity.getConfidence() < Settings.activityDetectionRequiredProbability) { - Miscellaneous.logEvent("i", String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.ruleCheckOf), this.getName()), String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.ruleDoesntApplyActivityGivenButTooLowProbability), ActivityDetectionReceiver.getDescription(oneDetectedActivity.getType()), String.valueOf(oneDetectedActivity.getConfidence()), String.valueOf(Settings.activityDetectionRequiredProbability)), 3); + Miscellaneous.logEvent("i", String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.ruleCheckOf), this.getName()), String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.ruleDoesntApplyActivityGivenButTooLowProbability), getName(), ActivityDetectionReceiver.getDescription(oneDetectedActivity.getType()), String.valueOf(oneDetectedActivity.getConfidence()), String.valueOf(Settings.activityDetectionRequiredProbability)), 3); return false; } } @@ -534,15 +544,7 @@ public class Rule implements Comparable public void activate(AutomationService automationService, boolean force) { ActivateRuleTask task = new ActivateRuleTask(); - -// if(Settings.startNewThreadForRuleActivation) - task.execute(automationService, force); -// else -// { -// task.activateInternally(automationService, force); -// AutomationService.updateNotification(); -// ActivityMainScreen.updateMainScreen(); -// } + task.execute(automationService, force); } public static ArrayList findRuleCandidatesByPoi(PointOfInterest searchPoi, boolean triggerParameter) @@ -627,7 +629,7 @@ public class Rule implements Comparable if(oneTrigger.getTimeFrame().getTriggerTimeStart().getTime() > oneTrigger.getTimeFrame().getTriggerTimeStop().getTime()) { - Miscellaneous.logEvent("i", "Timeframe search", "Rule goes over midnight.", 5); + Miscellaneous.logEvent("i", "Timeframe search", "Rule (" + oneRule.getName() + ") stretches over midnight.", 5); if(oneTrigger.getTimeFrame().getTriggerTimeStart().getTime() <= searchTime.getTime() || searchTime.getTime() <= oneTrigger.getTimeFrame().getTriggerTimeStop().getTime()+20000) //add 20 seconds because of delay { ruleCandidates.add(oneRule); @@ -636,7 +638,7 @@ public class Rule implements Comparable } else if(oneTrigger.getTimeFrame().getTriggerTimeStart().getTime() <= searchTime.getTime() && searchTime.getTime() <= oneTrigger.getTimeFrame().getTriggerTimeStop().getTime()+20000) //add 20 seconds because of delay { - Miscellaneous.logEvent("i", "RuleSearch", "Rule found with TimeFrame with time " + searchTime.toString(), 3); + Miscellaneous.logEvent("i", "RuleSearch", "Rule found (" + oneRule.getName() + ") with TimeFrame with time " + searchTime.toString(), 3); ruleCandidates.add(oneRule); break innerloop; //if the poi is found we don't need to search the other triggers in the same rule } diff --git a/app/src/main/java/com/jens/automation2/Action.java b/app/src/main/java/com/jens/automation2/Action.java index 4cd32f56..bfd08097 100644 --- a/app/src/main/java/com/jens/automation2/Action.java +++ b/app/src/main/java/com/jens/automation2/Action.java @@ -5,6 +5,7 @@ import android.os.AsyncTask; import android.util.Log; import android.widget.Toast; +import org.apache.commons.lang3.StringUtils; import org.apache.http.client.methods.HttpGet; import java.util.ArrayList; @@ -429,7 +430,10 @@ public class Action case turnScreenOnOrOff: if(getParameter1()) { - Actions.wakeupDevice(Long.parseLong(this.getParameter2())); + if(StringUtils.isNumeric(this.getParameter2())) + Actions.wakeupDevice(Long.parseLong(this.getParameter2())); + else + Actions.wakeupDevice((long)1000); // wakeupDevice() will create a separate thread. That'll take some time, we wait 100ms. try { diff --git a/app/src/main/java/com/jens/automation2/Actions.java b/app/src/main/java/com/jens/automation2/Actions.java index cee7f6d2..19465e29 100644 --- a/app/src/main/java/com/jens/automation2/Actions.java +++ b/app/src/main/java/com/jens/automation2/Actions.java @@ -1123,7 +1123,7 @@ public class Actions // 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, "tag"); + WakeLock wakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, AutomationService.NOTIFICATION_CHANNEL_ID + ":turnOffScreen"); wakeLock.acquire(); } @@ -1132,8 +1132,8 @@ public class Actions { Miscellaneous.logEvent("i", "Actions", "Turning screen off.", 3); PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); -// WakeLock wakeLock = pm.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, "tag"); - WakeLock wakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK , "tag"); + 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(); } diff --git a/app/src/main/java/com/jens/automation2/ActivityManageRule.java b/app/src/main/java/com/jens/automation2/ActivityManageRule.java index 67ad2299..93da960d 100644 --- a/app/src/main/java/com/jens/automation2/ActivityManageRule.java +++ b/app/src/main/java/com/jens/automation2/ActivityManageRule.java @@ -49,6 +49,7 @@ import java.util.Collections; public class ActivityManageRule extends Activity { final static String activityDetectionClassPath = "com.jens.automation2.receivers.ActivityDetectionReceiver"; + public final static String intentNameTriggerParameter1 = "triggerParameter1"; public Context context; private Button cmdTriggerAdd, cmdActionAdd, cmdSaveRule; @@ -182,7 +183,7 @@ public class ActivityManageRule extends Activity }); cmdSaveRule.setOnClickListener(new OnClickListener() - { + { @Override public void onClick(View v) { @@ -265,6 +266,7 @@ public class ActivityManageRule extends Activity break; case devicePosition: Intent devicePositionEditor = new Intent(ActivityManageRule.this, ActivityManageTriggerDevicePosition.class); + devicePositionEditor.putExtra(ActivityManageRule.intentNameTriggerParameter1, selectedTrigger.getTriggerParameter()); devicePositionEditor.putExtra(ActivityManageTriggerDevicePosition.vectorFieldName, selectedTrigger.getTriggerParameter2()); startActivityForResult(devicePositionEditor, requestCodeTriggerDevicePositionEdit); break; @@ -1365,6 +1367,7 @@ public class ActivityManageRule extends Activity { // newTrigger.setTriggerParameter(data.getBooleanExtra("wifiState", false)); newTrigger.setTriggerParameter2(data.getStringExtra(ActivityManageTriggerDevicePosition.vectorFieldName)); + newTrigger.setParentRule(ruleToEdit); ruleToEdit.getTriggerSet().add(newTrigger); this.refreshTriggerList(); } @@ -1375,7 +1378,9 @@ public class ActivityManageRule extends Activity { Trigger editedTrigger = new Trigger(); editedTrigger.setTriggerType(Trigger_Enum.devicePosition); + editedTrigger.setTriggerParameter(data.getBooleanExtra(ActivityManageRule.intentNameTriggerParameter1, true)); editedTrigger.setTriggerParameter2(data.getStringExtra(ActivityManageTriggerDevicePosition.vectorFieldName)); + editedTrigger.setParentRule(ruleToEdit); ruleToEdit.getTriggerSet().set(editIndex, editedTrigger); this.refreshTriggerList(); } diff --git a/app/src/main/java/com/jens/automation2/ActivityManageTriggerDevicePosition.java b/app/src/main/java/com/jens/automation2/ActivityManageTriggerDevicePosition.java index 13b1c348..8c0c859d 100644 --- a/app/src/main/java/com/jens/automation2/ActivityManageTriggerDevicePosition.java +++ b/app/src/main/java/com/jens/automation2/ActivityManageTriggerDevicePosition.java @@ -9,6 +9,7 @@ import android.text.Spanned; import android.util.Log; import android.view.View; import android.widget.Button; +import android.widget.CheckBox; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; @@ -24,6 +25,7 @@ public class ActivityManageTriggerDevicePosition extends Activity TextView currentAzimuth, currentPitch, currentRoll, tvAppliesAzimuth, tvAppliesPitch, tvAppliesRoll; Button bApplyPositionValues, bSavePositionValues; EditText etDesiredAzimuth, etDesiredAzimuthTolerance, etDesiredPitch, etDesiredPitchTolerance, etDesiredRoll, etDesiredRollTolerance; + CheckBox chkDevicePositionApplies; public static String vectorFieldName = "deviceVector"; @@ -37,11 +39,11 @@ public class ActivityManageTriggerDevicePosition extends Activity currentPitch.setText(Float.toString(pitch)); currentRoll.setText(Float.toString(roll)); - if(checkInputs(false)) + try { desiredAzimuth = Float.parseFloat(etDesiredAzimuth.getText().toString()); desiredAzimuthTolerance = Float.parseFloat(etDesiredAzimuthTolerance.getText().toString()); - if(Math.abs(azimuth) <= Math.abs(desiredAzimuth - desiredAzimuthTolerance) || Math.abs(azimuth) <= desiredAzimuth + desiredAzimuthTolerance) + if (Math.abs(azimuth) <= Math.abs(desiredAzimuth - desiredAzimuthTolerance) || Math.abs(azimuth) <= desiredAzimuth + desiredAzimuthTolerance) { tvAppliesAzimuth.setText(getResources().getString(R.string.yes)); tvAppliesAzimuth.setTextColor(Color.GREEN); @@ -51,10 +53,17 @@ public class ActivityManageTriggerDevicePosition extends Activity tvAppliesAzimuth.setText(getResources().getString(R.string.no)); tvAppliesAzimuth.setTextColor(Color.RED); } + } + catch(Exception e) + { + tvAppliesAzimuth.setText(""); + } + try + { desiredPitch = Float.parseFloat(etDesiredPitch.getText().toString()); desiredPitchTolerance = Float.parseFloat(etDesiredPitchTolerance.getText().toString()); - if(Math.abs(pitch) <= Math.abs(desiredPitch - desiredPitchTolerance) || Math.abs(pitch) <= desiredPitch + desiredPitchTolerance) + if (Math.abs(pitch) <= Math.abs(desiredPitch - desiredPitchTolerance) || Math.abs(pitch) <= desiredPitch + desiredPitchTolerance) { tvAppliesPitch.setText(getResources().getString(R.string.yes)); tvAppliesPitch.setTextColor(Color.GREEN); @@ -64,10 +73,17 @@ public class ActivityManageTriggerDevicePosition extends Activity tvAppliesPitch.setText(getResources().getString(R.string.no)); tvAppliesPitch.setTextColor(Color.RED); } + } + catch(Exception e) + { + tvAppliesPitch.setText(""); + } + try + { desiredRoll = Float.parseFloat(etDesiredRoll.getText().toString()); desiredRollTolerance = Float.parseFloat(etDesiredRollTolerance.getText().toString()); - if(Math.abs(roll) <= Math.abs(desiredRoll - desiredRollTolerance) || Math.abs(roll) <= desiredRoll + desiredRollTolerance) + if (Math.abs(roll) <= Math.abs(desiredRoll - desiredRollTolerance) || Math.abs(roll) <= desiredRoll + desiredRollTolerance) { tvAppliesRoll.setText(getResources().getString(R.string.yes)); tvAppliesRoll.setTextColor(Color.GREEN); @@ -78,6 +94,10 @@ public class ActivityManageTriggerDevicePosition extends Activity tvAppliesRoll.setTextColor(Color.RED); } } + catch(Exception e) + { + tvAppliesRoll.setText(""); + } } @Override @@ -103,6 +123,8 @@ public class ActivityManageTriggerDevicePosition extends Activity etDesiredRoll = (EditText) findViewById(R.id.etDesiredRoll); etDesiredRollTolerance = (EditText) findViewById(R.id.etDesiredRollTolerance); + chkDevicePositionApplies = (CheckBox)findViewById(R.id.chkDevicePositionApplies); + // etDesiredAzimuth.setFilters(new InputFilter[]{new InputFilterMinMax(-180, 180)}); // etDesiredPitch.setFilters(new InputFilter[]{new InputFilterMinMax(-180, 180)}); // etDesiredRoll.setFilters(new InputFilter[]{new InputFilterMinMax(-180, 180)}); @@ -115,6 +137,8 @@ public class ActivityManageTriggerDevicePosition extends Activity editMode = true; try { + boolean chkValue = getIntent().getBooleanExtra(ActivityManageRule.intentNameTriggerParameter1, true); + chkDevicePositionApplies.setChecked(chkValue); String values[] = getIntent().getStringExtra(vectorFieldName).split(Trigger.triggerParameter2Split); etDesiredAzimuth.setText(values[0]); etDesiredAzimuthTolerance.setText(values[1]); @@ -159,13 +183,14 @@ public class ActivityManageTriggerDevicePosition extends Activity { // Save Intent returnData = new Intent(); + returnData.putExtra(ActivityManageRule.intentNameTriggerParameter1, chkDevicePositionApplies.isChecked()); returnData.putExtra(vectorFieldName, - etDesiredAzimuth.getText().toString() + Trigger.triggerParameter2Split + - etDesiredAzimuthTolerance.getText().toString() + Trigger.triggerParameter2Split + - etDesiredPitch.getText().toString() + Trigger.triggerParameter2Split + - etDesiredPitchTolerance.getText().toString() + Trigger.triggerParameter2Split + - etDesiredRoll.getText().toString() + Trigger.triggerParameter2Split + - etDesiredRollTolerance.getText().toString()); + etDesiredAzimuth.getText().toString() + Trigger.triggerParameter2Split + + etDesiredAzimuthTolerance.getText().toString() + Trigger.triggerParameter2Split + + etDesiredPitch.getText().toString() + Trigger.triggerParameter2Split + + etDesiredPitchTolerance.getText().toString() + Trigger.triggerParameter2Split + + etDesiredRoll.getText().toString() + Trigger.triggerParameter2Split + + etDesiredRollTolerance.getText().toString()); setResult(RESULT_OK, returnData); finish(); diff --git a/app/src/main/java/com/jens/automation2/ReceiverCoordinator.java b/app/src/main/java/com/jens/automation2/ReceiverCoordinator.java index 15b84da3..ef2f2d56 100644 --- a/app/src/main/java/com/jens/automation2/ReceiverCoordinator.java +++ b/app/src/main/java/com/jens/automation2/ReceiverCoordinator.java @@ -360,7 +360,7 @@ public class ReceiverCoordinator if(!DevicePositionListener.getInstance().isListenerRunning()) { Miscellaneous.logEvent("i", "DevicePositionListener", "Starting DevicePositionListener because used in a new/changed rule.", 4); - if(HeadphoneJackListener.getInstance().haveAllPermission()) +// if(DevicePositionListener.getInstance().haveAllPermission()) DevicePositionListener.getInstance().startListener(AutomationService.getInstance()); } } diff --git a/app/src/main/java/com/jens/automation2/Trigger.java b/app/src/main/java/com/jens/automation2/Trigger.java index 8ca4fdae..f9ef302b 100644 --- a/app/src/main/java/com/jens/automation2/Trigger.java +++ b/app/src/main/java/com/jens/automation2/Trigger.java @@ -300,7 +300,10 @@ public class Trigger ) { Miscellaneous.logEvent("i", "DevicePosition", "Trigger doesn\'t apply. Azimuth outside of tolerance area.", 5); - return false; + if(getTriggerParameter()) + return false; + else + return true; } if( @@ -314,7 +317,10 @@ public class Trigger ) { Miscellaneous.logEvent("i", "DevicePosition", "Trigger doesn\'t apply. Pitch outside of tolerance area.", 5); - return false; + if(getTriggerParameter()) + return false; + else + return true; } if( @@ -328,10 +334,16 @@ public class Trigger ) { Miscellaneous.logEvent("i", "DevicePosition", "Trigger doesn\'t apply. Roll outside of tolerance area.", 5); - return false; + if(getTriggerParameter()) + return false; + else + return true; } - return true; + if(getTriggerParameter()) + return true; + else + return false; } boolean checkHeadsetPlugged() @@ -1383,44 +1395,41 @@ public class Trigger break; case bluetoothConnection: String device = Miscellaneous.getAnyContext().getResources().getString(R.string.anyDevice); -// if(this.bluetoothDeviceAddress != null) -// { - if(bluetoothDeviceAddress.equals("")) + if(bluetoothDeviceAddress.equals("")) + { + device = Miscellaneous.getAnyContext().getResources().getString(R.string.any); + } + else if(bluetoothDeviceAddress.equals("")) + { + device = Miscellaneous.getAnyContext().getResources().getString(R.string.noDevice); + } + else + { + try { - device = Miscellaneous.getAnyContext().getResources().getString(R.string.any); + device = BluetoothReceiver.getDeviceByAddress(bluetoothDeviceAddress).getName() + " (" + this.bluetoothDeviceAddress + ")"; } - else if(bluetoothDeviceAddress.equals("")) + catch(NullPointerException e) { - device = Miscellaneous.getAnyContext().getResources().getString(R.string.noDevice); + device = Miscellaneous.getAnyContext().getResources().getString(R.string.invalidDevice) + ": " + this.bluetoothDeviceAddress; + Miscellaneous.logEvent("w", "Trigger", device, 3); } + } + + if(bluetoothEvent.equals(BluetoothDevice.ACTION_ACL_CONNECTED) || bluetoothEvent.equals(BluetoothDevice.ACTION_ACL_DISCONNECTED)) + { + if (this.triggerParameter) + returnString.append(String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.bluetoothConnectionTo), device)); else - { - try - { - device = BluetoothReceiver.getDeviceByAddress(bluetoothDeviceAddress).getName() + " (" + this.bluetoothDeviceAddress + ")"; - } - catch(NullPointerException e) - { - device = Miscellaneous.getAnyContext().getResources().getString(R.string.invalidDevice) + ": " + device; - Miscellaneous.logEvent("w", "Trigger", Miscellaneous.getAnyContext().getResources().getString(R.string.invalidDevice) + ": " + device, 3); - } - } - - if(bluetoothEvent.equals(BluetoothDevice.ACTION_ACL_CONNECTED) || bluetoothEvent.equals(BluetoothDevice.ACTION_ACL_DISCONNECTED)) - { - if (this.triggerParameter) - returnString.append(String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.bluetoothConnectionTo), device)); - else - returnString.append(String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.bluetoothDisconnectFrom), device)); - } - else if(bluetoothEvent.equals(BluetoothDevice.ACTION_FOUND)) - { - if (this.triggerParameter) - returnString.append(String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.bluetoothDeviceInRange), device)); - else - returnString.append(String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.bluetoothDeviceOutOfRange), device)); - } -// } + returnString.append(String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.bluetoothDisconnectFrom), device)); + } + else if(bluetoothEvent.equals(BluetoothDevice.ACTION_FOUND)) + { + if (this.triggerParameter) + returnString.append(String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.bluetoothDeviceInRange), device)); + else + returnString.append(String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.bluetoothDeviceOutOfRange), device)); + } break; case headsetPlugged: String type; diff --git a/app/src/main/java/com/jens/automation2/receivers/DevicePositionListener.java b/app/src/main/java/com/jens/automation2/receivers/DevicePositionListener.java index 0ad71333..8bc93236 100644 --- a/app/src/main/java/com/jens/automation2/receivers/DevicePositionListener.java +++ b/app/src/main/java/com/jens/automation2/receivers/DevicePositionListener.java @@ -100,7 +100,7 @@ public class DevicePositionListener implements SensorEventListener, AutomationLi { //unregister the sensor listener sManager.unregisterListener(this); - isRunning = true; + isRunning = false; } } } @@ -184,7 +184,7 @@ public class DevicePositionListener implements SensorEventListener, AutomationLi { //unregister the sensor listener sManager.unregisterListener(this); - isRunning = true; + isRunning = false; } } diff --git a/app/src/main/java/com/jens/automation2/receivers/HeadphoneJackListener.java b/app/src/main/java/com/jens/automation2/receivers/HeadphoneJackListener.java index 83a8865a..4be1da68 100644 --- a/app/src/main/java/com/jens/automation2/receivers/HeadphoneJackListener.java +++ b/app/src/main/java/com/jens/automation2/receivers/HeadphoneJackListener.java @@ -1,5 +1,6 @@ package com.jens.automation2.receivers; +import android.Manifest; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -133,7 +134,7 @@ public class HeadphoneJackListener extends BroadcastReceiver implements Automati public static boolean haveAllPermission() { - return ActivityPermissions.havePermission("android.permission.READ_PHONE_STATE", Miscellaneous.getAnyContext()); + return ActivityPermissions.havePermission(Manifest.permission.READ_PHONE_STATE, Miscellaneous.getAnyContext()); } diff --git a/app/src/main/res/layout/activity_manage_trigger_device_position.xml b/app/src/main/res/layout/activity_manage_trigger_device_position.xml index 4d82753d..f9bb97ff 100644 --- a/app/src/main/res/layout/activity_manage_trigger_device_position.xml +++ b/app/src/main/res/layout/activity_manage_trigger_device_position.xml @@ -224,6 +224,18 @@ + + + +