Compare commits

...

10 Commits

Author SHA1 Message Date
Jens
ae1e767fa6 copy to clipboard action 2023-03-17 23:22:42 +01:00
Jens
6e12e71133 copy to clipboard action 2023-03-16 23:35:38 +01:00
Jens
e4e3faea06 copy to clipboard action 2023-03-15 23:27:27 +01:00
Jens
7c42250e13 copy to clipboard action 2023-03-12 23:57:54 +01:00
Jens
ebb0724b28 Android 13 wifi permission text 2023-03-08 23:11:58 +01:00
Jens
a7ae0c6588 Android 13 wifi permission 2023-03-01 23:35:19 +01:00
Jens
e5433bf2ec Possibility to pick custom language 2023-02-26 18:12:47 +01:00
Jens
fd8ffd4f7d translation error fixed 2023-02-19 00:09:20 +01:00
Jens
f49455712a Hint for notification access on Android 13 2023-02-18 23:59:29 +01:00
Jens
132f64114e Bug fixed: Editing variable action was not possible 2023-02-12 23:57:37 +01:00
32 changed files with 428 additions and 35 deletions

View File

@ -11,8 +11,8 @@ android {
compileSdkVersion 31
buildToolsVersion '29.0.2'
useLibrary 'org.apache.http.legacy'
versionCode 126
versionName "1.7.11"
versionCode 127
versionName "1.7.12"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

View File

@ -176,6 +176,7 @@
<activity android:name=".ActivityManageActionMakePhoneCall" />
<activity android:name=".ActivityManageActionSetVariable" />
<activity android:name=".ActivityManageTriggerCheckVariable" />
<activity android:name=".ActivityManageActionCopyToClipboard" />
<activity
android:name=".ActivityMainTabLayout"

View File

@ -174,6 +174,7 @@
<activity android:name=".ActivityManageMakePhoneCall" />
<activity android:name=".ActivityManageActionSetVariable" />
<activity android:name=".ActivityManageTriggerCheckVariable" />
<activity android:name=".ActivityManageActionCopyToClipboard" />
<activity
android:name=".ActivityMainTabLayout"
android:launchMode="singleTask">

View File

@ -160,6 +160,7 @@
<activity android:name=".ActivityManageTriggerSubSystemState" />
<activity android:name=".ActivityManageActionSetVariable" />
<activity android:name=".ActivityManageTriggerCheckVariable" />
<activity android:name=".ActivityManageActionCopyToClipboard" />
<activity
android:name=".ActivityMainTabLayout"
android:exported="true"

View File

@ -55,6 +55,7 @@ public class Action
setVariable,
startPhoneCall,
stopPhoneCall,
copyToClipboard,
sendTextMessage;
public String getFullName(Context context)
@ -137,6 +138,8 @@ public class Action
return context.getResources().getString(R.string.startPhoneCall);
case stopPhoneCall:
return context.getResources().getString(R.string.endPhoneCall);
case copyToClipboard:
return context.getResources().getString(R.string.copyTextToClipboard);
default:
return "Unknown";
}
@ -302,6 +305,8 @@ public class Action
case stopPhoneCall:
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.endPhoneCall));
break;
case copyToClipboard:
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.copyTextToClipboard));
default:
returnString.append(action.toString());
}
@ -409,7 +414,7 @@ public class Action
{
returnString.append(": " + parameter2.replace(Action.actionParameter2Split, "; ").replace(Action.intentPairSeparator, "/"));
}
else if (this.getAction().equals(Action_Enum.setVariable))
else if(this.getAction().equals(Action_Enum.setVariable) || this.getAction().equals(Action_Enum.copyToClipboard))
; // it's completed further above already
else if (parameter2 != null && parameter2.length() > 0)
returnString.append(": " + parameter2.replace(Action.actionParameter2Split, "; "));
@ -624,6 +629,9 @@ public class Action
case stopPhoneCall:
Actions.endPhoneCall(context);
break;
case copyToClipboard:
Actions.copyToClipboard(context, Miscellaneous.replaceVariablesInText(this.getParameter2(), context));
break;
default:
Miscellaneous.logEvent("w", "Action", context.getResources().getString(R.string.unknownActionSpecified), 3);
break;

View File

@ -10,7 +10,8 @@ import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothProfile;
import android.content.ActivityNotFoundException;
import android.content.ContentResolver;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
@ -19,7 +20,6 @@ import android.net.ConnectivityManager;
import android.net.Uri;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.os.Bundle;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import android.os.VibrationEffect;
@ -30,7 +30,6 @@ import android.telecom.TelecomManager;
import android.telephony.SmsManager;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
import android.widget.Toast;
@ -54,7 +53,6 @@ import org.apache.http.impl.client.DefaultHttpClient;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
@ -2297,4 +2295,21 @@ public class Actions
mgr.endCall();
}
}
public static void copyToClipboard(Context context, String text)
{
Miscellaneous.logEvent("i", "Clipboard", "Copying data to clipboard: " + text, 4);
if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB)
{
android.text.ClipboardManager clipboard = (android.text.ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
clipboard.setText(text);
}
else
{
android.content.ClipboardManager clipboard = (android.content.ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
android.content.ClipData clip = android.content.ClipData.newPlainText("Data-from-Automation", text);
clipboard.setPrimaryClip(clip);
}
}
}

View File

@ -13,7 +13,7 @@ public class ActivityHelp extends Activity
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(layout.help_text);
setContentView(layout.activity_help_text);
TextView tvHelpTextEnergySaving = (TextView) findViewById(R.id.tvHelpTextEnergySaving);
tvHelpTextEnergySaving.setMovementMethod(LinkMovementMethod.getInstance());

View File

@ -44,6 +44,7 @@ public class ActivityMainPoi extends ActivityGeneric
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(ActivityMainPoi.this);
setContentView(R.layout.main_poi_layout);
instance = this;

View File

@ -40,6 +40,7 @@ public class ActivityMainProfiles extends ActivityGeneric
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(ActivityMainProfiles.this);
setContentView(R.layout.main_profile_layout);
instance = this;

View File

@ -48,6 +48,7 @@ public class ActivityMainRules extends ActivityGeneric
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(ActivityMainRules.this);
setContentView(R.layout.main_rule_layout);
instance = this;

View File

@ -6,9 +6,12 @@ import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
@ -31,6 +34,7 @@ import com.jens.automation2.location.LocationProvider;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Locale;
@SuppressLint("NewApi")
public class ActivityMainScreen extends ActivityGeneric
@ -51,6 +55,7 @@ public class ActivityMainScreen extends ActivityGeneric
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(ActivityMainScreen.this);
setContentView(R.layout.main_overview_layout);
activityMainScreenInstance = this;

View File

@ -3,12 +3,17 @@ package com.jens.automation2;
import android.annotation.SuppressLint;
import android.app.TabActivity;
import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;
import com.jens.automation2.receivers.NfcReceiver;
import java.util.Locale;
@SuppressLint("NewApi")
public class ActivityMainTabLayout extends TabActivity
@ -17,8 +22,8 @@ public class ActivityMainTabLayout extends TabActivity
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Settings.readFromPersistentStorage(ActivityMainTabLayout.this);
Miscellaneous.setDisplayLanguage(ActivityMainTabLayout.this);
if(Settings.tabsPlacement == 1)
setContentView(R.layout.main_tab_layout_tabs_at_bottom);

View File

@ -0,0 +1,52 @@
package com.jens.automation2;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import org.apache.commons.lang3.StringUtils;
public class ActivityManageActionCopyToClipboard extends Activity
{
private Button bSaveCopyToClipboard;
private EditText etCopyToClipboard;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
this.setContentView(R.layout.activity_manage_action_copy_to_clipboard);
bSaveCopyToClipboard = (Button) findViewById(R.id.bSaveCopyToClipboard);
etCopyToClipboard = (EditText)findViewById(R.id.etCopyToClipboard);
bSaveCopyToClipboard.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
if(StringUtils.isEmpty(etCopyToClipboard.getText().toString()))
{
Toast.makeText(ActivityManageActionCopyToClipboard.this, getResources().getString(R.string.enterText), Toast.LENGTH_SHORT).show();
}
else
{
Intent response = new Intent();
response.putExtra(ActivityManageRule.intentNameActionParameter2, etCopyToClipboard.getText().toString());
setResult(RESULT_OK, response);
finish();
}
}
});
if(getIntent().hasExtra(ActivityManageRule.intentNameActionParameter2))
{
String text = getIntent().getStringExtra(ActivityManageRule.intentNameActionParameter2);
etCopyToClipboard.setText(text);
}
}
}

View File

