From 4b1fd007d331e79b7ade96fd5f3045b30aca82d8 Mon Sep 17 00:00:00 2001 From: jens Date: Thu, 11 Jun 2026 16:49:04 +0200 Subject: [PATCH] Distinction between settings --- app/src/apkFlavor/AndroidManifest.xml | 2 + app/src/fdroidFlavor/AndroidManifest.xml | 2 + app/src/googlePlayFlavor/AndroidManifest.xml | 2 + .../java/com/jens/automation2/Actions.java | 1 + .../jens/automation2/ActivityPermissions.java | 160 ++++++++++++------ 5 files changed, 117 insertions(+), 50 deletions(-) diff --git a/app/src/apkFlavor/AndroidManifest.xml b/app/src/apkFlavor/AndroidManifest.xml index 1f61bc3..3fe42be 100644 --- a/app/src/apkFlavor/AndroidManifest.xml +++ b/app/src/apkFlavor/AndroidManifest.xml @@ -80,6 +80,8 @@ --> + + --> + + + + = 34) + { + if(action.getParameter2().contains(Actions.alarm_set)) + addToArrayListUnique(Manifest.permission.SET_ALARM, requiredPermissions); + } if(Build.VERSION.SDK_INT >= 29) { String[] parts; @@ -823,7 +828,7 @@ public class ActivityPermissions extends Activity return requiredPermissions; } - protected ArrayList getRulesUsing(Trigger.Trigger_Enum triggerType) + protected ArrayList getRulesAsStringUsing(Trigger.Trigger_Enum triggerType) { ArrayList returnList = new ArrayList<>(); @@ -842,7 +847,7 @@ public class ActivityPermissions extends Activity return returnList; } - protected ArrayList getRulesUsing(Action.Action_Enum actionType) + protected ArrayList getRulesAsStringUsing(Action.Action_Enum actionType) { ArrayList returnList = new ArrayList<>(); @@ -861,6 +866,44 @@ public class ActivityPermissions extends Activity return returnList; } + protected ArrayList getRulesUsing(Trigger.Trigger_Enum triggerType) + { + ArrayList returnList = new ArrayList<>(); + + for (Rule rule : Rule.getRuleCollection()) + { + if (rule.isRuleActive()) + { + for (Trigger trigger : rule.getTriggerSet()) + { + if(trigger.getTriggerType().equals(triggerType)) + returnList.add(rule); + } + } + } + + return returnList; + } + + protected ArrayList getRulesUsing(Action.Action_Enum actionType) + { + ArrayList returnList = new ArrayList<>(); + + for (Rule rule : Rule.getRuleCollection()) + { + if (rule.isRuleActive()) + { + for (Action action : rule.getActionSet()) + { + if(action.getAction().equals(actionType)) + returnList.add(rule); + } + } + } + + return returnList; + } + public ArrayList getReasonForPermission(String permission) { ArrayList usingElements = new ArrayList(); @@ -877,139 +920,139 @@ public class ActivityPermissions extends Activity usingElements.add(getResources().getString(R.string.storeSettings)); break; case Manifest.permission.SCHEDULE_EXACT_ALARM: - for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.timeFrame)) + for(String ruleName : getRulesAsStringUsing(Trigger.Trigger_Enum.timeFrame)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); - for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.calendarEvent)) + for(String ruleName : getRulesAsStringUsing(Trigger.Trigger_Enum.calendarEvent)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); break; case Manifest.permission.BIND_NOTIFICATION_LISTENER_SERVICE: - for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.notification)) + for(String ruleName : getRulesAsStringUsing(Trigger.Trigger_Enum.notification)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); - for(String ruleName : getRulesUsing(Action.Action_Enum.closeNotification)) + for(String ruleName : getRulesAsStringUsing(Action.Action_Enum.closeNotification)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); break; case permissionNameGoogleActivityDetection: case Manifest.permission.ACTIVITY_RECOGNITION: - for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.activityDetection)) + for(String ruleName : getRulesAsStringUsing(Trigger.Trigger_Enum.activityDetection)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); break; case Manifest.permission.ACCESS_COARSE_LOCATION: case Manifest.permission.ACCESS_FINE_LOCATION: usingElements.add(getResources().getString(R.string.manageLocations)); - for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.pointOfInterest)) + for(String ruleName : getRulesAsStringUsing(Trigger.Trigger_Enum.pointOfInterest)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); - for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.speed)) + for(String ruleName : getRulesAsStringUsing(Trigger.Trigger_Enum.speed)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); break; case Manifest.permission.ACCESS_BACKGROUND_LOCATION: usingElements.add(getResources().getString(R.string.googleLocationChicanery)); usingElements.add(getResources().getString(R.string.wifiMonitoringAlsoRequiresThis)); - for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.pointOfInterest)) + for(String ruleName : getRulesAsStringUsing(Trigger.Trigger_Enum.pointOfInterest)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); - for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.speed)) + for(String ruleName : getRulesAsStringUsing(Trigger.Trigger_Enum.speed)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); break; case Manifest.permission.ACCESS_NETWORK_STATE: - for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.airplaneMode)) + for(String ruleName : getRulesAsStringUsing(Trigger.Trigger_Enum.airplaneMode)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); - for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.bluetoothConnection)) + for(String ruleName : getRulesAsStringUsing(Trigger.Trigger_Enum.bluetoothConnection)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); - for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.pointOfInterest)) + for(String ruleName : getRulesAsStringUsing(Trigger.Trigger_Enum.pointOfInterest)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); - for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.roaming)) + for(String ruleName : getRulesAsStringUsing(Trigger.Trigger_Enum.roaming)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); - for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.speed)) + for(String ruleName : getRulesAsStringUsing(Trigger.Trigger_Enum.speed)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); - for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.wifiConnection)) + for(String ruleName : getRulesAsStringUsing(Trigger.Trigger_Enum.wifiConnection)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); - for(String ruleName : getRulesUsing(Action.Action_Enum.setAirplaneMode)) + for(String ruleName : getRulesAsStringUsing(Action.Action_Enum.setAirplaneMode)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); - for(String ruleName : getRulesUsing(Action.Action_Enum.setBluetooth)) + for(String ruleName : getRulesAsStringUsing(Action.Action_Enum.setBluetooth)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); - for(String ruleName : getRulesUsing(Action.Action_Enum.setDataConnection)) + for(String ruleName : getRulesAsStringUsing(Action.Action_Enum.setDataConnection)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); - for(String ruleName : getRulesUsing(Action.Action_Enum.setWifi)) + for(String ruleName : getRulesAsStringUsing(Action.Action_Enum.setWifi)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); - for(String ruleName : getRulesUsing(Action.Action_Enum.setWifiTethering)) + for(String ruleName : getRulesAsStringUsing(Action.Action_Enum.setWifiTethering)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); break; case Manifest.permission.ACCESS_WIFI_STATE: - for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.pointOfInterest)) + for(String ruleName : getRulesAsStringUsing(Trigger.Trigger_Enum.pointOfInterest)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); - for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.wifiConnection)) + for(String ruleName : getRulesAsStringUsing(Trigger.Trigger_Enum.wifiConnection)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); break; case Manifest.permission.BLUETOOTH_ADMIN: case Manifest.permission.BLUETOOTH: case Manifest.permission.BLUETOOTH_CONNECT: - for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.bluetoothConnection)) + for(String ruleName : getRulesAsStringUsing(Trigger.Trigger_Enum.bluetoothConnection)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); - for(String ruleName : getRulesUsing(Action.Action_Enum.setBluetooth)) + for(String ruleName : getRulesAsStringUsing(Action.Action_Enum.setBluetooth)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); break; case Manifest.permission.GET_TASKS: - for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.process_started_stopped)) + for(String ruleName : getRulesAsStringUsing(Trigger.Trigger_Enum.process_started_stopped)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); break; case Manifest.permission.INTERNET: - for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.pointOfInterest)) + for(String ruleName : getRulesAsStringUsing(Trigger.Trigger_Enum.pointOfInterest)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); - for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.speed)) + for(String ruleName : getRulesAsStringUsing(Trigger.Trigger_Enum.speed)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); - for(String ruleName : getRulesUsing(Action.Action_Enum.triggerUrl)) + for(String ruleName : getRulesAsStringUsing(Action.Action_Enum.triggerUrl)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); break; case Manifest.permission.NFC: - for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.nfcTag)) + for(String ruleName : getRulesAsStringUsing(Trigger.Trigger_Enum.nfcTag)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); break; case Manifest.permission.PROCESS_OUTGOING_CALLS: case Manifest.permission.READ_CALL_LOG: - for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.phoneCall)) + for(String ruleName : getRulesAsStringUsing(Trigger.Trigger_Enum.phoneCall)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); break; case Manifest.permission.READ_PHONE_STATE: - for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.batteryLevel)) + for(String ruleName : getRulesAsStringUsing(Trigger.Trigger_Enum.batteryLevel)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); - for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.charging)) + for(String ruleName : getRulesAsStringUsing(Trigger.Trigger_Enum.charging)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); - for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.headsetPlugged)) + for(String ruleName : getRulesAsStringUsing(Trigger.Trigger_Enum.headsetPlugged)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); - for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.phoneCall)) + for(String ruleName : getRulesAsStringUsing(Trigger.Trigger_Enum.phoneCall)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); - for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.usb_host_connection)) + for(String ruleName : getRulesAsStringUsing(Trigger.Trigger_Enum.usb_host_connection)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); break; case Manifest.permission.RECORD_AUDIO: - for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.noiseLevel)) + for(String ruleName : getRulesAsStringUsing(Trigger.Trigger_Enum.noiseLevel)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); break; case Manifest.permission.SEND_SMS: - for(String ruleName : getRulesUsing(Action.Action_Enum.sendTextMessage)) + for(String ruleName : getRulesAsStringUsing(Action.Action_Enum.sendTextMessage)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); break; case Manifest.permission.CALL_PHONE: - for(String ruleName : getRulesUsing(Action.Action_Enum.startPhoneCall)) + for(String ruleName : getRulesAsStringUsing(Action.Action_Enum.startPhoneCall)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); break; case Manifest.permission.SYSTEM_ALERT_WINDOW: - for(String ruleName : getRulesUsing(Action.Action_Enum.startOtherActivity)) + for(String ruleName : getRulesAsStringUsing(Action.Action_Enum.startOtherActivity)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); - for(String ruleName : getRulesUsing(Action.Action_Enum.startPhoneCall)) + for(String ruleName : getRulesAsStringUsing(Action.Action_Enum.startPhoneCall)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); break; case Manifest.permission.ANSWER_PHONE_CALLS: - for(String ruleName : getRulesUsing(Action.Action_Enum.stopPhoneCall)) + for(String ruleName : getRulesAsStringUsing(Action.Action_Enum.stopPhoneCall)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); break; case Manifest.permission.FOREGROUND_SERVICE: usingElements.add(getResources().getString(R.string.startAutomationAsService)); break; case Manifest.permission.READ_EXTERNAL_STORAGE: - for(String ruleName : getRulesUsing(Action.Action_Enum.playSound)) + for(String ruleName : getRulesAsStringUsing(Action.Action_Enum.playSound)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); - for(String ruleName : getRulesUsing(Action.Action_Enum.changeSoundProfile)) + for(String ruleName : getRulesAsStringUsing(Action.Action_Enum.changeSoundProfile)) { Rule tempRule = Rule.getByName(ruleName); if(tempRule != null) @@ -1036,7 +1079,7 @@ public class ActivityPermissions extends Activity break; case Manifest.permission.BIND_DEVICE_ADMIN: - for(String ruleName : getRulesUsing(Action.Action_Enum.turnScreenOnOrOff)) + for(String ruleName : getRulesAsStringUsing(Action.Action_Enum.turnScreenOnOrOff)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); break; case Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS: @@ -1046,17 +1089,17 @@ public class ActivityPermissions extends Activity usingElements.add(getResources().getString(R.string.queryAllPackages)); break; case Manifest.permission.BIND_ACCESSIBILITY_SERVICE: - for(String ruleName : getRulesUsing(Action.Action_Enum.takeScreenshot)) + for(String ruleName : getRulesAsStringUsing(Action.Action_Enum.takeScreenshot)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); break; case Manifest.permission.WRITE_SECURE_SETTINGS: - for(String ruleName : getRulesUsing(Action.Action_Enum.setLocationService)) + for(String ruleName : getRulesAsStringUsing(Action.Action_Enum.setLocationService)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); - for(String ruleName : getRulesUsing(Action.Action_Enum.setSystemSetting)) + for(String ruleName : getRulesAsStringUsing(Action.Action_Enum.setSystemSetting)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); break; case Manifest.permission.READ_CALENDAR: - for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.calendarEvent)) + for(String ruleName : getRulesAsStringUsing(Trigger.Trigger_Enum.calendarEvent)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); break; // Proximity permission cannot be requested, but is always granted. @@ -1064,6 +1107,23 @@ public class ActivityPermissions extends Activity // for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.proximity)) // usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); // break; + case Manifest.permission.SET_ALARM: + if(Build.VERSION.SDK_INT >= 34) + { + outerLoop: + for (Rule rule : getRulesUsing(Action.Action_Enum.startOtherActivity)) + { + for(Action action : rule.getActionSet()) + { + if(action.getParameter2().contains(Actions.alarm_set)) + { + usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), rule.getName())); + continue outerLoop; + } + } + } + } + break; } return usingElements;