Compare commits
23
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e0853082b7 | ||
|
|
4673bc2289 | ||
|
|
3f28e7b2bc | ||
|
|
64936ce75a | ||
|
|
56a766d03c | ||
|
|
5b86d57857 | ||
|
|
4713e0d965 | ||
|
|
f6876b5b1d | ||
|
|
146d36f246 | ||
|
|
2cb4a2f1d3 | ||
|
|
988b1c75a8 | ||
|
|
7a9e03ed4d | ||
|
|
4b1fd007d3 | ||
|
|
887e6de3e4 | ||
|
|
5417b4e739 | ||
|
|
7e72dfd19a | ||
|
|
23223480e5 | ||
|
|
e3e2a87b5e | ||
|
|
4cea4391eb | ||
|
|
63150ed8f6 | ||
|
|
d986fcdf4d | ||
|
|
ea57dd01e5 | ||
|
|
6f1f112d98 |
+15
-15
@@ -3,16 +3,16 @@ plugins {
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdkVersion 34
|
||||
compileSdkVersion 37
|
||||
|
||||
defaultConfig {
|
||||
applicationId "com.jens.automation2"
|
||||
minSdkVersion 16
|
||||
compileSdkVersion 34
|
||||
buildToolsVersion '34.0.0'
|
||||
minSdkVersion 19
|
||||
compileSdkVersion 37
|
||||
buildToolsVersion '36.0.0'
|
||||
useLibrary 'org.apache.http.legacy'
|
||||
versionCode 146
|
||||
versionName "1.8.5"
|
||||
versionCode 150
|
||||
versionName "1.8.9"
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
@@ -36,7 +36,7 @@ android {
|
||||
{
|
||||
dimension "version"
|
||||
versionNameSuffix "-googlePlay"
|
||||
targetSdkVersion 35
|
||||
targetSdkVersion 37
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -63,25 +63,25 @@ android {
|
||||
checkReleaseBuilds false
|
||||
}
|
||||
namespace 'com.jens.automation2'
|
||||
buildToolsVersion '34.0.0'
|
||||
buildToolsVersion '36.0.0'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation 'org.jetbrains:annotations:15.0'
|
||||
implementation 'org.jetbrains:annotations:26.1.0'
|
||||
googlePlayFlavorImplementation 'com.google.firebase:firebase-appindexing:20.0.0'
|
||||
googlePlayFlavorImplementation 'com.google.android.gms:play-services-location:18.0.0'
|
||||
googlePlayFlavorImplementation 'com.google.android.gms:play-services-location:20.0.0'
|
||||
|
||||
apkFlavorImplementation 'com.google.firebase:firebase-appindexing:20.0.0'
|
||||
apkFlavorImplementation 'com.google.android.gms:play-services-location:18.0.0'
|
||||
apkFlavorImplementation 'com.google.android.gms:play-services-location:20.0.0'
|
||||
|
||||
implementation 'com.linkedin.dexmaker:dexmaker:2.28.1'
|
||||
implementation 'org.apache.commons:commons-lang3:3.0'
|
||||
implementation 'com.linkedin.dexmaker:dexmaker:2.28.6'
|
||||
implementation 'org.apache.commons:commons-lang3:3.20.0'
|
||||
|
||||
//implementation "androidx.security:security-crypto:1.0.0"
|
||||
//implementation "androidx.security:security-identity-credential:1.0.0-alpha02"
|
||||
implementation 'androidx.appcompat:appcompat:1.4.2'
|
||||
implementation 'com.google.android.material:material:1.6.1'
|
||||
testImplementation 'junit:junit:4'
|
||||
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
|
||||
testImplementation 'junit:junit:4.13.2'
|
||||
androidTestImplementation 'androidx.test.ext:junit:1.2.1'
|
||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
|
||||
}
|
||||
@@ -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"
|
||||
|
||||
+5
-1
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -524,7 +524,7 @@ public class Action
|
||||
triggerUrl(context);
|
||||
break;
|
||||
case setBluetooth:
|
||||
Actions.setBluetooth(context, getParameter1(), toggleActionIfPossible);
|
||||
boolean result = Actions.setBluetooth(context, getParameter1(), toggleActionIfPossible);
|
||||
break;
|
||||
case setUsbTethering:
|
||||
Actions.setUsbTethering(context, getParameter1(), toggleActionIfPossible);
|
||||
@@ -730,7 +730,7 @@ public class Action
|
||||
if(parameters.length >= 3)
|
||||
{
|
||||
urlUsername = parameters[1];
|
||||
urlPassword = parameters[2];
|
||||
urlPassword = parameters[2];
|
||||
|
||||
if(parameters.length >= 4)
|
||||
method = parameters[3];
|
||||
@@ -739,11 +739,22 @@ public class Action
|
||||
{
|
||||
// has params
|
||||
String[] paramPairs = parameters[4].split(Action.actionParameters2SeparatorOuter);
|
||||
String value = "";
|
||||
for(String pair : paramPairs)
|
||||
{
|
||||
String[] pieces = pair.split(Action.actionParameters2SeparatorInner);
|
||||
if(pieces.length == 2)
|
||||
httpParams.put(pieces[0], pieces[1]);
|
||||
|
||||
try
|
||||
{
|
||||
value = Miscellaneous.replaceVariablesInText(pieces[1], Miscellaneous.getAnyContext());
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
value = "error";
|
||||
}
|
||||
|
||||
if(pieces.length == 2)
|
||||
httpParams.put(pieces[0], value);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -758,10 +769,10 @@ public class Action
|
||||
Miscellaneous.logEvent("i", "HTTP Request", "Attempt " + String.valueOf(attempts++) + " of " + String.valueOf(Settings.httpAttempts), 3);
|
||||
|
||||
// Either thorough checking or no encryption
|
||||
if(!Settings.httpAcceptAllCertificates || !urlString.toLowerCase(Locale.getDefault()).contains("https"))
|
||||
// if(!Settings.httpAcceptAllCertificates || !urlString.toLowerCase(Locale.getDefault()).contains("https"))
|
||||
response = Miscellaneous.downloadURL(urlString, urlUsername, urlPassword, method, httpParams);
|
||||
else
|
||||
response = Miscellaneous.downloadUrlWithoutCertificateChecking(urlString, urlUsername, urlPassword, method, httpParams);
|
||||
// else
|
||||
// response = Miscellaneous.downloadUrlWithoutCertificateChecking(urlString, urlUsername, urlPassword, method, httpParams);
|
||||
|
||||
try
|
||||
{
|
||||
@@ -788,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)
|
||||
{
|
||||
@@ -260,17 +261,58 @@ public class Actions
|
||||
|
||||
ContentResolver cr = instance.getContentResolver();
|
||||
|
||||
//"String", "Long", "Int", "Float" };
|
||||
String[] parts = parameter2.split(Action.actionParameter2Split);
|
||||
// "String", "Long", "Int", "Float"
|
||||
String[] parts = parameter2.split(Action.actionParameter2Split, -1);
|
||||
|
||||
if (parts[0].equalsIgnoreCase("String"))
|
||||
result = android.provider.Settings.Global.putString(cr, parts[1], parts[2]);
|
||||
else if (parts[0].equalsIgnoreCase("Long"))
|
||||
result = android.provider.Settings.Global.putLong(cr, parts[1], Long.parseLong(parts[2]));
|
||||
else if (parts[0].equalsIgnoreCase("Int"))
|
||||
result = android.provider.Settings.Global.putInt(cr, parts[1], Integer.parseInt(parts[2]));
|
||||
else if (parts[0].equalsIgnoreCase("Float"))
|
||||
result = android.provider.Settings.Global.putFloat(cr, parts[1], Float.parseFloat(parts[2]));
|
||||
if(parts.length == 3)
|
||||
{
|
||||
if (parts[0].equalsIgnoreCase("String"))
|
||||
result = android.provider.Settings.Global.putString(cr, parts[1], parts[2]);
|
||||
else if (parts[0].equalsIgnoreCase("Long"))
|
||||
result = android.provider.Settings.Global.putLong(cr, parts[1], Long.parseLong(parts[2]));
|
||||
else if (parts[0].equalsIgnoreCase("Int"))
|
||||
result = android.provider.Settings.Global.putInt(cr, parts[1], Integer.parseInt(parts[2]));
|
||||
else if (parts[0].equalsIgnoreCase("Float"))
|
||||
result = android.provider.Settings.Global.putFloat(cr, parts[1], Float.parseFloat(parts[2]));
|
||||
}
|
||||
else
|
||||
{
|
||||
if(parts[0].equals(ActivityManageActionSetSystemSetting.targets[0]))
|
||||
{
|
||||
if (parts[1].equalsIgnoreCase("String"))
|
||||
result = android.provider.Settings.Global.putString(cr, parts[2], parts[3]);
|
||||
else if (parts[1].equalsIgnoreCase("Long"))
|
||||
result = android.provider.Settings.Global.putLong(cr, parts[2], Long.parseLong(parts[3]));
|
||||
else if (parts[1].equalsIgnoreCase("Int"))
|
||||
result = android.provider.Settings.Global.putInt(cr, parts[2], Integer.parseInt(parts[3]));
|
||||
else if (parts[1].equalsIgnoreCase("Float"))
|
||||
result = android.provider.Settings.Global.putFloat(cr, parts[2], Float.parseFloat(parts[3]));
|
||||
}
|
||||
else if(parts[0].equals(ActivityManageActionSetSystemSetting.targets[1]))
|
||||
{
|
||||
if (parts[1].equalsIgnoreCase("String"))
|
||||
result = android.provider.Settings.System.putString(cr, parts[2], parts[3]);
|
||||
else if (parts[1].equalsIgnoreCase("Long"))
|
||||
result = android.provider.Settings.System.putLong(cr, parts[2], Long.parseLong(parts[3]));
|
||||
else if (parts[1].equalsIgnoreCase("Int"))
|
||||
result = android.provider.Settings.System.putInt(cr, parts[2], Integer.parseInt(parts[3]));
|
||||
else if (parts[1].equalsIgnoreCase("Float"))
|
||||
result = android.provider.Settings.System.putFloat(cr, parts[2], Float.parseFloat(parts[3]));
|
||||
}
|
||||
else if(parts[0].equals(ActivityManageActionSetSystemSetting.targets[2]))
|
||||
{
|
||||
if (parts[1].equalsIgnoreCase("String"))
|
||||
result = android.provider.Settings.Secure.putString(cr, parts[2], parts[3]);
|
||||
else if (parts[1].equalsIgnoreCase("Long"))
|
||||
result = android.provider.Settings.Secure.putLong(cr, parts[2], Long.parseLong(parts[3]));
|
||||
else if (parts[1].equalsIgnoreCase("Int"))
|
||||
result = android.provider.Settings.Secure.putInt(cr, parts[2], Integer.parseInt(parts[3]));
|
||||
else if (parts[1].equalsIgnoreCase("Float"))
|
||||
result = android.provider.Settings.Secure.putFloat(cr, parts[2], Float.parseFloat(parts[3]));
|
||||
}
|
||||
else
|
||||
result = false;
|
||||
}
|
||||
|
||||
Miscellaneous.logEvent("i", "Variable", "Result of system setting change: " + String.valueOf(result), 4);
|
||||
|
||||
@@ -825,7 +867,7 @@ public class Actions
|
||||
public static Boolean setBluetooth(Context context, Boolean desiredState, boolean toggleActionIfPossible)
|
||||
{
|
||||
Miscellaneous.logEvent("i", "Bluetooth", "Changing bluetooth to " + String.valueOf(desiredState), 4);
|
||||
|
||||
// mPhone.setDataEnabled(enable);
|
||||
try
|
||||
{
|
||||
BluetoothAdapter myBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
|
||||
@@ -841,16 +883,16 @@ public class Actions
|
||||
if (!myBluetoothAdapter.isEnabled() && desiredState)
|
||||
{
|
||||
Toast.makeText(context, context.getResources().getString(R.string.activating) + " Bluetooth.", Toast.LENGTH_LONG).show();
|
||||
myBluetoothAdapter.enable();
|
||||
return true;
|
||||
return myBluetoothAdapter.enable();
|
||||
//return true;
|
||||
}
|
||||
|
||||
// deactivate
|
||||
if (myBluetoothAdapter.isEnabled() && !desiredState)
|
||||
{
|
||||
Toast.makeText(context, context.getResources().getString(R.string.deactivating) + " Bluetooth.", Toast.LENGTH_LONG).show();
|
||||
myBluetoothAdapter.disable();
|
||||
return true;
|
||||
return myBluetoothAdapter.disable();
|
||||
//return true;
|
||||
}
|
||||
}
|
||||
catch (NullPointerException e)
|
||||
|
||||
@@ -68,7 +68,7 @@ public class ActivityMainTabLayout extends TabActivity
|
||||
super.onResume();
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
// Miscellaneous.logEvent("i", "NFC", "ActivityMainTabLayout.onResume().", 5);
|
||||
if(!(getIntent().getAction().isEmpty()) && getIntent().getAction().equals(NfcAdapter.ACTION_NDEF_DISCOVERED))
|
||||
if(!(getIntent().getAction() == null || getIntent().getAction().isEmpty()) && getIntent().getAction().equals(NfcAdapter.ACTION_NDEF_DISCOVERED))
|
||||
{
|
||||
NfcReceiver.checkIntentForNFC(this, getIntent());
|
||||
moveTaskToBack(true);
|
||||
|
||||
@@ -18,12 +18,13 @@ import android.widget.Toast;
|
||||
|
||||
public class ActivityManageActionSetSystemSetting extends Activity
|
||||
{
|
||||
Spinner spinnerSettingDataType;
|
||||
Spinner spinnerSettingTarget, spinnerSettingDataType;
|
||||
EditText etSettingName, etSettingValue;
|
||||
Button bSaveSetSystemSetting;
|
||||
TextView tvSetSystemSettingExamples, tvSetSystemSettingNoticeWriteSecureSettings;
|
||||
|
||||
ArrayAdapter<String> settingDataTypeSpinnerAdapter;
|
||||
ArrayAdapter<String> settingTargetSpinnerAdapter, settingDataTypeSpinnerAdapter;
|
||||
protected final static String[] targets = { "Global", "System", "Secure" };
|
||||
protected final static String[] dataTypes = { "String", "Long", "Int", "Float" };
|
||||
|
||||
@Override
|
||||
@@ -34,6 +35,7 @@ public class ActivityManageActionSetSystemSetting extends Activity
|
||||
Miscellaneous.setUiTheme(this);
|
||||
this.setContentView(R.layout.activity_manage_action_set_system_setting);
|
||||
|
||||
spinnerSettingTarget = (Spinner) findViewById(R.id.spinnerSettingTarget);
|
||||
spinnerSettingDataType = (Spinner) findViewById(R.id.spinnerSettingDataType);
|
||||
etSettingName = (EditText)findViewById(R.id.etSettingName);
|
||||
etSettingValue = (EditText)findViewById(R.id.etSettingValue);
|
||||
@@ -41,6 +43,10 @@ public class ActivityManageActionSetSystemSetting extends Activity
|
||||
tvSetSystemSettingExamples = (TextView)findViewById(R.id.tvSetSystemSettingExamples);
|
||||
tvSetSystemSettingNoticeWriteSecureSettings = (TextView)findViewById(R.id.tvSetSystemSettingNoticeWriteSecureSettings);
|
||||
|
||||
settingTargetSpinnerAdapter = new ArrayAdapter<String>(this, R.layout.text_view_for_poi_listview_mediumtextsize, targets);
|
||||
spinnerSettingTarget.setAdapter(settingTargetSpinnerAdapter);
|
||||
settingTargetSpinnerAdapter.notifyDataSetChanged();
|
||||
|
||||
settingDataTypeSpinnerAdapter = new ArrayAdapter<String>(this, R.layout.text_view_for_poi_listview_mediumtextsize, dataTypes);
|
||||
spinnerSettingDataType.setAdapter(settingDataTypeSpinnerAdapter);
|
||||
settingDataTypeSpinnerAdapter.notifyDataSetChanged();
|
||||
@@ -52,6 +58,9 @@ public class ActivityManageActionSetSystemSetting extends Activity
|
||||
else
|
||||
tvSetSystemSettingNoticeWriteSecureSettings.setVisibility(View.VISIBLE);
|
||||
|
||||
// Make links clickable
|
||||
tvSetSystemSettingNoticeWriteSecureSettings.setMovementMethod(LinkMovementMethod.getInstance());
|
||||
|
||||
spinnerSettingDataType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
|
||||
{
|
||||
@Override
|
||||
@@ -97,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;
|
||||
@@ -115,7 +124,7 @@ public class ActivityManageActionSetSystemSetting extends Activity
|
||||
|
||||
Intent returnIntent = new Intent();
|
||||
|
||||
String param2Data = dataTypes[spinnerSettingDataType.getSelectedItemPosition()] + Action.actionParameter2Split + etSettingName.getText().toString() + Action.actionParameter2Split + etSettingValue.getText().toString();
|
||||
String param2Data = targets[spinnerSettingTarget.getSelectedItemPosition()] + Action.actionParameter2Split + dataTypes[spinnerSettingDataType.getSelectedItemPosition()] + Action.actionParameter2Split + etSettingName.getText().toString() + Action.actionParameter2Split + etSettingValue.getText().toString();
|
||||
|
||||
returnIntent.putExtra(ActivityManageRule.intentNameActionParameter1, false);
|
||||
returnIntent.putExtra(ActivityManageRule.intentNameActionParameter2, param2Data);
|
||||
@@ -125,18 +134,34 @@ public class ActivityManageActionSetSystemSetting extends Activity
|
||||
}
|
||||
});
|
||||
|
||||
if(getIntent().hasExtra(ActivityManageRule.intentNameActionParameter2))
|
||||
if(getIntent().hasExtra(ActivityManageRule.intentNameActionParameter2))
|
||||
{
|
||||
// dataType, setting name, setting value
|
||||
String[] components = getIntent().getStringExtra(ActivityManageRule.intentNameActionParameter2).split(Action.actionParameter2Split);
|
||||
String[] components = getIntent().getStringExtra(ActivityManageRule.intentNameActionParameter2).split(Action.actionParameter2Split, -1);
|
||||
|
||||
int position = Miscellaneous.arraySearchIndexOf(dataTypes, components[0], false, true);
|
||||
|
||||
if(position >= 0)
|
||||
if(components.length == 4)
|
||||
{
|
||||
spinnerSettingDataType.setSelection(position);
|
||||
etSettingName.setText(components[1]);
|
||||
etSettingValue.setText(components[2]);
|
||||
int positionTarget = Miscellaneous.arraySearchIndexOf(targets, components[0], false, true);
|
||||
int positionDataType = Miscellaneous.arraySearchIndexOf(dataTypes, components[1], false, true);
|
||||
|
||||
if(positionDataType >= 0)
|
||||
{
|
||||
spinnerSettingTarget.setSelection(positionTarget);
|
||||
spinnerSettingDataType.setSelection(positionDataType);
|
||||
etSettingName.setText(components[2]);
|
||||
etSettingValue.setText(components[3]);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
int position = Miscellaneous.arraySearchIndexOf(dataTypes, components[0], false, true);
|
||||
|
||||
if (position >= 0)
|
||||
{
|
||||
spinnerSettingDataType.setSelection(position);
|
||||
etSettingName.setText(components[1]);
|
||||
etSettingValue.setText(components[2]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -677,6 +677,8 @@ public class ActivityPermissions extends Activity
|
||||
addToArrayListUnique(Manifest.permission.BLUETOOTH, requiredPermissions);
|
||||
addToArrayListUnique(Manifest.permission.ACCESS_NETWORK_STATE, requiredPermissions);
|
||||
addToArrayListUnique(Manifest.permission.WRITE_SETTINGS, requiredPermissions);
|
||||
if(Build.VERSION.SDK_INT >= 31)
|
||||
addToArrayListUnique(Manifest.permission.BLUETOOTH_CONNECT, requiredPermissions);
|
||||
break;
|
||||
case setDataConnection:
|
||||
addToArrayListUnique(Manifest.permission.WRITE_SETTINGS, requiredPermissions);
|
||||
@@ -732,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;
|
||||
@@ -796,7 +801,18 @@ public class ActivityPermissions extends Activity
|
||||
break;
|
||||
case setLocationService:
|
||||
case setSystemSetting:
|
||||
addToArrayListUnique(Manifest.permission.WRITE_SECURE_SETTINGS, requiredPermissions);
|
||||
String[] parts = action.getParameter2().split(Action.actionParameter2Split, -1);
|
||||
if(parts.length < 4)
|
||||
addToArrayListUnique(Manifest.permission.WRITE_SECURE_SETTINGS, requiredPermissions);
|
||||
else
|
||||
{
|
||||
if(parts[0].equals(ActivityManageActionSetSystemSetting.targets[0]))
|
||||
addToArrayListUnique(Manifest.permission.WRITE_SECURE_SETTINGS, requiredPermissions);
|
||||
else if(parts[0].equals(ActivityManageActionSetSystemSetting.targets[1]))
|
||||
addToArrayListUnique(Manifest.permission.WRITE_SETTINGS, requiredPermissions);
|
||||
else if(parts[0].equals(ActivityManageActionSetSystemSetting.targets[2]))
|
||||
addToArrayListUnique(Manifest.permission.WRITE_SECURE_SETTINGS, requiredPermissions);
|
||||
}
|
||||
break;
|
||||
case setScreenBrightness:
|
||||
addToArrayListUnique(Manifest.permission.WRITE_SETTINGS, requiredPermissions);
|
||||
@@ -810,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<>();
|
||||
|
||||
@@ -829,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<>();
|
||||
|
||||
@@ -848,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>();
|
||||
@@ -864,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)
|
||||
@@ -1023,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:
|
||||
@@ -1033,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.
|
||||
@@ -1051,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;
|
||||
|
||||
@@ -277,7 +277,7 @@ public class AutomationService extends Service implements OnInitListener
|
||||
|
||||
/*
|
||||
On normal phones the app is supposed to automatically restart in case of any problems.
|
||||
In the emulator we want it to stop to be able to better pinpoint the root cause.
|
||||
In the emulator we want it to stop to be able to better pinpoint the root cause of sudden stops.
|
||||
*/
|
||||
if(Miscellaneous.isAndroidEmulator())
|
||||
return START_NOT_STICKY;
|
||||
@@ -672,7 +672,11 @@ public class AutomationService extends Service implements OnInitListener
|
||||
lastRuleString = instance.getResources().getString(R.string.lastRule) + " n./a.";
|
||||
}
|
||||
|
||||
String textToDisplay = bodyText + " " + lastRuleString;
|
||||
String textToDisplay;
|
||||
if(bodyText.length() > 0)
|
||||
textToDisplay = bodyText + " " + lastRuleString;
|
||||
else
|
||||
textToDisplay = lastRuleString;
|
||||
|
||||
if(notificationBuilder == null)
|
||||
notificationBuilder = createServiceNotificationBuilder();
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -730,7 +730,7 @@ public class Trigger
|
||||
public boolean checkCalendarEvent(CalendarReceiver.CalendarEvent event, boolean ignoreActive)
|
||||
{
|
||||
String[] conditions = this.getTriggerParameter2().split(Trigger.triggerParameter2Split);
|
||||
List<CalendarReceiver.CalendarEvent> calendarEvents = CalendarReceiver.readCalendarEvents(AutomationService.getInstance(), true,false);
|
||||
// List<CalendarReceiver.CalendarEvent> calendarEvents = CalendarReceiver.readCalendarEvents(AutomationService.getInstance(), true,false);
|
||||
|
||||
/*
|
||||
0 = titleDir
|
||||
@@ -747,8 +747,8 @@ public class Trigger
|
||||
11 = calendars list
|
||||
*/
|
||||
|
||||
boolean isActive = getTriggerParameter();
|
||||
if (!ignoreActive && isActive != event.isCurrentlyActive())
|
||||
boolean shouldBeActive = getTriggerParameter();
|
||||
if (!ignoreActive && shouldBeActive != event.isCurrentlyActive())
|
||||
{
|
||||
Miscellaneous.logEvent("i", "CalendarCheck", "Event " + event.title + " has to be currently active: " + String.valueOf(triggerParameter) + ", but is required otherwise.", 5);
|
||||
return false;
|
||||
@@ -1243,7 +1243,7 @@ public class Trigger
|
||||
/*
|
||||
There is no easy event to tell when a tag has been disconnected again.
|
||||
*/
|
||||
if(getTriggerType().equals(Trigger_Enum.nfcTag))
|
||||
if(getTriggerType().equals(Trigger_Enum.nfcTag))
|
||||
return true;
|
||||
|
||||
if(getParentRule().getLastExecution() == null)
|
||||
@@ -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)
|
||||
|
||||
@@ -63,7 +63,7 @@ public class NfcReceiver
|
||||
{
|
||||
Miscellaneous.logEvent("i", "NFC", "ACTION_NDEF_DISCOVERED", 4);
|
||||
|
||||
getNfcAdapter(context);
|
||||
getNfcAdapter(context);
|
||||
|
||||
if(nfcAdapter == null) // if it's still null the device doesn't support NFC
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
@@ -44,7 +45,10 @@ public class TimeZoneListener extends BroadcastReceiver implements AutomationLis
|
||||
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 |
@@ -72,6 +72,22 @@
|
||||
|
||||
</TableRow>
|
||||
|
||||
<TableRow
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/target" />
|
||||
|
||||
<Spinner
|
||||
android:id="@+id/spinnerSettingTarget"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
</TableRow>
|
||||
|
||||
<TableRow
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
@@ -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>
|
||||
@@ -812,7 +812,7 @@
|
||||
<string name="noticeRestrictedPermissions">Wenn Sie eine der folgenden Berechtigungen nicht erteilen und eine Systemmeldung wie \"Eingeschränkte Berechtigung\" erhalten, müssen Sie zuerst zu den Android-Einstellungen und dann zu den Anwendungen gehen und Automatisierung auswählen. Nun sollten sich 3 Punkte in der oberen rechten Ecke befinden. Klicken Sie auf \"Eingeschränkte Einstellungen zulassen\". Danach sollte die erforderliche Erlaubnis erteilt werden können. Dies sollte nur für die APK-Version der App gelten, nicht für die von F-Droid oder dem Play Store.</string>
|
||||
<string name="setLocationService">Ortungsdienst festlegen</string>
|
||||
<string name="setLocationServiceCapital">Ortungsdienst einstellen</string>
|
||||
<string name="writeSecureSettingsNotice">Leider kann die Erlaubnis WRITE_SECURE_SETTINGS nicht direkt auf Ihrem Android-Gerät erteilt werden. Stattdessen müssen Sie Ihr Gerät an einen Computer anschließen und die Berechtigung über ADB erteilen. Klicken Sie hier, um zu erfahren, wie Sie es gewähren können: https://server47.de/automation/adb_hack.php</string>
|
||||
<string name="writeSecureSettingsNotice">Wenn Sie Global oder Secure als Ziel wählen, müssen Sie die Berechtigung WRITE_SECURE_SETTINGS erteilen. Leider kann diese Variante nicht direkt auf Ihrem Android-Gerät bereitgestellt werden. Stattdessen müssen Sie Ihr Gerät an einen Computer anschließen und die Berechtigung über ADB erteilen. Klicken Sie hier, um zu erfahren, wie Sie es gewähren können: <a href="https://server47.de/automation/adb_hack.php">https://server47.de/automation/adb_hack.php</a></string>
|
||||
<string name="actionSetLocationService">Ortungsdienst</string>
|
||||
<string name="triggerUrlVariableHint">Das Ergebnis dieser Anfrage wird in der Variablen last_trigger_url_result gespeichert, wenn Sie es von einer anderen Regel aus überprüfen möchten. Im Falle von HTTP-Fehlern wie 404 ist der Wert \"HTTP_ERROR\".</string>
|
||||
<string name="calendarEvent">Kalendertermin</string>
|
||||
@@ -887,4 +887,5 @@
|
||||
<string name="enterAvalue">Geben Sie einen Wert ein.</string>
|
||||
<string name="setSystemSettingCapital">Systemeinstellung setzen</string>
|
||||
<string name="examplesWriteSecureSettings">Ich führe keine Liste möglicher Einstellungen. Bitte finden Sie diese Einstellungen selbst. Siehe <a href="https://developer.android.com/reference/android/provider/Settings.Secure">hier</a> für einige (unvollständige) Beispiele.</string>
|
||||
<string name="httpParametersExplanation">Beginnt ein Parametername mit %1$s, während die Methode POST ist, wird er nicht wie die anderen Parameter (mit Schlüssel=Wert) übertragen, sondern als Hauptdaten übertragen. Wenn der Parameter mit 2 % endet, wird keine Codierung durchgeführt.</string>
|
||||
</resources>
|
||||
@@ -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>
|
||||
@@ -811,7 +811,7 @@
|
||||
<string name="noticeRestrictedPermissions">Si no le otorga a uno el siguiente permiso y un mensaje del sistema como \"Ajuste restringido\", primero debe ir a la configuración de Android, luego a las aplicaciones, elija Automatización. Ahora debería haber 3 puntos en la esquina superior derecha. Haga clic en \"Permitir configuraciones restringidas\". Después de eso, el permiso necesario debería poder otorgarse. Esto solo debería aplicarse a la versión APK de la aplicación, no a las de F-Droid o Play Store.</string>
|
||||
<string name="setLocationService">Encender/desactivar el servicio de ubicación</string>
|
||||
<string name="setLocationServiceCapital">Establecer el servicio de ubicación</string>
|
||||
<string name="writeSecureSettingsNotice">Desafortunadamente, el permiso WRITE_SECURE_SETTINGS no se puede otorgar directamente en su dispositivo Android. En su lugar, debe conectar su dispositivo a una computadora y otorgar el permiso a través de ADB. Haga clic aquí para saber cómo otorgarlo: https://server47.de/automation/adb_hack.php</string>
|
||||
<string name="writeSecureSettingsNotice">Si eliges Global o Seguro como objetivo, tendrás que conceder el permiso WRITE_SECURE_SETTINGS. Desafortunadamente, este no se puede entregar directamente en tu dispositivo Android. En su lugar, debe conectar su dispositivo a una computadora y otorgar el permiso a través de ADB. Haga clic aquí para saber cómo otorgarlo: <a href="https://server47.de/automation/adb_hack.php">https://server47.de/automation/adb_hack.php</a></string>
|
||||
<string name="actionSetLocationService">Servicio de localización</string>
|
||||
<string name="triggerUrlVariableHint">El resultado de esta solicitud se almacenará en la variable last_trigger_url_result si desea verificarlo desde otra regla. En caso de errores HTTP como 404, el valor será \"HTTP_ERROR\".</string>
|
||||
<string name="calendarEvent">Evento de calendario</string>
|
||||
@@ -886,4 +886,5 @@
|
||||
<string name="enterAvalue">Introduce un valor.</string>
|
||||
<string name="setSystemSettingCapital">Establecer configuración del sistema</string>
|
||||
<string name="examplesWriteSecureSettings">No llevo una lista de posibles configuraciones. Por favor, busca <a href="https://developer.android.com/reference/android/provider/Settings.Secure">esas</a> configuraciones por tu cuenta. Véase aquí algunos ejemplos (incompletos).</string>
|
||||
<string name="httpParametersExplanation">Si el nombre de algún parámetro comienza por %1$s mientras el método es POST, no se transmitirá como los otros parámetros (con clave=valor), sino que se transferirá como datos principales. Si el parámetro termina en %2$s, no se realizará ninguna codificación.</string>
|
||||
</resources>
|
||||
@@ -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>
|
||||
@@ -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 d’Android.</string>
|
||||
<string name="ifString">si</string>
|
||||
<string name="contactNotice">L’e-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">L’e-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>
|
||||
@@ -811,7 +811,7 @@
|
||||
<string name="noticeRestrictedPermissions">Si vous ne parvenez pas à accorder à l\'un d\'entre eux l\'autorisation suivante et un message système tel que « Autorisation restreinte », vous devez d\'abord accéder aux paramètres Android, puis aux applications, puis choisir Automatisation. Maintenant, il devrait y avoir 3 points dans le coin supérieur droit. Cliquez sur « Autoriser les paramètres restreints ». Après cela, l\'autorisation nécessaire devrait pouvoir être accordée. Cela ne devrait s\'appliquer qu\'à la version APK de l\'application, pas à celles de F-Droid ou du Play Store.</string>
|
||||
<string name="setLocationService">Définir le service de localisation</string>
|
||||
<string name="setLocationServiceCapital">Définir le service de localisation</string>
|
||||
<string name="writeSecureSettingsNotice">Malheureusement, l\'autorisation WRITE_SECURE_SETTINGS ne peut pas être donnée directement sur votre appareil Android. Au lieu de cela, vous devez connecter votre appareil à un ordinateur et accorder l\'autorisation via ADB. Cliquez ici pour savoir comment l\'accorder : https://server47.de/automation/adb_hack.php</string>
|
||||
<string name="writeSecureSettingsNotice">Si vous choisissez Global ou Sécurisé comme cible, vous devrez accorder la permission WRITE_SECURE_SETTINGS. Malheureusement, celle-ci ne peut pas être donnée directement sur votre appareil Android. Au lieu de cela, vous devez connecter votre appareil à un ordinateur et accorder l\'autorisation via ADB. Cliquez ici pour savoir comment l\'accorder: <a href="https://server47.de/automation/adb_hack.php">https://server47.de/automation/adb_hack.php</a></string>
|
||||
<string name="actionSetLocationService">Service de localisation</string>
|
||||
<string name="triggerUrlVariableHint">Le résultat de cette requête sera stocké dans la variable last_triggerurl_result si vous souhaitez le vérifier à partir d\'une autre règle. En cas d\'erreurs HTTP comme 404, la valeur sera « HTTP_ERROR ».</string>
|
||||
<string name="calendarEvent">Événement de calendrier</string>
|
||||
@@ -886,4 +886,5 @@
|
||||
<string name="far">loin</string>
|
||||
<string name="proximityText">La proximité se situe entre \"%1$s\" et \"%2$s\"</string>
|
||||
<string name="examplesWriteSecureSettings">Je ne tiens pas de liste des réglages possibles. Veuillez trouver ces réglages vous-même. Voir <a href="https://developer.android.com/reference/android/provider/Settings.Secure">ici</a> pour quelques exemples (incomplets).</string>
|
||||
<string name="httpParametersExplanation">Si un nom de paramètre commence par %1$s alors que la méthode est POST, il ne sera pas transmis comme les autres paramètres (avec clé=valeur), mais transféré comme données principales. Si le paramètre se termine par %2$s, aucun codage ne sera effectué.</string>
|
||||
</resources>
|
||||
|
||||
@@ -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>
|
||||
@@ -812,7 +812,7 @@
|
||||
<string name="noticeRestrictedPermissions">Se non riesci a concedere una delle seguenti autorizzazioni e un messaggio di sistema come \"Autorizzazione limitata\", devi prima andare alle impostazioni di Android, quindi alle applicazioni, scegli Automazione. Ora dovrebbero esserci 3 punti nell\'angolo in alto a destra. Fai clic su \"Consenti impostazioni limitate\". Dopodiché dovrebbe essere concessa l\'autorizzazione necessaria. Questo dovrebbe valere solo per la versione APK dell\'app, non per quelle di F-Droid o Play Store.</string>
|
||||
<string name="setLocationService">Impostare il servizio di localizzazione</string>
|
||||
<string name="setLocationServiceCapital">Impostare il servizio di localizzazione</string>
|
||||
<string name="writeSecureSettingsNotice">Purtroppo l\'autorizzazione WRITE_SECURE_SETTINGS non può essere data direttamente sul tuo dispositivo Android. Invece, devi collegare il tuo dispositivo a un computer e concedere l\'autorizzazione tramite ADB. Clicca qui per scoprire come concederlo: https://server47.de/automation/adb_hack.php</string>
|
||||
<string name="writeSecureSettingsNotice">Se scegli Global o Secure come bersaglio, dovrai concedere il permesso WRITE_SECURE_SETTINGS. Purtroppo questo non può essere fornito direttamente sul tuo dispositivo Android. Invece, devi collegare il tuo dispositivo a un computer e concedere l\'autorizzazione tramite ADB. Clicca qui per scoprire come concederlo: <a href="https://server47.de/automation/adb_hack.php">https://server47.de/automation/adb_hack.php</a></string>
|
||||
<string name="actionSetLocationService">Servizio di localizzazione</string>
|
||||
<string name="triggerUrlVariableHint">Il risultato di questa richiesta verrà memorizzato nella variabile last_trigger_url_result se si desidera controllarlo da un\'altra regola. In caso di errori HTTP come 404 il valore sarà \"HTTP_ERROR\".</string>
|
||||
<string name="calendarEvent">Evento del calendario</string>
|
||||
@@ -887,4 +887,5 @@
|
||||
<string name="uiThemeSummary">Il tema dell\'interfaccia grafica utente. Domanda necessaria.</string>
|
||||
<string name="proximity">Vicinanza</string>
|
||||
<string name="examplesWriteSecureSettings">Non tengo una lista di possibili impostazioni. Per favore, trova queste impostazioni da solo. Vedi <a href="https://developer.android.com/reference/android/provider/Settings.Secure">qui</a> per alcuni esempi (incompleti).</string>
|
||||
<string name="httpParametersExplanation">Se un nome di parametro inizia con %1$s mentre il metodo è POST, non verrà trasmesso come gli altri parametri (con chiave=valore), ma trasferito come dato principale. Se il parametro termina con %2$s, non verrà eseguita alcuna codifica.</string>
|
||||
</resources>
|
||||
|
||||
@@ -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>
|
||||
@@ -685,7 +685,7 @@
|
||||
<string name="unlocked">ontgrendeld</string>
|
||||
<string name="selectDesiredState">Selecteer de gewenste status</string>
|
||||
<string name="screenState">Schermstatus</string>
|
||||
<string name="featureCeasedToWorkLastWorkingAndroidVersion">Vanwege de oneindige wijsheid van Google is de laatste Android-versie waarvan bekend is dat deze functie werkt% 1 $ s. U kunt het configureren, maar het zal waarschijnlijk geen effect hebben.</string>
|
||||
<string name="featureCeasedToWorkLastWorkingAndroidVersion">Vanwege de oneindige wijsheid van Google is de laatste Android-versie waarvan bekend is dat deze functie werkt %1$s. U kunt het configureren, maar het zal waarschijnlijk geen effect hebben.</string>
|
||||
<string name="actionMediaControl">Het afspelen van media regelen</string>
|
||||
<string name="selectCommand">Opdracht Selecteren</string>
|
||||
<string name="playPause">schakelaar afspelen/pauzeren</string>
|
||||
@@ -810,7 +810,7 @@
|
||||
<string name="noticeRestrictedPermissions">Als u er niet in slaagt om een van de volgende machtigingen en een systeembericht zoals \"Beperkte toestemming\" te verlenen, moet u eerst naar Android-instellingen gaan en vervolgens naar toepassingen en Automatisering kiezen. Nu zouden er 3 stippen in de rechterbovenhoek moeten zijn. Klik op \"Beperkte instellingen toestaan\". Daarna moet de benodigde toestemming aanvaardbaar zijn. Dit zou alleen van toepassing moeten zijn op de APK-versie van de app, niet die van F-Droid of Play Store.</string>
|
||||
<string name="setLocationService">Locatieservice instellen</string>
|
||||
<string name="setLocationServiceCapital">Locatieservice instellen</string>
|
||||
<string name="writeSecureSettingsNotice">Helaas kan de toestemming WRITE_SECURE_SETTINGS niet rechtstreeks op uw Android-apparaat worden gegeven. In plaats daarvan moet u uw apparaat op een computer aansluiten en de toestemming verlenen via ADB. Klik hier om te weten te komen hoe u het kunt toekennen: https://server47.de/automation/adb_hack.php</string>
|
||||
<string name="writeSecureSettingsNotice">Als je Global of Secure als doelwit kiest, moet je toestemming geven WRITE_SECURE_SETTINGS. Helaas kan deze niet direct op je Android-apparaat worden gegeven. In plaats daarvan moet u uw apparaat op een computer aansluiten en de toestemming verlenen via ADB. Klik hier om te weten te komen hoe u het kunt toekennen: <a href="https://server47.de/automation/adb_hack.php">https://server47.de/automation/adb_hack.php</a></string>
|
||||
<string name="actionSetLocationService">Locatie service</string>
|
||||
<string name="triggerUrlVariableHint">Het resultaat van dit verzoek wordt opgeslagen in de variabele last_trigger_url_result als u het vanuit een andere regel wilt controleren. In het geval van HTTP-fouten zoals 404 is de waarde \"HTTP_ERROR\".</string>
|
||||
<string name="calendarEvent">Agenda-afspraak</string>
|
||||
@@ -885,4 +885,5 @@
|
||||
<string name="enterAvalue">Voer een waarde in.</string>
|
||||
<string name="setSystemSettingCapital">Setsysteeminstelling</string>
|
||||
<string name="examplesWriteSecureSettings">Ik houd geen lijst bij met mogelijke instellingen. Zoek die instellingen zelf op. Zie <a href="https://developer.android.com/reference/android/provider/Settings.Secure">hier</a> voor enkele (onvolledige) voorbeelden.</string>
|
||||
<string name="httpParametersExplanation">Als een parameternaam begint met %1$s terwijl de methode POST is, wordt deze niet verzonden zoals de andere parameters (met sleutel=waarde), maar als hoofddata overgedragen. Als de parameter eindigt op %2 s, wordt er geen codering uitgevoerd.</string>
|
||||
</resources>
|
||||
|
||||
@@ -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>
|
||||
@@ -909,7 +909,7 @@
|
||||
<string name="noticeRestrictedPermissions">Jeśli nie uda Ci się przyznać następującego uprawnienia i komunikatu systemowego, takiego jak \"Ograniczone uprawnienia\", musisz najpierw przejść do ustawień Androida, a następnie aplikacji, wybrać Automatyzacja. Teraz w prawym górnym rogu powinny znajdować się 3 kropki. Kliknij \"Zezwól na ustawienia z ograniczeniami\". Następnie powinno być możliwe udzielenie niezbędnego pozwolenia. Powinno to dotyczyć tylko wersji APK aplikacji, a nie tych z F-Droid lub Sklepu Play.</string>
|
||||
<string name="setLocationService">Ustawianie usługi lokalizacyjnej</string>
|
||||
<string name="setLocationServiceCapital">Ustawianie usługi lokalizacyjnej</string>
|
||||
<string name="writeSecureSettingsNotice">Niestety WRITE_SECURE_SETTINGS uprawnień nie można nadać bezpośrednio na urządzeniu z Androidem. Zamiast tego musisz podłączyć urządzenie do komputera i przyznać uprawnienia przez ADB. Kliknij tutaj, aby dowiedzieć się, jak go przyznać: https://server47.de/automation/adb_hack.php</string>
|
||||
<string name="writeSecureSettingsNotice">Jeśli wybierzesz Globalne lub Bezpieczne jako cel, musisz przyzwolić WRITE_SECURE_SETTINGS. Niestety tego nie można podać bezpośrednio na urządzeniu z Androidem. Zamiast tego musisz podłączyć urządzenie do komputera i przyznać uprawnienia przez ADB. Kliknij tutaj, aby dowiedzieć się, jak go przyznać: <a href="https://server47.de/automation/adb_hack.php">https://server47.de/automation/adb_hack.php</a></string>
|
||||
<string name="actionSetLocationService">Usługa lokalizacyjna</string>
|
||||
<string name="triggerUrlVariableHint">Wynik tego żądania zostanie zapisany w zmiennej last_trigger_url_result, jeśli chcesz go sprawdzić z innej reguły. W przypadku błędów HTTP, takich jak 404, wartość będzie wynosić \"HTTP_ERROR\".</string>
|
||||
<string name="calendarEvent">Wydarzenie w kalendarzu</string>
|
||||
@@ -984,4 +984,5 @@
|
||||
<string name="enterAvalue">Wprowadź wartość.</string>
|
||||
<string name="setSystemSettingCapital">Ustawienia systemu zbiorów</string>
|
||||
<string name="examplesWriteSecureSettings">Nie prowadzę listy możliwych ustawień wyboru. Proszę, znajdź te ustawienia samodzielnie. Zobacz <a href="https://developer.android.com/reference/android/provider/Settings.Secure">tutaj</a> dla niektórych (niepełnych) przykładów.</string>
|
||||
<string name="httpParametersExplanation">Jeśli nazwa parametru zaczyna się od %1$s, a metoda to POST, nie zostanie przesłana jak pozostałe parametry (z klucz=wartością), lecz przeniesiona jako dane główne. Jeśli parametr kończy się na %2$s, nie zostanie wykonane kodowanie.</string>
|
||||
</resources>
|
||||
|
||||
@@ -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>
|
||||
@@ -869,7 +869,7 @@
|
||||
<string name="noticeRestrictedPermissions">Если вы не можете предоставить одно из следующих разрешений и системное сообщение типа «Ограниченное разрешение», вам нужно сначала перейти в настройки Android, затем в приложения, выбрать «Автоматизация». Теперь в правом верхнем углу должно быть 3 точки. Нажмите «Разрешить ограниченные настройки». После этого необходимо получить необходимое разрешение. Это должно относиться только к APK-версии приложения, а не к версии из F-Droid или Play Store.</string>
|
||||
<string name="setLocationService">Настройка службы определения местоположения</string>
|
||||
<string name="setLocationServiceCapital">Настройка службы определения местоположения</string>
|
||||
<string name="writeSecureSettingsNotice">К сожалению, разрешение WRITE_SECURE_SETTINGS не может быть дано непосредственно на вашем Android-устройстве. Вместо этого вам нужно подключить устройство к компьютеру и предоставить разрешение через ADB. Нажмите здесь, чтобы узнать, как его получить: https://server47.de/automation/adb_hack.php</string>
|
||||
<string name="writeSecureSettingsNotice">Если вы выберете Global или Secure в качестве цели, вам потребуется предоставить разрешение WRITE_SECURE_SETTINGS. К сожалению, этот вариант нельзя налично использовать на вашем Android-устройстве. Вместо этого вам нужно подключить устройство к компьютеру и предоставить разрешение через ADB. Нажмите здесь, чтобы узнать, как его получить: <a href="https://server47.de/automation/adb_hack.php">https://server47.de/automation/adb_hack.php</a></string>
|
||||
<string name="actionSetLocationService">Служба определения местоположения</string>
|
||||
<string name="triggerUrlVariableHint">Результат этого запроса будет сохранен в переменной last_trigger_url_result если вы захотите проверить его из другого правила. В случае ошибок HTTP, таких как 404, значение будет \"HTTP_ERROR\".</string>
|
||||
<string name="calendarEvent">Событие календаря</string>
|
||||
@@ -944,4 +944,5 @@
|
||||
<string name="enterAvalue">Введите значение.</string>
|
||||
<string name="setSystemSettingCapital">Настройка системы множества</string>
|
||||
<string name="examplesWriteSecureSettings">Я не веду список возможных настроек. Пожалуйста, найдите эти настройки сами. См. <a href="https://developer.android.com/reference/android/provider/Settings.Secure">здесь</a> некоторые (неполные) примеры.</string>
|
||||
<string name="httpParametersExplanation">Если имя любого параметра начинается с %1$s, а метод — POST, оно не будет передаваться как другие параметры (с ключом =значением), а передаваться как основные данные. Если параметр заканчивается на %2$s, кодирование не выполняется.</string>
|
||||
</resources>
|
||||
|
||||
@@ -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>
|
||||
@@ -810,7 +810,7 @@
|
||||
<string name="noticeRestrictedPermissions">如果您未能授予以下权限和\"受限权限\"之类的系统消息,则需要先转到 Android 设置,然后转到应用程序,选择自动化。现在右上角应该有 3 个点。单击\"允许受限设置\"。之后,应该可以授予必要的权限。这应该仅适用于应用的 APK 版本,而不适用于 F-Droid 或 Play 商店中的版本。</string>
|
||||
<string name="setLocationService">设置位置服务</string>
|
||||
<string name="setLocationServiceCapital">设置位置服务</string>
|
||||
<string name="writeSecureSettingsNotice">不幸的是,WRITE_SECURE_SETTINGS无法直接在您的 Android 设备上授予权限。相反,您需要将设备连接到计算机并通过 ADB 授予权限。单击此处了解如何授予它: https://server47.de/automation/adb_hack.php</string>
|
||||
<string name="writeSecureSettingsNotice">如果你选择全球或安全作为目标,你需要授予WRITE_SECURE_SETTINGS权限。遗憾的是,这个服务不能直接在你的安卓设备上提供。 相反,您需要将设备连接到计算机并通过 ADB 授予权限。单击此处了解如何授予它: <a href="https://server47.de/automation/adb_hack.php">https://server47.de/automation/adb_hack.php</a></string>
|
||||
<string name="actionSetLocationService">定位服务</string>
|
||||
<string name="triggerUrlVariableHint">此请求的结果将存储在变量 last_triggerurl_result 中,如果您希望从其他规则中检查它。如果出现像 404 这样的 HTTP 错误,则该值将为\"HTTP_ERROR\"。</string>
|
||||
<string name="calendarEvent">日历事件</string>
|
||||
@@ -885,4 +885,5 @@
|
||||
<string name="enterAvalue">输入一个数值。</string>
|
||||
<string name="setSystemSettingCapital">集合系统设置</string>
|
||||
<string name="examplesWriteSecureSettings">我没有列出可能的设置。请自己找到这些设置。请参见(此处)一些 <a href="https://developer.android.com/reference/android/provider/Settings.Secure">不完整的</a> 示例。</string>
|
||||
<string name="httpParametersExplanation">如果参数名以 %1$s 开头且方法为 POST,则不会像其他参数(key=value)那样传输,而是作为主数据传输。如果参数以 %2$s 结尾,则不会进行编码。</string>
|
||||
</resources>
|
||||
@@ -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>
|
||||
@@ -903,7 +903,7 @@
|
||||
<string name="noticeRestrictedPermissions">If you fail to grant one the following permission and a system message like \"Restricted permission\" you need to go to Android settings first, then applications, choose Automation. Now there should be 3 dots in the upper right corner. Click \"Allow restricted settings\". After that the necessary permission should be grant-able. This should only apply to the APK version of the app, not the ones from F-Droid or Play Store.</string>
|
||||
<string name="setLocationService">set location service</string>
|
||||
<string name="setLocationServiceCapital">Set location service</string>
|
||||
<string name="writeSecureSettingsNotice">Unfortunately the permission WRITE_SECURE_SETTINGS cannot be given directly on your Android device. Instead you need to connect your device to a computer and grant the permission via ADB. Click here to find out how to grant it: https://server47.de/automation/adb_hack.php</string>
|
||||
<string name="writeSecureSettingsNotice">If you choose Global or Secure as target you will need to grant the permission WRITE_SECURE_SETTINGS. Unfortunately this one cannot be given directly on your Android device. Instead, you need to connect your device to a computer and grant the permission via ADB. Click here to find out how to grant it: <a href="https://server47.de/automation/adb_hack.php">https://server47.de/automation/adb_hack.php</a></string>
|
||||
<string name="actionSetLocationService">Location service</string>
|
||||
<string name="LOCATION_MODE_SENSOR_ONLY" translatable="false">SENSOR_ONLY</string>
|
||||
<string name="LOCATION_MODE_BATTERY_SAVING" translatable="false">BATTERY_SAVING</string>
|
||||
@@ -977,5 +977,6 @@
|
||||
<string name="enterAvalue">Enter a value.</string>
|
||||
<string name="setSystemSettingCapital">Set system setting</string>
|
||||
<string name="examplesWriteSecureSettings">I do not keep a list of possible settings. Please find those settings on your own. See <a href="https://developer.android.com/reference/android/provider/Settings.Secure">here</a> for some (incomplete) examples.</string>
|
||||
<string name="httpParametersExplanation">If any parameter name starts with %1$s while method is POST, it will not be transmitted like the other parameters (with key=value), but transferred as main data.\nIf the parameter ends with %2$s, no encoding will be performed.</string>
|
||||
<string name="httpParametersExplanation">If any parameter name starts with %1$s while method is POST, it will not be transmitted like the other parameters (with key=value), but transferred as main data. If the parameter ends with %2$s, no encoding will be performed.</string>
|
||||
<string name="target">Target</string>
|
||||
</resources>
|
||||
+3
-3
@@ -2,10 +2,10 @@
|
||||
buildscript {
|
||||
repositories {
|
||||
google()
|
||||
jcenter()
|
||||
mavenCentral()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:7.2.2'
|
||||
classpath 'com.android.tools.build:gradle:8.13.2'
|
||||
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
// in the individual module build.gradle files
|
||||
@@ -15,7 +15,7 @@ buildscript {
|
||||
allprojects {
|
||||
repositories {
|
||||
google()
|
||||
jcenter()
|
||||
mavenCentral()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
* Hinzugefügt: Weitere Optionen für die Trigger-URL-Aktion hinzugefügt.
|
||||
* Hinzugefügt: Gradle und Bibliotheken aktualisiert.
|
||||
@@ -0,0 +1 @@
|
||||
* Geändert: MinSdk auf 19 erhöht, benötigt mindestens Android 4.4
|
||||
@@ -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
|
||||
@@ -1 +1,2 @@
|
||||
* Added: Added further options to the trigger url action.
|
||||
* Added: Gradle and libraries updated.
|
||||
@@ -0,0 +1 @@
|
||||
* Changed: Raised minSdk to 19, requiring at minimum Android 4.4
|
||||
@@ -0,0 +1,6 @@
|
||||
* Added option to choose between Global, System and Secure for set settings
|
||||
* 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: Check for non-decimal number in some input fields
|
||||
@@ -0,0 +1 @@
|
||||
* Added: Triggers and actions can now be cloned
|
||||
@@ -0,0 +1,2 @@
|
||||
* Añadido: Se añadieron más opciones a la acción de disparar URL.
|
||||
* Añadido: Gradle y bibliotecas actualizadas.
|
||||
@@ -0,0 +1 @@
|
||||
* Cambiado: Subido minSdk a 19, requiriendo al mínimo Android 4.4
|
||||
@@ -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,2 @@
|
||||
* Ajouté : Ajout d'options supplémentaires à l'action de déclenchement de l'URL.
|
||||
* Ajouté : Gradle et bibliothèques mises à jour.
|
||||
@@ -0,0 +1 @@
|
||||
* Modifié : Portée du minSdk à 19, nécessitant au minimum Android 4.4
|
||||
@@ -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,2 @@
|
||||
* Aggiunto: Aggiunte ulteriori opzioni all'azione di trigger URL.
|
||||
* Aggiunto: Gradle e biblioteche aggiornate.
|
||||
@@ -0,0 +1 @@
|
||||
* Modificato: Aumentato il minSdk a 19, richiedendo almeno Android 4.4
|
||||
@@ -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,2 @@
|
||||
* Toegevoegd: Extra opties toegevoegd aan de trigger-urlactie.
|
||||
* Toegevoegd: Gradle en bibliotheken bijgewerkt.
|
||||
@@ -0,0 +1 @@
|
||||
* Gewijzigd: minSdk verhoogd naar 19, minimaal Android 4.4 vereist
|
||||
@@ -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,2 @@
|
||||
* Dodano: Dodano dodatkowe opcje akcji trigger url.
|
||||
* Dodano: Zaktualizowano Gradle i biblioteki.
|
||||
@@ -0,0 +1 @@
|
||||
* Zmieniono: Podniesiono minSdk do 19, wymagając co najmniej Androida 4.4
|
||||
@@ -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,2 @@
|
||||
* Добавлено: добавлены дополнительные опции к действию триггера URL.
|
||||
* Добавлено: обновлены Gradle и библиотеки.
|
||||
@@ -0,0 +1 @@
|
||||
* Изменено: minSdk повышен до 19, требуется минимум Android 4.4
|
||||
@@ -0,0 +1,6 @@
|
||||
* Добавлена опция выбора между Global, System и Secure для определённых настроек
|
||||
* Исправлено: сбой при открытии приложения через уведомление запускающегося сервиса
|
||||
* Исправлено: сбой при запуске сервиса, а иконка показа сервиса была деактивирована в настройках приложения
|
||||
* Исправлено: разрешение на включение или выключение Bluetooth не было запрошено.
|
||||
* Исправлено: другое приложение, запущенное/остановленное, нельзя было добавить, когда язык интерфейса был голландским.
|
||||
* Исправлено: проверка недесятичного числа в некоторых входных полях
|
||||
@@ -0,0 +1,2 @@
|
||||
* 新增:为触发URL动作增加了更多选项。
|
||||
* 新增:Gradle及图书馆更新。
|
||||
@@ -0,0 +1 @@
|
||||
* 更改:将 minSDK 提升至 19,至少要求 Android 4.4
|
||||
@@ -0,0 +1,6 @@
|
||||
* 新增了全局、系统和安全三种设置选项
|
||||
* 已修复:通过运行服务通知打开应用时崩溃
|
||||
* 已修复:启动服务时崩溃,应用设置中显示服务图标被停用
|
||||
* 已修复:未请求"蓝牙连接"权限来开关蓝牙。
|
||||
* 已修复:当用户界面语言为荷兰语时,无法添加另一个启动/停止的应用。
|
||||
* 固定:检查某些输入字段中的非十进制数字
|
||||
@@ -17,3 +17,6 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
|
||||
android.useAndroidX=true
|
||||
# Automatically convert third-party libraries to use AndroidX
|
||||
android.enableJetifier=true
|
||||
android.defaults.buildfeatures.buildconfig=true
|
||||
android.nonTransitiveRClass=false
|
||||
android.nonFinalResIds=false
|
||||
+1
-1
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
|
||||
|
||||
Reference in New Issue
Block a user