@ -139,6 +139,8 @@ public class ActivityManageRule extends Activity
final static int requestCodeActionSetVariableEdit = 826;
final static int requestCodeTriggerCheckVariableAdd = 827;
final static int requestCodeTriggerCheckVariableEdit = 828;
final static int requestCodeActionCopyTextToClipboardAdd = 829;
final static int requestCodeActionCopyTextToClipboardEdit = 830;
public static ActivityManageRule getInstance()
{
@ -469,6 +471,12 @@ public class ActivityManageRule extends Activity
actionPlaySoundIntent.putExtra(intentNameActionParameter2, a.getParameter2());
startActivityForResult(actionPlaySoundIntent, requestCodeActionPlaySoundEdit);
break;
case copyToClipboard:
Intent actionCopyToClipboardIntent = new Intent(context, ActivityManageActionCopyToClipboard.class);
actionCopyToClipboardIntent.putExtra(intentNameActionParameter1, a.getParameter1());
actionCopyToClipboardIntent.putExtra(intentNameActionParameter2, a.getParameter2());
startActivityForResult(actionCopyToClipboardIntent, requestCodeActionCopyTextToClipboardEdit);
break;
default:
Miscellaneous.logEvent("w", "Edit action", "Editing of action type " + a.getAction().toString() + " not implemented, yet.", 4);
break;
@ -1764,7 +1772,7 @@ public class ActivityManageRule extends Activity
{
ruleToEdit.getActionSet().get(editIndex).setParentRule(ruleToEdit);
if(data.hasExtra(intentNameActionParameter1) && data.hasExtra(intentNameActionParameter2))
if(data.hasExtra(intentNameActionParameter2))
{
ruleToEdit.getActionSet().get(editIndex).setParameter2(data.getStringExtra(intentNameActionParameter2));
}
@ -2016,6 +2024,31 @@ public class ActivityManageRule extends Activity
this.refreshTriggerList();
}
}
else if(requestCode == requestCodeActionCopyTextToClipboardAdd)
{
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 == requestCodeActionCopyTextToClipboardEdit)
{
if(resultCode == RESULT_OK)
{
ruleToEdit.getActionSet().get(editIndex).setParentRule(ruleToEdit);
if(data.hasExtra(intentNameActionParameter2))
{
ruleToEdit.getActionSet().get(editIndex).setParameter2(data.getStringExtra(intentNameActionParameter2));
}
this.refreshActionList();
}
}
}
protected AlertDialog getActionTypeDialog()
@ -2090,6 +2123,8 @@ public class ActivityManageRule extends Activity
if(ActivityPermissions.isPermissionDeclaratedInManifest(ActivityManageRule.this, Manifest.permission.SEND_SMS))
items.add(new Item(typesLong[i].toString(), R.drawable.message));
}
else if(types[i].toString().equals(Action_Enum.copyToClipboard.toString()))
items.add(new Item(typesLong[i].toString(), R.drawable.clipboard));
else
items.add(new Item(typesLong[i].toString(), R.drawable.placeholder));
}
@ -2310,6 +2345,12 @@ public class ActivityManageRule extends Activity
Intent actionPlaySoundIntent = new Intent(context, ActivityManageActionPlaySound.class);
startActivityForResult(actionPlaySoundIntent, requestCodeActionPlaySoundAdd);
}
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.copyToClipboard.toString()))
{
newAction.setAction(Action_Enum.copyToClipboard);
Intent intent = new Intent(ActivityManageRule.this, ActivityManageActionCopyToClipboard.class);
startActivityForResult(intent, requestCodeActionCopyTextToClipboardAdd);
}
}
});

View File

@ -47,6 +47,7 @@ public class ActivityPermissions extends Activity
private static final int requestCodeForPermissionsNotifications = 12046;
private static final int requestCodeForPermissionsDeviceAdmin = 12047;
private static final int requestCodeForPermissionsBatteryOptimization = 12048;
private static final int requestCodeForPermissionNotificationAccessAndroid13 = 12049;
protected String[] specificPermissionsToRequest = null;
public static String intentExtraName = "permissionsToBeRequested";
@ -258,8 +259,7 @@ public class ActivityPermissions extends Activity
if (!havePermission(s, context))
return true;
}
else
if (!havePermission(s, context))
else if (!havePermission(s, context))
return true;
}
}
@ -514,9 +514,13 @@ public class ActivityPermissions extends Activity
addToArrayListUnique(Manifest.permission.ACCESS_NETWORK_STATE, requiredPermissions);
addToArrayListUnique(Manifest.permission.ACCESS_WIFI_STATE, requiredPermissions);
if(
(
Miscellaneous.getTargetSDK(Miscellaneous.getAnyContext()) >= 29
&&
isPermissionDeclaratedInManifest(Miscellaneous.getAnyContext(), Manifest.permission.ACCESS_BACKGROUND_LOCATION)
)
||
Build.VERSION.SDK_INT >= 33
)
addToArrayListUnique(Manifest.permission.ACCESS_BACKGROUND_LOCATION, requiredPermissions);
break;
@ -774,6 +778,7 @@ public class ActivityPermissions extends Activity
break;
case Manifest.permission.ACCESS_BACKGROUND_LOCATION:
usingElements.add(getResources().getString(R.string.googleLocationChicanery));
usingElements.add(getResources().getString(R.string.wifiMonitoringAlsoRequiresThis));
for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.pointOfInterest))
usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName));
for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.speed))
@ -1033,7 +1038,7 @@ public class ActivityPermissions extends Activity
startActivityForResult(intent, requestCodeForPermissionsWriteSettings);
return;
}
if (s.equalsIgnoreCase(Manifest.permission.BIND_DEVICE_ADMIN))
else if (s.equalsIgnoreCase(Manifest.permission.BIND_DEVICE_ADMIN))
{
requiredPermissions.remove(s);
cachedPermissionsToRequest = requiredPermissions;
@ -1046,14 +1051,33 @@ public class ActivityPermissions extends Activity
cachedPermissionsToRequest = requiredPermissions;
Intent intent = new Intent(android.provider.Settings.ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS);
startActivityForResult(intent, requestCodeForPermissionsNotificationPolicy);
return;
}
else if (s.equalsIgnoreCase(Manifest.permission.BIND_NOTIFICATION_LISTENER_SERVICE))
{
if(Build.VERSION.SDK_INT >= 33)
{
AlertDialog dialog = Miscellaneous.messageBox(getResources().getString(R.string.info), getResources().getString(R.string.notificationAccessAndroid13), ActivityPermissions.this);
dialog.setOnDismissListener(new DialogInterface.OnDismissListener()
{
@Override
public void onDismiss(DialogInterface dialogInterface)
{
requiredPermissions.remove(s);
cachedPermissionsToRequest = requiredPermissions;
Intent intent = new Intent(Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS);
startActivityForResult(intent, requestCodeForPermissionsNotifications);
requestNotificationAccess();
}
});
dialog.show();
}
else
{
requiredPermissions.remove(s);
cachedPermissionsToRequest = requiredPermissions;
requestNotificationAccess();
}
return;
}
else if(s.equals(Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS))
@ -1128,6 +1152,12 @@ public class ActivityPermissions extends Activity
}
}
void requestNotificationAccess()
{
Intent intent = new Intent(Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS);
startActivityForResult(intent, requestCodeForPermissionsNotifications);
}
protected void applyChanges()
{
AutomationService service = AutomationService.getInstance();

View File

@ -12,6 +12,8 @@ import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.media.AudioManager;
import android.os.Binder;
import android.os.Build;
@ -20,6 +22,7 @@ import android.os.Environment;
import android.os.IBinder;
import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeech.OnInitListener;
import android.util.DisplayMetrics;
import android.util.Log;
import android.widget.Toast;
@ -127,6 +130,8 @@ public class AutomationService extends Service implements OnInitListener
// Store a reference to myself. Other classes often need a context or something, this can provide that.
centralInstance = this;
Miscellaneous.setDisplayLanguage(AutomationService.this);
}
public boolean checkStartupRequirements(Context context, boolean startAtBoot)

View File

@ -15,6 +15,7 @@ import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.database.Cursor;
import android.media.AudioAttributes;
import android.media.RingtoneManager;
@ -31,6 +32,7 @@ import android.provider.Settings.Secure;
import android.telephony.PhoneNumberUtils;
import android.telephony.TelephonyManager;
import android.util.Base64;
import android.util.DisplayMetrics;
import android.util.Log;
import android.widget.Toast;
@ -614,10 +616,12 @@ public class Miscellaneous extends Service
}
if(source.contains("[serialnr]"))
if(Build.VERSION.SDK_INT > 8)
{
if (Build.VERSION.SDK_INT > 8)
source = source.replace("[serialnr]", Secure.getString(context.getContentResolver(), Build.SERIAL));
else
source = source.replace("[serialnr]", "serialUnknown");
}
if(
source.contains("[d]") ||
@ -739,6 +743,26 @@ public class Miscellaneous extends Service
}
}
while(source.contains("[variable-"))
{
int pos1 = source.indexOf("[variable-");
int pos2 = source.indexOf("]", pos1);
int posA = pos1 + "[variable-".length();
int posB = source.indexOf("]", posA);
String variableName = source.substring(posA, posB);
String replacement;
if(AutomationService.getInstance().variableMap.containsKey(variableName))
replacement = AutomationService.getInstance().variableMap.get(variableName);
else
replacement = "unknownVariable";
source = source.substring(0, pos1) + replacement + source.substring(pos2);
}
// Miscellaneous.logEvent("i", "URL after replace", source);
return source;
@ -1985,4 +2009,20 @@ public class Miscellaneous extends Service
{
return context.getApplicationContext().getApplicationInfo().targetSdkVersion;
}
public static void setDisplayLanguage(Context context)
{
if(!Settings.displayLanguage.equals(Settings.default_displayLanguage))
{
Locale myLocale = new Locale(Settings.displayLanguage);
Resources res = context.getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
//Intent refresh = new Intent(this, AndroidLocalize.class);
//finish();
//startActivity(refresh);
}
}
}

