Distinction between settings

This commit is contained in:
2026-06-11 16:49:04 +02:00
parent 887e6de3e4
commit 4b1fd007d3
5 changed files with 117 additions and 50 deletions
+2
View File
@@ -80,6 +80,8 @@
<uses-permission android:name="android.permission.USE_EXACT_ALARM" />-->
<uses-permission android:name="com.termux.permission.RUN_COMMAND" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
<uses-feature
android:name="android.hardware.telephony"
+2
View File
@@ -78,6 +78,8 @@
<uses-permission android:name="android.permission.USE_EXACT_ALARM" />-->
<uses-permission android:name="com.termux.permission.RUN_COMMAND" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
<uses-feature
android:name="android.hardware.telephony"
@@ -75,6 +75,8 @@
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="com.termux.permission.RUN_COMMAND" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
<application
android:allowBackup="true"
@@ -90,6 +90,7 @@ public class Actions
public static final String wireguard_tunnel_up = "com.wireguard.android.action.SET_TUNNEL_UP";
public static final String wireguard_tunnel_down = "com.wireguard.android.action.SET_TUNNEL_DOWN";
public static final String wireguard_tunnel_refresh = "com.wireguard.android.action.REFRESH_TUNNEL_STATES";
public static final String alarm_set = "android.intent.action.SET_TIMER";
public static void createNotification(Action action)
{
@@ -740,6 +740,11 @@ public class ActivityPermissions extends Activity
// action.getParameter2().contains("eu.faircode.netguard.STOP_PORT_FORWARD")
// )
// addToArrayListUnique("net.kollnig.missioncontrol.permission.ADMIN", requiredPermissions);
if(Build.VERSION.SDK_INT >= 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<String> getRulesUsing(Trigger.Trigger_Enum triggerType)
protected ArrayList<String> getRulesAsStringUsing(Trigger.Trigger_Enum triggerType)
{
ArrayList<String> returnList = new ArrayList<>();
@@ -842,7 +847,7 @@ public class ActivityPermissions extends Activity
return returnList;
}
protected ArrayList<String> getRulesUsing(Action.Action_Enum actionType)
protected ArrayList<String> getRulesAsStringUsing(Action.Action_Enum actionType)
{
ArrayList<String> returnList = new ArrayList<>();
@@ -861,6 +866,44 @@ public class ActivityPermissions extends Activity
return returnList;
}
protected ArrayList<Rule> getRulesUsing(Trigger.Trigger_Enum triggerType)
{
ArrayList<Rule> 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<Rule> getRulesUsing(Action.Action_Enum actionType)
{
ArrayList<Rule> 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<String> getReasonForPermission(String permission)
{
ArrayList<String> usingElements = new ArrayList<String>();
@@ -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;