Compare commits
21 Commits
666129de16
...
a845ea7c63
Author | SHA1 | Date | |
---|---|---|---|
a845ea7c63 | |||
2d9695344b | |||
24d05e6d87 | |||
07b0513eae | |||
e445b787a9 | |||
82156059fa | |||
b976ff95b6 | |||
a4b2745b7b | |||
844be6a4a7 | |||
49a48fc371 | |||
722750b724 | |||
ab51eb3655 | |||
7b88e7a612 | |||
bb2f5c9842 | |||
883a7e8341 | |||
bfc0e3ac4f | |||
23ded3a851 | |||
6d363fd02d | |||
3c0f889db7 | |||
d018c27f0e | |||
7e36f0f32e |
@ -11,8 +11,8 @@ android {
|
||||
compileSdkVersion 29
|
||||
buildToolsVersion '29.0.2'
|
||||
useLibrary 'org.apache.http.legacy'
|
||||
versionCode 105
|
||||
versionName "1.6.34"
|
||||
versionCode 106
|
||||
versionName "1.6.35"
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
@ -40,7 +40,6 @@ android {
|
||||
googlePlayFlavor
|
||||
{
|
||||
dimension "version"
|
||||
// applicationIdSuffix ".googlePlay"
|
||||
versionNameSuffix "-googlePlay"
|
||||
targetSdkVersion 29
|
||||
}
|
||||
@ -48,15 +47,12 @@ android {
|
||||
fdroidFlavor
|
||||
{
|
||||
dimension "version"
|
||||
// applicationIdSuffix ".fdroid"
|
||||
// versionNameSuffix "-fdroid"
|
||||
targetSdkVersion 28
|
||||
}
|
||||
|
||||
apkFlavor
|
||||
{
|
||||
dimension "version"
|
||||
// applicationIdSuffix ".apk"
|
||||
versionNameSuffix "-apk"
|
||||
targetSdkVersion 28
|
||||
}
|
||||
@ -72,6 +68,7 @@ dependencies {
|
||||
|
||||
|
||||
implementation 'com.linkedin.dexmaker:dexmaker:2.25.0'
|
||||
implementation 'org.apache.commons:commons-lang3:3.0'
|
||||
|
||||
implementation 'androidx.appcompat:appcompat:1.2.0'
|
||||
implementation 'com.google.android.material:material:1.3.0'
|
||||
|
@ -10,8 +10,8 @@
|
||||
{
|
||||
"type": "SINGLE",
|
||||
"filters": [],
|
||||
"versionCode": 104,
|
||||
"versionName": "1.6.33-googlePlay",
|
||||
"versionCode": 106,
|
||||
"versionName": "1.6.35-googlePlay",
|
||||
"outputFile": "app-googlePlayFlavor-release.apk"
|
||||
}
|
||||
]
|
||||
|
@ -176,6 +176,15 @@ public class Rule implements Comparable<Rule>
|
||||
ruleCollection.add(this);
|
||||
boolean returnValue = XmlFileInterface.writeFile();
|
||||
|
||||
try
|
||||
{
|
||||
XmlFileInterface.readFile();
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
Miscellaneous.logEvent("w", "Read file", Log.getStackTraceString(e), 3);
|
||||
}
|
||||
|
||||
if(returnValue)
|
||||
{
|
||||
AutomationService service = AutomationService.getInstance();
|
||||
@ -219,6 +228,19 @@ public class Rule implements Comparable<Rule>
|
||||
return XmlFileInterface.writeFile();
|
||||
}
|
||||
|
||||
public boolean cloneRule(Context context)
|
||||
{
|
||||
Rule newRule = new Rule();
|
||||
newRule.setName(this.getName() + " - clone");
|
||||
newRule.setRuleActive(this.isRuleActive());
|
||||
newRule.setRuleToggle(this.isRuleToggle());
|
||||
|
||||
newRule.setTriggerSet(this.getTriggerSet());
|
||||
newRule.setActionSet(this.getActionSet());
|
||||
|
||||
return newRule.create(context);
|
||||
}
|
||||
|
||||
private boolean checkBeforeSaving(Context context, boolean changeExistingRule)
|
||||
{
|
||||
if(this.getName() == null || this.getName().length()==0)
|
||||
|
@ -173,6 +173,15 @@ public class Rule implements Comparable<Rule>
|
||||
ruleCollection.add(this);
|
||||
boolean returnValue = XmlFileInterface.writeFile();
|
||||
|
||||
try
|
||||
{
|
||||
XmlFileInterface.readFile();
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
Miscellaneous.logEvent("w", "Read file", Log.getStackTraceString(e), 3);
|
||||
}
|
||||
|
||||
if(returnValue)
|
||||
{
|
||||
AutomationService service = AutomationService.getInstance();
|
||||
|
@ -175,6 +175,15 @@ public class Rule implements Comparable<Rule>
|
||||
ruleCollection.add(this);
|
||||
boolean returnValue = XmlFileInterface.writeFile();
|
||||
|
||||
try
|
||||
{
|
||||
XmlFileInterface.readFile();
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
Miscellaneous.logEvent("w", "Read file", Log.getStackTraceString(e), 3);
|
||||
}
|
||||
|
||||
if(returnValue)
|
||||
{
|
||||
AutomationService service = AutomationService.getInstance();
|
||||
@ -218,6 +227,19 @@ public class Rule implements Comparable<Rule>
|
||||
return XmlFileInterface.writeFile();
|
||||
}
|
||||
|
||||
public boolean cloneRule(Context context)
|
||||
{
|
||||
Rule newRule = new Rule();
|
||||
newRule.setName(this.getName() + " - clone");
|
||||
newRule.setRuleActive(this.isRuleActive());
|
||||
newRule.setRuleToggle(this.isRuleToggle());
|
||||
|
||||
newRule.setTriggerSet(this.getTriggerSet());
|
||||
newRule.setActionSet(this.getActionSet());
|
||||
|
||||
return newRule.create(context);
|
||||
}
|
||||
|
||||
private boolean checkBeforeSaving(Context context, boolean changeExistingRule)
|
||||
{
|
||||
if(this.getName() == null || this.getName().length()==0)
|
||||
|
@ -345,18 +345,11 @@ public class Action
|
||||
* Old version. Those checks should not be necessary anymore. Also they didn't work
|
||||
* because profiles were created with names like silent, vibrate and normal.
|
||||
*/
|
||||
// if(this.getParameter2().equals("silent"))
|
||||
// Actions.setSound(context, AudioManager.RINGER_MODE_SILENT);
|
||||
// else if(this.getParameter2().equals("vibrate"))
|
||||
// Actions.setSound(context, AudioManager.RINGER_MODE_VIBRATE);
|
||||
// else if(this.getParameter2().equals("normal"))
|
||||
// Actions.setSound(context, AudioManager.RINGER_MODE_NORMAL);
|
||||
// else
|
||||
// {
|
||||
|
||||
Profile p = Profile.getByName(this.getParameter2());
|
||||
if (p != null)
|
||||
p.activate(context);
|
||||
// }
|
||||
|
||||
break;
|
||||
case triggerUrl:
|
||||
triggerUrl(context);
|
||||
@ -491,49 +484,12 @@ public class Action
|
||||
{
|
||||
Miscellaneous.logEvent("i", "HTTP Request", "Attempt " + String.valueOf(attempts++) + " of " + String.valueOf(Settings.httpAttempts), 3);
|
||||
|
||||
// try
|
||||
// {
|
||||
// Either thorough checking or no encryption
|
||||
if(!Settings.httpAcceptAllCertificates | !urlString.toLowerCase(Locale.getDefault()).contains("https"))
|
||||
// {
|
||||
// URL url = new URL(urlString);
|
||||
// URLConnection urlConnection = url.openConnection();
|
||||
// urlConnection.setReadTimeout(Settings.httpAttemptsTimeout * 1000);
|
||||
// InputStream in = urlConnection.getInputStream();
|
||||
// response = Miscellaneous.convertStreamToString(in);
|
||||
|
||||
if(!Settings.httpAcceptAllCertificates || !urlString.toLowerCase(Locale.getDefault()).contains("https"))
|
||||
response = Miscellaneous.downloadURL(urlString, urlUsername, urlPassword);
|
||||
// }
|
||||
else
|
||||
// {
|
||||
response = Miscellaneous.downloadURLwithoutCertificateChecking(urlString, urlUsername, urlPassword);
|
||||
// post = new HttpGet(new URI(urlString));
|
||||
// final HttpParams httpParams = new BasicHttpParams();
|
||||
// HttpConnectionParams.setConnectionTimeout(httpParams, Settings.httpAttemptsTimeout * 1000);
|
||||
// HttpClient client = new DefaultHttpClient(httpParams);
|
||||
//
|
||||
// client = sslClient(client);
|
||||
//
|
||||
// // Execute HTTP Post Request
|
||||
// HttpResponse result = client.execute(post);
|
||||
// response = EntityUtils.toString(result.getEntity());
|
||||
// }
|
||||
// }
|
||||
// catch (URISyntaxException e)
|
||||
// {
|
||||
// Miscellaneous.logEvent("w", "HTTP RESULT", Log.getStackTraceString(e), 3);
|
||||
// }
|
||||
// catch (ClientProtocolException e)
|
||||
// {
|
||||
// Miscellaneous.logEvent("w", "HTTP RESULT", Log.getStackTraceString(e), 3);
|
||||
// }
|
||||
// catch (IOException e)
|
||||
// {
|
||||
// Miscellaneous.logEvent("w", "HTTP RESULT", Log.getStackTraceString(e), 3);
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
// finally
|
||||
// {
|
||||
|
||||
try
|
||||
{
|
||||
Thread.sleep(Settings.httpAttemptGap * 1000);
|
||||
@ -542,10 +498,9 @@ public class Action
|
||||
{
|
||||
Miscellaneous.logEvent("w", "HTTP RESULT", "Failed to pause between HTTP requests.", 5);
|
||||
}
|
||||
// }
|
||||
}
|
||||
|
||||
// Miscellaneous.logEvent("i", "HTTPS RESULT", response, 3);
|
||||
Miscellaneous.logEvent("i", "HTTPS RESULT", response, 5);
|
||||
|
||||
return response;
|
||||
}
|
||||
|
@ -26,10 +26,14 @@ import java.util.ArrayList;
|
||||
public class ActivityMainRules extends ActivityGeneric
|
||||
{
|
||||
private ListView ruleListView;
|
||||
ArrayList<Rule> ruleList = new ArrayList<>();
|
||||
private ArrayAdapter<Rule> ruleListViewAdapter;
|
||||
public static Rule ruleToEdit;
|
||||
protected static ActivityMainRules instance = null;
|
||||
|
||||
public static final int requestCodeCreateRule = 3000;
|
||||
public static final int requestCodeChangeRule = 4000;
|
||||
|
||||
public static ActivityMainRules getInstance()
|
||||
{
|
||||
if(instance == null)
|
||||
@ -52,21 +56,14 @@ public class ActivityMainRules extends ActivityGeneric
|
||||
@Override
|
||||
public void onClick(View v)
|
||||
{
|
||||
// if(!ActivityPermissions.havePermission(ActivityPermissions.writeExternalStoragePermissionName, ActivityMainRules.this))
|
||||
// {
|
||||
// Toast.makeText(ActivityMainRules.this, getResources().getString(R.string.appRequiresPermissiontoAccessExternalStorage), Toast.LENGTH_LONG).show();
|
||||
// return;
|
||||
// }
|
||||
|
||||
ruleToEdit = null;
|
||||
Intent startAddRuleIntent = new Intent(ActivityMainRules.this, ActivityManageRule.class);
|
||||
startActivityForResult(startAddRuleIntent, 3000);
|
||||
startActivityForResult(startAddRuleIntent, requestCodeCreateRule);
|
||||
}
|
||||
});
|
||||
|
||||
ruleListViewAdapter = new RuleArrayAdapter(this, R.layout.view_for_rule_listview, ruleList);
|
||||
ruleListView = (ListView)findViewById(R.id.lvRuleList);
|
||||
|
||||
ruleListViewAdapter = new RuleArrayAdapter(this, R.layout.view_for_rule_listview, Rule.getRuleCollection());
|
||||
ruleListView.setClickable(true);
|
||||
|
||||
ruleListView.setOnItemLongClickListener(new OnItemLongClickListener()
|
||||
@ -112,7 +109,6 @@ public class ActivityMainRules extends ActivityGeneric
|
||||
|
||||
private static class RuleArrayAdapter extends ArrayAdapter<Rule>
|
||||
{
|
||||
|
||||
public RuleArrayAdapter(Context context, int resource, ArrayList<Rule> objects)
|
||||
{
|
||||
super(context, resource, objects);
|
||||
@ -163,13 +159,13 @@ public class ActivityMainRules extends ActivityGeneric
|
||||
if(AutomationService.isMyServiceRunning(this))
|
||||
bindToService();
|
||||
|
||||
if(requestCode == 3000) //add Rule
|
||||
if(requestCode == requestCodeCreateRule) //add Rule
|
||||
{
|
||||
ruleToEdit = null; //clear cache
|
||||
updateListView();
|
||||
}
|
||||
|
||||
if(requestCode == 4000) //editRule
|
||||
if(requestCode == requestCodeChangeRule) //editRule
|
||||
{
|
||||
ruleToEdit = null; //clear cache
|
||||
updateListView();
|
||||
@ -190,7 +186,7 @@ public class ActivityMainRules extends ActivityGeneric
|
||||
{
|
||||
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
|
||||
alertDialogBuilder.setTitle(getResources().getString(R.string.whatToDoWithRule));
|
||||
alertDialogBuilder.setItems(new String[]{ getResources().getString(R.string.runManually), getResources().getString(R.string.edit), getResources().getString(R.string.deleteCapital) }, new DialogInterface.OnClickListener()
|
||||
alertDialogBuilder.setItems(new String[]{ getResources().getString(R.string.runManually), getResources().getString(R.string.edit), getResources().getString(R.string.deleteCapital), getResources().getString(R.string.clone) }, new DialogInterface.OnClickListener()
|
||||
{
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which)
|
||||
@ -212,11 +208,22 @@ public class ActivityMainRules extends ActivityGeneric
|
||||
case 1:
|
||||
ruleToEdit = ruleThisIsAbout;
|
||||
Intent manageSpecificRuleIntent = new Intent (ActivityMainRules.this, ActivityManageRule.class);
|
||||
startActivityForResult(manageSpecificRuleIntent, 4000);
|
||||
startActivityForResult(manageSpecificRuleIntent, requestCodeChangeRule);
|
||||
break;
|
||||
case 2:
|
||||
if(ruleThisIsAbout.delete())
|
||||
{
|
||||
ruleToEdit = null; //clear cache
|
||||
updateListView();
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
ruleToEdit = ruleThisIsAbout;
|
||||
if(ruleToEdit.cloneRule(ActivityMainRules.this))
|
||||
{
|
||||
ruleToEdit = null; //clear cache
|
||||
updateListView();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -229,6 +236,11 @@ public class ActivityMainRules extends ActivityGeneric
|
||||
public void updateListView()
|
||||
{
|
||||
Miscellaneous.logEvent("i", "ListView", "Attempting to update RuleListView", 4);
|
||||
|
||||
ruleList.clear();
|
||||
for(Rule r : Rule.getRuleCollection())
|
||||
ruleList.add(r);
|
||||
|
||||
try
|
||||
{
|
||||
if(ruleListView.getAdapter() == null)
|
||||
|
@ -45,6 +45,7 @@ public class ActivityMainScreen extends ActivityGeneric
|
||||
private ToggleButton toggleService, tbLockSound;
|
||||
private Button bShowHelp, bPrivacy, bSettingsErase, bAddSoundLockTIme;
|
||||
private TextView tvActivePoi, tvClosestPoi, tvLastRule, tvMainScreenNotePermissions, tvMainScreenNoteFeaturesFromOtherFlavor, tvMainScreenNoteLocationImpossibleBlameGoogle, tvMainScreenNoteNews, tvlockSoundDuration;
|
||||
private static boolean updateNoteDisplayed = false;
|
||||
|
||||
private ListView lvRuleHistory;
|
||||
private ArrayAdapter<Rule> ruleHistoryListViewAdapter;
|
||||
@ -407,6 +408,15 @@ public class ActivityMainScreen extends ActivityGeneric
|
||||
else
|
||||
activityMainScreenInstance.checkForNews();
|
||||
|
||||
if(BuildConfig.FLAVOR.equals("apkFlavor") && Settings.automaticUpdateCheck)
|
||||
{
|
||||
Calendar now = Calendar.getInstance();
|
||||
if (Settings.lastUpdateCheck == Settings.default_lastUpdateCheck || now.getTimeInMillis() >= Settings.lastUpdateCheck + (long)(Settings.updateCheckFrequencyDays * 24 * 60 * 60 * 1000))
|
||||
{
|
||||
activityMainScreenInstance.checkForUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
Settings.considerDone(Settings.constNewsOptInDone);
|
||||
Settings.writeSettings(Miscellaneous.getAnyContext());
|
||||
}
|
||||
@ -588,6 +598,15 @@ public class ActivityMainScreen extends ActivityGeneric
|
||||
Miscellaneous.messageBox(title, text, ActivityMainScreen.getActivityMainScreenInstance());
|
||||
}
|
||||
|
||||
synchronized void checkForUpdate()
|
||||
{
|
||||
if(Settings.automaticUpdateCheck)
|
||||
{
|
||||
AsyncTasks.AsyncTaskUpdateCheck updateCheckTask = new AsyncTasks.AsyncTaskUpdateCheck();
|
||||
updateCheckTask.execute(ActivityMainScreen.this);
|
||||
}
|
||||
}
|
||||
|
||||
synchronized void checkForNews()
|
||||
{
|
||||
if(Settings.displayNewsOnMainScreen)
|
||||
@ -617,4 +636,38 @@ public class ActivityMainScreen extends ActivityGeneric
|
||||
Miscellaneous.logEvent("e", "Error displaying news", Log.getStackTraceString(e), 3);
|
||||
}
|
||||
}
|
||||
|
||||
public void processUpdateCheckResult(Boolean result)
|
||||
{
|
||||
if(result && !updateNoteDisplayed)
|
||||
{
|
||||
updateNoteDisplayed = true;
|
||||
|
||||
AlertDialog.Builder updateNoteBuilder = new AlertDialog.Builder(ActivityMainScreen.this);
|
||||
updateNoteBuilder.setMessage(getResources().getString(R.string.updateAvailable));
|
||||
updateNoteBuilder.setPositiveButton(getResources().getString(R.string.yes), new DialogInterface.OnClickListener()
|
||||
{
|
||||
@Override
|
||||
public void onClick(DialogInterface dialogInterface, int i)
|
||||
{
|
||||
String url = "https://server47.de/automation/";
|
||||
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
|
||||
startActivity(browserIntent);
|
||||
|
||||
updateNoteDisplayed = false;
|
||||
}
|
||||
});
|
||||
updateNoteBuilder.setNegativeButton(getResources().getString(R.string.no), new DialogInterface.OnClickListener()
|
||||
{
|
||||
@Override
|
||||
public void onClick(DialogInterface dialogInterface, int i)
|
||||
{
|
||||
updateNoteDisplayed = false;
|
||||
}
|
||||
});
|
||||
updateNoteBuilder.show();
|
||||
}
|
||||
|
||||
AsyncTasks.AsyncTaskUpdateCheck.checkRunning = false;
|
||||
}
|
||||
}
|
@ -16,6 +16,8 @@ import android.widget.Toast;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.documentfile.provider.DocumentFile;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
|
||||
@ -27,7 +29,7 @@ public class ActivityMaintenance extends Activity
|
||||
|
||||
final static String prefsFileName = "com.jens.automation2_preferences.xml";
|
||||
|
||||
TextView tvFileStoreLocation;
|
||||
TextView tvFileStoreLocation, tvAppVersion;
|
||||
Button bVolumeTest, bMoreSettings, bSettingsSetToDefault, bShareConfigAndLog, bImportConfiguration, bExportConfiguration;
|
||||
|
||||
@Override
|
||||
@ -101,6 +103,13 @@ public class ActivityMaintenance extends Activity
|
||||
});
|
||||
|
||||
tvFileStoreLocation = (TextView)findViewById(R.id.tvFileStoreLocation);
|
||||
tvAppVersion = (TextView)findViewById(R.id.tvAppVersion);
|
||||
|
||||
tvAppVersion.setText(
|
||||
"Version: " + BuildConfig.VERSION_NAME + Miscellaneous.lineSeparator +
|
||||
"Version code: " + String.valueOf(BuildConfig.VERSION_CODE) + Miscellaneous.lineSeparator +
|
||||
"Flavor: " + BuildConfig.FLAVOR
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -221,11 +230,18 @@ public class ActivityMaintenance extends Activity
|
||||
// Clean up
|
||||
for(DocumentFile file : directory.listFiles())
|
||||
{
|
||||
if(file.getName().equals(XmlFileInterface.settingsFileName) && file.canWrite())
|
||||
/*
|
||||
On some few users' devices it seems this caused a crash because file.getName() was null.
|
||||
The reason for that remains unknown, but we don't want the export to crash because of it.
|
||||
*/
|
||||
if(!StringUtils.isEmpty(file.getName()))
|
||||
{
|
||||
if (file.getName().equals(XmlFileInterface.settingsFileName) && file.canWrite())
|
||||
file.delete();
|
||||
else if(file.getName().equals(prefsFileName) && file.canWrite())
|
||||
else if (file.getName().equals(prefsFileName) && file.canWrite())
|
||||
file.delete();
|
||||
}
|
||||
}
|
||||
|
||||
DocumentFile dstRules = directory.createFile("text/xml", XmlFileInterface.settingsFileName);
|
||||
DocumentFile dstPrefs = directory.createFile("text/xml", prefsFileName);
|
||||
@ -305,6 +321,7 @@ public class ActivityMaintenance extends Activity
|
||||
emailBody.append("Device: " + android.os.Build.DEVICE + Miscellaneous.lineSeparator);
|
||||
emailBody.append("Model: " + android.os.Build.MODEL + Miscellaneous.lineSeparator);
|
||||
emailBody.append("Product: " + android.os.Build.PRODUCT);
|
||||
emailBody.append("Flavor: " + BuildConfig.FLAVOR);
|
||||
|
||||
Uri uri = Uri.parse("content://com.jens.automation2/" + Settings.zipFileName);
|
||||
|
||||
|
@ -8,7 +8,6 @@ import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.EditText;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
@ -27,7 +26,7 @@ public class ActivityManageActionPlaySound extends Activity
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState)
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_manage_play_sound);
|
||||
setContentView(R.layout.activity_manage_action_play_sound);
|
||||
|
||||
chkPlaySoundAlwaysPlay = (CheckBox)findViewById(R.id.chkPlaySoundAlwaysPlay);
|
||||
etSelectedSoundFile = (EditText)findViewById(R.id.etSelectedSoundFile);
|
||||
|
@ -13,6 +13,7 @@ import android.location.LocationListener;
|
||||
import android.location.LocationManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.os.Looper;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
@ -21,6 +22,10 @@ import android.widget.EditText;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.util.Calendar;
|
||||
import java.util.Timer;
|
||||
import java.util.TimerTask;
|
||||
|
||||
public class ActivityManagePoi extends Activity
|
||||
{
|
||||
public LocationManager myLocationManager;
|
||||
@ -31,6 +36,11 @@ public class ActivityManagePoi extends Activity
|
||||
Button bGetPosition, bSavePoi;
|
||||
ImageButton ibShowOnMap;
|
||||
EditText guiPoiName, guiPoiLatitude, guiPoiLongitude, guiPoiRadius;
|
||||
Calendar locationSearchStart = null;
|
||||
Timer timer = null;
|
||||
|
||||
final static int defaultRadius = 250;
|
||||
final static int searchTimeout = 120;
|
||||
|
||||
private static ProgressDialog progressDialog;
|
||||
|
||||
@ -104,7 +114,7 @@ public class ActivityManagePoi extends Activity
|
||||
myLocationManager.removeUpdates(myLocationListenerGps);
|
||||
ActivityMainPoi.poiToEdit = new PointOfInterest();
|
||||
ActivityMainPoi.poiToEdit.setLocation(new Location("POINT_LOCATION"));
|
||||
if(loadFormValuesToVariable())
|
||||
if(loadFormValuesToVariable(false))
|
||||
if(ActivityMainPoi.poiToEdit.create(this))
|
||||
{
|
||||
this.setResult(RESULT_OK);
|
||||
@ -114,7 +124,7 @@ public class ActivityManagePoi extends Activity
|
||||
private void changePoi()
|
||||
{
|
||||
myLocationManager.removeUpdates(myLocationListenerGps);
|
||||
if(loadFormValuesToVariable())
|
||||
if(loadFormValuesToVariable(false))
|
||||
if(ActivityMainPoi.poiToEdit.change(this))
|
||||
{
|
||||
this.setResult(RESULT_OK);
|
||||
@ -149,49 +159,143 @@ public class ActivityManagePoi extends Activity
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
locationSearchStart = Calendar.getInstance();
|
||||
startTimeout();
|
||||
|
||||
if(!Settings.privacyLocationing)
|
||||
{
|
||||
Miscellaneous.logEvent("i", "POI Manager", getResources().getString(R.string.logGettingPositionWithProvider) + " " + provider1, 3);
|
||||
myLocationManager.requestLocationUpdates(provider1, 500, Settings.satisfactoryAccuracyNetwork, myLocationListenerNetwork);
|
||||
}
|
||||
else
|
||||
Miscellaneous.logEvent("i", "POI Manager", "Skipping network location query because private locationing is active.", 4);
|
||||
|
||||
Miscellaneous.logEvent("i", "POI Manager", getResources().getString(R.string.logGettingPositionWithProvider) + " " + provider2, 3);
|
||||
myLocationManager.requestLocationUpdates(provider2, 500, Settings.satisfactoryAccuracyGps, myLocationListenerGps);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void compareLocations()
|
||||
private void startTimeout()
|
||||
{
|
||||
if(timer != null)
|
||||
stopTimeout();
|
||||
|
||||
timer = new Timer();
|
||||
|
||||
class TimeoutTask extends TimerTask
|
||||
{
|
||||
public void run()
|
||||
{
|
||||
evaluateLocationResults();
|
||||
}
|
||||
}
|
||||
|
||||
Miscellaneous.logEvent("i", "POI Manager", "Starting timeout for location search: " + String.valueOf(searchTimeout) + " seconds", 5);
|
||||
|
||||
TimerTask timeoutTask = new TimeoutTask();
|
||||
timer.schedule(timeoutTask, searchTimeout * 1000);
|
||||
}
|
||||
|
||||
private void stopTimeout()
|
||||
{
|
||||
Miscellaneous.logEvent("i", "POI Manager", "Stopping timeout for location search.", 5);
|
||||
|
||||
if(timer != null)
|
||||
{
|
||||
timer.purge();
|
||||
timer.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
private void evaluateLocationResults()
|
||||
{
|
||||
/*
|
||||
Procedure:
|
||||
If we get a GPS result we take it and suggest a default minimum radius.
|
||||
If private locationing is active that's the only possible outcome other than a timeout.
|
||||
|
||||
If private locationing is not active
|
||||
If we get a network
|
||||
*/
|
||||
|
||||
// We have GPS
|
||||
if(locationGps != null)
|
||||
{
|
||||
myLocationManager.removeUpdates(myLocationListenerNetwork);
|
||||
|
||||
guiPoiLatitude.setText(String.valueOf(locationGps.getLatitude()));
|
||||
guiPoiLongitude.setText(String.valueOf(locationGps.getLongitude()));
|
||||
|
||||
String text;
|
||||
if(locationNetwork != null)
|
||||
{
|
||||
Miscellaneous.logEvent("i", "POI Manager", getResources().getString(R.string.comparing), 4);
|
||||
|
||||
double variance = locationGps.distanceTo(locationNetwork);
|
||||
|
||||
String text = String.format(getResources().getString(R.string.distanceBetween), Math.round(variance));
|
||||
|
||||
// Toast.makeText(getBaseContext(), text, Toast.LENGTH_LONG).show();
|
||||
Miscellaneous.logEvent("i", "POI Manager", text, 4);
|
||||
// if(variance > 50 && guiPoiRadius.getText().toString().length()>0 && Integer.parseInt(guiPoiRadius.getText().toString())<variance)
|
||||
// {
|
||||
// String text = "Positioning via network is off by " + variance + " meters. The radius you specify shouldn't be smaller than that.";
|
||||
getDialog(text, Math.round(variance) + 1).show();
|
||||
// Toast.makeText(getBaseContext(), "Positioning via network is off by " + variance + " meters. The radius you specify shouldn't be smaller than that.", Toast.LENGTH_LONG).show();
|
||||
// }
|
||||
text = String.format(getResources().getString(R.string.distanceBetween), Math.round(variance));
|
||||
getRadiusConfirmationDialog(text, Math.round(variance) + 1).show();
|
||||
}
|
||||
else
|
||||
{
|
||||
progressDialog.dismiss();
|
||||
myLocationManager.removeUpdates(myLocationListenerNetwork);
|
||||
guiPoiRadius.setText("250");
|
||||
text = String.format(getResources().getString(R.string.locationFound), defaultRadius);
|
||||
getRadiusConfirmationDialog(text, defaultRadius).show();
|
||||
}
|
||||
Miscellaneous.logEvent("i", "POI Manager", text, 4);
|
||||
} // we have a great network signal:
|
||||
else if(locationNetwork != null && locationNetwork.getAccuracy() <= Settings.satisfactoryAccuracyGps && locationNetwork.getAccuracy() <= defaultRadius)
|
||||
{
|
||||
/*
|
||||
We do not yet have a GPS result. But we have a network result that is good enough
|
||||
to accept it a sole result. In that case we suggest a default radius, no variance.
|
||||
*/
|
||||
|
||||
guiPoiLatitude.setText(String.valueOf(locationNetwork.getLatitude()));
|
||||
guiPoiLongitude.setText(String.valueOf(locationNetwork.getLongitude()));
|
||||
|
||||
String text = String.format(getResources().getString(R.string.locationFound), defaultRadius);
|
||||
Miscellaneous.logEvent("i", "POI Manager", text, 4);
|
||||
|
||||
getRadiusConfirmationDialog(text, defaultRadius).show();
|
||||
}
|
||||
else if( // we have a bad network signal and nothing else, GPS result may still come in
|
||||
locationNetwork != null
|
||||
&&
|
||||
Calendar.getInstance().getTimeInMillis()
|
||||
<
|
||||
(locationSearchStart.getTimeInMillis() + ((long)searchTimeout * 1000))
|
||||
)
|
||||
{
|
||||
// Only a network location was found and it is also not very accurate.
|
||||
}
|
||||
else if( // we have a bad network signal and nothing else, timeout has expired, nothing else can possibly come in
|
||||
locationNetwork != null
|
||||
&&
|
||||
Calendar.getInstance().getTimeInMillis()
|
||||
>
|
||||
(locationSearchStart.getTimeInMillis() + ((long)searchTimeout * 1000))
|
||||
)
|
||||
{
|
||||
// Only a network location was found and it is also not very accurate.
|
||||
|
||||
guiPoiLatitude.setText(String.valueOf(locationNetwork.getLatitude()));
|
||||
guiPoiLongitude.setText(String.valueOf(locationNetwork.getLongitude()));
|
||||
|
||||
String text = String.format(getResources().getString(R.string.locationFoundInaccurate), defaultRadius);
|
||||
getRadiusConfirmationDialog(text, defaultRadius).show();
|
||||
Miscellaneous.logEvent("i", "POI Manager", text, 4);
|
||||
}
|
||||
else
|
||||
Miscellaneous.logEvent("i", "POI Manager", getResources().getString(R.string.logNotAllMeasurings), 4);
|
||||
{
|
||||
String text = String.format(getResources().getString(R.string.noLocationCouldBeFound), String.valueOf(searchTimeout));
|
||||
Miscellaneous.logEvent("i", "POI Manager", text, 2);
|
||||
|
||||
if(myLocationListenerNetwork != null)
|
||||
myLocationManager.removeUpdates(myLocationListenerNetwork);
|
||||
|
||||
myLocationManager.removeUpdates(myLocationListenerGps);
|
||||
progressDialog.dismiss();
|
||||
getErrorDialog(text).show();
|
||||
}
|
||||
}
|
||||
|
||||
private AlertDialog getNotificationDialog(String text)
|
||||
@ -203,15 +307,6 @@ public class ActivityManagePoi extends Activity
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which)
|
||||
{
|
||||
// switch(which)
|
||||
// {
|
||||
// case DialogInterface.BUTTON_POSITIVE:
|
||||
// guiPoiRadius.setText(String.valueOf(value));
|
||||
// break;
|
||||
// case DialogInterface.BUTTON_NEGATIVE:
|
||||
// break;
|
||||
// }
|
||||
|
||||
progressDialog = ProgressDialog.show(ActivityManagePoi.this, "", getResources().getString(R.string.gettingPosition), true, true);
|
||||
getLocation();
|
||||
}
|
||||
@ -222,8 +317,11 @@ public class ActivityManagePoi extends Activity
|
||||
|
||||
return alertDialog;
|
||||
}
|
||||
private AlertDialog getDialog(String text, final double value)
|
||||
|
||||
private AlertDialog getRadiusConfirmationDialog(String text, final double value)
|
||||
{
|
||||
stopTimeout();
|
||||
|
||||
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
|
||||
DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener()
|
||||
{
|
||||
@ -249,9 +347,30 @@ public class ActivityManagePoi extends Activity
|
||||
return alertDialog;
|
||||
}
|
||||
|
||||
private AlertDialog getErrorDialog(String text)
|
||||
{
|
||||
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
|
||||
DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener()
|
||||
{
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which)
|
||||
{
|
||||
progressDialog.dismiss();
|
||||
}
|
||||
};
|
||||
alertDialogBuilder.setMessage(text);
|
||||
alertDialogBuilder.setPositiveButton(getResources().getString(R.string.ok), null);
|
||||
|
||||
if (Looper.myLooper() == null)
|
||||
Looper.prepare();
|
||||
|
||||
AlertDialog alertDialog = alertDialogBuilder.create();
|
||||
|
||||
return alertDialog;
|
||||
}
|
||||
|
||||
public class MyLocationListenerGps implements LocationListener
|
||||
{
|
||||
|
||||
@Override
|
||||
public void onLocationChanged(Location location)
|
||||
{
|
||||
@ -261,10 +380,11 @@ public class ActivityManagePoi extends Activity
|
||||
// {
|
||||
// Miscellaneous.logEvent("i", "POI Manager", "satisfactoryNetworkAccuracy of " + String.valueOf(Settings.SATISFACTORY_ACCURACY_GPS) + "m reached. Removing location updates...");
|
||||
|
||||
Miscellaneous.logEvent("i", "POI Manager", "Unsubscribing from GPS location updates.", 5);
|
||||
myLocationManager.removeUpdates(this);
|
||||
locationGps = location;
|
||||
|
||||
compareLocations();
|
||||
evaluateLocationResults();
|
||||
// }
|
||||
}
|
||||
|
||||
@ -288,66 +408,27 @@ public class ActivityManagePoi extends Activity
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
// public class MyLocationListenerWifi implements LocationListener
|
||||
// {
|
||||
//
|
||||
// @Override
|
||||
// public void onLocationChanged(Location location)
|
||||
// {
|
||||
// Miscellaneous.logEvent("i", "POI Manager", getResources().getString(R.string.gotGpsUpdate) + " " + String.valueOf(location.getAccuracy()));
|
||||
// // Deactivate when accuracy reached
|
||||
//// if(location.getAccuracy() < Settings.SATISFACTORY_ACCURACY_GPS)
|
||||
//// {
|
||||
//// Miscellaneous.logEvent("i", "POI Manager", "satisfactoryNetworkAccuracy of " + String.valueOf(Settings.SATISFACTORY_ACCURACY_GPS) + "m reached. Removing location updates...");
|
||||
//
|
||||
// myLocationManager.removeUpdates(this);
|
||||
// locationGps = location;
|
||||
//
|
||||
// compareLocations();
|
||||
//// }
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void onProviderDisabled(String provider)
|
||||
// {
|
||||
// // TODO Auto-generated method stub
|
||||
//
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void onProviderEnabled(String provider)
|
||||
// {
|
||||
// // TODO Auto-generated method stub
|
||||
//
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void onStatusChanged(String provider, int status, Bundle extras)
|
||||
// {
|
||||
// // TODO Auto-generated method stub
|
||||
//
|
||||
// }
|
||||
//
|
||||
// }
|
||||
|
||||
public class MyLocationListenerNetwork implements LocationListener
|
||||
{
|
||||
|
||||
@Override
|
||||
public void onLocationChanged(Location location)
|
||||
{
|
||||
Miscellaneous.logEvent("i", "POI Manager", getResources().getString(R.string.logGotNetworkUpdate) + " " + String.valueOf(location.getAccuracy()), 3);
|
||||
// Deactivate when accuracy reached
|
||||
// if(location.getAccuracy() < Settings.SATISFACTORY_ACCURACY_GPS)
|
||||
// {
|
||||
// String text = "Network position found. satisfactoryNetworkAccuracy of " + String.valueOf(Settings.SATISFACTORY_ACCURACY_NETWORK) + "m reached. Removing location updates...";
|
||||
// Miscellaneous.logEvent("i", "POI Manager", text);
|
||||
|
||||
myLocationManager.removeUpdates(this);
|
||||
locationNetwork = location;
|
||||
|
||||
compareLocations();
|
||||
// }
|
||||
// Deactivate when accuracy reached
|
||||
if(location.getAccuracy() <= Settings.satisfactoryAccuracyGps)
|
||||
{
|
||||
// Accuracy is so good that we don't need to wait for GPS result
|
||||
Miscellaneous.logEvent("i", "POI Manager", "Unsubscribing from network location updates.", 5);
|
||||
myLocationManager.removeUpdates(myLocationListenerGps);
|
||||
}
|
||||
|
||||
evaluateLocationResults();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -370,7 +451,6 @@ public class ActivityManagePoi extends Activity
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void editPoi(PointOfInterest poi)
|
||||
@ -381,18 +461,21 @@ public class ActivityManagePoi extends Activity
|
||||
guiPoiRadius.setText(String.valueOf(poi.getRadius()));
|
||||
}
|
||||
|
||||
public boolean loadFormValuesToVariable()
|
||||
public boolean loadFormValuesToVariable(boolean checkOnlyCoordinates)
|
||||
{
|
||||
if(ActivityMainPoi.poiToEdit == null)
|
||||
ActivityMainPoi.poiToEdit = new PointOfInterest();
|
||||
|
||||
if(guiPoiName.getText().length() == 0)
|
||||
if(!checkOnlyCoordinates)
|
||||
{
|
||||
if (guiPoiName.getText().length() == 0)
|
||||
{
|
||||
Toast.makeText(this, getResources().getString(R.string.pleaseEnterValidName), Toast.LENGTH_LONG).show();
|
||||
return false;
|
||||
}
|
||||
else
|
||||
ActivityMainPoi.poiToEdit.setName(guiPoiName.getText().toString());
|
||||
}
|
||||
|
||||
if(ActivityMainPoi.poiToEdit.getLocation() == null)
|
||||
ActivityMainPoi.poiToEdit.setLocation(new Location("POINT_LOCATION"));
|
||||
@ -417,11 +500,13 @@ public class ActivityManagePoi extends Activity
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!checkOnlyCoordinates)
|
||||
{
|
||||
try
|
||||
{
|
||||
ActivityMainPoi.poiToEdit.setRadius(Double.parseDouble(guiPoiRadius.getText().toString()), this);
|
||||
}
|
||||
catch(NumberFormatException e)
|
||||
catch (NumberFormatException e)
|
||||
{
|
||||
Toast.makeText(this, getResources().getString(R.string.pleaseEnterValidRadius), Toast.LENGTH_LONG).show();
|
||||
return false;
|
||||
@ -431,13 +516,14 @@ public class ActivityManagePoi extends Activity
|
||||
Toast.makeText(this, getResources().getString(R.string.unknownError), Toast.LENGTH_LONG).show();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void showOnMap()
|
||||
{
|
||||
if(loadFormValuesToVariable())
|
||||
if(loadFormValuesToVariable(true))
|
||||
{
|
||||
try
|
||||
{
|
||||
|
@ -1445,9 +1445,6 @@ public class ActivityManageRule extends Activity
|
||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.setWifiTethering.toString()))
|
||||
{
|
||||
newAction.setAction(Action_Enum.setWifiTethering);
|
||||
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1)
|
||||
Miscellaneous.messageBox(context.getResources().getString(R.string.warning), context.getResources().getString(R.string.wifiTetheringFailForAboveNougat), context).show();
|
||||
else
|
||||
getActionParameter1Dialog(ActivityManageRule.this).show();
|
||||
}
|
||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.setDisplayRotation.toString()))
|
||||
|
@ -2,9 +2,11 @@ package com.jens.automation2;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.app.NotificationManager;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
@ -85,15 +87,6 @@ public class ActivityPermissions extends Activity
|
||||
}
|
||||
});
|
||||
|
||||
// bRequestPermissions.setOnClickListener(new View.OnClickListener()
|
||||
// {
|
||||
// @Override
|
||||
// public void onClick(View v)
|
||||
// {
|
||||
// finish();
|
||||
// }
|
||||
// });
|
||||
|
||||
bRequestPermissions.setOnClickListener(new View.OnClickListener()
|
||||
{
|
||||
@Override
|
||||
@ -102,9 +95,6 @@ public class ActivityPermissions extends Activity
|
||||
// Request the basic permissions, that are absolutely required.
|
||||
//getRequiredPermissions(true); // request permissions to access sd card access and "receive boot completed"
|
||||
|
||||
//fillPermissionMaps();
|
||||
|
||||
|
||||
if(specificPermissionsToRequest != null)
|
||||
requestSpecificPermission(specificPermissionsToRequest);
|
||||
else
|
||||
@ -123,7 +113,6 @@ public class ActivityPermissions extends Activity
|
||||
if(extras != null)
|
||||
{
|
||||
specificPermissionsToRequest = extras.getStringArray(ActivityPermissions.intentExtraName);;
|
||||
// requestSpecificPermission(permissionsToRequest);
|
||||
tvPermissionsExplanationLong.setText(R.string.permissionsExplanationSmall);
|
||||
tvPermissionsExplanation.setText("");
|
||||
fillExplanationText();
|
||||
@ -940,15 +929,25 @@ public class ActivityPermissions extends Activity
|
||||
startActivityForResult(intent, requestCodeForPermissionsNotifications);
|
||||
return;
|
||||
}
|
||||
// else if (s.equalsIgnoreCase(permissionNameLocationBackground) && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)
|
||||
// {
|
||||
// requiredPermissions.remove(s);
|
||||
// cachedPermissionsToRequest = requiredPermissions;
|
||||
// Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
|
||||
// intent.setData(Uri.parse("package:" + getPackageName()));
|
||||
// startActivityForResult(intent, requestCodeForPermissionsBackgroundLocation);
|
||||
// return;
|
||||
// }
|
||||
else if (s.equalsIgnoreCase(Manifest.permission.ACCESS_BACKGROUND_LOCATION) && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)
|
||||
{
|
||||
AlertDialog dialog = Miscellaneous.messageBox(getResources().getString(R.string.readLocation), getResources().getString(R.string.pleaseGiveBgLocation), ActivityPermissions.this);
|
||||
dialog.setOnDismissListener(new DialogInterface.OnDismissListener()
|
||||
{
|
||||
@Override
|
||||
public void onDismiss(DialogInterface dialog)
|
||||
{
|
||||
requiredPermissions.remove(s);
|
||||
cachedPermissionsToRequest = requiredPermissions;
|
||||
Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
|
||||
intent.setData(Uri.parse("package:" + getPackageName()));
|
||||
startActivityForResult(intent, requestCodeForPermissionsBackgroundLocation);
|
||||
}
|
||||
});
|
||||
dialog.show();
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.jens.automation2;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.preference.CheckBoxPreference;
|
||||
import android.preference.ListPreference;
|
||||
import android.preference.PreferenceActivity;
|
||||
|
||||
@ -9,11 +10,18 @@ import com.jens.automation2.R.layout;
|
||||
public class ActivitySettings extends PreferenceActivity
|
||||
{
|
||||
ListPreference lpStartScreenOptionsValues;
|
||||
CheckBoxPreference chkPrefUpdateCheck;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState)
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
addPreferencesFromResource(layout.settings);
|
||||
addPreferencesFromResource(layout.activity_settings);
|
||||
|
||||
if(BuildConfig.FLAVOR.equals("apkFlavor"))
|
||||
{
|
||||
chkPrefUpdateCheck = (CheckBoxPreference) findPreference("automaticUpdateCheck");
|
||||
chkPrefUpdateCheck.setEnabled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
65
app/src/main/java/com/jens/automation2/AsyncTasks.java
Normal file
65
app/src/main/java/com/jens/automation2/AsyncTasks.java
Normal file
@ -0,0 +1,65 @@
|
||||
package com.jens.automation2;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.AsyncTask;
|
||||
import android.util.Log;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
|
||||
public class AsyncTasks
|
||||
{
|
||||
public static class AsyncTaskUpdateCheck extends AsyncTask<Context, Void, Boolean>
|
||||
{
|
||||
public static boolean checkRunning = false;
|
||||
|
||||
@Override
|
||||
protected Boolean doInBackground(Context... contexts)
|
||||
{
|
||||
if(checkRunning)
|
||||
return false;
|
||||
else
|
||||
checkRunning = true;
|
||||
|
||||
try
|
||||
{
|
||||
String result = Miscellaneous.downloadURL("https://server47.de/automation/?action=getLatestVersionCode", null, null).trim();
|
||||
int latestVersion = Integer.parseInt(result);
|
||||
|
||||
// At this point the update check itself has already been successful.
|
||||
|
||||
Settings.lastUpdateCheck = Calendar.getInstance().getTimeInMillis();
|
||||
Settings.writeSettings(contexts[0]);
|
||||
|
||||
if (latestVersion > BuildConfig.VERSION_CODE)
|
||||
{
|
||||
// There's a new update
|
||||
return true;
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Miscellaneous.logEvent("e", "Error checking for update", Log.getStackTraceString(e), 3);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Boolean result)
|
||||
{
|
||||
try
|
||||
{
|
||||
ActivityMainScreen.getActivityMainScreenInstance().processUpdateCheckResult(result);
|
||||
}
|
||||
catch (NullPointerException e)
|
||||
{
|
||||
Miscellaneous.logEvent("e", "NewsDownload", "There was a problem displaying the update check result, probably ActivityMainScreen isn't currently shown: " + Log.getStackTraceString(e), 2);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Miscellaneous.logEvent("e", "NewsDownload", "There was a problem displaying the update check result: " + Log.getStackTraceString(e), 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -197,7 +197,7 @@ public class AutomationService extends Service implements OnInitListener
|
||||
|
||||
if (checkStartupRequirements(this, startAtBoot))
|
||||
{
|
||||
Miscellaneous.logEvent("i", "Service", this.getResources().getString(R.string.logServiceStarting), 1);
|
||||
Miscellaneous.logEvent("i", "Service", this.getResources().getString(R.string.logServiceStarting) + " VERSION_CODE: " + BuildConfig.VERSION_CODE + ", VERSION_NAME: " + BuildConfig.VERSION_NAME + ", flavor: " + BuildConfig.FLAVOR, 1);
|
||||
|
||||
startUpRoutine();
|
||||
|
||||
@ -258,6 +258,7 @@ public class AutomationService extends Service implements OnInitListener
|
||||
case reloadSettings:
|
||||
Settings.readFromPersistentStorage(this);
|
||||
applySettingsAndRules();
|
||||
if(myLocationProvider != null)
|
||||
myLocationProvider.applySettingsAndRules();
|
||||
break;
|
||||
case updateNotification:
|
||||
@ -342,6 +343,9 @@ public class AutomationService extends Service implements OnInitListener
|
||||
{
|
||||
boolean displayNotification = false;
|
||||
|
||||
String rule = "";
|
||||
|
||||
outerLoop:
|
||||
for(Rule r : Rule.getRuleCollection())
|
||||
{
|
||||
if(r.isRuleActive())
|
||||
@ -354,7 +358,11 @@ public class AutomationService extends Service implements OnInitListener
|
||||
// r.setRuleActive(false);
|
||||
// r.change(AutomationService.this);
|
||||
if(!displayNotification)
|
||||
{
|
||||
displayNotification = true;
|
||||
rule = r.getName();
|
||||
break outerLoop;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -362,18 +370,16 @@ public class AutomationService extends Service implements OnInitListener
|
||||
|
||||
if(displayNotification)
|
||||
{
|
||||
// Toast.makeText(Miscellaneous.getAnyContext(), "Require more permissions.", Toast.LENGTH_LONG).show();
|
||||
// Update notification or show new one that notifiies of the lack or permissions.
|
||||
|
||||
Intent intent = new Intent(AutomationService.this, ActivityPermissions.class);
|
||||
PendingIntent pi = PendingIntent.getActivity(AutomationService.this, 0, intent, 0);
|
||||
|
||||
Miscellaneous.logEvent("w", "Features disabled", "Features disabled because of rule " + rule, 5);
|
||||
|
||||
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1)
|
||||
Miscellaneous.createDismissableNotificationWithDelay(1010, getResources().getString(R.string.featuresDisabled), ActivityPermissions.notificationIdPermissions, pi);
|
||||
else
|
||||
Miscellaneous.createDismissableNotification(getResources().getString(R.string.featuresDisabled), ActivityPermissions.notificationIdPermissions, pi);
|
||||
}
|
||||
// else
|
||||
// Toast.makeText(Miscellaneous.getAnyContext(), "Have all required permissions.", Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
|
||||
@ -390,6 +396,9 @@ public class AutomationService extends Service implements OnInitListener
|
||||
Intent intent = new Intent(AutomationService.this, ActivityMainTabLayout.class);
|
||||
PendingIntent pi = PendingIntent.getActivity(AutomationService.this, 0, intent, 0);
|
||||
// Miscellaneous.createDismissableNotification(getResources().getString(R.string.settingsReferringToRestrictedFeatures), ActivityPermissions.notificationIdPermissions, pi);
|
||||
|
||||
Miscellaneous.logEvent("w", "Features disabled", "Background location disabled because Google to blame.", 5);
|
||||
|
||||
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1)
|
||||
Miscellaneous.createDismissableNotificationWithDelay(3300, getResources().getString(R.string.featuresDisabled), notificationIdRestrictions, pi);
|
||||
else
|
||||
@ -405,6 +414,8 @@ public class AutomationService extends Service implements OnInitListener
|
||||
Intent intent = new Intent(AutomationService.this, ActivityMainTabLayout.class);
|
||||
PendingIntent pi = PendingIntent.getActivity(AutomationService.this, 0, intent, 0);
|
||||
|
||||
Miscellaneous.logEvent("w", "Features disabled", "Background location disabled because Google to blame.", 5);
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1)
|
||||
Miscellaneous.createDismissableNotificationWithDelay(2200, getResources().getString(R.string.featuresDisabled), notificationIdLocationRestriction, pi);
|
||||
else
|
||||
|
@ -121,15 +121,6 @@ public class Miscellaneous extends Service
|
||||
if(url.toLowerCase().contains("https"))
|
||||
{
|
||||
connection = (HttpsURLConnection) urlObject.openConnection();
|
||||
|
||||
// if(Settings.httpAcceptAllCertificates)
|
||||
// {
|
||||
// SSLContext sc = SSLContext.getInstance("TLS");
|
||||
// sc.init(null, getInsecureTrustManager(), new java.security.SecureRandom());
|
||||
// HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
|
||||
// Miscellaneous.disableSSLCertificateChecking();
|
||||
// HttpsURLConnection.setDefaultHostnameVerifier(getInsecureHostnameVerifier());
|
||||
// }
|
||||
}
|
||||
else
|
||||
connection = (HttpURLConnection) urlObject.openConnection();
|
||||
|
@ -76,7 +76,7 @@ public class News
|
||||
if(oldFilePath.exists())
|
||||
oldFilePath.delete();
|
||||
|
||||
if (!(new File(filePath)).exists() || Settings.lastNewsPolltime == -1 || now.getTimeInMillis() >= Settings.lastNewsPolltime + (long)(Settings.newsDisplayForXDays * 24 * 60 * 60 * 1000))
|
||||
if (!(new File(filePath)).exists() || Settings.lastNewsPolltime == Settings.default_lastNewsPolltime || now.getTimeInMillis() >= Settings.lastNewsPolltime + (long)(Settings.newsDisplayForXDays * 24 * 60 * 60 * 1000))
|
||||
{
|
||||
String newsUrl = "https://server47.de/automation/appNews.php";
|
||||
newsContent = Miscellaneous.downloadURL(newsUrl, null, null);
|
||||
|
@ -805,6 +805,7 @@ public class PointOfInterest implements Comparable<PointOfInterest>
|
||||
{
|
||||
String text = String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.overlapBetweenPois), otherPoi.getName(), String.valueOf(overlap));
|
||||
Miscellaneous.logEvent("w", "POI", text, 2);
|
||||
// Miscellaneous.messageBox("POI", text, Miscellaneous.getAnyContext()).show();
|
||||
Toast.makeText(Miscellaneous.getAnyContext(), text, Toast.LENGTH_LONG).show();
|
||||
return false;
|
||||
}
|
||||
|
@ -15,6 +15,7 @@ public class Settings implements SharedPreferences
|
||||
public final static int lockSoundChangesInterval = 15;
|
||||
public static final int newsPollEveryXDays = 3;
|
||||
public static final int newsDisplayForXDays = 3;
|
||||
public static final int updateCheckFrequencyDays = 7;
|
||||
public static final String folderName = "Automation";
|
||||
public static final String zipFileName = "automation.zip";
|
||||
|
||||
@ -61,10 +62,13 @@ public class Settings implements SharedPreferences
|
||||
public static int startScreen;
|
||||
public static boolean executeRulesAndProfilesWithSingleClick;
|
||||
public static boolean displayNewsOnMainScreen;
|
||||
public static boolean automaticUpdateCheck;
|
||||
|
||||
public static boolean lockSoundChanges;
|
||||
public static boolean noticeAndroid9MicrophoneShown;
|
||||
public static boolean noticeAndroid10WifiShown;
|
||||
public static long lastNewsPolltime;
|
||||
public static long lastUpdateCheck;
|
||||
|
||||
public static ArrayList<String> whatHasBeenDone;
|
||||
|
||||
@ -114,8 +118,10 @@ public class Settings implements SharedPreferences
|
||||
protected static final int default_startScreen = 0;
|
||||
protected static final boolean default_executeRulesAndProfilesWithSingleClick = false;
|
||||
protected static final boolean default_displayNewsOnMainScreen = false;
|
||||
protected static final boolean default_automaticUpdateCheck = false;
|
||||
protected static final boolean default_lockSoundChanges = false;
|
||||
protected static final long default_lastNewsPolltime = -1;
|
||||
protected static final long default_lastUpdateCheck = -1;
|
||||
|
||||
@Override
|
||||
public boolean contains(String arg0)
|
||||
@ -249,6 +255,7 @@ public class Settings implements SharedPreferences
|
||||
startScreen = Integer.parseInt(prefs.getString("startScreen", String.valueOf(default_startScreen)));
|
||||
|
||||
executeRulesAndProfilesWithSingleClick = prefs.getBoolean("executeRulesAndProfilesWithSingleClick", default_executeRulesAndProfilesWithSingleClick);
|
||||
automaticUpdateCheck = prefs.getBoolean("automaticUpdateCheck", default_automaticUpdateCheck);
|
||||
displayNewsOnMainScreen = prefs.getBoolean("displayNewsOnMainScreen", default_displayNewsOnMainScreen);
|
||||
|
||||
lockSoundChanges = prefs.getBoolean("lockSoundChanges", default_lockSoundChanges);
|
||||
@ -256,6 +263,7 @@ public class Settings implements SharedPreferences
|
||||
noticeAndroid10WifiShown = prefs.getBoolean("noticeAndroid10WifiShown", false);
|
||||
|
||||
lastNewsPolltime = prefs.getLong("lastNewsPolltime", default_lastNewsPolltime);
|
||||
lastUpdateCheck = prefs.getLong("lastUpdateCheck", default_lastUpdateCheck);
|
||||
|
||||
String whbdString = prefs.getString("whatHasBeenDone", "");
|
||||
if(whbdString != null && whbdString.length() > 0)
|
||||
@ -435,6 +443,9 @@ public class Settings implements SharedPreferences
|
||||
if(!prefs.contains("executeRulesAndProfilesWithSingleClick") | force)
|
||||
editor.putBoolean("executeRulesAndProfilesWithSingleClick", default_executeRulesAndProfilesWithSingleClick);
|
||||
|
||||
if(!prefs.contains("automaticUpdateCheck") | force)
|
||||
editor.putBoolean("automaticUpdateCheck", default_automaticUpdateCheck);
|
||||
|
||||
if(!prefs.contains("displayNewsOnMainScreen") | force)
|
||||
editor.putBoolean("displayNewsOnMainScreen", default_displayNewsOnMainScreen);
|
||||
|
||||
@ -447,6 +458,9 @@ public class Settings implements SharedPreferences
|
||||
if(!prefs.contains("lastNewsPolltime") | force)
|
||||
editor.putLong("lastNewsPolltime", default_lastNewsPolltime);
|
||||
|
||||
if(!prefs.contains("lastUpdateCheck") | force)
|
||||
editor.putLong("lastUpdateCheck", default_lastUpdateCheck);
|
||||
|
||||
if(!prefs.contains("whatHasBeenDone") | force)
|
||||
editor.putString("whatHasBeenDone", "");
|
||||
|
||||
@ -511,6 +525,7 @@ public class Settings implements SharedPreferences
|
||||
editor.putBoolean("privacyLocationing", privacyLocationing);
|
||||
editor.putString("startScreen", String.valueOf(startScreen));
|
||||
editor.putBoolean("executeRulesAndProfilesWithSingleClick", executeRulesAndProfilesWithSingleClick);
|
||||
editor.putBoolean("automaticUpdateCheck", automaticUpdateCheck);
|
||||
editor.putBoolean("displayNewsOnMainScreen", displayNewsOnMainScreen);
|
||||
|
||||
editor.putBoolean("lockSoundChanges", lockSoundChanges);
|
||||
@ -518,6 +533,7 @@ public class Settings implements SharedPreferences
|
||||
editor.putBoolean("noticeAndroid10WifiShown", noticeAndroid10WifiShown);
|
||||
|
||||
editor.putLong("lastNewsPolltime", lastNewsPolltime);
|
||||
editor.putLong("lastUpdateCheck", lastUpdateCheck);
|
||||
|
||||
editor.putString("whatHasBeenDone", Miscellaneous.explode(";", whatHasBeenDone));
|
||||
|
||||
|
@ -97,6 +97,15 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvAppVersion"
|
||||
android:layout_marginTop="@dimen/default_margin"
|
||||
android:layout_marginVertical="@dimen/default_margin"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:gravity="center_horizontal"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
</androidx.appcompat.widget.LinearLayoutCompat>
|
||||
|
||||
</ScrollView>
|
@ -27,7 +27,7 @@
|
||||
<EditText
|
||||
android:id="@+id/etSelectedSoundFile"
|
||||
android:layout_marginVertical="@dimen/default_margin"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
<Button
|
@ -2,7 +2,7 @@
|
||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_margin="10dp" >
|
||||
android:layout_margin="@dimen/default_margin" >
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
|
@ -1,7 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" >
|
||||
android:layout_height="match_parent"
|
||||
android:layout_margin="@dimen/default_margin">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
@ -9,7 +10,6 @@
|
||||
android:orientation="vertical" >
|
||||
|
||||
<LinearLayout
|
||||
android:layout_marginTop="10dp"
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
@ -92,7 +92,7 @@
|
||||
|
||||
<Button
|
||||
android:id="@+id/bSaveBluetoothTrigger"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_marginTop="@dimen/default_margin"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/save" />
|
||||
|
@ -3,7 +3,8 @@
|
||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical" >
|
||||
android:orientation="vertical"
|
||||
android:layout_margin="@dimen/default_margin" >
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
|
@ -2,10 +2,9 @@
|
||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="10dp" >
|
||||
android:layout_margin="@dimen/default_margin" >
|
||||
|
||||
<LinearLayout
|
||||
android:layout_margin="@dimen/default_margin"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical" >
|
||||
@ -25,7 +24,9 @@
|
||||
|
||||
<TableLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
android:layout_height="wrap_content"
|
||||
android:shrinkColumns="1"
|
||||
android:stretchColumns="1">
|
||||
|
||||
<TableRow
|
||||
android:layout_marginBottom="@dimen/activity_vertical_margin">
|
||||
@ -54,13 +55,13 @@
|
||||
android:text="@string/application" />
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="horizontal"
|
||||
android:orientation="vertical"
|
||||
android:layout_marginHorizontal="@dimen/default_margin"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/etActivityOrActionPath"
|
||||
android:layout_marginHorizontal="@dimen/default_margin"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/anyApp"
|
||||
@ -68,6 +69,7 @@
|
||||
|
||||
<Button
|
||||
android:id="@+id/bSelectApp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/selectApplication" />
|
||||
|
@ -172,6 +172,7 @@
|
||||
|
||||
<Button
|
||||
android:id="@+id/bTriggerPhoneCallImportFromContacts"
|
||||
android:drawableLeft="@drawable/contacts"
|
||||
android:layout_marginVertical="@dimen/default_margin"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
|
@ -3,7 +3,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:layout_weight="30"
|
||||
android:layout_margin="10dp" >
|
||||
android:layout_margin="@dimen/default_margin" >
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
@ -122,6 +122,7 @@
|
||||
|
||||
<Button
|
||||
android:id="@+id/bSaveTimeFrame"
|
||||
android:layout_marginTop="@dimen/default_margin"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/save" />
|
||||
|
@ -56,6 +56,12 @@
|
||||
android:key="executeRulesAndProfilesWithSingleClick"
|
||||
android:title="@string/executeRulesAndProfilesWithSingleClickTitle" />
|
||||
|
||||
<CheckBoxPreference
|
||||
android:key="automaticUpdateCheck"
|
||||
android:enabled="false"
|
||||
android:title="@string/automaticUpdateCheck"
|
||||
android:summary="@string/automaticUpdateCheckSummary"/>
|
||||
|
||||
<CheckBoxPreference
|
||||
android:key="displayNewsOnMainScreen"
|
||||
android:title="@string/displayNewsOnMainScreen"
|
@ -3,7 +3,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:layout_margin="10dp" >
|
||||
android:layout_margin="@dimen/default_margin" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvVolumeTestExplanation"
|
||||
|
@ -14,8 +14,7 @@
|
||||
<string name="serviceStarted">Automations-Dienst gestarted.</string>
|
||||
<string name="version">Version %1$s.</string>
|
||||
<string name="distanceBetween">Der Abstand zwischen GPS- und Mobilfunk-Position beträgt %1$d m. Dies +1 sollte der minimale Radius sein.</string>
|
||||
<string name="comparing">Sowohl Netzwerk- als auch GPS Position sind bekannt. Vergleiche...</string>
|
||||
<string name="positioningWindowNotice">Falls Sie in einem Gebäude sind wird empfohlen das Gerät in die Nähe eines Fensters zu bringen bis eine Position ermittelt werden konnte. Andernfalls kann es sehr lange dauern oder es funktioniert gar nicht.</string>
|
||||
<string name="positioningWindowNotice">Falls Sie in einem Gebäude sind, wird empfohlen das Gerät in die Nähe eines Fensters zu bringen bis eine Position ermittelt werden konnte. Andernfalls kann es sehr lange dauern oder es funktioniert gar nicht.</string>
|
||||
<string name="gettingPosition">Position wird ermittelt. Bitte warten...</string>
|
||||
<string name="yes">Ja</string>
|
||||
<string name="no">Nein</string>
|
||||
@ -175,21 +174,7 @@
|
||||
<string name="serviceNotRunning">Dienst läuft nicht.</string>
|
||||
<string name="general">Allgemein</string>
|
||||
<string name="generalText">Um dieses Programm zu benutzen, müssen Sie Regeln anlegen. Diese enthalten Auslöser (z.B. ob Sie ein bestimmtes Gebiet betreten oder eine bestimmte Zeitspanne beginnt). Nachdem Sie dies erledigt haben, klicken Sie auf den Ein/Aus Schalter auf dem Hauptbildschirm.</string>
|
||||
<string name="unknownActionSpecified">Unbekannte Aktion definiert.</string>
|
||||
<string name="errorChangingScreenRotation">Fehler beim Ändern der Bildschirmrotation</string>
|
||||
<string name="errorDeterminingWifiApState">Fehler bei der Statusprüfung des WLAN Routers</string>
|
||||
<string name="errorActivatingWifiAp">Fehler beim Aktivieren des WLAN Routers</string>
|
||||
<string name="failedToTriggerBluetooth">Fehler beim Ändern des Bluetooth Status. Hat dieses Gerät Bluetooth?</string>
|
||||
<string name="logAttemptingDownloadOf">Versuche Download von</string>
|
||||
<string name="logErrorGettingConnectionManagerService">Fehler beim Anbinden an den connectionManager Dienst. Ändere nichts am Usb-Router Status.</string>
|
||||
<string name="logErrorDeterminingCurrentUsbTetheringState">Fehler beim Aufrufen des gegenwärtigen USB-Router Status.</string>
|
||||
<string name="logDetectingTetherableUsbInterface">Überprüfe routingfähiges Interface.</string>
|
||||
<string name="logClearingBothLocationListeners">Stoppe beide LocationListener.</string>
|
||||
<string name="logStartingServiceAfterAppUpdate">Starte Dienst nach Programm Aktualisierung. Er lief vor der Aktualisierung schon.</string>
|
||||
<string name="logNotStartingServiceAfterAppUpdate">Starte Dienst nicht automatisch nach Programm Aktualisierung. Er lief davor nicht.</string>
|
||||
<string name="logStartingServiceAtPhoneBoot">Starte Dienst nach Neustart des Telefons.</string>
|
||||
<string name="logNotStartingServiceAtPhoneBoot">Starte Dienst nicht automatisch nach Neustart des Telefons.</string>
|
||||
<string name="applicationHasBeenUpdated">Die Anwendung wurde aktualisiert.</string>
|
||||
<string name="startServiceAfterAppUpdate">Dienst nach Anwendungsupdate automatisch wieder starten, wenn er vorher lief.</string>
|
||||
<string name="startServiceAfterAppUpdateShort">Starte Dienst nach Update</string>
|
||||
<string name="wifiConnection">WLAN Verbindung</string>
|
||||
@ -227,7 +212,7 @@
|
||||
<string name="anotherPoiByThatName">Es gibt bereits einen Ort mit diesem Namen.</string>
|
||||
<string name="anotherRuleByThatName">Es gibt bereits eine Regel mit diesem Namen.</string>
|
||||
<string name="startOtherActivity">Programm starten</string>
|
||||
<string name="selectApplication">Wählen Sie\neine Anwendung</string>
|
||||
<string name="selectApplication">Anwendung wählen</string>
|
||||
<string name="selectPackageOfApplication">Wählen Sie ein Paket der Anwendung</string>
|
||||
<string name="selectActivityToBeStarted">Wählen Sie die Activity des Pakets</string>
|
||||
<string name="errorStartingOtherActivity">Fehler beim Starten einer anderen Anwendung</string>
|
||||
@ -254,12 +239,10 @@
|
||||
<string name="moveDown">Herunterschieben</string>
|
||||
<string name="cantMoveUp">Das Objekt kann nicht weiter hochgeschoben werden.</string>
|
||||
<string name="cantMoveDown">Das Objekt kann nicht weiter heruntergeschoben werden.</string>
|
||||
<string name="ruleCheckOf">RuleCheck von %1$s</string>
|
||||
<string name="airplaneMode">Flugmodus</string>
|
||||
<string name="activate">Aktivieren</string>
|
||||
<string name="deactivate">Deaktivieren</string>
|
||||
<string name="airplaneModeSdk17Warning">Seit Android Version 4.2 funktioniert diese Funktion - wenn überhaupt - nur noch mit gerooteten Geräten.</string>
|
||||
<string name="triggerUrlReplacementPositionError">Laut Ihren Einstellungen sollte der aufzurufenden Adresse eine Position hinzugefügt werden. Leider ist der im Moment nicht möglich, daß noch keine Position bekannt ist.</string>
|
||||
<string name="addIntentValue">Parameter-Paar hinzufügen</string>
|
||||
<string name="parameterName">Parameter Name</string>
|
||||
<string name="parameterValue">Parameter Wert</string>
|
||||
@ -288,7 +271,7 @@
|
||||
<string name="with">mit</string>
|
||||
<string name="phoneNumber">Telefonnummer</string>
|
||||
<string name="enterPhoneNumber">Geben Sie eine Telefonnummer ein. Leer lassen für irgendeine Nummer.</string>
|
||||
<string name="phoneDirection">Wählen Sie die Gesprächsrichtung</string>
|
||||
<string name="phoneDirection">Wählen Sie die\nGesprächsrichtung</string>
|
||||
<string name="any">egal</string>
|
||||
<string name="incoming">eingehend</string>
|
||||
<string name="outgoing">ausgehend</string>
|
||||
@ -326,24 +309,20 @@
|
||||
<string name="toggling">Schalte um</string>
|
||||
<string name="toggle">umzuschalten</string>
|
||||
<string name="overlapBetweenPois">Überschneidung mit Ort %1$s von %2$s Metern festgestellt. Reduzieren Sie den Radius um mindestens diesen Wert.</string>
|
||||
<string name="noOverLap">Keine Überschneidung mit anderen Orten festgestellt.</string>
|
||||
<string name="ruleToggable">Regel %1$s ist umkehrbar.</string>
|
||||
<string name="ruleNotToggable">Regel %1$s ist nicht umkehrbar.</string>
|
||||
<string name="none">keiner</string>
|
||||
<string name="anyLocation">irgendein Ort</string>
|
||||
<string name="invalidPoiName">Ungültiger Name für einen Ort.</string>
|
||||
<string name="eraseSettings">Einstellungen löschen</string>
|
||||
<string name="defaultSettings">Standard Einstellungen</string>
|
||||
<string name="areYouSure">Sind sie sicher?</string>
|
||||
<string name="poiCouldBeInRange">Mindestens Ort %1$s könnte im nahen Umkreis liegen, wenn nicht noch andere.</string>
|
||||
<string name="noPoiInRelevantRange">Kein Ort im näheren Umkreis.</string>
|
||||
<string name="activityDetection">Aktivitätserkennung</string>
|
||||
<string name="detectedActivity">Erkannte Tätigkeit:</string>
|
||||
<string name="detectedActivityInVehicle">In einem Fahrzeug (Auto/Bus)</string>
|
||||
<string name="detectedActivityOnBicycle">Auf dem Fahrrad</string>
|
||||
<string name="detectedActivityOnFoot">Zu Fuß</string>
|
||||
<string name="detectedActivityStill">Ruhe</string>
|
||||
<string name="detectedActivityUnknown">Unbekannt</string>
|
||||
<string name="detectedActivityUnknown">unbekannt</string>
|
||||
<string name="detectedActivityTilting">Kippen</string>
|
||||
<string name="detectedActivityWalking">Gehen</string>
|
||||
<string name="detectedActivityRunning">Laufen</string>
|
||||
@ -367,8 +346,6 @@
|
||||
<string name="bluetoothDeviceInRange">Bluetooth Gerät %1$s in Reichweite.</string>
|
||||
<string name="bluetoothDeviceOutOfRange">Bluetooth Gerät %1$s außer Reichweite.</string>
|
||||
<string name="anyDevice">irgendeinem Gerät</string>
|
||||
<string name="ruleDoesntApplyNotTheCorrectDeviceName">Regel trifft nicht zu. Nicht der korrekte Bluetooth-Geräte-Name.</string>
|
||||
<string name="ruleDoesntApplyNotTheCorrectDeviceAddress">Regel trifft nicht zu. Nicht die korrekte Bluetooth-Geräte-Adresse.</string>
|
||||
<string name="noDevice">kein Gerät</string>
|
||||
<string name="selectDeviceFromList">Gerät aus Liste</string>
|
||||
<string name="connectionToDevice">Gerät verbunden</string>
|
||||
@ -377,8 +354,6 @@
|
||||
<string name="deviceOutOfRange">Gerät außer Reichweite</string>
|
||||
<string name="selectDeviceOption">Wählen Sie eine Geräteoption.</string>
|
||||
<string name="selectConnectionOption">Wählen Sie eine Verbindungsoption.</string>
|
||||
<string name="ruleDoesntApplyDeviceInRangeButShouldNotBe">Regel trifft nicht zu. Gerät ist in Reichweite, aber sollte nicht sein.</string>
|
||||
<string name="ruleDoesntApplyStateNotCorrect">Regel trifft nicht zu. Falscher Status.</string>
|
||||
<string name="triggerHeadsetPlugged">Headset Verbindung</string>
|
||||
<string name="actionPlayMusic">Musikplayer öffnen</string>
|
||||
<string name="headsetConnected">Headset (type: %1$s) verbunden</string>
|
||||
@ -414,7 +389,7 @@
|
||||
<string name="soundModeNormal">Normal</string>
|
||||
<string name="soundModeVibrate">Vibration</string>
|
||||
<string name="soundModeSilent">Stumm</string>
|
||||
<string name="enterAname">Enter a name!</string>
|
||||
<string name="enterAname">Enter a name.</string>
|
||||
<string name="noChangeSelectedProfileDoesntMakeSense">Keine Veränderungen ausgewählt. Profil macht so keinen Sinn.</string>
|
||||
<string name="noProfilesCreateOneFirst">Es existieren keine Profile. Erstellen Sie erst eins.</string>
|
||||
<string name="errorActivatingProfile">Fehler beim Aktivieren des Profils:</string>
|
||||
@ -461,7 +436,6 @@
|
||||
<string name="appRequiresPermissiontoAccessExternalStorage">Automation benötigt Rechte, um auf den Speicher zuzugreifen, um seine Konfiguration und Regeln lesen zu können.</string>
|
||||
<string name="mainScreenPermissionNote">Automation benötigt mehr Rechte, um vollständig funktionsfähig zu sein. Klicken Sie auf diesen Text, um mehr zu erfahren und die fehlenden Rechte zu beantragen.</string>
|
||||
<string name="invalidDevice">Ungültiges Gerät</string>
|
||||
<string name="google_app_id">your app id</string>
|
||||
<string name="logFileMaxSizeSummary">Maximale Größe der Protokolldatei in Megabyte. Wenn sie größer wird, wird sie rotiert.</string>
|
||||
<string name="logFileMaxSizeTitle">Maximale Größe des Protokolls [Mb]</string>
|
||||
<string name="android.permission.READ_CALL_LOG">Telefonprotokoll lesen</string>
|
||||
@ -604,4 +578,12 @@
|
||||
<string name="noKnownWifis">Es gibt keine bekannten WLANs auf Ihrem Gerät.</string>
|
||||
<string name="needLocationPermForWifiList">Die Liste von WLANs auf Ihrem Gerät könnte verwendet werden, um zu ermitteln, an welchen Orten Sie waren. Deshalb ist die Positions-Berechtigung nötig, um die Liste dieser WLANs zu laden. Wenn Sie eines aus der Liste auswählen möchten, müssen Sie diese Berechtigung gewähren. Wenn nicht, können Sie immer noch eines manuell eingeben.</string>
|
||||
<string name="urlToTriggerExplanation">Diese Funktion öffnet NICHT den Browser, sondern löst die HTTP Anfrage im Hintergrund aus. Sie können das z.B. benutzen, um Befehle an Ihre Heimautomatisierung zu schicken.</string>
|
||||
<string name="clone">Klonen</string>
|
||||
<string name="updateAvailable">Es gibt eine neue Version der Anwendung. Möchten Sie den Browser öffnen, um sie herunterzuladen?</string>
|
||||
<string name="automaticUpdateCheckSummary">Nur bei der APK Version.</string>
|
||||
<string name="automaticUpdateCheck">Nach Updates suchen</string>
|
||||
<string name="locationFound">Position gefunden. Der vorgeschlagene Mindestradius für Orte beträgt %1$d m.</string>
|
||||
<string name="locationFoundInaccurate">Es konnte nur eine ungenaue Position gefunden werden. Das funktioniert u.U. nicht zuverlässig. Der vorgeschlagene Mindestradius für Orte beträgt %1$d m.</string>
|
||||
<string name="pleaseGiveBgLocation">Gehen Sie auf dem nächsten Bildschirm bitte auf Berechtigungen, dann Position. Wählen Sie dort Immer erlauben aus, um Automation zu ermöglichen, die Position im Hintergrund zu ermitteln.</string>
|
||||
<string name="noLocationCouldBeFound">Leider konnte nach einem Limit von %1$s Sekunden keine Position gefunden werden.</string>
|
||||
</resources>
|
@ -1,20 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="ruleActivate">Estoy activando norma %1$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 norma %1$s en el modo del invertir</string>
|
||||
<string name="ruleActivateToggle">Estoy activando regla %1$s en el modo del invertir</string>
|
||||
<string name="addPoi">Crear sitio</string>
|
||||
<string name="addRule">Crear norma</string>
|
||||
<string name="addRule">Crear regla</string>
|
||||
<string name="poiList">Lista de sitios:</string>
|
||||
<string name="ruleList">Lista de normas:</string>
|
||||
<string name="ruleList">Lista de reglas:</string>
|
||||
<string name="pleaseEnterValidName">Inserte un nombre válido, por favor.</string>
|
||||
<string name="pleaseSpecifiyTrigger">Inserta al menos una condición, por favor.</string>
|
||||
<string name="pleaseSpecifiyAction">Inserta al menos una acción, por favor.</string>
|
||||
<string name="serviceWontStart">No hay normas definidas. Servicio no enciende.</string>
|
||||
<string name="serviceWontStart">No hay reglas definidas. Servicio no enciende.</string>
|
||||
<string name="serviceStarted">Automation servicio ha iniciado.</string>
|
||||
<string name="version">Versión %1$s.</string>
|
||||
<string name="distanceBetween">Distancia entre el sitio GPS y el sitio red está %1$d metros. Este +1m debe ser el minimo.</string>
|
||||
<string name="comparing">Tengo tanto sitio red como sitio gps. Estoy comparando...</string>
|
||||
<string name="distanceBetween">Distancia entre el sitio GPS y el sitio red está %1$d metros. Este +1m debe ser el mínimo.</string>
|
||||
<string name="positioningWindowNotice">Si está en una edificación vaya cerca de una ventana hasta que una posición haya sido encontrada. Sino podria durar mucho tiempo o no seria posible.</string>
|
||||
<string name="gettingPosition">Buscando posición. Espere, por favor...</string>
|
||||
<string name="yes">Si</string>
|
||||
@ -25,15 +24,15 @@
|
||||
<string name="thursday">Jueves</string>
|
||||
<string name="friday">Viernes</string>
|
||||
<string name="saturday">Sábado</string>
|
||||
<string name="headphoneMicrophone">Microfóno</string>
|
||||
<string name="whatsThis">Que es eso?</string>
|
||||
<string name="headphoneMicrophone">Micrófono</string>
|
||||
<string name="whatsThis">Qué es esto?</string>
|
||||
<string name="privacyLocationingTitle">Solo usar localización privada</string>
|
||||
<string name="volumeAlarms">Alarmas</string>
|
||||
<string name="change">modificar</string>
|
||||
<string name="soundModeNormal">Normal</string>
|
||||
<string name="soundModeVibrate">Vibración</string>
|
||||
<string name="soundModeSilent">Silencio</string>
|
||||
<string name="enterAname">Enter a name!</string>
|
||||
<string name="enterAname">Inserte un nombre.</string>
|
||||
<string name="username">Nombre de usuario</string>
|
||||
<string name="ok">Ok</string>
|
||||
<string name="continueText">continuar</string>
|
||||
@ -44,16 +43,16 @@
|
||||
<string name="sendTextMessage">Enviar mensaje SMS</string>
|
||||
<string name="importNumberFromContacts">Importar número del directorio</string>
|
||||
<string name="edit">Editar</string>
|
||||
<string name="textToSend">Texto de enviar</string>
|
||||
<string name="textToSend">Texto para enviar</string>
|
||||
<string name="password">Contraseña</string>
|
||||
<string name="showOnMap">Monstrar en una mapa</string>
|
||||
<string name="headphoneAny">Igual</string>
|
||||
<string name="showOnMap">Mostrar en un mapa</string>
|
||||
<string name="headphoneAny">Cualquier</string>
|
||||
<string name="sunday">Domingo</string>
|
||||
<string name="pleaseEnterValidLatitude">Por favor inserte un grado de latitud válido.</string>
|
||||
<string name="pleaseEnterValidLongitude">Por favor inserte un grado de longitud válido.</string>
|
||||
<string name="pleaseEnterValidRadius">Por favor inserte un radio válido.</string>
|
||||
<string name="selectOneDay">Por favor seleccione al menos un dia.</string>
|
||||
<string name="whatToDoWithRule">Hacer que con la norma?</string>
|
||||
<string name="selectOneDay">Por favor seleccione al menos un día.</string>
|
||||
<string name="whatToDoWithRule">Hacer que con la regla?</string>
|
||||
<string name="whatToDoWithPoi">Hacer que con el sitio?</string>
|
||||
<string name="whatToDoWithProfile">Hacer que con el perfil?</string>
|
||||
<string name="delete">eliminar</string>
|
||||
@ -61,7 +60,7 @@
|
||||
<string name="serviceStopped">Servicio automation terminado.</string>
|
||||
<string name="logServiceStopping">Terminando servicio.</string>
|
||||
<string name="stillGettingPosition">Todavia buscando posición</string>
|
||||
<string name="lastRule">Última norma:</string>
|
||||
<string name="lastRule">Última regla:</string>
|
||||
<string name="at">el</string>
|
||||
<string name="service">Servicio:</string>
|
||||
<string name="getCurrentPosition">Buscar posición actual</string>
|
||||
@ -69,14 +68,14 @@
|
||||
<string name="deletePoi">Eliminar posición</string>
|
||||
<string name="latitude">Latitud</string>
|
||||
<string name="longitude">Longitud</string>
|
||||
<string name="ruleName">Nombre de la norma</string>
|
||||
<string name="ruleName">Nombre de la regla</string>
|
||||
<string name="triggers">Condición(es)</string>
|
||||
<string name="triggersComment">y-conectado (todo tiene que aplicar al mismo tiempo)</string>
|
||||
<string name="addTrigger">Añadir condición</string>
|
||||
<string name="actions">Acción(es)</string>
|
||||
<string name="actionsComment">(ejecutado en esta orden)</string>
|
||||
<string name="addAction">Añadir acción</string>
|
||||
<string name="saveRule">Guardar norma</string>
|
||||
<string name="saveRule">Guardar regla</string>
|
||||
<string name="start">Inicio</string>
|
||||
<string name="end">Final</string>
|
||||
<string name="save">Guardar</string>
|
||||
@ -97,13 +96,13 @@
|
||||
<string name="whatToDoWithTrigger">Hacer que con la condición?</string>
|
||||
<string name="whatToDoWithAction">Hacer que con la acción?</string>
|
||||
<string name="radiusHasToBePositive">Radio tiene que ser un número positivo.</string>
|
||||
<string name="poiStillReferenced">Todavia hay normas que usan este sitio (%1$s). No puedo eliminarlo.</string>
|
||||
<string name="poiStillReferenced">Todavia hay reglas que usan este sitio (%1$s). No puedo eliminarlo.</string>
|
||||
<string name="generalSettings">Configuración general.</string>
|
||||
<string name="startAtSystemBoot">Iniciar al boot.</string>
|
||||
<string name="writeLogFile">Escribir un archivo protocolo</string>
|
||||
<string name="wifiState">Estado wifi</string>
|
||||
<string name="showHelp">Descripción</string>
|
||||
<string name="rules">Normas</string>
|
||||
<string name="rules">Reglas</string>
|
||||
<string name="timeframes">Intervalo</string>
|
||||
<string name="helpTitleEnergySaving">Configuración de ahorro de energia</string>
|
||||
<string name="speedMaximumTime">Tiempo en minutos</string>
|
||||
@ -141,8 +140,8 @@
|
||||
<string name="wifiConnection">Coneción a un wifi</string>
|
||||
<string name="exceeding">exedendo</string>
|
||||
<string name="droppingBelow">estendo menos que</string>
|
||||
<string name="anyWifi">algun wifi</string>
|
||||
<string name="selectApplication">Elija la app</string>
|
||||
<string name="anyWifi">algún wifi</string>
|
||||
<string name="selectApplication">Elija app</string>
|
||||
<string name="selectPackageOfApplication">Elija el paquete de la app</string>
|
||||
<string name="selectActivityToBeStarted">Elija la actividad de la app</string>
|
||||
<string name="errorStartingOtherActivity">Error encendiendo otra app</string>
|
||||
@ -178,7 +177,7 @@
|
||||
<string name="startScreen">Ventana incial</string>
|
||||
<string name="positioningEngine">Metodo de localización</string>
|
||||
<string name="deviceDoesNotHaveBluetooth">Este dispositivo no tiene Bluetooth. Puede continuar pero probablemente no va a funciónar.</string>
|
||||
<string name="android.permission.READ_CALL_LOG">Leer protocolo de teléfono</string>
|
||||
<string name="android.permission.READ_CALL_LOG">Leer protocolo de llamadas</string>
|
||||
<string name="android.permission.READ_CALENDAR">Leer calendario</string>
|
||||
<string name="android.permission.ACCESS_FINE_LOCATION">Determinar la posición exacta</string>
|
||||
<string name="android.permission.ACCESS_COARSE_LOCATION">Determinar la posición aproximada</string>
|
||||
@ -188,15 +187,15 @@
|
||||
<string name="android.permission.VIBRATE">Vibrar</string>
|
||||
<string name="android.permission.MODIFY_AUDIO_SETTINGS">Modificar la configuración sonida</string>
|
||||
<string name="android.permission.RECORD_AUDIO">Grabar audio</string>
|
||||
<string name="android.permission.PROCESS_OUTGOING_CALLS">Detecar llamados saliendos</string>
|
||||
<string name="android.permission.READ_PHONE_STATE">Detecar el estado del dispositivo</string>
|
||||
<string name="android.permission.READ_EXTERNAL_STORAGE">Leer la memoria</string>
|
||||
<string name="android.permission.WRITE_EXTERNAL_STORAGE">Escribir a la memoria</string>
|
||||
<string name="android.permission.PROCESS_OUTGOING_CALLS">Detectar llamadas salientes</string>
|
||||
<string name="android.permission.READ_PHONE_STATE">Detectar el estado del dispositivo</string>
|
||||
<string name="android.permission.READ_EXTERNAL_STORAGE">Leer la almacenamiento</string>
|
||||
<string name="android.permission.WRITE_EXTERNAL_STORAGE">Escribir en el almacenamiento</string>
|
||||
<string name="android.permission.WRITE_SETTINGS">Modificar la configuración del dispositivo</string>
|
||||
<string name="android.permission.BATTERY_STATS">Determinar el estado de la batteria</string>
|
||||
<string name="android.permission.BATTERY_STATS">Determinar el estado de la bateria</string>
|
||||
<string name="android.permission.CHANGE_BACKGROUND_DATA_SETTING">Modificar la conexión internet</string>
|
||||
<string name="android.permission.ACCESS_NOTIFICATION_POLICY">Exeder configuración no molestar</string>
|
||||
<string name="android.permission.WRITE_SECURE_SETTINGS">Escribir a la memoria</string>
|
||||
<string name="android.permission.WRITE_SECURE_SETTINGS">Escribir en el almacenamiento</string>
|
||||
<string name="apply">acplicar</string>
|
||||
<string name="publishedOn">publicitado el</string>
|
||||
<string name="postsNotification">%1$s crea notificación</string>
|
||||
@ -210,7 +209,7 @@
|
||||
<string name="configurationExportedSuccessfully">Exportación completada con éxito</string>
|
||||
<string name="noFileManageInstalled">No mánager archivo esta instalada</string>
|
||||
<string name="cantFindSoundFile">No puedo buscar el archivo sonido %1$s, por eso no puedo tocar lo.</string>
|
||||
<string name="ruleActive">Norma activa</string>
|
||||
<string name="ruleActive">Regla activa</string>
|
||||
<string name="triggerCharging">Batteria esta cargando</string>
|
||||
<string name="triggerUsb_host_connection">USB conexión a un computador</string>
|
||||
<string name="actionSetDisplayRotation">Girar monitor</string>
|
||||
@ -220,14 +219,14 @@
|
||||
<string name="enterWifiName">Inserta el nombre del wifi. Deje vacio para applicar a todos wifis.</string>
|
||||
<string name="startOtherActivity">Iniciar otra app</string>
|
||||
<string name="settings">Ajustes</string>
|
||||
<string name="bluetoothConnection">Bluetooth conexión</string>
|
||||
<string name="bluetoothConnectionTo">Bluetooth conexión to %1$s</string>
|
||||
<string name="bluetoothConnection">Conexión Bluetooth</string>
|
||||
<string name="bluetoothConnectionTo">Conexión Bluetooth con %1$s</string>
|
||||
<string name="anyDevice">cualquier dispositivo</string>
|
||||
<string name="noDevice">no dispositivo</string>
|
||||
<string name="actionPlayMusic">Abrir jugador musica</string>
|
||||
<string name="noDevice">ningun dispositivo</string>
|
||||
<string name="actionPlayMusic">Abrir reproductor de música</string>
|
||||
<string name="profiles">Perfiles</string>
|
||||
<string name="ruleHistory">Historia de normas (más ultimas al primero)</string>
|
||||
<string name="lockSoundChanges">Bloquerar modificaciónes sonidas</string>
|
||||
<string name="ruleHistory">Historia de reglas (más ultimas al primero)</string>
|
||||
<string name="lockSoundChanges">Bloquear modificaciónes de sonido</string>
|
||||
<string name="status">Estado</string>
|
||||
<string name="android.permission.ACCESS_NETWORK_STATE">Determinar el estado de la red</string>
|
||||
<string name="clickAndHoldForOptions">Clice ý ase un elemento para opciónes</string>
|
||||
@ -235,16 +234,16 @@
|
||||
<string name="addProfile">Añadir perfil</string>
|
||||
<string name="profile">Perfil</string>
|
||||
<string name="invalidProfileName">Nombre invalido</string>
|
||||
<string name="anotherProfileByThatName">Hay otro perfil con lo mismo nombre.</string>
|
||||
<string name="anotherProfileByThatName">Hay otro perfil con el mismo nombre.</string>
|
||||
<string name="errorActivatingProfile">Error activando perfil:</string>
|
||||
<string name="executeRulesAndProfilesWithSingleClickTitle">Activar normas/perfiles con 1 clic</string>
|
||||
<string name="executeRulesAndProfilesWithSingleClickTitle">Activar reglas/perfiles con 1 clic</string>
|
||||
<string name="name">Nombre</string>
|
||||
<string name="useAuthentication">Usar verificación de la autenticidad</string>
|
||||
<string name="radiusWithUnit">Radio [m]</string>
|
||||
<string name="volumes">Niveles sonidos</string>
|
||||
<string name="volumes">Volumenes</string>
|
||||
<string name="volumeRingtoneNotifications">Sonido polifónico ý notificaciónes</string>
|
||||
<string name="notificationRingtone">Sonido polifónico para notificaciónes</string>
|
||||
<string name="incomingCallsRingtone">Sonido polifónico para llamadas</string>
|
||||
<string name="incomingCallsRingtone">Sonido de llamadas</string>
|
||||
<string name="batteryLevel">NIvel de la bateria</string>
|
||||
<string name="selectBattery">Elija nivel de la bateria</string>
|
||||
<string name="triggerNoiseLevel">Nivel del rudio fondo</string>
|
||||
@ -255,17 +254,17 @@
|
||||
<string name="headsetDisconnected">Auriculares (tipo: %1$s) desconectados</string>
|
||||
<string name="phoneCall">Llamada</string>
|
||||
<string name="phoneNumber">Número de teléfono</string>
|
||||
<string name="enterPhoneNumber">Inserte numero de teléfono. Vacio para algun número.</string>
|
||||
<string name="phoneDirection">Elija llamada entrante o saliente</string>
|
||||
<string name="enterPhoneNumber">Inserte numero de teléfono. Vacio para algún número.</string>
|
||||
<string name="phoneDirection">Elija llamada\nentrante o saliente</string>
|
||||
<string name="headphoneSimple">Auriculares</string>
|
||||
<string name="headphoneSelectType">Elegir tipo de los auriculares</string>
|
||||
<string name="headphoneSelectType">Elija tipo de auriculares</string>
|
||||
<string name="accelerometer">" Acelerómetro"</string>
|
||||
<string name="gpsAccuracy">GPS exactitud [m]</string>
|
||||
<string name="soundSettings">Configuración de sonido</string>
|
||||
<string name="settingsCategoryNoiseLevelMeasurements">Medición de ruido fondo</string>
|
||||
<string name="waitBeforeNextAction">Esperar antes de la acción próxima</string>
|
||||
<string name="wakeupDevice">Despertar dispositivo</string>
|
||||
<string name="textToSpeak">Text para hablar</string>
|
||||
<string name="textToSpeak">Texto para hablar</string>
|
||||
<string name="state">Estado</string>
|
||||
<string name="setScreenBrightness">Poner luminosidad del monitor</string>
|
||||
<string name="brightnessManual">luminosidad manual del monitor</string>
|
||||
@ -280,15 +279,15 @@
|
||||
<string name="activate">Activar</string>
|
||||
<string name="deactivate">Desactivar</string>
|
||||
<string name="deactivated">desactivado</string>
|
||||
<string name="selectNoiseLevel">Elija nivel del ruido fondo</string>
|
||||
<string name="selectNoiseLevel">Elija nivel del ruido de fondo</string>
|
||||
<string name="selectSpeed">Elija velocidad</string>
|
||||
<string name="selectTypeOfActivity">Elija tipo de actividad</string>
|
||||
<string name="selectTypeOfTrigger">Elija tipo de condición</string>
|
||||
<string name="startAppStartType">Elija tipo de comienzo</string>
|
||||
<string name="android.permission.BLUETOOTH">Cambiar ajusted Bluetooth</string>
|
||||
<string name="android.permission.BLUETOOTH_ADMIN">Cambiar ajusted Bluetooth</string>
|
||||
<string name="android.permission.BLUETOOTH">Cambiar ajustes Bluetooth</string>
|
||||
<string name="android.permission.BLUETOOTH_ADMIN">Cambiar ajustes Bluetooth</string>
|
||||
<string name="moreSettings">Mas ajustes</string>
|
||||
<string name="openExamplesPage">Abrir pagina con ejemplos</string>
|
||||
<string name="openExamplesPage">Abrir página con ejemplos</string>
|
||||
<string name="activityOrActionName">Nombre del la\nactivitdad or la action</string>
|
||||
<string name="packageName">Nombre del paquete</string>
|
||||
<string name="parameterName">Nombre del parámetro</string>
|
||||
@ -317,7 +316,7 @@
|
||||
<string name="gpsComparison">Comparación GPS</string>
|
||||
<string name="timeoutForGpsComparisonsTitle">GPS timeout [sec]</string>
|
||||
<string name="muteTextToSpeechDuringCallsTitle">Silencio durante llamadas</string>
|
||||
<string name="anotherRuleByThatName">Ya existe otra norma con el mismo nombre.</string>
|
||||
<string name="anotherRuleByThatName">Ya existe otra regla con el mismo nombre.</string>
|
||||
<string name="settingsCategoryProcessMonitoring">Monitoreo de procesos</string>
|
||||
<string name="timeBetweenProcessMonitoringsTitle">Segundos inter monitoreos de procesos</string>
|
||||
<string name="processes">Procesos</string>
|
||||
@ -345,19 +344,19 @@
|
||||
<string name="positioningSettings">Configuración de buscar posición</string>
|
||||
<string name="listenToWifiState">Observar estado de wifi cuando es posible</string>
|
||||
<string name="listenToAccelerometerState">Observar movimiento del dispositivo cuando wifi no está disponible</string>
|
||||
<string name="accelerometerTimer">Usar acelerómetro despues x minutos sin cambio de torre telefónica</string>
|
||||
<string name="accelerometerTimer">Usar acelerómetro después x minutos sin cambio de torre telefónica</string>
|
||||
<string name="cellMastIdleTime">Tiempo inactivo de las torres telefónicas</string>
|
||||
<string name="accelerometerThresholdDescription">Valor limite para movimientos acelerómetro</string>
|
||||
<string name="accelerometerThreshold">Valor acelerómetro</string>
|
||||
<string name="positioningThresholds">Posicionando valores</string>
|
||||
<string name="minimumDistanceChangeForGpsLocationUpdates">Minima distancia para cambio de GPS</string>
|
||||
<string name="distanceForGpsUpdate">Minimo cambio GPS [m]</string>
|
||||
<string name="minimumDistanceChangeForNetworkLocationUpdates">Minima distancia para cambio de red telefonica</string>
|
||||
<string name="distanceForNetworkUpdate">Minimo cambio red [m]</string>
|
||||
<string name="minimumDistanceChangeForGpsLocationUpdates">Mínima distancia para cambio de GPS</string>
|
||||
<string name="distanceForGpsUpdate">Mínimo cambio GPS [m]</string>
|
||||
<string name="minimumDistanceChangeForNetworkLocationUpdates">Mínima distancia para cambio de red telefonica</string>
|
||||
<string name="distanceForNetworkUpdate">Mínimo cambio red [m]</string>
|
||||
<string name="satisfactoryAccuracyGps">Exactitud necesaria para GPS en metros.</string>
|
||||
<string name="satisfactoryAccuracyNetwork">Exactitud necesaria para red en metros.</string>
|
||||
<string name="networkAccuracy">Red exactitud [m]</string>
|
||||
<string name="minimumTimeForLocationUpdates">Tiempo minimo para cambio en milisegundos para actualizar posición</string>
|
||||
<string name="minimumTimeForLocationUpdates">Tiempo mínimo para cambio en milisegundos para actualizar posición</string>
|
||||
<string name="timeForUpdate">Tiempo de 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\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>
|
||||
@ -365,35 +364,33 @@ Incluya las paréntecis en su texto.\n\n[uniqueid] - el número único de su dis
|
||||
<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 a cuales estuve. Por eso el permiso locación esta necesaria para cargar la lista de wifis. Si quiere elegir un de la lista tiene que conceder el permiso. En caso contrario todavia puede entrar un nombre wifi manualmente.</string>
|
||||
<string name="com.wireguard.android.permission.CONTROL_TUNNELS">Controlar conexiones de la app wireguard</string>
|
||||
<string name="shareConfigAndLogFilesWithDev">Enviar configuración y procotolo al developer (via email).</string>
|
||||
<string name="rootExplanation">Necesita permiso root para este functión. Después encenda la función \"ejecutar norma manualmente\" para presentar el permiso superuser dialogo. Es necesita elegir \"siempre permitir root para esta app\". En caso contrario la norma no puede funcionar al fondo.</string>
|
||||
<string name="helpTextRules">Todos las condiciones estan y-conectado. La norma solo va a aplicarse cuando todos las condiciones sus aplican. Si quiere O cree otra norma.</string>
|
||||
<string name="shareConfigAndLogFilesWithDev">Enviar configuración y procotolo al developer (vía email).</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">Todos las condiciones están y-conectado. La regla solo va a aplicarse cuando todos las condiciones sus aplican. Si quiere O cree otra regla.</string>
|
||||
<string name="timeBetweenNoiseLevelMeasurementsSummary">Segundos inter dos ensayos de nivel de ruido</string>
|
||||
<string name="timeBetweenNoiseLevelMeasurementsTitle">Segundos inter dos ensayos de nivel de ruido</string>
|
||||
<string name="lengthOfNoiseLevelMeasurementsSummary">Duración en segundos para un ensayos de nivel de ruido</string>
|
||||
<string name="lengthOfNoiseLevelMeasurementsTitle">Duración en segundos para un ensayos de nivel de ruido</string>
|
||||
<string name="referenceValueForNoiseLevelMeasurementsSummary">Referencia fisicalo para ensayo de nivel ruido</string>
|
||||
<string name="referenceValueForNoiseLevelMeasurementsTitle">Referencia fisicalo para ensayo de nivel ruido</string>
|
||||
<string name="logLevelSummary">Nivel del registro (1=minimo, 5=maximo)</string>
|
||||
<string name="logLevelSummary">Nivel del registro (1=mínimo, 5=máximo)</string>
|
||||
<string name="logLevelTitle">Nivel del registro</string>
|
||||
<string name="unknownActionSpecified">Ación inconocido especicado</string>
|
||||
<string name="errorChangingScreenRotation">Error cambiando rotación del monitor</string>
|
||||
<string name="failedToTriggerBluetooth">Error cambiando Bluetooth. El dispositivo tiene Bluetooth?</string>
|
||||
<string name="settingsCategoryHttp">Pedido HTTP</string>
|
||||
<string name="httpAttemptsSummary">Cantidad de los pruebos en caso pedidos HTTP fallan por razones de conexißon</string>
|
||||
<string name="httpAttemptGapSummary">Pausa antes de otra prueba [segundos]</string>
|
||||
<string name="timeoutForGpsComparisonsSummary">Tiempo maximo en segundos</string>
|
||||
<string name="rememberLastActivePoiSummary">Se esta en un sitio reinicie su dispositivo o la aplicaión y salga el sitio la aplicaión va a procesar normas que incluyan saliendo este sitio.</string>
|
||||
<string name="timeoutForGpsComparisonsSummary">Tiempo máximo en segundos</string>
|
||||
<string name="rememberLastActivePoiSummary">Se esta en un sitio reinicie su dispositivo o la aplicaión y salga el sitio la aplicaión va a procesar reglas que incluyan saliendo este sitio.</string>
|
||||
<string name="rememberLastActivePoiTitle">Memorar ultimom sitio activo.</string>
|
||||
<string name="settingsErased">Configuración borrado.</string>
|
||||
<string name="settingsSetToDefault">Configuración reajustado al predeterminado.</string>
|
||||
<string name="privacyConfirmationText">Voy a abrir un browser y cargar la politica de privacidad de la pagina del desarrolador.</string>
|
||||
<string name="privacyConfirmationText">Voy a abrir un browser y cargar la política de privacidad de la página del desarrolador.</string>
|
||||
<string name="waitBeforeNextActionEnterValue">Inserte un valor en milisegundos por cuánto tiempo esperar antes de la proxima acción.</string>
|
||||
<string name="wakeupDeviceValue">Inserte un valor en milisegundos por cuánto tiempo el dispositivo se tiene que quedar activo. 0 para usar el valor predeterminado.</string>
|
||||
<string name="enterAPositiveValidNonDecimalNumber">Inserte un numero positivo no-decimal.</string>
|
||||
<string name="cantMoveUp">No puedo mover objeto arriba. Ya está en el maximo.</string>
|
||||
<string name="cantMoveDown">No puedo mover objeto abajo. Todavia está en el minimo.</string>
|
||||
<string name="timeFrameWhichDays">En cuales dias?</string>
|
||||
<string name="cantMoveUp">No puedo mover objeto arriba. Ya está en el máximo.</string>
|
||||
<string name="cantMoveDown">No puedo mover objeto abajo. Todavia está en el mínimo.</string>
|
||||
<string name="timeFrameWhichDays">En cuales días?</string>
|
||||
<string name="insideOrOutsideTimeFrames">Dentro o fuera de esos periodos?</string>
|
||||
<string name="roaming">Roaming</string>
|
||||
<string name="until">hasta</string>
|
||||
@ -404,10 +401,10 @@ Incluya las paréntecis en su texto.\n\n[uniqueid] - el número único de su dis
|
||||
<string name="incoming">recibiendo</string>
|
||||
<string name="outgoing">saliendo</string>
|
||||
<string name="noKnownWifis">No hay wifis conociendos en su disparador.</string>
|
||||
<string name="helpTextTimeFrame">Si crea una norma con un periodo tiene dos opciones. Puede elegir entre entrar o salir de un periodo. En todo caso la norma será ejecutada solo una vez. Si crea una norma con una condición \"entrar periodo xyz\" y por ejemplo la acción \"poner el dispositivo en vibración\", el dispositivo NO va a cambiar a sonido de llamada automaticamente despues del periodo. Si desea esto tiene que crear otra norma con otro periodo.</string>
|
||||
<string name="toggableRules">Normas reversibles</string>
|
||||
<string name="helpTextPoi">Un sitio consiste de coordinadas GPS y un radio. Porque la localización via red móvil terrestre es relativamente imprecisa (pero rápido y barato) no especifiqué el radio demasiado corto. La applicación va a sugerir un radio minimo cuando cree nuevo sitio.</string>
|
||||
<string name="generalText">Para usar este programa tiene que crear normas. Ellos tienen condiciones, por ejemplo \"está en un sitio\" o \"está en un periodo\". Despues cliquee el on/off boton en la pantalla principal.</string>
|
||||
<string name="helpTextTimeFrame">Si crea una regla con un periodo tiene dos opciones. Puede elegir entre entrar o salir de un periodo. En todo caso la regla será ejecutada solo una vez. Si crea una regla con una condición \"entrar periodo xyz\" y por ejemplo la acción \"poner el dispositivo en vibración\", el dispositivo NO va a cambiar a sonido de llamada automaticamente despues del periodo. Si desea esto tiene que crear otra regla con otro periodo.</string>
|
||||
<string name="toggableRules">Reglas reversibles</string>
|
||||
<string name="helpTextPoi">Un sitio consiste de coordinadas GPS y un radio. Porque la localización vía red móvil terrestre es relativamente imprecisa (pero rápido y barato) no especifiqué el radio demasiado corto. La applicación va a sugerir un radio minimo cuando cree nuevo sitio.</string>
|
||||
<string name="generalText">Para usar este programa tiene que crear reglas. Ellos tienen condiciones, por ejemplo \"está en un sitio\" o \"está en un periodo\". Despues cliquee el on/off boton en la pantalla principal.</string>
|
||||
<string name="muteTextToSpeechDuringCallsSummary">Poner TextToSpeech en muto mientras dura las llamadas</string>
|
||||
<string name="anotherPoiByThatName">Ya existe otro sitio con el mismo nombre.</string>
|
||||
<string name="timeBetweenProcessMonitoringsSummary">Cuanto mas bajo tanto mas se utiliza la bateria</string>
|
||||
@ -430,7 +427,7 @@ Incluya las paréntecis en su texto.\n\n[uniqueid] - el número único de su dis
|
||||
<string name="nfcReadTag">Leer ID de tag.</string>
|
||||
<string name="nfcWriteTag">Escribir tag</string>
|
||||
<string name="nfcEnterValidIdentifier">Inserte una etiqueta valida para el tag (como \"Puerta de casa\").</string>
|
||||
<string name="nfcTagWrittenSuccessfully">Tag escrita con exito.</string>
|
||||
<string name="nfcTagWrittenSuccessfully">Tag escrita con éxito.</string>
|
||||
<string name="nfcTagWriteError">Error escribiendo tag. Esta el tag cerca?</string>
|
||||
<string name="nfcTagDiscovered">Tag encontrado.</string>
|
||||
<string name="nfcBringTagIntoRange">Traiga un tag cerca.</string>
|
||||
@ -438,55 +435,140 @@ Incluya las paréntecis en su texto.\n\n[uniqueid] - el número único de su dis
|
||||
<string name="nfcUnsupportedEncoding">No hay soporte para este codigo:</string>
|
||||
<string name="nfcNoNdefIntentBut">No NFC NDEF intent, pero</string>
|
||||
<string name="nfcNotSupportedInThisAndroidVersionYet">NFC sin soporto en esta version Android, todavia no.</string>
|
||||
<string name="cantRunRule">No puedo ejecutar normas.</string>
|
||||
<string name="nfcApplyTagToRule">Aplicar este tag a norma</string>
|
||||
<string name="nfcTagReadSuccessfully">Tag escritoso con exito.</string>
|
||||
<string name="cantRunRule">No puedo ejecutar reglas.</string>
|
||||
<string name="nfcApplyTagToRule">Aplicar este tag a regla</string>
|
||||
<string name="nfcTagReadSuccessfully">Tag escritoso con éxito.</string>
|
||||
<string name="nfcValueNotSuitable">Valor guardado no valido.</string>
|
||||
<string name="nfcNoTag">No tag presente.</string>
|
||||
<string name="newNfcId">Escrbir nueve ID NFC</string>
|
||||
<string name="newId">Nueve ID:</string>
|
||||
<string name="newNfcId">Escrba nuevo ID NFC</string>
|
||||
<string name="newId">Nuevo ID:</string>
|
||||
<string name="currentId">Actual ID:</string>
|
||||
<string name="nfcTagDataNotUsable">Tag no esta utilizable, escribir de nueve.</string>
|
||||
<string name="nfcTagDataNotUsable">Tag no esta utilizable, escriba de nuevo.</string>
|
||||
<string name="none">ningún</string>
|
||||
<string name="anyLocation">cualquier sitio</string>
|
||||
<string name="eraseSettings">Borrar configuración</string>
|
||||
<string name="defaultSettings">Configuración standard</string>
|
||||
<string name="areYouSure">Está seguro?</string>
|
||||
<string name="detectedActivityOnBicycle">En bicicleta</string>
|
||||
<string name="detectedActivityOnFoot">En pie</string>
|
||||
<string name="detectedActivityOnFoot">A pie</string>
|
||||
<string name="detectedActivityInVehicle">En vehiculo (auto/autobus)</string>
|
||||
<string name="detectedActivityWalking">Andante</string>
|
||||
<string name="detectedActivityRunning">jogging</string>
|
||||
<string name="detectedActivityInvalidStatus">Acción no válida</string>
|
||||
<string name="detectedActivityWalking">Caminando</string>
|
||||
<string name="detectedActivityRunning">corriendo</string>
|
||||
<string name="detectedActivityInvalidStatus">Actividad no válida</string>
|
||||
<string name="detectedActivityTilting">Inclinando</string>
|
||||
<string name="detectedActivityStill">No movimiento</string>
|
||||
<string name="detectedActivityUnknown">desconocido</string>
|
||||
<string name="triggerOnlyAvailableIfPlayServicesInstalled">Esta condición solo esta disponsible si Google Play Services estan instalado.</string>
|
||||
<string name="activityDetectionFrequencyTitle">Frequencia de reconocimiento de actividad [seg]</string>
|
||||
<string name="activityDetectionFrequencySummary">Segundos entre pruebas de reconocimientos de actividad.</string>
|
||||
<string name="activityDetectionRequiredProbabilityTitle">Probabilidad de reconocimiento de actividad.</string>
|
||||
<string name="activityDetectionRequiredProbabilitySummary">Certeza necesario con cuelas resultatods de reconocimiento de actividad seran aceptandos.</string>
|
||||
<string name="selectDeviceFromList">un de la lista</string>
|
||||
<string name="detectedActivityStill">Sin movimiento</string>
|
||||
<string name="detectedActivityUnknown">desconocida</string>
|
||||
<string name="triggerOnlyAvailableIfPlayServicesInstalled">Esta condición solo esta disponsible si Google Play Services están instalados.</string>
|
||||
<string name="activityDetectionFrequencyTitle">Frecuencia de detección de actividad [seg]</string>
|
||||
<string name="activityDetectionFrequencySummary">Segundos entre pruebas de detección de actividad.</string>
|
||||
<string name="activityDetectionRequiredProbabilityTitle">Probabilidad de detección de actividad.</string>
|
||||
<string name="activityDetectionRequiredProbabilitySummary">Certeza necesaria con cuales resultados (de detección de actividad) serán aceptados.</string>
|
||||
<string name="selectDeviceFromList">uno de la lista</string>
|
||||
<string name="connectionToDevice">conexión a dispositivo</string>
|
||||
<string name="disconnectionFromDevice">desconexión de dispositivo</string>
|
||||
<string name="privacyLocationingSummary">Evitar usar methodos de localización cueles envian su posición a un provedor, por ejemplo Google. Eso so va a usar GPS solo. Por eso puede trajabar lento o poco fiable.</string>
|
||||
<string name="locationEngineNotActive">Ingenio de localización no esta activo.</string>
|
||||
<string name="noMapsApplicationFound">Parece no hay una aplicaión de mapa en su dispositivo.</string>
|
||||
<string name="privacyLocationingSummary">Evitar usar metodos de localización cuales envian su posición a un proveedor, por ejemplo Google. Esto solo va a usar GPS. Por eso puede trajabar lento o/y poco fiable.</string>
|
||||
<string name="locationEngineNotActive">Localización no esta activo.</string>
|
||||
<string name="noMapsApplicationFound">Parece que no hay una aplicación de mapa en su dispositivo.</string>
|
||||
<string name="soundMode">Modo de sonido de llamada.</string>
|
||||
<string name="showIcon">Monstrar icono</string>
|
||||
<string name="showIconWhenServiceIsRunning">Monstrar icono cuando el servicio esta activo (ocultando solo funciona antes Android 7)</string>
|
||||
<string name="currentVolume">Volumen actual</string>
|
||||
<string name="volumeTest">Prueba de volumen</string>
|
||||
<string name="permissionsTitle">Permisos necesarios</string>
|
||||
<string name="disabledFeatures">Funcionas desactivadas</string>
|
||||
<string name="disabledFeatures">Funciones desactivadas</string>
|
||||
<string name="invalidDevice">Dispositivo no valido.</string>
|
||||
<string name="android.permission.ACCESS_WIFI_STATE">Determinar estado de wifi</string>
|
||||
<string name="android.permission.WAKE_LOCK">Tener dispositivo despierto</string>
|
||||
<string name="android.permission.WAKE_LOCK">Mantener dispositivo activado</string>
|
||||
<string name="android.permission.MODIFY_PHONE_STATE">Cambiar ajustes del dispositivo</string>
|
||||
<string name="android.permission.GET_TASKS">Determinar procesos activados</string>
|
||||
<string name="android.permission.GET_TASKS">Determinar procesos activos</string>
|
||||
<string name="android.permission.RECEIVE_BOOT_COMPLETED">Detectar reinicio del dispositivo</string>
|
||||
<string name="helpTextActivityDetection">Esta función puede detecar su estado de movimiento (en pie, en bicicleta, en vehiculo). La función no es un parte de Automation, pero de Google Play Services. Técnicamente no da un si/no resultado, pero una certeza con que el estado es probable. Puede configurar el percentaje del cual Automation va a aceptar un resultado. Dos comentarios: 1) Mas de un estado se puede aplicar al mismo tiempo. Por ejemplo puede esta en pie en un autobus. 2) Esta sensor es relativamente caro (bateria). Si posible considere alternativas, por ejemplo bluetooth conexción a tu coche en vez de \"en vehiculo\".</string>
|
||||
<string name="textMessageAnnotations">Puede insertar un numero de llamada. Alternativamente puede importar un numero de su directorio. Pero tenga en cuenta: El numero va a serar guardado, no el contacto. Si cambias el numero en su directoria tiene que cambiar la normal tambien.</string>
|
||||
<string name="helpTextActivityDetection">Esta función puede detectar su estado de movimiento (a pie, en bicicleta, en vehiculo). La función no es parte de Automation, pero de Google Play Services. Técnicamente no da un \"si\" o \"no\" resultado, pero una probabilidad. Puede configurar este porcentaje del cual Automation va a aceptar un resultado. Dos comentarios: 1) Mas de un estado se puede aplicar al mismo tiempo. Por ejemplo puede estar a pie en un autobus. 2) Este sensor es relativamente caro (bateria). Si es posible considere alternativas, por ejemplo bluetooth conexión a su coche en vez de \"en vehiculo\".</string>
|
||||
<string name="textMessageAnnotations">Puede insertar un numero de llamada. Alternativamente puede importar un numero de su directorio. Pero tenga en cuenta: El número será guardado, no el contacto. Si cambias el número en su directorio tiene que cambiar la regla también.</string>
|
||||
<string name="startAutomationAsService">Encender automation como un servicio</string>
|
||||
<string name="startScreenSummary">Elija la pantalla con que automation enciende.</string>
|
||||
<string name="useExistingTag">Use existente tag NFC</string>
|
||||
<string name="nfcBringTagIntoRangeToRead">Traiga un tag dentro del alcance.</string>
|
||||
<string name="toggleRule">Regla reversible</string>
|
||||
<string name="toggling">revirtiendo</string>
|
||||
<string name="toggle">revertir</string>
|
||||
<string name="overlapBetweenPois">Detecte sobreposición con sitio %1$s de %2$s metros. Reduzca el radio de este al minimo.</string>
|
||||
<string name="invalidPoiName">Nombre invalido para sitio.</string>
|
||||
<string name="activityDetection">Detección de actividad</string>
|
||||
<string name="android.permission.ACTIVITY_RECOGNITION">Detección de actividad</string>
|
||||
<string name="detectedActivity">Actividad detectada:</string>
|
||||
<string name="incomingCallFrom">Llamada entrante de %1$s.</string>
|
||||
<string name="outgoingCallTo">Llamando a %1$s.</string>
|
||||
<string name="toggleNotAllowed">Reversibilidad solo esta permitida para reglas que tienen tags NFC por condición. Consulte la ayuda para mas información.</string>
|
||||
<string name="errorReadingPoisAndRulesFromFile">Error en la lectura sitios y reglas del archivo.</string>
|
||||
<string name="noDataChangedReadingAnyway">Aparece no hay cambios. Pero puede haber cambios en la memoria que pueden ser recogidos. Leyendo archivo de nuevo.</string>
|
||||
<string name="bluetoothDisconnectFrom">Conexión Bluetooth de %1$s desconectada</string>
|
||||
<string name="bluetoothDeviceInRange">Dispositivo Bluetooth %1$s en alcance.</string>
|
||||
<string name="bluetoothDeviceOutOfRange">Dispositivo Bluetooth %1$s fuera de alcance.</string>
|
||||
<string name="deviceInRange">dispositivo en alcance</string>
|
||||
<string name="deviceOutOfRange">dispositivo fuera de alcance</string>
|
||||
<string name="selectDeviceOption">Elija una opción de dispositivo.</string>
|
||||
<string name="selectConnectionOption">Elija una opción de conexión.</string>
|
||||
<string name="noiseDetectionHint">Si piensa que la detección del volumen no funciona correctamente (dependiendo del valor que configuró), tenga en cuenta todos los dispositivos son diferentes. Por eso puede cambiar la \"referencia del detección del volumen\" en la configuración. Para mas informaciones vease https://es.wikipedia.org/wiki/Nivel_de_presi%C3%B3n_sonora. Puede usar el probador del volumen en pantalla principal para calibrar su dispositivo.</string>
|
||||
<string name="hint">Pista</string>
|
||||
<string name="hapticFeedback">Sensación tactil (vibracion cuando toca la pantalla)</string>
|
||||
<string name="helpTextSound">En la pantalla principal puede usar \\\"bloquear cambios de sonido\\\" para temporalmente evitar, basado en la norma, cambios de sonido. Por ejemplo podria estar en una situación o en un sitio donde tono de llamada estan bien, pero esta vez no fuese oportuno. La función se desactiva automaticamente despues del tiempo configurado. Cliquee el + botton para adicionar mas tiempo. Se puede desactivar la función antes tambien usando el boton interuptor (en consecuencia reactivar cambios de sonido, basados en normas).</string>
|
||||
<string name="helpTextToggable">Normas tienen una configuracion que se llama \\\"reversible\\\". Significa si una norma es ejecutada y despues las mismas condiciones estan, la norma es ejecutada de forma reversible donde sea posible. Actualmente solo funciona con la condición NFC. Si toca el tag dos veces, y hay una norma reversible con este tag, la applicación va a hacer lo contrario de la situación actual, por ejemplo desactivar wifi cuando esta activo.</string>
|
||||
<string name="helpTextProcessMonitoring">Si crea una norma con vigilancia del proceso la aplicación va a revisar periodicamente si el proceso esta activo. Puede ajustar la frecuencia en la configuración. Puede relentizar la reacción, pero vigilancia permanente gasta mucha bateria. No hay una broadcast del sistema operativo para este evento.</string>
|
||||
<string name="helpTextEnergySaving">Muchos fabricantes intentan conservar energia en limitando la actividades de segundo plano de otras apps. Desafortunadamente el resultado es que en esas aplicaciones no funcionan por completo. Automation esta entre ellas. Vease <a href="https://dontkillmyapp.com/">esta pagina</a> para determinar como excluir Automation de tales medidas.</string>
|
||||
<string name="speedMaximumTimeBetweenLocations">Tiempo maximo entre 2 sitios para determinar la velocidad.</string>
|
||||
<string name="clone">Clonar</string>
|
||||
<string name="updateAvailable">Hay nueva versión de la app. Quiere abrir un browser y descargar lo?</string>
|
||||
<string name="automaticUpdateCheck">Buscar updates</string>
|
||||
<string name="urlToTriggerExplanation">Esta función NO abre el browser, pero enciende un URL en el fondo. Puede usar lo por ejemplo para enviar comandos a su automatización de la casa.</string>
|
||||
<string name="automaticUpdateCheckSummary">Solo en la versión APK.</string>
|
||||
<string name="locationFound">Determine un posición. El radio minimo sugeri es %1$d m.</string>
|
||||
<string name="locationFoundInaccurate">Solo pude determinar una posición imprecisa. Puede ser va a funcionar poco fiable. El radio minimo sugeri es %1$d m.</string>
|
||||
<string name="volumeMusicVideoGameMedia">Multimedia (música, video …)</string>
|
||||
<string name="audibleSelection">Audio habilitado cuando selectión</string>
|
||||
<string name="screenLockUnlockSound">Sonido del (des-)bloqueo de pantalla</string>
|
||||
<string name="vibrateWhenRinging">Vibrar timbrando</string>
|
||||
<string name="noChangeSelectedProfileDoesntMakeSense">No hay cambios seleccionados. Perfil no tiene sentido.</string>
|
||||
<string name="noProfilesCreateOneFirst">No hay perfilies en su configuración. Cree uno primero.</string>
|
||||
<string name="errorWritingFile">Error escribiendo el archivo.</string>
|
||||
<string name="unknownError">Error desconocido.</string>
|
||||
<string name="noWritableFolderFound">No pude encontrar una carpeta para guardar el archivo de la configuración.</string>
|
||||
<string name="usbTetheringFailForAboveGingerbread">Probablemente no funcionará porque esta mas actual que Android 2.3. Podría usar el enrutador wifi en lugar de eso.</string>
|
||||
<string name="usingNewThreadForRuleExecution">Usar nuevo thread para ejecutar regla.</string>
|
||||
<string name="startNewThreadForRuleExecution">Usar nuevo thread para ejecutar regla.</string>
|
||||
<string name="newThreadRules">Nuevo thread</string>
|
||||
<string name="someOptionsNotAvailableYet">Algunas opcciones estan desactivadas y todavia no pueden ser usadas. Estas seran introducidas en una versión futura.</string>
|
||||
<string name="noProfileChangeSoundLocked">Perfil no será activado. Último perfil activado estuvo/esta bloqueado.</string>
|
||||
<string name="enterValidReferenceValue">Inserte un valor valido de referencia.</string>
|
||||
<string name="settingsWillTakeTime">Algunos ajustes no seran aplicados antes de reiniciar el servicio.</string>
|
||||
<string name="errorWritingConfig">Error escribiendo config. Tiene una memoria descrita?</string>
|
||||
<string name="phoneNrReplacementError">No pude insertar el numero de la ultima llamada in en la variable. No lo tengo.</string>
|
||||
<string name="permissionsExplanation">Explicación de permisos necesarios</string>
|
||||
<string name="theFollowingPermissionsHaveBeenDenied">Los siguientes permisos serán negados:</string>
|
||||
<string name="permissionsExplanationGeneric">Por el momento la app está en un modo limitado, pocas funciones están desactivadas. Para funcionar completamente necesita permisos. Si quiere toda la funcionalidad tiene que otorgar en los siguientes diálogos permisos. Si no ciertas reglas no serán ejecutadas. Por consiguiente hay explicaciones para los permisos requeridos. Cliquee continuar cuando esta preparado para proceder.</string>
|
||||
<string name="permissionsExplanationSmall">Para activar la función que será usada, mas permisos son necesarios. Cliquee continuar para los requisitos.</string>
|
||||
<string name="storeSettings">Leer y guardar configuración.</string>
|
||||
<string name="featuresDisabled">CUIDADO: Funciones estan desactivadas, Automation esta en modo limitado. Cliquee aqui para mas informacion.</string>
|
||||
<string name="volumeTesterExplanation">Para calcular un valor dB para determinar el nivel del ruido de fondo tiene que especificar un valor de referencia fisico. Por favor lea el articulo en Wikipedia para mas información. Este valor será probablemente diferente para todos los dispositivos. Mueva el regulador para cambiar el valor. Cuanto mas alto el valor de referencia menos será el valor dB. Las mediciónes se harán cada %1$s segundos y el resultado aparecerá abajo. Presione atrás cuando encuentre un valor indicado.</string>
|
||||
<string name="systemSettingsNote1">El permiso para cambiar ajustes del OS es necesario (incluso cosas simples como activar bluetooth o wifi). Despues de cliquear continuar una ventana aparecerá en la cual tiene que activar eso para Automation. Entonces cliquee el boton atrás.</string>
|
||||
<string name="systemSettingsNote2">Mas permisos serán requeridos en un segundo dialogo luego.</string>
|
||||
<string name="appRequiresPermissiontoAccessExternalStorage">Automation necesita acceso al almacenamiento externo para leer su configuración y reglas.</string>
|
||||
<string name="mainScreenPermissionNote">" Automation necesita mas permisos para funcionar en su totalidad. Cliquee en este texto para encontrar mas y requerirlos."</string>
|
||||
<string name="logFileMaxSizeSummary">Maximo tamaño del archivo log. Será alternado si es mas alto.</string>
|
||||
<string name="logFileMaxSizeTitle">Maximo tamaño del archivo log [Mb]</string>
|
||||
<string name="theseAreThePermissionsRequired">Esos son los permisos necesarios.</string>
|
||||
<string name="android9RecordAudioNotice">Si usa la condición nivel del ruido fondo: Desafortunadamente iniciando con Android 9 (Pie) Google decidió prohibir aplicaciones de fondo usando el micrófono. Por eso esta condición no tendrá un efecto y no iniciará algo.</string>
|
||||
<string name="android10WifiToggleNotice">Si usa la condición nivel del ruido fondo: Desafortunadamente iniciando con Android 9 (Pie) Google decidió prohibir aplicaciones de fondo usando el micrófono. Por eso esta condición no tendrá un efecto y no iniciará algo.</string>
|
||||
<string name="messageNotShownAgain">Esta nota no aparecerá otra vez.</string>
|
||||
<string name="noLocationCouldBeFound">No pude encontrar una posición despues un limite de 120 segundos..</string>
|
||||
<string name="pleaseGiveBgLocation">En la proxima pantalla por favor vaya a permisos, luego posición. Ahi elija \"Siempre permitir\" para permitir Automation determinar la posición en el fondo.</string>
|
||||
<string name="ConfigurationExportError">Hubo un error durante exportar la configuración.</string>
|
||||
<string name="rulesImportedSuccessfully">Reglas y sitios serán exportado con exito.</string>
|
||||
<string name="rulesImportError">Hubo un error durante importando reglas y sitios.</string>
|
||||
<string name="notAllFilesImported">No pude importar todos los archivos aplicables.</string>
|
||||
<string name="importExportExplanation">Despues de cliquear importar o exportar elija el directorio de que archivos serán importados o a que serán exportados. Si exporta archivos que ya existen serán sobreescribidos.</string>
|
||||
<string name="errorRunningRule">Hubo un error iniciar una regla.</string>
|
||||
<string name="locationEngineDisabledShort">La posición no mas sera determinado en el fondo. Cliquee aqui para averiguar más.</string>
|
||||
<string name="displayNewsOnMainScreen">Mostrar noticias de la app en la pantalla principal.</string>
|
||||
<string name="displayNewsOnMainScreenDescription">Noticias solo de esta app. Hablamos de 1-2 veces per año, no mas.</string>
|
||||
<string name="featureNotInFdroidVersion">Esta characteristica es basado en software libre. Por eso no esta disponsible in la versión F-Droid.</string>
|
||||
</resources>
|
@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:ns1="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="ConfigurationExportError">There was an error while exporting the configuration.</string>
|
||||
<string name="ConfigurationExportError">C\'è stato un errore durante l\'esportazione della configurazione.</string>
|
||||
<string name="accelerometer">Accelerometro</string>
|
||||
<string name="accelerometerThreshold">Soglia accelerometro</string>
|
||||
<string name="accelerometerThresholdDescription">Soglia per i movimenti dell\'accelerometro</string>
|
||||
@ -21,8 +21,8 @@
|
||||
<string name="actionTriggerUrl">Apri indirizzo</string>
|
||||
<string name="actionTurnAirplaneModeOff">termina la modalità aereo</string>
|
||||
<string name="actionTurnAirplaneModeOn">passa a modalità aereo</string>
|
||||
<string name="actionTurnBluetoothOff">attiva Bluetooth</string>
|
||||
<string name="actionTurnBluetoothOn">disattiva Bluetooth</string>
|
||||
<string name="actionTurnBluetoothOff">disattiva Bluetooth</string>
|
||||
<string name="actionTurnBluetoothOn">attiva Bluetooth</string>
|
||||
<string name="actionTurnUsbTetheringOff">disattiva Tethering USB</string>
|
||||
<string name="actionTurnUsbTetheringOn">attiva Tethering USB</string>
|
||||
<string name="actionTurnWifiOff">disattiva Wifi</string>
|
||||
@ -46,7 +46,7 @@
|
||||
<string name="addParameters">Aggiungi parametri</string>
|
||||
<string name="addPoi">Aggiungi posizione</string>
|
||||
<string name="addProfile">Aggiungi profilo</string>
|
||||
<string name="addRule">Aggiugni regola</string>
|
||||
<string name="addRule">Aggiungi regola</string>
|
||||
<string name="addTrigger">Aggiungi evento di attivazione</string>
|
||||
<string name="airplaneMode">Modalità aereo</string>
|
||||
<string name="airplaneModeSdk17Warning">A partire dalla versione Android 4.2 questa funzione è disponibile solo se il dispositivo ha accesso root.</string>
|
||||
@ -56,7 +56,7 @@
|
||||
<string name="android.permission.ACCESS_COARSE_LOCATION">Leggi posizione approssimativa</string>
|
||||
<string name="android.permission.ACCESS_FINE_LOCATION">Leggi posizione precisa</string>
|
||||
<string name="android.permission.ACCESS_NETWORK_STATE">Leggi lo stato della rete mobile</string>
|
||||
<string name="android.permission.ACCESS_NOTIFICATION_POLICY">Ignore la politica di "non disturbare"</string>
|
||||
<string name="android.permission.ACCESS_NOTIFICATION_POLICY">Ignora la politica di "non disturbare"</string>
|
||||
<string name="android.permission.ACCESS_WIFI_STATE">Leggi lo stato della rete wifi</string>
|
||||
<string name="android.permission.ACTIVITY_RECOGNITION">Identificazione attività</string>
|
||||
<string name="android.permission.BATTERY_STATS">Leggere lo stato della batteria</string>
|
||||
@ -73,13 +73,13 @@
|
||||
<string name="android.permission.READ_CALENDAR">Leggere gli appuntamenti dal calendario</string>
|
||||
<string name="android.permission.READ_CALL_LOG">Leggere il registro chiamate</string>
|
||||
<string name="android.permission.READ_CONTACTS">Leggere informazioni dai Contatti</string>
|
||||
<string name="android.permission.READ_EXTERNAL_STORAGE">Legge la memoria esterna</string>
|
||||
<string name="android.permission.READ_EXTERNAL_STORAGE">Leggere la memoria esterna</string>
|
||||
<string name="android.permission.READ_PHONE_STATE">Rileva lo stato del telefono</string>
|
||||
<string name="android.permission.RECEIVE_BOOT_COMPLETED">Rileva riavvio del dispositivo</string>
|
||||
<string name="android.permission.RECORD_AUDIO">Registra audio</string>
|
||||
<string name="android.permission.SEND_SMS">Invia messaggio di testo</string>
|
||||
<string name="android.permission.VIBRATE">Attiva vibrazione</string>
|
||||
<string name="android.permission.WAKE_LOCK">Mantiene attivo il dispositivo</string>
|
||||
<string name="android.permission.WAKE_LOCK">Mantienere attivo il dispositivo</string>
|
||||
<string name="android.permission.WRITE_EXTERNAL_STORAGE">Scrive sulla SD</string>
|
||||
<string name="android.permission.WRITE_SECURE_SETTINGS">Cambia le impostazioni del dispositivo</string>
|
||||
<string name="android.permission.WRITE_SETTINGS">Cambia le impostazioni del dispositivo</string>
|
||||
@ -97,7 +97,6 @@
|
||||
<string name="anyWifi">qualsiasi wifi</string>
|
||||
<string name="appRequiresPermissiontoAccessExternalStorage">Automation richiede accesso alla memoria esterna per leggere le proprie impostazioni e regole.</string>
|
||||
<string name="application">Applicazione</string>
|
||||
<string name="applicationHasBeenUpdated">L\'applicazione è stata aggiornata.</string>
|
||||
<string name="apply">applica</string>
|
||||
<string name="areYouSure">Sei sicuro?</string>
|
||||
<string name="at">al</string>
|
||||
@ -125,8 +124,7 @@
|
||||
<string name="clickAndHoldForOptions">Clicca e mantieni premuto un elemento per vedere le opzioni.</string>
|
||||
<string name="closeTo">vicino a</string>
|
||||
<string name="closestPoi">Posizione più vicina:</string>
|
||||
<string name="com.wireguard.android.permission.CONTROL_TUNNELS">Controlla i tunnels dell\'applicazione wireguard</string>
|
||||
<string name="comparing">Ho la posizione sia dalla rete che dal GPS e le sto confrontando...</string>
|
||||
<string name="com.wireguard.android.permission.CONTROL_TUNNELS">Controllare i tunnels dell\'applicazione wireguard</string>
|
||||
<string name="configurationExportedSuccessfully">Configurazione esportata con successo.</string>
|
||||
<string name="configurationImportedSuccessfully">Configurazione esportata con successo.</string>
|
||||
<string name="connected">connesso</string>
|
||||
@ -177,8 +175,8 @@
|
||||
<string name="dropsBelow">inferiore</string>
|
||||
<string name="edit">Modifica</string>
|
||||
<string name="end">Fine</string>
|
||||
<string name="enterAPositiveValidNonDecimalNumber">Inserire un numero intero positivo</string>
|
||||
<string name="enterAname">Inserisci un nome!</string>
|
||||
<string name="enterAPositiveValidNonDecimalNumber">Inserisci un numero intero positivo</string>
|
||||
<string name="enterAname">Inserisci un nome.</string>
|
||||
<string name="enterNameForIntentPair">Definisci un nome per la coppia di intenzioni</string>
|
||||
<string name="enterPackageName">Inserisci un nome di pacchetto che sia valido.</string>
|
||||
<string name="enterPhoneNumber">Inserisci un numero di telefono. Lascia vuoto per accettare qualsiasi numero.</string>
|
||||
@ -190,9 +188,6 @@
|
||||
<string name="eraseSettings">Azzera le impostazioni</string>
|
||||
<string name="error">Errore</string>
|
||||
<string name="errorActivatingProfile">Errore nell\'attivazione del profilo:</string>
|
||||
<string name="errorActivatingWifiAp">Errore nell\'attivazione del punto di accesso wifi</string>
|
||||
<string name="errorChangingScreenRotation">Errore nel ruotare lo schermo</string>
|
||||
<string name="errorDeterminingWifiApState">Errore nel riconoscimento del punto di accesso wifi</string>
|
||||
<string name="errorReadingPoisAndRulesFromFile">Errore nella lettura di regole e posizioni dal file.</string>
|
||||
<string name="errorRunningRule">C\'è stato un errore cercando di eseguire una regola.</string>
|
||||
<string name="errorStartingOtherActivity">Errore nel\'avvio dell\'altra attività</string>
|
||||
@ -208,8 +203,6 @@
|
||||
<string name="fileDoesNotExist">Il file non esiste.</string>
|
||||
<string name="filesHaveBeenMovedTo">Automation usa adesso un percorso nuovo per salvare i tuoi files. Tutti i files di Automation sono stati mossi qui: \"%s\". I permessi di accesso alla memoria esterna non sono più necessari e si possono revocare. Questo verrà permanentemente rimosso in una versione futura.</string>
|
||||
<string name="filesStoredAt">I files di configurazione e log sono salvati nella cartella %1$s. Clicca su questo testo per aprire l\'esploratore di files. Sfortunatamente, questo solo funziona su un dispositivo con accesso root.\n\nPER TUTTI GLI ALTRI DISPOSITIVI: basta usare il bottone \'esporta\' per fare un backup.</string>
|
||||
<string name="forcedLocationUpdate">Aggiornamento forzato della posizione</string>
|
||||
<string name="forcedLocationUpdateLong">Avendo raggiunto il timeout comparando le misure, sarà considerata valida l\'ultima posizione rilevata.</string>
|
||||
<string name="friday">Venerdì</string>
|
||||
<string name="from">da</string>
|
||||
<string name="general">Generale</string>
|
||||
@ -220,11 +213,9 @@
|
||||
<string name="gettingPosition">Sto rilevando la posizione. Attendere prego ...</string>
|
||||
<string name="googleLocationChicanery">Questa applicazione accumula dati di localizzazione per abilitare regole basate sulla posizione insieme al rilevamento della velocità anche quando l\'applicazione è chiusa o non in uso.</string>
|
||||
<string name="googleLocationChicaneryOld">Questa applicazione accumula dati di localizzazione per determinare se sei attualmente ad una delle posizioni che hai creato. Inoltre, questa funzione è usata per determinare la tua velocità attuale se tale evento è stato attivato nelle regole. Questi rilevamenti sono effettuati anche quando l\'applicazione è chiusa o non in uso (ma solo se il servizio è attivato).</string>
|
||||
<string name="googleSarcasm">Grazie alla infinita sapienza di Google e continui sforzi per proteggere la privacy di ognuno di noi, nelle regole che possano inviare SMS o coinvolgere lo stato del telefono, sono state rimossi eventi ed azioni rilevanti.</string>
|
||||
<string name="google_app_id">id della tua app</string>
|
||||
<string name="googleSarcasm">Grazie alla infinita sapienza di Google e continui sforzi per proteggere la nostra privacy, nelle regole che possano inviare SMS o coinvolgere lo stato del telefono, sono state rimossi eventi ed azioni rilevanti.</string>
|
||||
<string name="gpsAccuracy">Precisone del GPS [m]</string>
|
||||
<string name="gpsComparison">Comparazione GPS</string>
|
||||
<string name="gpsComparisonTimeoutStop">Sto fermando la comparazione con il GPS a causa di un timeout.</string>
|
||||
<string name="hapticFeedback">Sensazione tattile (vibrazione al tocco)</string>
|
||||
<string name="headphoneAny">Oppure</string>
|
||||
<string name="headphoneMicrophone">Microfono</string>
|
||||
@ -232,7 +223,7 @@
|
||||
<string name="headphoneSimple">Auricolari</string>
|
||||
<string name="headsetConnected">Connesso auricolare (tipo: %1$s) </string>
|
||||
<string name="headsetDisconnected">Disconnesso auticolari (tipo: %1$s) </string>
|
||||
<string name="helpTextActivityDetection">Questa funzione può identificare se sei attualmente in movimento e se sei a piedi o in che tipo di veicolo (almeno con una certa precisione). Questa funzione non è completamente integrata con Automation, ma viene fornita dai servizi di Google Play. In pratica, non fornisce un risultato si/no, ma provvede una percentuale del livello di sicurezza dello stato di movimento identificato. Puoi scegliere la percentuale raggiunta la quale Automation accetterà un resultato. Nota: 1) è possibile che più di uno stato sia identificato nello stesso momento. Per esempio, potresti star CAMMINANDO dentro a un bus in movimento; 2) Questo sensor usa molta energia. Se possibile, potresti considerare delle alternative, per esempio, potresti identificare che stai guidando, forzando una connessione con il vivavoce.</string>
|
||||
<string name="helpTextActivityDetection">Questa funzione può identificare se sei attualmente in movimento e se sei a piedi o in che tipo di veicolo (almeno con una certa precisione). Questa funzione non è completamente integrata con Automation, ma viene fornita dai servizi di Google Play. In pratica, non fornisce un risultato si/no, ma provvede una percentuale del livello di sicurezza dello stato di movimento identificato. Puoi scegliere la percentuale raggiunta la quale Automation accetterà un resultato. Nota: 1) è possibile che più di uno stato sia identificato nello stesso momento. Per esempio, potresti star CAMMINANDO dentro a un bus in movimento; 2) Questo sensore ha bisogno di molte risorse di sistema. Se possibile, potresti considerare delle alternative, per esempio, potresti identificare che stai guidando, forzando una connessione con il vivavoce.</string>
|
||||
<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 cooridinate 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>
|
||||
@ -272,7 +263,7 @@
|
||||
<string name="listenToWifiState">Rileva il cambiamento di stato del wifi se disponibile</string>
|
||||
<string name="loadWifiList">Carica lista wifi</string>
|
||||
<string name="locationDisabled">Localizzazione disattivata</string>
|
||||
<string name="locationEngineDisabledLong">Purtroppo la tua posizione non può più essere determinata. Un debito di gratitudine è dovuto a Google per la sua infinita saggezza e amabilità.\n\nVediamo di approfondire questo problema. A partire da Android 10 è stato introdotto un nuovo permesso che è necessario per determinare la vostra posizione in secondo piano (che naturalmente è necessario per un\'app come questa). Sebbene la consideri una buona idea in generale, i problemi che comporta per gli sviluppatori non lo sono.\n\nWQuando si sviluppa un\'app si può cercare di qualificarsi per questo permesso rispettando un catalogo di requisiti. Purtroppo le nuove versioni della mia app sono state rifiutate per un periodo di tre mesi. Ho soddisfatto tutti questi requisiti, mentre il merdoso supporto allo sviluppo di Google ha affermato che non l\'ho fatto. Dopo aver dato loro la prova che l\'ho fatto - ho ottenuto una risposta del tipo \"non posso più aiutarti\". Alla fine mi sono arreso.\n\nDi conseguenza, la versione di Google Play non può più usare la tua posizione come trigger. La mia unica opzione alternativa sarebbe stata quella di avere questa applicazione rimossa dal negozio interamente.\n\nNe sono molto dispiaciuto, ma ho fatto del mio meglio per discutere con un \"supporto\" che ripetutamente non ha superato il test di Turing.\n\nInfine, c\'è una buona notizia: puoi ancora avere tutto!\n\nAutomation è adesso una applicazione di codice aperto e si può trovare su F-Droid. Questo è un app store che si preoccupa davvero della tua privacy - invece che fingere di farlo. Basta fare il backup del tuo file di configurazione, disinstallare questa app, installarla di nuovo da F-Droid e ripristinare il tuo file di configurazione - fatto.\n\nClicca qui per maggiori informazioni:</string>
|
||||
<string name="locationEngineDisabledLong">Purtroppo la tua posizione non può più essere determinata. Un debito di gratitudine è dovuto a Google per la sua infinita saggezza e amabilità.\\n\\nVediamo di approfondire questo problema. A partire da Android 10 è stato introdotto un nuovo permesso che è necessario per determinare la vostra posizione in secondo piano (che naturalmente è necessario per un\'app come questa). Sebbene la consideri una buona idea in generale, i problemi che comporta per gli sviluppatori non lo sono.\\n\\nWQuando si sviluppa un\'app si può cercare di qualificarsi per questo permesso rispettando un catalogo di requisiti. Purtroppo le nuove versioni della mia app sono state rifiutate per un periodo di tre mesi. Ho soddisfatto tutti questi requisiti, mentre il merdoso supporto allo sviluppo di Google ha affermato che non l\'ho fatto. Dopo aver dato loro la prova che l\'ho fatto - ho ottenuto una risposta del tipo \"non posso più aiutarti\". Alla fine mi sono arreso. \\n\\nDi conseguenza, la versione di Google Play non può più usare la tua posizione come trigger. La mia unica opzione alternativa sarebbe stata quella di avere questa applicazione rimossa dal negozio interamente.\\n\\nNe sono molto dispiaciuto, ma ho fatto del mio meglio per discutere con un \"supporto\" che ripetutamente non ha superato il test di Turing.\n\\nInfine, c\'è una buona notizia: puoi ancora avere tutto!\\n\\nAutomation è adesso una applicazione di codice aperto e si può trovare su F-Droid. Questo è un app store che si preoccupa davvero della tua privacy - invece che fingere di farlo. Basta fare il backup del tuo file di configurazione, disinstallare questa app, installarla di nuovo da F-Droid e ripristinare il tuo file di configurazione - fatto.\\n\\nClicca qui per maggiori informazioni:</string>
|
||||
<string name="locationEngineDisabledShort">La localizzazione non può più essere determinata. Clicca qui per scoprirne il perché.</string>
|
||||
<string name="locationEngineNotActive">Ricerca posizione non attiva.</string>
|
||||
<string name="lockSoundChanges">Blocca il cambio dei suoni:</string>
|
||||
@ -306,7 +297,7 @@
|
||||
<string name="nfcBringTagIntoRange">Portare un tag NFC nel campo d\'azione.</string>
|
||||
<string name="nfcBringTagIntoRangeToRead">Avvicina il TAG da leggere.</string>
|
||||
<string name="nfcEnterValidIdentifier">Inserire un nome valido per il tag (come "Porta d\'ingresso di casa").</string>
|
||||
<string name="nfcNoNdefIntentBut">Nessun intento NFC NDEF , ma</string>
|
||||
<string name="nfcNoNdefIntentBut">Nessun intento NFC NDEF, ma</string>
|
||||
<string name="nfcNoTag">Nessun tag rilevato.</string>
|
||||
<string name="nfcNotSupportedInThisAndroidVersionYet">NFC non ancora supportato in questa versione di Android.</string>
|
||||
<string name="nfcReadTag">Lettura ID dal tag</string>
|
||||
@ -329,13 +320,10 @@
|
||||
<string name="noFilesImported">Non è stato possibile importare nessun file.</string>
|
||||
<string name="noKnownWifis">Non c\'è nessuna wifi conosciuta sul tuo dispositivo.</string>
|
||||
<string name="noMapsApplicationFound">Non trovo un navigatore installato.</string>
|
||||
<string name="noOverLap">Nessuna duplicazione di posizioni rilevata.</string>
|
||||
<string name="noPoiInRelevantRange">Nessuna posizione nel raggio specificato.</string>
|
||||
<string name="noPoisDefinedShort">Nessuna posizione indicata.</string>
|
||||
<string name="noPoisSpecified">Non hai specificato nessuna posizione. È necessario.</string>
|
||||
<string name="noProfileChangeSoundLocked">Il profilo non può essere attivato. L\'ultimo profilo attivato è bloccato.</string>
|
||||
<string name="noProfilesCreateOneFirst">Non è specificato nessun profilo nella tua configurazione. Prima di tutto, creane uno.</string>
|
||||
<string name="noWifiNameSpecifiedAnyWillDo">Nessun nome della wifi specificato; devi inserirne uno.</string>
|
||||
<string name="noProfilesCreateOneFirst">Non c\'è nessun profilo nella tua configurazione. Prima di tutto, creane uno.</string>
|
||||
<string name="noWritableFolderFound">Nessuna cartella scrivibile trovata che permetta salvare il file di configurazione.</string>
|
||||
<string name="noiseDetectionHint">Se pensi che la rilevazione del rumore non funzioni correttamente (in base al valore specificato) considera che ogni telefono è diverso. Quindi puoi tarare il "riferimento per la misurazione del rumore" nelle impostazioni. Consulta http://en.wikipedia.org/wiki/Decibel per maggiori informazioni. È possibile utilizzare la \"Taratura audio\" dalla schermata principale per calibrare il dispositivo.</string>
|
||||
<string name="none">nessuno</string>
|
||||
@ -360,11 +348,11 @@
|
||||
<string name="parameterValue">Valore</string>
|
||||
<string name="password">Password</string>
|
||||
<string name="permissionsExplanation">Spiegazione delle autorizzazioni richieste</string>
|
||||
<string name="permissionsExplanationGeneric">L\'applicazione sta venendo attualmente eseguita in modalità limitata ed ha pertanto disattivato alcune funzioni. Per funzionare appieno richiede ulteriori permessi. Se vuoi utilizzare tutte le funzionalità è necessario concedere i permessi nelle successive finestre o alcune regole non potranno essere eseguite. Di seguito ti viene data una spiegazione dei permessi richiesti. Clicca su \"Continua\" quando sei pronto a procedere.</string>
|
||||
<string name="permissionsExplanationGeneric">L\'applicazione si sta eseguendo in modalità limitata ed ha pertanto disattivato alcune funzioni. Per funzionare appieno richiede ulteriori permessi. Se vuoi utilizzare tutte le funzionalità è necessario concedere i permessi nelle successive finestre o alcune regole non potranno essere eseguite. Di seguito ti viene data una spiegazione dei permessi richiesti. Clicca su \"Continua\" quando sei pronto a procedere.</string>
|
||||
<string name="permissionsExplanationSmall">Per attivare la funzione che hai appena tentato di utilizzare, sono necessari ulteriori permessi. Clicca \"Continua\" per richiederli.</string>
|
||||
<string name="permissionsTitle">Permessi necessari</string>
|
||||
<string name="phoneCall">Chiamata</string>
|
||||
<string name="phoneDirection">Seleziona se entrante o uscente</string>
|
||||
<string name="phoneDirection">Seleziona se\nentrante o uscente</string>
|
||||
<string name="phoneNrReplacementError">Non ho l\'ultimo numero di telefono e quindi non posso inserirlo nella variabile.</string>
|
||||
<string name="phoneNumber">Numero di telefono</string>
|
||||
<string name="phoneNumberExplanation">È possibile inserire un numero di telefono specifico, ma non è necessario. Se vuoi specificarne uno, puoi sceglierlo dalla tua rubrica o inserirlo manualmente. Inoltre puoi usare espressioni regolari. Per testare un\'espressione regolare mi piace questa pagina:</string>
|
||||
@ -376,7 +364,6 @@
|
||||
<string name="pleaseSpecifiyAction">Indica almeno un\'azione.</string>
|
||||
<string name="pleaseSpecifiyTrigger">Indica almeno un evento.</string>
|
||||
<string name="poi">Posizione</string>
|
||||
<string name="poiCouldBeInRange">Almeno la posizione %1$s potrebbe essere in zona, se non ne esistono altre in aggiunta.</string>
|
||||
<string name="poiList">Elenco delle posizioni:</string>
|
||||
<string name="poiStillReferenced">Ci sono ancora regole che fanno riferimento a questa posizione (%1$s). Quindi non posso cancellarla ancora.</string>
|
||||
<string name="pois">Posizioni</string>
|
||||
@ -411,26 +398,10 @@
|
||||
<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>
|
||||
<string name="ruleCheckOf">Controllo della regola %1$s</string>
|
||||
<string name="ruleDoesntApplyBatteryHigherThan">Impossibile applicare la regola: Livello della batteria superiore a</string>
|
||||
<string name="ruleDoesntApplyBatteryLowerThan">Impossibile applicare la regola: livello della batteria inferiore a</string>
|
||||
<string name="ruleDoesntApplyDeviceInRangeButShouldNotBe">Impossibile applicare la regola. Il dispositivo è in portata, ma non dovrebbe esserlo</string>
|
||||
<string name="ruleDoesntApplyItsLouderThan">Impossibile applicare la regola. È più forte di</string>
|
||||
<string name="ruleDoesntApplyItsQuieterThan">Impossibile applicare la regola. È inferiore a</string>
|
||||
<string name="ruleDoesntApplyNoTagLabel">Impossibile applicare la regola. Non vi è alcuna etichetta tag o nessun tag. </string>
|
||||
<string name="ruleDoesntApplyNotTheCorrectDeviceAddress">Impossibile applicare la regola. Indirizzo dispositivo bluetooth errato.</string>
|
||||
<string name="ruleDoesntApplyNotTheCorrectDeviceName">Impossibile applicare la regola. Nome dispositivo bluetooth errato.</string>
|
||||
<string name="ruleDoesntApplyNotTheCorrectSsid">Impossibile applicare la regola. SSID errato (richiesto: \"%1$s\", ottenuto: \"%2$s\").</string>
|
||||
<string name="ruleDoesntApplyStateNotCorrect">Impossibile applicare la regola. Stato errato</string>
|
||||
<string name="ruleDoesntApplyWeAreFasterThan">Impossibile applicare la regola. Velocità superiore a</string>
|
||||
<string name="ruleDoesntApplyWeAreSlowerThan">Impossibile applicare la regola. Velocità inferiore a</string>
|
||||
<string name="ruleDoesntApplyWrongTagLabel">Impossibile applicare la regola. Etichetta Tag errata.</string>
|
||||
<string name="ruleHistory">Cronologia delle regole (dalla più recente):</string>
|
||||
<string name="ruleIsDeactivatedCantApply">La regola %1$s è disabilitata e non posso applicarla.</string>
|
||||
<string name="ruleLegend">Verde = abilitata, Rosso = disabilitata, Giallo = necessita ulteriori permessi</string>
|
||||
<string name="ruleList">Elenco delle regole:</string>
|
||||
<string name="ruleName">Nome della regola</string>
|
||||
<string name="ruleNotToggable">La regola %1$s non è adatta ad essere Reversibile.</string>
|
||||
<string name="ruleToggable">La regola %1$s è adatta per essere Reversibile.</string>
|
||||
<string name="ruleXrequiresThis">La regola \"%1$s\" ne ha bisogno.</string>
|
||||
<string name="rules">Regole</string>
|
||||
@ -516,7 +487,6 @@
|
||||
<string name="startServiceAfterAppUpdateShort">Riavvio del servizio dopo l\'aggiornamento</string>
|
||||
<string name="started">avviato</string>
|
||||
<string name="starting">avviando</string>
|
||||
<string name="startingGpsTimeout">Avviando timeout GPS</string>
|
||||
<string name="status">Stato</string>
|
||||
<string name="stillGettingPosition">Ancora in attesa della posizione</string>
|
||||
<string name="stopped">terminatoo</string>
|
||||
@ -557,18 +527,16 @@
|
||||
<string name="triggerPointOfInterest">Posizione</string>
|
||||
<string name="triggerSpeed">Velocità</string>
|
||||
<string name="triggerTimeFrame">Intervallo</string>
|
||||
<string name="triggerUrlReplacementPositionError">Hai chiesto di aggiungere una posizione alla tua URL. Purtroppo non ho ancora ricevuto nessuna posizione.</string>
|
||||
<string name="triggerUsb_host_connection">connessione al computer (USB)</string>
|
||||
<string name="triggers">Evento(i)</string>
|
||||
<string name="triggersComment">(tutti gli eventi devono essere validi allo stesso tempo)</string>
|
||||
<string name="tuesday">Martedì</string>
|
||||
<string name="unknownActionSpecified">Azione non riconosciuta.</string>
|
||||
<string name="unknownError">Errore indeterminato.</string>
|
||||
<string name="until">finchè</string>
|
||||
<string name="urlLegend">Variabili:\n È possibile utilizzare le seguenti variabili. All\'attivazione saranno sostituite con il valore corrispondente sul dispositivo. Includi le parentesi nel tuo testo.\n\n[uniqueid] - Il numero di serie del tuo dispositivo\n[serialnr] - Il serial number del tuo dispositivio\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\n[m] - Mese in formato numerico, sempre 2 cifre\n[Y] - L\’anno, sempre 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 [notificationTitle] - titolo dell\'ultima notifica [notificationText] - testo dell\'ultima notifica</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 se sei su una versione inferiore ad Android 7.</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>
|
||||
<string name="useAuthentication">Usa l\'autenticazione</string>
|
||||
<string name="useExistingTag">Utilizzo di un tag NFC esistente</string>
|
||||
<string name="useTextToSpeechOnNormalSummary">Usa TextToSpeech nel modo normale</string>
|
||||
@ -603,12 +571,19 @@
|
||||
<string name="wifi">wifi</string>
|
||||
<string name="wifiConnection">Connessione wifi</string>
|
||||
<string name="wifiName">Nome wifi</string>
|
||||
<string name="wifiNameMatchesRuleWillApply">Il nome della wifi combacia. La regola si applicherà.</string>
|
||||
<string name="wifiNameSpecifiedCheckingThat">Verifica della wifi indicata.</string>
|
||||
<string name="wifiState">Stato Wifi</string>
|
||||
<string name="wifiTetheringFailForAboveNougat">Questo non funziona più dato che sei su una versione superiore ad Android 7.</string>
|
||||
<string name="with">con</string>
|
||||
<string name="withLabel">con etichetta</string>
|
||||
<string name="writeLogFile">Memorizza un file di log</string>
|
||||
<string name="yes">Si</string>
|
||||
<string name="clone">Clonare</string>
|
||||
<string name="state">Status</string>
|
||||
<string name="urlToTriggerExplanation">Questa funzione NON apre un navigatore, ma attiva un indirizzo URL in secondo piano. Puoi usarla per esempio per mandare dei comandi al tuo sistema di domotica.</string>
|
||||
<string name="automaticUpdateCheck">Controlla aggiornamenti</string>
|
||||
<string name="automaticUpdateCheckSummary">Applicabile solo alla versione APK.</string>
|
||||
<string name="updateAvailable">C\'è un nuovo aggiornamento disponibile. Vuoi aprire il navigatore per scaricarlo?</string>
|
||||
<string name="locationFound">Ubicazione trovata. Il raggio minimo per le ubicazioni è di %1$d m.</string>
|
||||
<string name="locationFoundInaccurate">È stato possibile solo trovare una ubicazione con una precisione limitata. Potrebbe non funzionare in maniera affidabile. Il raggio minimo per le ubicazioni è di %1$d m.</string>
|
||||
<string name="noLocationCouldBeFound">Nessuna posizione è stata trovata dopo un tempo di attesa di %1$s seconds.</string>
|
||||
<string name="pleaseGiveBgLocation">Nella schermata successiva vai su permessi, poi posizione. Lì seleziona \"Consenti sempre\" per permettere ad Automation di determinare la tua posizione in secondo piano.</string>
|
||||
</resources>
|
||||
|
@ -10,10 +10,10 @@
|
||||
</string-array>
|
||||
|
||||
<string-array name="startScreenOptions">
|
||||
<item name="0">Home</item>
|
||||
<item name="1">Locations</item>
|
||||
<item name="2">Rules</item>
|
||||
<item name="3">Profiles</item>
|
||||
<item name="0">@string/overview</item>
|
||||
<item name="1">@string/pois</item>
|
||||
<item name="2">@string/rules</item>
|
||||
<item name="3">@string/profiles</item>
|
||||
</string-array>
|
||||
<string-array name="startScreenOptionsValues">
|
||||
<item name="0">0</item>
|
||||
|
@ -17,7 +17,7 @@
|
||||
<string name="logServiceStarting" translatable="false">Starting service.</string>
|
||||
<string name="logNotAllMeasurings" translatable="false">Don\'t have all location measurings, yet. Can\'t do comparison.</string>
|
||||
<string name="distanceBetween">Distance between GPS location and network location is %1$d meters. This +1m should be the absolute minimum radius.</string>
|
||||
<string name="comparing">Have both network and gps location. Comparing...</string>
|
||||
<string name="comparing" translatable="false">Have both network and gps location. Comparing...</string>
|
||||
<string name="logNoSuitableProvider" translatable="false">No suitable location providers could be used.</string>
|
||||
<string name="positioningWindowNotice">If you are in a building it is strongly advised to place your device next to a window until a position has been found. Otherwise it may take a very long time if it is able to find one at all.</string>
|
||||
<string name="gettingPosition">Getting position. Please wait...</string>
|
||||
@ -107,8 +107,8 @@
|
||||
<string name="wifiState">Wifi state</string>
|
||||
<string name="listenToAccelerometerState">Observe device movement where wifi is not available</string>
|
||||
<string name="accelerometer">Accelerometer</string>
|
||||
<string name="accelerometerTimer">Use Accelerometer after x minutes without cell mast change</string>
|
||||
<string name="cellMastIdleTime">Cell mast idle time</string>
|
||||
<string name="accelerometerTimer">Use Accelerometer after x minutes without tower mast change</string>
|
||||
<string name="cellMastIdleTime">Cell tower idle time</string>
|
||||
<string name="accelerometerThresholdDescription">Threshold for accelerometer movements</string>
|
||||
<string name="accelerometerThreshold">Accelerometer threshold</string>
|
||||
<string name="positioningThresholds">Positioning thresholds</string>
|
||||
@ -339,7 +339,7 @@
|
||||
<string name="with">with</string>
|
||||
<string name="phoneNumber">Phone number</string>
|
||||
<string name="enterPhoneNumber">Enter phone number. Leave empty for any number.</string>
|
||||
<string name="phoneDirection">Select call direction</string>
|
||||
<string name="phoneDirection">Select call\ndirection</string>
|
||||
<string name="any">any</string>
|
||||
<string name="incoming">incoming</string>
|
||||
<string name="outgoing">outgoing</string>
|
||||
@ -378,9 +378,9 @@
|
||||
<string name="toggling">Toggling</string>
|
||||
<string name="toggle">toggle</string>
|
||||
<string name="overlapBetweenPois">Overlap detected to location %1$s of %2$s meters. Reduce radius by at least that.</string>
|
||||
<string name="noOverLap">No overlap to other locations detected.</string>
|
||||
<string name="ruleToggable">Rule %1$s is toggable.</string>
|
||||
<string name="ruleNotToggable">Rule %1$s is not suitable for toggling.</string>
|
||||
<string name="noOverLap" translatable="false">No overlap to other locations detected.</string>
|
||||
<string name="ruleToggable" translatable="false">Rule %1$s is toggable.</string>
|
||||
<string name="ruleNotToggable" translatable="false">Rule %1$s is not suitable for toggling.</string>
|
||||
<string name="none">none</string>
|
||||
<string name="anyLocation">any location</string>
|
||||
<string name="invalidPoiName">Invalid name for location.</string>
|
||||
@ -396,7 +396,7 @@
|
||||
<string name="detectedActivityOnBicycle">On bicycle</string>
|
||||
<string name="detectedActivityOnFoot">On foot</string>
|
||||
<string name="detectedActivityStill">Still</string>
|
||||
<string name="detectedActivityUnknown">Unknown</string>
|
||||
<string name="detectedActivityUnknown">unknown</string>
|
||||
<string name="detectedActivityTilting">Tilting</string>
|
||||
<string name="detectedActivityWalking">Walking</string>
|
||||
<string name="detectedActivityRunning">Running</string>
|
||||
@ -422,8 +422,8 @@
|
||||
<string name="bluetoothDeviceInRange">Bluetooth device %1$s in range.</string>
|
||||
<string name="bluetoothDeviceOutOfRange">Bluetooth device %1$s out of range.</string>
|
||||
<string name="anyDevice">any device</string>
|
||||
<string name="ruleDoesntApplyNotTheCorrectDeviceName">Rule doesn\'t apply. Not the correct bluetooth device name.</string>
|
||||
<string name="ruleDoesntApplyNotTheCorrectDeviceAddress">Rule doesn\'t apply. Not the correct bluetooth device address.</string>
|
||||
<string name="ruleDoesntApplyNotTheCorrectDeviceName" translatable="false">Rule doesn\'t apply. Not the correct bluetooth device name.</string>
|
||||
<string name="ruleDoesntApplyNotTheCorrectDeviceAddress" translatable="false">Rule doesn\'t apply. Not the correct bluetooth device address.</string>
|
||||
<string name="noDevice">no device</string>
|
||||
<string name="selectDeviceFromList">one from list</string>
|
||||
<string name="connectionToDevice">connection to device</string>
|
||||
@ -432,8 +432,8 @@
|
||||
<string name="deviceOutOfRange">device out of range</string>
|
||||
<string name="selectDeviceOption">Select a device option.</string>
|
||||
<string name="selectConnectionOption">Select a connection option.</string>
|
||||
<string name="ruleDoesntApplyDeviceInRangeButShouldNotBe">Rule doesn\'t apply. Device is in range, but should not be.</string>
|
||||
<string name="ruleDoesntApplyStateNotCorrect">Rule doesn\'t apply. Wrong state.</string>
|
||||
<string name="ruleDoesntApplyDeviceInRangeButShouldNotBe" translatable="false">Rule doesn\'t apply. Device is in range, but should not be.</string>
|
||||
<string name="ruleDoesntApplyStateNotCorrect" translatable="false">Rule doesn\'t apply. Wrong state.</string>
|
||||
<string name="triggerHeadsetPlugged">Headset connection</string>
|
||||
<string name="actionPlayMusic">Open music player</string>
|
||||
<string name="headsetConnected">Headset (type: %1$s) connected</string>
|
||||
@ -452,7 +452,7 @@
|
||||
<string name="notEnforcingGps" translatable="false">Private Locationing not enabled, using regular provider search.</string>
|
||||
<string name="gpsMeasurement" translatable="false">GPS measurement</string>
|
||||
<string name="gpsMeasurementTimeout" translatable="false">GPS measurement stopped due to timeout.</string>
|
||||
<string name="cellMastChanged" translatable="false">Cell mast changed: %1$s</string>
|
||||
<string name="cellMastChanged" translatable="false">Cell tower changed: %1$s</string>
|
||||
<string name="noiseDetectionHint">If you think the noise detection isn\'t working correctly (depending on the value you specify) please keep in mind that every phone is different. You can therefore change \"Reference for noise measurement\" in settings. See http://en.wikipedia.org/wiki/Decibel for more information. You can use the volume tester from the main screen to calibrate your device.</string>
|
||||
<string name="hint">Hint</string>
|
||||
<string name="selectNoiseLevel">Select noise level</string>
|
||||
@ -479,7 +479,7 @@
|
||||
<string name="soundModeNormal">Normal</string>
|
||||
<string name="soundModeVibrate">Vibrate</string>
|
||||
<string name="soundModeSilent">Silent</string>
|
||||
<string name="enterAname">Enter a name!</string>
|
||||
<string name="enterAname">Enter a name.</string>
|
||||
<string name="noChangeSelectedProfileDoesntMakeSense">No change selected. Profile doesn\'t make sense.</string>
|
||||
<string name="noProfilesCreateOneFirst">There are no profiles in your configuration. Create one first.</string>
|
||||
<string name="errorActivatingProfile">Error activating profile:</string>
|
||||
@ -488,8 +488,7 @@
|
||||
<string name="errorWritingFile">Error writing settings file.</string>
|
||||
<string name="unknownError">Unknown error.</string>
|
||||
<string name="noWritableFolderFound">No writable folder found to store config file.</string>
|
||||
<string name="usbTetheringFailForAboveGingerbread">This will most likely not work as you\'re above Android 2.3. If you\'re below Android 7 you could use wifi tethering instead instead.</string>
|
||||
<string name="wifiTetheringFailForAboveNougat">This will not work anymore as you\'re above Android 7.</string>
|
||||
<string name="usbTetheringFailForAboveGingerbread">This will most likely not work as you\'re above Android 2.3. You could use wifi tethering instead instead.</string>
|
||||
<string name="usingNewThreadForRuleExecution">Using new thread for rule activation.</string>
|
||||
<string name="startNewThreadForRuleExecution">Start new thread for rule activation.</string>
|
||||
<string name="newThreadRules">New thread</string>
|
||||
@ -498,7 +497,7 @@
|
||||
<string name="ruleHistory">Rule history (most recent first):</string>
|
||||
<string name="someOptionsNotAvailableYet">Some options are disabled as they cannot be used, yet. They will be introduced in a later program version.</string>
|
||||
<string name="lockSoundChanges">Lock sound changes</string>
|
||||
<string name="noProfileChangeSoundLocked">Profile will not be activated. Last activated profile was locked.</string>
|
||||
<string name="noProfileChangeSoundLocked">Profile will not be activated. Last activated profile has been locked.</string>
|
||||
<string name="currentVolume">Current volume</string>
|
||||
<string name="enterValidReferenceValue">Enter a valid reference value.</string>
|
||||
<string name="volumeTest">Volume test</string>
|
||||
@ -531,7 +530,7 @@
|
||||
<string name="appRequiresPermissiontoAccessExternalStorage">Automation requires access to external storage to read its settings and rules.</string>
|
||||
<string name="mainScreenPermissionNote">Automation requires more permissions to fully function. Click on this text to find out more and request them.</string>
|
||||
<string name="invalidDevice">Invalid device</string>
|
||||
<string name="google_app_id">your app id</string>
|
||||
<string name="google_app_id" translatable="false">your app id</string>
|
||||
<string name="logFileMaxSizeSummary">Maximum log file size in Megabyte. Will be rotated if bigger.</string>
|
||||
<string name="logFileMaxSizeTitle">Maximum log file size [Mb]</string>
|
||||
<string name="android.permission.READ_CALL_LOG">Read phone log</string>
|
||||
@ -565,7 +564,7 @@
|
||||
<string name="android.permission.ACCESS_NOTIFICATION_POLICY">Override do not disturb policy</string>
|
||||
<string name="theseAreThePermissionsRequired">These are the permissions required:</string>
|
||||
<string name="ruleXrequiresThis">Rule \"%1$s\" requires this.</string>
|
||||
<string name="helpTextActivityDetection">This feature can detect if you\'re currently on the go and if it is on foot or in which type of vehicle (to a certain extent). The feature is not fully built into Automation, but is provided by Google Play Services. Technically it does not give a yes/no result, but return a percentage to which level it is sure it detected you\'re status. You can setup the percentage value from which Automation will accept a result. Two remarks: 1) More than 1 status could occur at the same time. For example you might be WALKING inside a driving bus. 2) This sensor is relative cost intensive. If it is possible you might consider using alternatives, e.g. require your car\'s handsfree device to be connected to detect you\'re driving.</string>
|
||||
<string name="helpTextActivityDetection">This feature can detect if you\'re currently on the go and if it is on foot or in which type of vehicle (to a certain extent). The feature is not fully built into Automation, but is provided by Google Play Services. Technically it does not give a yes/no result, but return a percentage to which level it is sure it detected you\'re status. You can setup the percentage value from which Automation will accept a result. Two remarks: 1) More than 1 status could occur at the same time. For example you might be WALKING inside a driving bus. 2) This sensor is relatively expensive in terms of battery usage. If it is possible you might consider using alternatives, e.g. require your car\'s handsfree device to be connected to detect you\'re driving.</string>
|
||||
<string name="sendTextMessage">Send text message</string>
|
||||
<string name="textToSend">Text to send</string>
|
||||
<string name="textMessageAnnotations">You can directly enter a phone number. Alternatively use the contacts option to pick one. But keep in mind: The number will be stored here, not the contact. If you change the phone number of a selected contact you\'ll need to update this rule. It doesn\'t do that by itself.</string>
|
||||
@ -578,7 +577,7 @@
|
||||
<string name="clickAndHoldForOptions">Click and hold an item for options.</string>
|
||||
<string name="ruleActivationComplete" translatable="false">Rule \"%1$s\" finished.</string>
|
||||
<string name="positioningEngine">Positioning engine</string>
|
||||
<string name="googleSarcasm">Thanks to Google\'s infinite whisdom and constant endeavor to protect everyone\'s privacy rules that may send sms or involve the users phone state have to be stripped off applicable triggers and actions.</string>
|
||||
<string name="googleSarcasm">Thanks to Google\'s infinite wisdom and constant endeavor to protect everyone\'s privacy, all the rules that may be used to send sms or read the phone state have been stripped off of all the triggers and actions which Google considers risky.</string>
|
||||
<string name="startAutomationAsService">Start automation as a service</string>
|
||||
<string name="setScreenBrightness">Set screen brightness</string>
|
||||
<string name="setScreenBrightnessEnterValue">Enter the desired brightness (from 0 to 100).</string>
|
||||
@ -675,4 +674,12 @@
|
||||
<string name="needLocationPermForWifiList">The list of wifis your device has been connected to could be used to determine which places you have been to. That\'s why the location permission is required to load the list of wifis. If you want to be able to pick one from the list you need to grant that permission. If not you can still enter your wifi name manually.</string>
|
||||
<string name="noKnownWifis">There are no known wifis on your device.</string>
|
||||
<string name="urlToTriggerExplanation">This feature does NOT open a browser, but triggers a URL in the background. You can use this e.g. to send commands to your home automation.</string>
|
||||
<string name="automaticUpdateCheck">Check for updates</string>
|
||||
<string name="automaticUpdateCheckSummary">Only applies to APK version.</string>
|
||||
<string name="updateAvailable">There\'s a new update available. Would you like opening the browser to download it?</string>
|
||||
<string name="locationFound">Location found. The suggested minimum radius for locations is %1$d m.</string>
|
||||
<string name="locationFoundInaccurate">Only a location with a limited accuracy could be found. It might not work reliably. The suggested minimum radius for locations is %1$d."</string>
|
||||
<string name="clone">Clone</string>
|
||||
<string name="noLocationCouldBeFound">No position could be found after a timeout of %1$s seconds.</string>
|
||||
<string name="pleaseGiveBgLocation">In the next screen please go to permissions, then location. There select \"Allow all the time\" to allow Automation to determine your location in the background.</string>
|
||||
</resources>
|
6
fastlane/metadata/android/de-DE/changelogs/106.txt
Normal file
6
fastlane/metadata/android/de-DE/changelogs/106.txt
Normal file
@ -0,0 +1,6 @@
|
||||
* Übersetzungen aktualisiert.
|
||||
* Layout Verbesserungen
|
||||
* Fehler behoben, bei dem die Konfiguration auf manchen Geräten nicht exportiert werden konnte
|
||||
* Ein Problem behoben, bei dem auf manchen Geräten keine Orte verwaltet werden konnten (die Position konnte nicht gefunden werden)
|
||||
* Automatische Prüfung auf neue Versionen in der APK Version
|
||||
* Regeln können jetzt geklont werden.
|
6
fastlane/metadata/android/en-US/changelogs/106.txt
Normal file
6
fastlane/metadata/android/en-US/changelogs/106.txt
Normal file
@ -0,0 +1,6 @@
|
||||
* Translations updated.
|
||||
* Layout optimizations
|
||||
* Fixed a bug during config export that affected few users
|
||||
* Fixed a problem in the management of locations that occured on few devices (location couldn't be found)
|
||||
* Automatic update check for APK version
|
||||
* Rules can now be cloned
|
@ -45,7 +45,7 @@ So if a certain feature is not working on your device - let me know. Over the ye
|
||||
If you have a problem and think about contacting me please update to the latest version first and see if your problem persists there, too.
|
||||
|
||||
Donations are certainly a good, but not the only way to motivate me :-)
|
||||
* If you want to support me, can also leave a positive review for the app on Google Play.
|
||||
* If you'd like to support me, you can also leave a positive review for the app on Google Play.
|
||||
* Furthermore I can always use help in translating the app. English, German and some Spanish are among my own skills. But everything else is more than welcome.
|
||||
|
||||
Explanation of the many permissions can be found here: https://server47.de/automation/permissions_en.html
|
6
fastlane/metadata/android/es-ES/changelogs/106.txt
Normal file
6
fastlane/metadata/android/es-ES/changelogs/106.txt
Normal file
@ -0,0 +1,6 @@
|
||||
* Traducciones actualizadas
|
||||
* Optimizaciones de diseño
|
||||
* Arregló un fallo durante la exportación de config que afectó a pocos usuarios
|
||||
* Arregló un problema en la gestión de lugares que se produjeron en pocos dispositivos (la ubicación no se pudo encontrar)
|
||||
* Comprobación de actualización automática para la versión APK
|
||||
* Las reglas ahora pueden ser clonadas
|
6
fastlane/metadata/android/it-IT/changelogs/106.txt
Normal file
6
fastlane/metadata/android/it-IT/changelogs/106.txt
Normal file
@ -0,0 +1,6 @@
|
||||
* Traduzioni aggiornate.
|
||||
* Ottimizzazione del layout
|
||||
* Corretto un bug durante l'esportazione di configurazione che ha interessato pochi utenti
|
||||
* Risolto un problema nella gestione delle posizioni che si sono verificate su pochi dispositivi (la posizione non potrebbe essere trovata)
|
||||
* Controllo aggiornamento automatico per la versione APK
|
||||
* Le regole possono ora essere clonate
|
Loading…
Reference in New Issue
Block a user