View File

@ -68,6 +68,7 @@ public class Settings implements SharedPreferences
public static boolean showToasts;
public static boolean automaticUpdateCheck;
public static long musicCheckFrequency;
public static String displayLanguage;
public static boolean lockSoundChanges;
public static boolean noticeAndroid9MicrophoneShown;
@ -138,6 +139,7 @@ public class Settings implements SharedPreferences
public static final long default_lastNewsPolltime = -1;
public static final long default_lastUpdateCheck = -1;
public static final long default_musicCheckFrequency = 2500;
public static final String default_displayLanguage = "systemDefaultLanguage";
@Override
public boolean contains(String arg0)
@ -273,6 +275,7 @@ public class Settings implements SharedPreferences
tabsPlacement = Integer.parseInt(prefs.getString("tabsPlacement", String.valueOf(default_tabsPlacement)));
musicCheckFrequency = Long.parseLong(prefs.getString("musicCheckFrequency", String.valueOf(default_musicCheckFrequency)));
displayLanguage = prefs.getString("displayLanguage", default_displayLanguage);
if(Settings.musicCheckFrequency == 0)
Settings.musicCheckFrequency = Settings.default_musicCheckFrequency;
@ -482,6 +485,9 @@ public class Settings implements SharedPreferences
if(!prefs.contains("musicCheckFrequency") || force)
editor.putLong("musicCheckFrequency", default_musicCheckFrequency);
if(!prefs.contains("displayLanguage") || force)
editor.putString("displayLanguage", default_displayLanguage);
if(!prefs.contains("lockSoundChanges") || force)
editor.putBoolean("lockSoundChanges", default_lockSoundChanges);
@ -568,6 +574,8 @@ public class Settings implements SharedPreferences
Settings.musicCheckFrequency = Settings.default_musicCheckFrequency;
editor.putString("musicCheckFrequency", String.valueOf(musicCheckFrequency));
editor.putString("displayLanguage", displayLanguage);
editor.putBoolean("lockSoundChanges", lockSoundChanges);
editor.putBoolean("noticeAndroid9MicrophoneShown", noticeAndroid9MicrophoneShown);
editor.putBoolean("noticeAndroid10WifiShown", noticeAndroid10WifiShown);

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@ -37,6 +37,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/generalText" />
</LinearLayout>
<LinearLayout

View File

@ -0,0 +1,47 @@
<?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="wrap_content"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/textToCopy" />
<EditText
android:id="@+id/etCopyToClipboard"
android:layout_marginBottom="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textShortMessage|textMultiLine" >
</EditText>
<TextView
android:id="@+id/tvTextMessageAnnotations"
android:layout_width="match_parent"
android:layout_height="0dip"
android:text="@string/textMessageAnnotations" />
<TextView
android:id="@+id/tvLegend"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/urlLegend" />
<Button
android:id="@+id/bSaveCopyToClipboard"
android:layout_marginTop="15dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/save" />
</LinearLayout>
</ScrollView>

View File

@ -59,6 +59,13 @@
android:entries="@array/tabsPlacementOptions"
android:entryValues="@array/tabsPlacementOptionsValues" />
<ListPreference
android:key="displayLanguage"
android:title="@string/displayLanguage"
android:summary="@string/displayLanguageSummary"
android:entries="@array/displayLanguageOptions"
android:entryValues="@array/displayLanguageValues" />
<CheckBoxPreference
android:key="executeRulesAndProfilesWithSingleClick"
android:title="@string/executeRulesAndProfilesWithSingleClickTitle" />

View File

