Compare commits
8
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
64936ce75a | ||
|
|
56a766d03c | ||
|
|
5b86d57857 | ||
|
|
4713e0d965 | ||
|
|
f6876b5b1d | ||
|
|
146d36f246 | ||
|
|
988b1c75a8 | ||
|
|
4b1fd007d3 |
+2
-2
@@ -11,8 +11,8 @@ android {
|
||||
compileSdkVersion 36
|
||||
buildToolsVersion '36.0.0'
|
||||
useLibrary 'org.apache.http.legacy'
|
||||
versionCode 148
|
||||
versionName "1.8.7"
|
||||
versionCode 149
|
||||
versionName "1.8.8"
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -96,6 +96,7 @@ import java.security.SecureRandom;
|
||||
import java.security.cert.CertificateException;
|
||||
import java.security.cert.X509Certificate;
|
||||
import java.text.DateFormat;
|
||||
import java.text.DecimalFormatSymbols;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
@@ -1114,28 +1115,34 @@ public class Miscellaneous extends Service
|
||||
}
|
||||
}
|
||||
|
||||
// executes a command on the system
|
||||
private static boolean canExecuteCommand(String command)
|
||||
{
|
||||
boolean executedSuccesfully;
|
||||
try
|
||||
{
|
||||
Runtime.getRuntime().exec(command);
|
||||
executedSuccesfully = true;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
executedSuccesfully = false;
|
||||
}
|
||||
// executes a command on the system
|
||||
private static boolean canExecuteCommand(String command)
|
||||
{
|
||||
boolean executedSuccesfully;
|
||||
try
|
||||
{
|
||||
Runtime.getRuntime().exec(command);
|
||||
executedSuccesfully = true;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
executedSuccesfully = false;
|
||||
}
|
||||
|
||||
return executedSuccesfully;
|
||||
}
|
||||
|
||||
public static char getDecimalSeparator()
|
||||
{
|
||||
DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.getDefault());
|
||||
return symbols.getDecimalSeparator(); // ',' or '.'
|
||||
}
|
||||
|
||||
return executedSuccesfully;
|
||||
}
|
||||
public static boolean isNumericDecimal(String strNum)
|
||||
{
|
||||
if (strNum == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
double d = Double.parseDouble(strNum);
|
||||
@@ -1146,6 +1153,26 @@ public class Miscellaneous extends Service
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static boolean isNumericNonDecimal(String number)
|
||||
{
|
||||
if (number == null)
|
||||
return false;
|
||||
|
||||
try
|
||||
{
|
||||
int temp = Integer.parseInt(number);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if(number.contains(String.valueOf(getDecimalSeparator())))
|
||||
return false;
|
||||
else
|
||||
return true;
|
||||
}
|
||||
|
||||
public static boolean isNumeric(String str)
|
||||
{
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -352,8 +352,8 @@
|
||||
<string name="errorReadingPoisAndRulesFromFile">Erreur de lecture des positions et règles depuis le fichier.</string>
|
||||
<string name="noDataChangedReadingAnyway">Les modifications n’ont 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">n’importe quel appareil</string>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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,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 @@
|
||||
* 新增了全局、系统和安全三种设置选项
|
||||
* 已修复:通过运行服务通知打开应用时崩溃
|
||||
* 已修复:启动服务时崩溃,应用设置中显示服务图标被停用
|
||||
* 已修复:未请求"蓝牙连接"权限来开关蓝牙。
|
||||
* 已修复:当用户界面语言为荷兰语时,无法添加另一个启动/停止的应用。
|
||||
* 固定:检查某些输入字段中的非十进制数字
|
||||
Reference in New Issue
Block a user