6 Commits

Author SHA1 Message Date
ccf87dbef0 Action to change system settings 2026-01-06 16:51:13 +01:00
b510811b18 Action to change system settings 2026-01-05 18:00:46 +01:00
c1619e67ec Action to change system settings 2026-01-02 17:15:25 +01:00
1c22a3386b Action to change system settings 2026-01-01 17:17:58 +01:00
b83b6568ca Minor changes 2025-12-31 15:54:25 +01:00
4a90b36f6a Many small fixes 2025-12-28 15:27:50 +01:00
30 changed files with 681 additions and 82 deletions

View File

@@ -112,16 +112,6 @@
android:name="google_analytics_ssaid_collection_enabled" android:name="google_analytics_ssaid_collection_enabled"
android:value="false" /> android:value="false" />
<activity
android:name=".ActivityMainScreen"
android:label="@string/app_name"></activity>
<activity
android:name=".ActivityManagePoi"
android:label="@string/app_name"></activity>
<activity
android:name=".ActivitySettings"
android:label="@string/app_name"></activity>
<service <service
android:name=".AutomationService" android:name=".AutomationService"
android:exported="false" android:exported="false"
@@ -166,6 +156,9 @@
</intent-filter> </intent-filter>
</receiver> </receiver>
<activity android:name=".ActivityMainScreen" android:label="@string/app_name" />
<activity android:name=".ActivityManagePoi" android:label="@string/app_name" />
<activity android:name=".ActivitySettings" android:label="@string/app_name" />
<activity android:name=".ActivityManageRule" /> <activity android:name=".ActivityManageRule" />
<activity android:name=".ActivityManageActionTriggerUrl" /> <activity android:name=".ActivityManageActionTriggerUrl" />
<activity android:name=".ActivityDisplayLongMessage" /> <activity android:name=".ActivityDisplayLongMessage" />
@@ -223,7 +216,6 @@
</intent-filter> </intent-filter>
--> -->
<!-- <!--
<meta-data <meta-data
android:name="android.nfc.action.TECH_DISCOVERED" android:name="android.nfc.action.TECH_DISCOVERED"
@@ -236,16 +228,16 @@
<activity android:name=".ActivityManageActionStartActivity" /> <activity android:name=".ActivityManageActionStartActivity" />
<activity android:name=".ActivityManageTriggerNfc" /> <activity android:name=".ActivityManageTriggerNfc" />
<activity android:name=".ActivityManageActionSpeakText" /> <activity android:name=".ActivityManageActionSpeakText" />
<activity android:name=".ActivityManageActionPlaySound" />
<activity android:name=".ActivityManageTriggerBluetooth" /> <activity android:name=".ActivityManageTriggerBluetooth" />
<activity android:name=".ActivityMainProfiles" /> <activity android:name=".ActivityMainProfiles" />
<activity android:name=".ActivityManageProfile" /> <activity android:name=".ActivityManageProfile" />
<activity android:name=".ActivityManageTriggerWifi" /> <activity android:name=".ActivityManageTriggerWifi" />
<activity android:name=".ActivityVolumeTest" /> <activity android:name=".ActivityVolumeTest" />
<activity android:name=".ActivityPermissions"></activity> <activity android:name=".ActivityPermissions" />
<activity android:name=".ActivityManageTriggerNotification" /> <activity android:name=".ActivityManageTriggerNotification" />
<activity android:name=".ActivityManageTriggerCalendar" /> <activity android:name=".ActivityManageTriggerCalendar" />
<activity android:name=".ActivityManageTriggerProximity" /> <activity android:name=".ActivityManageTriggerProximity" />
<activity android:name=".ActivityManageActionSetSystemSetting" />
<service <service
android:name=".receivers.NotificationListener" android:name=".receivers.NotificationListener"
@@ -258,7 +250,6 @@
</service> </service>
<activity android:name=".ActivityPermissions" />
<!-- https://developer.android.com/about/versions/pie/android-9.0-changes-28#apache-p--> <!-- https://developer.android.com/about/versions/pie/android-9.0-changes-28#apache-p-->
<uses-library android:name="org.apache.http.legacy" android:required="false"/> <uses-library android:name="org.apache.http.legacy" android:required="false"/>

View File

