diff --git a/app/src/apkFlavor/AndroidManifest.xml b/app/src/apkFlavor/AndroidManifest.xml
index da2a16b3..e91a1c9e 100644
--- a/app/src/apkFlavor/AndroidManifest.xml
+++ b/app/src/apkFlavor/AndroidManifest.xml
@@ -174,6 +174,9 @@
+
+
+
diff --git a/app/src/fdroidFlavor/AndroidManifest.xml b/app/src/fdroidFlavor/AndroidManifest.xml
index 7aba290b..4801f7ef 100644
--- a/app/src/fdroidFlavor/AndroidManifest.xml
+++ b/app/src/fdroidFlavor/AndroidManifest.xml
@@ -172,6 +172,8 @@
+
+
diff --git a/app/src/googlePlayFlavor/AndroidManifest.xml b/app/src/googlePlayFlavor/AndroidManifest.xml
index 8c118b6c..c3d73d59 100644
--- a/app/src/googlePlayFlavor/AndroidManifest.xml
+++ b/app/src/googlePlayFlavor/AndroidManifest.xml
@@ -156,6 +156,8 @@
+
+
diff --git a/app/src/main/java/com/jens/automation2/Action.java b/app/src/main/java/com/jens/automation2/Action.java
index cfd239a3..9207db70 100644
--- a/app/src/main/java/com/jens/automation2/Action.java
+++ b/app/src/main/java/com/jens/automation2/Action.java
@@ -52,6 +52,7 @@ public class Action
sendBroadcast,
runExecutable,
wakelock,
+ setVariable,
startPhoneCall,
stopPhoneCall,
sendTextMessage;
@@ -130,6 +131,8 @@ public class Action
return context.getResources().getString(R.string.runExecutable);
case wakelock:
return context.getResources().getString(R.string.keepDeviceAwake);
+ case setVariable:
+ return context.getResources().getString(R.string.setVariable);
case startPhoneCall:
return context.getResources().getString(R.string.startPhoneCall);
case stopPhoneCall:
@@ -283,6 +286,16 @@ public class Action
case wakelock:
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.keepDeviceAwake) + " (" + String.valueOf(getParameter1()) + ")");
break;
+ case setVariable:
+ String[] variableParams = getParameter2().split(actionParameter2Split);
+ String addition;
+ if (variableParams.length >= 2)
+ addition = " (key: " + variableParams[0] + ", value: " + variableParams[1] + ")";
+ else
+ addition = " (delete key: " + variableParams[0] + ")";
+
+ returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.setVariable) + addition);
+ break;
case startPhoneCall:
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.startPhoneCall));
break;
@@ -347,24 +360,24 @@ public class Action
if (parts.length > 4 && !StringUtils.isBlank(parts[4]))
returnString.append(", " + Miscellaneous.getAnyContext().getResources().getString(R.string.ifString) + " " + Miscellaneous.getAnyContext().getResources().getString(R.string.text) + " " + Trigger.getMatchString(parts[3]) + " " + parts[4]);
- if(parts.length >= 6)
+ if (parts.length >= 6)
{
- if(!parts[5].equals(ActivityManageActionCloseNotification.dismissRegularString))
+ if (!parts[5].equals(ActivityManageActionCloseNotification.dismissRegularString))
{
returnString.append(" " + String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.withButton), parts[5]));
}
}
}
- else if(this.getAction().equals(Action_Enum.setWifi))
+ else if (this.getAction().equals(Action_Enum.setWifi))
{
- if(!StringUtils.isEmpty(this.parameter2))
+ if (!StringUtils.isEmpty(this.parameter2))
{
boolean useRoot = Boolean.parseBoolean(this.parameter2);
- if(useRoot)
+ if (useRoot)
returnString.append(" " + Miscellaneous.getAnyContext().getResources().getString(R.string.usingRoot));
}
}
- else if(this.getAction().equals(Action_Enum.controlMediaPlayback))
+ else if (this.getAction().equals(Action_Enum.controlMediaPlayback))
{
returnString.append(": ");
@@ -392,10 +405,12 @@ public class Action
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.unknown));
}
}
- else if(this.getAction().equals(Action_Enum.sendBroadcast))
+ else if (this.getAction().equals(Action_Enum.sendBroadcast))
{
returnString.append(": " + parameter2.replace(Action.actionParameter2Split, "; ").replace(Action.intentPairSeparator, "/"));
}
+ else if (this.getAction().equals(Action_Enum.setVariable))
+ ; // it's completed further above already
else if (parameter2 != null && parameter2.length() > 0)
returnString.append(": " + parameter2.replace(Action.actionParameter2Split, "; "));
}
@@ -600,6 +615,9 @@ public class Action
else
Actions.wakeLockStop();
break;
+ case setVariable:
+ Actions.setVariable(this.getParameter2());
+ break;
case startPhoneCall:
Actions.startPhoneCall(context, this.getParameter2());
break;
diff --git a/app/src/main/java/com/jens/automation2/Actions.java b/app/src/main/java/com/jens/automation2/Actions.java
index da29d849..046e1227 100644
--- a/app/src/main/java/com/jens/automation2/Actions.java
+++ b/app/src/main/java/com/jens/automation2/Actions.java
@@ -66,6 +66,7 @@ import java.util.Calendar;
import java.util.Collections;
import java.util.Enumeration;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@@ -212,7 +213,35 @@ public class Actions
context.sendBroadcast(broadcastIntent);
}
- public static class WifiStuff
+ public static void setVariable(String parameter2)
+ {
+ String[] parts = parameter2.split(Action.actionParameter2Split);
+
+ if(AutomationService.isMyServiceRunning(Miscellaneous.getAnyContext()))
+ {
+ Map map = AutomationService.getInstance().getVariableMap();
+
+ if(parts.length > 1)
+ map.put(parts[0], parts[1]);
+ else
+ map.remove(parts[0]);
+ }
+
+ Miscellaneous.logEvent("i", "Variable", "Checking for applicable rules after variable has been set or deleted.", 2);
+ List ruleCandidates = Rule.findRuleCandidates(Trigger.Trigger_Enum.checkVariable);
+ for(int i=0; i 1)
+ etVariableSetValue.setText(input[1]);
+ }
+ }
+}
diff --git a/app/src/main/java/com/jens/automation2/ActivityManageRule.java b/app/src/main/java/com/jens/automation2/ActivityManageRule.java
index 80e65eef..99f7e4ab 100644
--- a/app/src/main/java/com/jens/automation2/ActivityManageRule.java
+++ b/app/src/main/java/com/jens/automation2/ActivityManageRule.java
@@ -135,6 +135,10 @@ public class ActivityManageRule extends Activity
final static int requestCodeTriggerSubSystemStateEdit = 822;
final static int requestCodeActionMakePhoneCallAdd = 823;
final static int requestCodeActionMakePhoneCallEdit = 824;
+ final static int requestCodeActionSetVariableAdd = 825;
+ final static int requestCodeActionSetVariableEdit = 826;
+ final static int requestCodeTriggerCheckVariableAdd = 827;
+ final static int requestCodeTriggerCheckVariableEdit = 828;
public static ActivityManageRule getInstance()
{
@@ -332,6 +336,12 @@ public class ActivityManageRule extends Activity
subSystemStateEditor.putExtra(intentNameTriggerParameter2, selectedTrigger.getTriggerParameter2());
startActivityForResult(subSystemStateEditor, requestCodeTriggerSubSystemStateEdit);
break;
+ case checkVariable:
+ Intent variableStateEditor = new Intent(ActivityManageRule.this, ActivityManageTriggerCheckVariable.class);
+ variableStateEditor.putExtra(intentNameTriggerParameter1, selectedTrigger.getTriggerParameter());
+ variableStateEditor.putExtra(intentNameTriggerParameter2, selectedTrigger.getTriggerParameter2());
+ startActivityForResult(variableStateEditor, requestCodeTriggerCheckVariableEdit);
+ break;
default:
break;
}
@@ -424,6 +434,11 @@ public class ActivityManageRule extends Activity
activityEditMakePhoneCallIntent.putExtra(intentNameActionParameter2, a.getParameter2());
startActivityForResult(activityEditMakePhoneCallIntent, requestCodeActionMakePhoneCallEdit);
break;
+ case setVariable:
+ Intent activityEditSetVariableIntent = new Intent(ActivityManageRule.this, ActivityManageActionSetVariable.class);
+ activityEditSetVariableIntent.putExtra(intentNameActionParameter2, a.getParameter2());
+ startActivityForResult(activityEditSetVariableIntent, requestCodeActionSetVariableEdit);
+ break;
case setWifi:
Intent activityEditSetWifiIntent = new Intent(ActivityManageRule.this, ActivityManageActionWifi.class);
activityEditSetWifiIntent.putExtra(intentNameActionParameter1, a.getParameter1());
@@ -822,6 +837,13 @@ public class ActivityManageRule extends Activity
startActivityForResult(subSystemStateTriggerEditor, requestCodeTriggerSubSystemStateAdd);
return;
}
+ else if(triggerType == Trigger_Enum.checkVariable)
+ {
+ newTrigger.setTriggerType(Trigger_Enum.checkVariable);
+ Intent variableTriggerEditor = new Intent(myContext, ActivityManageTriggerCheckVariable.class);
+ startActivityForResult(variableTriggerEditor, requestCodeTriggerCheckVariableAdd);
+ return;
+ }
else
getTriggerParameterDialog(context, booleanChoices).show();
@@ -1601,6 +1623,16 @@ public class ActivityManageRule extends Activity
this.refreshActionList();
}
}
+ else if(requestCode == requestCodeActionSetVariableAdd)
+ {
+ if(resultCode == RESULT_OK)
+ {
+ newAction.setParentRule(ruleToEdit);
+ newAction.setParameter2(data.getStringExtra(intentNameActionParameter2));
+ ruleToEdit.getActionSet().add(newAction);
+ this.refreshActionList();
+ }
+ }
else if(requestCode == requestCodeActionWakeLockAdd)
{
if(resultCode == RESULT_OK)
@@ -1726,6 +1758,20 @@ public class ActivityManageRule extends Activity
this.refreshActionList();
}
}
+ else if(requestCode == requestCodeActionSetVariableEdit)
+ {
+ if(resultCode == RESULT_OK)
+ {
+ ruleToEdit.getActionSet().get(editIndex).setParentRule(ruleToEdit);
+
+ if(data.hasExtra(intentNameActionParameter1) && data.hasExtra(intentNameActionParameter2))
+ {
+ ruleToEdit.getActionSet().get(editIndex).setParameter2(data.getStringExtra(intentNameActionParameter2));
+ }
+
+ this.refreshActionList();
+ }
+ }
else if(requestCode == requestCodeActionSetWifiEdit)
{
if(resultCode == RESULT_OK)
@@ -1920,6 +1966,17 @@ public class ActivityManageRule extends Activity
this.refreshTriggerList();
}
}
+ else if(requestCode == requestCodeTriggerCheckVariableAdd)
+ {
+ if(resultCode == RESULT_OK)
+ {
+ newTrigger.setTriggerParameter(data.getBooleanExtra(intentNameTriggerParameter1, true));
+ newTrigger.setTriggerParameter2(data.getStringExtra(intentNameTriggerParameter2));
+ newTrigger.setParentRule(ruleToEdit);
+ ruleToEdit.getTriggerSet().add(newTrigger);
+ this.refreshTriggerList();
+ }
+ }
else if(requestCode == requestCodeTriggerTetheringEdit)
{
if(resultCode == RESULT_OK)
@@ -1946,6 +2003,19 @@ public class ActivityManageRule extends Activity
this.refreshTriggerList();
}
}
+ else if(requestCode == requestCodeTriggerCheckVariableEdit)
+ {
+ if(resultCode == RESULT_OK)
+ {
+ Trigger editedTrigger = new Trigger();
+ editedTrigger.setTriggerType(Trigger_Enum.checkVariable);
+ editedTrigger.setTriggerParameter(data.getBooleanExtra(intentNameTriggerParameter1, true));
+ editedTrigger.setTriggerParameter2(data.getStringExtra(intentNameTriggerParameter2));
+ editedTrigger.setParentRule(ruleToEdit);
+ ruleToEdit.getTriggerSet().set(editIndex, editedTrigger);
+ this.refreshTriggerList();
+ }
+ }
}
protected AlertDialog getActionTypeDialog()
@@ -2192,6 +2262,12 @@ public class ActivityManageRule extends Activity
Intent intent = new Intent(ActivityManageRule.this, ActivityManageActionMakePhoneCall.class);
startActivityForResult(intent, requestCodeActionMakePhoneCallAdd);
}
+ else if(Action.getActionTypesAsArray()[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()))
{
newAction.setAction(Action_Enum.stopPhoneCall);
diff --git a/app/src/main/java/com/jens/automation2/ActivityManageTriggerCheckVariable.java b/app/src/main/java/com/jens/automation2/ActivityManageTriggerCheckVariable.java
new file mode 100644
index 00000000..901fe637
--- /dev/null
+++ b/app/src/main/java/com/jens/automation2/ActivityManageTriggerCheckVariable.java
@@ -0,0 +1,56 @@
+package com.jens.automation2;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+
+import androidx.annotation.Nullable;
+
+import org.apache.commons.lang3.StringUtils;
+
+public class ActivityManageTriggerCheckVariable extends Activity
+{
+ EditText etVariableKeyTrigger, etVariableValueTrigger;
+ Button bTriggerVariableSave;
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState)
+ {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_manage_trigger_check_variable);
+
+ etVariableKeyTrigger = (EditText) findViewById(R.id.etVariableKeyTrigger);
+ etVariableValueTrigger = (EditText) findViewById(R.id.etVariableValueTrigger);
+ bTriggerVariableSave = (Button) findViewById(R.id.bTriggerVariableSave);
+
+ Intent input = getIntent();
+ if(input.hasExtra(ActivityManageRule.intentNameTriggerParameter2))
+ {
+ String[] conditions = input.getStringExtra(ActivityManageRule.intentNameTriggerParameter2).split(Trigger.triggerParameter2Split);
+ etVariableKeyTrigger.setText(conditions[0]);
+ if(conditions.length > 1)
+ etVariableValueTrigger.setText(conditions[1]);
+ }
+
+ bTriggerVariableSave.setOnClickListener(new View.OnClickListener()
+ {
+ @Override
+ public void onClick(View view)
+ {
+ Intent response = new Intent();
+// response.putExtra(ActivityManageRule.intentNameTriggerParameter1, rbTetheringOn.isChecked());
+
+ if(StringUtils.isEmpty(etVariableValueTrigger.getText().toString()))
+ response.putExtra(ActivityManageRule.intentNameTriggerParameter2, etVariableKeyTrigger.getText().toString());
+ else
+ response.putExtra(ActivityManageRule.intentNameTriggerParameter2, etVariableKeyTrigger.getText().toString() + Trigger.triggerParameter2Split + etVariableValueTrigger.getText().toString());
+
+ setResult(RESULT_OK, response);
+ finish();
+ }
+ });
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/jens/automation2/AutomationService.java b/app/src/main/java/com/jens/automation2/AutomationService.java
index 4b361f4d..6429c2aa 100644
--- a/app/src/main/java/com/jens/automation2/AutomationService.java
+++ b/app/src/main/java/com/jens/automation2/AutomationService.java
@@ -33,6 +33,8 @@ import com.jens.automation2.receivers.PackageReplacedReceiver;
import com.jens.automation2.receivers.PhoneStatusListener;
import java.util.Calendar;
+import java.util.HashMap;
+import java.util.Map;
import java.util.Set;
@SuppressLint("NewApi")
@@ -63,6 +65,8 @@ public class AutomationService extends Service implements OnInitListener
protected Calendar lockSoundChangesEnd = null;
protected boolean isRunning;
+ Map variableMap = new HashMap();
+
protected static AutomationService centralInstance = null;
public void nullLockSoundChangesEnd()
@@ -457,6 +461,10 @@ public class AutomationService extends Service implements OnInitListener
private void stopRoutine()
{
Miscellaneous.logEvent("i", "Service", "Stopping service...", 3);
+
+ // Clear variables for trigger/action with same name
+ variableMap.clear();
+
try
{
myLocationProvider.stopLocationService();
@@ -691,14 +699,19 @@ public class AutomationService extends Service implements OnInitListener
}
}
}
-
- public static boolean isMainActivityRunning(Context context)
- {
+
+ public Map getVariableMap()
+ {
+ return variableMap;
+ }
+
+ public static boolean isMainActivityRunning(Context context)
+ {
if(ActivityMainScreen.getActivityMainScreenInstance() == null)
return false;
else
return true;
- }
+ }
public static boolean isMyServiceRunning(Context context)
{
diff --git a/app/src/main/java/com/jens/automation2/Profile.java b/app/src/main/java/com/jens/automation2/Profile.java
index d1241e31..45f153a1 100644
--- a/app/src/main/java/com/jens/automation2/Profile.java
+++ b/app/src/main/java/com/jens/automation2/Profile.java
@@ -568,17 +568,17 @@ public class Profile implements Comparable
}
finally
{
- Miscellaneous.logEvent("i", "POI", "Checking for applicable rule after profile " + this.getName() + " has been activated.", 2);
+ Miscellaneous.logEvent("i", "Profile", "Checking for applicable rules after profile " + this.getName() + " has been activated.", 2);
List ruleCandidates = Rule.findRuleCandidates(Trigger.Trigger_Enum.profileActive);
for(int i=0; i map = AutomationService.getInstance().getVariableMap();
+
+ String[] conditions = this.getTriggerParameter2().split(Trigger.triggerParameter2Split);
+
+ if(conditions.length == 1) // no real condition
+ return true;
+ else
+ {
+ if (map.containsKey(conditions[0]))
+ {
+ if (map.get(conditions[0]).equals(conditions[1]))
+ return true;
+ }
+ }
+ }
+ catch(Exception e)
+ {
+ Miscellaneous.logEvent("e", "checkVariable()", 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);
@@ -1418,7 +1453,7 @@ public class Trigger
switch(this.getTriggerType())
{
case charging:
- if(getTriggerParameter())
+ if (getTriggerParameter())
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.starting) + " ");
else
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.stopping) + " ");
@@ -1426,14 +1461,14 @@ public class Trigger
break;
case batteryLevel:
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.batteryLevel));
- if(getTriggerParameter())
+ if (getTriggerParameter())
returnString.append(" " + Miscellaneous.getAnyContext().getResources().getString(R.string.exceeds) + " ");
else
returnString.append(" " + Miscellaneous.getAnyContext().getResources().getString(R.string.dropsBelow) + " ");
returnString.append(String.valueOf(this.getBatteryLevel()) + " %");
break;
case usb_host_connection:
- if(getTriggerParameter())
+ if (getTriggerParameter())
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.connecting) + " ");
else
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.disconnecting) + " ");
@@ -1441,9 +1476,9 @@ public class Trigger
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.triggerUsb_host_connection));
break;
case pointOfInterest:
- if(this.getPointOfInterest() != null)
+ if (this.getPointOfInterest() != null)
{
- if(getTriggerParameter())
+ if (getTriggerParameter())
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.entering) + " ");
else
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.leaving) + " ");
@@ -1452,33 +1487,33 @@ public class Trigger
}
else
{
- if(getTriggerParameter())
+ if (getTriggerParameter())
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.leaving) + " " + Miscellaneous.getAnyContext().getResources().getString(R.string.anyLocation));
else
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.entering) + " " + Miscellaneous.getAnyContext().getResources().getString(R.string.anyLocation));
}
break;
case timeFrame:
- if(getTriggerParameter())
+ if (getTriggerParameter())
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.entering) + " ");
else
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.leaving) + " ");
String repeat = ", " + Miscellaneous.getAnyContext().getResources().getString(R.string.noRepetition);
- if(this.getTimeFrame().getRepetition() > 0)
+ if (this.getTimeFrame().getRepetition() > 0)
repeat = ", " + String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.repeatEveryXsecondsWithVariable), String.valueOf(this.getTimeFrame().getRepetition()));
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.triggerTimeFrame) + ": " + this.getTimeFrame().getTriggerTimeStart().toString() + " " + Miscellaneous.getAnyContext().getResources().getString(R.string.until) + " " + this.getTimeFrame().getTriggerTimeStop().toString() + " " + Miscellaneous.getAnyContext().getResources().getString(R.string.onDays) + " " + this.getTimeFrame().getDayList().toString() + repeat);
break;
case speed:
- if(getTriggerParameter())
+ if (getTriggerParameter())
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.exceeding) + " ");
else
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.droppingBelow) + " ");
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.triggerSpeed) + ": " + String.valueOf(this.getSpeed()) + " km/h");
break;
case noiseLevel:
- if(getTriggerParameter())
+ if (getTriggerParameter())
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.exceeding) + " ");
else
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.droppingBelow) + " ");
@@ -1486,27 +1521,27 @@ public class Trigger
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.triggerNoiseLevel) + ": " + String.valueOf(this.getNoiseLevelDb()) + " dB");
break;
case wifiConnection:
- String wifiDisplayName = "";
- if(this.getTriggerParameter2().length() == 0)
+ String wifiDisplayName = "";
+ if (this.getTriggerParameter2().length() == 0)
wifiDisplayName += Miscellaneous.getAnyContext().getResources().getString(R.string.anyWifi);
else
wifiDisplayName += this.getTriggerParameter2();
-
- if(getTriggerParameter())
+
+ if (getTriggerParameter())
returnString.append(String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.connectedToWifi), wifiDisplayName));
else
returnString.append(String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.disconnectedFromWifi), wifiDisplayName));
-
+
break;
case process_started_stopped:
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.application) + " " + this.getProcessName() + " " + Miscellaneous.getAnyContext().getResources().getString(R.string.is) + " ");
- if(this.triggerParameter)
+ if (this.triggerParameter)
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.started));
else
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.stopped));
break;
case airplaneMode:
- if(getTriggerParameter())
+ if (getTriggerParameter())
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.activated) + " ");
else
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.deactivated) + " ");
@@ -1514,7 +1549,7 @@ public class Trigger
break;
case roaming:
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.roaming));
- if(getTriggerParameter())
+ if (getTriggerParameter())
returnString.append(" " + Miscellaneous.getAnyContext().getResources().getString(R.string.activated));
else
returnString.append(" " + Miscellaneous.getAnyContext().getResources().getString(R.string.deactivated));
@@ -1526,27 +1561,27 @@ public class Trigger
returnString.append(" ");
- if(elements[1].equals(triggerPhoneCallDirectionAny))
+ if (elements[1].equals(triggerPhoneCallDirectionAny))
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.with));
- else if(elements[1].equals(triggerPhoneCallDirectionIncoming))
+ else if (elements[1].equals(triggerPhoneCallDirectionIncoming))
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.from));
- else if(elements[1].equals(triggerPhoneCallDirectionOutgoing))
+ else if (elements[1].equals(triggerPhoneCallDirectionOutgoing))
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.to));
returnString.append(" ");
- if(elements[2].equals(Trigger.triggerPhoneCallNumberAny))
+ if (elements[2].equals(Trigger.triggerPhoneCallNumberAny))
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.any) + " " + Miscellaneous.getAnyContext().getResources().getString(R.string.number));
else
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.number) + " " + Miscellaneous.getAnyContext().getResources().getString(R.string.matching) + " " + elements[2]);
returnString.append(" ");
- if(elements[0].equals(Trigger.triggerPhoneCallStateRinging))
+ if (elements[0].equals(Trigger.triggerPhoneCallStateRinging))
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.ringing));
- else if(elements[0].equals(Trigger.triggerPhoneCallStateStarted))
+ else if (elements[0].equals(Trigger.triggerPhoneCallStateStarted))
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.started));
- else if(elements[0].equals(Trigger.triggerPhoneCallStateStopped))
+ else if (elements[0].equals(Trigger.triggerPhoneCallStateStopped))
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.stopped));
break;
@@ -1566,18 +1601,18 @@ public class Trigger
else
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.featureNotInFdroidVersion));
}
- catch(ClassNotFoundException e)
+ catch (ClassNotFoundException e)
{
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.featureNotInFdroidVersion));
}
break;
case bluetoothConnection:
String device = Miscellaneous.getAnyContext().getResources().getString(R.string.anyDevice);
- if(bluetoothDeviceAddress.equals(""))
+ if (bluetoothDeviceAddress.equals(""))
{
device = Miscellaneous.getAnyContext().getResources().getString(R.string.any);
}
- else if(bluetoothDeviceAddress.equals(""))
+ else if (bluetoothDeviceAddress.equals(""))
{
device = Miscellaneous.getAnyContext().getResources().getString(R.string.noDevice);
}
@@ -1587,21 +1622,21 @@ public class Trigger
{
device = BluetoothReceiver.getDeviceByAddress(bluetoothDeviceAddress).getName() + " (" + this.bluetoothDeviceAddress + ")";
}
- catch(NullPointerException e)
+ catch (NullPointerException e)
{
device = Miscellaneous.getAnyContext().getResources().getString(R.string.invalidDevice) + ": " + this.bluetoothDeviceAddress;
Miscellaneous.logEvent("w", "Trigger", device, 3);
}
}
- if(bluetoothEvent.equals(BluetoothDevice.ACTION_ACL_CONNECTED) || bluetoothEvent.equals(BluetoothDevice.ACTION_ACL_DISCONNECTED))
+ if (bluetoothEvent.equals(BluetoothDevice.ACTION_ACL_CONNECTED) || bluetoothEvent.equals(BluetoothDevice.ACTION_ACL_DISCONNECTED))
{
if (this.triggerParameter)
returnString.append(String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.bluetoothConnectionTo), device));
else
returnString.append(String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.bluetoothDisconnectFrom), device));
}
- else if(bluetoothEvent.equals(BluetoothDevice.ACTION_FOUND))
+ else if (bluetoothEvent.equals(BluetoothDevice.ACTION_FOUND))
{
if (this.triggerParameter)
returnString.append(String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.bluetoothDeviceInRange), device));
@@ -1611,7 +1646,7 @@ public class Trigger
break;
case headsetPlugged:
String type;
- switch(headphoneType)
+ switch (headphoneType)
{
case 0:
type = Miscellaneous.getAnyContext().getResources().getString(R.string.headphoneSimple);
@@ -1626,13 +1661,13 @@ public class Trigger
type = Miscellaneous.getAnyContext().getResources().getString(R.string.notSet);
break;
}
- if(getTriggerParameter())
+ if (getTriggerParameter())
returnString.append(String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.headsetConnected), type));
else
returnString.append(String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.headsetDisconnected), type));
break;
case notification:
- if(this.getTriggerParameter2().contains(triggerParameter2Split))
+ if (this.getTriggerParameter2().contains(triggerParameter2Split))
{
String[] params = getTriggerParameter2().split(triggerParameter2Split);
@@ -1653,7 +1688,7 @@ public class Trigger
else
appString = "app " + app;
- if(triggerParameter)
+ if (triggerParameter)
triggerBuilder.append(String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.postsNotification), appString));
else
triggerBuilder.append(String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.removedNotification), appString));
@@ -1675,26 +1710,26 @@ public class Trigger
returnString.append(Miscellaneous.getAnyContext().getString(R.string.deviceIsInCertainOrientation));
break;
case profileActive:
- if(triggerParameter)
+ if (triggerParameter)
returnString.append(String.format(Miscellaneous.getAnyContext().getString(R.string.profileActive), getTriggerParameter2().split(Trigger.triggerParameter2Split)[0]));
else
returnString.append(String.format(Miscellaneous.getAnyContext().getString(R.string.profileNotActive), getTriggerParameter2().split(Trigger.triggerParameter2Split)[0]));
break;
case musicPlaying:
- if(triggerParameter)
+ if (triggerParameter)
returnString.append(Miscellaneous.getAnyContext().getString(R.string.musicIsPlaying));
else
returnString.append(Miscellaneous.getAnyContext().getString(R.string.musicIsNotPlaying));
break;
case screenState:
String state;
- switch(triggerParameter2)
+ switch (triggerParameter2)
{
case "0":
state = Miscellaneous.getAnyContext().getString(R.string.off);
break;
case "1":
- state = Miscellaneous.getAnyContext().getString(R.string.on);
+ state = Miscellaneous.getAnyContext().getString(R.string.on);
break;
case "2":
state = Miscellaneous.getAnyContext().getString(R.string.unlocked);
@@ -1719,7 +1754,7 @@ public class Trigger
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.serviceIsStarting) + ": " + String.valueOf(triggerParameter));
break;
case broadcastReceived:
- if(triggerParameter)
+ if (triggerParameter)
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.broadcastReceived));
else
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.broadcastNotReceived));
@@ -1727,7 +1762,7 @@ public class Trigger
returnString.append(": " + triggerParameter2);
break;
case tethering:
- if(triggerParameter)
+ if (triggerParameter)
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.tetheringActive));
else
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.tetheringNotActive));
@@ -1736,7 +1771,7 @@ public class Trigger
break;
case subSystemState:
Trigger.subSystemStates desiredState = subSystemStates.valueOf(triggerParameter2);
- switch(desiredState)
+ switch (desiredState)
{
case wifi:
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.wifi));
@@ -1748,11 +1783,20 @@ public class Trigger
returnString.append(" " + Miscellaneous.getAnyContext().getResources().getString(R.string.is) + " ");
- if(triggerParameter)
+ if (triggerParameter)
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.activated));
else
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.deactivated));
break;
+ case checkVariable:
+ 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));
+ break;
default:
returnString.append("error");
break;
diff --git a/app/src/main/res/layout/activity_manage_action_set_variable.xml b/app/src/main/res/layout/activity_manage_action_set_variable.xml
new file mode 100644
index 00000000..30f00bf9
--- /dev/null
+++ b/app/src/main/res/layout/activity_manage_action_set_variable.xml
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_manage_trigger_check_variable.xml b/app/src/main/res/layout/activity_manage_trigger_check_variable.xml
new file mode 100644
index 00000000..f92b143b
--- /dev/null
+++ b/app/src/main/res/layout/activity_manage_trigger_check_variable.xml
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 878aa071..b35da677 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -761,4 +761,14 @@
Telefonanruf beenden
Telefonanruf beenden
Ihre Einstellungen und/oder Regeln verweisen derzeit auf Funktionen, die in der Google Play-Version nicht bereitgestellt werden können. Dazu gehört unter anderem alles, was mit Telefonaten und Textnachrichten zu tun hat.
+ Variable festlegen
+ Variable löschen
+ Variablenname
+ Variablenwert
+ Wenn Sie für eine Variable einen leeren Wert angeben, wird sie gelöscht.
+ Geben Sie einen Namen für die Variable an.
+ Variable prüfen
+ Wenn Sie den Wert der Variablen leer lassen, darf sie nicht gesetzt sein, damit die Bedingung als erfüllt gilt.
+ wenn Variable %1$s den Wert %2$s hat
+ wenn Variable %1$s nicht gesetzt ist
\ No newline at end of file
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 1197dc03..0c61ea47 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -760,4 +760,14 @@
Terminar llamda de teléfono
Terminar llamda de teléfono
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.
+ Si la variable %1$s no está establecida
+ Si la variable %1$s es %2$s
+ Si deja el valor vacío, no se debe establecer la variable para que la condición devuelva true.
+ Comprobar variable
+ Introduzca una clave para la variable.
+ Si establece una variable en un valor vacío, se eliminará.
+ Valor variable
+ Clave variable
+ Eliminar variable
+ Establecer una variable
\ No newline at end of file
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 68ec512f..a2994068 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -760,4 +760,14 @@
Mettre fin à l\'appel téléphonique
Mettre fin à l\'appel téléphonique
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. Entre autres choses, cela inclut tout ce qui concerne les appels téléphoniques et les messages texte.
+ si la variable %1$s n\'est pas définie
+ si la variable %1$s est %2$s
+ Si vous laissez la valeur vide, la variable ne doit pas être définie pour que la condition renvoie true.
+ Vérifier la variable
+ Entrez une clé pour la variable.
+ Si vous définissez une variable sur une valeur vide, elle sera supprimée.
+ Valeur variable
+ Clé variable
+ Supprimer la variable
+ Définir une variable
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 21d79b86..5254d9ea 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -761,4 +761,14 @@
Termina telefonata
Termina telefonata
Le tue impostazioni e/o regole fanno attualmente riferimento a funzioni che non possono essere fornite nella versione di Google Play. Tra le altre cose che include tutto ciò che riguarda le telefonate e i messaggi di testo.
+ Impostare una variabile
+ Elimina variabile
+ Chiave variabile
+ Valore variabile
+ Se si imposta una variabile su un valore vuoto, questa verrà eliminata.
+ Immettere una chiave per la variabile.
+ Controlla variabile
+ Se si lascia vuoto il valore, la variabile non deve essere impostata affinché la condizione restituisca true.
+ Se la variabile %1$s è %2$s
+ Se la variabile %1$s non è impostata
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index c9a26c87..8ca03864 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -759,5 +759,15 @@
Telefoongesprek beëindigen
Telefoongesprek beëindigen
Uw instellingen en/of regels verwijzen momenteel naar functies die niet kunnen worden geleverd in de Google Play-versie. Dat omvat onder andere alles wat te maken heeft met telefoontjes en sms-berichten.
+ Een variabele instellen
+ Variabele verwijderen
+ Variabele sleutel
+ Variabele waarde
+ Als u een variabele instelt op een lege waarde, wordt deze verwijderd.
+ Voer een sleutel in voor de variabele.
+ Variabele controleren
+ Als u de waarde leeg laat, mag de variabele niet worden ingesteld om de voorwaarde true te laten retourneren.
+ als variabele %1$s %2$s is
+ als variabele %1$s niet is ingesteld
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index b39ef2c2..62da590a 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -818,4 +818,14 @@
Завершение телефонного звонка
Завершение телефонного звонка
Ваши настройки и/или правила в настоящее время ссылаются на функции, которые не могут быть предоставлены в версии Google Play. Среди прочего, это включает в себя все, что связано с телефонными звонками и текстовыми сообщениями.
+ Задание переменной
+ Удалить переменную
+ Клавиша переменной
+ Значение переменной
+ Если для переменной задано пустое значение, она будет удалена.
+ Введите ключ для переменной.
+ Проверить переменную
+ Если оставить значение пустым, переменная не должна быть задана для того, чтобы условие возвращало значение true.
+ если переменная %1$s равно %2$s
+ Если переменная %1$s не задана
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 30861e9d..95af043d 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -858,4 +858,14 @@
Here you can enter a phone number that will be called without further prompts. You may use this to make settings like making adjustments to call routing, etc.. Please search for the codes required for this on your own.
End phone call
End phone call
+ Set a variable
+ Delete variable
+ Variable key
+ Variable value
+ If you set a variable to an empty value it will be deleted.
+ Enter a key for the variable.
+ Check variable
+ If you leave the value empty the variable must not be set for the condition to return true.
+ if variable %1$s is %2$s
+ if variable %1$s is not set
\ No newline at end of file
diff --git a/fastlane/metadata/android/en-US/changelogs/123.txt b/fastlane/metadata/android/en-US/changelogs/123.txt
index cb7efa08..4ca17a18 100644
--- a/fastlane/metadata/android/en-US/changelogs/123.txt
+++ b/fastlane/metadata/android/en-US/changelogs/123.txt
@@ -1,3 +1,4 @@
* New: Confirmation dialog before deleting locations, rules and profile
* New action: Make phone call without further prompt
+* New trigger/action: Set custom variables as actions and check for them in triggers
* Fixed: Battery receiver could trigger above 100% or below 0%
\ No newline at end of file