@ -1,5 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="languageSystemDefault">System Standard</string>
<string name="languageEnglish">Englisch</string>
<string name="languageGerman">Deutsch</string>
<string name="languageItalian">Italienisch</string>
<string name="languageSpanish">Spanisch</string>
<string name="languageDutch">Niederländisch</string>
<string name="languageRussian">Russisch</string>
<string name="languageFrench">Französisch</string>
<string name="ruleActivate">Aktiviere Regel %1$s</string>
<string name="profileActivate">Aktiviere Profil %1$s</string>
<string name="ruleActivateToggle">Aktiviere Regel %1$s im Umkehrmodus</string>
@ -57,7 +65,7 @@
<string name="end">Ende</string>
<string name="save">Speichern</string>
<string name="urlToTrigger">URL, die ausgelöst werden soll:</string>
<string name="urlLegend">Variablen:\nSie können die folgenden Variablen verwenden. Vor dem Auslösen werden sie mit dem entsprechenden Wert Ihres Geräts ersetzt. Die Klammern müssen in den Text mit aufgenommen werden.\n\n[uniqueid] - Die Unique ID Ihres Geräts\n[serialnr] - Die Seriennummer Ihres Geräts (&lt; Android 9)\n[latitude] - Ihr gegenwärtiger Breitengrad\n[longitude] - Ihr gegenwärtiger Längengrad\n[phonenr] - Nummer des letzten ein- oder ausgehenden Anrufs\n[d] - Tag des Monats, 2-stellig mit führender Null\n[m] - Monat als Zahl, mit führenden Nullen\n[Y] - Vierstellige Jahreszahl\n[h] - Stunde im 12-Stunden-Format, mit führenden Nullen\n[H] - Stunde im 24-Stunden-Format, mit führenden Nullen\n[i] - Minuten, mit führenden Nullen\n[s] - Sekunden, mit führenden Nullen\n[ms] - milliseconds\n[notificationTitle] - Titel der letzten Benachrichtigung\n[notificationText] - Text der letzten Benachrichtigung</string>
<string name="urlLegend">Variablen:\nSie können die folgenden Variablen verwenden. Vor dem Auslösen werden sie mit dem entsprechenden Wert Ihres Geräts ersetzt. Die Klammern müssen in den Text mit aufgenommen werden.\n\n[uniqueid] - Die Unique ID Ihres Geräts\n[serialnr] - Die Seriennummer Ihres Geräts (&lt; Android 9)\n[latitude] - Ihr gegenwärtiger Breitengrad\n[longitude] - Ihr gegenwärtiger Längengrad\n[phonenr] - Nummer des letzten ein- oder ausgehenden Anrufs\n[d] - Tag des Monats, 2-stellig mit führender Null\n[m] - Monat als Zahl, mit führenden Nullen\n[Y] - Vierstellige Jahreszahl\n[h] - Stunde im 12-Stunden-Format, mit führenden Nullen\n[H] - Stunde im 24-Stunden-Format, mit führenden Nullen\n[i] - Minuten, mit führenden Nullen\n[s] - Sekunden, mit führenden Nullen\n[ms] - milliseconds\n[notificationTitle] - Titel der letzten Benachrichtigung\n[notificationText] - Text der letzten Benachrichtigung\n[variable-VARIABLENAME] - Der Wert Ihrer selbst definitierten Variable</string>
<string name="wifi">WLAN</string>
<string name="activating">Aktiviere</string>
<string name="deactivating">Deaktiviere</string>
@ -112,7 +120,7 @@
<string name="soundSettings">Ton Einstellungen</string>
<string name="showHelp">Hilfe</string>
<string name="rules">Regeln</string>
<string name="helpTextRules">Alle Auslöser sind UND-verknüpft. D.h. die Regel wird nur zutreffen, wenn alle Bedingungen erfüllt sind. Wenn Sie eine ODER-Verknüpfung möchten, müssen Sie eine weitere Regel erstellen.</string>
<string name="helpTextRules">Alle Auslöser sind UND-verknüpft. D.h. die Regel wird nur zutreffen, wenn alle Bedingungen erfüllt sind. Wenn Sie eine ODER-Verknüpfung möchten, müssen Sie eine weitere Regel erstellen.\nDie Begriffe Auslöser und Bedingung werden synonym verwendet. Alle von ihnen sind Bedingungen, aber die letzte, die ihren erforderlichen Wert erfüllt, könnte als Auslöser bezeichnet werden, da sie das letzte Teil des Puzzles ist, um eine Regel auszuführen.</string>
<string name="timeframes">Zeiträume</string>
<string name="helpTextTimeFrame">Wenn Sie eine Regel mit einem Zeitraum erstellen, haben Sie zwei Möglichkeiten. Sie können wählen, ob der Auslöser besagt, daß der Zeitraum entweder verlassen ODER betreten wird. In jedem Fall wird die Regel nur einmal ausgelöst. Wenn eine Regel z.B. besagt \"betrete timeframe xyz\" und das Klingeltonprofil in Vibration ändert, bedeutet das NICHT, daß das Gerät hinterher automatisch wieder zum normalen Klingelprofil zurückschaltet. Wenn das erwünscht ist, muß eine weitere Regel mit einem Folgezeitraum erstellen werden.</string>
<string name="helpTextSound">Auf dem Hauptbildschirm können Sie die Funktion Tonänderunugen sperren benutzen, um vorrübergehend regelbasierte Tonänderungen zu deaktivieren. Z.B. könnten Sie in einer Situation oder an einem Ort sein, wo Klingeltöne normalerweise in Ordnung sind, aber dieses eine Mal würde es stören. Die Funktion wird automatisch wieder deaktiviert nachdem die eingestellte Zeit abgelaufen ist. Klicken Sie den + Knopf, um die angezeigte Zeit zur Frist hinzuzufügen. Sobald es aktiv ist, können Sie es mit dem Schalter rechts wieder abschalten (und so regelbasierte Tonänderungen wieder ermöglichen).</string>
@ -722,7 +730,7 @@
<string name="enterBroadcast">Geben Sie eine Aktion für den Broadcast ein.</string>
<string name="broadcastExplanation">Diese Aktion erlaubt es, einen Broadcast über das Nachrichtensystem von Android zu verschicken. Das ist für den Benutzer nicht sichtbar, aber Anwendungen, die sich für bestimmte Broadcasts registriert haben, können darauf reagieren.</string>
<string name="explanationBroadcastTrigger">La mayoría de los eventos en su teléfono se \"publicado\" transmitiéndolos a través del sistema operativo.\nPor ejemplo, activar / desactivar el modo avión activará dicha transmisión. Esas transmisiones no son automáticamente visibles / audibles, pero si una aplicación (como Automatización) está interesada, puede conectarse a ellas. Cuando ocurran, se le notificará y podrá reaccionar.\n\nPuede definir aquí un evento de difusión para el que la aplicación esperará. Puede ingresarlo manualmente, copiarlo y pegarlo desde algún lugar o elegir uno de la lista de sugerencias. Como este desencadenante está destinado a ser y seguir siendo muy flexible, no puedo proporcionarle explicaciones para los elementos.\n\nLa lista de sugerencias no pretende estar completa. Visite la siguiente URL para echar un vistazo a la documentación de Android.\nTambién cualquier aplicación puede enviar eventos personalizados que no aparecerán en la documentación de Android, por supuesto.\n\nMuchas transmisiones requieren permisos específicos para funcionar. Intento solicitar permisos donde sé que serán necesarios. Si cree que se requiere un permiso para la acción que ingresó, hágamelo saber.\n\nNo recibido significa que no ha habido tal transmisión desde que se inició el servicio. Responder a ciertos parámetros está en desarrollo.</string>
<string name="logsExplanation">Um eine unnötige Abnutzung Ihres Speichers zu vermeiden, werden Protokolle standardmäßig nicht gespeichert. Wenn Sie also ein Problem haben, aktivieren Sie bitte zuerst die Anmeldeeinstellungen und setzen Sie den Protokollpegel auf 5. Reproduzieren Sie dann das Problem. Erst dann können Protokolle angehängt werden.</string>
<string name="logsExplanation">Um eine unnötige Abnutzung Ihres Speichers zu vermeiden, werden Protokolle standardmäßig nicht gespeichert. Wenn Sie also ein Problem haben, aktivieren Sie bitte zuerst die Protokollierungseinstellungen und setzen Sie den Protokollpegel auf 5. Reproduzieren Sie dann das Problem. Erst dann können Protokolle angehängt werden.</string>
<string name="directionStringDoesNotContain">enthält nicht</string>
<string name="path">Pfad</string>
<string name="runExecutable">Programm/Script ausführen</string>
@ -779,4 +787,10 @@
<string name="startAppByStartService">via startService()</string>
<string name="showToastsForEvents">Toasts anzeigen</string>
<string name="showToastsForEventsSummary">Popups anzeigen, wenn Ereignisse wie Regelausführungen auftreten</string>
<string name="notificationAccessAndroid13">Nachdem Sie auf OK geklickt haben, wählen Sie Automatisierung, dann \"Benachrichtigungszugriff zulassen\", dann \"Zulassen\".\n\nAuf einigen Systemen ist diese Einstellung ausgegraut. In diesen Fällen müssen Sie zu \"settings\" -> \"apps\" -> \"Automation\" -> 3-Punkte-Menü -> Gehen Sie diese Einschränkungen auf. Danach kehren Sie hierher zurück.</string>
<string name="displayLanguage">Anzeigesprache</string>
<string name="displayLanguageSummary">Bestimmte Anzeigesprache wählen</string>
<string name="wifiMonitoringAlsoRequiresThis">Diese Berechtigung wird auch benötigt, wenn man die aktuelle WLAN Verbindung auslesen möchte.</string>
<string name="copyTextToClipboard">Text in die Zwischenablage kopieren</string>
<string name="textToCopy">Text, der kopiert werden soll</string>
</resources>

View File

@ -1,5 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="languageSystemDefault">Predeterminado</string>
<string name="languageEnglish">Inglés</string>
<string name="languageGerman">Alemán</string>
<string name="languageItalian">Italiano</string>
<string name="languageSpanish">Español</string>
<string name="languageDutch">Holandés</string>
<string name="languageRussian">Ruso</string>
<string name="languageFrench">Francés</string>
<string name="ruleActivate">Estoy activando regla %1$s</string>
<string name="profileActivate">Estoy activando perfil %1$s</string>
<string name="ruleActivateToggle">Estoy activando regla %1$s en el modo de invertir</string>
@ -359,14 +367,14 @@
<string name="networkAccuracy">Red exactitud [m]</string>
<string name="minimumTimeForLocationUpdates">Tiempo mínimo para cambio en milisegundos para actualizar posición</string>
<string name="timeForUpdate">Tiempo para actualizar [milisegundos]</string>
<string name="urlLegend">Variables: Puede usar esas variables. Mientras ejecuta van a sustituir con los valores correspondientes en su dispositivo. Incluya las paréntecis en su texto.\n\n[uniqueid] - el número único de su dispositivo\n[serialnr] - el número de serie de su dispositivo (&lt; Android 9)\n[latitude] - su latitud\n[longitude] - su longitud\n[phonenr] - Ùltimo número de llamada realizada tanto de salida como entrante\n[d] - Dia del mes, 2 digitos con cero al comienzo\n[m] - número del mes, 2 digitos con cero al comienzo\n[Y] - Número del año, 4 digitos\n[h] - Hora, formato 12 horas con cero al comienzo\n[H] - Hora, formato 24 horas con cero al comienzo\n[i] - Minutos con cero al comienzo\n[s] - Segundos con cero al comienzo\n[ms] - milisegundos\n[notificationTitle] - Título de la última notificación\n[notificationText] - Texto de la última notificación</string>
<string name="urlLegend">Variables: Puede usar esas variables. Mientras ejecuta van a sustituir con los valores correspondientes en su dispositivo. Incluya las paréntecis en su texto.\n\n[uniqueid] - el número único de su dispositivo\n[serialnr] - el número de serie de su dispositivo (&lt; Android 9)\n[latitude] - su latitud\n[longitude] - su longitud\n[phonenr] - Ùltimo número de llamada realizada tanto de salida como entrante\n[d] - Dia del mes, 2 digitos con cero al comienzo\n[m] - número del mes, 2 digitos con cero al comienzo\n[Y] - Número del año, 4 digitos\n[h] - Hora, formato 12 horas con cero al comienzo\n[H] - Hora, formato 24 horas con cero al comienzo\n[i] - Minutos con cero al comienzo\n[s] - Segundos con cero al comienzo\n[ms] - milisegundos\n[notificationTitle] - Título de la última notificación\n[notificationText] - Texto de la última notificación\n[variable-VARIABLENAME] - El valor de la variable definida personalizada</string>
<string name="screenRotationAlreadyEnabled">Rotación del monitor todavia esta activado.</string>
<string name="screenRotationAlreadyDisabled">Rotación del monitor todavia esta desactivado.</string>
<string name="needLocationPermForWifiList">Se puede usar la lista de wifis conocidos para determinar los sitios en los cuales estuvo. Por eso el permiso de localización es necesario para cargar la lista de wifis. Si quiere elegir uno de la lista tiene que conceder el permiso. En caso contrario todavia puede introducir un nombre wifi manualmente.</string>
<string name="com.wireguard.android.permission.CONTROL_TUNNELS">Controlar conexiones de la app Wireguard</string>
<string name="shareConfigAndLogFilesWithDev">Adjuntar configuración y procotolo.</string>
<string name="rootExplanation">Necesita permiso root para esta función. Después encienda la función \"ejecutar regla manualmente\" para presentar el permiso superuser dialogo. Es necesario elegir \"siempre permitir root para esta app\". En caso contrario la regla no puede funcionar en segundo plano.</string>
<string name="helpTextRules">Todas las condiciones están \"Y\"-conectadas. La regla solo va a aplicarse cuando todas las condiciones se aplican. Si quiere \"O\", cree otra regla.</string>
<string name="helpTextRules">Todas las condiciones están \"Y\"-conectadas. La regla solo va a aplicarse cuando todas las condiciones se aplican. Si quiere \"O\", cree otra regla.\nLos términos desencadenante y condición se utilizan como sinónimos. Todas ellas son condiciones, pero la última en cumplir con su valor requerido podría llamarse disparador porque es la pieza final del rompecabezas para hacer que se ejecute una regla.</string>
<string name="timeBetweenNoiseLevelMeasurementsSummary">Segundos entre dos ensayos de nivel de ruido</string>
<string name="timeBetweenNoiseLevelMeasurementsTitle">Segundos entre dos ensayos de nivel de ruido</string>
<string name="lengthOfNoiseLevelMeasurementsSummary">Duración en segundos para una prueba de nivel de ruido</string>
@ -778,4 +786,10 @@
<string name="startAppByStartService">via startService()</string>
<string name="showToastsForEvents">Mostrar toasts</string>
<string name="showToastsForEventsSummary">Mostrar notificaciones del sistema cuando se producen eventos como ejecuciones de reglas</string>
<string name="notificationAccessAndroid13">Después de cliquear en Aceptar, seleccione Automatización y, a continuación, seleccione \"Permitir acceso a notificaciones\", luego \"permitir\".\n\nEn algunos sistemas, esta configuración está atenuada. En esos casos, debe ir a \"configuración\" -> \"aplicaciones\" -> \"Automatización\" -> menú de 3 puntos -> Levante estas restricciones. Luego regreso aquí.</string>
<string name="displayLanguage">Idioma de visualización</string>
<string name="displayLanguageSummary">Establecer un idioma personalizado para la aplicación</string>
<string name="wifiMonitoringAlsoRequiresThis">Este permiso también es necesario si el disparador está utilizando la conexión wifi actual.</string>
<string name="copyTextToClipboard">Copiar texto al portapapeles</string>
<string name="textToCopy">Texto para copiar</string>
</resources>