@@ -514,8 +514,6 @@ public class Rule implements Comparable<Rule>
protected boolean activateInternally(AutomationService automationService) protected boolean activateInternally(AutomationService automationService)
{ {
boolean isActuallyToggleable = isActuallyToggable(); boolean isActuallyToggleable = isActuallyToggable();
// boolean notLastActive = getLastActivatedRule() == null || !getLastActivatedRule().equals(Rule.this);
boolean doToggle = ruleToggle && isActuallyToggleable; boolean doToggle = ruleToggle && isActuallyToggleable;
String message; String message;
@@ -556,7 +554,8 @@ public class Rule implements Comparable<Rule>
{ {
try try
{ {
Rule.this.getActionSet().get(i).run(automationService, doToggle); Miscellaneous.logEvent("i", "RuleExecution", "Running action " + Rule.this.getActionSet().get(i).toStringShort() + " of rule " + Rule.this.getName(), 5);
Rule.this.getActionSet().get(i).run(automationService, doToggle);
} }
catch(Exception e) catch(Exception e)
{ {
@@ -593,10 +592,7 @@ public class Rule implements Comparable<Rule>
public void activate(AutomationService automationService, boolean force) public void activate(AutomationService automationService, boolean force)
{ {
ActivateRuleTask task = new ActivateRuleTask(); ActivateRuleTask task = new ActivateRuleTask();
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, automationService, force);
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, automationService, force);
else
task.execute(automationService, force);
} }
public static ArrayList<Rule> findRuleCandidates(Trigger.Trigger_Enum triggerType) public static ArrayList<Rule> findRuleCandidates(Trigger.Trigger_Enum triggerType)

View File

@@ -110,16 +110,6 @@
android:name="google_analytics_ssaid_collection_enabled" android:name="google_analytics_ssaid_collection_enabled"
android:value="false" /> android:value="false" />
<activity
android:name=".ActivityMainScreen"
android:label="@string/app_name"></activity>
<activity
android:name=".ActivityManagePoi"
android:label="@string/app_name"></activity>
<activity
android:name=".ActivitySettings"
android:label="@string/app_name"></activity>
<service <service
android:name=".AutomationService" android:name=".AutomationService"
android:exported="false" android:exported="false"
@@ -164,6 +154,9 @@
</intent-filter> </intent-filter>
</receiver> </receiver>
<activity android:name=".ActivityMainScreen" android:label="@string/app_name" />
<activity android:name=".ActivityManagePoi" android:label="@string/app_name" />
<activity android:name=".ActivitySettings" android:label="@string/app_name" />
<activity android:name=".ActivityManageRule" /> <activity android:name=".ActivityManageRule" />
<activity android:name=".ActivityManageActionTriggerUrl" /> <activity android:name=".ActivityManageActionTriggerUrl" />
<activity android:name=".ActivityDisplayLongMessage" /> <activity android:name=".ActivityDisplayLongMessage" />
@@ -221,7 +214,6 @@
</intent-filter> </intent-filter>
--> -->
<!-- <!--
<meta-data <meta-data
android:name="android.nfc.action.TECH_DISCOVERED" android:name="android.nfc.action.TECH_DISCOVERED"
@@ -234,16 +226,16 @@
<activity android:name=".ActivityManageActionStartActivity" /> <activity android:name=".ActivityManageActionStartActivity" />
<activity android:name=".ActivityManageTriggerNfc" /> <activity android:name=".ActivityManageTriggerNfc" />
<activity android:name=".ActivityManageActionSpeakText" /> <activity android:name=".ActivityManageActionSpeakText" />
<activity android:name=".ActivityManageActionPlaySound" />
<activity android:name=".ActivityManageTriggerBluetooth" /> <activity android:name=".ActivityManageTriggerBluetooth" />
<activity android:name=".ActivityMainProfiles" /> <activity android:name=".ActivityMainProfiles" />
<activity android:name=".ActivityManageProfile" /> <activity android:name=".ActivityManageProfile" />
<activity android:name=".ActivityManageTriggerWifi" /> <activity android:name=".ActivityManageTriggerWifi" />
<activity android:name=".ActivityVolumeTest" /> <activity android:name=".ActivityVolumeTest" />
<activity android:name=".ActivityPermissions"></activity> <activity android:name=".ActivityPermissions" />
<activity android:name=".ActivityManageTriggerNotification" /> <activity android:name=".ActivityManageTriggerNotification" />
<activity android:name=".ActivityManageTriggerCalendar" /> <activity android:name=".ActivityManageTriggerCalendar" />
<activity android:name=".ActivityManageTriggerProximity" /> <activity android:name=".ActivityManageTriggerProximity" />
<activity android:name=".ActivityManageActionSetSystemSetting" />
<service <service
android:name=".receivers.NotificationListener" android:name=".receivers.NotificationListener"
@@ -256,7 +248,6 @@
</service> </service>
<activity android:name=".ActivityPermissions" />
<!-- https://developer.android.com/about/versions/pie/android-9.0-changes-28#apache-p--> <!-- https://developer.android.com/about/versions/pie/android-9.0-changes-28#apache-p-->
<uses-library android:name="org.apache.http.legacy" android:required="false"/> <uses-library android:name="org.apache.http.legacy" android:required="false"/>

View File

@@ -487,8 +487,6 @@ public class Rule implements Comparable<Rule>
protected boolean activateInternally(AutomationService automationService) protected boolean activateInternally(AutomationService automationService)
{ {
boolean isActuallyToggleable = isActuallyToggable(); boolean isActuallyToggleable = isActuallyToggable();
// boolean notLastActive = getLastActivatedRule() == null || !getLastActivatedRule().equals(Rule.this);
boolean doToggle = ruleToggle && isActuallyToggleable; boolean doToggle = ruleToggle && isActuallyToggleable;
String message; String message;
@@ -529,6 +527,7 @@ public class Rule implements Comparable<Rule>
{ {
try try
{ {
Miscellaneous.logEvent("i", "RuleExecution", "Running action " + Rule.this.getActionSet().get(i).toStringShort() + " of rule " + Rule.this.getName(), 5);
Rule.this.getActionSet().get(i).run(automationService, doToggle); Rule.this.getActionSet().get(i).run(automationService, doToggle);
} }
catch(Exception e) catch(Exception e)
@@ -566,10 +565,7 @@ public class Rule implements Comparable<Rule>
public void activate(AutomationService automationService, boolean force) public void activate(AutomationService automationService, boolean force)
{ {
ActivateRuleTask task = new ActivateRuleTask(); ActivateRuleTask task = new ActivateRuleTask();
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, automationService, force);
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, automationService, force);
else
task.execute(automationService, force);
} }
public static ArrayList<Rule> findRuleCandidates(Trigger.Trigger_Enum triggerType) public static ArrayList<Rule> findRuleCandidates(Trigger.Trigger_Enum triggerType)

View File

@@ -94,21 +94,11 @@
android:name="google_analytics_ssaid_collection_enabled" android:name="google_analytics_ssaid_collection_enabled"
android:value="false" /> android:value="false" />
<activity
android:name=".ActivityMainScreen"
android:label="@string/app_name"></activity>
<activity
android:name=".ActivityManagePoi"
android:label="@string/app_name"></activity>
<activity
android:name=".ActivitySettings"
android:label="@string/app_name"></activity>
<service <service
android:name=".AutomationService" android:name=".AutomationService"
android:exported="false" android:exported="false"
android:label="@string/app_name" android:label="@string/app_name"
android:foregroundServiceType="specialUse"> android:foregroundServiceType="specialUse" >
<property <property
android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE" android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE"
android:value="Automating things on the device" /> android:value="Automating things on the device" />
@@ -154,6 +144,9 @@
</intent-filter> </intent-filter>
</receiver> </receiver>
<activity android:name=".ActivityMainScreen" android:label="@string/app_name" />
<activity android:name=".ActivityManagePoi" android:label="@string/app_name" />
<activity android:name=".ActivitySettings" android:label="@string/app_name" />
<activity android:name=".ActivityManageRule" /> <activity android:name=".ActivityManageRule" />
<activity android:name=".ActivityManageActionTriggerUrl" /> <activity android:name=".ActivityManageActionTriggerUrl" />
<activity android:name=".ActivityDisplayLongMessage" /> <activity android:name=".ActivityDisplayLongMessage" />
@@ -210,7 +203,6 @@
</intent-filter> </intent-filter>
--> -->
<!-- <!--
<meta-data <meta-data
android:name="android.nfc.action.TECH_DISCOVERED" android:name="android.nfc.action.TECH_DISCOVERED"
@@ -228,10 +220,11 @@
<activity android:name=".ActivityManageProfile" /> <activity android:name=".ActivityManageProfile" />
<activity android:name=".ActivityManageTriggerWifi" /> <activity android:name=".ActivityManageTriggerWifi" />
<activity android:name=".ActivityVolumeTest" /> <activity android:name=".ActivityVolumeTest" />
<activity android:name=".ActivityPermissions"></activity> <activity android:name=".ActivityPermissions" />
<activity android:name=".ActivityManageTriggerNotification" /> <activity android:name=".ActivityManageTriggerNotification" />
<activity android:name=".ActivityManageTriggerCalendar" /> <activity android:name=".ActivityManageTriggerCalendar" />
<activity android:name=".ActivityManageTriggerProximity" /> <activity android:name=".ActivityManageTriggerProximity" />
<activity android:name=".ActivityManageActionSetSystemSetting" />
<service <service
android:name=".receivers.NotificationListener" android:name=".receivers.NotificationListener"

View File

@@ -514,8 +514,6 @@ public class Rule implements Comparable<Rule>
protected boolean activateInternally(AutomationService automationService) protected boolean activateInternally(AutomationService automationService)
{ {
boolean isActuallyToggleable = isActuallyToggable(); boolean isActuallyToggleable = isActuallyToggable();
// boolean notLastActive = getLastActivatedRule() == null || !getLastActivatedRule().equals(Rule.this);
boolean doToggle = ruleToggle && isActuallyToggleable; boolean doToggle = ruleToggle && isActuallyToggleable;
String message; String message;
@@ -556,6 +554,7 @@ public class Rule implements Comparable<Rule>
{ {
try try
{ {
Miscellaneous.logEvent("i", "RuleExecution", "Running action " + Rule.this.getActionSet().get(i).toStringShort() + " of rule " + Rule.this.getName(), 5);
Rule.this.getActionSet().get(i).run(automationService, doToggle); Rule.this.getActionSet().get(i).run(automationService, doToggle);
} }
catch(Exception e) catch(Exception e)
@@ -593,10 +592,7 @@ public class Rule implements Comparable<Rule>
public void activate(AutomationService automationService, boolean force) public void activate(AutomationService automationService, boolean force)
{ {
ActivateRuleTask task = new ActivateRuleTask(); ActivateRuleTask task = new ActivateRuleTask();
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, automationService, force);
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, automationService, force);
else
task.execute(automationService, force);
} }
public static ArrayList<Rule> findRuleCandidates(Trigger.Trigger_Enum triggerType) public static ArrayList<Rule> findRuleCandidates(Trigger.Trigger_Enum triggerType)

View File

@@ -58,7 +58,8 @@ public class Action
copyToClipboard, copyToClipboard,
setLocationService, setLocationService,
sendTextMessage, sendTextMessage,
takeScreenshot; takeScreenshot,
setSystemSetting;
public String getFullName(Context context) public String getFullName(Context context)
{ {
@@ -130,6 +131,8 @@ public class Action
return context.getResources().getString(R.string.takeScreenshot); return context.getResources().getString(R.string.takeScreenshot);
case setLocationService: case setLocationService:
return context.getResources().getString(R.string.setLocationServiceCapital); return context.getResources().getString(R.string.setLocationServiceCapital);
case setSystemSetting:
return context.getResources().getString(R.string.setSystemSettingCapital);
default: default:
return "Unknown"; return "Unknown";
} }
@@ -493,7 +496,7 @@ public class Action
&& &&
!action.toString().equals("turnUsbTetheringOff") !action.toString().equals("turnUsbTetheringOff")
) // exclusion for deprecated types ) // exclusion for deprecated types
actionTypesList.add(action.getFullName(context)); actionTypesList.add(action.getFullName(context));
} }
return (String[])actionTypesList.toArray(new String[actionTypesList.size()]); return (String[])actionTypesList.toArray(new String[actionTypesList.size()]);
@@ -635,6 +638,10 @@ public class Action
case setLocationService: case setLocationService:
Actions.setLocationService(Integer.parseInt(this.getParameter2()), AutomationService.getInstance()); Actions.setLocationService(Integer.parseInt(this.getParameter2()), AutomationService.getInstance());
break; break;
case setSystemSetting:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1)
Actions.setSystemSetting(this.getParameter2(), AutomationService.getInstance());
break;
default: default:
Miscellaneous.logEvent("w", "Action", context.getResources().getString(R.string.unknownActionSpecified), 3); Miscellaneous.logEvent("w", "Action", context.getResources().getString(R.string.unknownActionSpecified), 3);
break; break;

View File

@@ -12,6 +12,7 @@ import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothProfile; import android.bluetooth.BluetoothProfile;
import android.content.ActivityNotFoundException; import android.content.ActivityNotFoundException;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.media.AudioManager; import android.media.AudioManager;
@@ -250,6 +251,32 @@ public class Actions
} }
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
public static boolean setSystemSetting(String parameter2, AutomationService instance)
{
Miscellaneous.logEvent("i", "Variable", "Setting system setting: " + parameter2, 4);
boolean result = false;
ContentResolver cr = instance.getContentResolver();
//"String", "Long", "Int", "Float" };
String[] parts = parameter2.split(Action.actionParameter2Split);
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]));
Miscellaneous.logEvent("i", "Variable", "Result of system setting change: " + String.valueOf(result), 4);
return result;
}
public static class WifiStuff public static class WifiStuff
{ {
public static Boolean setWifi(Context context, Boolean desiredState, String parameter2, boolean toggleActionIfPossible) public static Boolean setWifi(Context context, Boolean desiredState, String parameter2, boolean toggleActionIfPossible)
@@ -1777,7 +1804,7 @@ public class Actions
} }
catch (Exception e) catch (Exception e)
{ {
Miscellaneous.logEvent("e", "setData", "Error changing network type: " + Log.getStackTraceString(e), 2); Miscellaneous.logEvent("e", "setData", "Error setting data connection: " + Log.getStackTraceString(e), 2);
return false; return false;
} }
} }

View File

@@ -0,0 +1,157 @@
package com.jens.automation2;
import android.Manifest;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.InputType;
import android.text.method.LinkMovementMethod;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
public class ActivityManageActionSetSystemSetting extends Activity
{
Spinner spinnerSettingDataType;
EditText etSettingName, etSettingValue;
Button bSaveSetSystemSetting;
TextView tvSetSystemSettingExamples, tvSetSystemSettingNoticeWriteSecureSettings;
ArrayAdapter<String> settingDataTypeSpinnerAdapter;
protected final static String[] dataTypes = { "String", "Long", "Int", "Float" };
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
this.setContentView(R.layout.activity_manage_action_set_system_setting);
spinnerSettingDataType = (Spinner) findViewById(R.id.spinnerSettingDataType);
etSettingName = (EditText)findViewById(R.id.etSettingName);
etSettingValue = (EditText)findViewById(R.id.etSettingValue);
bSaveSetSystemSetting = (Button)findViewById(R.id.bSaveSetSystemSetting);
tvSetSystemSettingExamples = (TextView)findViewById(R.id.tvSetSystemSettingExamples);
tvSetSystemSettingNoticeWriteSecureSettings = (TextView)findViewById(R.id.tvSetSystemSettingNoticeWriteSecureSettings);
settingDataTypeSpinnerAdapter = new ArrayAdapter<String>(this, R.layout.text_view_for_poi_listview_mediumtextsize, dataTypes);
spinnerSettingDataType.setAdapter(settingDataTypeSpinnerAdapter);
settingDataTypeSpinnerAdapter.notifyDataSetChanged();
tvSetSystemSettingExamples.setMovementMethod(LinkMovementMethod.getInstance());
if(ActivityPermissions.havePermission(Manifest.permission.WRITE_SECURE_SETTINGS, ActivityManageActionSetSystemSetting.this))
tvSetSystemSettingNoticeWriteSecureSettings.setVisibility(View.GONE);
else
tvSetSystemSettingNoticeWriteSecureSettings.setVisibility(View.VISIBLE);
spinnerSettingDataType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l)
{
if(dataTypes[i].equalsIgnoreCase("String"))
etSettingValue.setInputType(InputType.TYPE_CLASS_TEXT);
else if(dataTypes[i].equalsIgnoreCase("Float"))
etSettingValue.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);
else
etSettingValue.setInputType(InputType.TYPE_CLASS_NUMBER);
}
@Override
public void onNothingSelected(AdapterView<?> adapterView)
{
}
});
bSaveSetSystemSetting.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
if(etSettingName.getText().toString().isEmpty())
{
Toast.makeText(getBaseContext(), getResources().getString(R.string.enterAname), Toast.LENGTH_LONG).show();
return;
}
if(etSettingValue.getText().toString().isEmpty())
{
Toast.makeText(getBaseContext(), getResources().getString(R.string.enterAvalue), Toast.LENGTH_LONG).show();
return;
}
else
{
String selectedDataType = dataTypes[spinnerSettingDataType.getSelectedItemPosition()];
if(
selectedDataType.equalsIgnoreCase("Int")
||
selectedDataType.equalsIgnoreCase("Long")
)
{
if(Miscellaneous.isNumericDecimal(etSettingValue.getText().toString()) || !Miscellaneous.isNumeric(etSettingValue.getText().toString()))
{
Toast.makeText(ActivityManageActionSetSystemSetting.this, getResources().getString(R.string.enter_a_number), Toast.LENGTH_LONG).show();
return;
}
}
else if(selectedDataType.equalsIgnoreCase("Float"))
{
if(!Miscellaneous.isNumeric(etSettingValue.getText().toString()))
{
Toast.makeText(ActivityManageActionSetSystemSetting.this, getResources().getString(R.string.enter_a_number), Toast.LENGTH_LONG).show();
return;
}
}
}
Intent returnIntent = new Intent();
String param2Data = dataTypes[spinnerSettingDataType.getSelectedItemPosition()] + Action.actionParameter2Split + etSettingName.getText().toString() + Action.actionParameter2Split + etSettingValue.getText().toString();
returnIntent.putExtra(ActivityManageRule.intentNameActionParameter1, false);
returnIntent.putExtra(ActivityManageRule.intentNameActionParameter2, param2Data);
setResult(RESULT_OK, returnIntent);
finish();
}
});
if(getIntent().hasExtra(ActivityManageRule.intentNameActionParameter2))
{
// dataType, setting name, setting value
String[] components = getIntent().getStringExtra(ActivityManageRule.intentNameActionParameter2).split(Action.actionParameter2Split);
int position = Miscellaneous.arraySearchIndexOf(dataTypes, components[0], false, true);
if(position >= 0)
{
spinnerSettingDataType.setSelection(position);
etSettingName.setText(components[1]);
etSettingValue.setText(components[2]);
}
}
}
private void updateListView()
{
Miscellaneous.logEvent("i", "ListView", "Attempting to update spinnerSettingDataType", 4);
try
{
if(spinnerSettingDataType.getAdapter() == null)
spinnerSettingDataType.setAdapter(settingDataTypeSpinnerAdapter);
settingDataTypeSpinnerAdapter.notifyDataSetChanged();
}
catch(NullPointerException e)
{}
}
}

