Compare commits

..
11 Commits
Author SHA1 Message Date
jens e0853082b7 Minor fixes 2026-09-20 17:23:01 +02:00
jens 4673bc2289 Minor fixes 2026-08-26 16:38:38 +02:00
jens 3f28e7b2bc Fixed http request crash 2026-08-26 13:33:55 +02:00
jens 64936ce75a registerReceiver option modified 2026-08-16 18:52:18 +02:00
jens 56a766d03c registerReceiver option added 2026-08-13 18:58:55 +02:00
jens 5b86d57857 Number check fix 2026-08-09 16:12:16 +02:00
jens 4713e0d965 Changelog translations 2026-08-09 16:00:38 +02:00
jens f6876b5b1d Number check fixed 2026-08-09 15:54:16 +02:00
jens 146d36f246 Merge branch 'development-patch' into development 2026-08-09 15:04:24 +02:00
jens 988b1c75a8 Added full screen intent permission 2026-06-28 17:16:04 +02:00
jens 4b1fd007d3 Distinction between settings 2026-06-11 16:49:04 +02:00
43 changed files with 805 additions and 520 deletions
+5 -5
View File
@@ -3,16 +3,16 @@ plugins {
}
android {
compileSdkVersion 36
compileSdkVersion 37
defaultConfig {
applicationId "com.jens.automation2"
minSdkVersion 19
compileSdkVersion 36
compileSdkVersion 37
buildToolsVersion '36.0.0'
useLibrary 'org.apache.http.legacy'
versionCode 148
versionName "1.8.7"
versionCode 150
versionName "1.8.9"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
@@ -36,7 +36,7 @@ android {
{
dimension "version"
versionNameSuffix "-googlePlay"
targetSdkVersion 36
targetSdkVersion 37
}
/*
+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"
@@ -403,7 +403,11 @@ public class ActivityDetectionReceiver extends IntentService implements Automati
private PendingIntent getActivityDetectionPendingIntent()
{
Intent intent = new Intent(AutomationService.getInstance(), ActivityDetectionReceiver.class);
PendingIntent returnValue = PendingIntent.getService(AutomationService.getInstance(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
PendingIntent returnValue;
if(Miscellaneous.getTargetSDK(AutomationService.getInstance()) >= 31)
returnValue = PendingIntent.getService(AutomationService.getInstance(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT|PendingIntent.FLAG_IMMUTABLE);
else
returnValue = PendingIntent.getService(AutomationService.getInstance(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
return returnValue;
}
}
@@ -799,4 +799,16 @@ public class Action
myAction.useDownloadedWebpage(result);
}
}
public Action getClone()
{
Action clone = new Action();
clone.setAction(this.getAction());
clone.setParentRule(this.getParentRule());
clone.setParameter1(this.getParameter1());
clone.setParameter2(this.getParameter2());
return clone;
}
}
@@ -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)
{
@@ -106,7 +106,7 @@ public class ActivityManageActionSetSystemSetting extends Activity
selectedDataType.equalsIgnoreCase("Long")
)
{
if(Miscellaneous.isNumericDecimal(etSettingValue.getText().toString()) || !Miscellaneous.isNumeric(etSettingValue.getText().toString()))
if(!Miscellaneous.isNumeric(etSettingValue.getText().toString()) || !Miscellaneous.isNumericNonDecimal(etSettingValue.getText().toString()))
{
Toast.makeText(ActivityManageActionSetSystemSetting.this, getResources().getString(R.string.enter_a_number), Toast.LENGTH_LONG).show();
return;
@@ -670,6 +670,8 @@ public class ActivityManageRule extends Activity
items.add(new Item(typesLong[i].toString(), R.drawable.subsystemstate));
else if(types[i].toString().equals(Trigger_Enum.checkVariable.toString()))
items.add(new Item(typesLong[i].toString(), R.drawable.variable));
else if(types[i].toString().equals(Trigger_Enum.proximity.toString()))
items.add(new Item(typesLong[i].toString(), R.drawable.proximity));
else if(types[i].toString().equals(Trigger_Enum.calendarEvent.toString()))
{
if(ActivityPermissions.isPermissionDeclaredInManifest(ActivityManageRule.this, Manifest.permission.READ_CALENDAR))
@@ -753,7 +755,17 @@ public class ActivityManageRule extends Activity
booleanChoices = new String[]{getResources().getString(R.string.started), getResources().getString(R.string.stopped)};
else if(triggerType == Trigger_Enum.usb_host_connection)
booleanChoices = new String[]{getResources().getString(R.string.connected), getResources().getString(R.string.disconnected)};
else if(triggerType == Trigger_Enum.speed || triggerType == Trigger_Enum.noiseLevel || triggerType == Trigger_Enum.batteryLevel)
else if(triggerType == Trigger_Enum.speed)
{
if(Miscellaneous.googleToBlameForLocation(false))
{
ActivityMainScreen.openGoogleBlamingWindow();
return;
}
else
booleanChoices = new String[]{getResources().getString(R.string.exceeds), getResources().getString(R.string.dropsBelow)};
}
else if(triggerType == Trigger_Enum.noiseLevel || triggerType == Trigger_Enum.batteryLevel)
booleanChoices = new String[]{getResources().getString(R.string.exceeds), getResources().getString(R.string.dropsBelow)};
else if(triggerType == Trigger_Enum.wifiConnection)
{
@@ -2613,17 +2625,24 @@ public class ActivityManageRule extends Activity
return alertDialog;
}
private AlertDialog getTriggerDeleteDialog(Context myContext, final Trigger triggerToBeDeleted)
private AlertDialog getTriggerDeleteDialog(Context myContext, final Trigger selectedTrigger)
{
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
alertDialogBuilder.setTitle(getResources().getString(R.string.whatToDoWithTrigger));
alertDialogBuilder.setItems(new String[]{getResources().getString(R.string.delete)}, new DialogInterface.OnClickListener()
alertDialogBuilder.setItems(new String[]{getResources().getString(R.string.delete), getResources().getString(R.string.clone)}, new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
// Only 1 choice at the moment, no need to check
ruleToEdit.getTriggerSet().remove(triggerToBeDeleted);
switch(which)
{
case 0:
ruleToEdit.getTriggerSet().remove(selectedTrigger);
break;
case 1:
ruleToEdit.getTriggerSet().add(selectedTrigger.getClone());
break;
}
refreshTriggerList();
}
});
@@ -2635,7 +2654,7 @@ public class ActivityManageRule extends Activity
{
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
alertDialogBuilder.setTitle(getResources().getString(R.string.whatToDoWithAction));
alertDialogBuilder.setItems(new String[] { getResources().getString(R.string.delete), getResources().getString(R.string.moveUp), getResources().getString(R.string.moveDown)}, new DialogInterface.OnClickListener()
alertDialogBuilder.setItems(new String[] { getResources().getString(R.string.delete), getResources().getString(R.string.moveUp), getResources().getString(R.string.moveDown), getResources().getString(R.string.clone)}, new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
@@ -2680,6 +2699,11 @@ public class ActivityManageRule extends Activity
Toast.makeText(ActivityManageRule.this, getResources().getString(R.string.cantMoveDown), Toast.LENGTH_LONG).show();
}
break;
case 3:
// create clone
ruleToEdit.getActionSet().add(actionToBeDeleted.getClone());
refreshActionList();
break;
}
}
});
@@ -734,12 +734,15 @@ public class ActivityPermissions extends Activity
action.getParameter2().contains(Actions.wireguard_tunnel_refresh)
)
addToArrayListUnique(ActivityPermissions.permissionNameWireguard, requiredPermissions);
// if(
// action.getParameter2().contains("eu.faircode.netguard.START_PORT_FORWARD")
// ||
// action.getParameter2().contains("eu.faircode.netguard.STOP_PORT_FORWARD")
// )
// addToArrayListUnique("net.kollnig.missioncontrol.permission.ADMIN", requiredPermissions);
if(Miscellaneous.getTargetSDK(Miscellaneous.getAnyContext()) >= 34)
{
if(action.getParameter2().contains(Actions.alarm_set))
{
addToArrayListUnique(Manifest.permission.SET_ALARM, requiredPermissions);
addToArrayListUnique(Manifest.permission.USE_FULL_SCREEN_INTENT, requiredPermissions);
}
}
if(Build.VERSION.SDK_INT >= 29)
{
String[] parts;
@@ -823,7 +826,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 +845,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 +864,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 +918,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 +1077,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 +1087,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 +1105,40 @@ 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(Miscellaneous.getTargetSDK(Miscellaneous.getAnyContext()) >= 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;
case Manifest.permission.USE_FULL_SCREEN_INTENT:
if(Miscellaneous.getTargetSDK(Miscellaneous.getAnyContext()) >= 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;
File diff suppressed because it is too large Load Diff
@@ -2092,4 +2092,16 @@ public class Trigger
{
this.parentRule = parentRule;
}
public Trigger getClone()
{
Trigger clone = new Trigger();
clone.setTriggerType(this.getTriggerType());
clone.setParentRule(this.getParentRule());
clone.setTriggerParameter(this.getTriggerParameter());
clone.setTriggerParameter2(this.getTriggerParameter2());
return clone;
}
}
@@ -7,6 +7,7 @@ import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.util.Log;
import com.jens.automation2.AutomationService;
@@ -213,7 +214,12 @@ public class WifiBroadcastReceiver extends BroadcastReceiver
wifiBrInstance = new WifiBroadcastReceiver();
WifiBroadcastReceiver.parentLocationProvider = loc;
}
loc.getParentService().registerReceiver(wifiBrInstance, wifiListenerIntentFilter);
if(Build.VERSION.SDK_INT >= 26)
loc.getParentService().registerReceiver(wifiBrInstance, wifiListenerIntentFilter, Context.RECEIVER_EXPORTED);
else
loc.getParentService().registerReceiver(wifiBrInstance, wifiListenerIntentFilter);
wifiListenerActive = true;
}
}
@@ -8,6 +8,7 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Build;
import android.util.Log;
import com.jens.automation2.ActivityPermissions;
@@ -30,7 +31,7 @@ public class BatteryReceiver extends BroadcastReceiver implements AutomationList
static boolean usbHostConnected = false;
static boolean batteryReceiverActive = false;
static IntentFilter batteryIntentFilter = null;
static Intent batteryStatus = null;
static Intent batteryStatusReceiverIntent = null;
private static int currentChargingState = 0; //0=unknown, 1=no, 2=yes
private static int currentChargingType = 0; //AC, wireless, USB
@@ -52,7 +53,10 @@ public class BatteryReceiver extends BroadcastReceiver implements AutomationList
batteryIntentFilter.addAction(Intent.ACTION_BATTERY_LOW);
}
batteryStatus = automationServiceRef.registerReceiver(batteryInfoReceiverInstance, batteryIntentFilter);
if(Build.VERSION.SDK_INT >= 26)
batteryStatusReceiverIntent = automationServiceRef.registerReceiver(batteryInfoReceiverInstance, batteryIntentFilter, Context.RECEIVER_EXPORTED);
else
batteryStatusReceiverIntent = automationServiceRef.registerReceiver(batteryInfoReceiverInstance, batteryIntentFilter);
batteryReceiverActive = true;
}
@@ -1,11 +1,14 @@
package com.jens.automation2.receivers;
import static android.content.Context.RECEIVER_EXPORTED;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Build;
import android.util.Log;
import android.widget.Toast;
@@ -57,7 +60,11 @@ public class BluetoothReceiver extends BroadcastReceiver implements AutomationLi
{
Miscellaneous.logEvent("i", "BluetoothReceiver", "Starting BluetoothReceiver", 4);
bluetoothReceiverActive = true;
AutomationService.getInstance().registerReceiver(bluetoothReceiverInstance, bluetoothReceiverIntentFilter);
if(Build.VERSION.SDK_INT >= 26)
AutomationService.getInstance().registerReceiver(bluetoothReceiverInstance, bluetoothReceiverIntentFilter, Context.RECEIVER_EXPORTED);
else
AutomationService.getInstance().registerReceiver(bluetoothReceiverInstance, bluetoothReceiverIntentFilter);
}
}
catch(Exception ex)
@@ -57,7 +57,14 @@ public class BroadcastListener extends android.content.BroadcastReceiver impleme
{
for (String key : intent.getExtras().keySet())
{
Miscellaneous.logEvent("i", "Broadcast extra", "Broadcast " + intent.getAction() + " has extra " + key + " and type " + intent.getExtras().get(key).getClass().getName(), 4);
try
{
Miscellaneous.logEvent("i", "Broadcast extra", "Broadcast " + intent.getAction() + " has extra " + key + " and type " + intent.getExtras().get(key).getClass().getName(), 4);
}
catch(NullPointerException e)
{
Miscellaneous.logEvent("i", "Broadcast extra", "Broadcast " + intent.getAction() + " has extra " + key + " and type " + "unknown class", 4);
}
}
}
@@ -133,6 +140,7 @@ public class BroadcastListener extends android.content.BroadcastReceiver impleme
broadcastStatus = automationServiceRef.registerReceiver(broadcastReceiverInstance, broadcastIntentFilter, Context.RECEIVER_EXPORTED);
else
broadcastStatus = automationServiceRef.registerReceiver(broadcastReceiverInstance, broadcastIntentFilter);
broadcastReceiverActive = true;
}
catch(Exception e)
@@ -57,7 +57,11 @@ public class ConnectivityReceiver extends BroadcastReceiver implements Automatio
{
Miscellaneous.logEvent("i", "Wifi Listener", "Starting connectivityReceiver", 4);
connectivityReceiverActive = true;
automationServiceRef.registerReceiver(connectivityReceiverInstance, connectivityIntentFilter);
if(Build.VERSION.SDK_INT >= 26)
automationServiceRef.registerReceiver(connectivityReceiverInstance, connectivityIntentFilter, Context.RECEIVER_EXPORTED);
else
automationServiceRef.registerReceiver(connectivityReceiverInstance, connectivityIntentFilter);
}
}
catch(Exception ex)
@@ -5,6 +5,7 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Build;
import android.util.Log;
import com.jens.automation2.ActivityPermissions;
@@ -105,7 +106,11 @@ public class HeadphoneJackListener extends BroadcastReceiver implements Automati
{
Miscellaneous.logEvent("i", "HeadsetJackListener", "Starting HeadsetJackListener", 4);
headphoneJackListenerActive = true;
automationService.registerReceiver(this, headphoneJackListenerIntentFilter);
if(Build.VERSION.SDK_INT >= 26)
automationService.registerReceiver(this, headphoneJackListenerIntentFilter, Context.RECEIVER_EXPORTED);
else
automationService.registerReceiver(this, headphoneJackListenerIntentFilter);
}
}
catch(Exception ex)
@@ -285,7 +285,12 @@ public class PhoneStatusListener implements AutomationListenerInterface
if(!outgoingCallsReceiverActive)
{
Miscellaneous.logEvent("i", "PhoneStatusListener", "Starting PhoneStatusListener->outgoingCallsReceiver", 4);
automationService.registerReceiver(outgoingCallsReceiverInstance, outgoingCallsIntentFilter);
if(Build.VERSION.SDK_INT >= 26)
automationService.registerReceiver(outgoingCallsReceiverInstance, outgoingCallsIntentFilter, Context.RECEIVER_EXPORTED);
else
automationService.registerReceiver(outgoingCallsReceiverInstance, outgoingCallsIntentFilter);
outgoingCallsReceiverActive = true;
}
}
@@ -71,7 +71,10 @@ public class ScreenStateReceiver extends BroadcastReceiver implements Automation
// Intent.ACTION_USER_UNLOCKED
}
screenStatusIntent = automationServiceRef.registerReceiver(screenStateReceiverInstance, screenStateIntentFilter);
if(Build.VERSION.SDK_INT >= 26)
screenStatusIntent = automationServiceRef.registerReceiver(screenStateReceiverInstance, screenStateIntentFilter, Context.RECEIVER_EXPORTED);
else
screenStatusIntent = automationServiceRef.registerReceiver(screenStateReceiverInstance, screenStateIntentFilter);
screenStateReceiverActive = true;
}
@@ -6,6 +6,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.wifi.WifiManager;
import android.os.Build;
import com.jens.automation2.AutomationService;
import com.jens.automation2.Miscellaneous;
@@ -116,7 +117,10 @@ public class SubSystemStateReceiver extends BroadcastReceiver implements Automat
subSystemStateIntentFilter.addAction(stateBluetooth);
}
subSystemStatusIntent = automationServiceRef.registerReceiver(subSystemStateReceiverInstance, subSystemStateIntentFilter);
if(Build.VERSION.SDK_INT >= 26)
subSystemStatusIntent = automationServiceRef.registerReceiver(subSystemStateReceiverInstance, subSystemStateIntentFilter, Context.RECEIVER_EXPORTED);
else
subSystemStatusIntent = automationServiceRef.registerReceiver(subSystemStateReceiverInstance, subSystemStateIntentFilter);
subSystemStateReceiverActive = true;
}
@@ -162,7 +162,11 @@ public class TetheringReceiver extends android.content.BroadcastReceiver impleme
try
{
automationServiceRef.registerReceiver(receiverInstance, intentFilter);
if(Build.VERSION.SDK_INT >= 26)
automationServiceRef.registerReceiver(receiverInstance, intentFilter, Context.RECEIVER_EXPORTED);
else
automationServiceRef.registerReceiver(receiverInstance, intentFilter);
receiverActive = true;
}
catch(Exception e)
@@ -4,6 +4,7 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Build;
import android.util.Log;
import com.jens.automation2.AutomationService;
@@ -43,8 +44,11 @@ public class TimeZoneListener extends BroadcastReceiver implements AutomationLis
timezoneListenerIntentFilter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
timezoneListenerIntentFilter.addAction(Intent.ACTION_TIME_CHANGED);
}
automationService.registerReceiver(timeZoneListenerInstance, timezoneListenerIntentFilter);
if(Build.VERSION.SDK_INT >= 26)
automationService.registerReceiver(timeZoneListenerInstance, timezoneListenerIntentFilter, Context.RECEIVER_EXPORTED);
else
automationService.registerReceiver(timeZoneListenerInstance, timezoneListenerIntentFilter);
}
}
catch(Exception ex)
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

+5 -5
View File
@@ -349,10 +349,10 @@
<string name="errorReadingPoisAndRulesFromFile">Fehler beim Lesen von Orten und Regeln aus Datei.</string>
<string name="noDataChangedReadingAnyway">Es scheint als wären keine Datenänderungen gespeichert worden. Allerdings könnten Änderungen im Speicher sein, die zurückgenommen werden müssen. Daher wird die Einstellungsdatei neu geladen.</string>
<string name="bluetoothConnection">Bluetooth Verbindung</string>
<string name="bluetoothConnectionTo">Bluetooth Verbindung zu %1$s</string>
<string name="bluetoothDisconnectFrom">Bluetooth Verbindung getrennt von %1$s</string>
<string name="bluetoothDeviceInRange">Bluetooth Gerät %1$s in Reichweite.</string>
<string name="bluetoothDeviceOutOfRange">Bluetooth Gerät %1$s außer Reichweite.</string>
<string name="bluetoothConnectionTo">Bluetooth Verbindung zu \"%1$s\"</string>
<string name="bluetoothDisconnectFrom">Bluetooth Verbindung getrennt von \"%1$s\"</string>
<string name="bluetoothDeviceInRange">Bluetooth Gerät \"%1$s\" in Reichweite.</string>
<string name="bluetoothDeviceOutOfRange">Bluetooth Gerät \"%1$s\" außer Reichweite.</string>
<string name="anyDevice">irgendeinem Gerät</string>
<string name="noDevice">kein Gerät</string>
<string name="selectDeviceFromList">Gerät aus Liste</string>
@@ -697,7 +697,7 @@
<string name="screenIs">Bildschirm ist %1$s</string>
<string name="sendEmailToDev">Email an Entwickler schicken</string>
<string name="controlCenter">Steuerungszentrale</string>
<string name="contactNotice">Email ist mein bevorzugtes Kommunikationsmittel, um Fehler zu melden, Fragen zu stellen or Vorschläge zu machen. Bitte gehen Sie für weitere Infos in die Steuerungszentrale.\nViele Fragen können nicht einfach gleich beantwortet werden, sondern erfordern eine technische Prüfung. Haben Sie also bitte etwas Geduld.\n\nAlternativ können Sie Ihre Frage im <a href="https://forum.server47.de">Forum</a> stellen.</string>
<string name="contactNotice">Email ist mein bevorzugtes Kommunikationsmittel, um Fehler zu melden, Fragen zu stellen or Vorschläge zu machen. Bitte gehen Sie für weitere Infos in die Steuerungszentrale.\nViele Fragen können nicht einfach gleich beantwortet werden, sondern erfordern eine technische Prüfung. Haben Sie also bitte etwas Geduld.\nIch kann absolut nachvollziehen, wenn Sie Ihre Privatspäre schützen möchten, aber ich möchte Sie bitten, sich zumindest mit Ihrem Vornamen zu melden, um einen normalen freundlichen Austausch zu vereinfachen.\n\nAlternativ können Sie Ihre Frage im <a href="https://forum.server47.de">Forum</a> stellen.</string>
<string name="featureCeasedToWorkLastWorkingAndroidVersion">Aufgrund Google\'s unendlicher Weisheit, ist die letzte Android Version, mit der diese Funktion noch funktioniert, die Version %1$s. Sie können es hier einrichten, aber vermutlich wird es keine Auswirkung haben.</string>
<string name="musicPlaying">Musik läuft</string>
<string name="selectParameters">Wählen Sie die Parameter</string>
+5 -5
View File
@@ -228,7 +228,7 @@
<string name="startOtherActivity">Iniciar otra app</string>
<string name="settings">Ajustes</string>
<string name="bluetoothConnection">Conexión Bluetooth</string>
<string name="bluetoothConnectionTo">Conexión Bluetooth con %1$s</string>
<string name="bluetoothConnectionTo">Conexión Bluetooth con \"%1$s\"</string>
<string name="anyDevice">cualquier dispositivo</string>
<string name="noDevice">ningun dispositivo</string>
<string name="actionPlayMusic">Abrir reproductor de música</string>
@@ -509,9 +509,9 @@
<string name="toggleNotAllowed">Reversibilidad solo esta permitida para reglas que tienen tags NFC por condición. Consulte la ayuda para mas información.</string>
<string name="errorReadingPoisAndRulesFromFile">Error en la lectura sitios y reglas del archivo.</string>
<string name="noDataChangedReadingAnyway">Aparece no hay cambios. Pero puede haber cambios en la memoria que pueden ser recogidos. Leyendo archivo de nuevo.</string>
<string name="bluetoothDisconnectFrom">Conexión Bluetooth de %1$s desconectada</string>
<string name="bluetoothDeviceInRange">Dispositivo Bluetooth %1$s en alcance.</string>
<string name="bluetoothDeviceOutOfRange">Dispositivo Bluetooth %1$s fuera de alcance.</string>
<string name="bluetoothDisconnectFrom">Conexión Bluetooth de \"%1$s\" desconectada</string>
<string name="bluetoothDeviceInRange">Dispositivo Bluetooth \"%1$s\" en alcance.</string>
<string name="bluetoothDeviceOutOfRange">Dispositivo Bluetooth \"%1$s\" fuera de alcance.</string>
<string name="deviceInRange">dispositivo en alcance</string>
<string name="deviceOutOfRange">dispositivo fuera de alcance</string>
<string name="selectDeviceOption">Elija una opción de dispositivo.</string>
@@ -696,7 +696,7 @@
<string name="screenIs">pantalla esta %1$s</string>
<string name="sendEmailToDev">Enviar email al desrollador</string>
<string name="featureCeasedToWorkLastWorkingAndroidVersion">Debido a la infinita sabiduría de Google, la última versión de Android en la que se sabe que funciona esta función es %1$s. Puede configurarlo, pero probablemente no tendrá ningún efecto.</string>
<string name="contactNotice">El correo electrónico es mi método preferido de contacto para informar errores, hacer preguntas o hacer propuestas. Vaya al centro de control para obtener más información.\nMuchas preguntas no se pueden responder de inmediato, pero requieren cierta investigación técnica. Así que, por favor, tengan un poco de paciencia. \n\nAlternativamente, tiene la opción de hacer sus preguntas en el <a href="https://forum.server47.de">foro</a>.</string>
<string name="contactNotice">El correo electrónico es mi método preferido de contacto para informar errores, hacer preguntas o hacer propuestas. Vaya al centro de control para obtener más información.\nMuchas preguntas no se pueden responder de inmediato, pero requieren cierta investigación técnica. Así que, por favor, tengan un poco de paciencia.\nEntiendo perfectamente el impulso de proteger tu privacidad, pero te pido que reveles al menos tu nombre de pila para permitir una conversación amistosa.\n\nAlternativamente, tiene la opción de hacer sus preguntas en el <a href="https://forum.server47.de">foro</a>.</string>
<string name="actionMediaControlNotice">Ten en cuenta que esta acción puede no funcionar con TODOS los jugadores. E incluso si lo hace, no todos los botones funcionan necesariamente.</string>
<string name="musicPlaying">Musica esta reproduciendo</string>
<string name="selectParameters">Elije parametros</string>
+3 -3
View File
@@ -352,8 +352,8 @@
<string name="errorReadingPoisAndRulesFromFile">Erreur de lecture des positions et règles depuis le fichier.</string>
<string name="noDataChangedReadingAnyway">Les modifications nont pas éte enregistrées. Cependant, il peut y avoir eu des changements dans la mémoire qui doit être rechargée. Relecture du fichier.</string>
<string name="bluetoothConnection">connexion Bluetooth</string>
<string name="bluetoothConnectionTo">connexion Bluetooth à %1$s</string>
<string name="bluetoothDisconnectFrom">connexion Bluetooth à %1$s perdue</string>
<string name="bluetoothConnectionTo">connexion Bluetooth à \"%1$s\"</string>
<string name="bluetoothDisconnectFrom">connexion Bluetooth à \"%1$s\" perdue</string>
<string name="bluetoothDeviceInRange">Dispositif Bluetooth %1$s à portée.</string>
<string name="bluetoothDeviceOutOfRange">Dispositif Bluetooth %1$s hors de portée.</string>
<string name="anyDevice">nimporte quel appareil</string>
@@ -678,7 +678,7 @@
<string name="comparisonCaseInsensitive">La coparaisonn est sensible à la casse du texte</string>
<string name="profileWarning">Les paramètres que vous pouvez régler ici affectent les évènements audio sur votre télephone. Ils peuvent même annuler votre alarme de réveil. Donc, quoi que vous fassiez, il est fortement recommandé de le tester, même après les mises à jour dAndroid.</string>
<string name="ifString">si</string>
<string name="contactNotice">Le-mail est mon moyen de contact préféré pour signaler les bogues, poser des questions ou faire des propositions. Rendez-vous sur le centre de contrôle pour en savoir plus. Des questions multiples peuvent ne pas recevoir de réponse immédiate, mais nécessitent des recherches techniques. Veuillez donc faire preuve de patience. \n\nSinon, vous avez la possibilité de poser vos questions dans le <a href="https://forum.server47.de">forum</a>.</string>
<string name="contactNotice">Le-mail est mon moyen de contact préféré pour signaler les bogues, poser des questions ou faire des propositions. Rendez-vous sur le centre de contrôle pour en savoir plus. Des questions multiples peuvent ne pas recevoir de réponse immédiate, mais nécessitent des recherches techniques. Veuillez donc faire preuve de patience.\nJe comprends parfaitement l\'envie de protéger votre vie privée, mais je vous demande de révéler au moins votre prénom pour permettre une conversation amicale.\n\nSinon, vous avez la possibilité de poser vos questions dans le <a href="https://forum.server47.de">forum</a>.</string>
<string name="controlCenter">Centre de contrôle</string>
<string name="sendEmailToDev">Envoyer un email au développeur</string>
<string name="screenIs">l’écran est %1$s</string>
+3 -3
View File
@@ -105,8 +105,8 @@
<string name="autoBrightnessNotice">Se usi la luminosità automatica, il valore di luminosità scelto in seguito probabilmente non sarà in uso per molto.</string>
<string name="batteryLevel">Livello della batteria</string>
<string name="bluetoothConnection">Connessione Bluetooth</string>
<string name="bluetoothConnectionTo">Connessione Bluetooth con %1$s</string>
<string name="bluetoothDeviceInRange">Dispositivo Bluetooth %1$s rilevato.</string>
<string name="bluetoothConnectionTo">Connessione Bluetooth con \"%1$s\"</string>
<string name="bluetoothDeviceInRange">Dispositivo Bluetooth \"%1$s\" rilevato.</string>
<string name="bluetoothDeviceOutOfRange">Dispositivo Bluetooth %1$s non raggiungibile.</string>
<string name="bluetoothDisconnectFrom">Connessione Bluetooth con %1$s interrotta</string>
<string name="bluetoothFailed">Impossibile attivare il Bluetooth. Questo dispositivo ne è dotato?</string>
@@ -698,7 +698,7 @@
<string name="screenIs">lo schermo è %1$s</string>
<string name="sendEmailToDev">Invia email allo sviluppatore</string>
<string name="controlCenter">Centro di controllo</string>
<string name="contactNotice">L\'e-mail è il mio metodo di contatto preferito per segnalare bug, porre domande o fare proposte. Vai al centro di controllo per saperne di più.\nMolte domande non possono essere risolte immediatamente, ma richiedono alcune ricerche tecniche. Quindi, per favore, abbiate un po\' di pazienza. \n\nIn alternativa hai la possibilità di porre le tue domande nel <a href="https://forum.server47.de">forum</a>.</string>
<string name="contactNotice">L\'e-mail è il mio metodo di contatto preferito per segnalare bug, porre domande o fare proposte. Vai al centro di controllo per saperne di più.\nMolte domande non possono essere risolte immediatamente, ma richiedono alcune ricerche tecniche. Quindi, per favore, abbiate un po\' di pazienza.\nCapisco perfettamente l\'impulso a proteggere la tua privacy, ma ti chiedo di rivelare almeno il tuo nome di battesimo per permettere una conversazione amichevole.\n\nIn alternativa hai la possibilità di porre le tue domande nel <a href="https://forum.server47.de">forum</a>.</string>
<string name="musicPlaying">La musica è in riproduzione</string>
<string name="musicIsPlaying">la musica è in riproduzione</string>
<string name="musicIsNotPlaying">la musica non viene riprodotta</string>
+3 -3
View File
@@ -347,8 +347,8 @@
<string name="errorReadingPoisAndRulesFromFile">Fout bij het lezen van locaties en regels uit bestand.</string>
<string name="noDataChangedReadingAnyway">Het lijkt erop dat er geen gegevenswijziging is opgeslagen. Er kunnen echter wijzigingen in het geheugen zijn geweest die moeten worden teruggedraaid. Herlezen van bestand.</string>
<string name="bluetoothConnection">Bluetooth connection</string>
<string name="bluetoothConnectionTo">Bluetooth-verbinding met %1$s</string>
<string name="bluetoothDisconnectFrom">Bluetooth-verbinding met %1$s verbroken</string>
<string name="bluetoothConnectionTo">Bluetooth-verbinding met \"%1$s\"</string>
<string name="bluetoothDisconnectFrom">Bluetooth-verbinding met \"%1$s\" verbroken</string>
<string name="bluetoothDeviceInRange">Bluetooth-apparaat %1$s binnen bereik.</string>
<string name="bluetoothDeviceOutOfRange">Bluetooth-apparaat %1$s buiten bereik.</string>
<string name="anyDevice">elk apparaat</string>
@@ -676,7 +676,7 @@
<string name="comparisonCaseInsensitive">Vergelijkingen worden gedaan case-INsensitief</string>
<string name="profileWarning">De instellingen die je hier maakt kunnen ervoor zorgen dat je bepaalde dingen niet meer van je telefoon merkt. Ze kunnen zelfs je wekker dempen. Dus wat je ook doet - het wordt aanbevolen om het te testen - ook na Android upgrades.</string>
<string name="ifString">als</string>
<string name="contactNotice">E-mail is mijn favoriete contactmethode om bugs te melden, vragen te stellen of voorstellen te doen. Ga naar het controlecentrum voor meer informatie.\nVeel vragen kunnen niet meteen worden beantwoord, maar vereisen wel wat technisch onderzoek. Dus heb alsjeblieft wat geduld. \n\nJe hebt ook de mogelijkheid om je vragen te stellen in het <a href="https://forum.server47.de">forum</a>.</string>
<string name="contactNotice">E-mail is mijn favoriete contactmethode om bugs te melden, vragen te stellen of voorstellen te doen. Ga naar het controlecentrum voor meer informatie.\nVeel vragen kunnen niet meteen worden beantwoord, maar vereisen wel wat technisch onderzoek. Dus heb alsjeblieft wat geduld.\nIk begrijp absoluut de drang om je privacy te beschermen, maar ik vraag je om ten minste je voornaam te onthullen om een vriendelijk gesprek mogelijk te maken.\n\nJe hebt ook de mogelijkheid om je vragen te stellen in het <a href="https://forum.server47.de">forum</a>.</string>
<string name="controlCenter">Controlecentrum</string>
<string name="sendEmailToDev">Stuur een e-mail naar de ontwikkelaar</string>
<string name="screenIs">scherm is %1$s</string>
+3 -3
View File
@@ -420,8 +420,8 @@
<string name="errorReadingPoisAndRulesFromFile">Błąd odczytu lokalizacji i reguł z pliku.</string>
<string name="noDataChangedReadingAnyway">Wygląda na to, że nie zapisano żadnych zmian danych. Mogły jednak wystąpić zmiany w pamięci, które należy cofnąć. Ponowne czytanie pliku.</string>
<string name="bluetoothConnection">Połączenie Bluetooth</string>
<string name="bluetoothConnectionTo">Połączenie Bluetooth do %1$s</string>
<string name="bluetoothDisconnectFrom">Połączenie Bluetooth z %1$s utracone</string>
<string name="bluetoothConnectionTo">Połączenie Bluetooth do \"%1$s\"</string>
<string name="bluetoothDisconnectFrom">Połączenie Bluetooth z \"%1$s\" utracone</string>
<string name="bluetoothDeviceInRange">Bluetooth device %1$s in range.</string>
<string name="bluetoothDeviceOutOfRange">Urządzenie Bluetooth %1$s w zasięgu.</string>
<string name="anyDevice">dowolne urządzenie</string>
@@ -768,7 +768,7 @@
<string name="comparisonCaseInsensitive">Porównania nie uwzględniają wielkości liter</string>
<string name="profileWarning">Ustawienia, które możesz tutaj dostosować, mogą sprawić, że nie będziesz już zauważać pewnych rzeczy w swoim telefonie. Mogą nawet wyciszyć budzik. Więc cokolwiek robisz - zdecydowanie zalecamy przetestowanie tego - także po aktualizacjach Androida.</string>
<string name="ifString">jeśli</string>
<string name="contactNotice">E-mail to moja preferowana metoda kontaktu w celu zgłaszania błędów, zadawania pytań lub składania propozycji. Przejdź do centrum sterowania, aby dowiedzieć się więcej.\nNa wiele pytań nie można odpowiedzieć od razu, ale wymagają one pewnych działań technicznych. Prosimy więc o odrobinę cierpliwości. \n\nAlternatywnie masz możliwość zadawania pytań na <a href="https://forum.server47.de">forum</a>.</string>
<string name="contactNotice">E-mail to moja preferowana metoda kontaktu w celu zgłaszania błędów, zadawania pytań lub składania propozycji. Przejdź do centrum sterowania, aby dowiedzieć się więcej.\nNa wiele pytań nie można odpowiedzieć od razu, ale wymagają one pewnych działań technicznych. Prosimy więc o odrobinę cierpliwości.\Całkowicie rozumiem chęć ochrony prywatności, ale proszę, byś przynajmniej ujawnił swoje imię, żeby móc przeprowadzić przyjazną rozmowę.\n\nAlternatywnie masz możliwość zadawania pytań na <a href="https://forum.server47.de">forum</a>.</string>
<string name="controlCenter">Centrum kontroli</string>
<string name="sendEmailToDev">Wyślij wiadomość e-mail do programisty</string>
<string name="screenIs">ekran to %1$s</string>
+3 -3
View File
@@ -389,8 +389,8 @@
<string name="errorReadingPoisAndRulesFromFile">Ошибка чтения местоположений и правил из файла.</string>
<string name="noDataChangedReadingAnyway">Похоже, что изменения данных не были сохранены. Однако в памяти могут быть изменения, которые необходимо откатить. Перечитываю файл.</string>
<string name="bluetoothConnection">Подключение по Bluetooth</string>
<string name="bluetoothConnectionTo">Подключение Bluetooth к %1$s</string>
<string name="bluetoothDisconnectFrom">Подключение Bluetooth к %1$s разорвано</string>
<string name="bluetoothConnectionTo">Подключение Bluetooth к \"%1$s\"</string>
<string name="bluetoothDisconnectFrom">Подключение Bluetooth к \%1$s\" разорвано</string>
<string name="bluetoothDeviceInRange">Устройство Bluetooth %1$s в диапазоне.</string>
<string name="bluetoothDeviceOutOfRange">Устройство Bluetooth %1$s вне диапазона.</string>
<string name="anyDevice">любое устройство</string>
@@ -735,7 +735,7 @@
<string name="comparisonCaseInsensitive">Сравнения проводятся без учета регистра</string>
<string name="profileWarning">Настройки, которые вы можете изменить здесь, могут привести к тому, что вы больше не заметите определенных вещей с вашего телефона. Они могут даже отключить будильник. Так что что бы вы ни делали - рекомендуется это проверять.</string>
<string name="ifString">если</string>
<string name="contactNotice">Электронная почта - мой предпочтительный способ связи, для сообщений об ошибках, вопросов или предложений. Перейдите в центр управления, чтобы узнать больше.\nМногие вопросы не могут быть решены сразу, но требуют некоторых технических исследований. Поэтому, пожалуйста, наберитесь терпения. \n\nВ качестве альтернативы у вас есть возможность задать свои вопросы на <a href="https://forum.server47.de">форуме</a>.</string>
<string name="contactNotice">Электронная почта - мой предпочтительный способ связи, для сообщений об ошибках, вопросов или предложений. Перейдите в центр управления, чтобы узнать больше.\nМногие вопросы не могут быть решены сразу, но требуют некоторых технических исследований. Поэтому, пожалуйста, наберитесь терпения.\nЯ полностью понимаю желание защитить вашу приватность, но прошу вас хотя бы раскрыть своё имя для дружеской беседы.\n\nВ качестве альтернативы у вас есть возможность задать свои вопросы на <a href="https://forum.server47.de">форуме</a>.</string>
<string name="controlCenter">Центр управления</string>
<string name="sendEmailToDev">Отправить электронное письмо разработчику</string>
<string name="screenIs">экран %1$s</string>
+2 -2
View File
@@ -343,7 +343,7 @@
<string name="errorReadingPoisAndRulesFromFile">从文件中读取位置和规则时出错。</string>
<string name="noDataChangedReadingAnyway">似乎没有保存过数据更改。但内存中可能有更改需要回滚。正在重新读取文件。</string>
<string name="bluetoothConnection">蓝牙连接</string>
<string name="bluetoothConnectionTo">蓝牙连接到 %1$s</string>
<string name="bluetoothConnectionTo">蓝牙连接到 \"%1$s\"</string>
<string name="bluetoothDisconnectFrom">与 %1$s 断开蓝牙连接</string>
<string name="bluetoothDeviceInRange">蓝牙设备 %1$s 在范围内。</string>
<string name="bluetoothDeviceOutOfRange">蓝牙设备 %1$s 不在范围内。</string>
@@ -670,7 +670,7 @@
<string name="comparisonCaseInsensitive">比较不区分大小写</string>
<string name="profileWarning">此处的设置可能会导致您无法再注意到手机中的某些内容,甚至可以让您的起床闹钟静音。所以无论怎样设置——强烈建议测试,在 Android 更新之后也要再测试。</string>
<string name="ifString">如果</string>
<string name="contactNotice">电子邮件是向我报告错误、提出问题或建议的首选联系方式。前往控制中心了解更多信息。\n许多问题无法立即解答,需要进行一些技术研究。所以请耐心等待。 \n\n或者,您可以选择在 <a href="https://forum.server47.de">论坛</a>中提问 。</string>
<string name="contactNotice">电子邮件是向我报告错误、提出问题或建议的首选联系方式。前往控制中心了解更多信息。\n许多问题无法立即解答,需要进行一些技术研究。所以请耐心等待。\n我完全理解你想保护隐私的冲动,但我请求你至少透露你的名字,以便友好交流。\n\n或者,您可以选择在 <a href="https://forum.server47.de">论坛</a>中提问 。</string>
<string name="controlCenter">控制中心</string>
<string name="sendEmailToDev">向开发者发送电子邮件</string>
<string name="screenIs">屏幕 %1$s</string>
+5 -5
View File
@@ -422,10 +422,10 @@
<string name="errorReadingPoisAndRulesFromFile">Error reading locations and rules from file.</string>
<string name="noDataChangedReadingAnyway">It appears no data change has been saved. However there may have been changes in memory that need to be rolled back. Rereading file.</string>
<string name="bluetoothConnection">Bluetooth connection</string>
<string name="bluetoothConnectionTo">Bluetooth connection to %1$s</string>
<string name="bluetoothDisconnectFrom">Bluetooth connection from %1$s torn</string>
<string name="bluetoothDeviceInRange">Bluetooth device %1$s in range.</string>
<string name="bluetoothDeviceOutOfRange">Bluetooth device %1$s out of range.</string>
<string name="bluetoothConnectionTo">Bluetooth connection to \"%1$s\"</string>
<string name="bluetoothDisconnectFrom">Bluetooth connection from \"%1$s\" torn</string>
<string name="bluetoothDeviceInRange">Bluetooth device \"%1$s\" in range.</string>
<string name="bluetoothDeviceOutOfRange">Bluetooth device \"%1$s\" out of range.</string>
<string name="anyDevice">any device</string>
<string name="ruleDoesntApplyNotTheCorrectDeviceName" translatable="false">Rule \"%1$s\" doesn\'t apply. Not the correct bluetooth device name.</string>
<string name="ruleDoesntApplyNotTheCorrectDeviceAddress" translatable="false">Rule \"%1$s\" doesn\'t apply. Not the correct bluetooth device address.</string>
@@ -770,7 +770,7 @@
<string name="comparisonCaseInsensitive">Comparisons are done case-INsensitive</string>
<string name="profileWarning">The settings you can adjust here, can cause that you don\'t notice certain things from your phone anymore. They may even silence your wakeup alarm. So whatever you do - it is highly recommended that you test it - also after Android updates.</string>
<string name="ifString">if</string>
<string name="contactNotice">Email is my preferred method of contact to report bugs, ask questions or make proposals. Go to control center to learn more.\nMany questions cannot be answered straight away, but require some technical research. So please have some patience.\n\nAlternatively you have the option of asking your questions in the <a href="https://forum.server47.de">forum</a>.</string>
<string name="contactNotice">Email is my preferred method of contact to report bugs, ask questions or make proposals. Go to control center to learn more.\nMany questions cannot be answered straight away, but require some technical research. So please have some patience.\nI absolutely understand the urge to protect your privacy, but I think you can at least reveal your first name to allow for a friendly conversation.\n\nAlternatively you have the option of asking your questions in the <a href="https://forum.server47.de">forum</a>.</string>
<string name="controlCenter">Control center</string>
<string name="sendEmailToDev">Send email to developer</string>
<string name="screenIs">screen is %1$s</string>
@@ -0,0 +1,6 @@
* Hinzugefügt: Möglichkeit, zwischen Global, System und Secure für System-Einstellungen zu wählen
* Behoben: Absturz beim Öffnen der Anwendung durch die Benachrichtigung des laufenden Dienstes
* Behoben: Absturz beim Starten des Dienstes und das Servicesymbol anzeigen, wurde in den App-Einstellungen deaktiviert
* Behoben: Die Berechtigung "Bluetooth-Verbindung" wurde nicht angefordert, um Bluetooth ein- oder auszuschalten.
* Behoben: Eine weitere gestartete/beendete App konnte nicht hinzugefügt werden, als die UI-Sprache niederländisch war.
* Behoben: Prüfe auf nicht-dezimale Zahlen in einigen Eingabefeldern
@@ -2,4 +2,5 @@
* Fixed: Crash when opening the application through the running service's notification
* Fixed: Crash when starting service and show service icon was deactivated in app settings
* Fixed: "Bluetooth connect" permission was not requested for turning Bluetooth on or off.
* Fixed: Another app started/stopped couldn't be added when UI language was Dutch.
* Fixed: Another app started/stopped couldn't be added when UI language was Dutch.
* Fixed: Check for non-decimal number in some input fields
@@ -0,0 +1 @@
* Added: Triggers and actions can now be cloned
@@ -0,0 +1,6 @@
* Se añadió la opción de elegir entre Global, Sistema y Seguro para establecer configuraciones
* Solucionado: Bloqueo al abrir la aplicación mediante la notificación del servicio en ejecución
* Solucionado: Fallo al iniciar el servicio y el icono de mostrar servicio se desactivó en la configuración de la app
* Solucionado: no se solicitó permiso de "conexión Bluetooth" para activar o apagar el Bluetooth.
* Solucionado: No se pudo añadir otra app que se inició o detuvo cuando el idioma de la interfaz era neerlandés.
* Solucionado: Comprueba si hay un número no decimal en algunos campos de entrada
@@ -0,0 +1,6 @@
* Ajout d'une option pour choisir entre Global, Système et Sécurisé pour définir des paramètres
* Corrigé : Plantage lors de l'ouverture de l'application via la notification du service en cours d'exécution
* Corrigé : plantage au démarrage du service et l'icône d'affichage du service ont été désactivées dans les paramètres de l'application
* Corrigé : l'autorisation « Bluetooth connect » n'a pas été demandée pour activer ou désactiver le Bluetooth.
* Corrigé : Une autre application qui a démarré/arrêté n'a pas pu être ajoutée lorsque la langue de l'interface utilisateur était néerlandaise.
* Corrigé : Vérifier la présence de nombre non décimal dans certains champs d'entrée
@@ -0,0 +1,6 @@
* Aggiunta l'opzione per scegliere tra Globale, Sistema e Sicuro per impostazioni prestabilite
* Corretto: crash all'apertura dell'applicazione tramite la notifica del servizio in esecuzione
* Corretto: crash all'avvio del servizio e l'icona di mostra il servizio sono state disattivate nelle impostazioni dell'app
* Corretto: non è stato richiesto il permesso di "Bluetooth connect" per attivare o disattivare il Bluetooth.
* Correto: Un'altra app avviata/fermata non poteva essere aggiunta quando la lingua dell'interfaccia era olandese.
* Fisso: Verifica la presenza di numeri non decimali in alcuni campi di input
@@ -0,0 +1,6 @@
* Optie toegevoegd om te kiezen tussen Global, System en Secure voor ingestelde instellingen
* Opgelost: Crash bij het openen van de applicatie via de melding van de lopende service
* Opgelost: Crash bij het starten van de service en het service-icoon tonen was gedeactiveerd in de app-instellingen
* Opgelost: "Bluetooth-verbinding" toestemming werd niet gevraagd om Bluetooth aan of uit te zetten.
* Opgelost: Een andere app die was gestart/gestopt kon niet worden toegevoegd toen de UI-taal Nederlands was.
* Vastgelegd: Controleer op niet-decimale getallen in sommige invoervelden
@@ -0,0 +1,6 @@
* Dodano opcję wyboru między Global, System i Secure dla ustawień określonych
* Naprawione: Awaria przy otwieraniu aplikacji przez powiadomienie działającej usługi
* Naprawione: Awaria przy uruchamianiu serwisu i wyświetlanie ikony serwisu została dezaktywowana w ustawieniach aplikacji
* Naprawiono: Nie proszono o pozwolenie na "połączenie z Bluetooth" przy włączaniu lub wyłączaniu Bluetooth.
* Naprawione: Inna aplikacja, która została uruchomiona/zatrzymana, nie mogła zostać dodana, gdy język użytkownika był niderlandzki.
* Stałe: Sprawdź liczbę nieprzecinkową w niektórych polach wejściowych
@@ -0,0 +1,6 @@
* Добавлена опция выбора между Global, System и Secure для определённых настроек
* Исправлено: сбой при открытии приложения через уведомление запускающегося сервиса
* Исправлено: сбой при запуске сервиса, а иконка показа сервиса была деактивирована в настройках приложения
* Исправлено: разрешение на включение или выключение Bluetooth не было запрошено.
* Исправлено: другое приложение, запущенное/остановленное, нельзя было добавить, когда язык интерфейса был голландским.
* Исправлено: проверка недесятичного числа в некоторых входных полях
@@ -0,0 +1,6 @@
* 新增了全局、系统和安全三种设置选项
* 已修复:通过运行服务通知打开应用时崩溃
* 已修复:启动服务时崩溃,应用设置中显示服务图标被停用
* 已修复:未请求"蓝牙连接"权限来开关蓝牙。
* 已修复:当用户界面语言为荷兰语时,无法添加另一个启动/停止的应用。
* 固定:检查某些输入字段中的非十进制数字