View File

@ -1,5 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="languageSystemDefault">Valeur par défaut du système</string>
<string name="languageEnglish">Anglais</string>
<string name="languageGerman">Allemand</string>
<string name="languageItalian">Italien</string>
<string name="languageSpanish">Espagnol</string>
<string name="languageDutch">Néerlandais</string>
<string name="languageRussian">Russe</string>
<string name="languageFrench">Français</string>
<string name="ruleActivate">Activation de la règle %1$s</string>
<string name="profileActivate">Activation du profil %1$s</string>
<string name="ruleActivateToggle">Activation de la règle %1$s en mode alternatif</string>
@ -57,7 +65,7 @@
<string name="end">Arrêt</string>
<string name="save">Enregistrer</string>
<string name="urlToTrigger">URL à déclencher :</string>
<string name="urlLegend">Variables :\nVous pouvez utiliser les variables suivantes. Lors du déclenchement, elles seront remplacées par les variables correspondantes sur votre appareil. Insérez les parenthèses dans votre texte.\n\n[uniqueid] - Identifiant unique de votre appareil\n[serialnr] - Numéro de série de votre appareil (&lt; Android 9)\n[latitude] - Latitude de votre appraeil\n[longitude] - Longitude de votre appraeil\n[phonenr] - Numéro des derniers appels entrants ou sortants\n[d] - Jour du mois, @chiffres commençant par 0\n[m] - Valeur numérique du mois, avec @ chiffres\n[Y] - Valeur numérique de lannée, $ chiffres\n[h] - Format horaire 12heures, 2chiffres\n[H] - Format horaire 24heures, 2chiffres\n[i] - Nombre de minutes, 2chiffres\n[s] - Nombre de secondes, 2chiffres\n[ms] - Nombre de millisecondes\n[notificationTitle] - titre de la dernière notification\n[notificationText] - texte de la dernière notification</string>
<string name="urlLegend">Variables :\nVous pouvez utiliser les variables suivantes. Lors du déclenchement, elles seront remplacées par les variables correspondantes sur votre appareil. Insérez les parenthèses dans votre texte.\n\n[uniqueid] - Identifiant unique de votre appareil\n[serialnr] - Numéro de série de votre appareil (&lt; Android 9)\n[latitude] - Latitude de votre appraeil\n[longitude] - Longitude de votre appraeil\n[phonenr] - Numéro des derniers appels entrants ou sortants\n[d] - Jour du mois, @chiffres commençant par 0\n[m] - Valeur numérique du mois, avec @ chiffres\n[Y] - Valeur numérique de lannée, $ chiffres\n[h] - Format horaire 12heures, 2chiffres\n[H] - Format horaire 24heures, 2chiffres\n[i] - Nombre de minutes, 2chiffres\n[s] - Nombre de secondes, 2chiffres\n[ms] - Nombre de millisecondes\n[notificationTitle] - titre de la dernière notification\n[notificationText] - texte de la dernière notification\n[variable-VARIABLENAME] - Valeur de votre variable définie personnalisée</string>
<string name="wifi">wifi</string>
<string name="activating">Allumer</string>
<string name="deactivating">Éteindre</string>
@ -112,7 +120,7 @@
<string name="soundSettings">Réglages audio</string>
<string name="showHelp">Afficher laide</string>
<string name="rules">Règles</string>
<string name="helpTextRules">Tous les déclencheurs dune règle sont reliés par un lien logique ET, la règle ne sapplique que si tous les déclencheurs sont satisfaits. Pour un lien logique OU, créez une autre règle.</string>
<string name="helpTextRules">Tous les déclencheurs dune règle sont reliés par un lien logique ET, la règle ne sapplique que si tous les déclencheurs sont satisfaits. Pour un lien logique OU, créez une autre règle.\nLes termes déclencheur et condition sont utilisés comme synonymes. Toutes sont des conditions, mais la dernière à atteindre sa valeur requise pourrait être appelée déclencheur car c'est la dernière pièce du puzzle pour provoquer l'exécution d'une règle.</string>
<string name="timeframes">Délais déxécution</string>
<string name="helpTextTimeFrame">Si vous créez une règle avec une période déxécution vous avez deux options. Vous pouvez choisir déxécuter dans la période OU hors de la période. Quel que soit votre choix laction ne sera déclenchée quune seule fois. Si vous créez une règle avec pour déclencheur \«dans la période xyz\» qui modifie votre profil audio en le passant en mode vibreur cela ne signifie pas que votre téléphone repassera automatiquement en mode sonnerie à la fin de la période. Si vous souhaitez le faire vous devez définir une autre règle avec une autre période.</string>
<string name="helpTextSound">Sur lécran principal vous pouvez utiliser le verrouillage des modifications audio pour temporairement ne pas utiliser les règles de changement des paramètres audio. Par exemple vous pouvez êtes dans un lieu où à un moment où les sonneries peuvent être dérangeantes. Cette fonctionnalité se désactivera automatiquement une fois le temps configuré écoulé. Appuyez sur le bouton +15min pour ajouter la durée souhaitée. Une fois activé vous pouvez le désactiver en appuyant sur le bouton \«OUI\» (la règle de gestion des paramètres audio sera de nouveau active).</string>
@ -778,4 +786,10 @@
<string name="startAppByStartService">via startService()</string>
<string name="showToastsForEvents">Afficher les toasts</string>
<string name="showToastsForEventsSummary">Afficher les toasts lorsque des événements tels que des exécutions de règles se produisent</string>
<string name="notificationAccessAndroid13">Après avoir cliqué sur OK, sélectionnez Automatisation, puis sélectionnez \"Autoriser l\'accès aux notifications\ », puis \"Autoriser\ ».\n\nSur certains systèmes, ce paramètre est grisé. Dans ces cas, vous devez aller dans \"settings\ » -> \"apps\ » -> \"Automation\ » -> 3-dots-menu -> Levez ces restrictions. Ensuite, revenez ici.</string>
<string name="displayLanguage">Langue d\'affichage</string>
<string name="displayLanguageSummary">Définir une langue personnalisée pour l\'application</string>
<string name="wifiMonitoringAlsoRequiresThis">Cette autorisation est également requise si le déclencheur utilise la connexion wifi actuelle.</string>
<string name="copyTextToClipboard">Copier du texte dans le presse-papiers</string>
<string name="textToCopy">Texte à copier</string>
</resources>