View File

@@ -96,8 +96,6 @@ public class ActivityManageActionStartActivity extends Activity
spinnerParameterType.setAdapter(intentTypeSpinnerAdapter); spinnerParameterType.setAdapter(intentTypeSpinnerAdapter);
intentTypeSpinnerAdapter.notifyDataSetChanged(); intentTypeSpinnerAdapter.notifyDataSetChanged();
// etClassName.setEnabled(false);
intentPairAdapter = new ArrayAdapter<String>(this, R.layout.text_view_for_poi_listview_mediumtextsize, intentPairList); intentPairAdapter = new ArrayAdapter<String>(this, R.layout.text_view_for_poi_listview_mediumtextsize, intentPairList);
bSelectApp.setOnClickListener(new OnClickListener() bSelectApp.setOnClickListener(new OnClickListener()
{ {

View File

@@ -46,9 +46,6 @@ public class ActivityManageActionTriggerUrl extends Activity
public static final String methodGet = "GET"; public static final String methodGet = "GET";
public static final String methodPost = "POST"; public static final String methodPost = "POST";
// public static boolean edit = false;
// public static Action resultingAction = null;
@Override @Override
protected void onCreate(Bundle savedInstanceState) protected void onCreate(Bundle savedInstanceState)
{ {

View File

@@ -36,14 +36,14 @@ public class ActivityManageActionWifi extends Activity
Intent input = getIntent(); Intent input = getIntent();
if(input.hasExtra(ActivityManageRule.intentNameActionParameter1)) if(input.hasExtra(ActivityManageRule.intentNameActionParameter1))
{
rbActionWifiOn.setChecked(input.getBooleanExtra(ActivityManageRule.intentNameActionParameter1, true)); rbActionWifiOn.setChecked(input.getBooleanExtra(ActivityManageRule.intentNameActionParameter1, true));
rbActionWifiOff.setChecked(!input.getBooleanExtra(ActivityManageRule.intentNameActionParameter1, true));
}
if(input.hasExtra(ActivityManageRule.intentNameActionParameter2)) if(input.hasExtra(ActivityManageRule.intentNameActionParameter2))
chkWifiRunAsRoot.setChecked(Boolean.parseBoolean(input.getStringExtra(ActivityManageRule.intentNameActionParameter2))); chkWifiRunAsRoot.setChecked(Boolean.parseBoolean(input.getStringExtra(ActivityManageRule.intentNameActionParameter2)));
// if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)
// Miscellaneous.messageBox(getResources().getString(R.string.app_name), getResources().getString(R.string.android10WifiToggleNotice), ActivityManageActionWifi.this).show();
if(getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.Q) if(getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.Q)
tvWifiExplanation1.setVisibility(View.VISIBLE); tvWifiExplanation1.setVisibility(View.VISIBLE);
else else

View File

@@ -149,6 +149,8 @@ public class ActivityManageRule extends Activity
final static int requestCodeTriggerChargingEdit = 836; final static int requestCodeTriggerChargingEdit = 836;
final static int requestCodeTriggerProximityAdd = 837; final static int requestCodeTriggerProximityAdd = 837;
final static int requestCodeTriggerProximityEdit = 838; final static int requestCodeTriggerProximityEdit = 838;
final static int requestCodeActionSetSystemSettingAdd = 839;
final static int requestCodeActionSetSystemSettingEdit = 840;
public static ActivityManageRule getInstance() public static ActivityManageRule getInstance()
{ {
@@ -166,7 +168,6 @@ public class ActivityManageRule extends Activity
Miscellaneous.setUiTheme(this); Miscellaneous.setUiTheme(this);
setContentView(R.layout.activity_manage_specific_rule); setContentView(R.layout.activity_manage_specific_rule);
context = this; context = this;
instance = this; instance = this;
@@ -511,6 +512,12 @@ public class ActivityManageRule extends Activity
actionSetLocationServiceIntent.putExtra(intentNameActionParameter2, a.getParameter2()); actionSetLocationServiceIntent.putExtra(intentNameActionParameter2, a.getParameter2());
startActivityForResult(actionSetLocationServiceIntent, requestCodeActionSetLocationServiceEdit); startActivityForResult(actionSetLocationServiceIntent, requestCodeActionSetLocationServiceEdit);
break; break;
case setSystemSetting:
Intent actionSetSystemSettingIntent = new Intent(context, ActivityManageActionSetSystemSetting.class);
// actionSetSystemSettingIntent.putExtra(intentNameActionParameter1, a.getParameter1());
actionSetSystemSettingIntent.putExtra(intentNameActionParameter2, a.getParameter2());
startActivityForResult(actionSetSystemSettingIntent, requestCodeActionSetSystemSettingEdit);
break;
default: default:
Miscellaneous.logEvent("w", "Edit action", "Editing of action type " + a.getAction().toString() + " not implemented, yet.", 4); Miscellaneous.logEvent("w", "Edit action", "Editing of action type " + a.getAction().toString() + " not implemented, yet.", 4);
break; break;
@@ -2218,6 +2225,32 @@ public class ActivityManageRule extends Activity
this.refreshActionList(); this.refreshActionList();
} }
} }
else if(requestCode == requestCodeActionSetSystemSettingAdd)
{
if(resultCode == RESULT_OK)
{
newAction.setParentRule(ruleToEdit);
// newAction.setParameter1(data.getBooleanExtra(intentNameActionParameter1, false));
newAction.setParameter2(data.getStringExtra(intentNameActionParameter2));
ruleToEdit.getActionSet().add(newAction);
this.refreshActionList();
}
}
else if(requestCode == requestCodeActionSetSystemSettingEdit)
{
if(resultCode == RESULT_OK)
{
ruleToEdit.getActionSet().get(editIndex).setParentRule(ruleToEdit);
// ruleToEdit.getActionSet().get(editIndex).setParameter1(data.getBooleanExtra(intentNameActionParameter1, false));
if(data.hasExtra(intentNameActionParameter2))
{
ruleToEdit.getActionSet().get(editIndex).setParameter2(data.getStringExtra(intentNameActionParameter2));
}
this.refreshActionList();
}
}
} }
protected AlertDialog getActionTypeDialog() protected AlertDialog getActionTypeDialog()
@@ -2303,6 +2336,9 @@ public class ActivityManageRule extends Activity
if(ActivityPermissions.isServiceAvailable(Miscellaneous.getAnyContext(), "MyAccessibilityService")) if(ActivityPermissions.isServiceAvailable(Miscellaneous.getAnyContext(), "MyAccessibilityService"))
items.add(new Item(typesLong[i].toString(), R.drawable.copier)); items.add(new Item(typesLong[i].toString(), R.drawable.copier));
} }
else if(types[i].toString().equals(Action_Enum.setSystemSetting.toString()))
{ items.add(new Item(typesLong[i].toString(), R.drawable.gears_small));
}
else else
items.add(new Item(typesLong[i].toString(), R.drawable.placeholder)); items.add(new Item(typesLong[i].toString(), R.drawable.placeholder));
} }
@@ -2541,6 +2577,12 @@ public class ActivityManageRule extends Activity
Intent intent = new Intent(ActivityManageRule.this, ActivityManageActionLocationService.class); Intent intent = new Intent(ActivityManageRule.this, ActivityManageActionLocationService.class);
startActivityForResult(intent, requestCodeActionSetLocationServiceAdd); startActivityForResult(intent, requestCodeActionSetLocationServiceAdd);
} }
else if(actionTypes[which].toString().equals(Action_Enum.setSystemSetting.toString()))
{
newAction.setAction(Action_Enum.setSystemSetting);
Intent intent = new Intent(ActivityManageRule.this, ActivityManageActionSetSystemSetting.class);
startActivityForResult(intent, requestCodeActionSetSystemSettingAdd);
}
} }
}); });

View File

@@ -281,6 +281,19 @@ public class ActivityPermissions extends Activity
return false; return false;
} }
public static int getAmountOfRulesWhichLackPermissions(Context context)
{
int rulesWhichLackPermissions = 0;
for(Rule r : Rule.getRuleCollection())
{
if(!ActivityPermissions.havePermissionsForRule(r, context))
rulesWhichLackPermissions++;
}
return rulesWhichLackPermissions;
}
public static boolean havePermission(String s, Context context) public static boolean havePermission(String s, Context context)
{ {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
@@ -536,6 +549,8 @@ public class ActivityPermissions extends Activity
addToArrayListUnique(Manifest.permission.BLUETOOTH_ADMIN, requiredPermissions); addToArrayListUnique(Manifest.permission.BLUETOOTH_ADMIN, requiredPermissions);
addToArrayListUnique(Manifest.permission.BLUETOOTH, requiredPermissions); addToArrayListUnique(Manifest.permission.BLUETOOTH, requiredPermissions);
addToArrayListUnique(Manifest.permission.ACCESS_NETWORK_STATE, requiredPermissions); addToArrayListUnique(Manifest.permission.ACCESS_NETWORK_STATE, requiredPermissions);
if(Build.VERSION.SDK_INT >= 31)
addToArrayListUnique(Manifest.permission.BLUETOOTH_CONNECT, requiredPermissions);
break; break;
case charging: case charging:
// addToArrayListUnique(Manifest.permission.READ_PHONE_STATE, requiredPermissions); // addToArrayListUnique(Manifest.permission.READ_PHONE_STATE, requiredPermissions);
@@ -780,6 +795,7 @@ public class ActivityPermissions extends Activity
addToArrayListUnique(Manifest.permission.BIND_ACCESSIBILITY_SERVICE, requiredPermissions); addToArrayListUnique(Manifest.permission.BIND_ACCESSIBILITY_SERVICE, requiredPermissions);
break; break;
case setLocationService: case setLocationService:
case setSystemSetting:
addToArrayListUnique(Manifest.permission.WRITE_SECURE_SETTINGS, requiredPermissions); addToArrayListUnique(Manifest.permission.WRITE_SECURE_SETTINGS, requiredPermissions);
break; break;
case setScreenBrightness: case setScreenBrightness:
@@ -911,12 +927,8 @@ public class ActivityPermissions extends Activity
usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName));
break; break;
case Manifest.permission.BLUETOOTH_ADMIN: case Manifest.permission.BLUETOOTH_ADMIN:
for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.bluetoothConnection))
usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName));
for(String ruleName : getRulesUsing(Action.Action_Enum.setBluetooth))
usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName));
break;
case Manifest.permission.BLUETOOTH: case Manifest.permission.BLUETOOTH:
case Manifest.permission.BLUETOOTH_CONNECT:
for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.bluetoothConnection)) for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.bluetoothConnection))
usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName));
for(String ruleName : getRulesUsing(Action.Action_Enum.setBluetooth)) for(String ruleName : getRulesUsing(Action.Action_Enum.setBluetooth))
@@ -1027,6 +1039,8 @@ public class ActivityPermissions extends Activity
case Manifest.permission.WRITE_SECURE_SETTINGS: case Manifest.permission.WRITE_SECURE_SETTINGS:
for(String ruleName : getRulesUsing(Action.Action_Enum.setLocationService)) for(String ruleName : getRulesUsing(Action.Action_Enum.setLocationService))
usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName));
for(String ruleName : getRulesUsing(Action.Action_Enum.setSystemSetting))
usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName));
break; break;
case Manifest.permission.READ_CALENDAR: case Manifest.permission.READ_CALENDAR:
for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.calendarEvent)) for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.calendarEvent))

