Compare commits
31 Commits
v1.8.1
...
07011b2053
| Author | SHA1 | Date | |
|---|---|---|---|
| 07011b2053 | |||
| fdcdaf53c9 | |||
| 55a1c24753 | |||
| ca88fbfb07 | |||
| 3497d7b8ea | |||
| e8e763210b | |||
| b6ea652e46 | |||
| a30a47f67a | |||
| 914f5c033b | |||
| f64b8ea860 | |||
| 2445431393 | |||
| a6e10d09c3 | |||
| 7972a335c3 | |||
| e99203c7e4 | |||
| ee311b0ba5 | |||
| fb64c46c95 | |||
| c7557519e8 | |||
| 01c1ac3f5e | |||
| b473034703 | |||
| bf78ecc794 | |||
| 6d9a77a990 | |||
| ec68d375c7 | |||
| e8524f719f | |||
| f04c517c80 | |||
| b6d7958389 | |||
| 04d2e4b432 | |||
| abd346946a | |||
| 17edf90086 | |||
| 879e1c6ef3 | |||
| d7d806fb5c | |||
| 910af92989 |
+8
-7
@@ -3,16 +3,16 @@ plugins {
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdkVersion 29
|
||||
compileSdkVersion 34
|
||||
|
||||
defaultConfig {
|
||||
applicationId "com.jens.automation2"
|
||||
minSdkVersion 16
|
||||
compileSdkVersion 33
|
||||
buildToolsVersion '29.0.2'
|
||||
compileSdkVersion 34
|
||||
buildToolsVersion '34.0.0'
|
||||
useLibrary 'org.apache.http.legacy'
|
||||
versionCode 142
|
||||
versionName "1.8.1"
|
||||
versionCode 144
|
||||
versionName "1.8.3"
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
@@ -36,7 +36,7 @@ android {
|
||||
{
|
||||
dimension "version"
|
||||
versionNameSuffix "-googlePlay"
|
||||
targetSdkVersion 33
|
||||
targetSdkVersion 34
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -63,6 +63,7 @@ android {
|
||||
checkReleaseBuilds false
|
||||
}
|
||||
namespace 'com.jens.automation2'
|
||||
buildToolsVersion '34.0.0'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
@@ -73,7 +74,7 @@ dependencies {
|
||||
apkFlavorImplementation 'com.google.firebase:firebase-appindexing:20.0.0'
|
||||
apkFlavorImplementation 'com.google.android.gms:play-services-location:18.0.0'
|
||||
|
||||
implementation 'com.linkedin.dexmaker:dexmaker:2.25.0'
|
||||
implementation 'com.linkedin.dexmaker:dexmaker:2.28.1'
|
||||
implementation 'org.apache.commons:commons-lang3:3.0'
|
||||
|
||||
//implementation "androidx.security:security-crypto:1.0.0"
|
||||
|
||||
@@ -70,6 +70,7 @@
|
||||
<uses-permission android:name="android.permission.CALL_PHONE" />
|
||||
<uses-permission android:name="android.permission.ANSWER_PHONE_CALLS" />
|
||||
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
|
||||
<uses-permission android:name="android.hardware.sensor.proximity"/>
|
||||
<uses-permission android:name="android.permission.READ_CALL_LOG" />
|
||||
<uses-permission android:name="android.permission.READ_CALENDAR" />
|
||||
<uses-permission
|
||||
@@ -78,7 +79,8 @@
|
||||
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/>
|
||||
<!--android:maxSdkVersion="32" />
|
||||
<uses-permission android:name="android.permission.USE_EXACT_ALARM" />-->
|
||||
|
||||
<uses-permission android:name="com.termux.permission.RUN_COMMAND" />
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />
|
||||
|
||||
<uses-feature
|
||||
android:name="android.hardware.telephony"
|
||||
@@ -124,7 +126,8 @@
|
||||
<service
|
||||
android:name=".AutomationService"
|
||||
android:exported="false"
|
||||
android:label="@string/app_name" />
|
||||
android:label="@string/app_name"
|
||||
android:foregroundServiceType="specialUse" />
|
||||
|
||||
<receiver android:name=".receivers.StartupIntentReceiver" android:enabled="true" android:exported="true">
|
||||
<intent-filter>
|
||||
@@ -243,6 +246,7 @@
|
||||
<activity android:name=".ActivityPermissions"></activity>
|
||||
<activity android:name=".ActivityManageTriggerNotification" />
|
||||
<activity android:name=".ActivityManageTriggerCalendar" />
|
||||
<activity android:name=".ActivityManageTriggerProximity" />
|
||||
|
||||
<service
|
||||
android:name=".receivers.NotificationListener"
|
||||
|
||||
@@ -68,6 +68,7 @@
|
||||
<uses-permission android:name="android.permission.CALL_PHONE" />
|
||||
<uses-permission android:name="android.permission.ANSWER_PHONE_CALLS" />
|
||||
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
|
||||
<uses-permission android:name="android.hardware.sensor.proximity"/>
|
||||
<uses-permission android:name="android.permission.READ_CALL_LOG" />
|
||||
<uses-permission android:name="android.permission.READ_CALENDAR" />
|
||||
<uses-permission
|
||||
@@ -76,6 +77,8 @@
|
||||
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/>
|
||||
<!--android:maxSdkVersion="32" />
|
||||
<uses-permission android:name="android.permission.USE_EXACT_ALARM" />-->
|
||||
<uses-permission android:name="com.termux.permission.RUN_COMMAND" />
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />
|
||||
|
||||
<uses-feature
|
||||
android:name="android.hardware.telephony"
|
||||
@@ -121,7 +124,8 @@
|
||||
<service
|
||||
android:name=".AutomationService"
|
||||
android:exported="false"
|
||||
android:label="@string/app_name" />
|
||||
android:label="@string/app_name"
|
||||
android:foregroundServiceType="specialUse" />
|
||||
|
||||
<receiver android:name=".receivers.StartupIntentReceiver" android:enabled="true" android:exported="true">
|
||||
<intent-filter>
|
||||
@@ -240,6 +244,7 @@
|
||||
<activity android:name=".ActivityPermissions"></activity>
|
||||
<activity android:name=".ActivityManageTriggerNotification" />
|
||||
<activity android:name=".ActivityManageTriggerCalendar" />
|
||||
<activity android:name=".ActivityManageTriggerProximity" />
|
||||
|
||||
<service
|
||||
android:name=".receivers.NotificationListener"
|
||||
|
||||
@@ -66,6 +66,7 @@
|
||||
<uses-permission android:name="com.wireguard.android.permission.CONTROL_TUNNELS"/>
|
||||
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
|
||||
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
|
||||
<uses-permission android:name="android.hardware.sensor.proximity"/>
|
||||
<uses-permission
|
||||
android:name="android.permission.WRITE_SECURE_SETTINGS"
|
||||
tools:ignore="ProtectedPermissions" />
|
||||
@@ -73,6 +74,8 @@
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||
<!--android:maxSdkVersion="32" />
|
||||
<uses-permission android:name="android.permission.USE_EXACT_ALARM" />-->
|
||||
<uses-permission android:name="com.termux.permission.RUN_COMMAND" />
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />
|
||||
|
||||
<application
|
||||
android:allowBackup="true"
|
||||
@@ -105,7 +108,12 @@
|
||||
<service
|
||||
android:name=".AutomationService"
|
||||
android:exported="false"
|
||||
android:label="@string/app_name" />
|
||||
android:label="@string/app_name"
|
||||
android:foregroundServiceType="specialUse">
|
||||
<property
|
||||
android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE"
|
||||
android:value="Automating things on the device" />
|
||||
</service>
|
||||
|
||||
<receiver android:name=".receivers.StartupIntentReceiver"
|
||||
android:enabled="true"
|
||||
@@ -224,6 +232,7 @@
|
||||
<activity android:name=".ActivityPermissions"></activity>
|
||||
<activity android:name=".ActivityManageTriggerNotification" />
|
||||
<activity android:name=".ActivityManageTriggerCalendar" />
|
||||
<activity android:name=".ActivityManageTriggerProximity" />
|
||||
|
||||
<service
|
||||
android:name=".receivers.NotificationListener"
|
||||
|
||||
@@ -33,13 +33,9 @@ public class Action
|
||||
setWifiTethering,
|
||||
setBluetoothTethering,
|
||||
setDisplayRotation,
|
||||
turnWifiOn,turnWifiOff,
|
||||
turnBluetoothOn,turnBluetoothOff,
|
||||
triggerUrl,
|
||||
changeSoundProfile,
|
||||
turnUsbTetheringOn,turnUsbTetheringOff,
|
||||
turnWifiTetheringOn,turnWifiTetheringOff,
|
||||
enableScreenRotation,disableScreenRotation,
|
||||
startOtherActivity,
|
||||
waitBeforeNextAction,
|
||||
turnScreenOnOrOff,
|
||||
@@ -60,9 +56,9 @@ public class Action
|
||||
startPhoneCall,
|
||||
stopPhoneCall,
|
||||
copyToClipboard,
|
||||
takeScreenshot,
|
||||
setLocationService,
|
||||
sendTextMessage;
|
||||
sendTextMessage,
|
||||
takeScreenshot;
|
||||
|
||||
public String getFullName(Context context)
|
||||
{
|
||||
@@ -80,14 +76,6 @@ public class Action
|
||||
return context.getResources().getString(R.string.actionSetUsbTethering);
|
||||
case setDisplayRotation:
|
||||
return context.getResources().getString(R.string.actionSetDisplayRotation);
|
||||
case turnWifiOn:
|
||||
return context.getResources().getString(R.string.actionTurnWifiOn);
|
||||
case turnWifiOff:
|
||||
return context.getResources().getString(R.string.actionTurnWifiOff);
|
||||
case turnBluetoothOn:
|
||||
return context.getResources().getString(R.string.actionTurnBluetoothOn);
|
||||
case turnBluetoothOff:
|
||||
return context.getResources().getString(R.string.actionTurnBluetoothOff);
|
||||
case triggerUrl:
|
||||
return context.getResources().getString(R.string.actionTriggerUrl);
|
||||
case changeSoundProfile:
|
||||
@@ -96,14 +84,6 @@ public class Action
|
||||
return context.getResources().getString(R.string.actionTurnUsbTetheringOn);
|
||||
case turnUsbTetheringOff:
|
||||
return context.getResources().getString(R.string.actionTurnUsbTetheringOff);
|
||||
case turnWifiTetheringOn:
|
||||
return context.getResources().getString(R.string.actionTurnWifiTetheringOn);
|
||||
case turnWifiTetheringOff:
|
||||
return context.getResources().getString(R.string.actionTurnWifiTetheringOff);
|
||||
case enableScreenRotation:
|
||||
return context.getResources().getString(R.string.actionEnableScreenRotation);
|
||||
case disableScreenRotation:
|
||||
return context.getResources().getString(R.string.actionDisableScreenRotation);
|
||||
case startOtherActivity:
|
||||
return context.getResources().getString(R.string.startOtherActivity);
|
||||
case waitBeforeNextAction:
|
||||
@@ -493,25 +473,9 @@ public class Action
|
||||
for(Action_Enum action : Action_Enum.values())
|
||||
{
|
||||
if( // exclusion for deprecated types
|
||||
!action.toString().equals("turnWifiOn")
|
||||
&&
|
||||
!action.toString().equals("turnWifiOff")
|
||||
&&
|
||||
!action.toString().equals("turnBluetoothOn")
|
||||
&&
|
||||
!action.toString().equals("turnBluetoothOff")
|
||||
&&
|
||||
!action.toString().equals("turnUsbTetheringOn")
|
||||
&&
|
||||
!action.toString().equals("turnUsbTetheringOff")
|
||||
&&
|
||||
!action.toString().equals("turnWifiTetheringOn")
|
||||
&&
|
||||
!action.toString().equals("turnWifiTetheringOff")
|
||||
&&
|
||||
!action.toString().equals("enableScreenRotation")
|
||||
&&
|
||||
!action.toString().equals("disableScreenRotation")
|
||||
) // exclusion for deprecated types
|
||||
actionTypesList.add(action.toString());
|
||||
}
|
||||
@@ -525,25 +489,9 @@ public class Action
|
||||
for(Action_Enum action : Action_Enum.values())
|
||||
{
|
||||
if( // exclusion for deprecated types
|
||||
!action.toString().equals("turnWifiOn")
|
||||
&&
|
||||
!action.toString().equals("turnWifiOff")
|
||||
&&
|
||||
!action.toString().equals("turnBluetoothOn")
|
||||
&&
|
||||
!action.toString().equals("turnBluetoothOff")
|
||||
&&
|
||||
!action.toString().equals("turnUsbTetheringOn")
|
||||
&&
|
||||
!action.toString().equals("turnUsbTetheringOff")
|
||||
&&
|
||||
!action.toString().equals("turnWifiTetheringOn")
|
||||
&&
|
||||
!action.toString().equals("turnWifiTetheringOff")
|
||||
&&
|
||||
!action.toString().equals("enableScreenRotation")
|
||||
&&
|
||||
!action.toString().equals("disableScreenRotation")
|
||||
) // exclusion for deprecated types
|
||||
actionTypesList.add(action.getFullName(context));
|
||||
}
|
||||
@@ -774,7 +722,7 @@ public class Action
|
||||
if(parameters.length >= 3)
|
||||
{
|
||||
urlUsername = parameters[1];
|
||||
urlPassword = parameters[2];
|
||||
urlPassword = parameters[2];
|
||||
|
||||
if(parameters.length >= 4)
|
||||
method = parameters[3];
|
||||
@@ -786,7 +734,8 @@ public class Action
|
||||
for(String pair : paramPairs)
|
||||
{
|
||||
String[] pieces = pair.split(Action.actionParameters2SeparatorInner);
|
||||
httpParams.put(pieces[0], pieces[1]);
|
||||
if(pieces.length == 2)
|
||||
httpParams.put(pieces[0], pieces[1]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -8,6 +8,7 @@ import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.CheckBox;
|
||||
@@ -40,6 +41,7 @@ public class ActivityControlCenter extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
setContentView(R.layout.activity_control_center);
|
||||
|
||||
|
||||
@@ -98,8 +100,17 @@ public class ActivityControlCenter extends Activity
|
||||
@Override
|
||||
public void onClick(View v)
|
||||
{
|
||||
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
|
||||
startActivityForResult(intent, requestCodeImport);
|
||||
AlertDialog dialog = Miscellaneous.messageBox(getResources().getString(R.string.info), getResources().getString(R.string.importChooseFolderNotice), ActivityControlCenter.this);
|
||||
dialog.setOnDismissListener(new DialogInterface.OnDismissListener()
|
||||
{
|
||||
@Override
|
||||
public void onDismiss(DialogInterface dialogInterface)
|
||||
{
|
||||
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
|
||||
startActivityForResult(intent, requestCodeImport);
|
||||
}
|
||||
});
|
||||
dialog.show();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ public class ActivityDisplayLongMessage extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
setContentView(R.layout.activity_display_long_message);
|
||||
|
||||
tvMessageTitle = (TextView)findViewById(R.id.tvMessageTitle);
|
||||
|
||||
@@ -14,6 +14,7 @@ public class ActivityHelp extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
setContentView(layout.activity_help_text);
|
||||
|
||||
TextView tvHelpTextEnergySaving = (TextView) findViewById(R.id.tvHelpTextEnergySaving);
|
||||
|
||||
@@ -45,6 +45,7 @@ public class ActivityMainPoi extends ActivityGeneric
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
setContentView(R.layout.main_poi_layout);
|
||||
|
||||
instance = this;
|
||||
|
||||
@@ -41,6 +41,7 @@ public class ActivityMainProfiles extends ActivityGeneric
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
setContentView(R.layout.main_profile_layout);
|
||||
|
||||
instance = this;
|
||||
|
||||
@@ -49,6 +49,7 @@ public class ActivityMainRules extends ActivityGeneric
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
setContentView(R.layout.main_rule_layout);
|
||||
|
||||
instance = this;
|
||||
@@ -196,7 +197,14 @@ 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), getResources().getString(R.string.clone) }, new DialogInterface.OnClickListener()
|
||||
|
||||
String toggleEnabled;
|
||||
if(ruleThisIsAbout.isRuleActive())
|
||||
toggleEnabled = getResources().getString(R.string.disable);
|
||||
else
|
||||
toggleEnabled = getResources().getString(R.string.enable);
|
||||
|
||||
alertDialogBuilder.setItems(new String[]{ getResources().getString(R.string.runManually), getResources().getString(R.string.edit), getResources().getString(R.string.deleteCapital), toggleEnabled, getResources().getString(R.string.clone) }, new DialogInterface.OnClickListener()
|
||||
{
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which)
|
||||
@@ -248,6 +256,19 @@ public class ActivityMainRules extends ActivityGeneric
|
||||
deleteDialog.show();
|
||||
break;
|
||||
case 3:
|
||||
ruleToEdit = ruleThisIsAbout;
|
||||
if(ruleToEdit.isRuleActive())
|
||||
ruleToEdit.setRuleActive(false);
|
||||
else
|
||||
ruleToEdit.setRuleActive(true);
|
||||
|
||||
if(ruleToEdit.change(ActivityMainRules.this))
|
||||
{
|
||||
ruleToEdit = null; //clear cache
|
||||
updateListView();
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
ruleToEdit = ruleThisIsAbout;
|
||||
if(ruleToEdit.cloneRule(ActivityMainRules.this))
|
||||
{
|
||||
|
||||
@@ -11,6 +11,7 @@ import android.content.res.Resources;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.text.method.LinkMovementMethod;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.util.Log;
|
||||
import android.view.MotionEvent;
|
||||
@@ -46,7 +47,7 @@ public class ActivityMainScreen extends ActivityGeneric
|
||||
|
||||
ToggleButton toggleService, tbLockSound;
|
||||
Button bShowHelp, bPrivacy, bAddSoundLockTIme, bDonate, bControlCenter;
|
||||
TextView tvActivePoi, tvClosestPoi, tvLastRule, tvLastProfile, tvMainScreenNotePermissions, tvMainScreenNoteFeaturesFromOtherFlavor, tvMainScreenNoteLocationImpossibleBlameGoogle, tvMainScreenNoteNews, tvLockSoundDuration;
|
||||
TextView tvActivePoi, tvClosestPoi, tvLastRule, tvLastProfile, tvMainScreenNotePermissions, tvMainScreenNoteFeaturesFromOtherFlavor, tvMainScreenNoteLocationImpossibleBlameGoogle, tvMainScreenNoteNews, tvLockSoundDuration, tvContactNotice;
|
||||
|
||||
ListView lvRuleHistory;
|
||||
ArrayAdapter<Rule> ruleHistoryListViewAdapter;
|
||||
@@ -56,6 +57,7 @@ public class ActivityMainScreen extends ActivityGeneric
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
setContentView(R.layout.main_overview_layout);
|
||||
|
||||
activityMainScreenInstance = this;
|
||||
@@ -83,10 +85,14 @@ public class ActivityMainScreen extends ActivityGeneric
|
||||
tbLockSound = (ToggleButton) findViewById(R.id.tbLockSound);
|
||||
toggleService = (ToggleButton) findViewById(R.id.tbArmMastListener);
|
||||
bDonate = (Button)findViewById(R.id.bDonate);
|
||||
tvContactNotice = (TextView) findViewById(R.id.tvContactNotice);
|
||||
|
||||
if(!BuildConfig.FLAVOR.equalsIgnoreCase(AutomationService.flavor_name_googleplay))
|
||||
bDonate.setVisibility(View.VISIBLE);
|
||||
|
||||
// Make links clickable
|
||||
tvContactNotice.setMovementMethod(LinkMovementMethod.getInstance());
|
||||
|
||||
toggleService.setChecked(AutomationService.isMyServiceRunning(this));
|
||||
toggleService.setOnCheckedChangeListener(new OnCheckedChangeListener()
|
||||
{
|
||||
@@ -533,6 +539,13 @@ public class ActivityMainScreen extends ActivityGeneric
|
||||
return;
|
||||
}
|
||||
|
||||
if(Miscellaneous.getTargetSDK(Miscellaneous.getAnyContext()) >= 34 && !ActivityPermissions.havePermission(Manifest.permission.FOREGROUND_SERVICE_SPECIAL_USE, context))
|
||||
{
|
||||
Toast.makeText(context, context.getResources().getString(R.string.permissionForegroundServiceTypeSpecialUseRequired), Toast.LENGTH_LONG).show();
|
||||
activityMainScreenInstance.toggleService.setChecked(false);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!AutomationService.isMyServiceRunning(context))
|
||||
{
|
||||
myServiceIntent = new Intent(context, AutomationService.class);
|
||||
@@ -590,7 +603,7 @@ public class ActivityMainScreen extends ActivityGeneric
|
||||
Miscellaneous.messageBox(getResources().getString(R.string.app_name), getResources().getString(R.string.android9RecordAudioNotice) + " " + getResources().getString(R.string.messageNotShownAgain), ActivityMainScreen.this).show();
|
||||
}
|
||||
|
||||
if(Build.VERSION.SDK_INT >= 29 && !Settings.noticeAndroid10WifiShown && Rule.isAnyRuleUsing(Action.Action_Enum.setWifi))
|
||||
if(Miscellaneous.getTargetSDK(ActivityMainScreen.this) >= 29 && !Settings.noticeAndroid10WifiShown && Rule.isAnyRuleUsing(Action.Action_Enum.setWifi))
|
||||
{
|
||||
Settings.noticeAndroid10WifiShown = true;
|
||||
Settings.writeSettings(ActivityMainScreen.this);
|
||||
|
||||
@@ -24,6 +24,7 @@ public class ActivityMainTabLayout extends TabActivity
|
||||
super.onCreate(savedInstanceState);
|
||||
Settings.readFromPersistentStorage(ActivityMainTabLayout.this);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
|
||||
if(Settings.tabsPlacement == 1)
|
||||
setContentView(R.layout.main_tab_layout_tabs_at_bottom);
|
||||
|
||||
@@ -27,6 +27,7 @@ public class ActivityManageActionBrightnessSetting extends Activity
|
||||
{
|
||||
setContentView(R.layout.activity_manage_action_brightness_settings);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
chkAutoBrightness = (CheckBox)findViewById(R.id.chkAutoBrightness);
|
||||
|
||||
@@ -260,6 +260,7 @@ public class ActivityManageActionCloseNotification extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
setContentView(R.layout.activity_manage_action_close_notification);
|
||||
|
||||
etNotificationTitle = (EditText)findViewById(R.id.etNotificationTitle);
|
||||
|
||||
@@ -20,6 +20,7 @@ public class ActivityManageActionControlMedia extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
setContentView(R.layout.activity_manage_action_control_media);
|
||||
|
||||
rbMediaPlayPause = (RadioButton)findViewById(R.id.rbMediaPlayPause);
|
||||
|
||||
@@ -20,6 +20,7 @@ public class ActivityManageActionCopyToClipboard extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
this.setContentView(R.layout.activity_manage_action_copy_to_clipboard);
|
||||
|
||||
bSaveCopyToClipboard = (Button) findViewById(R.id.bSaveCopyToClipboard);
|
||||
|
||||
@@ -25,6 +25,7 @@ public class ActivityManageActionCreateNotification extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
setContentView(R.layout.activity_manage_action_create_notification);
|
||||
|
||||
etNotificationTitle = (EditText) findViewById(R.id.etNotificationTitle);
|
||||
|
||||
@@ -20,6 +20,7 @@ public class ActivityManageActionLocationService extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
setContentView(R.layout.activity_manage_action_location_service);
|
||||
|
||||
rbActionLocationServiceOff = (RadioButton) findViewById(R.id.rbActionLocationServiceOff);
|
||||
|
||||
@@ -22,6 +22,7 @@ public class ActivityManageActionMakePhoneCall extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
setContentView(R.layout.activity_manage_action_make_phone_call);
|
||||
|
||||
etTargetPhoneNumber = (EditText)findViewById(R.id.etTargetPhoneNumber);
|
||||
|
||||
@@ -27,6 +27,7 @@ public class ActivityManageActionPlaySound extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
setContentView(R.layout.activity_manage_action_play_sound);
|
||||
|
||||
chkPlaySoundAlwaysPlay = (CheckBox)findViewById(R.id.chkPlaySoundAlwaysPlay);
|
||||
|
||||
@@ -29,6 +29,7 @@ public class ActivityManageActionRunExecutable extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
setContentView(R.layout.activity_manage_action_run_executable);
|
||||
|
||||
chkRunExecAsRoot = (CheckBox)findViewById(R.id.chkRunExecAsRoot);
|
||||
|
||||
@@ -38,6 +38,7 @@ public class ActivityManageActionSendBroadcast extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
setContentView(R.layout.activity_manage_action_send_broadcast);
|
||||
|
||||
etBroadcastToSend = (EditText)findViewById(R.id.etBroadcastToSend);
|
||||
|
||||
@@ -49,6 +49,7 @@ public class ActivityManageActionSendTextMessage extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
this.setContentView(R.layout.activity_manage_action_send_textmessage);
|
||||
|
||||
etSendTextMessage = (EditText)findViewById(R.id.etSendTextMessage);
|
||||
|
||||
@@ -25,6 +25,7 @@ public class ActivityManageActionSetVariable extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
this.setContentView(R.layout.activity_manage_action_set_variable);
|
||||
|
||||
etVariableSetKey = (EditText)findViewById(R.id.etVariableSetKey);
|
||||
|
||||
@@ -23,6 +23,7 @@ public class ActivityManageActionSpeakText extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
this.setContentView(R.layout.activity_manage_action_speak_text);
|
||||
|
||||
etSpeakText = (EditText)findViewById(R.id.etTextToSpeak);
|
||||
@@ -32,7 +33,7 @@ public class ActivityManageActionSpeakText extends Activity
|
||||
@Override
|
||||
public void onClick(View v)
|
||||
{
|
||||
if(etSpeakText.getText().toString().length()>0)
|
||||
if(!etSpeakText.getText().toString().isEmpty())
|
||||
{
|
||||
if(resultingAction == null)
|
||||
{
|
||||
|
||||
@@ -53,11 +53,11 @@ public class ActivityManageActionStartActivity extends Activity
|
||||
Button bSelectApp, bAddIntentPair, bSaveActionStartOtherActivity, showStartProgramExamples;
|
||||
Spinner spinnerParameterType;
|
||||
RadioGroup rgAppStartupType;
|
||||
boolean edit = false;
|
||||
// boolean edit = false;
|
||||
ProgressDialog progressDialog = null;
|
||||
RadioButton rbStartAppSelectByActivity, rbStartAppSelectByAction, rbStartAppByActivity, rbStartAppByBroadcast, rbStartAppByService, rbStartAppByForegroundService;
|
||||
|
||||
final String urlShowExamples = "https://server47.de/automation/examples_startProgram.html";
|
||||
final String urlShowExamples = "https://server47.de/automation/examples.html";
|
||||
public final static String startByActivityString = "0";
|
||||
public final static String startByBroadcastString = "1";
|
||||
public final static String startByServiceString = "2";
|
||||
@@ -70,6 +70,7 @@ public class ActivityManageActionStartActivity extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
setContentView(R.layout.activity_manage_action_start_activity);
|
||||
|
||||
lvIntentPairs = (ListView)findViewById(R.id.lvIntentPairs);
|
||||
@@ -95,7 +96,7 @@ public class ActivityManageActionStartActivity extends Activity
|
||||
spinnerParameterType.setAdapter(intentTypeSpinnerAdapter);
|
||||
intentTypeSpinnerAdapter.notifyDataSetChanged();
|
||||
|
||||
etClassName.setEnabled(false);
|
||||
// etClassName.setEnabled(false);
|
||||
|
||||
intentPairAdapter = new ArrayAdapter<String>(this, R.layout.text_view_for_poi_listview_mediumtextsize, intentPairList);
|
||||
bSelectApp.setOnClickListener(new OnClickListener()
|
||||
@@ -233,26 +234,29 @@ public class ActivityManageActionStartActivity extends Activity
|
||||
|
||||
String parameter2 = "";
|
||||
|
||||
if (rbStartAppSelectByActivity.isChecked())
|
||||
parameter2 += etPackageName.getText().toString() + Action.actionParameter2Split + etActivityOrActionPath.getText().toString();
|
||||
else
|
||||
{
|
||||
if (etPackageName.getText().toString() != null && etPackageName.getText().toString().length() > 0)
|
||||
parameter2 += etPackageName.getText().toString() + Action.actionParameter2Split + etActivityOrActionPath.getText().toString();
|
||||
else
|
||||
parameter2 += Actions.dummyPackageString + Action.actionParameter2Split + etActivityOrActionPath.getText().toString();
|
||||
/*
|
||||
0 = packageName
|
||||
1 = className
|
||||
2 = activityName/actionName
|
||||
3 = startType
|
||||
4 = parameters
|
||||
*/
|
||||
|
||||
parameter2 += Action.actionParameter2Split + etClassName.getText().toString();
|
||||
}
|
||||
parameter2 += etPackageName.getText().toString()
|
||||
+ Action.actionParameter2Split
|
||||
+ etClassName.getText().toString()
|
||||
+ Action.actionParameter2Split
|
||||
+ etActivityOrActionPath.getText().toString()
|
||||
+ Action.actionParameter2Split;
|
||||
|
||||
if (rbStartAppByActivity.isChecked())
|
||||
parameter2 += Action.actionParameter2Split + startByActivityString;
|
||||
parameter2 += startByActivityString;
|
||||
else if(rbStartAppByService.isChecked())
|
||||
parameter2 += Action.actionParameter2Split + startByServiceString;
|
||||
parameter2 += startByServiceString;
|
||||
else if(rbStartAppByForegroundService.isChecked())
|
||||
parameter2 += Action.actionParameter2Split + startByForegroundServiceString;
|
||||
parameter2 += startByForegroundServiceString;
|
||||
else
|
||||
parameter2 += Action.actionParameter2Split + startByBroadcastString;
|
||||
parameter2 += startByBroadcastString;
|
||||
|
||||
for (String s : intentPairList)
|
||||
parameter2 += Action.actionParameter2Split + s;
|
||||
@@ -316,23 +320,6 @@ public class ActivityManageActionStartActivity extends Activity
|
||||
}
|
||||
});
|
||||
|
||||
rgAppStartupType.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()
|
||||
{
|
||||
@Override
|
||||
public void onCheckedChanged(RadioGroup radioGroup, int i)
|
||||
{
|
||||
if(rbStartAppByActivity.isChecked())
|
||||
etClassName.setEnabled(false);
|
||||
else if (rbStartAppByBroadcast.isChecked())
|
||||
etClassName.setEnabled(false);
|
||||
else if(rbStartAppByService.isChecked())
|
||||
etClassName.setEnabled(true);
|
||||
else if(rbStartAppByForegroundService.isChecked())
|
||||
etClassName.setEnabled(true);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Intent i = getIntent();
|
||||
if(i.hasExtra(ActivityManageRule.intentNameActionParameter1))
|
||||
loadValuesIntoGui(i);
|
||||
@@ -625,52 +612,36 @@ public class ActivityManageActionStartActivity extends Activity
|
||||
rbStartAppSelectByActivity.setChecked(!selectionByAction);
|
||||
rbStartAppSelectByAction.setChecked(selectionByAction);
|
||||
|
||||
String[] params;
|
||||
String partsString = input.getStringExtra(ActivityManageRule.intentNameActionParameter2);
|
||||
/*
|
||||
0 = packageName
|
||||
1 = className
|
||||
2 = activityName/actionName
|
||||
3 = startType
|
||||
4 = parameters
|
||||
*/
|
||||
|
||||
if(partsString.contains(Action.actionParameter2Split))
|
||||
params = partsString.split(Action.actionParameter2Split);
|
||||
else
|
||||
params = partsString.split(";");
|
||||
try
|
||||
{
|
||||
String[] params;
|
||||
String partsString = input.getStringExtra(ActivityManageRule.intentNameActionParameter2);
|
||||
|
||||
if(partsString.contains(Action.actionParameter2Split))
|
||||
params = partsString.split(Action.actionParameter2Split, -1);
|
||||
else
|
||||
params = partsString.split(";", -1);
|
||||
|
||||
etPackageName.setText(params[0]);
|
||||
etClassName.setText(params[1]);
|
||||
etActivityOrActionPath.setText(params[2]);
|
||||
|
||||
if(Miscellaneous.isNumeric(params[2])) // old configuration file
|
||||
{
|
||||
rbStartAppByActivity.setChecked(params[2].equals(startByActivityString));
|
||||
rbStartAppByBroadcast.setChecked(params[2].equals(startByBroadcastString));
|
||||
rbStartAppByService.setChecked(params[2].equals(startByServiceString));
|
||||
}
|
||||
else
|
||||
{
|
||||
rbStartAppByActivity.setChecked(params[3].equals(startByActivityString));
|
||||
rbStartAppByBroadcast.setChecked(params[3].equals(startByBroadcastString));
|
||||
rbStartAppByService.setChecked(params[3].equals(startByServiceString));
|
||||
rbStartAppByForegroundService.setChecked(params[3].equals(startByForegroundServiceString));
|
||||
}
|
||||
|
||||
int startIndex = -1;
|
||||
|
||||
if(!selectionByAction)
|
||||
{
|
||||
etPackageName.setText(params[0]);
|
||||
etActivityOrActionPath.setText(params[1]);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!params[0].contains(Actions.dummyPackageString))
|
||||
etPackageName.setText(params[0]);
|
||||
|
||||
etActivityOrActionPath.setText(params[1]);
|
||||
etClassName.setText(params[2]);
|
||||
}
|
||||
|
||||
if (params.length >= 4)
|
||||
startIndex = 4;
|
||||
|
||||
if(startIndex > -1 && params.length > startIndex)
|
||||
{
|
||||
intentPairList.clear();
|
||||
|
||||
for(int i=startIndex; i<params.length; i++)
|
||||
for(int i=4; i<params.length; i++)
|
||||
{
|
||||
if(lvIntentPairs.getVisibility() != View.VISIBLE)
|
||||
lvIntentPairs.setVisibility(View.VISIBLE);
|
||||
@@ -680,6 +651,10 @@ public class ActivityManageActionStartActivity extends Activity
|
||||
|
||||
updateIntentPairList();
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
Toast.makeText(ActivityManageActionStartActivity.this, getResources().getString(R.string.errorLoadingValues), Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
|
||||
private void updateIntentPairList()
|
||||
|
||||
@@ -54,6 +54,7 @@ public class ActivityManageActionTriggerUrl extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
this.setContentView(R.layout.activity_manage_action_trigger_url);
|
||||
|
||||
etTriggerUrl = (EditText)findViewById(R.id.etTriggerUrl);
|
||||
|
||||
@@ -28,6 +28,7 @@ public class ActivityManageActionVibrate extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
setContentView(R.layout.activity_manage_action_vibrate);
|
||||
|
||||
etVibratePattern = (EditText)findViewById(R.id.etVibratePattern);
|
||||
|
||||
@@ -28,6 +28,7 @@ public class ActivityManageActionWakeLock extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
setContentView(R.layout.activity_manage_action_wakelock);
|
||||
|
||||
rbWakeLockActivate = (RadioButton)findViewById(R.id.rbWakeLockActivate);
|
||||
|
||||
@@ -24,6 +24,7 @@ public class ActivityManageActionWifi extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
setContentView(R.layout.activity_manage_action_wifi);
|
||||
|
||||
chkWifiRunAsRoot = (CheckBox)findViewById(R.id.chkWifiRunAsRoot);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.jens.automation2;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.app.ProgressDialog;
|
||||
@@ -7,6 +8,7 @@ import android.content.ActivityNotFoundException;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.location.Criteria;
|
||||
import android.location.Location;
|
||||
import android.location.LocationListener;
|
||||
@@ -23,6 +25,9 @@ import android.widget.EditText;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.core.content.PermissionChecker;
|
||||
|
||||
import com.jens.automation2.receivers.ConnectivityReceiver;
|
||||
|
||||
import java.util.Calendar;
|
||||
@@ -40,6 +45,7 @@ public class ActivityManagePoi extends Activity
|
||||
EditText guiPoiName, guiPoiLatitude, guiPoiLongitude, guiPoiRadius;
|
||||
Calendar locationSearchStart = null;
|
||||
Timer timer = null;
|
||||
int requestCodeGetLocationPermission = 1293;
|
||||
|
||||
final static int defaultRadius = 250;
|
||||
final static int searchTimeout = 120;
|
||||
@@ -60,6 +66,7 @@ public class ActivityManagePoi extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
this.setContentView(R.layout.activity_manage_specific_poi);
|
||||
|
||||
myLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
|
||||
@@ -77,7 +84,15 @@ public class ActivityManagePoi extends Activity
|
||||
public void onClick(View v)
|
||||
{
|
||||
hideKeyboard();
|
||||
getNotificationDialog(getResources().getString(R.string.positioningWindowNotice)).show();
|
||||
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
|
||||
{
|
||||
if (ActivityPermissions.havePermission(Manifest.permission.ACCESS_FINE_LOCATION, ActivityManagePoi.this))
|
||||
getNotificationDialog(getResources().getString(R.string.positioningWindowNotice)).show();
|
||||
else
|
||||
requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, requestCodeGetLocationPermission);
|
||||
}
|
||||
else
|
||||
getNotificationDialog(getResources().getString(R.string.positioningWindowNotice)).show();
|
||||
}
|
||||
});
|
||||
|
||||
@@ -111,7 +126,20 @@ public class ActivityManagePoi extends Activity
|
||||
//else
|
||||
// new Poi to be created
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
|
||||
{
|
||||
if(requestCode == requestCodeGetLocationPermission)
|
||||
{
|
||||
if(permissions[0].equals(Manifest.permission.ACCESS_FINE_LOCATION) && grantResults[0] == PackageManager.PERMISSION_GRANTED)
|
||||
getNotificationDialog(getResources().getString(R.string.positioningWindowNotice)).show();
|
||||
else
|
||||
Toast.makeText(ActivityManagePoi.this, getResources().getString(R.string.locationPermissionRequired), Toast.LENGTH_LONG).show();
|
||||
}
|
||||
// super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||
}
|
||||
|
||||
private void createPoi()
|
||||
{
|
||||
myLocationManager.removeUpdates(myLocationListenerGps);
|
||||
@@ -314,20 +342,20 @@ public class ActivityManagePoi extends Activity
|
||||
public void onClick(DialogInterface dialog, int which)
|
||||
{
|
||||
progressDialog = ProgressDialog.show(ActivityManagePoi.this, "", getResources().getString(R.string.gettingPosition), true, true);
|
||||
if(Build.VERSION.SDK_INT >= 31)
|
||||
{
|
||||
AlertDialog dia = Miscellaneous.messageBox(getResources().getString(R.string.info), getResources().getString(R.string.locationNotWorkingOn12), ActivityManagePoi.this);
|
||||
dia.setOnDismissListener(new DialogInterface.OnDismissListener()
|
||||
{
|
||||
@Override
|
||||
public void onDismiss(DialogInterface dialogInterface)
|
||||
{
|
||||
getLocation();
|
||||
}
|
||||
});
|
||||
dia.show();
|
||||
}
|
||||
else
|
||||
// if(Build.VERSION.SDK_INT >= 31)
|
||||
// {
|
||||
// AlertDialog dia = Miscellaneous.messageBox(getResources().getString(R.string.info), getResources().getString(R.string.locationNotWorkingOn12), ActivityManagePoi.this);
|
||||
// dia.setOnDismissListener(new DialogInterface.OnDismissListener()
|
||||
// {
|
||||
// @Override
|
||||
// public void onDismiss(DialogInterface dialogInterface)
|
||||
// {
|
||||
// getLocation();
|
||||
// }
|
||||
// });
|
||||
// dia.show();
|
||||
// }
|
||||
// else
|
||||
getLocation();
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.jens.automation2;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.NotificationManager;
|
||||
import android.app.ProgressDialog;
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.Context;
|
||||
@@ -28,8 +27,6 @@ import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.RequiresApi;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
public class ActivityManageProfile extends Activity
|
||||
{
|
||||
private static ProgressDialog progressDialog;
|
||||
@@ -37,12 +34,13 @@ public class ActivityManageProfile extends Activity
|
||||
final static int intentCodeRingtonePickerCallsRingtone = 9011;
|
||||
final static int intentCodeRingtonePickerNotificationsFile = 9020;
|
||||
final static int intentCodeRingtonePickerNotificationsRingtone = 9021;
|
||||
final static String android14Hint = " (>= Android 14)";
|
||||
|
||||
CheckBox checkBoxChangeSoundMode, checkBoxChangeVolumeMusicVideoGameMedia, checkBoxChangeVolumeNotifications, checkBoxChangeVolumeAlarms, checkBoxChangeIncomingCallsRingtone, checkBoxChangeNotificationRingtone, checkBoxChangeAudibleSelection, checkBoxChangeScreenLockUnlockSound, checkBoxChangeHapticFeedback, checkBoxChangeVibrateWhenRinging, checkBoxVibrateWhenRinging, checkBoxAudibleSelection, checkBoxScreenLockUnlockSound, checkBoxHapticFeedback, checkBoxChangeDnd;
|
||||
CheckBox checkBoxChangeSoundMode, checkBoxChangeVolumeMusicVideoGameMedia, checkBoxChangeVolumeNotifications, checkBoxChangeVolumeRingtone, checkBoxChangeVolumeAlarms, checkBoxChangeIncomingCallsRingtone, checkBoxChangeNotificationRingtone, checkBoxChangeAudibleSelection, checkBoxChangeScreenLockUnlockSound, checkBoxChangeHapticFeedback, checkBoxChangeVibrateWhenRinging, checkBoxVibrateWhenRinging, checkBoxAudibleSelection, checkBoxScreenLockUnlockSound, checkBoxHapticFeedback, checkBoxChangeDnd;
|
||||
Spinner spinnerSoundMode, spinnerDndMode;
|
||||
SeekBar seekBarVolumeMusic, seekBarVolumeNotifications, seekBarVolumeAlarms;
|
||||
SeekBar seekBarVolumeMusic, seekBarVolumeNotifications, seekBarVolumeAlarms, seekBarVolumeRingtones;
|
||||
Button bChangeSoundIncomingCalls, bChangeSoundNotifications, bSaveProfile;
|
||||
TextView tvIncomingCallsRingtone, tvNotificationsRingtone;
|
||||
TextView tvIncomingCallsRingtone, tvNotificationsRingtone, tvRingtoneVolume, tvNotificationsVolume;
|
||||
EditText etName;
|
||||
|
||||
boolean guiUpdate = false;
|
||||
@@ -87,12 +85,14 @@ public class ActivityManageProfile extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
this.setContentView(R.layout.activity_manage_specific_profile);
|
||||
|
||||
checkBoxChangeSoundMode = (CheckBox)findViewById(R.id.checkBoxChangeSoundMode);
|
||||
checkBoxChangeDnd = (CheckBox)findViewById(R.id.checkBoxChangeDnd);
|
||||
checkBoxChangeVolumeMusicVideoGameMedia = (CheckBox)findViewById(R.id.checkBoxChangeVolumeMusicVideoGameMedia);
|
||||
checkBoxChangeVolumeNotifications = (CheckBox)findViewById(R.id.checkBoxChangeVolumeNotifications);
|
||||
checkBoxChangeVolumeRingtone = (CheckBox)findViewById(R.id.checkBoxChangeVolumeRingtones);
|
||||
checkBoxChangeVolumeAlarms = (CheckBox)findViewById(R.id.checkBoxChangeVolumeAlarms);
|
||||
checkBoxChangeIncomingCallsRingtone = (CheckBox)findViewById(R.id.checkBoxChangeIncomingCallsRingtone);
|
||||
checkBoxChangeNotificationRingtone = (CheckBox)findViewById(R.id.checkBoxChangeNotificationRingtone);
|
||||
@@ -108,11 +108,14 @@ public class ActivityManageProfile extends Activity
|
||||
spinnerDndMode = (Spinner)findViewById(R.id.spinnerDndMode);
|
||||
seekBarVolumeMusic = (SeekBar)findViewById(R.id.seekBarVolumeMusic);
|
||||
seekBarVolumeNotifications = (SeekBar)findViewById(R.id.seekBarVolumeNotifications);
|
||||
seekBarVolumeRingtones = (SeekBar)findViewById(R.id.seekBarVolumeRingtones);
|
||||
seekBarVolumeAlarms = (SeekBar)findViewById(R.id.seekBarVolumeAlarms);
|
||||
bChangeSoundIncomingCalls = (Button)findViewById(R.id.bChangeSoundIncomingCalls);
|
||||
bChangeSoundNotifications = (Button)findViewById(R.id.bChangeSoundNotifications);
|
||||
tvIncomingCallsRingtone = (TextView)findViewById(R.id.tvIncomingCallsRingtone);
|
||||
tvNotificationsRingtone = (TextView)findViewById(R.id.tvNotificationsRingtone);
|
||||
tvRingtoneVolume = (TextView)findViewById(R.id.tvRingtoneVolume);
|
||||
tvNotificationsVolume = (TextView)findViewById(R.id.tvNotificationsVolume);
|
||||
bSaveProfile = (Button)findViewById(R.id.bSaveProfile);
|
||||
etName = (EditText)findViewById(R.id.etName);
|
||||
|
||||
@@ -124,6 +127,7 @@ public class ActivityManageProfile extends Activity
|
||||
spinnerDndMode.setEnabled(false);
|
||||
seekBarVolumeMusic.setEnabled(false);
|
||||
seekBarVolumeNotifications.setEnabled(false);
|
||||
seekBarVolumeRingtones.setEnabled(false);
|
||||
seekBarVolumeAlarms.setEnabled(false);
|
||||
bChangeSoundIncomingCalls.setEnabled(false);
|
||||
bChangeSoundNotifications.setEnabled(false);
|
||||
@@ -137,11 +141,36 @@ public class ActivityManageProfile extends Activity
|
||||
checkBoxChangeDnd.setEnabled(false);
|
||||
spinnerDndMode.setEnabled(false);
|
||||
}
|
||||
|
||||
|
||||
if(Build.VERSION.SDK_INT >= 34)
|
||||
{
|
||||
checkBoxChangeVolumeRingtone.setEnabled(true);
|
||||
|
||||
checkBoxChangeVolumeRingtone.setVisibility(View.VISIBLE);
|
||||
tvRingtoneVolume.setVisibility(View.VISIBLE);
|
||||
seekBarVolumeRingtones.setVisibility(View.VISIBLE);
|
||||
|
||||
tvNotificationsVolume.setText(getResources().getString(R.string.volumeNotifications));
|
||||
tvRingtoneVolume.setText(getResources().getString(R.string.volumeRingtone));
|
||||
}
|
||||
else
|
||||
{
|
||||
checkBoxChangeVolumeRingtone.setEnabled(false);
|
||||
tvRingtoneVolume.setEnabled(false);
|
||||
seekBarVolumeRingtones.setEnabled(false);
|
||||
|
||||
checkBoxChangeVolumeRingtone.setVisibility(View.GONE);
|
||||
tvRingtoneVolume.setVisibility(View.GONE);
|
||||
seekBarVolumeRingtones.setVisibility(View.GONE);
|
||||
|
||||
tvNotificationsVolume.setText(getResources().getString(R.string.volumeRingtone) + " + " + getResources().getString(R.string.volumeNotifications));
|
||||
}
|
||||
|
||||
// Scale SeekBars to the system's maximum volume values
|
||||
AudioManager am = (AudioManager) Miscellaneous.getAnyContext().getSystemService(Context.AUDIO_SERVICE);
|
||||
seekBarVolumeMusic.setMax(am.getStreamMaxVolume(AudioManager.STREAM_MUSIC));
|
||||
seekBarVolumeNotifications.setMax(am.getStreamMaxVolume(AudioManager.STREAM_NOTIFICATION));
|
||||
seekBarVolumeRingtones.setMax(am.getStreamMaxVolume(AudioManager.STREAM_RING));
|
||||
seekBarVolumeAlarms.setMax(am.getStreamMaxVolume(AudioManager.STREAM_ALARM));
|
||||
|
||||
soundModeAdapter = new ArrayAdapter<String>(this, R.layout.text_view_for_poi_listview_mediumtextsize, new String[]
|
||||
@@ -201,6 +230,14 @@ public class ActivityManageProfile extends Activity
|
||||
seekBarVolumeNotifications.setEnabled(isChecked);
|
||||
}
|
||||
});
|
||||
checkBoxChangeVolumeRingtone.setOnCheckedChangeListener(new OnCheckedChangeListener()
|
||||
{
|
||||
@Override
|
||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
|
||||
{
|
||||
seekBarVolumeRingtones.setEnabled(isChecked);
|
||||
}
|
||||
});
|
||||
checkBoxChangeVolumeAlarms.setOnCheckedChangeListener(new OnCheckedChangeListener()
|
||||
{
|
||||
@Override
|
||||
@@ -336,7 +373,7 @@ public class ActivityManageProfile extends Activity
|
||||
});
|
||||
|
||||
if(ActivityMainProfiles.profileToEdit != null)
|
||||
editProfile(ActivityMainProfiles.profileToEdit);
|
||||
loadValuesIntoGui(ActivityMainProfiles.profileToEdit);
|
||||
//else
|
||||
// new Profile to be created
|
||||
|
||||
@@ -369,7 +406,7 @@ public class ActivityManageProfile extends Activity
|
||||
}
|
||||
}
|
||||
|
||||
public void editProfile(Profile profileToEdit)
|
||||
public void loadValuesIntoGui(Profile profileToEdit)
|
||||
{
|
||||
guiUpdate = true;
|
||||
|
||||
@@ -378,6 +415,7 @@ public class ActivityManageProfile extends Activity
|
||||
checkBoxChangeDnd.setChecked(ActivityMainProfiles.profileToEdit.getChangeDndMode());
|
||||
checkBoxChangeVolumeMusicVideoGameMedia.setChecked(ActivityMainProfiles.profileToEdit.getChangeVolumeMusicVideoGameMedia());
|
||||
checkBoxChangeVolumeNotifications.setChecked(ActivityMainProfiles.profileToEdit.getChangeVolumeNotifications());
|
||||
checkBoxChangeVolumeRingtone.setChecked(ActivityMainProfiles.profileToEdit.getChangeVolumeRingtones());
|
||||
checkBoxChangeVolumeAlarms.setChecked(ActivityMainProfiles.profileToEdit.getChangeVolumeAlarms());
|
||||
checkBoxChangeIncomingCallsRingtone.setChecked(ActivityMainProfiles.profileToEdit.getChangeIncomingCallsRingtone());
|
||||
checkBoxChangeNotificationRingtone.setChecked(ActivityMainProfiles.profileToEdit.getChangeNotificationRingtone());
|
||||
@@ -390,6 +428,7 @@ public class ActivityManageProfile extends Activity
|
||||
spinnerDndMode.setSelection(ActivityMainProfiles.profileToEdit.getDndMode()-1);
|
||||
seekBarVolumeMusic.setProgress(ActivityMainProfiles.profileToEdit.getVolumeMusic());
|
||||
seekBarVolumeNotifications.setProgress(ActivityMainProfiles.profileToEdit.getVolumeNotifications());
|
||||
seekBarVolumeRingtones.setProgress(ActivityMainProfiles.profileToEdit.getVolumeRingtones());
|
||||
seekBarVolumeAlarms.setProgress(ActivityMainProfiles.profileToEdit.getVolumeAlarms());
|
||||
checkBoxAudibleSelection.setChecked(ActivityMainProfiles.profileToEdit.audibleSelection);
|
||||
checkBoxScreenLockUnlockSound.setChecked(ActivityMainProfiles.profileToEdit.screenLockUnlockSound);
|
||||
@@ -414,6 +453,7 @@ public class ActivityManageProfile extends Activity
|
||||
ActivityMainProfiles.profileToEdit.setChangeDndMode(checkBoxChangeDnd.isChecked());
|
||||
ActivityMainProfiles.profileToEdit.setChangeVolumeMusicVideoGameMedia(checkBoxChangeVolumeMusicVideoGameMedia.isChecked());
|
||||
ActivityMainProfiles.profileToEdit.setChangeVolumeNotifications(checkBoxChangeVolumeNotifications.isChecked());
|
||||
ActivityMainProfiles.profileToEdit.setChangeVolumeRingtones(checkBoxChangeVolumeRingtone.isChecked());
|
||||
ActivityMainProfiles.profileToEdit.setChangeVolumeAlarms(checkBoxChangeVolumeAlarms.isChecked());
|
||||
ActivityMainProfiles.profileToEdit.setChangeIncomingCallsRingtone(checkBoxChangeIncomingCallsRingtone.isChecked());
|
||||
ActivityMainProfiles.profileToEdit.setChangeNotificationRingtone(checkBoxChangeNotificationRingtone.isChecked());
|
||||
@@ -430,6 +470,7 @@ public class ActivityManageProfile extends Activity
|
||||
ActivityMainProfiles.profileToEdit.setDndMode(spinnerDndMode.getSelectedItemPosition()+1);
|
||||
ActivityMainProfiles.profileToEdit.setVolumeMusic(seekBarVolumeMusic.getProgress());
|
||||
ActivityMainProfiles.profileToEdit.setVolumeNotifications(seekBarVolumeNotifications.getProgress());
|
||||
ActivityMainProfiles.profileToEdit.setVolumeRingtones(seekBarVolumeRingtones.getProgress());
|
||||
ActivityMainProfiles.profileToEdit.setVolumeAlarms(seekBarVolumeAlarms.getProgress());
|
||||
ActivityMainProfiles.profileToEdit.setIncomingCallsRingtone(incomingCallsRingtone);
|
||||
ActivityMainProfiles.profileToEdit.setNotificationRingtone(notificationsRingtone);
|
||||
|
||||
@@ -147,6 +147,8 @@ public class ActivityManageRule extends Activity
|
||||
final static int requestCodeTriggerCalendarEventEdit = 834;
|
||||
final static int requestCodeTriggerChargingAdd = 835;
|
||||
final static int requestCodeTriggerChargingEdit = 836;
|
||||
final static int requestCodeTriggerProximityAdd = 837;
|
||||
final static int requestCodeTriggerProximityEdit = 838;
|
||||
|
||||
public static ActivityManageRule getInstance()
|
||||
{
|
||||
@@ -161,8 +163,10 @@ public class ActivityManageRule extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
setContentView(R.layout.activity_manage_specific_rule);
|
||||
|
||||
|
||||
context = this;
|
||||
instance = this;
|
||||
|
||||
@@ -363,6 +367,12 @@ public class ActivityManageRule extends Activity
|
||||
chargingStateEditor.putExtra(intentNameTriggerParameter2, selectedTrigger.getTriggerParameter2());
|
||||
startActivityForResult(chargingStateEditor, requestCodeTriggerChargingEdit);
|
||||
break;
|
||||
case proximity:
|
||||
Intent proximityEditor = new Intent(ActivityManageRule.this, ActivityManageTriggerProximity.class);
|
||||
proximityEditor.putExtra(intentNameTriggerParameter1, selectedTrigger.getTriggerParameter());
|
||||
proximityEditor.putExtra(intentNameTriggerParameter2, selectedTrigger.getTriggerParameter2());
|
||||
startActivityForResult(proximityEditor, requestCodeTriggerProximityEdit);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -622,7 +632,7 @@ public class ActivityManageRule extends Activity
|
||||
items.add(new Item(typesLong[i].toString(), R.drawable.megaphone));
|
||||
else if(types[i].toString().equals(Trigger_Enum.phoneCall.toString()))
|
||||
{
|
||||
if(ActivityPermissions.isPermissionDeclaratedInManifest(ActivityManageRule.this, Manifest.permission.SEND_SMS))
|
||||
if(ActivityPermissions.isPermissionDeclaredInManifest(ActivityManageRule.this, Manifest.permission.SEND_SMS))
|
||||
items.add(new Item(typesLong[i].toString(), R.drawable.phone));
|
||||
}
|
||||
else if(types[i].toString().equals(Trigger_Enum.nfcTag.toString()))
|
||||
@@ -655,7 +665,7 @@ public class ActivityManageRule extends Activity
|
||||
items.add(new Item(typesLong[i].toString(), R.drawable.variable));
|
||||
else if(types[i].toString().equals(Trigger_Enum.calendarEvent.toString()))
|
||||
{
|
||||
if(ActivityPermissions.isPermissionDeclaratedInManifest(ActivityManageRule.this, Manifest.permission.READ_CALENDAR))
|
||||
if(ActivityPermissions.isPermissionDeclaredInManifest(ActivityManageRule.this, Manifest.permission.READ_CALENDAR))
|
||||
items.add(new Item(typesLong[i].toString(), R.drawable.calendar));
|
||||
}
|
||||
else
|
||||
@@ -725,6 +735,13 @@ public class ActivityManageRule extends Activity
|
||||
startActivityForResult(triggerChargingIntent, requestCodeTriggerChargingAdd);
|
||||
return;
|
||||
}
|
||||
else if(triggerType == Trigger_Enum.proximity)
|
||||
{
|
||||
newTrigger.setTriggerType(Trigger_Enum.proximity);
|
||||
Intent triggerProximityIntent = new Intent(myContext, ActivityManageTriggerProximity.class);
|
||||
startActivityForResult(triggerProximityIntent, requestCodeTriggerProximityAdd);
|
||||
return;
|
||||
}
|
||||
else if(triggerType == Trigger_Enum.musicPlaying)
|
||||
booleanChoices = new String[]{getResources().getString(R.string.started), getResources().getString(R.string.stopped)};
|
||||
else if(triggerType == Trigger_Enum.usb_host_connection)
|
||||
@@ -1486,19 +1503,43 @@ public class ActivityManageRule extends Activity
|
||||
this.refreshTriggerList();
|
||||
}
|
||||
}
|
||||
else if(requestCode == requestCodeTriggerProximityAdd)
|
||||
{
|
||||
if(resultCode == RESULT_OK)
|
||||
{
|
||||
newTrigger.setTriggerParameter(data.getBooleanExtra(ActivityManageRule.intentNameTriggerParameter1, false));
|
||||
newTrigger.setTriggerParameter2(data.getStringExtra(ActivityManageRule.intentNameTriggerParameter2));
|
||||
newTrigger.setParentRule(ruleToEdit);
|
||||
ruleToEdit.getTriggerSet().add(newTrigger);
|
||||
this.refreshTriggerList();
|
||||
}
|
||||
}
|
||||
else if(requestCode == requestCodeTriggerChargingEdit)
|
||||
{
|
||||
if(resultCode == RESULT_OK)
|
||||
{
|
||||
Trigger responseTimeFrame = new Trigger();
|
||||
responseTimeFrame.setTriggerType(Trigger_Enum.charging);
|
||||
responseTimeFrame.setTriggerParameter(data.getBooleanExtra(intentNameTriggerParameter1, true));
|
||||
responseTimeFrame.setTriggerParameter2(data.getStringExtra(intentNameTriggerParameter2));
|
||||
responseTimeFrame.setParentRule(ruleToEdit);
|
||||
ruleToEdit.getTriggerSet().set(editIndex, responseTimeFrame);
|
||||
Trigger chargingStateTrigger = new Trigger();
|
||||
chargingStateTrigger.setTriggerType(Trigger_Enum.charging);
|
||||
chargingStateTrigger.setTriggerParameter(data.getBooleanExtra(intentNameTriggerParameter1, true));
|
||||
chargingStateTrigger.setTriggerParameter2(data.getStringExtra(intentNameTriggerParameter2));
|
||||
chargingStateTrigger.setParentRule(ruleToEdit);
|
||||
ruleToEdit.getTriggerSet().set(editIndex, chargingStateTrigger);
|
||||
this.refreshTriggerList();
|
||||
}
|
||||
}
|
||||
else if(requestCode == requestCodeTriggerProximityEdit)
|
||||
{
|
||||
if(resultCode == RESULT_OK)
|
||||
{
|
||||
Trigger proximityTrigger = new Trigger();
|
||||
proximityTrigger.setTriggerType(Trigger_Enum.proximity);
|
||||
proximityTrigger.setTriggerParameter(data.getBooleanExtra(intentNameTriggerParameter1, true));
|
||||
proximityTrigger.setTriggerParameter2(data.getStringExtra(intentNameTriggerParameter2));
|
||||
proximityTrigger.setParentRule(ruleToEdit);
|
||||
ruleToEdit.getTriggerSet().set(editIndex, proximityTrigger);
|
||||
this.refreshTriggerList();
|
||||
}
|
||||
}
|
||||
else if(requestCode == requestCodeActionStartActivityAdd)
|
||||
{
|
||||
// manage start of other activity
|
||||
@@ -2238,17 +2279,17 @@ public class ActivityManageRule extends Activity
|
||||
items.add(new Item(typesLong[i].toString(), R.drawable.script));
|
||||
else if(types[i].toString().equals(Action_Enum.startPhoneCall.toString()))
|
||||
{
|
||||
if(ActivityPermissions.isPermissionDeclaratedInManifest(ActivityManageRule.this, Manifest.permission.CALL_PHONE))
|
||||
if(ActivityPermissions.isPermissionDeclaredInManifest(ActivityManageRule.this, Manifest.permission.CALL_PHONE))
|
||||
items.add(new Item(typesLong[i].toString(), R.drawable.phone));
|
||||
}
|
||||
else if(types[i].toString().equals(Action_Enum.stopPhoneCall.toString()))
|
||||
{
|
||||
if(ActivityPermissions.isPermissionDeclaratedInManifest(ActivityManageRule.this, Manifest.permission.ANSWER_PHONE_CALLS))
|
||||
if(ActivityPermissions.isPermissionDeclaredInManifest(ActivityManageRule.this, Manifest.permission.ANSWER_PHONE_CALLS))
|
||||
items.add(new Item(typesLong[i].toString(), R.drawable.phone));
|
||||
}
|
||||
else if(types[i].toString().equals(Action_Enum.sendTextMessage.toString()))
|
||||
{
|
||||
if(ActivityPermissions.isPermissionDeclaratedInManifest(ActivityManageRule.this, Manifest.permission.SEND_SMS))
|
||||
if(ActivityPermissions.isPermissionDeclaredInManifest(ActivityManageRule.this, Manifest.permission.SEND_SMS))
|
||||
items.add(new Item(typesLong[i].toString(), R.drawable.message));
|
||||
}
|
||||
else if(types[i].toString().equals(Action_Enum.copyToClipboard.toString()))
|
||||
@@ -2259,7 +2300,7 @@ public class ActivityManageRule extends Activity
|
||||
items.add(new Item(typesLong[i].toString(), R.drawable.compass_small));
|
||||
else if(types[i].toString().equals(Action_Enum.takeScreenshot.toString()))
|
||||
{
|
||||
if(ActivityPermissions.isPermissionDeclaratedInManifest(ActivityManageRule.this, Manifest.permission.BIND_ACCESSIBILITY_SERVICE))
|
||||
if(ActivityPermissions.isServiceAvailable(Miscellaneous.getAnyContext(), "MyAccessibilityService"))
|
||||
items.add(new Item(typesLong[i].toString(), R.drawable.copier));
|
||||
}
|
||||
else
|
||||
@@ -2294,28 +2335,28 @@ public class ActivityManageRule extends Activity
|
||||
{
|
||||
newAction = new Action();
|
||||
|
||||
if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.triggerUrl.toString()))
|
||||
CharSequence[] actionTypes = Action.getActionTypesAsArray();
|
||||
if(actionTypes[which].toString().equals(Action_Enum.triggerUrl.toString()))
|
||||
{
|
||||
//launch other activity to enter a url and parameters;
|
||||
newAction.setAction(Action_Enum.triggerUrl);
|
||||
// ActivityManageActionTriggerUrl.resultingAction = null;
|
||||
Intent editTriggerIntent = new Intent(context, ActivityManageActionTriggerUrl.class);
|
||||
startActivityForResult(editTriggerIntent, requestCodeActionTriggerUrlAdd);
|
||||
}
|
||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.setWifi.toString()))
|
||||
else if(actionTypes[which].toString().equals(Action_Enum.setWifi.toString()))
|
||||
{
|
||||
newAction.setAction(Action_Enum.setWifi);
|
||||
Intent editSetWifiIntent = new Intent(context, ActivityManageActionWifi.class);
|
||||
startActivityForResult(editSetWifiIntent, requestCodeActionSetWifiAdd);
|
||||
}
|
||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.setBluetooth.toString()))
|
||||
else if(actionTypes[which].toString().equals(Action_Enum.setBluetooth.toString()))
|
||||
{
|
||||
if(!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH))
|
||||
Miscellaneous.messageBox("Bluetooth", getResources().getString(R.string.deviceDoesNotHaveBluetooth), ActivityManageRule.this).show();;
|
||||
newAction.setAction(Action_Enum.setBluetooth);
|
||||
getActionParameter1Dialog(ActivityManageRule.this).show();
|
||||
}
|
||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.setUsbTethering.toString()))
|
||||
else if(actionTypes[which].toString().equals(Action_Enum.setUsbTethering.toString()))
|
||||
{
|
||||
newAction.setAction(Action_Enum.setUsbTethering);
|
||||
getActionParameter1Dialog(ActivityManageRule.this).show();
|
||||
@@ -2323,12 +2364,12 @@ public class ActivityManageRule extends Activity
|
||||
if(Build.VERSION.SDK_INT > Build.VERSION_CODES.GINGERBREAD_MR1)
|
||||
Miscellaneous.messageBox(context.getResources().getString(R.string.warning), context.getResources().getString(R.string.usbTetheringFailForAboveGingerbread), context).show();
|
||||
}
|
||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.setWifiTethering.toString()))
|
||||
else if(actionTypes[which].toString().equals(Action_Enum.setWifiTethering.toString()))
|
||||
{
|
||||
newAction.setAction(Action_Enum.setWifiTethering);
|
||||
getActionParameter1Dialog(ActivityManageRule.this).show();
|
||||
}
|
||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.setBluetoothTethering.toString()))
|
||||
else if(actionTypes[which].toString().equals(Action_Enum.setBluetoothTethering.toString()))
|
||||
{
|
||||
newAction.setAction(Action_Enum.setBluetoothTethering);
|
||||
getActionParameter1Dialog(ActivityManageRule.this).show();
|
||||
@@ -2339,12 +2380,12 @@ public class ActivityManageRule extends Activity
|
||||
if(Build.VERSION.SDK_INT > Build.VERSION_CODES.O)
|
||||
Miscellaneous.messageBox(context.getResources().getString(R.string.notice), context.getResources().getString(R.string.btTetheringNotice), context).show();
|
||||
}
|
||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.setDisplayRotation.toString()))
|
||||
else if(actionTypes[which].toString().equals(Action_Enum.setDisplayRotation.toString()))
|
||||
{
|
||||
newAction.setAction(Action_Enum.setDisplayRotation);
|
||||
getActionParameter1Dialog(ActivityManageRule.this).show();
|
||||
}
|
||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.changeSoundProfile.toString()))
|
||||
else if(actionTypes[which].toString().equals(Action_Enum.changeSoundProfile.toString()))
|
||||
{
|
||||
if(Profile.getProfileCollection().size() > 0)
|
||||
{
|
||||
@@ -2354,23 +2395,23 @@ public class ActivityManageRule extends Activity
|
||||
else
|
||||
Toast.makeText(context, getResources().getString(R.string.noProfilesCreateOneFirst), Toast.LENGTH_LONG).show();
|
||||
}
|
||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.startOtherActivity.toString()))
|
||||
else if(actionTypes[which].toString().equals(Action_Enum.startOtherActivity.toString()))
|
||||
{
|
||||
newAction.setAction(Action_Enum.startOtherActivity);
|
||||
Intent intent = new Intent(ActivityManageRule.this, ActivityManageActionStartActivity.class);
|
||||
startActivityForResult(intent, requestCodeActionStartActivityAdd);
|
||||
}
|
||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.waitBeforeNextAction.toString()))
|
||||
else if(actionTypes[which].toString().equals(Action_Enum.waitBeforeNextAction.toString()))
|
||||
{
|
||||
newAction.setAction(Action_Enum.waitBeforeNextAction);
|
||||
getActionWaitBeforeNextActionDialog(ActivityManageRule.this).show();
|
||||
}
|
||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.turnScreenOnOrOff.toString()))
|
||||
else if(actionTypes[which].toString().equals(Action_Enum.turnScreenOnOrOff.toString()))
|
||||
{
|
||||
newAction.setAction(Action_Enum.turnScreenOnOrOff);
|
||||
getActionParameter1Dialog(ActivityManageRule.this).show();
|
||||
}
|
||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.setAirplaneMode.toString()))
|
||||
else if(actionTypes[which].toString().equals(Action_Enum.setAirplaneMode.toString()))
|
||||
{
|
||||
newAction.setAction(Action_Enum.setAirplaneMode);
|
||||
getActionParameter1Dialog(ActivityManageRule.this).show();
|
||||
@@ -2379,13 +2420,13 @@ public class ActivityManageRule extends Activity
|
||||
Miscellaneous.messageBox(getResources().getString(R.string.airplaneMode), getResources().getString(R.string.rootExplanation), ActivityManageRule.this).show();
|
||||
}
|
||||
}
|
||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.setDataConnection.toString()))
|
||||
else if(actionTypes[which].toString().equals(Action_Enum.setDataConnection.toString()))
|
||||
{
|
||||
newAction.setAction(Action_Enum.setDataConnection);
|
||||
getActionParameter1Dialog(ActivityManageRule.this).show();
|
||||
Miscellaneous.messageBox(getResources().getString(R.string.actionDataConnection), getResources().getString(R.string.rootExplanation), ActivityManageRule.this).show();
|
||||
}
|
||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.speakText.toString()))
|
||||
else if(actionTypes[which].toString().equals(Action_Enum.speakText.toString()))
|
||||
{
|
||||
//launch other activity to enter a url and parameters;
|
||||
newAction.setAction(Action_Enum.speakText);
|
||||
@@ -2393,9 +2434,9 @@ public class ActivityManageRule extends Activity
|
||||
Intent editTriggerIntent = new Intent(context, ActivityManageActionSpeakText.class);
|
||||
startActivityForResult(editTriggerIntent, requestCodeActionSpeakTextAdd);
|
||||
}
|
||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.sendTextMessage.toString()))
|
||||
else if(actionTypes[which].toString().equals(Action_Enum.sendTextMessage.toString()))
|
||||
{
|
||||
if(ActivityPermissions.isPermissionDeclaratedInManifest(ActivityManageRule.this, Manifest.permission.SEND_SMS))
|
||||
if(ActivityPermissions.isPermissionDeclaredInManifest(ActivityManageRule.this, Manifest.permission.SEND_SMS))
|
||||
{
|
||||
//launch other activity to enter parameters;
|
||||
newAction.setAction(Action_Enum.sendTextMessage);
|
||||
@@ -2404,97 +2445,97 @@ public class ActivityManageRule extends Activity
|
||||
startActivityForResult(editTriggerIntent, requestCodeActionSendTextMessageAdd);
|
||||
}
|
||||
}
|
||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.playMusic.toString()))
|
||||
else if(actionTypes[which].toString().equals(Action_Enum.playMusic.toString()))
|
||||
{
|
||||
newAction.setAction(Action_Enum.playMusic);
|
||||
ruleToEdit.getActionSet().add(newAction);
|
||||
refreshActionList();
|
||||
}
|
||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.vibrate.toString()))
|
||||
else if(actionTypes[which].toString().equals(Action_Enum.vibrate.toString()))
|
||||
{
|
||||
newAction.setAction(Action_Enum.vibrate);
|
||||
Intent intent = new Intent(ActivityManageRule.this, ActivityManageActionVibrate.class);
|
||||
startActivityForResult(intent, requestCodeActionVibrateAdd);
|
||||
}
|
||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.sendBroadcast.toString()))
|
||||
else if(actionTypes[which].toString().equals(Action_Enum.sendBroadcast.toString()))
|
||||
{
|
||||
newAction.setAction(Action_Enum.sendBroadcast);
|
||||
Intent intent = new Intent(ActivityManageRule.this, ActivityManageActionSendBroadcast.class);
|
||||
startActivityForResult(intent, requestCodeActionSendBroadcastAdd);
|
||||
}
|
||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.runExecutable.toString()))
|
||||
else if(actionTypes[which].toString().equals(Action_Enum.runExecutable.toString()))
|
||||
{
|
||||
newAction.setAction(Action_Enum.runExecutable);
|
||||
Intent intent = new Intent(ActivityManageRule.this, ActivityManageActionRunExecutable.class);
|
||||
startActivityForResult(intent, requestCodeActionRunExecutableAdd);
|
||||
}
|
||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.startPhoneCall.toString()))
|
||||
else if(actionTypes[which].toString().equals(Action_Enum.startPhoneCall.toString()))
|
||||
{
|
||||
newAction.setAction(Action_Enum.startPhoneCall);
|
||||
Intent intent = new Intent(ActivityManageRule.this, ActivityManageActionMakePhoneCall.class);
|
||||
startActivityForResult(intent, requestCodeActionMakePhoneCallAdd);
|
||||
}
|
||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.setVariable.toString()))
|
||||
else if(actionTypes[which].toString().equals(Action_Enum.setVariable.toString()))
|
||||
{
|
||||
newAction.setAction(Action_Enum.setVariable);
|
||||
Intent intent = new Intent(ActivityManageRule.this, ActivityManageActionSetVariable.class);
|
||||
startActivityForResult(intent, requestCodeActionSetVariableAdd);
|
||||
}
|
||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.stopPhoneCall.toString()))
|
||||
else if(actionTypes[which].toString().equals(Action_Enum.stopPhoneCall.toString()))
|
||||
{
|
||||
newAction.setAction(Action_Enum.stopPhoneCall);
|
||||
ruleToEdit.getActionSet().add(newAction);
|
||||
refreshActionList();
|
||||
}
|
||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.wakelock.toString()))
|
||||
else if(actionTypes[which].toString().equals(Action_Enum.wakelock.toString()))
|
||||
{
|
||||
newAction.setAction(Action_Enum.wakelock);
|
||||
Intent intent = new Intent(ActivityManageRule.this, ActivityManageActionWakeLock.class);
|
||||
startActivityForResult(intent, requestCodeActionWakeLockAdd);
|
||||
}
|
||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.controlMediaPlayback.toString()))
|
||||
else if(actionTypes[which].toString().equals(Action_Enum.controlMediaPlayback.toString()))
|
||||
{
|
||||
newAction.setAction(Action_Enum.controlMediaPlayback);
|
||||
Intent intent = new Intent(ActivityManageRule.this, ActivityManageActionControlMedia.class);
|
||||
startActivityForResult(intent, requestCodeActionControlMediaAdd);
|
||||
}
|
||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.createNotification.toString()))
|
||||
else if(actionTypes[which].toString().equals(Action_Enum.createNotification.toString()))
|
||||
{
|
||||
newAction.setAction(Action_Enum.createNotification);
|
||||
Intent intent = new Intent(ActivityManageRule.this, ActivityManageActionCreateNotification.class);
|
||||
startActivityForResult(intent, requestCodeActionCreateNotificationAdd);
|
||||
}
|
||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.closeNotification.toString()))
|
||||
else if(actionTypes[which].toString().equals(Action_Enum.closeNotification.toString()))
|
||||
{
|
||||
newAction.setAction(Action_Enum.closeNotification);
|
||||
Intent intent = new Intent(ActivityManageRule.this, ActivityManageActionCloseNotification.class);
|
||||
startActivityForResult(intent, requestCodeActionCloseNotificationAdd);
|
||||
}
|
||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.setScreenBrightness.toString()))
|
||||
else if(actionTypes[which].toString().equals(Action_Enum.setScreenBrightness.toString()))
|
||||
{
|
||||
newAction.setAction(Action_Enum.setScreenBrightness);
|
||||
Intent actionScreenBrightnessIntent = new Intent(context, ActivityManageActionBrightnessSetting.class);
|
||||
startActivityForResult(actionScreenBrightnessIntent, requestCodeActionScreenBrightnessAdd);
|
||||
}
|
||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.playSound.toString()))
|
||||
else if(actionTypes[which].toString().equals(Action_Enum.playSound.toString()))
|
||||
{
|
||||
newAction.setAction(Action_Enum.playSound);
|
||||
Intent actionPlaySoundIntent = new Intent(context, ActivityManageActionPlaySound.class);
|
||||
startActivityForResult(actionPlaySoundIntent, requestCodeActionPlaySoundAdd);
|
||||
}
|
||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.copyToClipboard.toString()))
|
||||
else if(actionTypes[which].toString().equals(Action_Enum.copyToClipboard.toString()))
|
||||
{
|
||||
newAction.setAction(Action_Enum.copyToClipboard);
|
||||
Intent intent = new Intent(ActivityManageRule.this, ActivityManageActionCopyToClipboard.class);
|
||||
startActivityForResult(intent, requestCodeActionCopyTextToClipboardAdd);
|
||||
}
|
||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.takeScreenshot.toString()))
|
||||
else if(actionTypes[which].toString().equals(Action_Enum.takeScreenshot.toString()))
|
||||
{
|
||||
newAction.setAction(Action_Enum.takeScreenshot);
|
||||
ruleToEdit.getActionSet().add(newAction);
|
||||
refreshActionList();
|
||||
}
|
||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.setLocationService.toString()))
|
||||
else if(actionTypes[which].toString().equals(Action_Enum.setLocationService.toString()))
|
||||
{
|
||||
newAction.setAction(Action_Enum.setLocationService);
|
||||
Intent intent = new Intent(ActivityManageRule.this, ActivityManageActionLocationService.class);
|
||||
|
||||
@@ -33,6 +33,7 @@ public class ActivityManageTriggerBluetooth extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
setContentView(R.layout.activity_manage_trigger_bluetooth);
|
||||
|
||||
radioAnyBluetoothDevice = (RadioButton)findViewById(R.id.radioAnyBluetoothDevice);
|
||||
|
||||
@@ -29,6 +29,7 @@ public class ActivityManageTriggerBroadcast extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
setContentView(R.layout.activity_manage_trigger_broadcasts);
|
||||
|
||||
bBroadcastShowSuggestions = findViewById(R.id.bBroadcastShowSuggestions);
|
||||
|
||||
@@ -51,6 +51,7 @@ public class ActivityManageTriggerCalendar extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
setContentView(R.layout.activity_manage_trigger_calendar);
|
||||
|
||||
chkCalendarEventActive = (CheckBox) findViewById(R.id.chkCalendarEventActive);
|
||||
|
||||
@@ -10,12 +10,7 @@ import android.widget.RadioButton;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.jens.automation2.ActivityManageRule;
|
||||
import com.jens.automation2.Miscellaneous;
|
||||
import com.jens.automation2.R;
|
||||
import com.jens.automation2.Trigger;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import com.jens.automation2.receivers.BatteryReceiver;
|
||||
|
||||
public class ActivityManageTriggerCharging extends Activity
|
||||
{
|
||||
@@ -27,6 +22,7 @@ public class ActivityManageTriggerCharging extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
setContentView(R.layout.activity_manage_trigger_charging);
|
||||
|
||||
rbChargingOn = (RadioButton) findViewById(R.id.rbChargingOn);
|
||||
@@ -69,13 +65,13 @@ public class ActivityManageTriggerCharging extends Activity
|
||||
String param2 = "";
|
||||
|
||||
if(rbChargingTypeAny.isChecked())
|
||||
param2 = "0";
|
||||
param2 = String.valueOf(BatteryReceiver.batteryChargingTypeAny);
|
||||
else if(rbChargingTypeAc.isChecked())
|
||||
param2 = String.valueOf(BatteryManager.BATTERY_PLUGGED_AC);
|
||||
param2 = String.valueOf(BatteryReceiver.batteryChargingTypeAc);
|
||||
else if(rbChargingTypeUsb.isChecked())
|
||||
param2 = String.valueOf(BatteryManager.BATTERY_PLUGGED_USB);
|
||||
param2 = String.valueOf(BatteryReceiver.batteryChargingTypeUsb);
|
||||
else if(rbChargingTypeWireless.isChecked())
|
||||
param2 = String.valueOf(BatteryManager.BATTERY_PLUGGED_WIRELESS);
|
||||
param2 = String.valueOf(BatteryReceiver.batteryChargingTypeWireless);
|
||||
|
||||
response.putExtra(ActivityManageRule.intentNameTriggerParameter2, param2);
|
||||
|
||||
|
||||
@@ -5,6 +5,8 @@ import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.CompoundButton;
|
||||
import android.widget.EditText;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
@@ -14,6 +16,7 @@ import org.apache.commons.lang3.StringUtils;
|
||||
public class ActivityManageTriggerCheckVariable extends Activity
|
||||
{
|
||||
EditText etVariableKeyTrigger, etVariableValueTrigger;
|
||||
CheckBox chkTriggerVariableDirection;
|
||||
Button bTriggerVariableSave;
|
||||
|
||||
@Override
|
||||
@@ -21,13 +24,19 @@ public class ActivityManageTriggerCheckVariable extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
setContentView(R.layout.activity_manage_trigger_check_variable);
|
||||
|
||||
etVariableKeyTrigger = (EditText) findViewById(R.id.etVariableKeyTrigger);
|
||||
etVariableValueTrigger = (EditText) findViewById(R.id.etVariableValueTrigger);
|
||||
chkTriggerVariableDirection = (CheckBox)findViewById(R.id.chkTriggerVariableDirection);
|
||||
bTriggerVariableSave = (Button) findViewById(R.id.bTriggerVariableSave);
|
||||
|
||||
Intent input = getIntent();
|
||||
|
||||
if(input.hasExtra(ActivityManageRule.intentNameTriggerParameter1))
|
||||
chkTriggerVariableDirection.setChecked(input.getBooleanExtra(ActivityManageRule.intentNameTriggerParameter1, true));
|
||||
|
||||
if(input.hasExtra(ActivityManageRule.intentNameTriggerParameter2))
|
||||
{
|
||||
String[] conditions = input.getStringExtra(ActivityManageRule.intentNameTriggerParameter2).split(Trigger.triggerParameter2Split);
|
||||
@@ -36,13 +45,26 @@ public class ActivityManageTriggerCheckVariable extends Activity
|
||||
etVariableValueTrigger.setText(conditions[1]);
|
||||
}
|
||||
|
||||
chkTriggerVariableDirection.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
|
||||
{
|
||||
@Override
|
||||
public void onCheckedChanged(CompoundButton compoundButton, boolean checked)
|
||||
{
|
||||
if(checked)
|
||||
chkTriggerVariableDirection.setText(getResources().getString(R.string.matches));
|
||||
else
|
||||
chkTriggerVariableDirection.setText(getResources().getString(R.string.doesNotMatch));
|
||||
}
|
||||
});
|
||||
|
||||
bTriggerVariableSave.setOnClickListener(new View.OnClickListener()
|
||||
{
|
||||
@Override
|
||||
public void onClick(View view)
|
||||
{
|
||||
Intent response = new Intent();
|
||||
// response.putExtra(ActivityManageRule.intentNameTriggerParameter1, rbTetheringOn.isChecked());
|
||||
|
||||
response.putExtra(ActivityManageRule.intentNameTriggerParameter1, chkTriggerVariableDirection.isChecked());
|
||||
|
||||
if(StringUtils.isEmpty(etVariableValueTrigger.getText().toString()))
|
||||
response.putExtra(ActivityManageRule.intentNameTriggerParameter2, etVariableKeyTrigger.getText().toString());
|
||||
|
||||
@@ -105,6 +105,7 @@ public class ActivityManageTriggerDeviceOrientation extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
setContentView(R.layout.activity_manage_trigger_device_orientation);
|
||||
|
||||
currentAzimuth = (TextView) findViewById(R.id.tvCurrentAzimuth);
|
||||
|
||||
@@ -40,6 +40,7 @@ public class ActivityManageTriggerNfc extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
setContentView(R.layout.activity_manage_trigger_nfc);
|
||||
|
||||
etNewNfcIdValue = (EditText)findViewById(R.id.etNewNfcIdValue);
|
||||
@@ -150,7 +151,12 @@ public class ActivityManageTriggerNfc extends Activity
|
||||
final Intent intent = new Intent(activity.getApplicationContext(), activity.getClass());
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
|
||||
|
||||
final PendingIntent pendingIntent = PendingIntent.getActivity(activity.getApplicationContext(), 0, intent, 0);
|
||||
final PendingIntent pendingIntent;
|
||||
|
||||
if(Miscellaneous.getTargetSDK(activity) >= 31)
|
||||
pendingIntent = PendingIntent.getActivity(activity.getApplicationContext(), 0, intent, PendingIntent.FLAG_IMMUTABLE);
|
||||
else
|
||||
pendingIntent = PendingIntent.getActivity(activity.getApplicationContext(), 0, intent, 0);
|
||||
|
||||
IntentFilter[] filters = new IntentFilter[1];
|
||||
String[][] techList = new String[][]{};
|
||||
|
||||
@@ -259,6 +259,7 @@ public class ActivityManageTriggerNotification extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
setContentView(R.layout.activity_manage_trigger_notification);
|
||||
|
||||
etNotificationTitle = (EditText)findViewById(R.id.etNotificationTitle);
|
||||
|
||||
@@ -36,6 +36,7 @@ public class ActivityManageTriggerPhoneCall extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
setContentView(R.layout.activity_manage_trigger_phone_call);
|
||||
|
||||
etTriggerPhoneCallPhoneNumber = (EditText)findViewById(R.id.etTriggerPhoneCallPhoneNumber);
|
||||
|
||||
@@ -32,6 +32,7 @@ public class ActivityManageTriggerProfile extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
setContentView(R.layout.activity_manage_trigger_profile);
|
||||
|
||||
bSaveTriggerProfile = (Button)findViewById(R.id.bSaveTriggerProfile);
|
||||
|
||||
@@ -0,0 +1,172 @@
|
||||
package com.jens.automation2;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.hardware.Sensor;
|
||||
import android.hardware.SensorEvent;
|
||||
import android.hardware.SensorEventListener;
|
||||
import android.hardware.SensorManager;
|
||||
import android.net.wifi.ScanResult;
|
||||
import android.net.wifi.WifiConfiguration;
|
||||
import android.net.wifi.WifiManager;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.text.Editable;
|
||||
import android.text.TextWatcher;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Button;
|
||||
import android.widget.CompoundButton;
|
||||
import android.widget.EditText;
|
||||
import android.widget.RadioButton;
|
||||
import android.widget.SeekBar;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
|
||||
import com.google.android.material.slider.RangeSlider;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class ActivityManageTriggerProximity extends Activity
|
||||
{
|
||||
TextView tvTriggerProximityHint, tvProximityCurrentValue;
|
||||
Button bTriggerProximitySave;
|
||||
RangeSlider rsProximity;
|
||||
SeekBar sbProximityTest;
|
||||
|
||||
SensorManager sensorManager;
|
||||
Sensor proximitySensor;
|
||||
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState)
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
|
||||
/*
|
||||
A modern theme is required for this activity because of the RangeSlider.
|
||||
The value configured in settings is ignored.
|
||||
*/
|
||||
this.setTheme(R.style.AppThemeMaterial);
|
||||
|
||||
setContentView(R.layout.activity_manage_trigger_proximity);
|
||||
|
||||
rsProximity = (RangeSlider) findViewById(R.id.rsProximity);
|
||||
sbProximityTest = (SeekBar) findViewById(R.id.sbProximityTest);
|
||||
tvTriggerProximityHint = (TextView) findViewById(R.id.tvTriggerProximityHint);
|
||||
tvProximityCurrentValue = (TextView) findViewById(R.id.tvProximityCurrentValue);
|
||||
bTriggerProximitySave = (Button) findViewById(R.id.bTriggerProximitySave);
|
||||
|
||||
sbProximityTest.setEnabled(false);
|
||||
tvTriggerProximityHint.setVisibility(View.GONE);
|
||||
|
||||
bTriggerProximitySave.setOnClickListener(new View.OnClickListener()
|
||||
{
|
||||
@Override
|
||||
public void onClick(View v)
|
||||
{
|
||||
Intent response = new Intent();
|
||||
|
||||
response.putExtra(ActivityManageRule.intentNameTriggerParameter2, String.valueOf(rsProximity.getValues().get(0)) + Trigger.triggerParameter2Split + String.valueOf(rsProximity.getValues().get(1)));
|
||||
setResult(RESULT_OK, response);
|
||||
finish();
|
||||
}
|
||||
});
|
||||
|
||||
if(getIntent().hasExtra(ActivityManageRule.intentNameTriggerParameter2))
|
||||
{
|
||||
String[] values = getIntent().getStringExtra(ActivityManageRule.intentNameTriggerParameter2).split(Trigger.triggerParameter2Split);
|
||||
rsProximity.setValues(Float.parseFloat(values[0]), Float.parseFloat(values[1]));
|
||||
}
|
||||
else
|
||||
rsProximity.setValues(0f, 10f);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume()
|
||||
{
|
||||
super.onResume();
|
||||
startPreview();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPause()
|
||||
{
|
||||
super.onPause();
|
||||
stopPreview();
|
||||
}
|
||||
|
||||
void startPreview()
|
||||
{
|
||||
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
|
||||
|
||||
// from sensor service we are
|
||||
// calling proximity sensor
|
||||
proximitySensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
|
||||
|
||||
// handling the case if the proximity
|
||||
// sensor is not present in users device.
|
||||
if (proximitySensor == null)
|
||||
{
|
||||
tvTriggerProximityHint.setVisibility(View.VISIBLE);
|
||||
finish();
|
||||
}
|
||||
else
|
||||
{
|
||||
// registering our sensor with sensor manager.
|
||||
sensorManager.registerListener(proximitySensorEventListener, proximitySensor, SensorManager.SENSOR_DELAY_NORMAL);
|
||||
}
|
||||
}
|
||||
|
||||
void stopPreview()
|
||||
{
|
||||
if(proximitySensor != null)
|
||||
sensorManager.unregisterListener(proximitySensorEventListener);
|
||||
}
|
||||
|
||||
SensorEventListener proximitySensorEventListener = new SensorEventListener()
|
||||
{
|
||||
@Override
|
||||
public void onSensorChanged(SensorEvent sensorEvent)
|
||||
{
|
||||
// check if the sensor type is proximity sensor.
|
||||
if (sensorEvent.sensor.getType() == Sensor.TYPE_PROXIMITY)
|
||||
{
|
||||
sbProximityTest.setProgress((int)sensorEvent.values[0]);
|
||||
tvProximityCurrentValue.setText((String.valueOf(sensorEvent.values[0])));
|
||||
|
||||
if (sensorEvent.values[0] == 0)
|
||||
{
|
||||
// here we are setting our status to our textview..
|
||||
// if sensor event return 0 then object is closed
|
||||
// to sensor else object is away from sensor.
|
||||
// sensorStatusTV.setText("Near");
|
||||
}
|
||||
else
|
||||
{
|
||||
// sensorStatusTV.setText("Away");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAccuracyChanged(Sensor sensor, int i)
|
||||
{
|
||||
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -22,6 +22,7 @@ public class ActivityManageTriggerSubSystemState extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
setContentView(R.layout.activity_manage_trigger_subsystemstate);
|
||||
|
||||
rbSubSystemStateWifi = (RadioButton)findViewById(R.id.rbSubSystemStateWifi);
|
||||
|
||||
@@ -27,6 +27,7 @@ public class ActivityManageTriggerTethering extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
setContentView(R.layout.activity_manage_trigger_tethering);
|
||||
|
||||
rbTetheringOn = (RadioButton) findViewById(R.id.rbTetheringOn);
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.jens.automation2;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
@@ -36,12 +37,22 @@ public class ActivityManageTriggerTimeFrame extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
|
||||
/*
|
||||
A modern theme is required for this activity. Classic theme can cause crashes with the TimePicker.
|
||||
The value configured in settings is ignored.
|
||||
*/
|
||||
this.setTheme(R.style.AppThemeCompat);
|
||||
|
||||
setContentView(R.layout.activity_manage_trigger_timeframe);
|
||||
|
||||
if(Build.VERSION.SDK_INT == 34)
|
||||
Miscellaneous.messageBox(getResources().getString(R.string.info), getResources().getString(R.string.Android14TimePickerHint), ActivityManageTriggerTimeFrame.this).show();
|
||||
|
||||
startPicker = (TimePicker)findViewById(R.id.tpTimeFrameStart);
|
||||
stopPicker = (TimePicker)findViewById(R.id.tpTimeFrameStop);
|
||||
startPicker.setIs24HourView(true);
|
||||
stopPicker.setIs24HourView(true);
|
||||
stopPicker.setIs24HourView(true);
|
||||
|
||||
bSaveTimeFrame = (Button)findViewById(R.id.bSaveTimeFrame);
|
||||
checkMonday = (CheckBox)findViewById(R.id.checkMonday);
|
||||
|
||||
@@ -15,7 +15,6 @@ import android.os.Bundle;
|
||||
import android.text.Editable;
|
||||
import android.text.TextWatcher;
|
||||
import android.util.Log;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.View;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ArrayAdapter;
|
||||
@@ -54,6 +53,7 @@ public class ActivityManageTriggerWifi extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
setContentView(R.layout.activity_manage_trigger_wifi);
|
||||
|
||||
rbTriggerWifiConnected = (RadioButton) findViewById(R.id.rbTriggerWifiConnected);
|
||||
@@ -74,7 +74,7 @@ public class ActivityManageTriggerWifi extends Activity
|
||||
if(
|
||||
Miscellaneous.getTargetSDK(Miscellaneous.getAnyContext()) >= 29
|
||||
&&
|
||||
!ActivityPermissions.isPermissionDeclaratedInManifest(Miscellaneous.getAnyContext(), Manifest.permission.ACCESS_BACKGROUND_LOCATION)
|
||||
!ActivityPermissions.isPermissionDeclaredInManifest(Miscellaneous.getAnyContext(), Manifest.permission.ACCESS_BACKGROUND_LOCATION)
|
||||
)
|
||||
tvWifiTriggerNameLocationNotice.setVisibility(View.VISIBLE);
|
||||
|
||||
|
||||
@@ -11,6 +11,8 @@ import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.PermissionInfo;
|
||||
import android.content.pm.ServiceInfo;
|
||||
import android.content.res.Resources;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
@@ -27,8 +29,6 @@ import android.widget.TextView;
|
||||
|
||||
import com.jens.automation2.receivers.NotificationListener;
|
||||
|
||||
import org.w3c.dom.DOMImplementationSource;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
@@ -66,6 +66,7 @@ public class ActivityPermissions extends Activity
|
||||
public final static String permissionNameWireguard = "com.wireguard.android.permission.CONTROL_TUNNELS";
|
||||
public final static String permissionNameGoogleActivityDetection = "com.google.android.gms.permission.ACTIVITY_RECOGNITION";
|
||||
public final static String permissionNameSuperuser = "android.permission.ACCESS_SUPERUSER";
|
||||
public final static String permissionNameProximity = "android.hardware.sensor.proximity";
|
||||
|
||||
public static ActivityPermissions getInstance()
|
||||
{
|
||||
@@ -84,6 +85,7 @@ public class ActivityPermissions extends Activity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
setContentView(R.layout.permissions_activity);
|
||||
|
||||
bCancelPermissions = (Button)findViewById(R.id.bCancelPermissions);
|
||||
@@ -424,6 +426,11 @@ public class ActivityPermissions extends Activity
|
||||
}
|
||||
}
|
||||
|
||||
if(Miscellaneous.getTargetSDK(Miscellaneous.getAnyContext()) >= 34 && !havePermission(Manifest.permission.FOREGROUND_SERVICE_SPECIAL_USE, workingContext))
|
||||
{
|
||||
addToArrayListUnique(Manifest.permission.FOREGROUND_SERVICE_SPECIAL_USE, requiredPermissions);
|
||||
}
|
||||
|
||||
if(!havePermission(Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, workingContext))
|
||||
addToArrayListUnique(Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, requiredPermissions);
|
||||
|
||||
@@ -565,7 +572,10 @@ public class ActivityPermissions extends Activity
|
||||
addToArrayListUnique(Manifest.permission.INTERNET, requiredPermissions);
|
||||
break;
|
||||
case timeFrame:
|
||||
if(Build.VERSION.SDK_INT >= 31 && Miscellaneous.getTargetSDK(Miscellaneous.getAnyContext()) >= 31)
|
||||
if(Build.VERSION.SDK_INT >= 31 && Miscellaneous.getTargetSDK(Miscellaneous.getAnyContext()) >= 31
|
||||
// ||
|
||||
// Build.VERSION.SDK_INT >= 33
|
||||
)
|
||||
addToArrayListUnique(Manifest.permission.SCHEDULE_EXACT_ALARM, requiredPermissions);
|
||||
break;
|
||||
case usb_host_connection:
|
||||
@@ -579,7 +589,7 @@ public class ActivityPermissions extends Activity
|
||||
(
|
||||
Miscellaneous.getTargetSDK(Miscellaneous.getAnyContext()) >= 29
|
||||
&&
|
||||
isPermissionDeclaratedInManifest(Miscellaneous.getAnyContext(), Manifest.permission.ACCESS_BACKGROUND_LOCATION)
|
||||
isPermissionDeclaredInManifest(Miscellaneous.getAnyContext(), Manifest.permission.ACCESS_BACKGROUND_LOCATION)
|
||||
)
|
||||
||
|
||||
Build.VERSION.SDK_INT >= 33
|
||||
@@ -594,6 +604,10 @@ public class ActivityPermissions extends Activity
|
||||
if(Build.VERSION.SDK_INT >= 31 && Miscellaneous.getTargetSDK(Miscellaneous.getAnyContext()) >= 31)
|
||||
addToArrayListUnique(Manifest.permission.SCHEDULE_EXACT_ALARM, requiredPermissions);
|
||||
break;
|
||||
// Proximity permission cannot be requested, but is always granted.
|
||||
case proximity:
|
||||
// addToArrayListUnique(ActivityPermissions.permissionNameProximity, requiredPermissions);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -611,12 +625,6 @@ public class ActivityPermissions extends Activity
|
||||
if(targetProfile.changeIncomingCallsRingtone || targetProfile.changeNotificationRingtone)
|
||||
addToArrayListUnique(Manifest.permission.READ_EXTERNAL_STORAGE, requiredPermissions);
|
||||
break;
|
||||
case disableScreenRotation:
|
||||
addToArrayListUnique(Manifest.permission.WRITE_SETTINGS, requiredPermissions);
|
||||
break;
|
||||
case enableScreenRotation:
|
||||
addToArrayListUnique(Manifest.permission.WRITE_SETTINGS, requiredPermissions);
|
||||
break;
|
||||
case playMusic:
|
||||
break;
|
||||
case controlMediaPlayback:
|
||||
@@ -703,7 +711,7 @@ public class ActivityPermissions extends Activity
|
||||
// addToArrayListUnique("net.kollnig.missioncontrol.permission.ADMIN", requiredPermissions);
|
||||
if(Build.VERSION.SDK_INT >= 29)
|
||||
{
|
||||
String parts[];
|
||||
String[] parts;
|
||||
if(action.getParameter2().contains(Action.actionParameter2Split))
|
||||
parts = action.getParameter2().split(Action.actionParameter2Split);
|
||||
else
|
||||
@@ -711,7 +719,15 @@ public class ActivityPermissions extends Activity
|
||||
|
||||
// Permission only required for starts of activity, not broadcasts or services
|
||||
|
||||
if(parts[2].equals(ActivityManageActionStartActivity.startByActivityString))
|
||||
if(
|
||||
(
|
||||
parts.length >= 4
|
||||
&&
|
||||
parts[3].equals(ActivityManageActionStartActivity.startByActivityString)
|
||||
)
|
||||
||
|
||||
parts[2].equals(ActivityManageActionStartActivity.startByActivityString)
|
||||
)
|
||||
addToArrayListUnique(Manifest.permission.SYSTEM_ALERT_WINDOW, requiredPermissions);
|
||||
}
|
||||
break;
|
||||
@@ -719,40 +735,12 @@ public class ActivityPermissions extends Activity
|
||||
addToArrayListUnique(Manifest.permission.INTERNET, requiredPermissions);
|
||||
getPermissionsForVariablesInUse(action.getParameter2(), requiredPermissions);
|
||||
break;
|
||||
case turnBluetoothOff:
|
||||
addToArrayListUnique(Manifest.permission.BLUETOOTH_ADMIN, requiredPermissions);
|
||||
addToArrayListUnique(Manifest.permission.WRITE_SETTINGS, requiredPermissions);
|
||||
addToArrayListUnique(Manifest.permission.BLUETOOTH, requiredPermissions);
|
||||
addToArrayListUnique(Manifest.permission.ACCESS_NETWORK_STATE, requiredPermissions);
|
||||
break;
|
||||
case turnBluetoothOn:
|
||||
addToArrayListUnique(Manifest.permission.BLUETOOTH_ADMIN, requiredPermissions);
|
||||
addToArrayListUnique(Manifest.permission.WRITE_SETTINGS, requiredPermissions);
|
||||
addToArrayListUnique(Manifest.permission.BLUETOOTH, requiredPermissions);
|
||||
addToArrayListUnique(Manifest.permission.ACCESS_NETWORK_STATE, requiredPermissions);
|
||||
break;
|
||||
case turnUsbTetheringOff:
|
||||
addToArrayListUnique(Manifest.permission.WRITE_SETTINGS, requiredPermissions);
|
||||
break;
|
||||
case turnUsbTetheringOn:
|
||||
addToArrayListUnique(Manifest.permission.WRITE_SETTINGS, requiredPermissions);
|
||||
break;
|
||||
case turnWifiOff:
|
||||
addToArrayListUnique(Manifest.permission.WRITE_SETTINGS, requiredPermissions);
|
||||
addToArrayListUnique(Manifest.permission.ACCESS_NETWORK_STATE, requiredPermissions);
|
||||
break;
|
||||
case turnWifiOn:
|
||||
addToArrayListUnique(Manifest.permission.WRITE_SETTINGS, requiredPermissions);
|
||||
addToArrayListUnique(Manifest.permission.ACCESS_NETWORK_STATE, requiredPermissions);
|
||||
break;
|
||||
case turnWifiTetheringOff:
|
||||
addToArrayListUnique(Manifest.permission.WRITE_SETTINGS, requiredPermissions);
|
||||
addToArrayListUnique(Manifest.permission.ACCESS_NETWORK_STATE, requiredPermissions);
|
||||
break;
|
||||
case turnWifiTetheringOn:
|
||||
addToArrayListUnique(Manifest.permission.WRITE_SETTINGS, requiredPermissions);
|
||||
addToArrayListUnique(Manifest.permission.ACCESS_NETWORK_STATE, requiredPermissions);
|
||||
break;
|
||||
case waitBeforeNextAction:
|
||||
break;
|
||||
case playSound:
|
||||
@@ -780,6 +768,9 @@ public class ActivityPermissions extends Activity
|
||||
case setLocationService:
|
||||
addToArrayListUnique(Manifest.permission.WRITE_SECURE_SETTINGS, requiredPermissions);
|
||||
break;
|
||||
case setScreenBrightness:
|
||||
addToArrayListUnique(Manifest.permission.WRITE_SETTINGS, requiredPermissions);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -898,18 +889,6 @@ public class ActivityPermissions extends Activity
|
||||
usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName));
|
||||
for(String ruleName : getRulesUsing(Action.Action_Enum.setWifiTethering))
|
||||
usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName));
|
||||
for(String ruleName : getRulesUsing(Action.Action_Enum.turnBluetoothOff))
|
||||
usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName));
|
||||
for(String ruleName : getRulesUsing(Action.Action_Enum.turnBluetoothOn))
|
||||
usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName));
|
||||
for(String ruleName : getRulesUsing(Action.Action_Enum.turnWifiOff))
|
||||
usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName));
|
||||
for(String ruleName : getRulesUsing(Action.Action_Enum.turnWifiOn))
|
||||
usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName));
|
||||
for(String ruleName : getRulesUsing(Action.Action_Enum.turnWifiTetheringOff))
|
||||
usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName));
|
||||
for(String ruleName : getRulesUsing(Action.Action_Enum.turnWifiTetheringOn))
|
||||
usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName));
|
||||
break;
|
||||
case Manifest.permission.ACCESS_WIFI_STATE:
|
||||
for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.pointOfInterest))
|
||||
@@ -922,20 +901,12 @@ public class ActivityPermissions extends Activity
|
||||
usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName));
|
||||
for(String ruleName : getRulesUsing(Action.Action_Enum.setBluetooth))
|
||||
usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName));
|
||||
for(String ruleName : getRulesUsing(Action.Action_Enum.turnBluetoothOff))
|
||||
usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName));
|
||||
for(String ruleName : getRulesUsing(Action.Action_Enum.turnBluetoothOn))
|
||||
usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName));
|
||||
break;
|
||||
case Manifest.permission.BLUETOOTH:
|
||||
for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.bluetoothConnection))
|
||||
usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName));
|
||||
for(String ruleName : getRulesUsing(Action.Action_Enum.setBluetooth))
|
||||
usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName));
|
||||
for(String ruleName : getRulesUsing(Action.Action_Enum.turnBluetoothOff))
|
||||
usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName));
|
||||
for(String ruleName : getRulesUsing(Action.Action_Enum.turnBluetoothOn))
|
||||
usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName));
|
||||
break;
|
||||
case Manifest.permission.GET_TASKS:
|
||||
for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.process_started_stopped))
|
||||
@@ -1047,6 +1018,11 @@ public class ActivityPermissions extends Activity
|
||||
for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.calendarEvent))
|
||||
usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName));
|
||||
break;
|
||||
// Proximity permission cannot be requested, but is always granted.
|
||||
// case ActivityPermissions.permissionNameProximity:
|
||||
// for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.proximity))
|
||||
// usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName));
|
||||
// break;
|
||||
}
|
||||
|
||||
return usingElements;
|
||||
@@ -1127,16 +1103,16 @@ public class ActivityPermissions extends Activity
|
||||
ArrayList<String> permissionList = new ArrayList<String>();
|
||||
for(String permission : permissionNames)
|
||||
{
|
||||
if(permissionNames.equals(Manifest.permission.PROCESS_OUTGOING_CALLS))
|
||||
if(permission.equals(Manifest.permission.PROCESS_OUTGOING_CALLS))
|
||||
{
|
||||
if(ActivityPermissions.isPermissionDeclaratedInManifest(Miscellaneous.getAnyContext(), Manifest.permission.PROCESS_OUTGOING_CALLS) && !Miscellaneous.isGooglePlayInstalled(Miscellaneous.getAnyContext()))
|
||||
if(ActivityPermissions.isPermissionDeclaredInManifest(Miscellaneous.getAnyContext(), Manifest.permission.PROCESS_OUTGOING_CALLS) && !Miscellaneous.isGooglePlayInstalled(Miscellaneous.getAnyContext()))
|
||||
{
|
||||
permissionList.add(permission);
|
||||
}
|
||||
}
|
||||
else if(permissionNames.equals(Manifest.permission.SEND_SMS))
|
||||
else if(permission.equals(Manifest.permission.SEND_SMS))
|
||||
{
|
||||
if(ActivityPermissions.isPermissionDeclaratedInManifest(Miscellaneous.getAnyContext(), Manifest.permission.SEND_SMS) && !Miscellaneous.isGooglePlayInstalled(Miscellaneous.getAnyContext()))
|
||||
if(ActivityPermissions.isPermissionDeclaredInManifest(Miscellaneous.getAnyContext(), Manifest.permission.SEND_SMS) && !Miscellaneous.isGooglePlayInstalled(Miscellaneous.getAnyContext()))
|
||||
{
|
||||
permissionList.add(permission);
|
||||
}
|
||||
@@ -1305,7 +1281,7 @@ public class ActivityPermissions extends Activity
|
||||
{
|
||||
if(requiredPermissions.contains(Manifest.permission.PROCESS_OUTGOING_CALLS))
|
||||
{
|
||||
if(!ActivityPermissions.isPermissionDeclaratedInManifest(Miscellaneous.getAnyContext(), Manifest.permission.SEND_SMS)
|
||||
if(!ActivityPermissions.isPermissionDeclaredInManifest(Miscellaneous.getAnyContext(), Manifest.permission.SEND_SMS)
|
||||
&&
|
||||
Miscellaneous.isGooglePlayInstalled(Miscellaneous.getAnyContext())
|
||||
)
|
||||
@@ -1316,7 +1292,7 @@ public class ActivityPermissions extends Activity
|
||||
}
|
||||
if(requiredPermissions.contains(Manifest.permission.SEND_SMS))
|
||||
{
|
||||
if(!ActivityPermissions.isPermissionDeclaratedInManifest(Miscellaneous.getAnyContext(), Manifest.permission.SEND_SMS)
|
||||
if(!ActivityPermissions.isPermissionDeclaredInManifest(Miscellaneous.getAnyContext(), Manifest.permission.SEND_SMS)
|
||||
)
|
||||
{
|
||||
requiredPermissions.remove(Manifest.permission.SEND_SMS);
|
||||
@@ -1686,12 +1662,53 @@ public class ActivityPermissions extends Activity
|
||||
mapActionPermissions.put("wakeupDevice", Manifest.permission.WAKE_LOCK);
|
||||
}
|
||||
|
||||
public static boolean isPermissionDeclaratedInManifest(Context context, String permission)
|
||||
public static boolean isServiceAvailable(Context context, String serviceName)
|
||||
{
|
||||
/*int flags = PackageManager.GET_ACTIVITIES
|
||||
| PackageManager.GET_CONFIGURATIONS
|
||||
| PackageManager.GET_DISABLED_COMPONENTS
|
||||
| PackageManager.GET_GIDS | PackageManager.GET_INSTRUMENTATION
|
||||
| PackageManager.GET_INTENT_FILTERS
|
||||
| PackageManager.GET_PERMISSIONS | PackageManager.GET_PROVIDERS
|
||||
| PackageManager.GET_RECEIVERS | PackageManager.GET_SERVICES
|
||||
| PackageManager.GET_SIGNATURES;
|
||||
PackageManager packageManager = getPackageManager();
|
||||
List<PackageInfo> installedPackages = packageManager.getInstalledPackages(flags);
|
||||
for (PackageInfo packageInfo : installedPackages)
|
||||
{
|
||||
ServiceInfo[] services = packageInfo.services;
|
||||
PermissionInfo[] permissions = packageInfo.permissions;
|
||||
}*/
|
||||
|
||||
StringBuffer buffer = new StringBuffer();
|
||||
try
|
||||
{
|
||||
PackageManager packageManager = context.getPackageManager();
|
||||
PackageInfo packageInfo = packageManager.getPackageInfo("com.jens.automation2", PackageManager.GET_SERVICES);
|
||||
ServiceInfo[] services = packageInfo.services;
|
||||
for (ServiceInfo serviceInfo : services)
|
||||
{
|
||||
if(serviceInfo.name.endsWith(serviceName))
|
||||
return true;
|
||||
}
|
||||
PermissionInfo[] permissions = packageInfo.permissions;
|
||||
}
|
||||
catch (PackageManager.NameNotFoundException e)
|
||||
{
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean isPermissionDeclaredInManifest(Context context, String permission)
|
||||
{
|
||||
PackageManager pm = context.getPackageManager();
|
||||
try
|
||||
{
|
||||
PackageInfo packageInfo = pm.getPackageInfo(context.getPackageName(), PackageManager.GET_PERMISSIONS);
|
||||
|
||||
String[] requestedPermissions = null;
|
||||
if (packageInfo != null)
|
||||
{
|
||||
|
||||
@@ -17,6 +17,13 @@ public class ActivitySettings extends PreferenceActivity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
|
||||
// Dark Theme doesn't work in PreferenceActivity, so only a bright theme is readable
|
||||
|
||||
if(Settings.uiTheme != 0)
|
||||
this.setTheme(R.style.AppThemeCompatLight);
|
||||
// Miscellaneous.setUiTheme(this);
|
||||
|
||||
addPreferencesFromResource(layout.activity_settings);
|
||||
|
||||
if(BuildConfig.FLAVOR.equals(AutomationService.flavor_name_apk))
|
||||
|
||||
@@ -31,6 +31,7 @@ public class ActivityVolumeTest extends Activity
|
||||
|
||||
super.onCreate(savedInstanceState);
|
||||
Miscellaneous.setDisplayLanguage(this);
|
||||
Miscellaneous.setUiTheme(this);
|
||||
setContentView(R.layout.activity_volume_calibration);
|
||||
|
||||
tvCurrentVolume = (TextView)findViewById(R.id.tvCurrentVolume);
|
||||
|
||||
@@ -12,6 +12,7 @@ import android.app.PendingIntent;
|
||||
import android.app.Service;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.ServiceInfo;
|
||||
import android.media.AudioManager;
|
||||
import android.os.Binder;
|
||||
import android.os.Build;
|
||||
@@ -156,6 +157,15 @@ public class AutomationService extends Service implements OnInitListener
|
||||
ActivityPermissions.requestSpecificPermission(Manifest.permission.FOREGROUND_SERVICE);
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(Miscellaneous.getTargetSDK(Miscellaneous.getAnyContext()) >= 34 && !ActivityPermissions.havePermission(Manifest.permission.FOREGROUND_SERVICE_SPECIAL_USE, context))
|
||||
{
|
||||
Toast.makeText(context, context.getResources().getString(R.string.permissionForegroundServiceTypeSpecialUseRequired), Toast.LENGTH_LONG).show();
|
||||
Miscellaneous.logEvent("e", "Permission", "Don't have permission FOREGROUND_SERVICE_SPECIAL_USE. Will request it now.", 4);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (
|
||||
@@ -243,7 +253,7 @@ public class AutomationService extends Service implements OnInitListener
|
||||
|
||||
updateNotification();
|
||||
|
||||
if (isMainActivityRunning(this))
|
||||
if(isMainActivityRunning(this))
|
||||
ActivityMainScreen.updateMainScreen();
|
||||
|
||||
this.isRunning = true;
|
||||
@@ -322,7 +332,7 @@ public class AutomationService extends Service implements OnInitListener
|
||||
|
||||
DateTimeListener.setOrResetAlarms();
|
||||
|
||||
if(Rule.isAnyRuleUsing(Trigger.Trigger_Enum.calendarEvent) && ActivityPermissions.isPermissionDeclaratedInManifest(AutomationService.getInstance(), Manifest.permission.READ_CALENDAR) && ActivityPermissions.havePermission(Manifest.permission.READ_CALENDAR, AutomationService.getInstance()))
|
||||
if(Rule.isAnyRuleUsing(Trigger.Trigger_Enum.calendarEvent) && ActivityPermissions.isPermissionDeclaredInManifest(AutomationService.getInstance(), Manifest.permission.READ_CALENDAR) && ActivityPermissions.havePermission(Manifest.permission.READ_CALENDAR, AutomationService.getInstance()))
|
||||
CalendarReceiver.armOrRearmTimer();
|
||||
}
|
||||
|
||||
@@ -392,6 +402,20 @@ public class AutomationService extends Service implements OnInitListener
|
||||
r.activate(AutomationService.this, false);
|
||||
}
|
||||
|
||||
if(!Settings.hasBeenDone(Settings.constVersion143StartOtherProgramConfigEditHint))
|
||||
{
|
||||
if(Rule.isAnyRuleUsing(Action.Action_Enum.startOtherActivity))
|
||||
{
|
||||
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1)
|
||||
Miscellaneous.createDismissibleNotificationWithDelay(1010, null, getResources().getString(R.string.version143StartOtherActivityHint), 9123, AutomationService.NOTIFICATION_CHANNEL_ID_SERVICE, null);
|
||||
else
|
||||
Miscellaneous.createDismissibleNotification(null, getResources().getString(R.string.version143StartOtherActivityHint), 9123, false, AutomationService.NOTIFICATION_CHANNEL_ID_SERVICE, null);
|
||||
}
|
||||
|
||||
Settings.considerDone(Settings.constVersion143StartOtherProgramConfigEditHint);
|
||||
Settings.writeSettings(Miscellaneous.getAnyContext());
|
||||
}
|
||||
|
||||
Settings.serviceStartDone = true;
|
||||
Settings.deviceStartDone = true;
|
||||
}
|
||||
@@ -495,6 +519,7 @@ public class AutomationService extends Service implements OnInitListener
|
||||
{
|
||||
Intent myServiceIntent = new Intent(context, AutomationService.class);
|
||||
myServiceIntent.putExtra("startAtBoot", startAtBoot);
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
|
||||
context.startForegroundService(myServiceIntent);
|
||||
else
|
||||
@@ -529,42 +554,6 @@ public class AutomationService extends Service implements OnInitListener
|
||||
centralInstance = null;
|
||||
Settings.serviceStartDone = false;
|
||||
}
|
||||
|
||||
protected static Builder createDefaultNotificationBuilderOld()
|
||||
{
|
||||
Builder builder = new Builder(AutomationService.getInstance());
|
||||
builder.setContentTitle("Automation");
|
||||
|
||||
if(Settings.showIconWhenServiceIsRunning)
|
||||
{
|
||||
if(BuildConfig.FLAVOR.equalsIgnoreCase(AutomationService.flavor_name_googleplay))
|
||||
builder.setSmallIcon(R.drawable.crane);
|
||||
else
|
||||
builder.setSmallIcon(R.drawable.ic_launcher);
|
||||
}
|
||||
|
||||
builder.setCategory(Notification.CATEGORY_SERVICE);
|
||||
builder.setWhen(System.currentTimeMillis());
|
||||
builder.setContentIntent(myPendingIntent);
|
||||
|
||||
Notification defaultNotification = builder.build();
|
||||
|
||||
defaultNotification.icon = R.drawable.crane;
|
||||
defaultNotification.when = System.currentTimeMillis();
|
||||
|
||||
// defaultNotification.defaults |= Notification.DEFAULT_VIBRATE;
|
||||
// defaultNotification.defaults |= Notification.DEFAULT_LIGHTS;
|
||||
|
||||
defaultNotification.flags |= Notification.FLAG_AUTO_CANCEL;
|
||||
// defaultNotification.flags |= Notification.FLAG_SHOW_LIGHTS;
|
||||
defaultNotification.flags |= Notification.FLAG_ONLY_ALERT_ONCE;
|
||||
|
||||
// defaultNotification.ledARGB = Color.YELLOW;
|
||||
// defaultNotification.ledOnMS = 1500;
|
||||
// defaultNotification.ledOffMS = 1500;
|
||||
|
||||
return builder;
|
||||
}
|
||||
|
||||
protected static NotificationCompat.Builder createServiceNotificationBuilder()
|
||||
{
|
||||
@@ -614,6 +603,9 @@ public class AutomationService extends Service implements OnInitListener
|
||||
@SuppressWarnings("deprecation")
|
||||
public static void updateNotification()
|
||||
{
|
||||
if(!Settings.showIconWhenServiceIsRunning && Build.VERSION.SDK_INT < Build.VERSION_CODES.O)
|
||||
return;
|
||||
|
||||
AutomationService instance = getInstance();
|
||||
|
||||
if(instance != null)
|
||||
@@ -679,7 +671,10 @@ public class AutomationService extends Service implements OnInitListener
|
||||
myNotification.flags |= Notification.FLAG_NO_CLEAR;
|
||||
// notificationManager.notify(notificationId, myNotification);
|
||||
|
||||
instance.startForeground(notificationId, myNotification);
|
||||
// if(Miscellaneous.getTargetSDK(Miscellaneous.getAnyContext()) >= 34)
|
||||
// instance.startForeground(notificationId, myNotification, ServiceInfo.FOREGROUND_SERVICE_TYPE_SPECIAL_USE);
|
||||
// else
|
||||
instance.startForeground(notificationId, myNotification);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -96,6 +96,7 @@ import java.security.cert.CertificateException;
|
||||
import java.security.cert.X509Certificate;
|
||||
import java.text.DateFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
@@ -313,15 +314,18 @@ public class Miscellaneous extends Service
|
||||
header = "Automation";
|
||||
}
|
||||
|
||||
if(type.equals("e"))
|
||||
Log.e(header, description);
|
||||
if(Settings.logToConsole)
|
||||
{
|
||||
if (type.equals("e"))
|
||||
Log.e(header, description);
|
||||
|
||||
if (type.equals("w"))
|
||||
Log.w(header, description);
|
||||
|
||||
if (type.equals("i"))
|
||||
Log.i(header, description);
|
||||
}
|
||||
|
||||
if(type.equals("w"))
|
||||
Log.w(header, description);
|
||||
|
||||
if(type.equals("i"))
|
||||
Log.i(header, description);
|
||||
|
||||
if(Settings.writeLogFile && Settings.logLevel >= logLevel)
|
||||
{
|
||||
writeToLogFile(type, header, description);
|
||||
@@ -717,7 +721,9 @@ public class Miscellaneous extends Service
|
||||
source.contains("[H]") ||
|
||||
source.contains("[i]") ||
|
||||
source.contains("[s]") ||
|
||||
source.contains("[ms]")
|
||||
source.contains("[ms]") ||
|
||||
source.contains("[w]") ||
|
||||
source.contains("[F]")
|
||||
)
|
||||
{
|
||||
Calendar cal = Calendar.getInstance();
|
||||
@@ -785,6 +791,24 @@ public class Miscellaneous extends Service
|
||||
{
|
||||
source = source.replace("[ms]", String.valueOf(cal.get(Calendar.MILLISECOND)));
|
||||
}
|
||||
|
||||
if(source.contains("[w]"))
|
||||
{
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("EEEE");
|
||||
Date d = new Date();
|
||||
String dayOfTheWeek = sdf.format(d);
|
||||
// source = source.replace("[w]", LocalDate.now().getDayOfWeek().name());
|
||||
source = source.replace("[w]", dayOfTheWeek);
|
||||
}
|
||||
|
||||
if(source.contains("[F]"))
|
||||
{
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("MMMM");
|
||||
Date d = new Date();
|
||||
String month = sdf.format(d);
|
||||
// source = source.replace("[F]", LocalDate.now().getMonth().name());
|
||||
source = source.replace("[F]", month);
|
||||
}
|
||||
}
|
||||
|
||||
if(source.contains("[notificationTitle]"))
|
||||
@@ -2171,6 +2195,22 @@ public class Miscellaneous extends Service
|
||||
return context.getApplicationContext().getApplicationInfo().targetSdkVersion;
|
||||
}
|
||||
|
||||
public static void setUiTheme(Context context)
|
||||
{
|
||||
switch(Settings.uiTheme)
|
||||
{
|
||||
case 0:
|
||||
context.setTheme(R.style.AppTheme);
|
||||
break;
|
||||
case 1:
|
||||
context.setTheme(R.style.AppThemeCompat);
|
||||
break;
|
||||
default:
|
||||
context.setTheme(R.style.AppTheme);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public static void setDisplayLanguage(Context context)
|
||||
{
|
||||
if(!Settings.displayLanguage.equals(Settings.default_displayLanguage))
|
||||
|
||||
@@ -38,6 +38,9 @@ public class Profile implements Comparable<Profile>
|
||||
protected boolean changeVolumeNotifications;
|
||||
protected int volumeNotifications;
|
||||
|
||||
protected boolean changeVolumeRingtones;
|
||||
protected int volumeRingtones;
|
||||
|
||||
protected boolean changeVolumeAlarms;
|
||||
protected int volumeAlarms;
|
||||
|
||||
@@ -145,6 +148,26 @@ public class Profile implements Comparable<Profile>
|
||||
return volumeNotifications;
|
||||
}
|
||||
|
||||
public boolean getChangeVolumeRingtones()
|
||||
{
|
||||
return changeVolumeRingtones;
|
||||
}
|
||||
|
||||
public void setChangeVolumeRingtones(boolean changeVolumeRingtones)
|
||||
{
|
||||
this.changeVolumeRingtones = changeVolumeRingtones;
|
||||
}
|
||||
|
||||
public int getVolumeRingtones()
|
||||
{
|
||||
return volumeRingtones;
|
||||
}
|
||||
|
||||
public void setVolumeRingtones(int volumeRingtones)
|
||||
{
|
||||
this.volumeRingtones = volumeRingtones;
|
||||
}
|
||||
|
||||
public void setChangeVolumeAlarms(boolean changeVolumeAlarms)
|
||||
{
|
||||
this.changeVolumeAlarms = changeVolumeAlarms;
|
||||
@@ -520,7 +543,7 @@ public class Profile implements Comparable<Profile>
|
||||
{
|
||||
AudioManager am = (AudioManager) Miscellaneous.getAnyContext().getSystemService(Context.AUDIO_SERVICE);
|
||||
|
||||
if(changeSoundMode)
|
||||
if(changeSoundMode)
|
||||
Actions.setSound(context, soundMode);
|
||||
|
||||
if(changeDndMode)
|
||||
@@ -531,7 +554,13 @@ public class Profile implements Comparable<Profile>
|
||||
|
||||
if(changeVolumeNotifications)
|
||||
am.setStreamVolume(AudioManager.STREAM_NOTIFICATION, volumeNotifications, AudioManager.FLAG_PLAY_SOUND);
|
||||
|
||||
|
||||
if(Build.VERSION.SDK_INT >= 34)
|
||||
{
|
||||
if (changeVolumeRingtones)
|
||||
am.setStreamVolume(AudioManager.STREAM_RING, volumeRingtones, AudioManager.FLAG_PLAY_SOUND);
|
||||
}
|
||||
|
||||
if(changeVolumeAlarms)
|
||||
am.setStreamVolume(AudioManager.STREAM_ALARM, volumeAlarms, AudioManager.FLAG_PLAY_SOUND);
|
||||
|
||||
@@ -637,6 +666,15 @@ public class Profile implements Comparable<Profile>
|
||||
return false;
|
||||
}
|
||||
|
||||
if(Build.VERSION.SDK_INT >= 34)
|
||||
{
|
||||
if (changeVolumeRingtones)
|
||||
{
|
||||
if (am.getStreamVolume(AudioManager.STREAM_RING) != volumeRingtones)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (changeVolumeAlarms)
|
||||
{
|
||||
if (am.getStreamVolume(AudioManager.STREAM_ALARM) != volumeAlarms)
|
||||
|
||||
@@ -19,6 +19,7 @@ import com.jens.automation2.receivers.MediaPlayerListener;
|
||||
import com.jens.automation2.receivers.NoiseListener;
|
||||
import com.jens.automation2.receivers.PhoneStatusListener;
|
||||
import com.jens.automation2.receivers.ProcessListener;
|
||||
import com.jens.automation2.receivers.ProximityReceiver;
|
||||
import com.jens.automation2.receivers.ScreenStateReceiver;
|
||||
import com.jens.automation2.receivers.SubSystemStateReceiver;
|
||||
import com.jens.automation2.receivers.TetheringReceiver;
|
||||
@@ -213,8 +214,11 @@ public class ReceiverCoordinator
|
||||
if(Rule.isAnyRuleUsing(Trigger.Trigger_Enum.screenState))
|
||||
ScreenStateReceiver.startScreenStateReceiver(AutomationService.getInstance());
|
||||
|
||||
if(Rule.isAnyRuleUsing(Trigger.Trigger_Enum.calendarEvent) && ActivityPermissions.isPermissionDeclaratedInManifest(AutomationService.getInstance(), Manifest.permission.READ_CALENDAR) && ActivityPermissions.havePermission(Manifest.permission.READ_CALENDAR, AutomationService.getInstance()))
|
||||
if(Rule.isAnyRuleUsing(Trigger.Trigger_Enum.calendarEvent) && ActivityPermissions.isPermissionDeclaredInManifest(AutomationService.getInstance(), Manifest.permission.READ_CALENDAR) && ActivityPermissions.havePermission(Manifest.permission.READ_CALENDAR, AutomationService.getInstance()))
|
||||
CalendarReceiver.startCalendarReceiver(AutomationService.getInstance());
|
||||
|
||||
if(Rule.isAnyRuleUsing(Trigger.Trigger_Enum.proximity))
|
||||
ProximityReceiver.startProximityReceiver(AutomationService.getInstance());
|
||||
}
|
||||
|
||||
public static void stopAllReceivers()
|
||||
@@ -234,6 +238,7 @@ public class ReceiverCoordinator
|
||||
DeviceOrientationListener.getInstance().stopListener(AutomationService.getInstance());
|
||||
TetheringReceiver.getInstance().stopListener(AutomationService.getInstance());
|
||||
SubSystemStateReceiver.getInstance().stopListener(AutomationService.getInstance());
|
||||
ProximityReceiver.stopProximityReceiver();
|
||||
|
||||
try
|
||||
{
|
||||
@@ -470,7 +475,7 @@ public class ReceiverCoordinator
|
||||
}
|
||||
}
|
||||
|
||||
if(Rule.isAnyRuleUsing(Trigger.Trigger_Enum.calendarEvent) && ActivityPermissions.isPermissionDeclaratedInManifest(AutomationService.getInstance(), Manifest.permission.READ_CALENDAR) && ActivityPermissions.havePermission(Manifest.permission.READ_CALENDAR, AutomationService.getInstance()))
|
||||
if(Rule.isAnyRuleUsing(Trigger.Trigger_Enum.calendarEvent) && ActivityPermissions.isPermissionDeclaredInManifest(AutomationService.getInstance(), Manifest.permission.READ_CALENDAR) && ActivityPermissions.havePermission(Manifest.permission.READ_CALENDAR, AutomationService.getInstance()))
|
||||
{
|
||||
if(!CalendarReceiver.getInstance().isListenerRunning())
|
||||
CalendarReceiver.getInstance().startListener(AutomationService.getInstance());
|
||||
|
||||
@@ -19,8 +19,9 @@ public class Settings implements SharedPreferences
|
||||
public static final String folderName = "Automation";
|
||||
public static final String zipFileName = "automation.zip";
|
||||
|
||||
public static final String constNewsOptInDone ="newsOptInDone";
|
||||
public static final String constNotificationChannelCleanupApk118 ="notificationChannelCleanupApk118";
|
||||
public static final String constNewsOptInDone = "newsOptInDone";
|
||||
public static final String constNotificationChannelCleanupApk118 = "notificationChannelCleanupApk118";
|
||||
public static final String constVersion143StartOtherProgramConfigEditHint = "constVersion143StartOtherProgramConfigEditHint";
|
||||
|
||||
public static long minimumDistanceChangeForGpsUpdate;
|
||||
public static long minimumDistanceChangeForNetworkUpdate;
|
||||
@@ -29,6 +30,7 @@ public class Settings implements SharedPreferences
|
||||
public static int gpsTimeout;
|
||||
public static long minimumTimeBetweenUpdate;
|
||||
public static boolean startServiceAtSystemBoot;
|
||||
public static boolean logToConsole;
|
||||
public static boolean writeLogFile;
|
||||
public static long logLevel;
|
||||
public static int logFileMaxSize;
|
||||
@@ -61,6 +63,7 @@ public class Settings implements SharedPreferences
|
||||
public static int activityDetectionFrequency;
|
||||
public static int activityDetectionRequiredProbability;
|
||||
public static boolean privacyLocationing;
|
||||
public static int uiTheme;
|
||||
public static int startScreen;
|
||||
public static int tabsPlacement;
|
||||
public static boolean executeRulesAndProfilesWithSingleClick;
|
||||
@@ -97,6 +100,7 @@ public class Settings implements SharedPreferences
|
||||
public static final int default_gpsTimeout = 300; // seconds
|
||||
public static final long default_minimumTimeBetweenUpdate = 30000; // in Milliseconds
|
||||
public static final boolean default_startServiceAtSystemBoot = false;
|
||||
public static final boolean default_logToConsole = false;
|
||||
public static final boolean default_writeLogFile = false;
|
||||
public static final long default_logLevel = 2;
|
||||
public static final int default_logFileMaxSize = 10;
|
||||
@@ -128,6 +132,7 @@ public class Settings implements SharedPreferences
|
||||
public static final int default_activityDetectionFrequency = 60;
|
||||
public static final int default_activityDetectionRequiredProbability = 75;
|
||||
public static final boolean default_privacyLocationing = false;
|
||||
public static final int default_uiTheme = 0;
|
||||
public static final int default_startScreen = 0;
|
||||
public static final int default_tabsPlacement = 0;
|
||||
public static final boolean default_executeRulesAndProfilesWithSingleClick = false;
|
||||
@@ -198,6 +203,7 @@ public class Settings implements SharedPreferences
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
|
||||
startServiceAtSystemBoot = prefs.getBoolean("startServiceAtSystemBoot", default_startServiceAtSystemBoot);
|
||||
logToConsole = prefs.getBoolean("logToConsole", default_logToConsole);
|
||||
writeLogFile = prefs.getBoolean("writeLogFile", default_writeLogFile);
|
||||
|
||||
boolean useTextToSpeech = false;
|
||||
@@ -260,6 +266,7 @@ public class Settings implements SharedPreferences
|
||||
activityDetectionRequiredProbability = Integer.parseInt(prefs.getString("activityDetectionRequiredProbability", String.valueOf(default_activityDetectionRequiredProbability)));
|
||||
|
||||
privacyLocationing = prefs.getBoolean("privacyLocationing", default_privacyLocationing);
|
||||
uiTheme = Integer.parseInt(prefs.getString("uiTheme", String.valueOf(default_uiTheme)));
|
||||
startScreen = Integer.parseInt(prefs.getString("startScreen", String.valueOf(default_startScreen)));
|
||||
tabsPlacement = Integer.parseInt(prefs.getString("tabsPlacement", String.valueOf(default_tabsPlacement)));
|
||||
|
||||
@@ -338,6 +345,9 @@ public class Settings implements SharedPreferences
|
||||
|
||||
if(!prefs.contains("startServiceAtSystemBoot") || force)
|
||||
editor.putBoolean("startServiceAtSystemBoot", default_startServiceAtSystemBoot);
|
||||
|
||||
if(!prefs.contains("logToConsole") || force)
|
||||
editor.putBoolean("logToConsole", default_logToConsole);
|
||||
|
||||
if(!prefs.contains("writeLogFile") || force)
|
||||
editor.putBoolean("writeLogFile", default_writeLogFile);
|
||||
@@ -453,6 +463,9 @@ public class Settings implements SharedPreferences
|
||||
if(!prefs.contains("privacyLocationing") || force)
|
||||
editor.putBoolean("privacyLocationing", default_privacyLocationing);
|
||||
|
||||
if(!prefs.contains("uiTheme") || force)
|
||||
editor.putString("uiTheme", String.valueOf(default_uiTheme));
|
||||
|
||||
if(!prefs.contains("startScreen") || force)
|
||||
editor.putString("startScreen", String.valueOf(default_startScreen));
|
||||
|
||||
@@ -514,6 +527,7 @@ public class Settings implements SharedPreferences
|
||||
Editor editor = prefs.edit();
|
||||
|
||||
editor.putBoolean("startServiceAtSystemBoot", startServiceAtSystemBoot);
|
||||
editor.putBoolean("logToConsole", logToConsole);
|
||||
editor.putBoolean("writeLogFile", writeLogFile);
|
||||
// editor.putBoolean("useTextToSpeech", useTextToSpeech);
|
||||
editor.putBoolean("useTextToSpeechOnNormal", useTextToSpeechOnNormal);
|
||||
@@ -552,6 +566,7 @@ public class Settings implements SharedPreferences
|
||||
editor.putString("activityDetectionFrequency", String.valueOf(activityDetectionFrequency));
|
||||
editor.putString("activityDetectionRequiredProbability", String.valueOf(activityDetectionRequiredProbability));
|
||||
editor.putBoolean("privacyLocationing", privacyLocationing);
|
||||
editor.putString("uiTheme", String.valueOf(uiTheme));
|
||||
editor.putString("startScreen", String.valueOf(startScreen));
|
||||
editor.putString("tabsPlacement", String.valueOf(tabsPlacement));
|
||||
editor.putBoolean("executeRulesAndProfilesWithSingleClick", executeRulesAndProfilesWithSingleClick);
|
||||
|
||||
@@ -26,6 +26,7 @@ import com.jens.automation2.receivers.NoiseListener;
|
||||
import com.jens.automation2.receivers.NotificationListener;
|
||||
import com.jens.automation2.receivers.PhoneStatusListener;
|
||||
import com.jens.automation2.receivers.ProcessListener;
|
||||
import com.jens.automation2.receivers.ProximityReceiver;
|
||||
import com.jens.automation2.receivers.ScreenStateReceiver;
|
||||
import com.jens.automation2.receivers.TetheringReceiver;
|
||||
|
||||
@@ -67,6 +68,7 @@ public class Trigger
|
||||
tethering,
|
||||
subSystemState,
|
||||
checkVariable,
|
||||
proximity,
|
||||
calendarEvent,
|
||||
phoneCall; //phoneCall always needs to be at the very end because of Google's shitty so called privacy
|
||||
|
||||
@@ -128,6 +130,8 @@ public class Trigger
|
||||
return context.getResources().getString(R.string.subSystemState);
|
||||
case checkVariable:
|
||||
return context.getResources().getString(R.string.checkVariable);
|
||||
case proximity:
|
||||
return context.getResources().getString(R.string.proximity);
|
||||
case calendarEvent:
|
||||
return context.getResources().getString(R.string.calendarEventCapital);
|
||||
default:
|
||||
@@ -291,6 +295,10 @@ public class Trigger
|
||||
if(!checkCalendarEvent(false))
|
||||
result = false;
|
||||
break;
|
||||
case proximity:
|
||||
if(!checkProximity())
|
||||
result = false;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -592,16 +600,42 @@ public class Trigger
|
||||
|
||||
boolean checkHeadsetPlugged()
|
||||
{
|
||||
if(HeadphoneJackListener.isHeadsetConnected() != this.getTriggerParameter())
|
||||
return false;
|
||||
else
|
||||
if(this.getHeadphoneType() != 2 && this.getHeadphoneType() != HeadphoneJackListener.getHeadphoneType())
|
||||
/*
|
||||
Wenn verbunden:
|
||||
- either -> true
|
||||
- headphone -> true
|
||||
- mikro -> wenn tatsächlich mikro
|
||||
|
||||
Wenn nicht verbunden:
|
||||
- either -> true
|
||||
- headphone -> true
|
||||
- mikro -> true
|
||||
*/
|
||||
|
||||
if(HeadphoneJackListener.isHeadsetConnected()) // connection detected
|
||||
{
|
||||
Miscellaneous.logEvent("i", Miscellaneous.getAnyContext().getResources().getString(R.string.ruleCheckOf), String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.ruleDoesntApplyWrongHeadphoneType), this.getParentRule().getName()), 3);
|
||||
return false;
|
||||
if(this.getTriggerParameter()) // connection demanded
|
||||
{
|
||||
if (this.getHeadphoneType() == 1)
|
||||
{
|
||||
if (this.getHeadphoneType() == HeadphoneJackListener.getHeadphoneType()) // Microphone demanded
|
||||
return true;
|
||||
else
|
||||
Miscellaneous.logEvent("i", Miscellaneous.getAnyContext().getResources().getString(R.string.ruleCheckOf), String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.ruleDoesntApplyWrongHeadphoneType), this.getParentRule().getName()), 3);
|
||||
}
|
||||
else
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else // disconnection detected
|
||||
{
|
||||
// Type doesn't matter here
|
||||
|
||||
if(!this.getTriggerParameter()) // disconnection demanded
|
||||
return true;
|
||||
}
|
||||
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean checkSubSystemState()
|
||||
@@ -643,8 +677,16 @@ public class Trigger
|
||||
{
|
||||
if (map.containsKey(conditions[0]))
|
||||
{
|
||||
if (map.get(conditions[0]).equals(conditions[1]))
|
||||
return true;
|
||||
if(Miscellaneous.isRegularExpression(conditions[1]))
|
||||
{
|
||||
if (map.get(conditions[0]).matches(conditions[1]))
|
||||
return this.getTriggerParameter();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (map.get(conditions[0]).equals(conditions[1]))
|
||||
return this.getTriggerParameter();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -791,6 +833,27 @@ public class Trigger
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean checkProximity()
|
||||
{
|
||||
try
|
||||
{
|
||||
float currentLevel = ProximityReceiver.getProximityLevel();
|
||||
String[] values = this.getTriggerParameter2().split(Trigger.triggerParameter2Split);
|
||||
float part1 = Float.parseFloat(values[0]);
|
||||
float part2 = Float.parseFloat(values[1]);
|
||||
|
||||
// Are we within the defined scope?
|
||||
if(part1 <= currentLevel && currentLevel <= part2)
|
||||
return true;
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
Miscellaneous.logEvent("e", "checkProximity()", Log.getStackTraceString(e), 1);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean checkBluetooth()
|
||||
{
|
||||
Miscellaneous.logEvent("i", Miscellaneous.getAnyContext().getResources().getString(R.string.ruleCheckOf), String.format("Checking for bluetooth...", this.getParentRule().getName()), 4);
|
||||
@@ -1220,7 +1283,9 @@ public class Trigger
|
||||
int desiredType;
|
||||
String[] typeParams = getTriggerParameter2().split(triggerParameter2Split, -1);
|
||||
desiredType = Integer.parseInt(typeParams[0]);
|
||||
if(desiredType == BatteryReceiver.getCurrentChargingType())
|
||||
if(desiredType == BatteryReceiver.batteryChargingTypeAny)
|
||||
return true;
|
||||
else if(desiredType == BatteryReceiver.getCurrentChargingType())
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -1665,7 +1730,7 @@ public class Trigger
|
||||
try
|
||||
{
|
||||
Class testClass = Class.forName(ActivityManageRule.activityDetectionClassPath);
|
||||
if (ActivityPermissions.isPermissionDeclaratedInManifest(Miscellaneous.getAnyContext(), "com.google.android.gms.permission.ACTIVITY_RECOGNITION"))
|
||||
if (ActivityPermissions.isPermissionDeclaredInManifest(Miscellaneous.getAnyContext(), "com.google.android.gms.permission.ACTIVITY_RECOGNITION"))
|
||||
{
|
||||
// This type doesn't have an activate/deactivate equivalent, at least not yet.
|
||||
returnString.append(Miscellaneous.runMethodReflective(ActivityManageRule.activityDetectionClassPath, "getDescription", new Object[]{getActivityDetectionType()}));
|
||||
@@ -1861,13 +1926,21 @@ public class Trigger
|
||||
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.deactivated));
|
||||
break;
|
||||
case checkVariable:
|
||||
if (triggerParameter2.contains(triggerParameter2Split))
|
||||
if(triggerParameter)
|
||||
{
|
||||
String[] parts = triggerParameter2.split(triggerParameter2Split);
|
||||
returnString.append(String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.variableCheckString), parts[0], parts[1]));
|
||||
if (triggerParameter2.contains(triggerParameter2Split))
|
||||
{
|
||||
String[] parts = triggerParameter2.split(triggerParameter2Split);
|
||||
returnString.append(String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.variableCheckString), parts[0], parts[1]));
|
||||
}
|
||||
else
|
||||
returnString.append(String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.variableCheckStringDeleted), triggerParameter2));
|
||||
}
|
||||
else
|
||||
returnString.append(String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.variableCheckStringDeleted), triggerParameter2));
|
||||
{
|
||||
String[] parts = triggerParameter2.split(triggerParameter2Split);
|
||||
returnString.append(String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.variableCheckStringNot), parts[0], parts[1]));
|
||||
}
|
||||
break;
|
||||
case calendarEvent:
|
||||
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.calendarEvent));
|
||||
@@ -1918,6 +1991,10 @@ public class Trigger
|
||||
returnString.append(")");
|
||||
|
||||
break;
|
||||
case proximity:
|
||||
String[] parts = triggerParameter2.split(triggerParameter2Split);
|
||||
returnString.append(String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.proximityText), parts[0], parts[1]));
|
||||
break;
|
||||
default:
|
||||
returnString.append("error");
|
||||
break;
|
||||
|
||||
@@ -148,6 +148,13 @@ public class XmlFileInterface
|
||||
serializer.startTag(null, "volumeNotifications");
|
||||
serializer.text(String.valueOf(Profile.getProfileCollection().get(i).getVolumeNotifications()));
|
||||
serializer.endTag(null, "volumeNotifications");
|
||||
|
||||
serializer.startTag(null, "changeVolumeRingtones");
|
||||
serializer.text(String.valueOf(Profile.getProfileCollection().get(i).getChangeVolumeRingtones()));
|
||||
serializer.endTag(null, "changeVolumeRingtones");//
|
||||
serializer.startTag(null, "volumeRingtones");
|
||||
serializer.text(String.valueOf(Profile.getProfileCollection().get(i).getVolumeRingtones()));
|
||||
serializer.endTag(null, "volumeRingtones");
|
||||
|
||||
serializer.startTag(null, "changeVolumeAlarms");
|
||||
serializer.text(String.valueOf(Profile.getProfileCollection().get(i).getChangeVolumeAlarms()));
|
||||
@@ -619,8 +626,12 @@ public class XmlFileInterface
|
||||
newProfile.setVolumeMusic(Integer.parseInt(readTag(parser, "volumeMusic")));
|
||||
else if (name.equals("changeVolumeNotifications"))
|
||||
newProfile.setChangeVolumeNotifications(Boolean.parseBoolean(readTag(parser, "changeVolumeNotifications")));
|
||||
else if (name.equals("changeVolumeRingtones"))
|
||||
newProfile.setChangeVolumeRingtones(Boolean.parseBoolean(readTag(parser, "changeVolumeRingtones")));
|
||||
else if (name.equals("volumeNotifications"))
|
||||
newProfile.setVolumeNotifications(Integer.parseInt(readTag(parser, "volumeNotifications")));
|
||||
else if (name.equals("volumeRingtones"))
|
||||
newProfile.setVolumeRingtones(Integer.parseInt(readTag(parser, "volumeRingtones")));
|
||||
else if (name.equals("changeVolumeAlarms"))
|
||||
newProfile.setChangeVolumeAlarms(Boolean.parseBoolean(readTag(parser, "changeVolumeAlarms")));
|
||||
else if (name.equals("volumeAlarms"))
|
||||
@@ -1135,28 +1146,10 @@ public class XmlFileInterface
|
||||
|
||||
// *** deprecated
|
||||
//else
|
||||
if(actionNameString.equals("turnWifiOn"))
|
||||
newAction.setAction(Action_Enum.turnWifiOn);
|
||||
else if(actionNameString.equals("turnWifiOff"))
|
||||
newAction.setAction(Action_Enum.turnWifiOff);
|
||||
else if(actionNameString.equals("turnBluetoothOn"))
|
||||
newAction.setAction(Action_Enum.turnBluetoothOn);
|
||||
else if(actionNameString.equals("turnBluetoothOff"))
|
||||
newAction.setAction(Action_Enum.turnBluetoothOff);
|
||||
else if(actionNameString.equals("turnUsbTetheringOn"))
|
||||
if(actionNameString.equals("turnUsbTetheringOn"))
|
||||
newAction.setAction(Action_Enum.turnUsbTetheringOn);
|
||||
else if(actionNameString.equals("turnUsbTetheringOff"))
|
||||
newAction.setAction(Action_Enum.turnUsbTetheringOff);
|
||||
else if(actionNameString.equals("turnWifiTetheringOn"))
|
||||
newAction.setAction(Action_Enum.turnWifiTetheringOn);
|
||||
else if(actionNameString.equals("turnWifiTetheringOff"))
|
||||
newAction.setAction(Action_Enum.turnWifiTetheringOff);
|
||||
else if(actionNameString.equals("enableScreenRotation"))
|
||||
newAction.setAction(Action_Enum.enableScreenRotation);
|
||||
else if(actionNameString.equals("disableScreenRotation"))
|
||||
newAction.setAction(Action_Enum.disableScreenRotation);
|
||||
else if(actionNameString.equals("disableScreenRotation"))
|
||||
newAction.setAction(Action_Enum.disableScreenRotation);
|
||||
else if(actionNameString.equals("playMusic"))
|
||||
{
|
||||
newAction.setAction(Action_Enum.controlMediaPlayback);
|
||||
@@ -1175,31 +1168,7 @@ public class XmlFileInterface
|
||||
else if (name.equals("ActionParameter1"))
|
||||
{
|
||||
// exclusion for deprecated types
|
||||
if(newAction.getAction().equals(Action_Enum.turnWifiOn))
|
||||
{
|
||||
newAction.setAction(Action_Enum.setWifi);
|
||||
newAction.setParameter1(true);
|
||||
readTag(parser, "ActionParameter1"); //read the tag for the parser to head on
|
||||
}
|
||||
else if(newAction.getAction().equals(Action_Enum.turnWifiOff))
|
||||
{
|
||||
newAction.setAction(Action_Enum.setWifi);
|
||||
newAction.setParameter1(false);
|
||||
readTag(parser, "ActionParameter1"); //read the tag for the parser to head on
|
||||
}
|
||||
else if(newAction.getAction().equals(Action_Enum.turnBluetoothOn))
|
||||
{
|
||||
newAction.setAction(Action_Enum.setBluetooth);
|
||||
newAction.setParameter1(true);
|
||||
readTag(parser, "ActionParameter1"); //read the tag for the parser to head on
|
||||
}
|
||||
else if(newAction.getAction().equals(Action_Enum.turnBluetoothOff))
|
||||
{
|
||||
newAction.setAction(Action_Enum.setBluetooth);
|
||||
newAction.setParameter1(false);
|
||||
readTag(parser, "ActionParameter1"); //read the tag for the parser to head on
|
||||
}
|
||||
else if(newAction.getAction().equals(Action_Enum.turnUsbTetheringOn))
|
||||
if(newAction.getAction().equals(Action_Enum.turnUsbTetheringOn))
|
||||
{
|
||||
newAction.setAction(Action_Enum.setUsbTethering);
|
||||
newAction.setParameter1(true);
|
||||
@@ -1211,36 +1180,6 @@ public class XmlFileInterface
|
||||
newAction.setParameter1(false);
|
||||
readTag(parser, "ActionParameter1"); //read the tag for the parser to head on
|
||||
}
|
||||
else if(newAction.getAction().equals(Action_Enum.turnWifiTetheringOn))
|
||||
{
|
||||
newAction.setAction(Action_Enum.setWifiTethering);
|
||||
newAction.setParameter1(true);
|
||||
readTag(parser, "ActionParameter1"); //read the tag for the parser to head on
|
||||
}
|
||||
else if(newAction.getAction().equals(Action_Enum.turnWifiTetheringOff))
|
||||
{
|
||||
newAction.setAction(Action_Enum.setWifiTethering);
|
||||
newAction.setParameter1(false);
|
||||
readTag(parser, "ActionParameter1"); //read the tag for the parser to head on
|
||||
}
|
||||
else if(newAction.getAction().equals(Action_Enum.enableScreenRotation))
|
||||
{
|
||||
newAction.setAction(Action_Enum.setDisplayRotation);
|
||||
newAction.setParameter1(true);
|
||||
readTag(parser, "ActionParameter1"); //read the tag for the parser to head on
|
||||
}
|
||||
else if(newAction.getAction().equals(Action_Enum.disableScreenRotation))
|
||||
{
|
||||
newAction.setAction(Action_Enum.setDisplayRotation);
|
||||
newAction.setParameter1(false);
|
||||
readTag(parser, "ActionParameter1"); //read the tag for the parser to head on
|
||||
}
|
||||
else if(newAction.getAction().equals(Action_Enum.disableScreenRotation))
|
||||
{
|
||||
newAction.setAction(Action_Enum.setDisplayRotation);
|
||||
newAction.setParameter1(false);
|
||||
readTag(parser, "ActionParameter1"); //read the tag for the parser to head on
|
||||
}
|
||||
else if(newAction.getAction().equals(Action_Enum.turnScreenOnOrOff) && newAction.getParameter1())
|
||||
{
|
||||
/*
|
||||
|
||||
@@ -78,7 +78,7 @@ public class CellLocationChangedReceiver extends PhoneStateListener
|
||||
{
|
||||
for(Action action : Rule.getLastActivatedRule().getActionSet())
|
||||
{
|
||||
if(action.getAction() == Action.Action_Enum.turnWifiOn)
|
||||
if(action.getAction() == Action.Action_Enum.setWifi && action.getParameter1())
|
||||
{
|
||||
// we will be using wifiReceiver, deactivate AccelerometerTimer if applicable
|
||||
SensorActivity.stopAccelerometerTimer();
|
||||
@@ -88,7 +88,7 @@ public class CellLocationChangedReceiver extends PhoneStateListener
|
||||
catch(NullPointerException ne)
|
||||
{
|
||||
// Nothing to do, there is no last activated rule. Wifi hasn't been activated so we don't
|
||||
// deactive accelerometer receiver.
|
||||
// deactivate accelerometer receiver.
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
package com.jens.automation2.receivers;
|
||||
|
||||
import static android.os.BatteryManager.*;
|
||||
|
||||
import android.os.BatteryManager;
|
||||
import android.Manifest;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.os.BatteryManager;
|
||||
import android.util.Log;
|
||||
|
||||
import com.jens.automation2.ActivityPermissions;
|
||||
@@ -18,6 +20,11 @@ import java.util.ArrayList;
|
||||
|
||||
public class BatteryReceiver extends BroadcastReceiver implements AutomationListenerInterface
|
||||
{
|
||||
public static final int batteryChargingTypeAny = 0;
|
||||
public static final int batteryChargingTypeAc = BatteryManager.BATTERY_PLUGGED_AC;
|
||||
public static final int batteryChargingTypeUsb = BatteryManager.BATTERY_PLUGGED_USB;
|
||||
public static final int batteryChargingTypeWireless = BatteryManager.BATTERY_PLUGGED_WIRELESS;
|
||||
|
||||
public static AutomationService automationServiceRef = null;
|
||||
static int batteryLevel = -1; // initialize with a better value than this
|
||||
static boolean usbHostConnected = false;
|
||||
@@ -102,7 +109,7 @@ public class BatteryReceiver extends BroadcastReceiver implements AutomationList
|
||||
{
|
||||
try
|
||||
{
|
||||
batteryLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
|
||||
batteryLevel = intent.getIntExtra(EXTRA_LEVEL, -1);
|
||||
// int scale = -1;
|
||||
// int voltage = -1;
|
||||
// int temp = -1;
|
||||
@@ -112,36 +119,36 @@ public class BatteryReceiver extends BroadcastReceiver implements AutomationList
|
||||
Log.i("Battery", "Level: " + String.valueOf(batteryLevel));
|
||||
this.actionBatteryLevel(context);
|
||||
|
||||
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
|
||||
int statusPlugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
|
||||
int status = intent.getIntExtra(EXTRA_STATUS, -1);
|
||||
int statusPlugged = intent.getIntExtra(EXTRA_PLUGGED, -1);
|
||||
Miscellaneous.logEvent("i", "BatteryReceiver", "Status: " + String.valueOf(statusPlugged), 5);
|
||||
|
||||
switch(statusPlugged)
|
||||
{
|
||||
case BatteryManager.BATTERY_PLUGGED_AC:
|
||||
case BATTERY_PLUGGED_AC:
|
||||
// Toast.makeText(context, "Regular charging", Toast.LENGTH_LONG).show();
|
||||
Miscellaneous.logEvent("i", "BatteryReceiver", "Regular charging.", 5);
|
||||
this.actionCharging(context, statusPlugged);
|
||||
break;
|
||||
case BatteryManager.BATTERY_PLUGGED_WIRELESS:
|
||||
case BATTERY_PLUGGED_WIRELESS:
|
||||
// Toast.makeText(context, "Regular charging", Toast.LENGTH_LONG).show();
|
||||
Miscellaneous.logEvent("i", "BatteryReceiver", "Wireless charging.", 5);
|
||||
this.actionCharging(context, statusPlugged);
|
||||
break;
|
||||
case BatteryManager.BATTERY_PLUGGED_USB:
|
||||
case BATTERY_PLUGGED_USB:
|
||||
this.actionUsbConnected(context);
|
||||
break;
|
||||
}
|
||||
|
||||
switch(status)
|
||||
{
|
||||
case BatteryManager.BATTERY_STATUS_CHARGING:
|
||||
case BatteryManager.BATTERY_STATUS_FULL:
|
||||
case BATTERY_STATUS_CHARGING:
|
||||
case BATTERY_STATUS_FULL:
|
||||
// Miscellaneous.logEvent("i", "BatteryReceiver", "Device has been fully charged.", 5);
|
||||
this.actionCharging(context, statusPlugged);
|
||||
break;
|
||||
case BatteryManager.BATTERY_STATUS_DISCHARGING:
|
||||
case BatteryManager.BATTERY_STATUS_NOT_CHARGING:
|
||||
case BATTERY_STATUS_DISCHARGING:
|
||||
case BATTERY_STATUS_NOT_CHARGING:
|
||||
this.actionDischarging(context);
|
||||
break;
|
||||
}
|
||||
@@ -163,7 +170,7 @@ public class BatteryReceiver extends BroadcastReceiver implements AutomationList
|
||||
case 1:
|
||||
Miscellaneous.logEvent("i", "ChargingInfo", "Device is discharging.", 3);
|
||||
break;
|
||||
case BatteryManager.BATTERY_STATUS_CHARGING:
|
||||
case BATTERY_STATUS_CHARGING:
|
||||
Miscellaneous.logEvent("i", "ChargingInfo", "Device is charging.", 3);
|
||||
break;
|
||||
}
|
||||
@@ -178,10 +185,10 @@ public class BatteryReceiver extends BroadcastReceiver implements AutomationList
|
||||
|
||||
private void actionCharging(Context context, int statusPlugged)
|
||||
{
|
||||
if(currentChargingState != BatteryManager.BATTERY_STATUS_CHARGING) // Avoid flooding the log. This event will occur on a regular basis even though charging state wasn't changed.
|
||||
if(currentChargingState != BATTERY_STATUS_CHARGING) // Avoid flooding the log. This event will occur on a regular basis even though charging state wasn't changed.
|
||||
{
|
||||
Miscellaneous.logEvent("i", "BatteryReceiver", "Battery is charging or full.", 3);
|
||||
currentChargingState = BatteryManager.BATTERY_STATUS_CHARGING;
|
||||
currentChargingState = BATTERY_STATUS_CHARGING;
|
||||
currentChargingType = statusPlugged;
|
||||
|
||||
ArrayList<Rule> ruleCandidates = Rule.findRuleCandidates(Trigger_Enum.charging);
|
||||
@@ -207,10 +214,10 @@ public class BatteryReceiver extends BroadcastReceiver implements AutomationList
|
||||
|
||||
private void actionDischarging(Context context)
|
||||
{
|
||||
if(currentChargingState != BatteryManager.BATTERY_STATUS_UNKNOWN) // Avoid flooding the log. This event will occur on a regular basis even though charging state wasn't changed.
|
||||
if(currentChargingState != BATTERY_STATUS_UNKNOWN) // Avoid flooding the log. This event will occur on a regular basis even though charging state wasn't changed.
|
||||
{
|
||||
Miscellaneous.logEvent("i", "BatteryReceiver", "Battery is discharging.", 3);
|
||||
currentChargingState = BatteryManager.BATTERY_STATUS_UNKNOWN;
|
||||
currentChargingState = BATTERY_STATUS_UNKNOWN;
|
||||
//activate rule(s)
|
||||
ArrayList<Rule> ruleCandidates = Rule.findRuleCandidates(Trigger_Enum.charging);
|
||||
// ArrayList<Rule> ruleCandidates = Rule.findRuleCandidatesByCharging(false);
|
||||
@@ -243,7 +250,7 @@ public class BatteryReceiver extends BroadcastReceiver implements AutomationList
|
||||
oneRule.activate(automationServiceRef, false);
|
||||
}
|
||||
|
||||
this.actionCharging(context, BatteryManager.BATTERY_PLUGGED_USB);
|
||||
this.actionCharging(context, BATTERY_PLUGGED_USB);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -293,7 +300,7 @@ public class BatteryReceiver extends BroadcastReceiver implements AutomationList
|
||||
@Override
|
||||
public Trigger_Enum[] getMonitoredTrigger()
|
||||
{
|
||||
// actually monitores several
|
||||
// actually monitors several
|
||||
return new Trigger_Enum[] { Trigger_Enum.batteryLevel, Trigger_Enum.charging, Trigger_Enum.usb_host_connection };
|
||||
}
|
||||
}
|
||||
@@ -129,7 +129,10 @@ public class BroadcastListener extends android.content.BroadcastReceiver impleme
|
||||
|
||||
try
|
||||
{
|
||||
broadcastStatus = automationServiceRef.registerReceiver(broadcastReceiverInstance, broadcastIntentFilter);
|
||||
if(Build.VERSION.SDK_INT >= 33)
|
||||
broadcastStatus = automationServiceRef.registerReceiver(broadcastReceiverInstance, broadcastIntentFilter, Context.RECEIVER_EXPORTED);
|
||||
else
|
||||
broadcastStatus = automationServiceRef.registerReceiver(broadcastReceiverInstance, broadcastIntentFilter);
|
||||
broadcastReceiverActive = true;
|
||||
}
|
||||
catch(Exception e)
|
||||
|
||||
@@ -14,6 +14,7 @@ import android.util.Log;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import com.jens.automation2.AutomationService;
|
||||
import com.jens.automation2.Miscellaneous;
|
||||
@@ -508,12 +509,20 @@ public class CalendarReceiver extends BroadcastReceiver implements AutomationLis
|
||||
Calendar now = Calendar.getInstance();
|
||||
List<CalendarEvent> events = readCalendarEvents(Miscellaneous.getAnyContext(), true, false);
|
||||
|
||||
if(events.size() == 0)
|
||||
{
|
||||
Miscellaneous.logEvent("i", "calculateNextWakeup()", "Supposedly no future events in calendar. Reading again...", 4);
|
||||
events = readCalendarEvents(Miscellaneous.getAnyContext(), true, false);
|
||||
}
|
||||
|
||||
if (events.size() == 0)
|
||||
{
|
||||
Miscellaneous.logEvent("i", "calculateNextWakeup()", "No future events, nothing to schedule.", 4);
|
||||
}
|
||||
else
|
||||
{
|
||||
Miscellaneous.logEvent("i", "calculateNextWakeup()", String.valueOf(events.size()) + " future events in calendar. Checking if one applies.", 4);
|
||||
|
||||
List<Rule> ruleCandidates = Rule.findRuleCandidates(Trigger.Trigger_Enum.calendarEvent);
|
||||
List<Long> wakeUpCandidatesList = new ArrayList<>();
|
||||
|
||||
@@ -580,7 +589,10 @@ public class CalendarReceiver extends BroadcastReceiver implements AutomationLis
|
||||
calendarIntentFilter.addDataAuthority("com.android.calendar", null);
|
||||
}
|
||||
|
||||
calendarIntent = automationServiceRef.registerReceiver(calendarReceiverInstance, calendarIntentFilter);
|
||||
if(Build.VERSION.SDK_INT >= 33)
|
||||
calendarIntent = automationServiceRef.registerReceiver(calendarReceiverInstance, calendarIntentFilter, Context.RECEIVER_EXPORTED);
|
||||
else
|
||||
calendarIntent = automationServiceRef.registerReceiver(calendarReceiverInstance, calendarIntentFilter);
|
||||
|
||||
calendarReceiverActive = true;
|
||||
|
||||
|
||||
@@ -218,7 +218,7 @@ public class DateTimeListener extends BroadcastReceiver implements AutomationLis
|
||||
|
||||
private static void scheduleNextAlarm()
|
||||
{
|
||||
Long currentTime = System.currentTimeMillis();
|
||||
long currentTime = System.currentTimeMillis();
|
||||
ScheduleElement scheduleCandidate = null;
|
||||
|
||||
if(alarmCandidates.size() == 0)
|
||||
|
||||
@@ -53,12 +53,14 @@ public class HeadphoneJackListener extends BroadcastReceiver implements Automati
|
||||
{
|
||||
try
|
||||
{
|
||||
/*Broadcast Action: Wired Headset plugged in or unplugged.
|
||||
The intent will have the following extra values:
|
||||
|
||||
state - 0 for unplugged, 1 for plugged.
|
||||
name - Headset type, human readable string
|
||||
microphone - 1 if headset has a microphone, 0 otherwise*/
|
||||
/*
|
||||
Broadcast Action: Wired Headset plugged in or unplugged.
|
||||
The intent will have the following extra values:
|
||||
|
||||
state - 0 for unplugged, 1 for plugged.
|
||||
name - Headset type, human readable string
|
||||
microphone - 1 if headset has a microphone, 0 otherwise
|
||||
*/
|
||||
|
||||
int state = intent.getExtras().getInt("state");
|
||||
String name = intent.getExtras().getString("name");
|
||||
|
||||
@@ -146,13 +146,13 @@ public class NotificationListener extends NotificationListenerService// implemen
|
||||
try
|
||||
{
|
||||
if (extras.containsKey(EXTRA_TEXT))
|
||||
text = extras.getString(EXTRA_TEXT).toString();
|
||||
text = String.valueOf(extras.getCharSequence(EXTRA_TEXT));
|
||||
}
|
||||
catch (NullPointerException e)
|
||||
{
|
||||
// in stacked notifications the "surrounding" element has no text, only a title
|
||||
if (extras.containsKey(EXTRA_TEXT) && extras.get(EXTRA_TEXT) != null)
|
||||
text = extras.get(EXTRA_TEXT).toString();
|
||||
text = String.valueOf(extras.getCharSequence(EXTRA_TEXT));
|
||||
}
|
||||
|
||||
SimpleNotification returnNotification = new SimpleNotification();
|
||||
|
||||
@@ -0,0 +1,162 @@
|
||||
package com.jens.automation2.receivers;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.hardware.Sensor;
|
||||
import android.hardware.SensorEvent;
|
||||
import android.hardware.SensorEventListener;
|
||||
import android.hardware.SensorManager;
|
||||
|
||||
import com.jens.automation2.ActivityPermissions;
|
||||
import com.jens.automation2.AutomationService;
|
||||
import com.jens.automation2.Miscellaneous;
|
||||
import com.jens.automation2.Rule;
|
||||
import com.jens.automation2.Trigger.Trigger_Enum;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class ProximityReceiver implements AutomationListenerInterface
|
||||
{
|
||||
public static AutomationService automationServiceRef = null;
|
||||
static float proximityLevel = -1; // initialize with a better value than this
|
||||
static boolean proximityReceiverActive = false;
|
||||
|
||||
SensorManager sensorManager;
|
||||
Sensor proximitySensor;
|
||||
|
||||
static ProximityReceiver proximityReceiverInstance = null;
|
||||
|
||||
public static float getProximityLevel()
|
||||
{
|
||||
return proximityLevel;
|
||||
}
|
||||
|
||||
public static void startProximityReceiver(final AutomationService automationServiceRef)
|
||||
{
|
||||
if(!proximityReceiverActive)
|
||||
{
|
||||
ProximityReceiver.automationServiceRef = automationServiceRef;
|
||||
|
||||
if(proximityReceiverInstance == null)
|
||||
proximityReceiverInstance = new ProximityReceiver();
|
||||
|
||||
proximityReceiverInstance.startListener(automationServiceRef);
|
||||
|
||||
proximityReceiverActive = true;
|
||||
}
|
||||
}
|
||||
public static void stopProximityReceiver()
|
||||
{
|
||||
if(proximityReceiverActive)
|
||||
{
|
||||
if(proximityReceiverInstance != null)
|
||||
{
|
||||
proximityReceiverInstance = null;
|
||||
}
|
||||
|
||||
proximityReceiverActive = false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startListener(AutomationService automationService)
|
||||
{
|
||||
if(!proximityReceiverActive)
|
||||
{
|
||||
ProximityReceiver.automationServiceRef = automationServiceRef;
|
||||
|
||||
sensorManager = (SensorManager) automationService.getSystemService(Context.SENSOR_SERVICE);
|
||||
|
||||
// from sensor service we are
|
||||
// calling proximity sensor
|
||||
proximitySensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
|
||||
|
||||
// handling the case if the proximity
|
||||
// sensor is not present in users device.
|
||||
if (proximitySensor == null)
|
||||
{
|
||||
Miscellaneous.logEvent("w", "No proximity sensor", "Device doesn\'t seem to have a proximity sensor.", 4);
|
||||
}
|
||||
else
|
||||
{
|
||||
// registering our sensor with sensor manager.
|
||||
sensorManager.registerListener(proximitySensorEventListener, proximitySensor, SensorManager.SENSOR_DELAY_NORMAL);
|
||||
}
|
||||
|
||||
proximityReceiverActive = true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stopListener(AutomationService automationService)
|
||||
{
|
||||
if(proximityReceiverActive)
|
||||
{
|
||||
if(proximityReceiverInstance != null)
|
||||
{
|
||||
if(proximitySensor != null)
|
||||
sensorManager.unregisterListener(proximitySensorEventListener);
|
||||
|
||||
proximityReceiverInstance = null;
|
||||
}
|
||||
|
||||
proximityReceiverActive = false;
|
||||
}
|
||||
}
|
||||
|
||||
SensorEventListener proximitySensorEventListener = new SensorEventListener()
|
||||
{
|
||||
@Override
|
||||
public void onSensorChanged(SensorEvent sensorEvent)
|
||||
{
|
||||
// check if the sensor type is proximity sensor.
|
||||
if (sensorEvent.sensor.getType() == Sensor.TYPE_PROXIMITY)
|
||||
{
|
||||
proximityLevel = (int)sensorEvent.values[0];
|
||||
|
||||
Miscellaneous.logEvent("i", "Proximity", String.valueOf(proximityLevel), 5);
|
||||
|
||||
// if (sensorEvent.values[0] == 0)
|
||||
// {
|
||||
//// sensorStatusTV.setText("Near");
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
//// sensorStatusTV.setText("Away");
|
||||
// }
|
||||
|
||||
ArrayList<Rule> ruleCandidates = Rule.findRuleCandidates(Trigger_Enum.proximity);
|
||||
for(Rule oneRule : ruleCandidates)
|
||||
{
|
||||
if(oneRule.getsGreenLight(automationServiceRef))
|
||||
oneRule.activate(automationServiceRef, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAccuracyChanged(Sensor sensor, int i)
|
||||
{
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
public static boolean haveAllPermission()
|
||||
{
|
||||
return ActivityPermissions.havePermission(ActivityPermissions.permissionNameProximity, Miscellaneous.getAnyContext());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isListenerRunning()
|
||||
{
|
||||
return proximityReceiverActive;
|
||||
}
|
||||
@Override
|
||||
public Trigger_Enum[] getMonitoredTrigger()
|
||||
{
|
||||
// actually monitors several
|
||||
return new Trigger_Enum[] { Trigger_Enum.proximity };
|
||||
}
|
||||
}
|
||||
@@ -14,7 +14,7 @@
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/barBackgroundColor" >
|
||||
android:background="@color/cardview_shadow_start_color" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/etActivityOrActionPath"
|
||||
@@ -45,7 +45,7 @@
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/barBackgroundColor" >
|
||||
android:background="@color/cardview_shadow_start_color" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvPoiTitle"
|
||||
@@ -77,7 +77,7 @@
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/barBackgroundColor" >
|
||||
android:background="@color/cardview_shadow_start_color" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvRuleTitle"
|
||||
@@ -109,7 +109,7 @@
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/barBackgroundColor" >
|
||||
android:background="@color/cardview_shadow_start_color" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvProfileTitle"
|
||||
@@ -142,7 +142,7 @@
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/barBackgroundColor" >
|
||||
android:background="@color/cardview_shadow_start_color" >
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -169,7 +169,7 @@
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/barBackgroundColor" >
|
||||
android:background="@color/cardview_shadow_start_color" >
|
||||
<TextView
|
||||
android:id="@+id/tvTimeFrameTitle"
|
||||
android:layout_width="wrap_content"
|
||||
@@ -197,7 +197,7 @@
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/barBackgroundColor" >
|
||||
android:background="@color/cardview_shadow_start_color" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvProcessMonitoringTitle"
|
||||
@@ -225,7 +225,7 @@
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/barBackgroundColor" >
|
||||
android:background="@color/cardview_shadow_start_color" >
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
@@ -251,7 +251,7 @@
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/barBackgroundColor" >
|
||||
android:background="@color/cardview_shadow_start_color" >
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
|
||||
@@ -31,6 +31,12 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginVertical="@dimen/default_margin"
|
||||
android:text="@string/screenBrightGoogleComment" />
|
||||
|
||||
<Button
|
||||
android:layout_marginTop="@dimen/default_margin"
|
||||
android:id="@+id/bApplyBrightness"
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/barBackgroundColor" >
|
||||
android:background="@color/cardview_shadow_start_color" >
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
@@ -157,9 +157,10 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/change" />
|
||||
<TextView
|
||||
android:id="@+id/tvNotificationsVolume"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/volumeRingtoneNotifications"
|
||||
android:text="@string/volumeNotifications"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:layout_marginLeft="40dp" />
|
||||
<SeekBar
|
||||
@@ -167,6 +168,24 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="40dp" />
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/checkBoxChangeVolumeRingtones"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/change" />
|
||||
<TextView
|
||||
android:id="@+id/tvRingtoneVolume"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/volumeRingtone"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:layout_marginLeft="40dp" />
|
||||
<SeekBar
|
||||
android:id="@+id/seekBarVolumeRingtones"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="40dp" />
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/checkBoxChangeVolumeAlarms"
|
||||
@@ -337,6 +356,5 @@
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
</ScrollView>
|
||||
</ScrollView>
|
||||
@@ -15,7 +15,7 @@
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/barBackgroundColor" >
|
||||
android:background="@color/cardview_shadow_start_color" >
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
@@ -123,7 +123,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="10dp"
|
||||
android:background="@color/barBackgroundColor"
|
||||
android:background="@color/cardview_shadow_start_color"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
@@ -160,7 +160,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="10dp"
|
||||
android:background="@color/barBackgroundColor"
|
||||
android:background="@color/cardview_shadow_start_color"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/barBackgroundColor" >
|
||||
android:background="@color/cardview_shadow_start_color" >
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
<TextView
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="@dimen/default_margin"
|
||||
android:text="@string/VariableKey" />
|
||||
@@ -47,21 +47,42 @@
|
||||
android:layout_marginTop="@dimen/default_margin">
|
||||
|
||||
<TextView
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_gravity="top"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="@dimen/default_margin"
|
||||
android:text="@string/variableValue" />
|
||||
android:text="@string/variableValue"
|
||||
android:layout_marginRight="@dimen/default_margin" />
|
||||
|
||||
<EditText
|
||||
android:id="@+id/etVariableValueTrigger"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/etVariableValueTrigger"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/default_margin"
|
||||
android:text="@string/mayUseRegularExpressions" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</TableRow>
|
||||
|
||||
</TableLayout>
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/chkTriggerVariableDirection"
|
||||
android:layout_marginTop="@dimen/default_margin"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:checked="true"
|
||||
android:text="@string/matches" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/barBackgroundColor" >
|
||||
android:background="@color/cardview_shadow_start_color" >
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
@@ -83,7 +83,7 @@
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/barBackgroundColor" >
|
||||
android:background="@color/cardview_shadow_start_color" >
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
|
||||
@@ -0,0 +1,112 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:orientation="vertical"
|
||||
android:layout_margin="@dimen/default_margin">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/proximity"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Headline"
|
||||
android:layout_marginBottom="@dimen/default_margin" />
|
||||
|
||||
<TableLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:shrinkColumns="1"
|
||||
android:stretchColumns="1" >
|
||||
|
||||
<TableRow>
|
||||
|
||||
<TextView
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="match_parent"
|
||||
android:paddingRight="@dimen/default_margin"
|
||||
android:text="@string/state"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<com.google.android.material.slider.RangeSlider
|
||||
android:id="@+id/rsProximity"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:valueFrom="0"
|
||||
android:valueTo="10"
|
||||
android:stepSize="0.1"
|
||||
android:theme="@style/AppThemeCompat" />
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/close"
|
||||
android:layout_alignParentLeft="true"/>
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/far"
|
||||
android:layout_alignParentRight="true"/>
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</TableRow>
|
||||
|
||||
</TableLayout>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvTriggerProximityHint"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginVertical="@dimen/default_margin"
|
||||
android:textColor="@color/red"
|
||||
android:text="@string/deviceDoesntHaveProximitySensor" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/default_margin"
|
||||
android:text="@string/testArea"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Headline" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginVertical="@dimen/default_margin"
|
||||
android:text="@string/proximitySensorHint" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/testAreaProximityComment" />
|
||||
|
||||
<SeekBar
|
||||
android:id="@+id/sbProximityTest"
|
||||
android:layout_marginTop="@dimen/default_margin"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvProximityCurrentValue"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/bTriggerProximitySave"
|
||||
android:layout_marginTop="@dimen/default_margin"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/save" />
|
||||
|
||||
</androidx.appcompat.widget.LinearLayoutCompat>
|
||||
@@ -1,44 +1,48 @@
|
||||
<?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="fill_parent"
|
||||
android:layout_weight="30"
|
||||
android:layout_margin="@dimen/default_margin" >
|
||||
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:layout_margin="@dimen/default_margin"
|
||||
android:layout_weight="30">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvRuleTitle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/start"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge" />
|
||||
|
||||
<TimePicker
|
||||
android:id="@+id/tpTimeFrameStart"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvLastRule"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/end"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge" />
|
||||
|
||||
<TimePicker
|
||||
android:id="@+id/tpTimeFrameStop"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvRuleTitle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/start"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge" />
|
||||
|
||||
<TimePicker
|
||||
android:id="@+id/tpTimeFrameStart"
|
||||
android:descendantFocusability="blocksDescendants"
|
||||
android:saveEnabled="false"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvLastRule"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/end"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge" />
|
||||
|
||||
<TimePicker
|
||||
android:id="@+id/tpTimeFrameStop"
|
||||
android:descendantFocusability="blocksDescendants"
|
||||
android:saveEnabled="false"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
<ImageView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_margin="10dp"
|
||||
android:background="#aa000000" />
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_margin="10dp"
|
||||
android:background="#aa000000" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView2"
|
||||
@@ -47,24 +51,24 @@
|
||||
android:text="@string/insideOrOutsideTimeFrames"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge" />
|
||||
|
||||
<RadioGroup
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
<RadioGroup
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<RadioButton
|
||||
android:id="@+id/radioTimeFrameEntering"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:checked="true"
|
||||
android:text="@string/entering" />
|
||||
|
||||
<RadioButton
|
||||
android:id="@+id/radioTimeFrameLeaving"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/leaving" />
|
||||
<RadioButton
|
||||
android:id="@+id/radioTimeFrameEntering"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:checked="true"
|
||||
android:text="@string/entering" />
|
||||
|
||||
<RadioButton
|
||||
android:id="@+id/radioTimeFrameLeaving"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/leaving" />
|
||||
</RadioGroup>
|
||||
|
||||
|
||||
<ImageView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
@@ -80,52 +84,52 @@
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvDaysHint"
|
||||
android:layout_marginVertical="@dimen/default_margin"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginVertical="@dimen/default_margin"
|
||||
android:textColor="@color/red" />
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/checkMonday"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/monday" />
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/checkTuesday"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/tuesday" />
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/checkWednesday"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/wednesday" />
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/checkThursday"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/thursday" />
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/checkFriday"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/friday" />
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/checkSaturday"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/saturday" />
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/checkSunday"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/sunday" />
|
||||
<CheckBox
|
||||
android:id="@+id/checkMonday"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/monday" />
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/checkTuesday"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/tuesday" />
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/checkWednesday"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/wednesday" />
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/checkThursday"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/thursday" />
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/checkFriday"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/friday" />
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/checkSaturday"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/saturday" />
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/checkSunday"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/sunday" />
|
||||
|
||||
<ImageView
|
||||
android:layout_width="match_parent"
|
||||
@@ -136,7 +140,7 @@
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal" >
|
||||
android:orientation="horizontal">
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/chkRepeat"
|
||||
@@ -146,22 +150,22 @@
|
||||
|
||||
<EditText
|
||||
android:id="@+id/etRepeatEvery"
|
||||
android:layout_marginLeft="@dimen/default_margin"
|
||||
android:minWidth="75dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/default_margin"
|
||||
android:enabled="false"
|
||||
android:inputType="numberSigned" />
|
||||
android:inputType="numberSigned"
|
||||
android:minWidth="75dp" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<Button
|
||||
android:id="@+id/bSaveTimeFrame"
|
||||
|
||||
<Button
|
||||
android:id="@+id/bSaveTimeFrame"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/default_margin"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/save" />
|
||||
|
||||
android:text="@string/save" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</ScrollView>
|
||||
@@ -9,41 +9,48 @@
|
||||
android:title="@string/generalSettings">
|
||||
|
||||
<CheckBoxPreference
|
||||
android:key="startServiceAtSystemBoot"
|
||||
android:summary="@string/onOff"
|
||||
android:title="@string/startAtSystemBoot" />
|
||||
android:key="startServiceAtSystemBoot"
|
||||
android:summary="@string/onOff"
|
||||
android:title="@string/startAtSystemBoot" />
|
||||
|
||||
<CheckBoxPreference
|
||||
android:key="startServiceAfterAppUpdate"
|
||||
android:summary="@string/startServiceAfterAppUpdate"
|
||||
android:title="@string/startServiceAfterAppUpdateShort" />
|
||||
<!--
|
||||
<CheckBoxPreference
|
||||
android:key="startNewThreadForRuleActivation"
|
||||
android:summary="@string/startNewThreadForRuleExecution"
|
||||
android:title="@string/newThreadRules" />
|
||||
-->
|
||||
<CheckBoxPreference
|
||||
android:key="showIconWhenServiceIsRunning"
|
||||
android:summary="@string/showIconWhenServiceIsRunning"
|
||||
android:title="@string/showIcon" />
|
||||
android:key="startServiceAfterAppUpdate"
|
||||
android:summary="@string/startServiceAfterAppUpdate"
|
||||
android:title="@string/startServiceAfterAppUpdateShort" />
|
||||
|
||||
<CheckBoxPreference
|
||||
android:key="writeLogFile"
|
||||
android:summary="@string/onOff"
|
||||
android:title="@string/writeLogFile" />
|
||||
android:key="showIconWhenServiceIsRunning"
|
||||
android:summary="@string/showIconWhenServiceIsRunning"
|
||||
android:title="@string/showIcon" />
|
||||
|
||||
<CheckBoxPreference
|
||||
android:key="logToConsole"
|
||||
android:summary="@string/onOff"
|
||||
android:title="@string/logToConsole" />
|
||||
|
||||
<CheckBoxPreference
|
||||
android:key="writeLogFile"
|
||||
android:summary="@string/onOff"
|
||||
android:title="@string/writeLogFile" />
|
||||
|
||||
<EditTextPreference
|
||||
android:key="logLevel"
|
||||
android:summary="@string/logLevelSummary"
|
||||
android:title="@string/logLevelTitle"
|
||||
android:inputType="number"></EditTextPreference>
|
||||
android:inputType="number" />
|
||||
|
||||
<EditTextPreference
|
||||
android:key="logFileMaxSize"
|
||||
android:summary="@string/logFileMaxSizeSummary"
|
||||
android:title="@string/logFileMaxSizeTitle"
|
||||
android:inputType="number"></EditTextPreference>
|
||||
android:inputType="number" />
|
||||
|
||||
<ListPreference
|
||||
android:key="uiTheme"
|
||||
android:title="@string/uiTheme"
|
||||
android:summary="@string/uiThemeSummary"
|
||||
android:entries="@array/uiThemeOptions"
|
||||
android:entryValues="@array/uiThemeOptionsValues" />
|
||||
|
||||
<ListPreference
|
||||
android:key="startScreen"
|
||||
@@ -114,21 +121,11 @@
|
||||
|
||||
</PreferenceCategory>
|
||||
|
||||
|
||||
<PreferenceCategory
|
||||
android:summary="@string/positioningSettings"
|
||||
android:title="@string/positioningSettings">
|
||||
|
||||
<!-- android:id="@id/lstPositioningEngine"-->
|
||||
<!--
|
||||
<ListPreference
|
||||
android:title="@string/positioningEngine"
|
||||
android:key="positioningEngine"
|
||||
android:defaultValue="0"
|
||||
android:entries="@array/positioningEngineOptions"
|
||||
android:entryValues="@array/positioningEngineOptionsValues" />
|
||||
-->
|
||||
<CheckBoxPreference
|
||||
<CheckBoxPreference
|
||||
android:key="useWifiForPositioning"
|
||||
android:summary="@string/listenToWifiState"
|
||||
android:title="@string/wifiState" />
|
||||
@@ -142,19 +139,19 @@
|
||||
android:key="useAccelerometerAfterIdleTime"
|
||||
android:summary="@string/accelerometerTimer"
|
||||
android:title="@string/cellMastIdleTime"
|
||||
android:inputType="number"></EditTextPreference>
|
||||
android:inputType="number" />
|
||||
|
||||
<EditTextPreference
|
||||
android:key="accelerometerMovementThreshold"
|
||||
android:summary="@string/accelerometerThresholdDescription"
|
||||
android:title="@string/accelerometerThreshold"
|
||||
android:inputType="number"></EditTextPreference>
|
||||
android:inputType="number" />
|
||||
|
||||
<EditTextPreference
|
||||
android:key="speedMaximumTimeBetweenLocations"
|
||||
android:summary="@string/speedMaximumTimeBetweenLocations"
|
||||
android:title="@string/speedMaximumTime"
|
||||
android:inputType="number"></EditTextPreference>
|
||||
android:inputType="number" />
|
||||
|
||||
<CheckBoxPreference
|
||||
android:key="rememberLastActivePoi"
|
||||
@@ -176,37 +173,31 @@
|
||||
android:key="MINIMUM_DISTANCE_CHANGE_FOR_GPS_UPDATE"
|
||||
android:summary="@string/minimumDistanceChangeForGpsLocationUpdates"
|
||||
android:title="@string/distanceForGpsUpdate"
|
||||
android:inputType="number"></EditTextPreference>
|
||||
android:inputType="number" />
|
||||
|
||||
<EditTextPreference
|
||||
android:key="MINIMUM_DISTANCE_CHANGE_FOR_NETWORK_UPDATE"
|
||||
android:summary="@string/minimumDistanceChangeForNetworkLocationUpdates"
|
||||
android:title="@string/distanceForNetworkUpdate"
|
||||
android:inputType="number"></EditTextPreference>
|
||||
<!-- We won't need this setting anymore, at least it won't be available for the user.
|
||||
<EditTextPreference
|
||||
android:key="SATISFACTORY_ACCURACY_GPS"
|
||||
android:summary="@string/satisfactoryAccuracyGps"
|
||||
android:title="@string/gpsAccuracy"
|
||||
android:inputType="number"></EditTextPreference>
|
||||
-->
|
||||
android:inputType="number" />
|
||||
|
||||
<EditTextPreference
|
||||
android:key="SATISFACTORY_ACCURACY_NETWORK"
|
||||
android:summary="@string/satisfactoryAccuracyNetwork"
|
||||
android:title="@string/networkAccuracy"
|
||||
android:inputType="number"></EditTextPreference>
|
||||
android:inputType="number" />
|
||||
|
||||
<EditTextPreference
|
||||
android:key="MINIMUM_TIME_BETWEEN_UPDATE"
|
||||
android:summary="@string/minimumTimeForLocationUpdates"
|
||||
android:title="@string/timeForUpdate"
|
||||
android:inputType="number"></EditTextPreference>
|
||||
android:inputType="number" />
|
||||
|
||||
<EditTextPreference
|
||||
android:key="gpsTimeout"
|
||||
android:summary="@string/timeoutForGpsComparisonsSummary"
|
||||
android:title="@string/timeoutForGpsComparisonsTitle"
|
||||
android:inputType="number"></EditTextPreference>
|
||||
android:inputType="number"/>
|
||||
|
||||
</PreferenceCategory>
|
||||
|
||||
@@ -218,19 +209,19 @@
|
||||
android:key="timeBetweenNoiseLevelMeasurements"
|
||||
android:summary="@string/timeBetweenNoiseLevelMeasurementsSummary"
|
||||
android:title="@string/timeBetweenNoiseLevelMeasurementsTitle"
|
||||
android:inputType="number"></EditTextPreference>
|
||||
android:inputType="number" />
|
||||
|
||||
<EditTextPreference
|
||||
android:key="lengthOfNoiseLevelMeasurements"
|
||||
android:summary="@string/lengthOfNoiseLevelMeasurementsSummary"
|
||||
android:title="@string/lengthOfNoiseLevelMeasurementsTitle"
|
||||
android:inputType="number"></EditTextPreference>
|
||||
android:inputType="number" />
|
||||
|
||||
<EditTextPreference
|
||||
android:key="referenceValueForNoiseLevelMeasurements"
|
||||
android:summary="@string/referenceValueForNoiseLevelMeasurementsSummary"
|
||||
android:title="@string/referenceValueForNoiseLevelMeasurementsTitle"
|
||||
android:inputType="number"></EditTextPreference>
|
||||
android:inputType="number" />
|
||||
|
||||
</PreferenceCategory>
|
||||
|
||||
@@ -247,19 +238,19 @@
|
||||
android:key="httpAttempts"
|
||||
android:summary="@string/httpAttemptsSummary"
|
||||
android:title="@string/httpAttemptsTitle"
|
||||
android:inputType="number"></EditTextPreference>
|
||||
android:inputType="number" />
|
||||
|
||||
<EditTextPreference
|
||||
android:key="httpAttemptsTimeout"
|
||||
android:summary="@string/httpAttemptsTimeoutSummary"
|
||||
android:title="@string/httpAttemptsTimeoutTitle"
|
||||
android:inputType="number"></EditTextPreference>
|
||||
android:inputType="number" />
|
||||
|
||||
<EditTextPreference
|
||||
android:key="httpAttemptGap"
|
||||
android:summary="@string/httpAttemptGapSummary"
|
||||
android:title="@string/httpAttemptGapTitle"
|
||||
android:inputType="number"></EditTextPreference>
|
||||
android:inputType="number" />
|
||||
|
||||
</PreferenceCategory>
|
||||
|
||||
@@ -271,7 +262,7 @@
|
||||
android:key="timeBetweenProcessMonitorings"
|
||||
android:summary="@string/timeBetweenProcessMonitoringsSummary"
|
||||
android:title="@string/timeBetweenProcessMonitoringsTitle"
|
||||
android:inputType="number"></EditTextPreference>
|
||||
android:inputType="number" />
|
||||
|
||||
</PreferenceCategory>
|
||||
|
||||
@@ -283,7 +274,7 @@
|
||||
android:key="acceptDevicePositionSignalEveryX_MilliSeconds"
|
||||
android:summary="@string/deviceOrientationTimeAcceptIntervalSummary"
|
||||
android:title="@string/deviceOrientationTimeAcceptIntervalTitle"
|
||||
android:inputType="number"></EditTextPreference>
|
||||
android:inputType="number" />
|
||||
|
||||
</PreferenceCategory>
|
||||
|
||||
@@ -295,13 +286,13 @@
|
||||
android:key="activityDetectionFrequency"
|
||||
android:summary="@string/activityDetectionFrequencySummary"
|
||||
android:title="@string/activityDetectionFrequencyTitle"
|
||||
android:inputType="number"></EditTextPreference>
|
||||
android:inputType="number" />
|
||||
|
||||
<EditTextPreference
|
||||
android:key="activityDetectionRequiredProbability"
|
||||
android:summary="@string/activityDetectionRequiredProbabilitySummary"
|
||||
android:title="@string/activityDetectionRequiredProbabilityTitle"
|
||||
android:inputType="number"></EditTextPreference>
|
||||
android:inputType="number" />
|
||||
|
||||
</PreferenceCategory>
|
||||
|
||||
@@ -313,9 +304,8 @@
|
||||
android:key="musicCheckFrequency"
|
||||
android:summary="@string/musicCheckFrequencySummary"
|
||||
android:title="@string/musicCheckFrequencyTitle"
|
||||
android:inputType="number"></EditTextPreference>
|
||||
android:inputType="number" />
|
||||
|
||||
</PreferenceCategory>
|
||||
|
||||
|
||||
</PreferenceScreen>
|
||||
@@ -15,7 +15,7 @@
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/barBackgroundColor" >
|
||||
android:background="@color/cardview_shadow_start_color" >
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
@@ -370,11 +370,12 @@
|
||||
android:text="@string/donate" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvContactNotice"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/default_margin"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/emailContactNotice" />
|
||||
android:text="@string/contactNotice" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/barBackgroundColor" >
|
||||
android:background="@color/cardview_shadow_start_color" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvRuleTitle"
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/barBackgroundColor" >
|
||||
android:background="@color/cardview_shadow_start_color" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvRuleTitle"
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/barBackgroundColor" >
|
||||
android:background="@color/cardview_shadow_start_color" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvLastRule"
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/barBackgroundColor" >
|
||||
android:background="@color/cardview_shadow_start_color" >
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
<string name="end">Ende</string>
|
||||
<string name="save">Speichern</string>
|
||||
<string name="urlToTrigger">URL, die ausgelöst werden soll:</string>
|
||||
<string name="urlLegend">Variablen:\nSie können die folgenden Variablen verwenden. Vor dem Auslösen werden sie mit dem entsprechenden Wert Ihres Geräts ersetzt. Die Klammern müssen in den Text mit aufgenommen werden.\n\n[uniqueid] - Die Unique ID Ihres Geräts\n[serialnr] - Die Seriennummer Ihres Geräts (< Android 9)\n[latitude] - Ihr gegenwärtiger Breitengrad\n[longitude] - Ihr gegenwärtiger Längengrad\n[phonenr] - Nummer des letzten ein- oder ausgehenden Anrufs\n[d] - Tag des Monats, 2-stellig mit führender Null\n[m] - Monat als Zahl, mit führenden Nullen\n[Y] - Vierstellige Jahreszahl\n[h] - Stunde im 12-Stunden-Format, mit führenden Nullen\n[H] - Stunde im 24-Stunden-Format, mit führenden Nullen\n[i] - Minuten, mit führenden Nullen\n[s] - Sekunden, mit führenden Nullen\n[ms] - milliseconds\n[notificationTitle] - Titel der letzten Benachrichtigung\n[notificationText] - Text der letzten Benachrichtigung\n[last_triggerurl_result] - Das Ergebnis der letzten Ausführung der triggerUrl-Aktion\n[last_run_executable_exit_code] - Der exit code der letzten starte-Programm Aktion\n[last_run_executable_output] - Die Ausgabe der letzten starte-Programm Aktion (nur für nicht-root)\n[last_calendar_title] - Titel des letzten Regel-auslösenden Kalendertermins\n[last_calendar_description] - Beschreibung des letzten Regel-auslösenden Kalendertermins\n[last_calendar_location] - Ort des letzten Regel-auslösenden Kalendertermins\n[variable-VARIABLENAME] - Der Wert Ihrer selbst definitierten Variable</string>
|
||||
<string name="urlLegend">Variablen:\nSie können die folgenden Variablen verwenden. Vor dem Auslösen werden sie mit dem entsprechenden Wert Ihres Geräts ersetzt. Die Klammern müssen in den Text mit aufgenommen werden.\n\n[uniqueid] - Die Unique ID Ihres Geräts\n[serialnr] - Die Seriennummer Ihres Geräts (< Android 9)\n[latitude] - Ihr gegenwärtiger Breitengrad\n[longitude] - Ihr gegenwärtiger Längengrad\n[phonenr] - Nummer des letzten ein- oder ausgehenden Anrufs\n[d] - Tag des Monats, 2-stellig mit führender Null\n[m] - Monat als Zahl, mit führenden Nullen\n[Y] - Vierstellige Jahreszahl\n[h] - Stunde im 12-Stunden-Format, mit führenden Nullen\n[H] - Stunde im 24-Stunden-Format, mit führenden Nullen\n[i] - Minuten, mit führenden Nullen\n[s] - Sekunden, mit führenden Nullen\n[ms] - milliseconds\n[w] - Wochentag in Textform\n[F] - Monat in Textform\n[notificationTitle] - Titel der letzten Benachrichtigung\n[notificationText] - Text der letzten Benachrichtigung\n[last_trigger_url_result] - Das Ergebnis der letzten Ausführung der trigger url-Aktion\n[last_run_executable_exit_code] - Der exit code der letzten starte-Programm Aktion\n[last_run_executable_output] - Die Ausgabe der letzten starte-Programm Aktion (nur für nicht-root)\n[last_calendar_title] - Titel des letzten Regel-auslösenden Kalendertermins\n[last_calendar_description] - Beschreibung des letzten Regel-auslösenden Kalendertermins\n[last_calendar_location] - Ort des letzten Regel-auslösenden Kalendertermins\n[variable-VARIABLENAME] - Der Wert Ihrer selbst definitierten Variable</string>
|
||||
<string name="wifi">WLAN</string>
|
||||
<string name="activating">Aktiviere</string>
|
||||
<string name="deactivating">Deaktiviere</string>
|
||||
@@ -368,7 +368,7 @@
|
||||
<string name="headsetConnected">Headset (Art: %1$s) verbunden</string>
|
||||
<string name="headsetDisconnected">Headset (type: %1$s) getrennt</string>
|
||||
<string name="headphoneSimple">Kopfhörer</string>
|
||||
<string name="headphoneMicrophone">Mikrofon</string>
|
||||
<string name="headphoneMicrophone">mit Mikrofon</string>
|
||||
<string name="headphoneAny">Egal</string>
|
||||
<string name="headphoneSelectType">Kopfhörer Typ auswählen</string>
|
||||
<string name="whatsThis">Was ist das?</string>
|
||||
@@ -388,7 +388,8 @@
|
||||
<string name="notificationRingtone">Ton für Benachrichtigungen</string>
|
||||
<string name="hapticFeedback">Haptische Rückmeldung (vibrieren bei Bildschirmberührung)</string>
|
||||
<string name="volumeMusicVideoGameMedia">Musik, Videos, Spiele und andere Medien</string>
|
||||
<string name="volumeRingtoneNotifications">Klingeltöne und Benachrichtungen</string>
|
||||
<string name="volumeNotifications">Benachrichtungen</string>
|
||||
<string name="volumeRingtone">Klingelton</string>
|
||||
<string name="volumeAlarms">Wecker</string>
|
||||
<string name="change">Ändern</string>
|
||||
<string name="audibleSelection">Hörbare Auswahl (Ton bei Bildschirmauswahl)</string>
|
||||
@@ -697,7 +698,7 @@
|
||||
<string name="screenIs">Bildschirm ist %1$s</string>
|
||||
<string name="sendEmailToDev">Email an Entwickler schicken</string>
|
||||
<string name="controlCenter">Steuerungszentrale</string>
|
||||
<string name="emailContactNotice">Email ist mein bevorzugtes Kommunikationsmittel, um Fehler zu melden, Fragen zu stellen or Vorschläge zu machen. Bitte gehen Sie für weitere Infos in die Steuerungszentrale.\nViele Fragen können nicht einfach gleich beantwortet werden, sondern erfordern eine technische Prüfung. Haben Sie also bitte etwas Geduld.</string>
|
||||
<string name="contactNotice">Email ist mein bevorzugtes Kommunikationsmittel, um Fehler zu melden, Fragen zu stellen or Vorschläge zu machen. Bitte gehen Sie für weitere Infos in die Steuerungszentrale.\nViele Fragen können nicht einfach gleich beantwortet werden, sondern erfordern eine technische Prüfung. Haben Sie also bitte etwas Geduld.\n\nAlternativ können Sie Ihre Frage im <a href="https://forum.server47.de">Forum</a> stellen.</string>
|
||||
<string name="featureCeasedToWorkLastWorkingAndroidVersion">Aufgrund Google\'s unendlicher Weisheit, ist die letzte Android Version, mit der diese Funktion noch funktioniert, die Version %1$s. Sie können es hier einrichten, aber vermutlich wird es keine Auswirkung haben.</string>
|
||||
<string name="musicPlaying">Musik läuft</string>
|
||||
<string name="selectParameters">Wählen Sie die Parameter</string>
|
||||
@@ -778,6 +779,7 @@
|
||||
<string name="checkVariable">Variable prüfen</string>
|
||||
<string name="checkVariableExplanation">Wenn Sie den Wert der Variablen leer lassen, darf sie nicht gesetzt sein, damit die Bedingung als erfüllt gilt.</string>
|
||||
<string name="variableCheckString">wenn Variable %1$s den Wert %2$s hat</string>
|
||||
<string name="variableCheckStringNot">wenn die Variable %1$s nicht %2$s ist</string>
|
||||
<string name="variableCheckStringDeleted">wenn Variable %1$s nicht gesetzt ist</string>
|
||||
<string name="messageType">Nachrichtentyp</string>
|
||||
<string name="sms">SMS</string>
|
||||
@@ -813,7 +815,7 @@
|
||||
<string name="setLocationServiceCapital">Ortungsdienst einstellen</string>
|
||||
<string name="writeSecureSettingsNotice">Leider kann die Erlaubnis WRITE_SECURE_SETTINGS nicht direkt auf Ihrem Android-Gerät erteilt werden. Stattdessen müssen Sie Ihr Gerät an einen Computer anschließen und die Berechtigung über ADB erteilen. Klicken Sie hier, um zu erfahren, wie Sie es gewähren können: https://server47.de/automation/adb_hack.php</string>
|
||||
<string name="actionSetLocationService">Ortungsdienst</string>
|
||||
<string name="triggerUrlVariableHint">Das Ergebnis dieser Anfrage wird in der Variablen LAST_TRIGGERURL_RESULT gespeichert, wenn Sie es von einer anderen Regel aus überprüfen möchten. Im Falle von HTTP-Fehlern wie 404 ist der Wert \"HTTP_ERROR\".</string>
|
||||
<string name="triggerUrlVariableHint">Das Ergebnis dieser Anfrage wird in der Variablen last_trigger_url_result gespeichert, wenn Sie es von einer anderen Regel aus überprüfen möchten. Im Falle von HTTP-Fehlern wie 404 ist der Wert \"HTTP_ERROR\".</string>
|
||||
<string name="calendarEvent">Kalendertermin</string>
|
||||
<string name="eventIsCurrentlyHappening">Termin ist derzeit aktiv</string>
|
||||
<string name="calendarEventCapital">Kalendertermin</string>
|
||||
@@ -855,4 +857,14 @@
|
||||
<string name="triggerChargingComment">Der Typ wird nur ausgewertet, wenn das Gerät aufgeladen wird. Wenn \"Nicht laden\" ausgewählt ist, wird es bei jedem vorherigen Ladetyp ausgelöst. Wenn Sie dies auswerten möchten, sollten Sie die Verwendung der Variablen trigger/action in Betracht ziehen.</string>
|
||||
<string name="helpTextProfiles">Ein Profil ist eine Sammlung von Einstellungen für Klingeltöne, Lautstärke und andere audiobezogene Einstellungen, die Sie über Regeln oder manuell anwenden können.\\n\\nEs ist auch möglich, das zuletzt aktivierte Profil als Auslöser abzufragen. Im Normalfall wird nur abgefragt, ob das Profil das zuletzt aktivierte war (unabhängig davon, ob in der Zwischenzeit bestimmte Audioeinstellungen geändert wurden). Sie können aber auch die einzelnen Einstellungen vergleichen lassen.</string>
|
||||
<string name="serviceWontStartNoActivatedRules">Es sind keine aktivierten Regeln definiert. Der Dienst wird nicht gestartet.</string>
|
||||
<string name="importChooseFolderNotice">Versuchen Sie im folgenden Dialog nicht, bestimmte Dateien auszuwählen, sondern wählen Sie den Ordner aus, in dem sich die Automation-Sicherungsdateien befinden. Wenn die Schaltfläche \"Auswählen\" deaktiviert ist, haben Sie eine Android-Einschränkung gefunden. Versuchen Sie in diesem Fall zuerst, die Dateien in ein Unterverzeichnis zu verschieben.</string>
|
||||
<string name="matches">stimmt überein</string>
|
||||
<string name="doesNotMatch">stimmt nicht überein</string>
|
||||
<string name="logToConsole">In Konsole protokollieren (logcat)</string>
|
||||
<string name="locationPermissionRequired">Um fortzufahren, ist die Standortberechtigung erforderlich.</string>
|
||||
<string name="Android14TimePickerHint">Anscheinend gibt es in Android 14 einen Fehler in Bezug auf einen Zeitauswahl-Dialog. Wenn der folgende Bildschirm abstürzt, wenn Sie versuchen, die Aufwärts- und Ab-Tasten neben einem Feld zu verwenden, versuchen Sie stattdessen, Zahlen über die Tastatur einzugeben. Ich habe nie eine Lösung dafür gefunden und meine App ist nicht die einzige, die betroffen ist. Es sieht so aus, als ob dies in Android 15 behoben wurde.</string>
|
||||
<string name="screenBrightGoogleComment">Da jemand bei Google anscheinend was geraucht hat, verhält sich die Einstellung der Bildschirmhelligkeit in einigen Android-Versionen sehr seltsam. Dieses Verhalten hat nichts mit dem zu tun, was Sie laut ihrer eigenen Dokumentation erwarten würden. Ich habe versucht, mich so gut wie möglich daran anzupassen, erwarte aber keine sehr genauen Einstellungen. Das bedeutet, dass die resultierende Einstellung etwas von der hier konfigurierten abweichen kann.</string>
|
||||
<string name="version143StartOtherActivityHint">In Version 1.8.2 war es notwendig, die Art und Weise, wie Aktionen zum Starten anderer Programme gespeichert werden, zu überarbeiten. Die Kompatibilität konnte nicht sichergestellt werden. Bitte überprüfen und bearbeiten Sie Ihre Aktionen zum Starten anderer Aktivitäten, um sicherzustellen, dass sie noch funktionieren.</string>
|
||||
<string name="disable">Deaktivieren</string>
|
||||
<string name="enable">Aktivieren</string>
|
||||
</resources>
|
||||
@@ -32,7 +32,7 @@
|
||||
<string name="thursday">Jueves</string>
|
||||
<string name="friday">Viernes</string>
|
||||
<string name="saturday">Sábado</string>
|
||||
<string name="headphoneMicrophone">Micrófono</string>
|
||||
<string name="headphoneMicrophone">con micrófono</string>
|
||||
<string name="whatsThis">Qué es esto?</string>
|
||||
<string name="privacyLocationingTitle">Solo usar localización privada</string>
|
||||
<string name="volumeAlarms">Alarmas</string>
|
||||
@@ -249,7 +249,8 @@
|
||||
<string name="useAuthentication">Usar verificación de la autenticidad</string>
|
||||
<string name="radiusWithUnit">Radio [m]</string>
|
||||
<string name="volumes">Volumenes</string>
|
||||
<string name="volumeRingtoneNotifications">Sonido polifónico ý notificaciónes</string>
|
||||
<string name="volumeNotifications">notificaciónes</string>
|
||||
<string name="volumeRingtone">Sonido polifónico</string>
|
||||
<string name="notificationRingtone">Sonido polifónico para notificaciónes</string>
|
||||
<string name="incomingCallsRingtone">Sonido de llamadas</string>
|
||||
<string name="batteryLevel">Nivel de la bateria</string>
|
||||
@@ -367,7 +368,7 @@
|
||||
<string name="networkAccuracy">Red exactitud [m]</string>
|
||||
<string name="minimumTimeForLocationUpdates">Tiempo mínimo para cambio en milisegundos para actualizar posición</string>
|
||||
<string name="timeForUpdate">Tiempo para actualizar [milisegundos]</string>
|
||||
<string name="urlLegend">Variables: Puede usar esas variables. Mientras ejecuta van a sustituir con los valores correspondientes en su dispositivo. Incluya las paréntecis en su texto.\n\n[uniqueid] - el número único de su dispositivo\n[serialnr] - el número de serie de su dispositivo (< Android 9)\n[latitude] - su latitud\n[longitude] - su longitud\n[phonenr] - Ùltimo número de llamada realizada tanto de salida como entrante\n[d] - Dia del mes, 2 digitos con cero al comienzo\n[m] - número del mes, 2 digitos con cero al comienzo\n[Y] - Número del año, 4 digitos\n[h] - Hora, formato 12 horas con cero al comienzo\n[H] - Hora, formato 24 horas con cero al comienzo\n[i] - Minutos con cero al comienzo\n[s] - Segundos con cero al comienzo\n[ms] - milisegundos\n[notificationTitle] - Título de la última notificación\n[notificationText] - Texto de la última notificación\n[last_triggerurl_result] - El resultado de la última ejecución de la acción triggerUrl\n[last_run_executable_exit_code] - El código de salida de la última acción ejecutable ejecutada\n[last_run_executable_output] - El resultado de la última acción ejecutable ejecutada (solo para no root)Titel des letzten Regel-auslösenden Kalendertermins\n[last_calendar_title] - Título de la ultima cita en el calendar que ejecutó una regla\n[last_calendar_description] - Descriptión de la ultima cita en el calendar que ejecutó una regla\n[last_calendar_location] - Ubicación de la ultima cita en el calendar que ejecutó una regla\n[variable-VARIABLENAME] - El valor de la variable definida personalizada</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 (< Android 9)\n[latitude] - su latitud\n[longitude] - su longitud\n[phonenr] - Ùltimo número de llamada realizada tanto de salida como entrante\n[d] - Dia del mes, 2 digitos con cero al comienzo\n[m] - número del mes, 2 digitos con cero al comienzo\n[Y] - Número del año, 4 digitos\n[h] - Hora, formato 12 horas con cero al comienzo\n[H] - Hora, formato 24 horas con cero al comienzo\n[i] - Minutos con cero al comienzo\n[s] - Segundos con cero al comienzo\n[ms] - milisegundos\n[w] - Día de la semana en forma de texto\n[F] - Mes en forma de texto\n[notificationTitle] - Título de la última notificación\n[notificationText] - Texto de la última notificación\n[last_trigger_url_result] - El resultado de la última ejecución de la acción trigger url\n[last_run_executable_exit_code] - El código de salida de la última acción ejecutable ejecutada\n[last_run_executable_output] - El resultado de la última acción ejecutable ejecutada (solo para no root)\n[last_calendar_title] - Título de la ultima cita en el calendar que ejecutó una regla\n[last_calendar_description] - Descriptión de la ultima cita en el calendar que ejecutó una regla\n[last_calendar_location] - Ubicación de la ultima cita en el calendar que ejecutó una regla\n[variable-VARIABLENAME] - El valor de la variable definida personalizada</string>
|
||||
<string name="screenRotationAlreadyEnabled">Rotación del monitor todavia esta activado.</string>
|
||||
<string name="screenRotationAlreadyDisabled">Rotación del monitor todavia esta desactivado.</string>
|
||||
<string name="needLocationPermForWifiList">Se puede usar la lista de wifis conocidos para determinar los sitios en los cuales estuvo. Por eso el permiso de localización es necesario para cargar la lista de wifis. Si quiere elegir uno de la lista tiene que conceder el permiso. En caso contrario todavia puede introducir un nombre wifi manualmente.</string>
|
||||
@@ -696,7 +697,7 @@
|
||||
<string name="screenIs">pantalla esta %1$s</string>
|
||||
<string name="sendEmailToDev">Enviar email al desrollador</string>
|
||||
<string name="featureCeasedToWorkLastWorkingAndroidVersion">Debido a la infinita sabiduría de Google, la última versión de Android en la que se sabe que funciona esta función es %1$s. Puede configurarlo, pero probablemente no tendrá ningún efecto.</string>
|
||||
<string name="emailContactNotice">El correo electrónico es mi método preferido de contacto para informar errores, hacer preguntas o hacer propuestas. Vaya al centro de control para obtener más información.\nMuchas preguntas no se pueden responder de inmediato, pero requieren cierta investigación técnica. Así que, por favor, tengan un poco de paciencia.</string>
|
||||
<string name="contactNotice">El correo electrónico es mi método preferido de contacto para informar errores, hacer preguntas o hacer propuestas. Vaya al centro de control para obtener más información.\nMuchas preguntas no se pueden responder de inmediato, pero requieren cierta investigación técnica. Así que, por favor, tengan un poco de paciencia. \n\nAlternativamente, tiene la opción de hacer sus preguntas en el <a href="https://forum.server47.de">foro</a>.</string>
|
||||
<string name="actionMediaControlNotice">Ten en cuenta que esta acción puede no funcionar con TODOS los jugadores. E incluso si lo hace, no todos los botones funcionan necesariamente.</string>
|
||||
<string name="musicPlaying">Musica esta reproduciendo</string>
|
||||
<string name="selectParameters">Elije parametros</string>
|
||||
@@ -768,6 +769,7 @@
|
||||
<string name="endPhoneCall">Terminar llamada de teléfono</string>
|
||||
<string name="android.permission.ANSWER_PHONE_CALLS">Terminar llamda de teléfono</string>
|
||||
<string name="settingsReferringToRestrictedFeaturesInGoogle">La configuración y/o las reglas hacen referencia a funciones que no se pueden proporcionar en la versión de Google Play. Entre otras cosas que incluye todo lo relacionado con llamadas telefónicas y mensajes de texto.</string>
|
||||
<string name="variableCheckStringNot">Si la variable %1$s no es %2$s</string>
|
||||
<string name="variableCheckStringDeleted">Si la variable %1$s no está establecida</string>
|
||||
<string name="variableCheckString">Si la variable %1$s es %2$s</string>
|
||||
<string name="checkVariableExplanation">Si deja el valor vacío, no se debe establecer la variable para que la condición devuelva true.</string>
|
||||
@@ -800,7 +802,7 @@
|
||||
<string name="languageChineseChina">Chino (China)</string>
|
||||
<string name="wifiTriggerDisconnectionHint">Este activador será válido si acabas de desconectarte del wifi especificado anteriormente O mientras el servicio aún se está iniciando y si no estás conectado a ningún wifi. Si desea que el activador se active solo cuando se desconecte explícitamente de una determinada red WiFi, agregue otro activador \"el servicio no se está iniciando\".</string>
|
||||
<string name="className">Nombre de la clase</string>
|
||||
<string name="startAppByStartForegroundService">a través de startForegroundService((</string>
|
||||
<string name="startAppByStartForegroundService">a través de startForegroundService()</string>
|
||||
<string name="method">Método</string>
|
||||
<string name="takeScreenshot">Tomar captura de pantalla</string>
|
||||
<string name="android.permission.BIND_ACCESSIBILITY_SERVICE">Enlazar al servicio de accesibilidad</string>
|
||||
@@ -812,7 +814,7 @@
|
||||
<string name="setLocationServiceCapital">Establecer el servicio de ubicación</string>
|
||||
<string name="writeSecureSettingsNotice">Desafortunadamente, el permiso WRITE_SECURE_SETTINGS no se puede otorgar directamente en su dispositivo Android. En su lugar, debe conectar su dispositivo a una computadora y otorgar el permiso a través de ADB. Haga clic aquí para saber cómo otorgarlo: https://server47.de/automation/adb_hack.php</string>
|
||||
<string name="actionSetLocationService">Servicio de localización</string>
|
||||
<string name="triggerUrlVariableHint">El resultado de esta solicitud se almacenará en la variable LAST_TRIGGERURL_RESULT si desea verificarlo desde otra regla. En caso de errores HTTP como 404, el valor será \"HTTP_ERROR\".</string>
|
||||
<string name="triggerUrlVariableHint">El resultado de esta solicitud se almacenará en la variable last_trigger_url_result si desea verificarlo desde otra regla. En caso de errores HTTP como 404, el valor será \"HTTP_ERROR\".</string>
|
||||
<string name="calendarEvent">Evento de calendario</string>
|
||||
<string name="eventIsCurrentlyHappening">El evento está activo actualmente</string>
|
||||
<string name="calendarEventCapital">evento de calendario</string>
|
||||
@@ -854,4 +856,14 @@
|
||||
<string name="triggerChargingComment">El tipo solo se evaluará si el dispositivo se está cargando. Si se elige no cargar, se disparará en cualquier tipo de carga anterior. Si desea evaluar eso, considere la posibilidad de usar las variables trigger/action.</string>
|
||||
<string name="helpTextProfiles">Un perfil es una colección de ajustes para tonos de llamada, volúmenes y otros ajustes relacionados con el audio que puede aplicar desde reglas o aplicarlo manualmente.\\n\\nTambién es posible consultar el último perfil activado como disparador. En el caso normal, solo consultará si el perfil fue el último activado (independientemente de si se han cambiado configuraciones de audio específicas mientras tanto). Pero también puede comparar los ajustes individuales.</string>
|
||||
<string name="serviceWontStartNoActivatedRules">No se han definido reglas activadas. El servicio no se inicia.</string>
|
||||
<string name="importChooseFolderNotice">En el siguiente diálogo, no intente seleccionar archivos específicos, sino que elija la carpeta en la que residen los archivos de copia de seguridad de Automation. Si el botón Elegir está desactivado, ha encontrado una limitación de Android. En ese caso, intente mover los archivos a un subdirectorio primero.</string>
|
||||
<string name="matches">coincide</string>
|
||||
<string name="doesNotMatch">no coincide</string>
|
||||
<string name="logToConsole">Registrar en la consola (logcat)</string>
|
||||
<string name="locationPermissionRequired">Se requiere permiso de ubicación para continuar.</string>
|
||||
<string name="Android14TimePickerHint">Aparentemente, hay un error en Android 14 con respecto a un cuadro de diálogo del selector de tiempo. Si la siguiente pantalla se bloquea al intentar usar los botones arriba y abajo junto a un campo, intente ingresar números con el teclado. Nunca encontré una solución para esto y mi aplicación no es la única afectada. Parece que esto se solucionó en Android 15.</string>
|
||||
<string name="screenBrightGoogleComment">Debido a que alguien en Google parece haber estado fumando algo, la configuración de brillo de la pantalla se ha comportado de manera muy extraña para algunas versiones de Android. Este comportamiento no tiene nada que ver con lo que se podría pensar que hace según su propia documentación. He intentado adaptarme a esto lo mejor que he podido, pero no espero ajustes muy precisos. Eso significa que la configuración resultante puede desviarse un poco de lo que configura aquí.</string>
|
||||
<string name="version143StartOtherActivityHint">En la versión 1.8.2 fue necesario revisar la forma en que se guardaban las acciones para iniciar otros programas. No se pudo garantizar la compatibilidad. Compruebe y edite sus acciones de inicio de otras actividades para asegurarse de que siguen funcionando.</string>
|
||||
<string name="disable">Desactivar</string>
|
||||
<string name="enable">Activar</string>
|
||||
</resources>
|
||||
@@ -65,7 +65,7 @@
|
||||
<string name="end">Arrêt</string>
|
||||
<string name="save">Enregistrer</string>
|
||||
<string name="urlToTrigger">URL à déclencher :</string>
|
||||
<string name="urlLegend">Variables :\nVous pouvez utiliser les variables suivantes. Lors du déclenchement, elles seront remplacées par les variables correspondantes sur votre appareil. Insérez les parenthèses dans votre texte.\n\n[uniqueid] - Identifiant unique de votre appareil\n[serialnr] - Numéro de série de votre appareil (< Android 9)\n[latitude] - Latitude de votre appraeil\n[longitude] - Longitude de votre appraeil\n[phonenr] - Numéro des derniers appels entrants ou sortants\n[d] - Jour du mois, @ chiffres commençant par 0\n[m] - Valeur numérique du mois, avec @ chiffres\n[Y] - Valeur numérique de l’année, $ chiffres\n[h] - Format horaire 12 heures, 2 chiffres\n[H] - Format horaire 24 heures, 2 chiffres\n[i] - Nombre de minutes, 2 chiffres\n[s] - Nombre de secondes, 2 chiffres\n[ms] - Nombre de millisecondes\n[notificationTitle] - titre de la dernière notification\n[notificationText] - texte de la dernière notification\n[last_triggerurl_result] - Résultat de l\'exécution de la dernière action triggerUrl\n[last_run_executable_exit_code] - Le code de sortie de la dernière action exécutable exécutée\n[last_run_executable_output] - La sortie de la dernière action exécutable exécutée (uniquement pour les non-roots)\n[last_calendar_title] - Titre du dernier événement de calendrier déclenchant une règle\n[last_calendar_description] - Description du dernier événement de calendrier déclenchant une règle\n[last_calendar_location] - Emplacement du dernier événement de calendrier déclenchant la règle\n[variable-VARIABLENAME] - Valeur de votre variable définie personnalisée</string>
|
||||
<string name="urlLegend">Variables :\nVous pouvez utiliser les variables suivantes. Lors du déclenchement, elles seront remplacées par les variables correspondantes sur votre appareil. Insérez les parenthèses dans votre texte.\n\n[uniqueid] - Identifiant unique de votre appareil\n[serialnr] - Numéro de série de votre appareil (< Android 9)\n[latitude] - Latitude de votre appraeil\n[longitude] - Longitude de votre appraeil\n[phonenr] - Numéro des derniers appels entrants ou sortants\n[d] - Jour du mois, @ chiffres commençant par 0\n[m] - Valeur numérique du mois, avec @ chiffres\n[Y] - Valeur numérique de l’année, $ chiffres\n[h] - Format horaire 12 heures, 2 chiffres\n[H] - Format horaire 24 heures, 2 chiffres\n[i] - Nombre de minutes, 2 chiffres\n[s] - Nombre de secondes, 2 chiffres\n[ms] - Nombre de millisecondes\n[w] - Jour de la semaine sous forme de texte\n[F] - Mois sous forme de texte\n[notificationTitle] - titre de la dernière notification\n[notificationText] - texte de la dernière notification\n[last_trigger_url_result] - Résultat de l\'exécution de la dernière action trigger url\n[last_run_executable_exit_code] - Le code de sortie de la dernière action exécutable exécutée\n[last_run_executable_output] - La sortie de la dernière action exécutable exécutée (uniquement pour les non-roots)\n[last_calendar_title] - Titre du dernier événement de calendrier déclenchant une règle\n[last_calendar_description] - Description du dernier événement de calendrier déclenchant une règle\n[last_calendar_location] - Emplacement du dernier événement de calendrier déclenchant la règle\n[variable-VARIABLENAME] - Valeur de votre variable définie personnalisée</string>
|
||||
<string name="wifi">wifi</string>
|
||||
<string name="activating">Allumer</string>
|
||||
<string name="deactivating">Éteindre</string>
|
||||
@@ -371,7 +371,7 @@
|
||||
<string name="headsetConnected">Écouteurs (type : %1$s) est connecté</string>
|
||||
<string name="headsetDisconnected">Écouteurs (type : %1$s) est déconnecté</string>
|
||||
<string name="headphoneSimple">Écouteurs</string>
|
||||
<string name="headphoneMicrophone">Microphone</string>
|
||||
<string name="headphoneMicrophone">avec microphone</string>
|
||||
<string name="headphoneAny">Tous</string>
|
||||
<string name="headphoneSelectType">Choisissez le type d’écouteurs</string>
|
||||
<string name="whatsThis">Qu’est ce que c’est ?</string>
|
||||
@@ -391,7 +391,8 @@
|
||||
<string name="notificationRingtone">Sonnerie des notifications</string>
|
||||
<string name="hapticFeedback">Vibration au toucher</string>
|
||||
<string name="volumeMusicVideoGameMedia">Musiques, vidéos, jeux et autres médias</string>
|
||||
<string name="volumeRingtoneNotifications">Sonnerie et notifications</string>
|
||||
<string name="volumeNotifications">Notifications</string>
|
||||
<string name="volumeRingtone">Sonnerie</string>
|
||||
<string name="volumeAlarms">Alarmes</string>
|
||||
<string name="change">Changement</string>
|
||||
<string name="audibleSelection">Son de sélection (son émis lors d’une sélection à l’écran)</string>
|
||||
@@ -678,7 +679,7 @@
|
||||
<string name="comparisonCaseInsensitive">La coparaisonn est sensible à la casse du texte</string>
|
||||
<string name="profileWarning">Les paramètres que vous pouvez régler ici affectent les évènements audio sur votre télephone. Ils peuvent même annuler votre alarme de réveil. Donc, quoi que vous fassiez, il est fortement recommandé de le tester, même après les mises à jour d’Android.</string>
|
||||
<string name="ifString">si</string>
|
||||
<string name="emailContactNotice">L’e-mail est mon moyen de contact préféré pour signaler les bogues, poser des questions ou faire des propositions. Rendez-vous sur le centre de contrôle pour en savoir plus. Des questions multiples peuvent ne pas recevoir de réponse immédiate, mais nécessitent des recherches techniques. Veuillez donc faire preuve de patience.</string>
|
||||
<string name="contactNotice">L’e-mail est mon moyen de contact préféré pour signaler les bogues, poser des questions ou faire des propositions. Rendez-vous sur le centre de contrôle pour en savoir plus. Des questions multiples peuvent ne pas recevoir de réponse immédiate, mais nécessitent des recherches techniques. Veuillez donc faire preuve de patience. \n\nSinon, vous avez la possibilité de poser vos questions dans le <a href="https://forum.server47.de">forum</a>.</string>
|
||||
<string name="controlCenter">Centre de contrôle</string>
|
||||
<string name="sendEmailToDev">Envoyer un email au développeur</string>
|
||||
<string name="screenIs">l’écran est %1$s</string>
|
||||
@@ -768,6 +769,7 @@
|
||||
<string name="endPhoneCall">Mettre fin à l’appel téléphonique</string>
|
||||
<string name="android.permission.ANSWER_PHONE_CALLS">Mettre fin à l’appel téléphonique</string>
|
||||
<string name="settingsReferringToRestrictedFeaturesInGoogle">Vos paramètres et/ou règles font actuellement référence à des fonctionnalités qui ne peuvent pas être fournies dans la version Google Play. Cela inclut, entre autres, tout ce qui concerne les appels téléphoniques et les messages textuels.</string>
|
||||
<string name="variableCheckStringNot">si la variable %1$s n\'est pas %2$s</string>
|
||||
<string name="variableCheckStringDeleted">si la variable %1$s n’est pas définie</string>
|
||||
<string name="variableCheckString">si la variable %1$s est %2$s</string>
|
||||
<string name="checkVariableExplanation">Si vous laissez la valeur vide, la variable ne doit pas être définie pour que la condition renvoie la valeur true.</string>
|
||||
@@ -812,7 +814,7 @@
|
||||
<string name="setLocationServiceCapital">Définir le service de localisation</string>
|
||||
<string name="writeSecureSettingsNotice">Malheureusement, l\'autorisation WRITE_SECURE_SETTINGS ne peut pas être donnée directement sur votre appareil Android. Au lieu de cela, vous devez connecter votre appareil à un ordinateur et accorder l\'autorisation via ADB. Cliquez ici pour savoir comment l\'accorder : https://server47.de/automation/adb_hack.php</string>
|
||||
<string name="actionSetLocationService">Service de localisation</string>
|
||||
<string name="triggerUrlVariableHint">Le résultat de cette requête sera stocké dans la variable LAST_TRIGGERURL_RESULT si vous souhaitez le vérifier à partir d\'une autre règle. En cas d\'erreurs HTTP comme 404, la valeur sera « HTTP_ERROR ».</string>
|
||||
<string name="triggerUrlVariableHint">Le résultat de cette requête sera stocké dans la variable last_triggerurl_result si vous souhaitez le vérifier à partir d\'une autre règle. En cas d\'erreurs HTTP comme 404, la valeur sera « HTTP_ERROR ».</string>
|
||||
<string name="calendarEvent">Événement de calendrier</string>
|
||||
<string name="eventIsCurrentlyHappening">L\'événement est actuellement actif</string>
|
||||
<string name="calendarEventCapital">Evénement de calendrier</string>
|
||||
@@ -854,4 +856,14 @@
|
||||
<string name="triggerChargingComment">Le type ne sera évalué que si l\'appareil est en charge. Si l\'option Ne pas charger est sélectionnée, elle se déclenchera à n\'importe quel type de charge précédent. Si vous souhaitez évaluer cela, envisagez d\'utiliser les variables déclencheur/action.</string>
|
||||
<string name="helpTextProfiles">Un profil est un ensemble de paramètres pour les sonneries, les volumes et d\'autres paramètres liés à l\'audio que vous pouvez faire appliquer à partir de règles ou appliquer manuellement.\\n\\nIl est également possible d\'interroger le dernier profil activé en tant que déclencheur. Dans le cas normal, il ne demandera que si le profil était le dernier activé (indépendamment si des paramètres audio spécifiques ont été modifiés entre-temps). Mais vous pouvez également comparer les différents paramètres.</string>
|
||||
<string name="serviceWontStartNoActivatedRules">Aucune règle activée n\'a été définie. Le service ne démarre pas.</string>
|
||||
<string name="version143StartOtherActivityHint">Dans la version 1.8.2, il était nécessaire de revoir la façon dont les actions pour démarrer d\'autres programmes étaient enregistrées. La compatibilité n\'a pas pu être assurée. Veuillez vérifier et modifier vos actions de démarrage d\'autres activités pour vous assurer qu\'elles fonctionnent toujours.</string>
|
||||
<string name="importChooseFolderNotice">Dans la boîte de dialogue suivante, n\'essayez pas de sélectionner des fichiers spécifiques, mais choisissez le dossier dans lequel résident les fichiers de sauvegarde Automation. Si le bouton de sélection est désactivé, vous avez trouvé une limitation Android. Dans ce cas, essayez d\'abord de déplacer les fichiers dans un sous-répertoire.</string>
|
||||
<string name="matches">correspond</string>
|
||||
<string name="doesNotMatch">ne correspond pas</string>
|
||||
<string name="logToConsole">Log vers la console (logcat)</string>
|
||||
<string name="locationPermissionRequired">Une autorisation de localisation est requise pour continuer.</string>
|
||||
<string name="Android14TimePickerHint">Apparemment, il y a un bogue dans Android 14 concernant une boîte de dialogue de sélection de temps. Si l\'écran suivant se bloque lorsque vous essayez d\'utiliser les boutons haut et bas en regard d\'un champ, essayez plutôt de saisir des chiffres avec le clavier. Je n\'ai jamais trouvé de solution à cela et mon application n\'est pas la seule touchée. Il semble que cela ait été corrigé dans Android 15.</string>
|
||||
<string name="screenBrightGoogleComment">Parce que quelqu\'un chez Google semble avoir fumé quelque chose, le réglage de la luminosité de l\'écran se comporte très bizarrement pour certaines versions d\'Android. Ce comportement n\'a rien à voir avec ce que vous pensez qu\'il fait selon leur propre documentation. J\'ai essayé de m\'y adapter du mieux que j\'ai pu, mais je ne m\'attends pas à des réglages très précis. Cela signifie que le paramètre résultant peut s\'écarter un peu de ce que vous configurez ici.</string>
|
||||
<string name="disable">Désactiver</string>
|
||||
<string name="enable">Activer</string>
|
||||
</resources>
|
||||
|
||||
@@ -219,7 +219,7 @@
|
||||
<string name="gpsComparison">Confronto del GPS</string>
|
||||
<string name="hapticFeedback">Riscontro tattile (vibra al tocco)</string>
|
||||
<string name="headphoneAny">Uno dei due</string>
|
||||
<string name="headphoneMicrophone">Microfono</string>
|
||||
<string name="headphoneMicrophone">con microfono</string>
|
||||
<string name="headphoneSelectType">Seleziona il tipo di auricolare</string>
|
||||
<string name="headphoneSimple">Auricolari</string>
|
||||
<string name="headsetConnected">"Connessi auricolari (tipo: %1$s) "</string>
|
||||
@@ -542,7 +542,7 @@
|
||||
<string name="tuesday">Martedì</string>
|
||||
<string name="unknownError">Errore indeterminato.</string>
|
||||
<string name="until">finchè</string>
|
||||
<string name="urlLegend">Variabili:\n È possibile utilizzare le seguenti variabili. Quando attivate, saranno sostituite con il valore corrispondente sul tuo dispositivo. Includi le parentesi nel tuo testo.\n\n[uniqueid] - L\'ID unico del tuo dispositivo\n[serialnr] - Il numero di serie del tuo dispositivio (< Android 9)\n[latitude] - La latitudine del tuo dispositivo\n[longitude] - La longitudine del tuo dispositivo\n[phonenr] - Numero dell\'ultima chiamata (entrante o uscente)\n[d] - Il giorno del mese, sempre 2 cifre con zero iniziale \n[m] - Mese in formato numerico, sempre 2 cifre con zero iniziale \n[Y] - L\’anno, sempre con 4 cifre\n[h] - Ore in formato 12 ore, sempre 2 cifre con due punti\n[H] - Ore in formato 24 ore, sempre 2 cifre con due punti\n[i] - Minuti, sempre 2 cifre\n[s] - Secondi, sempre 2 cifre\n[ms] - millisecondi, sempre 3 cifre\n[notificationTitle] - titolo dell\'ultima notifica\n[notificationText] - testo dell\'ultima notifica\n[last_triggerurl_result] - Risultato dell\'esecuzione dell\'ultima azione triggerUrl\n[last_run_executable_exit_code] - Codice di uscita dell\'ultima azione eseguibile di esecuzione\n[last_run_executable_output] - L\'output dell\'ultima azione eseguibile eseguita (solo per i non root)\n[last_calendar_title] - Titolo dell\'ultimo evento di calendario che ha attivato la regola\n[last_calendar_description] - Descrizione dell\'ultimo evento del calendario che ha attivato la regola\n[last_calendar_location] - Posizione dell\'ultimo evento del calendario che ha attivato la regola\n[variable-VARIABLENAME] - Il valore della variabile definita in modo personalizzato</string>
|
||||
<string name="urlLegend">Variabili:\n È possibile utilizzare le seguenti variabili. Quando attivate, saranno sostituite con il valore corrispondente sul tuo dispositivo. Includi le parentesi nel tuo testo.\n\n[uniqueid] - L\'ID unico del tuo dispositivo\n[serialnr] - Il numero di serie del tuo dispositivio (< Android 9)\n[latitude] - La latitudine del tuo dispositivo\n[longitude] - La longitudine del tuo dispositivo\n[phonenr] - Numero dell\'ultima chiamata (entrante o uscente)\n[d] - Il giorno del mese, sempre 2 cifre con zero iniziale \n[m] - Mese in formato numerico, sempre 2 cifre con zero iniziale \n[Y] - L\’anno, sempre con 4 cifre\n[h] - Ore in formato 12 ore, sempre 2 cifre con due punti\n[H] - Ore in formato 24 ore, sempre 2 cifre con due punti\n[i] - Minuti, sempre 2 cifre\n[s] - Secondi, sempre 2 cifre\n[ms] - millisecondi, sempre 3 cifre\n[w] - Giorno della settimana in forma di testo\n[F] - Mese in forma di testo\n[notificationTitle] - titolo dell\'ultima notifica\n[notificationText] - testo dell\'ultima notifica\n[last_triggerurl_result] - Risultato dell\'esecuzione dell\'ultima azione triggerUrl\n[last_run_executable_exit_code] - Codice di uscita dell\'ultima azione eseguibile di esecuzione\n[last_run_executable_output] - L\'output dell\'ultima azione eseguibile eseguita (solo per i non root)\n[last_calendar_title] - Titolo dell\'ultimo evento di calendario che ha attivato la regola\n[last_calendar_description] - Descrizione dell\'ultimo evento del calendario che ha attivato la regola\n[last_calendar_location] - Posizione dell\'ultimo evento del calendario che ha attivato la regola\n[variable-VARIABLENAME] - Il valore della variabile definita in modo personalizzato</string>
|
||||
<string name="urlToTrigger">URL da caricare:</string>
|
||||
<string name="urlTooShort">L\'url deve avere almeno 10 caratteri.</string>
|
||||
<string name="usbTetheringFailForAboveGingerbread">Questo molto probabilmente non funzionerà dato che sei su una versione superiore ad Android 2.3. Tuttavia è possibile utilizzare la connessione wifi tethering per attivare la regola.</string>
|
||||
@@ -560,7 +560,8 @@
|
||||
<string name="vibrateWhenRinging">Vibra alla chiamata</string>
|
||||
<string name="volumeAlarms">Allarmi sonori</string>
|
||||
<string name="volumeMusicVideoGameMedia">Multimedia (musica, video …)</string>
|
||||
<string name="volumeRingtoneNotifications">Toni e notifiche</string>
|
||||
<string name="volumeNotifications">Notifiche</string>
|
||||
<string name="volumeRingtone">Toni</string>
|
||||
<string name="volumeTest">Calibrazione audio</string>
|
||||
<string name="volumeCalibrationExplanation">Per calcolare il valore del rumore di fondo in dB è necessario specificare un valore di riferimento fisico (si prega di leggere Wikipedia per ulteriori informazioni). Questo valore è probabilmente diverso per ogni telefono. Trascinare il cursore per modificare il valore di riferimento fisico definito. Più alto è il valore di riferimento e più basso sarà il valore misurato in dB. Misurazioni costanti saranno effettuate ogni %1$s secondi ed i risultati visualizzati sotto. Premere indietro quando hai trovato un valore adeguato.</string>
|
||||
<string name="volumes">Volumi</string>
|
||||
@@ -698,7 +699,7 @@
|
||||
<string name="screenIs">lo schermo è %1$s</string>
|
||||
<string name="sendEmailToDev">Invia email allo sviluppatore</string>
|
||||
<string name="controlCenter">Centro di controllo</string>
|
||||
<string name="emailContactNotice">L\'e-mail è il mio metodo di contatto preferito per segnalare bug, porre domande o fare proposte. Vai al centro di controllo per saperne di più.\nMolte domande non possono essere risolte immediatamente, ma richiedono alcune ricerche tecniche. Quindi, per favore, abbiate un po\' di pazienza.</string>
|
||||
<string name="contactNotice">L\'e-mail è il mio metodo di contatto preferito per segnalare bug, porre domande o fare proposte. Vai al centro di controllo per saperne di più.\nMolte domande non possono essere risolte immediatamente, ma richiedono alcune ricerche tecniche. Quindi, per favore, abbiate un po\' di pazienza. \n\nIn alternativa hai la possibilità di porre le tue domande nel <a href="https://forum.server47.de">forum</a>.</string>
|
||||
<string name="musicPlaying">La musica è in riproduzione</string>
|
||||
<string name="musicIsPlaying">la musica è in riproduzione</string>
|
||||
<string name="musicIsNotPlaying">la musica non viene riprodotta</string>
|
||||
@@ -778,6 +779,7 @@
|
||||
<string name="checkVariable">Controlla variabile</string>
|
||||
<string name="checkVariableExplanation">Se si lascia vuoto il valore, la variabile non deve essere impostata affinché la condizione restituisca true.</string>
|
||||
<string name="variableCheckString">Se la variabile %1$s è %2$s</string>
|
||||
<string name="variableCheckStringNot">se la variabile %1$s non è %2$s</string>
|
||||
<string name="variableCheckStringDeleted">Se la variabile %1$s non è impostata</string>
|
||||
<string name="messageType">Tipo di messaggio</string>
|
||||
<string name="sms">SMS</string>
|
||||
@@ -813,7 +815,7 @@
|
||||
<string name="setLocationServiceCapital">Impostare il servizio di localizzazione</string>
|
||||
<string name="writeSecureSettingsNotice">Purtroppo l\'autorizzazione WRITE_SECURE_SETTINGS non può essere data direttamente sul tuo dispositivo Android. Invece, devi collegare il tuo dispositivo a un computer e concedere l\'autorizzazione tramite ADB. Clicca qui per scoprire come concederlo: https://server47.de/automation/adb_hack.php</string>
|
||||
<string name="actionSetLocationService">Servizio di localizzazione</string>
|
||||
<string name="triggerUrlVariableHint">Il risultato di questa richiesta verrà memorizzato nella variabile LAST_TRIGGERURL_RESULT se si desidera controllarlo da un\'altra regola. In caso di errori HTTP come 404 il valore sarà \"HTTP_ERROR\".</string>
|
||||
<string name="triggerUrlVariableHint">Il risultato di questa richiesta verrà memorizzato nella variabile last_trigger_url_result se si desidera controllarlo da un\'altra regola. In caso di errori HTTP come 404 il valore sarà \"HTTP_ERROR\".</string>
|
||||
<string name="calendarEvent">Evento del calendario</string>
|
||||
<string name="eventIsCurrentlyHappening">L\'evento è attualmente attivo</string>
|
||||
<string name="calendarEventCapital">evento del calendario</string>
|
||||
@@ -855,4 +857,14 @@
|
||||
<string name="triggerChargingComment">Il tipo verrà valutato solo se il dispositivo è in carica. Se si sceglie di non caricare, si attiverà a qualsiasi tipo di ricarica precedente. Se si desidera valutarlo, prendere in considerazione l\'utilizzo delle variabili trigger/action.</string>
|
||||
<string name="helpTextProfiles">Un profilo è una raccolta di impostazioni per suonerie, volumi e altre impostazioni relative all\'audio che è possibile applicare dalle regole o applicare manualmente.\\n\\nÈ anche possibile eseguire una query per l\'ultimo profilo attivato come trigger. In caso normale, chiederà solo se il profilo è stato l\'ultimo attivato (indipendentemente dal fatto che nel frattempo siano state modificate impostazioni audio specifiche). Ma è anche possibile confrontare le singole impostazioni.</string>
|
||||
<string name="serviceWontStartNoActivatedRules">Nessuna regola attivata definita. Il servizio non si avvia.</string>
|
||||
<string name="importChooseFolderNotice">Nella finestra di dialogo seguente non tentare di selezionare file specifici, ma scegliere la cartella in cui risiedono i file di backup di Automazione. Se il pulsante di selezione è disabilitato, hai trovato una limitazione di Android. In tal caso, prova prima a spostare i file in una sottodirectory.</string>
|
||||
<string name="matches">corrisponde</string>
|
||||
<string name="doesNotMatch">non corrisponde</string>
|
||||
<string name="logToConsole">Accesso alla console (logcat)</string>
|
||||
<string name="locationPermissionRequired">Per continuare è necessaria l\'autorizzazione alla posizione.</string>
|
||||
<string name="Android14TimePickerHint">A quanto pare c\'è un bug in Android 14 relativo a una finestra di dialogo di selezione del tempo. Se la schermata seguente si arresta in modo anomalo quando si tenta di utilizzare i pulsanti su e giù accanto a un campo, provare a inserire i numeri con la tastiera. Non ho mai trovato una soluzione per questo problema e la mia app non è l\'unica interessata. Sembra che questo problema sia stato risolto in Android 15.</string>
|
||||
<string name="screenBrightGoogleComment">Poiché sembra che qualcuno in Google abbia fumato qualcosa, l\'impostazione della luminosità dello schermo si è comportata in modo molto strano per alcune versioni di Android. Questo comportamento non ha nulla a che fare con ciò che si potrebbe pensare che faccia secondo la loro documentazione. Ho cercato di adattarmi a questo nel miglior modo possibile, ma non aspettatevi impostazioni molto precise. Ciò significa che l\'impostazione risultante potrebbe discostarsi leggermente da ciò che si configura qui.</string>
|
||||
<string name="version143StartOtherActivityHint">Nella versione 1.8.2 è stato necessario rivedere il modo in cui venivano salvate le azioni per avviare altri programmi. La compatibilità non poteva essere garantita. Controlla e modifica le azioni di avvio di altre attività per assicurarti che funzionino ancora.</string>
|
||||
<string name="disable">Disabilitare</string>
|
||||
<string name="enable">Abilitare</string>
|
||||
</resources>
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
<string name="end">Einde</string>
|
||||
<string name="save">Opslaan</string>
|
||||
<string name="urlToTrigger">URL om te activeren:</string>
|
||||
<string name="urlLegend">Variabelen:U kunt de volgende variabelen gebruiken. Bij het triggeren zullen ze worden vervangen door de corresponderende waarde op je apparaat. Zet de haakjes in uw tekst. \n[uniqueid] - Het unieke id van uw apparaat[serialnr] - Het serienummer van uw apparaat (< Android 9)[latitude] - De breedtegraad van uw apparaat[longitude] - De lengtegraad van uw apparaat[phonenr] - Nummer van het laatste inkomende of uitgaande gesprek[d] - Dag van de maand, 2 cijfers met voorloopnullen[m] - Numerieke weergave van een maand, met voorloopnullen[Y] - een volledige numerieke weergave van een jaar, 4 cijfers[h] - 12-uurs indeling van een uur, met voorloopnullen[H] - 24-uurs indeling van een uur, met voorloopnullen[i] - minuten, met voorloopnullen[s] - seconden, met voorloopnullen[ms] - milliseconden[notificationTitle] - titel van de laatste melding[notificationText] - tekst van de laatste melding\n[last_triggerurl_result] - Het resultaat van de laatste uitvoering van de triggerUrl-actie\n[last_run_executable_exit_code] - De afsluitcode van de uitvoerbare actie van de laatste uitvoering\n[last_run_executable_output] - De uitvoer van de uitvoerbare actie van de laatste uitvoering (alleen voor niet-root)\n[last_calendar_title] - Titel van de laatste agenda-afspraak die regels activeert\n[last_calendar_description] - Beschrijving van de laatste agenda-gebeurtenis die regels activeert\n[last_calendar_location] - Locatie van de laatste agenda-gebeurtenis die de regel activeert\n[variable-VARIABLENAME] - De waarde van uw aangepaste gedefinieerde variabele</string>
|
||||
<string name="urlLegend">Variabelen:U kunt de volgende variabelen gebruiken. Bij het triggeren zullen ze worden vervangen door de corresponderende waarde op je apparaat. Zet de haakjes in uw tekst. \n[uniqueid] - Het unieke id van uw apparaat\n[serialnr] - Het serienummer van uw apparaat (< Android 9)\n[latitude] - De breedtegraad van uw apparaat\n[longitude] - De lengtegraad van uw apparaat\n[phonenr] - Nummer van het laatste inkomende of uitgaande gesprek\n[d] - Dag van de maand, 2 cijfers met voorloopnullen\n[m] - Numerieke weergave van een maand, met voorloopnullen\n[Y] - een volledige numerieke weergave van een jaar, 4 cijfers\n[h] - 12-uurs indeling van een uur, met voorloopnullen\n[H] - 24-uurs indeling van een uur, met voorloopnullen\n[i] - minuten, met voorloopnullen\n[s] - seconden, met voorloopnullen\n[ms] - milliseconden\n[w] - Dag van de week in tekstvorm\n[F] - Maand in tekstvorm\n[notificationTitle] - titel van de laatste melding\n[notificationText] - tekst van de laatste melding\n[last_trigger_url_result] - Het resultaat van de laatste uitvoering van de trigger url-actie\n[last_run_executable_exit_code] - De afsluitcode van de uitvoerbare actie van de laatste uitvoering\n[last_run_executable_output] - De uitvoer van de uitvoerbare actie van de laatste uitvoering (alleen voor niet-root)\n[last_calendar_title] - Titel van de laatste agenda-afspraak die regels activeert\n[last_calendar_description] - Beschrijving van de laatste agenda-gebeurtenis die regels activeert\n[last_calendar_location] - Locatie van de laatste agenda-gebeurtenis die de regel activeert\n[variable-VARIABLENAME] - De waarde van uw aangepaste gedefinieerde variabele</string>
|
||||
<string name="wifi">wifi</string>
|
||||
<string name="activating">Activeren</string>
|
||||
<string name="deactivating">Deactiveren</string>
|
||||
@@ -365,8 +365,8 @@
|
||||
<string name="actionPlayMusic">Muziekspeler openen</string>
|
||||
<string name="headsetConnected">Headset (type: %1$s) aangesloten</string>
|
||||
<string name="headsetDisconnected">Headset (type: %1$s) ontkoppeld</string>
|
||||
<string name="headphoneSimple">Headphone</string>
|
||||
<string name="headphoneMicrophone">Microphone</string>
|
||||
<string name="headphoneSimple">hoofdtelefoon</string>
|
||||
<string name="headphoneMicrophone">met microfoon</string>
|
||||
<string name="headphoneAny">willekeurige</string>
|
||||
<string name="headphoneSelectType">Selecteer type hoofdtelefoon</string>
|
||||
<string name="whatsThis">Wat is dit?</string>
|
||||
@@ -386,7 +386,8 @@
|
||||
<string name="notificationRingtone">Toon voor meldingen</string>
|
||||
<string name="hapticFeedback">Haptische feedback (trillen bij aanraken scherm)</string>
|
||||
<string name="volumeMusicVideoGameMedia">Muziek, video, spel en andere media</string>
|
||||
<string name="volumeRingtoneNotifications">Ringtone en meldingen</string>
|
||||
<string name="volumeNotifications">Meldingen</string>
|
||||
<string name="volumeRingtone">Ringtone</string>
|
||||
<string name="volumeAlarms">Alarmen</string>
|
||||
<string name="change">Wijzigen</string>
|
||||
<string name="audibleSelection">Hoorbare selectie (geluid bij schermselectie)</string>
|
||||
@@ -676,7 +677,7 @@
|
||||
<string name="comparisonCaseInsensitive">Vergelijkingen worden gedaan case-INsensitief</string>
|
||||
<string name="profileWarning">De instellingen die je hier maakt kunnen ervoor zorgen dat je bepaalde dingen niet meer van je telefoon merkt. Ze kunnen zelfs je wekker dempen. Dus wat je ook doet - het wordt aanbevolen om het te testen - ook na Android upgrades.</string>
|
||||
<string name="ifString">als</string>
|
||||
<string name="emailContactNotice">E-mail is mijn favoriete contactmethode om bugs te melden, vragen te stellen of voorstellen te doen. Ga naar het controlecentrum voor meer informatie.\nVeel vragen kunnen niet meteen worden beantwoord, maar vereisen wel wat technisch onderzoek. Dus heb alsjeblieft wat geduld.</string>
|
||||
<string name="contactNotice">E-mail is mijn favoriete contactmethode om bugs te melden, vragen te stellen of voorstellen te doen. Ga naar het controlecentrum voor meer informatie.\nVeel vragen kunnen niet meteen worden beantwoord, maar vereisen wel wat technisch onderzoek. Dus heb alsjeblieft wat geduld. \n\nJe hebt ook de mogelijkheid om je vragen te stellen in het <a href="https://forum.server47.de">forum</a>.</string>
|
||||
<string name="controlCenter">Controlecentrum</string>
|
||||
<string name="sendEmailToDev">Stuur een e-mail naar de ontwikkelaar</string>
|
||||
<string name="screenIs">scherm is %1$s</string>
|
||||
@@ -776,6 +777,7 @@
|
||||
<string name="checkVariable">Variabele controleren</string>
|
||||
<string name="checkVariableExplanation">Als u de waarde leeg laat, mag de variabele niet worden ingesteld om de voorwaarde true te laten retourneren.</string>
|
||||
<string name="variableCheckString">als variabele %1$s %2$s is</string>
|
||||
<string name="variableCheckStringNot">als variabele %1$s niet %2$s is</string>
|
||||
<string name="variableCheckStringDeleted">als variabele %1$s niet is ingesteld</string>
|
||||
<string name="messageType">Type bericht</string>
|
||||
<string name="sms">SMS</string>
|
||||
@@ -811,7 +813,7 @@
|
||||
<string name="setLocationServiceCapital">Locatieservice instellen</string>
|
||||
<string name="writeSecureSettingsNotice">Helaas kan de toestemming WRITE_SECURE_SETTINGS niet rechtstreeks op uw Android-apparaat worden gegeven. In plaats daarvan moet u uw apparaat op een computer aansluiten en de toestemming verlenen via ADB. Klik hier om te weten te komen hoe u het kunt toekennen: https://server47.de/automation/adb_hack.php</string>
|
||||
<string name="actionSetLocationService">Locatie service</string>
|
||||
<string name="triggerUrlVariableHint">Het resultaat van dit verzoek wordt opgeslagen in de variabele LAST_TRIGGERURL_RESULT als u het vanuit een andere regel wilt controleren. In het geval van HTTP-fouten zoals 404 is de waarde \"HTTP_ERROR\".</string>
|
||||
<string name="triggerUrlVariableHint">Het resultaat van dit verzoek wordt opgeslagen in de variabele last_trigger_url_result als u het vanuit een andere regel wilt controleren. In het geval van HTTP-fouten zoals 404 is de waarde \"HTTP_ERROR\".</string>
|
||||
<string name="calendarEvent">Agenda-afspraak</string>
|
||||
<string name="eventIsCurrentlyHappening">Begivenheden er aktiv i øjeblikket</string>
|
||||
<string name="calendarEventCapital">agenda-afspraak</string>
|
||||
@@ -853,5 +855,14 @@
|
||||
<string name="triggerChargingComment">Het type wordt alleen geëvalueerd als het apparaat wordt opgeladen. Als er niet wordt gekozen voor opladen, wordt het geactiveerd bij elk eerder oplaadtype. Als je dat wilt evalueren, overweeg dan om de variabelen trigger/actie te gebruiken.</string>
|
||||
<string name="helpTextProfiles">Een profiel is een verzameling instellingen voor beltonen, volumes en andere audiogerelateerde instellingen die u kunt laten toepassen vanuit regels of handmatig kunt toepassen.\\n\\nHet is ook mogelijk om het laatst geactiveerde profiel als trigger op te vragen. In het normale geval zal het alleen opvragen of het profiel het laatst geactiveerde profiel was (ongeacht of specifieke audio-instellingen in de tussentijd zijn gewijzigd). Maar u kunt ook de individuele instellingen laten vergelijken.</string>
|
||||
<string name="serviceWontStartNoActivatedRules">Er zijn geen geactiveerde regels gedefinieerd. De service wordt niet gestart.</string>
|
||||
|
||||
<string name="importChooseFolderNotice">Probeer in het volgende dialoogvenster geen specifieke bestanden te selecteren, maar kies de map waarin de back-upbestanden van Automation zich bevinden. Als de keuzeknop is uitgeschakeld, hebt u een Android-beperking gevonden. Probeer in dat geval de bestanden eerst naar een submap te verplaatsen.</string>
|
||||
<string name="matches">komt overeen</string>
|
||||
<string name="doesNotMatch">komt niet overeen</string>
|
||||
<string name="logToConsole">Aanmelden bij console (logcat)</string>
|
||||
<string name="locationPermissionRequired">Locatietoestemming is vereist om door te gaan.</string>
|
||||
<string name="Android14TimePickerHint">Blijkbaar is er een bug in Android 14 met betrekking tot een tijdkiezerdialoogvenster. Als het volgende scherm vastloopt wanneer u de knoppen omhoog en omlaag naast een veld probeert te gebruiken, probeert u in plaats daarvan getallen in te voeren met het toetsenbord. Ik heb hier nooit een oplossing voor gevonden en mijn app is niet de enige die getroffen is. Het lijkt erop dat dit is opgelost in Android 15.</string>
|
||||
<string name="screenBrightGoogleComment">Omdat iemand bij Google iets lijkt te hebben gerookt, gedraagt de helderheidsinstelling van het scherm zich bij sommige Android-versies erg raar. Dit gedrag heeft niets te maken met wat je zou denken dat het doet volgens hun eigen documentatie. Ik heb geprobeerd me hier zo goed mogelijk aan aan te passen, maar verwacht geen erg precieze instellingen. Dat betekent dat de resulterende instelling enigszins kan afwijken van wat u hier configureert.</string>
|
||||
<string name="version143StartOtherActivityHint">In versie 1.8.2 was het nodig om de manier waarop acties om andere programma\'s te starten werden opgeslagen, te herzien. De compatibiliteit kon niet worden gegarandeerd. Controleer en bewerk je acties om andere activiteiten te starten om er zeker van te zijn dat ze nog steeds werken.</string>
|
||||
<string name="disable">Uitschakelen</string>
|
||||
<string name="enable">Inschakelen</string>
|
||||
</resources>
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
<string name="end">Koniec</string>
|
||||
<string name="save">Zapisz</string>
|
||||
<string name="urlToTrigger">Adres URL do uruchomienia:</string>
|
||||
<string name="urlLegend">Zmienne:\nMożesz użyć następujących zmiennych. Po uruchomieniu zostaną one zastąpione odpowiednią wartością na Twoim urządzeniu. Umieść nawiasy w tekście.\n\n[uniqueid] – unikalny identyfikator Twojego urządzenia\n[serialnr] – numer seryjny Twojego urządzenia (< Android 9)\n[latitude] – Twoje urządzenie\ szerokość geograficzna użytkownika\n[longitude] – długość geograficzna Twojego urządzenia\n[phonenr] – numer ostatniego połączenia przychodzącego lub wychodzącego\n[d] – dzień miesiąca, 2 cyfry z zerami na początku\n[m] – Numeryczna reprezentacja miesiąca z zerami na początku\n[Y] — pełna cyfrowa reprezentacja roku, 4 cyfry\n[h] — godzina w formacie 12-godzinnym z zerami na początku\n[H] — format 24-godzinny format godziny z wiodącymi zerami\n[i] - minuty z wiodącymi zerami\n[s] - sekundy z wiodącymi zerami\n[ms] - milisekundy\n[notificationTitle] - tytuł ostatniego powiadomienia\n[notificationText] - tekst ostatniego powiadomienia\n[last_triggerurl_result] - Wynik ostatniego wykonania akcji triggerUrl\n[last_run_executable_exit_code] - Kod zakończenia ostatniej uruchomionej akcji wykonywalnej\n[last_run_executable_output] - Dane wyjściowe ostatniej akcji wykonywalnej uruchomienia (tylko dla użytkowników innych niż root)\n[last_calendar_title] - Tytuł ostatniego wydarzenia w kalendarzu wyzwalającego regułę\n[last_calendar_description] - opis ostatniego wydarzenia w kalendarzu wyzwalającego regułę\n[last_calendar_location] - Lokalizacja ostatniego zdarzenia w kalendarzu wyzwalającego regułę\n[variable-VARIABLENAME] - Wartość niestandardowej zmiennej zdefiniowanej przez Ciebie</string>
|
||||
<string name="urlLegend">Zmienne:\nMożesz użyć następujących zmiennych. Po uruchomieniu zostaną one zastąpione odpowiednią wartością na Twoim urządzeniu. Umieść nawiasy w tekście.\n\n[uniqueid] – unikalny identyfikator Twojego urządzenia\n[serialnr] – numer seryjny Twojego urządzenia (< Android 9)\n[latitude] – Twoje urządzenie\ szerokość geograficzna użytkownika\n[longitude] – długość geograficzna Twojego urządzenia\n[phonenr] – numer ostatniego połączenia przychodzącego lub wychodzącego\n[d] – dzień miesiąca, 2 cyfry z zerami na początku\n[m] – Numeryczna reprezentacja miesiąca z zerami na początku\n[Y] — pełna cyfrowa reprezentacja roku, 4 cyfry\n[h] — godzina w formacie 12-godzinnym z zerami na początku\n[H] — format 24-godzinny format godziny z wiodącymi zerami\n[i] - minuty z wiodącymi zerami\n[s] - sekundy z wiodącymi zerami\n[ms] - milisekundy\n[w] - Dzień tygodnia w formie tekstowej\n[F] - Miesiąc w formie tekstowej\n[notificationTitle] - tytuł ostatniego powiadomienia\n[notificationText] - tekst ostatniego powiadomienia\n[last_trigger_url_result] - Wynik ostatniego wykonania akcji trigger url\n[last_run_executable_exit_code] - Kod zakończenia ostatniej uruchomionej akcji wykonywalnej\n[last_run_executable_output] - Dane wyjściowe ostatniej akcji wykonywalnej uruchomienia (tylko dla użytkowników innych niż root)\n[last_calendar_title] - Tytuł ostatniego wydarzenia w kalendarzu wyzwalającego regułę\n[last_calendar_description] - opis ostatniego wydarzenia w kalendarzu wyzwalającego regułę\n[last_calendar_location] - Lokalizacja ostatniego zdarzenia w kalendarzu wyzwalającego regułę\n[variable-VARIABLENAME] - Wartość niestandardowej zmiennej zdefiniowanej przez Ciebie</string>
|
||||
<string name="wifi">wifi</string>
|
||||
<string name="activating">Aktywowanie</string>
|
||||
<string name="deactivating">Dezaktywowanie</string>
|
||||
@@ -443,7 +443,7 @@
|
||||
<string name="headsetConnected">Zestaw słuchawkowy (typ: %1$s) podłączony</string>
|
||||
<string name="headsetDisconnected">Zestaw słuchawkowy (typ: %1$s) rozłączony</string>
|
||||
<string name="headphoneSimple">Słuchawki</string>
|
||||
<string name="headphoneMicrophone">Mikrofon</string>
|
||||
<string name="headphoneMicrophone">z mikrofonem</string>
|
||||
<string name="headphoneAny">Albo</string>
|
||||
<string name="headphoneSelectType">Wybierz typ słuchawek</string>
|
||||
<string name="ruleDoesntApplyWrongHeadphoneType" translatable="false">Rule \"%1$s\" doesn\'t apply. Wrong headphone type.</string>
|
||||
@@ -473,7 +473,8 @@
|
||||
<string name="notificationRingtone">Ton dla powiadomień</string>
|
||||
<string name="hapticFeedback">Haptyczne sprzężenie zwrotne (wibracje podczas dotykania ekranu)</string>
|
||||
<string name="volumeMusicVideoGameMedia">Muzyka, wideo, gry i inne media</string>
|
||||
<string name="volumeRingtoneNotifications">Dzwonek i powiadomienia</string>
|
||||
<string name="volumeNotifications">Powiadomienia</string>
|
||||
<string name="volumeRingtone">Dzwonek</string>
|
||||
<string name="volumeAlarms">Alarmy</string>
|
||||
<string name="change">Zmiana</string>
|
||||
<string name="audibleSelection">Wybór dźwiękowy (dźwięk podczas wybierania ekranu)</string>
|
||||
@@ -768,7 +769,7 @@
|
||||
<string name="comparisonCaseInsensitive">Porównania nie uwzględniają wielkości liter</string>
|
||||
<string name="profileWarning">Ustawienia, które możesz tutaj dostosować, mogą sprawić, że nie będziesz już zauważać pewnych rzeczy w swoim telefonie. Mogą nawet wyciszyć budzik. Więc cokolwiek robisz - zdecydowanie zalecamy przetestowanie tego - także po aktualizacjach Androida.</string>
|
||||
<string name="ifString">jeśli</string>
|
||||
<string name="emailContactNotice">E-mail to moja preferowana metoda kontaktu w celu zgłaszania błędów, zadawania pytań lub składania propozycji. Przejdź do centrum sterowania, aby dowiedzieć się więcej.\nNa wiele pytań nie można odpowiedzieć od razu, ale wymagają one pewnych działań technicznych. Prosimy więc o odrobinę cierpliwości.</string>
|
||||
<string name="contactNotice">E-mail to moja preferowana metoda kontaktu w celu zgłaszania błędów, zadawania pytań lub składania propozycji. Przejdź do centrum sterowania, aby dowiedzieć się więcej.\nNa wiele pytań nie można odpowiedzieć od razu, ale wymagają one pewnych działań technicznych. Prosimy więc o odrobinę cierpliwości. \n\nAlternatywnie masz możliwość zadawania pytań na <a href="https://forum.server47.de">forum</a>.</string>
|
||||
<string name="controlCenter">Centrum kontroli</string>
|
||||
<string name="sendEmailToDev">Wyślij wiadomość e-mail do programisty</string>
|
||||
<string name="screenIs">ekran to %1$s</string>
|
||||
@@ -867,6 +868,7 @@
|
||||
<string name="checkVariable">Sprawdź zmienną</string>
|
||||
<string name="checkVariableExplanation">Jeśli pozostawisz wartość pustą, zmienna nie może być ustawiona, aby warunek zwrócił wartość true.</string>
|
||||
<string name="variableCheckString">jeśli zmienna %1$s to %2$s</string>
|
||||
<string name="variableCheckStringNot">Jeśli zmienna %1$s nie jest %2$s</string>
|
||||
<string name="variableCheckStringDeleted">jeśli zmienna %1$s nie jest ustawiona</string>
|
||||
<string name="messageType">Typ wiadomości</string>
|
||||
<string name="sms">SMS</string>
|
||||
@@ -910,7 +912,7 @@
|
||||
<string name="setLocationServiceCapital">Ustawianie usługi lokalizacyjnej</string>
|
||||
<string name="writeSecureSettingsNotice">Niestety WRITE_SECURE_SETTINGS uprawnień nie można nadać bezpośrednio na urządzeniu z Androidem. Zamiast tego musisz podłączyć urządzenie do komputera i przyznać uprawnienia przez ADB. Kliknij tutaj, aby dowiedzieć się, jak go przyznać: https://server47.de/automation/adb_hack.php</string>
|
||||
<string name="actionSetLocationService">Usługa lokalizacyjna</string>
|
||||
<string name="triggerUrlVariableHint">Wynik tego żądania zostanie zapisany w zmiennej LAST_TRIGGERURL_RESULT, jeśli chcesz go sprawdzić z innej reguły. W przypadku błędów HTTP, takich jak 404, wartość będzie wynosić \"HTTP_ERROR\".</string>
|
||||
<string name="triggerUrlVariableHint">Wynik tego żądania zostanie zapisany w zmiennej last_trigger_url_result, jeśli chcesz go sprawdzić z innej reguły. W przypadku błędów HTTP, takich jak 404, wartość będzie wynosić \"HTTP_ERROR\".</string>
|
||||
<string name="calendarEvent">Wydarzenie w kalendarzu</string>
|
||||
<string name="eventIsCurrentlyHappening">Wydarzenie jest obecnie aktywne</string>
|
||||
<string name="calendarEventCapital">wydarzenie w kalendarzu</string>
|
||||
@@ -952,4 +954,14 @@
|
||||
<string name="triggerChargingComment">Typ zostanie oceniony tylko wtedy, gdy urządzenie się ładuje. Jeśli nie zostanie wybrane ładowanie, zostanie uruchomione przy dowolnym poprzednim typie ładowania. Jeśli chcesz to ocenić, rozważ użycie zmiennych trigger/action.</string>
|
||||
<string name="helpTextProfiles">Profil jest zbiorem ustawień dzwonków, głośności i innych ustawień związanych z dźwiękiem, które można zastosować z reguł lub zastosować ręcznie.\\n\\nMożliwe jest również zapytanie o ostatnio aktywowany profil jako wyzwalacz. W normalnym przypadku zapyta tylko, czy profil był ostatnio aktywowany (niezależnie od tego, czy określone ustawienia dźwięku zostały zmienione w międzyczasie). Ale możesz także porównać poszczególne ustawienia.</string>
|
||||
<string name="serviceWontStartNoActivatedRules">Nie zdefiniowano aktywowanych reguł. Usługa nie uruchamia się.</string>
|
||||
<string name="importChooseFolderNotice">W następnym oknie dialogowym nie próbuj wybierać określonych plików, ale wybierz folder, w którym znajdują się pliki kopii zapasowej usługi Automation. Jeśli przycisk wyboru jest wyłączony, oznacza to, że znalazłeś ograniczenie systemu Android. W takim przypadku spróbuj najpierw przenieść pliki do podkatalogu.</string>
|
||||
<string name="matches">pasuje</string>
|
||||
<string name="doesNotMatch">nie pasuje</string>
|
||||
<string name="logToConsole">Logowanie do konsoli (logcat)</string>
|
||||
<string name="locationPermissionRequired">Aby kontynuować, wymagane jest zezwolenie na lokalizację.</string>
|
||||
<string name="Android14TimePickerHint">Najwyraźniej w Androidzie 14 jest błąd dotyczący okna dialogowego selektora czasu. Jeśli poniższy ekran ulega awarii podczas próby użycia przycisków w górę i w dół obok pola, spróbuj zamiast tego wprowadzić liczby za pomocą klawiatury. Nigdy nie znalazłem na to rozwiązania, a moja aplikacja nie jest jedyną, której dotyczy problem. Wygląda na to, że zostało to naprawione w Androidzie 15.</string>
|
||||
<string name="screenBrightGoogleComment">Ponieważ wygląda na to, że ktoś w Google coś palił, ustawienie jasności ekranu zachowywało się bardzo dziwnie w przypadku niektórych wersji Androida. To zachowanie nie ma nic wspólnego z tym, co można by pomyśleć, że robi zgodnie z ich własną dokumentacją. Starałem się dostosować do tego najlepiej, jak tylko mogłem, ale nie oczekuj bardzo precyzyjnych ustawień. Oznacza to, że wynikowe ustawienie może nieco odbiegać od tego, co skonfigurujesz tutaj.</string>
|
||||
<string name="version143StartOtherActivityHint">W wersji 1.8.2 konieczne było poprawienie sposobu zapisywania akcji uruchamiających inne programy. Nie można było zapewnić kompatybilności. Sprawdź i edytuj czynności związane z uruchamianiem innych aktywności, aby upewnić się, że nadal działają.</string>
|
||||
<string name="disable">Wyłączać</string>
|
||||
<string name="enable">Umożliwiać</string>
|
||||
</resources>
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
<string name="end">Конец</string>
|
||||
<string name="save">Сохранить</string>
|
||||
<string name="urlToTrigger">URL для вызова:</string>
|
||||
<string name="urlLegend">Переменные:\nВы можете использовать следующие переменные. При срабатывании они будут заменены соответствующим значением на вашем устройстве. Скобки- часть переменной.\n\n[uniqueid] - уникальный идентификатор\n[serialnr] - серийный номер(< Android 9)\n[latitude] - широта\n[longitude] - долгота\n[phonenr] - Номер последнего входящего или исходящего вызова\n[d] - День месяца, 2 цифры с начальными нулями\n[m] – Месяц, 2 цифры с начальными нулями\n[Y] - Год, 4 цифры\n[h] - 12-часовой формат часа с начальными нулями\n[H] - 24-часовой формат часа с начальными нулями\n[i] - Минуты с начальными нулями\n[s] - Секунды с начальными нулями\n[ms] - миллисекунды\n[notificationTitle] - заголовок последнего уведомления\n[notificationText] - текст последнего уведомления\n[last_triggerurl_result] - Результат последнего выполнения действия triggerUrl\n[last_run_executable_exit_code] - Код выхода последнего выполняемого действия\n[last_run_executable_output] - Выходные данные последнего выполняемого действия (только для некорневых пользователей)\n[last_calendar_title] - Заголовок последнего календарного события, запускающего правило\n[last_calendar_description] - Описание последнего события календаря, активировавшего правило\n[last_calendar_location] - Местоположение последнего календарного события, запускающего правило\n[variable-VARIABLENAME] - Значение переменной, определенной пользователем</string>
|
||||
<string name="urlLegend">Переменные:\nВы можете использовать следующие переменные. При срабатывании они будут заменены соответствующим значением на вашем устройстве. Скобки- часть переменной.\n\n[uniqueid] - уникальный идентификатор\n[serialnr] - серийный номер(< Android 9)\n[latitude] - широта\n[longitude] - долгота\n[phonenr] - Номер последнего входящего или исходящего вызова\n[d] - День месяца, 2 цифры с начальными нулями\n[m] – Месяц, 2 цифры с начальными нулями\n[Y] - Год, 4 цифры\n[h] - 12-часовой формат часа с начальными нулями\n[H] - 24-часовой формат часа с начальными нулями\n[i] - Минуты с начальными нулями\n[s] - Секунды с начальными нулями\n[ms] - миллисекунды\n[w] - День недели в текстовом виде\n[F] - Месяц в текстовом виде\n[notificationTitle] - заголовок последнего уведомления\n[notificationText] - текст последнего уведомления\n[last_trigger_url_result] - Результат последнего выполнения действия trigger url\n[last_run_executable_exit_code] - Код выхода последнего выполняемого действия\n[last_run_executable_output] - Выходные данные последнего выполняемого действия (только для некорневых пользователей)\n[last_calendar_title] - Заголовок последнего календарного события, запускающего правило\n[last_calendar_description] - Описание последнего события календаря, активировавшего правило\n[last_calendar_location] - Местоположение последнего календарного события, запускающего правило\n[variable-VARIABLENAME] - Значение переменной, определенной пользователем</string>
|
||||
<string name="wifi">Wi-Fi</string>
|
||||
<string name="activating">Активация</string>
|
||||
<string name="deactivating">Деактивация</string>
|
||||
@@ -412,7 +412,7 @@
|
||||
<string name="headsetConnected">Гарнитура (тип: %1$s) подключена</string>
|
||||
<string name="headsetDisconnected">Гарнитура (тип: %1$s) отключена</string>
|
||||
<string name="headphoneSimple">Наушники</string>
|
||||
<string name="headphoneMicrophone">Микрофон</string>
|
||||
<string name="headphoneMicrophone">с микрофоном</string>
|
||||
<string name="headphoneAny">Любой</string>
|
||||
<string name="headphoneSelectType">Выберите тип гарнитуры</string>
|
||||
<string name="ruleDoesntApplyWrongHeadphoneType" translatable="false">Правило %1$s не применится. Неверный тип гарнитуры.</string>
|
||||
@@ -442,7 +442,8 @@
|
||||
<string name="notificationRingtone">Звуковой сигнал для уведомлений</string>
|
||||
<string name="hapticFeedback">Тактильная обратная связь (вибрация при прикосновении к экрану)</string>
|
||||
<string name="volumeMusicVideoGameMedia">Музыка, видео, игры и другое медиаа</string>
|
||||
<string name="volumeRingtoneNotifications">Рингтон и уведомления</string>
|
||||
<string name="volumeNotifications">уведомления</string>
|
||||
<string name="volumeRingtone">Рингтон</string>
|
||||
<string name="volumeAlarms">Будильники</string>
|
||||
<string name="change">Изменить</string>
|
||||
<string name="audibleSelection">Звуковое уведомление при выборе (звук при выборе экрана)</string>
|
||||
@@ -735,7 +736,7 @@
|
||||
<string name="comparisonCaseInsensitive">Сравнения проводятся без учета регистра</string>
|
||||
<string name="profileWarning">Настройки, которые вы можете изменить здесь, могут привести к тому, что вы больше не заметите определенных вещей с вашего телефона. Они могут даже отключить будильник. Так что что бы вы ни делали - рекомендуется это проверять.</string>
|
||||
<string name="ifString">если</string>
|
||||
<string name="emailContactNotice">Электронная почта - мой предпочтительный способ связи, для сообщений об ошибках, вопросов или предложений. Перейдите в центр управления, чтобы узнать больше.\nМногие вопросы не могут быть решены сразу, но требуют некоторых технических исследований. Поэтому, пожалуйста, наберитесь терпения.</string>
|
||||
<string name="contactNotice">Электронная почта - мой предпочтительный способ связи, для сообщений об ошибках, вопросов или предложений. Перейдите в центр управления, чтобы узнать больше.\nМногие вопросы не могут быть решены сразу, но требуют некоторых технических исследований. Поэтому, пожалуйста, наберитесь терпения. \n\nВ качестве альтернативы у вас есть возможность задать свои вопросы на <a href="https://forum.server47.de">форуме</a>.</string>
|
||||
<string name="controlCenter">Центр управления</string>
|
||||
<string name="sendEmailToDev">Отправить электронное письмо разработчику</string>
|
||||
<string name="screenIs">экран %1$s</string>
|
||||
@@ -835,6 +836,7 @@
|
||||
<string name="checkVariable">Проверить переменную</string>
|
||||
<string name="checkVariableExplanation">Если оставить значение пустым, переменная не должна быть задана для того, чтобы условие возвращало значение true.</string>
|
||||
<string name="variableCheckString">если переменная %1$s равно %2$s</string>
|
||||
<string name="variableCheckStringNot">если переменная %1$s не %2$s</string>
|
||||
<string name="variableCheckStringDeleted">Если переменная %1$s не задана</string>
|
||||
<string name="messageType">Тип сообщения</string>
|
||||
<string name="sms">SMS</string>
|
||||
@@ -870,7 +872,7 @@
|
||||
<string name="setLocationServiceCapital">Настройка службы определения местоположения</string>
|
||||
<string name="writeSecureSettingsNotice">К сожалению, разрешение WRITE_SECURE_SETTINGS не может быть дано непосредственно на вашем Android-устройстве. Вместо этого вам нужно подключить устройство к компьютеру и предоставить разрешение через ADB. Нажмите здесь, чтобы узнать, как его получить: https://server47.de/automation/adb_hack.php</string>
|
||||
<string name="actionSetLocationService">Служба определения местоположения</string>
|
||||
<string name="triggerUrlVariableHint">Результат этого запроса будет сохранен в переменной LAST_TRIGGERURL_RESULT если вы захотите проверить его из другого правила. В случае ошибок HTTP, таких как 404, значение будет \"HTTP_ERROR\".</string>
|
||||
<string name="triggerUrlVariableHint">Результат этого запроса будет сохранен в переменной last_trigger_url_result если вы захотите проверить его из другого правила. В случае ошибок HTTP, таких как 404, значение будет \"HTTP_ERROR\".</string>
|
||||
<string name="calendarEvent">Событие календаря</string>
|
||||
<string name="eventIsCurrentlyHappening">Событие в данный момент активно</string>
|
||||
<string name="calendarEventCapital">Событие календаря</string>
|
||||
@@ -912,4 +914,14 @@
|
||||
<string name="triggerChargingComment">Тип будет оцениваться только в том случае, если устройство заряжается. Если зарядка не выбрана, он будет срабатывать при любом предыдущем типе зарядки. Если вы хотите это оценить, подумайте об использовании переменных trigger/action.</string>
|
||||
<string name="helpTextProfiles">Профиль — это набор настроек рингтонов, громкости и других настроек, связанных со звуком, которые можно применить из правил или вручную.\\n\\nТакже в качестве триггера можно запросить последний активированный профиль. В обычном случае он будет запрашивать только то, был ли профиль последним активированным (независимо от того, были ли за это время изменены определенные настройки звука). Но вы также можете сравнить отдельные настройки.</string>
|
||||
<string name="serviceWontStartNoActivatedRules">Активированные правила не определены. Служба не запускается.</string>
|
||||
<string name="importChooseFolderNotice">В следующем диалоговом окне не пытайтесь выбрать конкретные файлы, а выберите папку, в которой находятся файлы резервных копий автоматизации. Если кнопка выбора отключена, вы обнаружили ограничение Android. В этом случае попробуйте сначала переместить файлы в подкаталог.</string>
|
||||
<string name="matches">Шутки</string>
|
||||
<string name="doesNotMatch">не совпадает</string>
|
||||
<string name="logToConsole">Запись в консоль (logcat)</string>
|
||||
<string name="locationPermissionRequired">Для продолжения требуется разрешение на определение местоположения.</string>
|
||||
<string name="Android14TimePickerHint">По-видимому, в Android 14 есть ошибка, связанная с диалоговым окном выбора времени. Если при попытке использовать кнопки «Вверх» и «Вниз» рядом с полем происходит сбой следующего экрана, попробуйте ввести цифры с помощью клавиатуры. Я так и не нашел решение этой проблемы, и мое приложение не единственное, что это затронуло. Похоже, это было исправлено в Android 15.</string>
|
||||
<string name="screenBrightGoogleComment">Из-за того, что кто-то в Google, похоже, что-то курил, настройка яркости экрана вела себя очень странно в некоторых версиях Android. Такое поведение не имеет ничего общего с тем, что вы думаете, согласно их собственной документации. Я постарался приспособиться к этому как можно лучше, но не ждите очень точных настроек. Это означает, что результирующая настройка может немного отличаться от того, что вы настроили здесь.</string>
|
||||
<string name="version143StartOtherActivityHint">В версии 1.8.2 необходимо было пересмотреть способ сохранения действий для запуска других программ. Совместимость обеспечить не удалось. Пожалуйста, проверьте и отредактируйте действия запуска других действий, чтобы убедиться, что они все еще работают.</string>
|
||||
<string name="disable">Отключить</string>
|
||||
<string name="enable">Давать возможность</string>
|
||||
</resources>
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
<string name="end">结束</string>
|
||||
<string name="save">保存</string>
|
||||
<string name="urlToTrigger">触发网址:</string>
|
||||
<string name="urlLegend">变量:\n您可以使用以下变量。触发后,它们将替换为您设备上的对应值。文本中要包含方括号。\n\n[uniqueid] - 您设备的唯一 ID\n[serialnr] - 您设备的序列号(< Android 9)\n[latitude] - 您设备的纬度\n[longitude] - 您设备的经度\n[phonenr] - 最后来电或去电的号码\n[d] - 日,2 位数字,带前导零\n[m] - 月,数字表示,带前导零\n[Y] - 年,完整数字表示,4 位数字\n[h] - 时,12 小时制,带前导零\n[H] - 时,24 小时制,带前导零\n[i] - 分,带前导零\n[s] - 秒,带前导零\n[ms] - 毫秒\n[notificationTitle] - 最后通知的标题\n[notificationText] - 最后通知的文本\n[last_triggerurl_result] - 上次 triggerUrl 操作执行的结果\n[last_run_executable_exit_code] - 上次运行可执行操作的退出代码\n[last_run_executable_output] - 上次运行可执行操作的输出(仅适用于非 root)\n[variable-变量名] - 自定义变量的值</string>
|
||||
<string name="urlLegend">变量:\n您可以使用以下变量。触发后,它们将替换为您设备上的对应值。文本中要包含方括号。\n\n[uniqueid] - 您设备的唯一 ID\n[serialnr] - 您设备的序列号(< Android 9)\n[latitude] - 您设备的纬度\n[longitude] - 您设备的经度\n[phonenr] - 最后来电或去电的号码\n[d] - 日,2 位数字,带前导零\n[m] - 月,数字表示,带前导零\n[Y] - 年,完整数字表示,4 位数字\n[h] - 时,12 小时制,带前导零\n[H] - 时,24 小时制,带前导零\n[i] - 分,带前导零\n[s] - 秒,带前导零\n[ms] - 毫秒\n[w] - 文本形式的星期几\n[F] - 文本形式的月份\n[notificationTitle] - 最后通知的标题\n[notificationText] - 最后通知的文本\n[last_triggerurl_result] - 上次 triggerUrl 操作执行的结果\n[last_run_executable_exit_code] - 上次运行可执行操作的退出代码\n[last_run_executable_output] - 上次运行可执行操作的输出(仅适用于非 root)\n[variable-变量名] - 自定义变量的值</string>
|
||||
<string name="wifi">WLAN</string>
|
||||
<string name="activating">启用</string>
|
||||
<string name="deactivating">停用</string>
|
||||
@@ -362,7 +362,7 @@
|
||||
<string name="headsetConnected">耳机(类型:%1$s)已连接</string>
|
||||
<string name="headsetDisconnected">耳机(类型:%1$s)已断开连接</string>
|
||||
<string name="headphoneSimple">无麦克风</string>
|
||||
<string name="headphoneMicrophone">有麦克风</string>
|
||||
<string name="headphoneMicrophone">带麦克风</string>
|
||||
<string name="headphoneAny">均可</string>
|
||||
<string name="headphoneSelectType">选择耳机类型</string>
|
||||
<string name="whatsThis">这是什么?</string>
|
||||
@@ -382,7 +382,8 @@
|
||||
<string name="notificationRingtone">通知提示音</string>
|
||||
<string name="hapticFeedback">触感反馈(触摸屏幕时振动)</string>
|
||||
<string name="volumeMusicVideoGameMedia">音乐、视频、游戏等媒体</string>
|
||||
<string name="volumeRingtoneNotifications">铃声和通知</string>
|
||||
<string name="volumeNotifications">通知</string>
|
||||
<string name="volumeRingtone">铃声</string>
|
||||
<string name="volumeAlarms">闹钟</string>
|
||||
<string name="change">更改</string>
|
||||
<string name="audibleSelection">触摸提示音(进行屏幕选择时的声音)</string>
|
||||
@@ -670,7 +671,7 @@
|
||||
<string name="comparisonCaseInsensitive">比较不区分大小写</string>
|
||||
<string name="profileWarning">此处的设置可能会导致您无法再注意到手机中的某些内容,甚至可以让您的起床闹钟静音。所以无论怎样设置——强烈建议测试,在 Android 更新之后也要再测试。</string>
|
||||
<string name="ifString">如果</string>
|
||||
<string name="emailContactNotice">电子邮件是向我报告错误、提出问题或建议的首选联系方式。前往控制中心了解更多信息。\n许多问题无法立即解答,需要进行一些技术研究。所以请耐心等待。</string>
|
||||
<string name="contactNotice">电子邮件是向我报告错误、提出问题或建议的首选联系方式。前往控制中心了解更多信息。\n许多问题无法立即解答,需要进行一些技术研究。所以请耐心等待。 \n\n或者,您可以选择在 <a href="https://forum.server47.de">论坛</a>中提问 。</string>
|
||||
<string name="controlCenter">控制中心</string>
|
||||
<string name="sendEmailToDev">向开发者发送电子邮件</string>
|
||||
<string name="screenIs">屏幕 %1$s</string>
|
||||
@@ -768,6 +769,7 @@
|
||||
<string name="checkVariable">检查变量</string>
|
||||
<string name="checkVariableExplanation">如果值留空,则变量必须未设置才能满足条件。</string>
|
||||
<string name="variableCheckString">如果变量 %1$s 是 %2$s</string>
|
||||
<string name="variableCheckStringNot">如果变量 %1$s 不是 %2$s</string>
|
||||
<string name="variableCheckStringDeleted">如果变量 %1$s 未设置</string>
|
||||
<string name="messageType">消息类型</string>
|
||||
<string name="sms">短信</string>
|
||||
@@ -811,7 +813,7 @@
|
||||
<string name="setLocationServiceCapital">设置位置服务</string>
|
||||
<string name="writeSecureSettingsNotice">不幸的是,WRITE_SECURE_SETTINGS无法直接在您的 Android 设备上授予权限。相反,您需要将设备连接到计算机并通过 ADB 授予权限。单击此处了解如何授予它: https://server47.de/automation/adb_hack.php</string>
|
||||
<string name="actionSetLocationService">定位服务</string>
|
||||
<string name="triggerUrlVariableHint">此请求的结果将存储在变量 LAST_TRIGGERURL_RESULT 中,如果您希望从其他规则中检查它。如果出现像 404 这样的 HTTP 错误,则该值将为\"HTTP_ERROR\"。</string>
|
||||
<string name="triggerUrlVariableHint">此请求的结果将存储在变量 last_triggerurl_result 中,如果您希望从其他规则中检查它。如果出现像 404 这样的 HTTP 错误,则该值将为\"HTTP_ERROR\"。</string>
|
||||
<string name="calendarEvent">日历事件</string>
|
||||
<string name="eventIsCurrentlyHappening">活动当前处于活动状态</string>
|
||||
<string name="calendarEventCapital">日历事件</string>
|
||||
@@ -853,4 +855,14 @@
|
||||
<string name="triggerChargingComment">仅当设备正在充电时,才会评估类型。如果未选择充电,它将以任何以前的充电类型点火。如果要对此进行评估,请考虑使用变量 trigger/action。</string>
|
||||
<string name="helpTextProfiles">配置文件是铃声、音量和其他音频相关设置的集合,您可以从规则中应用这些设置,也可以手动应用。\\n\\n还可以查询上次激活的配置文件作为触发器。在正常情况下,它只会查询配置文件是否是上次激活的配置文件(无论在此期间是否更改了特定的音频设置)。但您也可以比较各个设置。</string>
|
||||
<string name="serviceWontStartNoActivatedRules">未定义已激活的规则。服务无法启动。</string>
|
||||
<string name="importChooseFolderNotice">在下面的对话框中,不要尝试选择特定文件,而是选择 Automation 备份文件所在的文件夹。如果禁用了 choose 按钮,则表示您发现了 Android 限制。在这种情况下,请先尝试将文件移动到子目录。</string>
|
||||
<string name="matches">吉贝斯</string>
|
||||
<string name="doesNotMatch">不同意</string>
|
||||
<string name="logToConsole">记录到控制台 (logcat)</string>
|
||||
<string name="locationPermissionRequired">需要位置权限才能继续。</string>
|
||||
<string name="Android14TimePickerHint">显然,Android 14 中存在一个关于时间选择器对话框的错误。如果在您尝试使用字段旁边的向上和向下按钮时出现以下屏幕崩溃,请尝试使用键盘输入数字。我从未找到解决这个问题的解决方案,我的应用程序并不是唯一受影响的应用程序。看起来这已在 Android 15 中修复。</string>
|
||||
<string name="screenBrightGoogleComment">因为 Google 的某个人似乎一直在抽烟,所以某些 Android 版本的屏幕亮度设置表现得非常奇怪。此行为与你根据他们自己的文档认为它执行的作无关。我已经尽我所能适应这一点,但不要指望设置非常精确。这意味着生成的设置可能与您在此处配置的设置略有不同。</string>
|
||||
<string name="version143StartOtherActivityHint">在 1.8.2 版本中,有必要修改保存启动其他程序的作的方式。无法确保兼容性。请检查并编辑您的启动其他活动作,以确保它们仍在工作。</string>
|
||||
<string name="disable">禁用</string>
|
||||
<string name="enable">使</string>
|
||||
</resources>
|
||||
@@ -9,6 +9,15 @@
|
||||
<item name="1">1</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="uiThemeOptions">
|
||||
<item name="0">@string/uiThemeClassic</item>
|
||||
<item name="1">@string/uiThemeCompat</item>
|
||||
</string-array>
|
||||
<string-array name="uiThemeOptionsValues">
|
||||
<item name="0">0</item> <!-- classic -->
|
||||
<item name="1">1</item> <!-- AppThemeCompat -->
|
||||
</string-array>
|
||||
|
||||
<string-array name="startScreenOptions">
|
||||
<item name="0">@string/overview</item>
|
||||
<item name="1">@string/pois</item>
|
||||
@@ -69,4 +78,6 @@
|
||||
<string name="languageFrench">French</string>
|
||||
<string name="languagePolish">Polish</string>
|
||||
<string name="languageChineseChina">Chinese (China)</string>
|
||||
<string name="uiThemeClassic">Classic UI theme</string>
|
||||
<string name="uiThemeCompat">Material design UI theme</string>
|
||||
</resources>
|
||||
@@ -71,7 +71,7 @@
|
||||
<string name="end">End</string>
|
||||
<string name="save">Save</string>
|
||||
<string name="urlToTrigger">URL to trigger:</string>
|
||||
<string name="urlLegend">Variables:\nYou can use the following variables. Upon triggering they will be replaced with the corresponding value on your device. Include the brackets in your text.\n\n[uniqueid] - Your device\'s unique id\n[serialnr] - Your device\'s serial number (< Android 9)\n[latitude] - Your device\'s latitude\n[longitude] - Your device\'s longitude\n[phonenr] - Number of last incoming or outgoing call\n[d] - Day of the month, 2 digits with leading zeros\n[m] - Numeric representation of a month, with leading zeros\n[Y] - A full numeric representation of a year, 4 digits\n[h] - 12-hour format of an hour with leading zeros\n[H] - 24-hour format of an hour with leading zeros\n[i] - Minutes with leading zeros\n[s] - Seconds, with leading zeros\n[ms] - milliseconds\n[notificationTitle] - title of last notification\n[notificationText] - text of last notification\n[last_triggerurl_result] - The result of the last triggerUrl action execution\n[last_run_executable_exit_code] - The exit code of the last run executable action\n[last_run_executable_output] - The output of the last run executable action (only for non-root)\n[last_calendar_title] - Title of the last rule-triggering calendar event\n[last_calendar_description] - Description of the last rule-triggering calendar event\n[last_calendar_location] - Location of the last rule-triggering calendar event\n[variable-VARIABLENAME] - The value of your custom defined variable</string>
|
||||
<string name="urlLegend">Variables:\nYou can use the following variables. Upon triggering they will be replaced with the corresponding value on your device. Include the brackets in your text.\n\n[uniqueid] - Your device\'s unique id\n[serialnr] - Your device\'s serial number (< Android 9)\n[latitude] - Your device\'s latitude\n[longitude] - Your device\'s longitude\n[phonenr] - Number of last incoming or outgoing call\n[d] - Day of the month, 2 digits with leading zeros\n[m] - Numeric representation of a month, with leading zeros\n[Y] - A full numeric representation of a year, 4 digits\n[h] - 12-hour format of an hour with leading zeros\n[H] - 24-hour format of an hour with leading zeros\n[i] - Minutes with leading zeros\n[s] - Seconds, with leading zeros\n[ms] - milliseconds\n[w] - Day of the week in text form\n[F] - Month in text form\n[notificationTitle] - title of last notification\n[notificationText] - text of last notification\n[last_trigger_url_result] - The result of the last trigger url action execution\n[last_run_executable_exit_code] - The exit code of the last run executable action\n[last_run_executable_output] - The output of the last run executable action (only for non-root)\n[last_calendar_title] - Title of the last rule-triggering calendar event\n[last_calendar_description] - Description of the last rule-triggering calendar event\n[last_calendar_location] - Location of the last rule-triggering calendar event\n[variable-VARIABLENAME] - The value of your custom defined variable</string>
|
||||
<string name="wifi">wifi</string>
|
||||
<string name="activating">Activating</string>
|
||||
<string name="deactivating">Deactivating</string>
|
||||
@@ -330,7 +330,7 @@
|
||||
<string name="name">Name</string>
|
||||
<string name="radiusWithUnit">Radius [m]</string>
|
||||
<string name="status">Status</string>
|
||||
<string name="actionDataConnection">Data connection</string>
|
||||
<string name="actionDataConnection">Data connection (mobile data)</string>
|
||||
<string name="actionSetDataConnectionOn">turn mobile data on</string>
|
||||
<string name="actionSetDataConnectionOff">turn mobile data off</string>
|
||||
<string name="roaming">Roaming</string>
|
||||
@@ -444,7 +444,7 @@
|
||||
<string name="headsetConnected">Headset (type: %1$s) connected</string>
|
||||
<string name="headsetDisconnected">Headset (type: %1$s) disconnected</string>
|
||||
<string name="headphoneSimple">Headphone</string>
|
||||
<string name="headphoneMicrophone">Microphone</string>
|
||||
<string name="headphoneMicrophone">with microphone</string>
|
||||
<string name="headphoneAny">Either</string>
|
||||
<string name="headphoneSelectType">Select type of headphone</string>
|
||||
<string name="ruleDoesntApplyWrongHeadphoneType" translatable="false">Rule \"%1$s\" doesn\'t apply. Wrong headphone type.</string>
|
||||
@@ -474,7 +474,8 @@
|
||||
<string name="notificationRingtone">Tone for notifications</string>
|
||||
<string name="hapticFeedback">Haptic feedback (vibrate when touching screen)</string>
|
||||
<string name="volumeMusicVideoGameMedia">Music, video, game and other media</string>
|
||||
<string name="volumeRingtoneNotifications">Ringtone and notifications</string>
|
||||
<string name="volumeNotifications">Notifications</string>
|
||||
<string name="volumeRingtone">Ringtones</string>
|
||||
<string name="volumeAlarms">Alarms</string>
|
||||
<string name="change">Change</string>
|
||||
<string name="audibleSelection">Audible selection (sound when making screen selection)</string>
|
||||
@@ -592,7 +593,7 @@
|
||||
<string name="brightnessAuto">automatic brightness</string>
|
||||
<string name="brightnessManual">manual brightness</string>
|
||||
<string name="autoBrightnessNotice">If you use auto brightness the brightness value you use below will probably not be used long.</string>
|
||||
<string name="screenLockSoundNotice">Screenlock sounds cannot automatically be changed anymore on devices running Android version 6.0 or higher. Whatever you set here, it will not work in either direction.</string>
|
||||
<string name="screenLockSoundNotice">Screen lock sounds cannot automatically be changed anymore on devices running Android version 6.0 or higher. Whatever you set here, it will not work in either direction.</string>
|
||||
<string name="startScreen">Start screen</string>
|
||||
<string name="startScreenSummary">Select the screen the applications opens with at start.</string>
|
||||
<string name="executeRulesAndProfilesWithSingleClickTitle">Run rules/profiles with single click.</string>
|
||||
@@ -769,7 +770,7 @@
|
||||
<string name="comparisonCaseInsensitive">Comparisons are done case-INsensitive</string>
|
||||
<string name="profileWarning">The settings you can adjust here, can cause that you don\'t notice certain things from your phone anymore. They may even silence your wakeup alarm. So whatever you do - it is highly recommended that you test it - also after Android updates.</string>
|
||||
<string name="ifString">if</string>
|
||||
<string name="emailContactNotice">Email is my preferred method of contact to report bugs, ask questions or make proposals. Go to control center to learn more.\nMany questions cannot be answered straight away, but require some technical research. So please have some patience.</string>
|
||||
<string name="contactNotice">Email is my preferred method of contact to report bugs, ask questions or make proposals. Go to control center to learn more.\nMany questions cannot be answered straight away, but require some technical research. So please have some patience.\n\nAlternatively you have the option of asking your questions in the <a href="https://forum.server47.de">forum</a>.</string>
|
||||
<string name="controlCenter">Control center</string>
|
||||
<string name="sendEmailToDev">Send email to developer</string>
|
||||
<string name="screenIs">screen is %1$s</string>
|
||||
@@ -868,6 +869,7 @@
|
||||
<string name="checkVariable">Check variable</string>
|
||||
<string name="checkVariableExplanation">If you leave the value empty the variable must not be set for the condition to return true.</string>
|
||||
<string name="variableCheckString">if variable %1$s is %2$s</string>
|
||||
<string name="variableCheckStringNot">if variable %1$s is not %2$s</string>
|
||||
<string name="variableCheckStringDeleted">if variable %1$s is not set</string>
|
||||
<string name="messageType">Message type</string>
|
||||
<string name="sms">SMS</string>
|
||||
@@ -906,7 +908,7 @@
|
||||
<string name="LOCATION_MODE_SENSOR_ONLY" translatable="false">SENSOR_ONLY</string>
|
||||
<string name="LOCATION_MODE_BATTERY_SAVING" translatable="false">BATTERY_SAVING</string>
|
||||
<string name="LOCATION_MODE_HIGH_ACCURACY" translatable="false">HIGH_ACCURACY</string>
|
||||
<string name="triggerUrlVariableHint">The result of this request will be stored in the variable LAST_TRIGGERURL_RESULT if you wish to check it from another rule. In case of HTTP errors like 404 the value will be \"HTTP_ERROR\".</string>
|
||||
<string name="triggerUrlVariableHint">The result of this request will be stored in the variable last_trigger_url_result if you wish to check it from another rule. In case of HTTP errors like 404 the value will be \"HTTP_ERROR\".</string>
|
||||
<string name="calendarEvent">calendar event</string>
|
||||
<string name="eventIsCurrentlyHappening">Event is currently active</string>
|
||||
<string name="calendarEventCapital">Calendar event</string>
|
||||
@@ -947,4 +949,25 @@
|
||||
<string name="notCharging">not charging</string>
|
||||
<string name="triggerChargingComment">The type will only be evaluated if the device is charging. If not charging is chosen, it will fire at any previous charging type. If you want to evaluate that, consider using the variables trigger/action.</string>
|
||||
<string name="helpTextProfiles">A profile is a collection of settings for ringtones, volumes and other audio related settings that you can have applied from rules or apply it manually.\n\nIt is also possible to query for the last activated profile as a trigger. In the normal case it will only query if the profile was the last activated one (regardless if specific audio settings have been changed in the meantime). But you can also have the individual settings compared.</string>
|
||||
<string name="version143StartOtherActivityHint">In version 1.8.2 it was necessary to revise the way actions to start other programs were saved. Compatibility could not be ensured. Please check and edit your start other activity actions to make sure they are still working.</string>
|
||||
<string name="importChooseFolderNotice">In the following dialog do not try to select specific files, but choose the folder in which the Automation backup files reside. If the choose button is disabled, you have found an Android limitation. In that case try moving the files to a subdirectory first.</string>
|
||||
<string name="matches">matches</string>
|
||||
<string name="doesNotMatch">does not match</string>
|
||||
<string name="logToConsole">Log to console (logcat)</string>
|
||||
<string name="locationPermissionRequired">Location permission is required to continue.</string>
|
||||
<string name="Android14TimePickerHint">Apparently there\'s a bug in Android 14 regarding a time picker dialog. If the following screen crashes when you try to use the up and down buttons next to a field, try inputting numbers with the keyboard instead. I did never find a solution for this and my app is not the only one affected. It looks like this was fixed in Android 15.</string>
|
||||
<string name="screenBrightGoogleComment">Because someone at Google seems to have been smoking something the screen brightness setting has been behaving very weird for some Android versions. This behavior has nothing to do with what you\'d think it does according to their own documentation. I\'ve tried to adapt to this as best as I could, but do not expect very precise settings. That means the resulting setting may deviate a bit from what you configure here.</string>
|
||||
<string name="disable">Disable</string>
|
||||
<string name="enable">Enable</string>
|
||||
<string name="permissionForegroundServiceTypeSpecialUseRequired">Permission FOREGROUND_SERVICE_TYPE_SPECIAL_USE is required to start.</string>
|
||||
<string name="uiTheme">UI theme</string>
|
||||
<string name="uiThemeSummary">The theme of the graphical user interface. Application required.</string>
|
||||
<string name="proximity">Proximity</string>
|
||||
<string name="testArea">Test area</string>
|
||||
<string name="testAreaProximityComment">Approach your device to test how it reacts.</string>
|
||||
<string name="deviceDoesntHaveProximitySensor">Your device doesn\'t seem to have a proximity sensor.</string>
|
||||
<string name="proximitySensorHint">The proximity sensor works differently on every device model. On some it just reports close or far as binary values, on others it may report more granular values. You can use this tester to see how it behaves on your device.</string>
|
||||
<string name="close">close</string>
|
||||
<string name="far">far</string>
|
||||
<string name="proximityText">proximity is between \"%1$s\" and \"%2$s\"</string>
|
||||
</resources>
|
||||
@@ -1,5 +1,9 @@
|
||||
<resources>
|
||||
|
||||
<style name="AppTheme" parent="android:Theme.Light" />
|
||||
<style name="AppThemeMaterial" parent="Theme.MaterialComponents.DayNight" /> <!-- very dark -->
|
||||
<style name="AppThemeMaterial3" parent="Theme.Material3.DayNight" /> <!-- very dark -->
|
||||
<style name="AppThemeCompat" parent="Theme.AppCompat.DayNight" /> <!-- greyish -->
|
||||
<style name="AppThemeCompatLight" parent="Theme.AppCompat.Light" /> <!-- greyish -->
|
||||
|
||||
</resources>
|
||||
@@ -0,0 +1,4 @@
|
||||
* Behoben: AndereProgramme-Starten-Aktion wurde überarbeitet, eine Bearbeitung Ihrer Aktionen kann erforderlich sein, um weiterarbeiten zu können
|
||||
* Behoben: Die Aktionsauswahl öffnetein einigen Fällen eine andere Aktion als die Ausgewählte
|
||||
* Behoben: Aktivieren/deaktivieren der Datenverbindung mit root auf älteren Geräten
|
||||
* Hinzugefügt: Wochentag und Monat als Textvariablen hinzugefügt
|
||||
@@ -0,0 +1,15 @@
|
||||
* Behoben: Absturz beim Auslösen einer URL ohne Parameterpaare
|
||||
* Behoben: Bei der Überprüfung des Akkuladetyps "beliebig" löste der Auslöser nicht aus.
|
||||
* Behoben: Warnungen in Protokollen für formatierte Benachrichtigungen behoben
|
||||
* Behoben: Die Ortsberechtigung wird nun beim Anlegen eines neuen Ortsobjekts abgefragt.
|
||||
* Behoben: Die Berechtigung "Über andere Apps anzeigen" wurde für Aktionen zum Starten einer anderen App nicht mehr angefordert.
|
||||
* Behoben: Der Wert der Bildschirmhelligkeit sollte jetzt etwas besser funktionieren
|
||||
* Behoben: Kalenderereignisse wurden nicht berücksichtigt, wenn sie nach dem Start des Automatisierungsdienstes erstellt wurden
|
||||
* Behoben: Fehler im NFC-Trigger, der nur die Google Play-Version betraf
|
||||
* Behoben: Beispiele-URL korrigiert
|
||||
* Behoben: Das Service-Symbol konnte in Android 7 und darunter nicht ausgeblendet werden
|
||||
* Behoben: Kopfhörerauslöser wurde nicht korrekt verarbeitet
|
||||
* Hinzugefügt: Variablenprüfungen können nun invertiert werden. Auch reguläre Ausdrücke werden nun unterstützt.
|
||||
* Hinzugefügt: Einstellung zum Ein-/Ausschalten der Konsolenprotokollierung (Logcat)
|
||||
* Hinzugefügt: Regeln können jetzt über das Kontextmenü auf dem Regelbildschirm aktiviert/deaktiviert werden
|
||||
* Hinzugefügt: Ab Android 14 können die Lautstärken für Klingeltöne und Benachrichtigungen separat gesteuert werden (entsprechend dem Betriebssystemwechsel).
|
||||
@@ -0,0 +1,4 @@
|
||||
* Fixed: Start other program action revised, editing of your actions may be necessary to continue working
|
||||
* Fixed: Action type menu would in some cases pick up another action than selected
|
||||
* Fixed: Fix while toggling data connection with root on older devices
|
||||
* Added: Day of week and month added as text variables
|
||||
@@ -0,0 +1,15 @@
|
||||
* Fixed: Crash when triggering a URL without parameter pairs
|
||||
* Fixed: When checking for battery charging type "any" the trigger didn't fire.
|
||||
* Fixed: Fixed warnings in logs for formatted notifications
|
||||
* Fixed: Location permission requested now when creating a new location object.
|
||||
* Fixed: Display-over-other-apps permission was not requested anymore for start another app actions.
|
||||
* Fixed: Screen brightness value should work a bit better now
|
||||
* Fixed: Calendar events were not regarded if created after Automation service start
|
||||
* Fixed: Bug in NFC trigger that affected only the Google Play version
|
||||
* Fixed: Examples URL fixed
|
||||
* Fixed: Service icon could not be hidden in Android 7 and below
|
||||
* Fixed: Headphone trigger was not correctly processed
|
||||
* Added: Variable checks can now be inverted. Also regular expressions are now supported.
|
||||
* Added: Setting to turn on/off console logging (logcat)
|
||||
* Added: Rules can now be enabled/disabled from the context menu on the rules screen
|
||||
* Added: From Android 14 on volumes for ringtones and notifications can be controlled separately (according to the operating system change).
|
||||
@@ -0,0 +1,4 @@
|
||||
* Fixed: Crash in Play Store version when starting the service
|
||||
* Fixed: trigger url result was not stored correctly in a variable
|
||||
* Fixed: Crash when clicking +/- when creating/editing TimeFrame trigger
|
||||
* Added Possibility to select UI theme, hence enabling modern UI designs
|
||||
@@ -0,0 +1,4 @@
|
||||
* Corregido: Iniciar otra acción del programa revisada, puede ser necesario editar sus acciones para continuar trabajando
|
||||
* Corregido: El menú de tipo de acción en algunos casos recogía otra acción que la seleccionada
|
||||
* Solucionado: Solucionado al alternar la conexión de datos con root en dispositivos más antiguos
|
||||
* Añadido: Día de la semana y mes añadidos como variables de texto
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user