View File

@ -228,7 +228,7 @@
<string name="helpTextEnergySaving">Molti produttori di dispositive Android cercano di salvare energia limitando le attività di applicazioni eseguite in secondo piano. Sfortunatamente, questo spesso fa che tali applicazioni non funzionino correttamente e Automation è fra queste. Puoi leggere questa <a href="https://dontkillmyapp.com/">pagina web</a> per scoprire come escludere Automation da queste funzioni di risparmio energetico.</string>
<string name="helpTextPoi">Una posizione è composta da coordinate GPS ed un raggio d\'azione. Dato che il posizionamento realizzato tramite i ripetitori del tuo gestore è piuttosto impreciso (ma veloce e consuma poca batteria), è bene non specificare un raggio troppo piccolo. L\'applicazione suggerisce un raggio minimo quando si crea una nuova posizione.</string>
<string name="helpTextProcessMonitoring">Se si specifica una regola che controlli l\'esecuzione di un processo, Automation eseguirà la verifica ogni x secondi (con x selezionabile nelle impostazioni). Bisogna considerare che un monitoraggio costante provocherebbe un rapido esaurimento della batteria e non esistono notifiche di questo tipo di attività proviste dal sistema operativo.</string>
<string name="helpTextRules">Gli eventi di attivazione sono in AND logico. La regola sarà eseguita solo se tutti gli eventi sono soddisfatti. Per l\'OR logico basta creare un\'altra regola.</string>
<string name="helpTextRules">Gli eventi di attivazione sono in AND logico. La regola sarà eseguita solo se tutti gli eventi sono soddisfatti. Per l\'OR logico basta creare un\'altra regola.\nI termini trigger e condizione vengono utilizzati come sinonimi. Tutte sono condizioni, ma l'ultima a soddisfare il valore richiesto potrebbe essere chiamata trigger perché è il pezzo finale del puzzle per causare l'esecuzione di una regola.</string>
<string name="helpTextSound">Nello schermo principale puoi bloccare temporaneamente i cambi ai suoni per evitare l\'esecuzione di regole che facciano cambi alle attività sonore. Per esempio, potresti essere in una situatione o in un luogo dove normalmente ascoltare il suono di una suoneria è ok, ma in questa occasione bisognerebbe evitarlo. Questa funzione si disattiverà automaticamente non appena sia trascorso il tempo selezionato. Fai Click sul bottone + per raggiungere la quantità di tempo desiderata. Una volta attiva, questa si può disattivare nuovamente usando il pulsante di attivazione (e in questo modo, si riattiveranno le regole basate su cambi sonori).</string>
<string name="helpTextTimeFrame">Se si specifica una regola con un intervallo temporale si hanno due scelte. È possibile scegliere se si desidera attivare la regola all\'interno o all\'esterno dell\'intervallo di tempo. In entrambi i casi l\'azione verrà eseguita una sola volta. Quindi, se si crea una regola che imposta il profilo su vibrazione nell\'intervallo temporale xyz, il telefono, passato allo stato vibrazione, rimarrà definitivamente in tale stato anche dopo lo scadere dell\'intervallo di tempo. Se si desidera che ciò avvenga è necessario specificare un\'altra regola con un altro periodo di tempo.</string>
<string name="helpTextToggable">Le regole hanno un segno di spunta chiamato "Reversibile". Ciò significa che, se una regola viene eseguita al verificarsi di un evento e poi quest\'ultimo si verifica una seconda volta, il comando della regola verrà eseguito una ulteriore volta in modalità inversa, se possibile. Attualmente questo avverrà solo in combinazione con etichette NFC. Se le si tocca due volte la regola associata invertirà la situazione attuale. Per esempio una regola “Reversibile” può disattivare il WiFi se attivo e viceversa attivarlo se non attivo.</string>
@ -396,6 +396,14 @@
<string name="roaming">Roaming</string>
<string name="rootExplanation">È necessario avere i permessi di root per utilizzare questa funzione. Una volta abilitato l\'accesso root, dovrai \"eseguire la regola manualmente\" per attivare la richiesta di autorizzazione come superuser. Nella finestra di popup di superuser, bisognerà consentire sempre l\'esecuzione dell\'applicazione con questi permessi. In caso contrario, la regola non potrà funzionare quando il telefono è inattivo.</string>
<string name="rule">Regola</string>
<string name="languageSystemDefault">Impostazione predefinita del sistema</string>
<string name="languageEnglish">Inglese</string>
<string name="languageGerman">Tedesco</string>
<string name="languageItalian">Italiano</string>
<string name="languageSpanish">Spagnolo</string>
<string name="languageDutch">Olandese</string>
<string name="languageRussian">Russo</string>
<string name="languageFrench">Francese</string>
<string name="ruleActivate">Attivando la regola %1$s</string>
<string name="ruleActivateToggle">Attivando la regola %1$s in modalità reversibile</string>
<string name="ruleActive">Regola attiva</string>
@ -534,7 +542,7 @@
<string name="tuesday">Martedì</string>
<string name="unknownError">Errore indeterminato.</string>
<string name="until">finchè</string>
<string name="urlLegend">Variabili:\n È possibile utilizzare le seguenti variabili. Quando attivate, saranno sostituite con il valore corrispondente sul tuo dispositivo. Includi le parentesi nel tuo testo.\n\n[uniqueid] - L\'ID unico del tuo dispositivo\n[serialnr] - Il numero di serie del tuo dispositivio (&lt; Android 9)\n[latitude] - La latitudine del tuo dispositivo\n[longitude] - La longitudine del tuo dispositivo\n[phonenr] - Numero dell\'ultima chiamata (entrante o uscente)\n[d] - Il giorno del mese, sempre 2 cifre con zero iniziale \n[m] - Mese in formato numerico, sempre 2 cifre con zero iniziale \n[Y] - L\anno, sempre con 4 cifre\n[h] - Ore in formato 12 ore, sempre 2 cifre con due punti\n[H] - Ore in formato 24 ore, sempre 2 cifre con due punti\n[i] - Minuti, sempre 2 cifre\n[s] - Secondi, sempre 2 cifre\n[ms] - millisecondi, sempre 3 cifre\n[notificationTitle] - titolo dell\'ultima notifica\n[notificationText] - testo dell\'ultima notifica</string>
<string name="urlLegend">Variabili:\n È possibile utilizzare le seguenti variabili. Quando attivate, saranno sostituite con il valore corrispondente sul tuo dispositivo. Includi le parentesi nel tuo testo.\n\n[uniqueid] - L\'ID unico del tuo dispositivo\n[serialnr] - Il numero di serie del tuo dispositivio (&lt; Android 9)\n[latitude] - La latitudine del tuo dispositivo\n[longitude] - La longitudine del tuo dispositivo\n[phonenr] - Numero dell\'ultima chiamata (entrante o uscente)\n[d] - Il giorno del mese, sempre 2 cifre con zero iniziale \n[m] - Mese in formato numerico, sempre 2 cifre con zero iniziale \n[Y] - L\anno, sempre con 4 cifre\n[h] - Ore in formato 12 ore, sempre 2 cifre con due punti\n[H] - Ore in formato 24 ore, sempre 2 cifre con due punti\n[i] - Minuti, sempre 2 cifre\n[s] - Secondi, sempre 2 cifre\n[ms] - millisecondi, sempre 3 cifre\n[notificationTitle] - titolo dell\'ultima notifica\n[notificationText] - testo dell\'ultima notifica\n[variable-VARIABLENAME] - Il valore della variabile definita in modo personalizzato</string>
<string name="urlToTrigger">URL da caricare:</string>
<string name="urlTooShort">L\'url deve avere almeno 10 caratteri.</string>
<string name="usbTetheringFailForAboveGingerbread">Questo molto probabilmente non funzionerà dato che sei su una versione superiore ad Android 2.3. Tuttavia è possibile utilizzare la connessione wifi tethering per attivare la regola.</string>
@ -779,4 +787,10 @@
<string name="startAppByStartService">tramite startService()</string>
<string name="showToastsForEvents">Mostra toast</string>
<string name="showToastsForEventsSummary">Mostrare gli avvisi popup quando si verificano eventi come le esecuzioni di regole</string>
<string name="notificationAccessAndroid13">Dopo aver fatto clic su OK, selezionare Automazione, quindi selezionare \"Consenti accesso notifiche\", quindi \"consentire\".\n\nSu alcuni sistemi questa impostazione è disattivata. In questi casi è necessario andare su \"impostazioni\" -> \"app\" -> \"Automazione\" -> menu a 3 punti -> Revoca queste restrizioni. Successivamente ritorno qui.</string>
<string name="displayLanguage">Lingua di visualizzazione</string>
<string name="displayLanguageSummary">Set a custom language for the application</string>
<string name="wifiMonitoringAlsoRequiresThis">Questa autorizzazione è necessaria anche se il trigger utilizza la connessione wifi corrente.</string>
<string name="copyTextToClipboard">Copiare testo negli appunti</string>
<string name="textToCopy">Testo da copiare</string>
</resources>