View File

@@ -180,6 +180,17 @@ public class AutomationService extends Service implements OnInitListener
Rule.getRuleCollection().size() == 0 Rule.getRuleCollection().size() == 0
) )
{ {
if(
Rule.getRuleCollection().size() > 0
&&
Rule.getRuleCollection().size() == ActivityPermissions.getAmountOfRulesWhichLackPermissions(Miscellaneous.getAnyContext())
)
{
Miscellaneous.logEvent("w", "AutomationService", "Don't have complete permissions for any defined rule. Not starting service.", 1);
Toast.makeText(context, context.getResources().getString(R.string.serviceWontStartPermissions), Toast.LENGTH_LONG).show();
return false;
}
if (startAtBoot) if (startAtBoot)
{ {
/* /*

View File

@@ -2077,6 +2077,50 @@ public class Miscellaneous extends Service
return formattedDate; return formattedDate;
} }
public static int arraySearchIndexOf(String[] haystack, String needle, boolean caseSensitive, boolean matchFullLine)
{
if(matchFullLine)
{
if(caseSensitive)
{
for (int i = 0; i < haystack.length; i++)
{
if (haystack[i].equals(needle))
return i;
}
}
else
{
for (int i = 0; i < haystack.length; i++)
{
if (haystack[i].toLowerCase().equals(needle.toLowerCase()))
return i;
}
}
}
else
{
if(caseSensitive)
{
for (int i = 0; i < haystack.length; i++)
{
if (haystack[i].contains(needle))
return i;
}
}
else
{
for (int i = 0; i < haystack.length; i++)
{
if (haystack[i].toLowerCase().contains(needle.toLowerCase()))
return i;
}
}
}
return -1;
}
public static boolean arraySearch(String[] haystack, String needle, boolean caseSensitive, boolean matchFullLine) public static boolean arraySearch(String[] haystack, String needle, boolean caseSensitive, boolean matchFullLine)
{ {
if(matchFullLine) if(matchFullLine)

View File

@@ -628,7 +628,7 @@ public class Profile implements Comparable<Profile>
{ {
Miscellaneous.logEvent("i", "Profile", "Setting audible selection to " + String.valueOf(audibleSelection ? 1 : 0), 4); Miscellaneous.logEvent("i", "Profile", "Setting audible selection to " + String.valueOf(audibleSelection ? 1 : 0), 4);
if(audibleSelection) if(audibleSelection)
android.provider.Settings.System.putInt(context.getContentResolver(), android.provider.Settings.System.SOUND_EFFECTS_ENABLED, 1); // enable android.provider.Settings.System.putInt(context.getContentResolver(), android.provider.Settings.System.SOUND_EFFECTS_ENABLED, 1); // enable
else else
android.provider.Settings.System.putInt(context.getContentResolver(), android.provider.Settings.System.SOUND_EFFECTS_ENABLED, 0); // dissable android.provider.Settings.System.putInt(context.getContentResolver(), android.provider.Settings.System.SOUND_EFFECTS_ENABLED, 0); // dissable

View File

@@ -7,6 +7,7 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.util.Log; import android.util.Log;
import android.widget.Toast;
import com.jens.automation2.ActivityPermissions; import com.jens.automation2.ActivityPermissions;
import com.jens.automation2.AutomationService; import com.jens.automation2.AutomationService;
@@ -149,8 +150,6 @@ public class BluetoothReceiver extends BroadcastReceiver implements AutomationLi
{ {
return lhs.getName().compareTo(rhs.getName()); return lhs.getName().compareTo(rhs.getName());
} }
;
}); });
} }
catch(NullPointerException e) catch(NullPointerException e)
@@ -159,6 +158,12 @@ public class BluetoothReceiver extends BroadcastReceiver implements AutomationLi
returnArray = new BluetoothDevice[] {}; returnArray = new BluetoothDevice[] {};
} }
catch(SecurityException se)
{
Toast.makeText(Miscellaneous.getAnyContext(), Miscellaneous.getAnyContext().getResources().getString(R.string.permissionRequiredBluetooth), Toast.LENGTH_SHORT).show();
returnArray = new BluetoothDevice[] {};
}
return returnArray; return returnArray;
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

@@ -0,0 +1,155 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_margin="@dimen/default_margin" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TableLayout
android:id="@+id/tlTriggerUrlAuthentication"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone">
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/username" />
<EditText
android:id="@+id/etTriggerUrlUsername"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:enabled="false"
android:inputType="text" >
</EditText>
</TableRow>
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/password" />
<EditText
android:id="@+id/etTriggerUrlPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:enabled="false"
android:inputType="textPassword" >
</EditText>
</TableRow>
</TableLayout>
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:stretchColumns="1"
android:shrinkColumns="1" >
<TableRow
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_span="2"
android:textSize="25dp"
android:textStyle="bold"
android:layout_marginBottom="@dimen/default_margin"
android:text="@string/addParameters" />
</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/type" />
<Spinner
android:id="@+id/spinnerSettingDataType"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</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/settingName" />
<EditText
android:id="@+id/etSettingName"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/settingValue" />
<EditText
android:id="@+id/etSettingValue"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</TableRow>
</TableLayout>
<ImageView
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_margin="10dp"
android:background="#aa000000" />
<TextView
android:id="@+id/tvSetSystemSettingExamples"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/default_margin"
android:text="@string/examplesWriteSecureSettings" />
<TextView
android:id="@+id/tvSetSystemSettingNoticeWriteSecureSettings"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/default_margin"
android:text="@string/writeSecureSettingsNotice" />
<Button
android:id="@+id/bSaveSetSystemSetting"
android:layout_marginTop="15dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/save" />
</LinearLayout>
</ScrollView>

View File

@@ -855,6 +855,7 @@
<string name="notCharging">nicht laden</string> <string name="notCharging">nicht laden</string>
<string name="triggerChargingComment">Der Typ wird nur ausgewertet, wenn das Gerät aufgeladen wird. Wenn \"Nicht laden\" ausgewählt ist, wird es bei jedem vorherigen Ladetyp ausgelöst. Wenn Sie dies auswerten möchten, sollten Sie die Verwendung der Variablen trigger/action in Betracht ziehen.</string> <string name="triggerChargingComment">Der Typ wird nur ausgewertet, wenn das Gerät aufgeladen wird. Wenn \"Nicht laden\" ausgewählt ist, wird es bei jedem vorherigen Ladetyp ausgelöst. Wenn Sie dies auswerten möchten, sollten Sie die Verwendung der Variablen trigger/action in Betracht ziehen.</string>
<string name="helpTextProfiles">Ein Profil ist eine Sammlung von Einstellungen für Klingeltöne, Lautstärke und andere audiobezogene Einstellungen, die Sie über Regeln oder manuell anwenden können.\\n\\nEs ist auch möglich, das zuletzt aktivierte Profil als Auslöser abzufragen. Im Normalfall wird nur abgefragt, ob das Profil das zuletzt aktivierte war (unabhängig davon, ob in der Zwischenzeit bestimmte Audioeinstellungen geändert wurden). Sie können aber auch die einzelnen Einstellungen vergleichen lassen.</string> <string name="helpTextProfiles">Ein Profil ist eine Sammlung von Einstellungen für Klingeltöne, Lautstärke und andere audiobezogene Einstellungen, die Sie über Regeln oder manuell anwenden können.\\n\\nEs ist auch möglich, das zuletzt aktivierte Profil als Auslöser abzufragen. Im Normalfall wird nur abgefragt, ob das Profil das zuletzt aktivierte war (unabhängig davon, ob in der Zwischenzeit bestimmte Audioeinstellungen geändert wurden). Sie können aber auch die einzelnen Einstellungen vergleichen lassen.</string>
<string name="serviceWontStartPermissions">Für keine Regel liegen vollständige Berechtigungen vor. Der Dienst kann nicht starten.</string>
<string name="serviceWontStartNoActivatedRules">Es sind keine aktivierten Regeln definiert. Der Dienst wird nicht gestartet.</string> <string name="serviceWontStartNoActivatedRules">Es sind keine aktivierten Regeln definiert. Der Dienst wird nicht gestartet.</string>
<string name="importChooseFolderNotice">Versuchen Sie im folgenden Dialog nicht, bestimmte Dateien auszuwählen, sondern wählen Sie den Ordner aus, in dem sich die Automation-Sicherungsdateien befinden. Wenn die Schaltfläche \"Auswählen\" deaktiviert ist, haben Sie eine Android-Einschränkung gefunden. Versuchen Sie in diesem Fall zuerst, die Dateien in ein Unterverzeichnis zu verschieben.</string> <string name="importChooseFolderNotice">Versuchen Sie im folgenden Dialog nicht, bestimmte Dateien auszuwählen, sondern wählen Sie den Ordner aus, in dem sich die Automation-Sicherungsdateien befinden. Wenn die Schaltfläche \"Auswählen\" deaktiviert ist, haben Sie eine Android-Einschränkung gefunden. Versuchen Sie in diesem Fall zuerst, die Dateien in ein Unterverzeichnis zu verschieben.</string>
<string name="matches">stimmt überein</string> <string name="matches">stimmt überein</string>
@@ -866,4 +867,24 @@
<string name="version143StartOtherActivityHint">In Version 1.8.2 war es notwendig, die Art und Weise, wie Aktionen zum Starten anderer Programme gespeichert werden, zu überarbeiten. Die Kompatibilität konnte nicht sichergestellt werden. Bitte überprüfen und bearbeiten Sie Ihre Aktionen zum Starten anderer Aktivitäten, um sicherzustellen, dass sie noch funktionieren.</string> <string name="version143StartOtherActivityHint">In Version 1.8.2 war es notwendig, die Art und Weise, wie Aktionen zum Starten anderer Programme gespeichert werden, zu überarbeiten. Die Kompatibilität konnte nicht sichergestellt werden. Bitte überprüfen und bearbeiten Sie Ihre Aktionen zum Starten anderer Aktivitäten, um sicherzustellen, dass sie noch funktionieren.</string>
<string name="disable">Deaktivieren</string> <string name="disable">Deaktivieren</string>
<string name="enable">Aktivieren</string> <string name="enable">Aktivieren</string>
<string name="uiThemeClassic">Klassisches UI-Thema</string>
<string name="uiThemeCompat">Materialdesign-UI-Thema</string>
<string name="permissionForegroundServiceTypeSpecialUseRequired">Berechtigung FOREGROUND_SERVICE_TYPE_SPECIAL_USE ist erforderlich, um zu starten.</string>
<string name="uiTheme">Thema der grafischen Oberfläche</string>
<string name="uiThemeSummary">Das Thema der grafischen Oberfläche. Anwendungs-Neustart ist notwendig.</string>
<string name="proximity">Nähe</string>
<string name="testArea">Testfeld</string>
<string name="testAreaProximityComment">Nähern Sie sich Ihrem Gerät, um zu sehen, wie es sich verhält.</string>
<string name="deviceDoesntHaveProximitySensor">Ihr Gerät scheint über keinen Näherungssensor zu verfügen.</string>
<string name="proximitySensorHint">Der Näherungssensor verhält sich auf jedem Gerät anders. Auf manchen gibt er nur nah nah oder entfernt als binäre Werte zurück. Auf anderen liefert er granularere Werte. Sie können diesen Tester verwenden, um zu sehen, wie er sich auf Ihrem Gerät verhält.</string>
<string name="close">nah</string>
<string name="far">entfernt</string>
<string name="proximityText">Nähe ist zwischen \"%1$s\" und \"%2$s\"</string>
<string name="pleaseWait">Bitte warten.</string>
<string name="permissionRequiredBluetooth">Bluetooth Berechtigung ist notwendig, um diese Regel zu editieren. Beantragen Sie die Berechtigung vom Hauptbildschirm aus.</string>
<string name="settingName">Einstellungs-Name</string>
<string name="settingValue">Einstellungs-Wert</string>
<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>
</resources> </resources>

View File

@@ -854,6 +854,7 @@
<string name="notCharging">no cargando</string> <string name="notCharging">no cargando</string>
<string name="triggerChargingComment">El tipo solo se evaluará si el dispositivo se está cargando. Si se elige no cargar, se disparará en cualquier tipo de carga anterior. Si desea evaluar eso, considere la posibilidad de usar las variables trigger/action.</string> <string name="triggerChargingComment">El tipo solo se evaluará si el dispositivo se está cargando. Si se elige no cargar, se disparará en cualquier tipo de carga anterior. Si desea evaluar eso, considere la posibilidad de usar las variables trigger/action.</string>
<string name="helpTextProfiles">Un perfil es una colección de ajustes para tonos de llamada, volúmenes y otros ajustes relacionados con el audio que puede aplicar desde reglas o aplicarlo manualmente.\\n\\nTambién es posible consultar el último perfil activado como disparador. En el caso normal, solo consultará si el perfil fue el último activado (independientemente de si se han cambiado configuraciones de audio específicas mientras tanto). Pero también puede comparar los ajustes individuales.</string> <string name="helpTextProfiles">Un perfil es una colección de ajustes para tonos de llamada, volúmenes y otros ajustes relacionados con el audio que puede aplicar desde reglas o aplicarlo manualmente.\\n\\nTambién es posible consultar el último perfil activado como disparador. En el caso normal, solo consultará si el perfil fue el último activado (independientemente de si se han cambiado configuraciones de audio específicas mientras tanto). Pero también puede comparar los ajustes individuales.</string>
<string name="serviceWontStartPermissions">No tengo permisos completos para ninguna regla definida. El servicio no empieza.</string>
<string name="serviceWontStartNoActivatedRules">No se han definido reglas activadas. El servicio no se inicia.</string> <string name="serviceWontStartNoActivatedRules">No se han definido reglas activadas. El servicio no se inicia.</string>
<string name="importChooseFolderNotice">En el siguiente diálogo, no intente seleccionar archivos específicos, sino que elija la carpeta en la que residen los archivos de copia de seguridad de Automation. Si el botón Elegir está desactivado, ha encontrado una limitación de Android. En ese caso, intente mover los archivos a un subdirectorio primero.</string> <string name="importChooseFolderNotice">En el siguiente diálogo, no intente seleccionar archivos específicos, sino que elija la carpeta en la que residen los archivos de copia de seguridad de Automation. Si el botón Elegir está desactivado, ha encontrado una limitación de Android. En ese caso, intente mover los archivos a un subdirectorio primero.</string>
<string name="matches">coincide</string> <string name="matches">coincide</string>
@@ -865,4 +866,24 @@
<string name="version143StartOtherActivityHint">En la versión 1.8.2 fue necesario revisar la forma en que se guardaban las acciones para iniciar otros programas. No se pudo garantizar la compatibilidad. Compruebe y edite sus acciones de inicio de otras actividades para asegurarse de que siguen funcionando.</string> <string name="version143StartOtherActivityHint">En la versión 1.8.2 fue necesario revisar la forma en que se guardaban las acciones para iniciar otros programas. No se pudo garantizar la compatibilidad. Compruebe y edite sus acciones de inicio de otras actividades para asegurarse de que siguen funcionando.</string>
<string name="disable">Desactivar</string> <string name="disable">Desactivar</string>
<string name="enable">Activar</string> <string name="enable">Activar</string>
<string name="uiThemeClassic">Tema clásico de la interfaz</string>
<string name="uiThemeCompat">Tema de la interfaz de usuario de diseño de materiales</string>
<string name="permissionForegroundServiceTypeSpecialUseRequired">Se requiere permiso FOREGROUND_SERVICE_TYPE_SPECIAL_USE para empezar.</string>
<string name="uiTheme">Tema de la interfaz</string>
<string name="uiThemeSummary">El tema de la interfaz gráfica de usuario. Se requiere solicitud.</string>
<string name="proximity">Proximidad</string>
<string name="testArea">Zona de pruebas</string>
<string name="testAreaProximityComment">Acércate a tu dispositivo para comprobar cómo reacciona.</string>
<string name="deviceDoesntHaveProximitySensor">Tu dispositivo no parece tener sensor de proximidad.</string>
<string name="proximitySensorHint">El sensor de proximidad funciona de forma diferente en cada modelo de dispositivo. En algunos solo informa valores binarios cercanos o lejanos, en otros puede mostrar valores más granulares. Puedes usar este tester para ver cómo se comporta en tu dispositivo.</string>
<string name="close">cerca</string>
<string name="far">lejos</string>
<string name="proximityText">La proximidad está entre \"%1$s\" y \"%2$s\"</string>
<string name="pleaseWait">Espera.</string>
<string name="permissionRequiredBluetooth">Se requiere permiso Bluetooth para editar esta regla. Solicita permisos desde la pantalla principal primero.</string>
<string name="settingName">Nombre de la configuratión</string>
<string name="settingValue">Valor de la configuración</string>
<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>
</resources> </resources>

View File

@@ -854,6 +854,7 @@
<string name="notCharging">Ne charge pas</string> <string name="notCharging">Ne charge pas</string>
<string name="triggerChargingComment">Le type ne sera évalué que si l\'appareil est en charge. Si l\'option Ne pas charger est sélectionnée, elle se déclenchera à n\'importe quel type de charge précédent. Si vous souhaitez évaluer cela, envisagez d\'utiliser les variables déclencheur/action.</string> <string name="triggerChargingComment">Le type ne sera évalué que si l\'appareil est en charge. Si l\'option Ne pas charger est sélectionnée, elle se déclenchera à n\'importe quel type de charge précédent. Si vous souhaitez évaluer cela, envisagez d\'utiliser les variables déclencheur/action.</string>
<string name="helpTextProfiles">Un profil est un ensemble de paramètres pour les sonneries, les volumes et d\'autres paramètres liés à l\'audio que vous pouvez faire appliquer à partir de règles ou appliquer manuellement.\\n\\nIl est également possible d\'interroger le dernier profil activé en tant que déclencheur. Dans le cas normal, il ne demandera que si le profil était le dernier activé (indépendamment si des paramètres audio spécifiques ont été modifiés entre-temps). Mais vous pouvez également comparer les différents paramètres.</string> <string name="helpTextProfiles">Un profil est un ensemble de paramètres pour les sonneries, les volumes et d\'autres paramètres liés à l\'audio que vous pouvez faire appliquer à partir de règles ou appliquer manuellement.\\n\\nIl est également possible d\'interroger le dernier profil activé en tant que déclencheur. Dans le cas normal, il ne demandera que si le profil était le dernier activé (indépendamment si des paramètres audio spécifiques ont été modifiés entre-temps). Mais vous pouvez également comparer les différents paramètres.</string>
<string name="serviceWontStartPermissions">Je n\'ai pas les autorisations complètes pour une règle définie. Le service ne démarre pas.</string>
<string name="serviceWontStartNoActivatedRules">Aucune règle activée n\'a été définie. Le service ne démarre pas.</string> <string name="serviceWontStartNoActivatedRules">Aucune règle activée n\'a été définie. Le service ne démarre pas.</string>
<string name="version143StartOtherActivityHint">Dans la version 1.8.2, il était nécessaire de revoir la façon dont les actions pour démarrer d\'autres programmes étaient enregistrées. La compatibilité n\'a pas pu être assurée. Veuillez vérifier et modifier vos actions de démarrage d\'autres activités pour vous assurer qu\'elles fonctionnent toujours.</string> <string name="version143StartOtherActivityHint">Dans la version 1.8.2, il était nécessaire de revoir la façon dont les actions pour démarrer d\'autres programmes étaient enregistrées. La compatibilité n\'a pas pu être assurée. Veuillez vérifier et modifier vos actions de démarrage d\'autres activités pour vous assurer qu\'elles fonctionnent toujours.</string>
<string name="importChooseFolderNotice">Dans la boîte de dialogue suivante, n\'essayez pas de sélectionner des fichiers spécifiques, mais choisissez le dossier dans lequel résident les fichiers de sauvegarde Automation. Si le bouton de sélection est désactivé, vous avez trouvé une limitation Android. Dans ce cas, essayez d\'abord de déplacer les fichiers dans un sous-répertoire.</string> <string name="importChooseFolderNotice">Dans la boîte de dialogue suivante, n\'essayez pas de sélectionner des fichiers spécifiques, mais choisissez le dossier dans lequel résident les fichiers de sauvegarde Automation. Si le bouton de sélection est désactivé, vous avez trouvé une limitation Android. Dans ce cas, essayez d\'abord de déplacer les fichiers dans un sous-répertoire.</string>
@@ -865,4 +866,24 @@
<string name="screenBrightGoogleComment">Parce que quelqu\'un chez Google semble avoir fumé quelque chose, le réglage de la luminosité de l\'écran se comporte très bizarrement pour certaines versions d\'Android. Ce comportement n\'a rien à voir avec ce que vous pensez qu\'il fait selon leur propre documentation. J\'ai essayé de m\'y adapter du mieux que j\'ai pu, mais je ne m\'attends pas à des réglages très précis. Cela signifie que le paramètre résultant peut s\'écarter un peu de ce que vous configurez ici.</string> <string name="screenBrightGoogleComment">Parce que quelqu\'un chez Google semble avoir fumé quelque chose, le réglage de la luminosité de l\'écran se comporte très bizarrement pour certaines versions d\'Android. Ce comportement n\'a rien à voir avec ce que vous pensez qu\'il fait selon leur propre documentation. J\'ai essayé de m\'y adapter du mieux que j\'ai pu, mais je ne m\'attends pas à des réglages très précis. Cela signifie que le paramètre résultant peut s\'écarter un peu de ce que vous configurez ici.</string>
<string name="disable">Désactiver</string> <string name="disable">Désactiver</string>
<string name="enable">Activer</string> <string name="enable">Activer</string>
<string name="uiThemeClassic">Thème Classic UI</string>
<string name="uiThemeCompat">Thème de l\'interface utilisateur de conception de matériaux</string>
<string name="pleaseWait">Veuillez patienter.</string>
<string name="permissionRequiredBluetooth">Permission Bluetooth requise pour modifier cette règle. Demande d\'abord les permissions depuis l\'écran principal.</string>
<string name="settingName">Nom de l\'univers</string>
<string name="settingValue">Setting value</string>
<string name="enterAvalue">Saisissez une valeur.</string>
<string name="setSystemSettingCapital">Définir le système</string>
<string name="permissionForegroundServiceTypeSpecialUseRequired">Une autorisation FOREGROUND_SERVICE_TYPE_SPECIAL_USE est requise pour commencer.</string>
<string name="uiTheme">Thème UI</string>
<string name="uiThemeSummary">Le thème de l\'interface graphique utilisateur. Demande obligatoire.</string>
<string name="proximity">Proximité</string>
<string name="testArea">Zone d\'essai</string>
<string name="testAreaProximityComment">Approchez votre appareil pour tester sa réaction.</string>
<string name="deviceDoesntHaveProximitySensor">Votre appareil ne semble pas avoir de capteur de proximité.</string>
<string name="proximitySensorHint">Le capteur de proximité fonctionne différemment selon les modèles d\'appareils. Sur certains, il affiche simplement des valeurs binaires proches ou éloignées, sur d\'autres, il peut rapporter des valeurs plus granulaires. Vous pouvez utiliser ce testeur pour voir comment il se comporte sur votre appareil.</string>
<string name="close">proche</string>
<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>
</resources> </resources>

View File

@@ -855,6 +855,7 @@
<string name="notCharging">non in carica</string> <string name="notCharging">non in carica</string>
<string name="triggerChargingComment">Il tipo verrà valutato solo se il dispositivo è in carica. Se si sceglie di non caricare, si attiverà a qualsiasi tipo di ricarica precedente. Se si desidera valutarlo, prendere in considerazione l\'utilizzo delle variabili trigger/action.</string> <string name="triggerChargingComment">Il tipo verrà valutato solo se il dispositivo è in carica. Se si sceglie di non caricare, si attiverà a qualsiasi tipo di ricarica precedente. Se si desidera valutarlo, prendere in considerazione l\'utilizzo delle variabili trigger/action.</string>
<string name="helpTextProfiles">Un profilo è una raccolta di impostazioni per suonerie, volumi e altre impostazioni relative all\'audio che è possibile applicare dalle regole o applicare manualmente.\\n\\nÈ anche possibile eseguire una query per l\'ultimo profilo attivato come trigger. In caso normale, chiederà solo se il profilo è stato l\'ultimo attivato (indipendentemente dal fatto che nel frattempo siano state modificate impostazioni audio specifiche). Ma è anche possibile confrontare le singole impostazioni.</string> <string name="helpTextProfiles">Un profilo è una raccolta di impostazioni per suonerie, volumi e altre impostazioni relative all\'audio che è possibile applicare dalle regole o applicare manualmente.\\n\\nÈ anche possibile eseguire una query per l\'ultimo profilo attivato come trigger. In caso normale, chiederà solo se il profilo è stato l\'ultimo attivato (indipendentemente dal fatto che nel frattempo siano state modificate impostazioni audio specifiche). Ma è anche possibile confrontare le singole impostazioni.</string>
<string name="serviceWontStartPermissions">Non ho permessi completi per nessuna regola definita. Il servizio non parte.</string>
<string name="serviceWontStartNoActivatedRules">Nessuna regola attivata definita. Il servizio non si avvia.</string> <string name="serviceWontStartNoActivatedRules">Nessuna regola attivata definita. Il servizio non si avvia.</string>
<string name="importChooseFolderNotice">Nella finestra di dialogo seguente non tentare di selezionare file specifici, ma scegliere la cartella in cui risiedono i file di backup di Automazione. Se il pulsante di selezione è disabilitato, hai trovato una limitazione di Android. In tal caso, prova prima a spostare i file in una sottodirectory.</string> <string name="importChooseFolderNotice">Nella finestra di dialogo seguente non tentare di selezionare file specifici, ma scegliere la cartella in cui risiedono i file di backup di Automazione. Se il pulsante di selezione è disabilitato, hai trovato una limitazione di Android. In tal caso, prova prima a spostare i file in una sottodirectory.</string>
<string name="matches">corrisponde</string> <string name="matches">corrisponde</string>
@@ -866,4 +867,24 @@
<string name="version143StartOtherActivityHint">Nella versione 1.8.2 è stato necessario rivedere il modo in cui venivano salvate le azioni per avviare altri programmi. La compatibilità non poteva essere garantita. Controlla e modifica le azioni di avvio di altre attività per assicurarti che funzionino ancora.</string> <string name="version143StartOtherActivityHint">Nella versione 1.8.2 è stato necessario rivedere il modo in cui venivano salvate le azioni per avviare altri programmi. La compatibilità non poteva essere garantita. Controlla e modifica le azioni di avvio di altre attività per assicurarti che funzionino ancora.</string>
<string name="disable">Disabilitare</string> <string name="disable">Disabilitare</string>
<string name="enable">Abilitare</string> <string name="enable">Abilitare</string>
<string name="uiThemeClassic">Tema classico dell\'interfaccia utente</string>
<string name="uiThemeCompat">Tema dell\'interfaccia utente per il design del materiale</string>
<string name="testArea">Area di prova</string>
<string name="testAreaProximityComment">Avvicinati al tuo dispositivo per testare come reagisce.</string>
<string name="deviceDoesntHaveProximitySensor">Il tuo dispositivo non sembra avere un sensore di prossimità.</string>
<string name="proximitySensorHint">Il sensore di prossimità funziona in modo diverso su ogni modello di dispositivo. In alcuni riportano solo valori binari vicini o lontani, in altri possono riportare valori più granulari. Puoi usare questo tester per vedere come si comporta sul tuo dispositivo.</string>
<string name="close">chiude</string>
<string name="far">lontano</string>
<string name="proximityText">La vicinanza è tra \"%1$s\" e \"%2$s\"</string>
<string name="pleaseWait">Attendere prego.</string>
<string name="permissionRequiredBluetooth">È necessario il permesso Bluetooth per modificare questa regola. Richiedi prima i permessi dalla schermata principale.</string>
<string name="settingName">Nome dell\'ambientazione</string>
<string name="settingValue">Valore di impostazione</string>
<string name="enterAvalue">Inserisci un valore.</string>
<string name="setSystemSettingCapital">Impostazione del sistema</string>
<string name="permissionForegroundServiceTypeSpecialUseRequired">È necessario il permesso FOREGROUND_SERVICE_TYPE_SPECIAL_USE per iniziare.</string>
<string name="uiTheme">Tema UI</string>
<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>
</resources> </resources>

View File

@@ -853,6 +853,7 @@
<string name="notCharging">laadt niet op</string> <string name="notCharging">laadt niet op</string>
<string name="triggerChargingComment">Het type wordt alleen geëvalueerd als het apparaat wordt opgeladen. Als er niet wordt gekozen voor opladen, wordt het geactiveerd bij elk eerder oplaadtype. Als je dat wilt evalueren, overweeg dan om de variabelen trigger/actie te gebruiken.</string> <string name="triggerChargingComment">Het type wordt alleen geëvalueerd als het apparaat wordt opgeladen. Als er niet wordt gekozen voor opladen, wordt het geactiveerd bij elk eerder oplaadtype. Als je dat wilt evalueren, overweeg dan om de variabelen trigger/actie te gebruiken.</string>
<string name="helpTextProfiles">Een profiel is een verzameling instellingen voor beltonen, volumes en andere audiogerelateerde instellingen die u kunt laten toepassen vanuit regels of handmatig kunt toepassen.\\n\\nHet is ook mogelijk om het laatst geactiveerde profiel als trigger op te vragen. In het normale geval zal het alleen opvragen of het profiel het laatst geactiveerde profiel was (ongeacht of specifieke audio-instellingen in de tussentijd zijn gewijzigd). Maar u kunt ook de individuele instellingen laten vergelijken.</string> <string name="helpTextProfiles">Een profiel is een verzameling instellingen voor beltonen, volumes en andere audiogerelateerde instellingen die u kunt laten toepassen vanuit regels of handmatig kunt toepassen.\\n\\nHet is ook mogelijk om het laatst geactiveerde profiel als trigger op te vragen. In het normale geval zal het alleen opvragen of het profiel het laatst geactiveerde profiel was (ongeacht of specifieke audio-instellingen in de tussentijd zijn gewijzigd). Maar u kunt ook de individuele instellingen laten vergelijken.</string>
<string name="serviceWontStartPermissions">Je hebt geen volledige rechten voor een bepaalde regel. De service start niet.</string>
<string name="serviceWontStartNoActivatedRules">Er zijn geen geactiveerde regels gedefinieerd. De service wordt niet gestart.</string> <string name="serviceWontStartNoActivatedRules">Er zijn geen geactiveerde regels gedefinieerd. De service wordt niet gestart.</string>
<string name="importChooseFolderNotice">Probeer in het volgende dialoogvenster geen specifieke bestanden te selecteren, maar kies de map waarin de back-upbestanden van Automation zich bevinden. Als de keuzeknop is uitgeschakeld, hebt u een Android-beperking gevonden. Probeer in dat geval de bestanden eerst naar een submap te verplaatsen.</string> <string name="importChooseFolderNotice">Probeer in het volgende dialoogvenster geen specifieke bestanden te selecteren, maar kies de map waarin de back-upbestanden van Automation zich bevinden. Als de keuzeknop is uitgeschakeld, hebt u een Android-beperking gevonden. Probeer in dat geval de bestanden eerst naar een submap te verplaatsen.</string>
<string name="matches">komt overeen</string> <string name="matches">komt overeen</string>
@@ -864,4 +865,24 @@
<string name="version143StartOtherActivityHint">In versie 1.8.2 was het nodig om de manier waarop acties om andere programma\'s te starten werden opgeslagen, te herzien. De compatibiliteit kon niet worden gegarandeerd. Controleer en bewerk je acties om andere activiteiten te starten om er zeker van te zijn dat ze nog steeds werken.</string> <string name="version143StartOtherActivityHint">In versie 1.8.2 was het nodig om de manier waarop acties om andere programma\'s te starten werden opgeslagen, te herzien. De compatibiliteit kon niet worden gegarandeerd. Controleer en bewerk je acties om andere activiteiten te starten om er zeker van te zijn dat ze nog steeds werken.</string>
<string name="disable">Uitschakelen</string> <string name="disable">Uitschakelen</string>
<string name="enable">Inschakelen</string> <string name="enable">Inschakelen</string>
<string name="uiThemeClassic">Klassiek UI-thema</string>
<string name="uiThemeCompat">Materiaalontwerp UI-thema</string>
<string name="permissionForegroundServiceTypeSpecialUseRequired">Toestemming FOREGROUND_SERVICE_TYPE_SPECIAL_USE is vereist om te beginnen.</string>
<string name="uiTheme">UI-thema</string>
<string name="uiThemeSummary">Het thema van de grafische gebruikersinterface. Aanvraag vereist.</string>
<string name="proximity">Nabijheid</string>
<string name="testArea">Testgebied</string>
<string name="testAreaProximityComment">Benader je apparaat om te testen hoe het reageert.</string>
<string name="deviceDoesntHaveProximitySensor">Je apparaat lijkt geen nabijheidssensor te hebben.</string>
<string name="proximitySensorHint">De nabijheidssensor werkt bij elk apparaatmodel anders. Bij sommige rapporteert het alleen dichtbij of ver als binaire waarden, bij andere kan het meer gedetailleerde waarden weergeven. Je kunt deze tester gebruiken om te zien hoe hij zich op jouw apparaat gedraagt.</string>
<string name="close">Sluiten</string>
<string name="far">ver</string>
<string name="proximityText">De nabijheid ligt tussen \"%1$s\" en \"%2$s\"</string>
<string name="pleaseWait">Een ogenblik geduld.</string>
<string name="permissionRequiredBluetooth">Bluetooth-toestemming vereist om deze regel te wijzigen. Vraag eerst om toestemming op het hoofdscherm.</string>
<string name="settingName">Naam van de instelling</string>
<string name="settingValue">Waarde van de instelling</string>
<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>
</resources> </resources>

View File

@@ -952,6 +952,7 @@
<string name="notCharging">Nie ładuje się</string> <string name="notCharging">Nie ładuje się</string>
<string name="triggerChargingComment">Typ zostanie oceniony tylko wtedy, gdy urządzenie się ładuje. Jeśli nie zostanie wybrane ładowanie, zostanie uruchomione przy dowolnym poprzednim typie ładowania. Jeśli chcesz to ocenić, rozważ użycie zmiennych trigger/action.</string> <string name="triggerChargingComment">Typ zostanie oceniony tylko wtedy, gdy urządzenie się ładuje. Jeśli nie zostanie wybrane ładowanie, zostanie uruchomione przy dowolnym poprzednim typie ładowania. Jeśli chcesz to ocenić, rozważ użycie zmiennych trigger/action.</string>
<string name="helpTextProfiles">Profil jest zbiorem ustawień dzwonków, głośności i innych ustawień związanych z dźwiękiem, które można zastosować z reguł lub zastosować ręcznie.\\n\\nMożliwe jest również zapytanie o ostatnio aktywowany profil jako wyzwalacz. W normalnym przypadku zapyta tylko, czy profil był ostatnio aktywowany (niezależnie od tego, czy określone ustawienia dźwięku zostały zmienione w międzyczasie). Ale możesz także porównać poszczególne ustawienia.</string> <string name="helpTextProfiles">Profil jest zbiorem ustawień dzwonków, głośności i innych ustawień związanych z dźwiękiem, które można zastosować z reguł lub zastosować ręcznie.\\n\\nMożliwe jest również zapytanie o ostatnio aktywowany profil jako wyzwalacz. W normalnym przypadku zapyta tylko, czy profil był ostatnio aktywowany (niezależnie od tego, czy określone ustawienia dźwięku zostały zmienione w międzyczasie). Ale możesz także porównać poszczególne ustawienia.</string>
<string name="serviceWontStartPermissions">Nie mam pełnych uprawnień do żadnej zdefiniowanej reguły. Usługa nie chce się uruchomić.</string>
<string name="serviceWontStartNoActivatedRules">Nie zdefiniowano aktywowanych reguł. Usługa nie uruchamia się.</string> <string name="serviceWontStartNoActivatedRules">Nie zdefiniowano aktywowanych reguł. Usługa nie uruchamia się.</string>
<string name="importChooseFolderNotice">W następnym oknie dialogowym nie próbuj wybierać określonych plików, ale wybierz folder, w którym znajdują się pliki kopii zapasowej usługi Automation. Jeśli przycisk wyboru jest wyłączony, oznacza to, że znalazłeś ograniczenie systemu Android. W takim przypadku spróbuj najpierw przenieść pliki do podkatalogu.</string> <string name="importChooseFolderNotice">W następnym oknie dialogowym nie próbuj wybierać określonych plików, ale wybierz folder, w którym znajdują się pliki kopii zapasowej usługi Automation. Jeśli przycisk wyboru jest wyłączony, oznacza to, że znalazłeś ograniczenie systemu Android. W takim przypadku spróbuj najpierw przenieść pliki do podkatalogu.</string>
<string name="matches">pasuje</string> <string name="matches">pasuje</string>
@@ -963,4 +964,24 @@
<string name="version143StartOtherActivityHint">W wersji 1.8.2 konieczne było poprawienie sposobu zapisywania akcji uruchamiających inne programy. Nie można było zapewnić kompatybilności. Sprawdź i edytuj czynności związane z uruchamianiem innych aktywności, aby upewnić się, że nadal działają.</string> <string name="version143StartOtherActivityHint">W wersji 1.8.2 konieczne było poprawienie sposobu zapisywania akcji uruchamiających inne programy. Nie można było zapewnić kompatybilności. Sprawdź i edytuj czynności związane z uruchamianiem innych aktywności, aby upewnić się, że nadal działają.</string>
<string name="disable">Wyłączać</string> <string name="disable">Wyłączać</string>
<string name="enable">Umożliwiać</string> <string name="enable">Umożliwiać</string>
<string name="uiThemeClassic">Klasyczny motyw UI</string>
<string name="uiThemeCompat">Motyw UI projektowania materiałów</string>
<string name="permissionForegroundServiceTypeSpecialUseRequired">Do rozpoczęcia FOREGROUND_SERVICE_TYPE_SPECIAL_USE wymagana jest zgoda.</string>
<string name="uiTheme">Motyw UI</string>
<string name="uiThemeSummary">Motyw graficzny interfejsu użytkownika. Wymagana aplikacja.</string>
<string name="proximity">Bliskość</string>
<string name="testArea">Obszar testowy</string>
<string name="testAreaProximityComment">Podejdź do urządzenia, aby sprawdzić, jak reaguje.</string>
<string name="deviceDoesntHaveProximitySensor">Twoje urządzenie nie wydaje się mieć czujnika zbliżeniowego.</string>
<string name="proximitySensorHint">Czujnik zbliżeniowy działa inaczej w każdym modelu urządzenia. W niektórych pokazuje tylko wartości binarne bliskie lub daleko, w innych może podawać bardziej szczegółowe wartości. Możesz użyć tego testera, aby zobaczyć, jak zachowuje się na Twoim urządzeniu.</string>
<string name="close">bliski</string>
<string name="far">daleko</string>
<string name="proximityText">Odległość mieści się między \"%1$s\" a \"%2$s\"</string>
<string name="pleaseWait">Czekaj.</string>
<string name="permissionRequiredBluetooth">Wymagane uprawnienia Bluetooth do edycji tej zasady. Najpierw poproś o uprawnienia z ekranu głównego.</string>
<string name="settingName">Nazwa osadzenia</string>
<string name="settingValue">Wartość ustalająca</string>
<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>
</resources> </resources>

View File

@@ -912,7 +912,8 @@
<string name="notCharging">не заряжается</string> <string name="notCharging">не заряжается</string>
<string name="triggerChargingComment">Тип будет оцениваться только в том случае, если устройство заряжается. Если зарядка не выбрана, он будет срабатывать при любом предыдущем типе зарядки. Если вы хотите это оценить, подумайте об использовании переменных trigger/action.</string> <string name="triggerChargingComment">Тип будет оцениваться только в том случае, если устройство заряжается. Если зарядка не выбрана, он будет срабатывать при любом предыдущем типе зарядки. Если вы хотите это оценить, подумайте об использовании переменных trigger/action.</string>
<string name="helpTextProfiles">Профиль — это набор настроек рингтонов, громкости и других настроек, связанных со звуком, которые можно применить из правил или вручную.\\n\\nТакже в качестве триггера можно запросить последний активированный профиль. В обычном случае он будет запрашивать только то, был ли профиль последним активированным (независимо от того, были ли за это время изменены определенные настройки звука). Но вы также можете сравнить отдельные настройки.</string> <string name="helpTextProfiles">Профиль — это набор настроек рингтонов, громкости и других настроек, связанных со звуком, которые можно применить из правил или вручную.\\n\\nТакже в качестве триггера можно запросить последний активированный профиль. В обычном случае он будет запрашивать только то, был ли профиль последним активированным (независимо от того, были ли за это время изменены определенные настройки звука). Но вы также можете сравнить отдельные настройки.</string>
<string name="serviceWontStartNoActivatedRules">Активированные правила не определены. Служба не запускается.</string> <string name="serviceWontStartPermissions">У меня нет полных разрешений на какие-либо определённые правила. Обслуживание не начинается.</string>
<string name="serviceWontStartNoActivatedRules">Активированные правила не определены. Служба не запускается.</string>
<string name="importChooseFolderNotice">В следующем диалоговом окне не пытайтесь выбрать конкретные файлы, а выберите папку, в которой находятся файлы резервных копий автоматизации. Если кнопка выбора отключена, вы обнаружили ограничение Android. В этом случае попробуйте сначала переместить файлы в подкаталог.</string> <string name="importChooseFolderNotice">В следующем диалоговом окне не пытайтесь выбрать конкретные файлы, а выберите папку, в которой находятся файлы резервных копий автоматизации. Если кнопка выбора отключена, вы обнаружили ограничение Android. В этом случае попробуйте сначала переместить файлы в подкаталог.</string>
<string name="matches">Шутки</string> <string name="matches">Шутки</string>
<string name="doesNotMatch">не совпадает</string> <string name="doesNotMatch">не совпадает</string>
@@ -923,4 +924,24 @@
<string name="version143StartOtherActivityHint">В версии 1.8.2 необходимо было пересмотреть способ сохранения действий для запуска других программ. Совместимость обеспечить не удалось. Пожалуйста, проверьте и отредактируйте действия запуска других действий, чтобы убедиться, что они все еще работают.</string> <string name="version143StartOtherActivityHint">В версии 1.8.2 необходимо было пересмотреть способ сохранения действий для запуска других программ. Совместимость обеспечить не удалось. Пожалуйста, проверьте и отредактируйте действия запуска других действий, чтобы убедиться, что они все еще работают.</string>
<string name="disable">Отключить</string> <string name="disable">Отключить</string>
<string name="enable">Давать возможность</string> <string name="enable">Давать возможность</string>
<string name="uiThemeClassic">Классическая тема интерфейса</string>
<string name="uiThemeCompat">Тема интерфейса дизайна материалов</string>
<string name="permissionForegroundServiceTypeSpecialUseRequired">Для запуска требуется разрешение FOREGROUND_SERVICE_TYPE_SPECIAL_USE.</string>
<string name="uiTheme">Тема интерфейса</string>
<string name="uiThemeSummary">Тема графического пользовательского интерфейса. Требуется подача заявления.</string>
<string name="proximity">Близость</string>
<string name="testArea">Зона испытаний</string>
<string name="testAreaProximityComment">Подойдите к своему устройству, чтобы проверить, как оно реагирует.</string>
<string name="deviceDoesntHaveProximitySensor">Похоже, у вашего устройства нет датчика близости.</string>
<string name="proximitySensorHint">Датчик близости работает по-разному на каждой модели устройства. В некоторых он показывает только близкие или далёкие бинарные значения, в других — более детализированные. Вы можете использовать этот тестер, чтобы посмотреть, как он ведёт себя на вашем устройстве.</string>
<string name="close">закрыть</string>
<string name="far">Далеко</string>
<string name="proximityText">Близость находится между «%1$s» и «%2$s».</string>
<string name="pleaseWait">Подождите.</string>
<string name="permissionRequiredBluetooth">Для редактирования этого правила требуется разрешение на Bluetooth. Сначала запросите разрешения на главном экране.</string>
<string name="settingName">Название сеттинга</string>
<string name="settingValue">Значение сеттинга</string>
<string name="enterAvalue">Введите значение.</string>
<string name="setSystemSettingCapital">Настройка системы множества</string>
<string name="examplesWriteSecureSettings">Я не веду список возможных настроек. Пожалуйста, найдите эти настройки сами. См. <a href="https://developer.android.com/reference/android/provider/Settings.Secure">здесь</a> некоторые (неполные) примеры.</string>
</resources> </resources>

View File

@@ -853,6 +853,7 @@
<string name="notCharging">不充电</string> <string name="notCharging">不充电</string>
<string name="triggerChargingComment">仅当设备正在充电时,才会评估类型。如果未选择充电,它将以任何以前的充电类型点火。如果要对此进行评估,请考虑使用变量 trigger/action。</string> <string name="triggerChargingComment">仅当设备正在充电时,才会评估类型。如果未选择充电,它将以任何以前的充电类型点火。如果要对此进行评估,请考虑使用变量 trigger/action。</string>
<string name="helpTextProfiles">配置文件是铃声、音量和其他音频相关设置的集合,您可以从规则中应用这些设置,也可以手动应用。\\n\\n还可以查询上次激活的配置文件作为触发器。在正常情况下它只会查询配置文件是否是上次激活的配置文件无论在此期间是否更改了特定的音频设置。但您也可以比较各个设置。</string> <string name="helpTextProfiles">配置文件是铃声、音量和其他音频相关设置的集合,您可以从规则中应用这些设置,也可以手动应用。\\n\\n还可以查询上次激活的配置文件作为触发器。在正常情况下它只会查询配置文件是否是上次激活的配置文件无论在此期间是否更改了特定的音频设置。但您也可以比较各个设置。</string>
<string name="serviceWontStartPermissions">没有对任何定义规则拥有完全权限。服务启动不了。</string>
<string name="serviceWontStartNoActivatedRules">未定义已激活的规则。服务无法启动。</string> <string name="serviceWontStartNoActivatedRules">未定义已激活的规则。服务无法启动。</string>
<string name="importChooseFolderNotice">在下面的对话框中,不要尝试选择特定文件,而是选择 Automation 备份文件所在的文件夹。如果禁用了 choose 按钮,则表示您发现了 Android 限制。在这种情况下,请先尝试将文件移动到子目录。</string> <string name="importChooseFolderNotice">在下面的对话框中,不要尝试选择特定文件,而是选择 Automation 备份文件所在的文件夹。如果禁用了 choose 按钮,则表示您发现了 Android 限制。在这种情况下,请先尝试将文件移动到子目录。</string>
<string name="matches">吉贝斯</string> <string name="matches">吉贝斯</string>
@@ -864,4 +865,24 @@
<string name="version143StartOtherActivityHint">在 1.8.2 版本中,有必要修改保存启动其他程序的作的方式。无法确保兼容性。请检查并编辑您的启动其他活动作,以确保它们仍在工作。</string> <string name="version143StartOtherActivityHint">在 1.8.2 版本中,有必要修改保存启动其他程序的作的方式。无法确保兼容性。请检查并编辑您的启动其他活动作,以确保它们仍在工作。</string>
<string name="disable">禁用</string> <string name="disable">禁用</string>
<string name="enable">使</string> <string name="enable">使</string>
<string name="uiThemeClassic">经典界面主题</string>
<string name="uiThemeCompat">材质设计UI主题</string>
<string name="permissionForegroundServiceTypeSpecialUseRequired">开始需要获得FOREGROUND_SERVICE_TYPE_SPECIAL_USE许可。</string>
<string name="uiTheme">UI主题</string>
<string name="uiThemeSummary">图形用户界面的主题。需要申请。</string>
<string name="proximity">邻近</string>
<string name="testArea">测试区</string>
<string name="testAreaProximityComment">靠近你的设备测试它的反应。</string>
<string name="deviceDoesntHaveProximitySensor">你的设备似乎没有接近传感器。</string>
<string name="proximitySensorHint">接近传感器在不同型号上的工作方式不同。有些系统只显示近或远的二进制值,有些则可能报告更细致的数值。你可以用这个测试器看看它在设备上的表现。</string>
<string name="close">关闭</string>
<string name="far"></string>
<string name="proximityText">距离介于\"%1$s\"到\"%2$s\"之间。</string>
<string name="pleaseWait">请稍候。</string>
<string name="permissionRequiredBluetooth">编辑此规则需获得蓝牙权限。先从主界面请求权限。</string>
<string name="settingName">设定名称</string>
<string name="settingValue">设定值</string>
<string name="enterAvalue">输入一个数值。</string>
<string name="setSystemSettingCapital">集合系统设置</string>
<string name="examplesWriteSecureSettings">我没有列出可能的设置。请自己找到这些设置。请参见(此处)一些 <a href="https://developer.android.com/reference/android/provider/Settings.Secure">不完整的</a> 示例。</string>
</resources> </resources>

View File

@@ -12,6 +12,7 @@
<string name="pleaseSpecifiyTrigger">Please specify at least one trigger.</string> <string name="pleaseSpecifiyTrigger">Please specify at least one trigger.</string>
<string name="pleaseSpecifiyAction">Please specify at least one action.</string> <string name="pleaseSpecifiyAction">Please specify at least one action.</string>
<string name="serviceWontStart">No rules defined. Service won\'t start.</string> <string name="serviceWontStart">No rules defined. Service won\'t start.</string>
<string name="serviceWontStartPermissions">Don\'t have full permissions for any defined rule. Service won\'t start.</string>
<string name="serviceWontStartNoActivatedRules">No activated rules defined. Service won\'t start.</string> <string name="serviceWontStartNoActivatedRules">No activated rules defined. Service won\'t start.</string>
<string name="serviceStarted">Automation Service started.</string> <string name="serviceStarted">Automation Service started.</string>
<string name="version">Version %1$s.</string> <string name="version">Version %1$s.</string>
@@ -833,7 +834,7 @@
<string name="wifiExplanation1">Apps targeting Android Q or higher cannot turn wifi on or off anymore. Please blame Google for this restriction, not me. You can bypass this restriction by rooting your device and activating the checkbox below. Alternatively download this application from F-Droid or my website as I am not forced to target the latest API level in those versions.</string> <string name="wifiExplanation1">Apps targeting Android Q or higher cannot turn wifi on or off anymore. Please blame Google for this restriction, not me. You can bypass this restriction by rooting your device and activating the checkbox below. Alternatively download this application from F-Droid or my website as I am not forced to target the latest API level in those versions.</string>
<string name="wifiExplanation2">While airplane mode is activated, wifi can only be toggled from applications when using root permissions for that.</string> <string name="wifiExplanation2">While airplane mode is activated, wifi can only be toggled from applications when using root permissions for that.</string>
<string name="usingRoot">using root</string> <string name="usingRoot">using root</string>
<string name="runExecutableExplanation">You can select a script or an executable file here that will be executed as an action.\n\nBut there are some prerequisites which you have to deal with on your own. Google has made it very hard to run anything other than regular Android applications.\n\n1. The script needs to be marked as executable. On a regular Android system (without root) this is actually the hard part.\n\n2. That also means Automation must be able to execute the file, not just the owner or the group.\n\n3. If it is a script, a valid shell be specified in the script\'s header.\n\nIf you cannot meet the above requirements, you could alternatively try to specify a shell as the actual executable (like /system/bin/sh) and your script as parameter. That has worked for at least one user.</string> <string name="runExecutableExplanation">You can select a script or an executable file here that will be executed as an action.\n\nBut there are some prerequisites which you have to deal with on your own. Google has made it very hard to run anything other than regular Android applications.\n\n1. The script needs to be marked as executable. On a regular Android system (without root) this is actually the hard part.\n\n2. That also means Automation must be able to execute the file, not just the owner or the group.\n\n3. If it is a script, a valid shell must be specified in the script\'s header.\n\nIf you cannot meet the above requirements, you could alternatively try to specify a shell as the actual executable (like /system/bin/sh) and your script as parameter. That has worked for at least one user.</string>
<string name="tetheringActive">tethering is active</string> <string name="tetheringActive">tethering is active</string>
<string name="tetheringNotActive">tethering is not active</string> <string name="tetheringNotActive">tethering is not active</string>
<string name="tetheringState">Tethering state</string> <string name="tetheringState">Tethering state</string>
@@ -970,4 +971,10 @@
<string name="far">far</string> <string name="far">far</string>
<string name="proximityText">proximity is between \"%1$s\" and \"%2$s\"</string> <string name="proximityText">proximity is between \"%1$s\" and \"%2$s\"</string>
<string name="pleaseWait">Please wait.</string> <string name="pleaseWait">Please wait.</string>
<string name="permissionRequiredBluetooth">Bluetooth permission required to edit this rule. Request permissions from the main screen first.</string>
<string name="settingName">Setting name</string>
<string name="settingValue">Setting value</string>
<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>
</resources> </resources>

View File

@@ -0,0 +1,4 @@
* Fixed: Set-wifi action wasn't correctly pre-filled-out when editing action.
* Fixed: Service startup checks improved when no rules with full permissions were present.
* Fixed: Editing bluetooth trigger could crash if permissions weren't given.
* Added: Action to change system settings