View File

@ -1,4 +1,12 @@
<resources>
<string name="languageSystemDefault">Systeemstandaard</string>
<string name="languageEnglish">Engels</string>
<string name="languageGerman">Duits</string>
<string name="languageItalian">Italiaans</string>
<string name="languageSpanish">Spaans</string>
<string name="languageDutch">Nederlands</string>
<string name="languageRussian">Russisch</string>
<string name="languageFrench">Frans</string>
<string name="ruleActivate">Activering regel %1$s</string>
<string name="profileActivate">Activeren profiel %1$s</string>
<string name="ruleActivateToggle">Activeren regel %1$s in Togglemode</string>
@ -56,7 +64,7 @@
<string name="end">Einde</string>
<string name="save">Opslaan</string>
<string name="urlToTrigger">URL om te activeren:</string>
<string name="urlLegend">Variabelen:U kunt de volgende variabelen gebruiken. Bij het triggeren zullen ze worden vervangen door de corresponderende waarde op je apparaat. Zet de haakjes in uw tekst. \n[uniqueid] - Het unieke id van uw apparaat[serialnr] - Het serienummer van uw apparaat (&lt; Android 9)[latitude] - De breedtegraad van uw apparaat[longitude] - De lengtegraad van uw apparaat[phonenr] - Nummer van het laatste inkomende of uitgaande gesprek[d] - Dag van de maand, 2 cijfers met voorloopnullen[m] - Numerieke weergave van een maand, met voorloopnullen[Y] - een volledige numerieke weergave van een jaar, 4 cijfers[h] - 12-uurs indeling van een uur, met voorloopnullen[H] - 24-uurs indeling van een uur, met voorloopnullen[i] - minuten, met voorloopnullen[s] - seconden, met voorloopnullen[ms] - milliseconden[notificationTitle] - titel van de laatste melding[notificationText] - tekst van de laatste melding</string>
<string name="urlLegend">Variabelen:U kunt de volgende variabelen gebruiken. Bij het triggeren zullen ze worden vervangen door de corresponderende waarde op je apparaat. Zet de haakjes in uw tekst. \n[uniqueid] - Het unieke id van uw apparaat[serialnr] - Het serienummer van uw apparaat (&lt; Android 9)[latitude] - De breedtegraad van uw apparaat[longitude] - De lengtegraad van uw apparaat[phonenr] - Nummer van het laatste inkomende of uitgaande gesprek[d] - Dag van de maand, 2 cijfers met voorloopnullen[m] - Numerieke weergave van een maand, met voorloopnullen[Y] - een volledige numerieke weergave van een jaar, 4 cijfers[h] - 12-uurs indeling van een uur, met voorloopnullen[H] - 24-uurs indeling van een uur, met voorloopnullen[i] - minuten, met voorloopnullen[s] - seconden, met voorloopnullen[ms] - milliseconden[notificationTitle] - titel van de laatste melding[notificationText] - tekst van de laatste melding\n[variable-VARIABLENAME] - De waarde van uw aangepaste gedefinieerde variabele</string>
<string name="wifi">wifi</string>
<string name="activating">Activeren</string>
<string name="deactivating">Deactiveren</string>
@ -110,7 +118,7 @@
<string name="soundSettings">Geluidsinstellingen</string>
<string name="showHelp">Toon help</string>
<string name="rules">Regels</string>
<string name="helpTextRules">Alle triggers in een regel zijn EN-verbonden (AND). De regel zal alleen worden toegepast als aan alle triggers is voldaan. Als je OR wilt, maak dan een andere regel.</string>
<string name="helpTextRules">Alle triggers in een regel zijn EN-verbonden (AND). De regel zal alleen worden toegepast als aan alle triggers is voldaan. Als je OR wilt, maak dan een andere regel.\nDe termen trigger en condition worden als synoniem gebruikt. Het zijn allemaal voorwaarden, maar de laatste die aan de vereiste waarde voldoet, kan trigger worden genoemd omdat het het laatste stukje van de puzzel is om een regel uit te voeren.</string>
<string name="timeframes">Tijdsbestek</string>
<string name="helpTextTimeFrame">Als je een regel opgeeft met een tijdsbestek heb je twee keuzes. Je kunt kiezen tussen het binnengaan OF het verlaten van een tijdframe. In beide gevallen wordt een regel slechts eenmaal getriggerd. Dus als je een regel maakt met als trigger "ingaan tijdvak xyz" en je laat je geluidsprofiel veranderen in trillen dan betekent dat niet dat de telefoon automatisch gaat rinkelen als het tijdvak voorbij is. Als je dat wilt moet je een andere regel specificeren met een ander tijdsbestek.</string>
<string name="helpTextSound">Op het hoofdscherm kunt u vergrendelingsgeluiden gebruiken om op regels gebaseerde geluidsveranderingen tijdelijk te vermijden. U kunt bijvoorbeeld in een situatie of plaats zijn waar ringtones normaal gesproken ok zijn, maar deze ene keer zou het storend zijn. De functie zal automatisch worden uitgeschakeld zodra de ingestelde tijd is verstreken. Klik op de + knop om de ingestelde tijd toe te voegen. Zodra het actief is kunt u het weer deactiveren met de toggle knop (en op die manier op regels gebaseerde geluidsveranderingen weer inschakelen).</string>
@ -777,5 +785,11 @@
<string name="startAppByStartService">via startService()</string>
<string name="showToastsForEvents">Toon toasts</string>
<string name="showToastsForEventsSummary">Pop-ups weergeven wanneer gebeurtenissen zoals regeluitvoeringen plaatsvinden</string>
<string name="notificationAccessAndroid13">Nadat u op OK hebt geklikt, selecteert u Automatisering, selecteert u vervolgens \"Toegang tot meldingen toestaan\" en vervolgens \"toestaan\".</string>
<string name="displayLanguage">Taal weergeven</string>
<string name="displayLanguageSummary">Een aangepaste taal instellen voor de toepassing</string>
<string name="wifiMonitoringAlsoRequiresThis">Deze toestemming is ook vereist als de trigger de huidige wifi-verbinding gebruikt.</string>
<string name="copyTextToClipboard">Tekst naar klembord kopiëren</string>
<string name="textToCopy">Tekst om te kopiëren</string>
</resources>

View File

@ -1,5 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="languageSystemDefault">Системное значение по умолчанию</string>
<string name="languageEnglish">Английский</string>
<string name="languageGerman">Немецкий</string>
<string name="languageItalian">Итальянский</string>
<string name="languageSpanish">Испанский</string>
<string name="languageDutch">Нидерландский</string>
<string name="languageRussian">русский</string>
<string name="languageFrench">Французский</string>
<string name="ruleActivate">Активация правила %1$s</string>
<string name="profileActivate">Активация профиля %1$s</string>
<string name="ruleActivateToggle">Активация правила %1$s в режиме переключения</string>
@ -57,7 +65,7 @@
<string name="end">Конец</string>
<string name="save">Сохранить</string>
<string name="urlToTrigger">URL для вызова:</string>
<string name="urlLegend">Переменные:\nВы можете использовать следующие переменные. При срабатывании они будут заменены соответствующим значением на вашем устройстве. Скобки- часть переменной.\n\n[uniqueid] - уникальный идентификатор\n[serialnr] - серийный номер(&lt; Android 9)\n[latitude] - широта\n[longitude] - долгота\n[phonenr] - Номер последнего входящего или исходящего вызова\n[d] - День месяца, 2 цифры с начальными нулями\n[m] Месяц, 2 цифры с начальными нулями\n[Y] - Год, 4 цифры\n[h] - 12-часовой формат часа с начальными нулями\n[H] - 24-часовой формат часа с начальными нулями\n[i] - Минуты с начальными нулями\n[s] - Секунды с начальными нулями\n[ms] - миллисекунды\n[notificationTitle] - заголовок последнего уведомления\n[notificationText] - текст последнего уведомления</string>
<string name="urlLegend">Переменные:\nВы можете использовать следующие переменные. При срабатывании они будут заменены соответствующим значением на вашем устройстве. Скобки- часть переменной.\n\n[uniqueid] - уникальный идентификатор\n[serialnr] - серийный номер(&lt; Android 9)\n[latitude] - широта\n[longitude] - долгота\n[phonenr] - Номер последнего входящего или исходящего вызова\n[d] - День месяца, 2 цифры с начальными нулями\n[m] Месяц, 2 цифры с начальными нулями\n[Y] - Год, 4 цифры\n[h] - 12-часовой формат часа с начальными нулями\n[H] - 24-часовой формат часа с начальными нулями\n[i] - Минуты с начальными нулями\n[s] - Секунды с начальными нулями\n[ms] - миллисекунды\n[notificationTitle] - заголовок последнего уведомления\n[notificationText] - текст последнего уведомления\n[variable-VARIABLENAME] - Значение пользовательской определенной переменной</string>
<string name="wifi">Wi-Fi</string>
<string name="activating">Активация</string>
<string name="deactivating">Деактивация</string>
@ -112,7 +120,7 @@
<string name="soundSettings">Настройки звука</string>
<string name="showHelp">Показать справку</string>
<string name="rules">Правила</string>
<string name="helpTextRules">Все триггеры в правиле связаны логикой И. Правило будет применяться только в том случае, если будут выполнены все триггеры. Если вы хотите логику ИЛИ, создайте другое правило.</string>
<string name="helpTextRules">Все триггеры в правиле связаны логикой И. Правило будет применяться только в том случае, если будут выполнены все триггеры. Если вы хотите логику ИЛИ, создайте другое правило.\nТермины триггер и условие используются как синонимы. Все они являются условиями, но последний, отвечающий требуемому значению, может быть назван триггером, потому что это последняя часть головоломки, которая вызывает выполнение правила.</string>
<string name="timeframes">Временные интервалы</string>
<string name="helpTextTimeFrame">Если вы указываете правило с временными интервалами, у вас есть два варианта. Вы можете выбрать между началом ИЛИ окончанием временного интервала. Правило срабатывает только один раз. Поэтому, если вы создадите правило с &quot;начало временного интервала&quot; в качестве триггера и позволите ему изменить ваш звуковой профиль на вибрацию, это не означает, что телефон автоматически перейдет в обычный режим, когда временной интервал закончится. Если вам это необходимо,создайте другое правило с другим временным интервалом.</string>
<string name="helpTextSound">На главном экране есть возможность заблокировать изменение уровня громкости вызова сконфигурированными правилами, например, вы можете быть в ситуации или месте, где необходим обычный режим звука, но в настоящее время его использовать нельзя. Эта функция автоматически отключится по истечении заданного времени. Нажмите кнопку +, чтобы задать необходимый период времени. После включения, вы можете вручную выключить его с помощью кнопки переключения (и таким образом снова включить изменения громкости звука).</string>
@ -836,4 +844,10 @@
<string name="startAppByStartService">дорога startService()</string>
<string name="showToastsForEvents">Показать тосты</string>
<string name="showToastsForEventsSummary">Отображение всплывающих уведомлений при таких событиях, как выполнение правил</string>
<string name="notificationAccessAndroid13">После нажатия кнопки «ОК» выберите «Автоматизация», затем выберите «Разрешить доступ к уведомлениям», затем «Разрешить».</string>
<string name="displayLanguage">Язык интерфейса</string>
<string name="displayLanguageSummary">Язык интерфейса</string>
<string name="wifiMonitoringAlsoRequiresThis">Это разрешение также требуется, если триггер использует текущее соединение Wi-Fi.</string>
<string name="copyTextToClipboard">Копирование текста в буфер обмена</string>
<string name="textToCopy">Текст для копирования</string>
</resources>

View File

@ -22,6 +22,28 @@
<item name="3">3</item>
</string-array>
<string-array name="displayLanguageOptions">
<item name="0">@string/languageSystemDefault</item>
<item name="1">@string/languageEnglish</item>
<item name="2">@string/languageGerman</item>
<item name="3">@string/languageItalian</item>
<item name="4">@string/languageSpanish</item>
<item name="5">@string/languageDutch</item>
<item name="6">@string/languageRussian</item>
<item name="7">@string/languageFrench</item>
</string-array>
<string-array name="displayLanguageValues">
<item name="0">systemDefaultLanguage</item>
<item name="1">en</item>
<item name="2">de</item>
<item name="3">it</item>
<item name="4">es</item>
<item name="5">nl</item>
<item name="6">ru</item>
<item name="7">fr</item>
</string-array>
<string-array name="tabsPlacementOptions">
<item name="0">@string/top</item>
<item name="1">@string/bottom</item>
@ -33,4 +55,12 @@
<item name="3">3</item>
</string-array>
<string name="languageSystemDefault">System default</string>
<string name="languageEnglish">English</string>
<string name="languageGerman">German</string>
<string name="languageItalian">Italian</string>
<string name="languageSpanish">Spanish</string>
<string name="languageDutch">Dutch</string>
<string name="languageRussian">Russian</string>
<string name="languageFrench">French</string>
</resources>

View File

@ -70,7 +70,7 @@
<string name="end">End</string>
<string name="save">Save</string>
<string name="urlToTrigger">URL to trigger:</string>
<string name="urlLegend">Variables:\nYou can use the following variables. Upon triggering they will be replaced with the corresponding value on your device. Include the brackets in your text.\n\n[uniqueid] - Your device\'s unique id\n[serialnr] - Your device\'s serial number (&lt; Android 9)\n[latitude] - Your device\'s latitude\n[longitude] - Your device\'s longitude\n[phonenr] - Number of last incoming or outgoing call\n[d] - Day of the month, 2 digits with leading zeros\n[m] - Numeric representation of a month, with leading zeros\n[Y] - A full numeric representation of a year, 4 digits\n[h] - 12-hour format of an hour with leading zeros\n[H] - 24-hour format of an hour with leading zeros\n[i] - Minutes with leading zeros\n[s] - Seconds, with leading zeros\n[ms] - milliseconds\n[notificationTitle] - title of last notification\n[notificationText] - text of last notification</string>
<string name="urlLegend">Variables:\nYou can use the following variables. Upon triggering they will be replaced with the corresponding value on your device. Include the brackets in your text.\n\n[uniqueid] - Your device\'s unique id\n[serialnr] - Your device\'s serial number (&lt; Android 9)\n[latitude] - Your device\'s latitude\n[longitude] - Your device\'s longitude\n[phonenr] - Number of last incoming or outgoing call\n[d] - Day of the month, 2 digits with leading zeros\n[m] - Numeric representation of a month, with leading zeros\n[Y] - A full numeric representation of a year, 4 digits\n[h] - 12-hour format of an hour with leading zeros\n[H] - 24-hour format of an hour with leading zeros\n[i] - Minutes with leading zeros\n[s] - Seconds, with leading zeros\n[ms] - milliseconds\n[notificationTitle] - title of last notification\n[notificationText] - text of last notification\n[variable-VARIABLENAME] - The value of your custom defined variable</string>
<string name="wifi">wifi</string>
<string name="activating">Activating</string>
<string name="deactivating">Deactivating</string>
@ -125,7 +125,7 @@
<string name="soundSettings">Sound settings</string>
<string name="showHelp">Show help</string>
<string name="rules">Rules</string>
<string name="helpTextRules">All triggers in a rule are AND-connected. The rule will only apply if all triggers are met. If you want OR, create another rule.</string>
<string name="helpTextRules">All triggers in a rule are AND-connected. The rule will only apply if all triggers are met. If you want OR, create another rule.\nThe terms trigger and condition are being used synonymously. All of them are conditions, but the last one to meet its required value could be called trigger because it is the final piece of the puzzle to cause a rule to be executed.</string>
<string name="timeframes">TimeFrames</string>
<string name="helpTextTimeFrame">If you specify a rule with a timeframe you have two choices. You can choose between entering OR leaving a timeframe. Either way a rule is triggered only once. So if you create a rule that has \"entering timeframe xyz\" as trigger and let it change your sound profile to vibrate that does not mean that the phone will automatically go to ring if the timeframe is over. If you want that you need to specify another rule with another timeframe.</string>
<string name="helpTextSound">On the main screen you can use lock sound changes to temporarily avoid rule based sound changes. E.g. you may be in a situation or place where usually ringtones are ok, but this one time it would be disturbing. The feature will automatically deactivate once the configured time has elapsed. Click the + button to add the given amount of time. Once it is active you may deactivate it again using the toggle button (and that way enable rule based sound changes again).</string>
@ -876,4 +876,10 @@
<string name="startAppByStartService">by startService()</string>
<string name="showToastsForEvents">Show toasts</string>
<string name="showToastsForEventsSummary">Show toasts when events like rule executions occur</string>
<string name="notificationAccessAndroid13">After clicking ok, select Automation, then select \"Allow notification access\", then \"allow\".\n\nOn some systems this setting is greyed out. In those cases you need to go to \"settings\" -> \"apps\" -> \"Automation\" -> 3-dots-menu -> Lift these restrictions. Afterwards return here.</string>
<string name="displayLanguage">Display language</string>
<string name="displayLanguageSummary">Set a custom language for the application</string>
<string name="wifiMonitoringAlsoRequiresThis">This permission is also required if the trigger is using the current wifi connection.</string>
<string name="copyTextToClipboard">Copy text to clipboard</string>
<string name="textToCopy">Text to copy</string>
</resources>

View File

@ -0,0 +1,3 @@
* Fixed: Editing variable action was not possible
* Added: Possibility to pick a custom language in settings
* New action: Copy text to clipboard