diff --git a/app/src/apkFlavor/AndroidManifest.xml b/app/src/apkFlavor/AndroidManifest.xml
index bc61c3a..da2d840 100644
--- a/app/src/apkFlavor/AndroidManifest.xml
+++ b/app/src/apkFlavor/AndroidManifest.xml
@@ -200,6 +200,7 @@
+
@@ -218,6 +219,7 @@
+
diff --git a/app/src/fdroidFlavor/AndroidManifest.xml b/app/src/fdroidFlavor/AndroidManifest.xml
index 3037bae..1546b62 100644
--- a/app/src/fdroidFlavor/AndroidManifest.xml
+++ b/app/src/fdroidFlavor/AndroidManifest.xml
@@ -133,6 +133,19 @@
+
+
+
+
+
+
+
@@ -142,6 +155,7 @@
+
public boolean getsGreenLight(Context context)
{
- return isRuleActive() && applies(context) && hasNotAppliedSinceLastExecution();
+ if(applies(context))
+ {
+ if(hasNotAppliedSinceLastExecution())
+ return true;
+ else
+ Miscellaneous.logEvent("i", "getsGreenLight()", "Rule " + getName() + " has not flipped since its last execution.", 4);
+ }
+ else
+ Miscellaneous.logEvent("i", "getsGreenLight()", "Rule " + getName() + " does not apply.", 4);
+
+ return false;
}
public boolean applies(Context context)
{
if(AutomationService.getInstance() == null)
{
- Miscellaneous.logEvent("i", "RuleCheck", "Automation service not running. Rule cannot apply.", 3);
+ Miscellaneous.logEvent("i", "RuleCheck", "Automation service not running. Rule " + getName() + " cannot apply.", 3);
return false;
}
@@ -476,6 +486,7 @@ public class Rule implements Comparable
{
Rule.ruleRunHistory.add(0, Rule.this); // add at beginning for better visualization
Rule.lastActivatedRuleActivationTime = new Date();
+
while(ruleRunHistory.size() > Settings.rulesThatHaveBeenRanHistorySize)
ruleRunHistory.remove(ruleRunHistory.size()-1);
String history = "";
@@ -505,15 +516,27 @@ public class Rule implements Comparable
public void activate(AutomationService automationService, boolean force)
{
ActivateRuleTask task = new ActivateRuleTask();
-
-// if(Settings.startNewThreadForRuleActivation)
- task.execute(automationService, force);
-// else
-// {
-// task.activateInternally(automationService, force);
-// AutomationService.updateNotification();
-// ActivityMainScreen.updateMainScreen();
-// }
+ task.execute(automationService, force);
+ }
+
+ public static ArrayList findRuleCandidates(Trigger.Trigger_Enum triggerType)
+ {
+ ArrayList ruleCandidates = new ArrayList();
+
+ for(Rule oneRule : ruleCollection)
+ {
+ innerloop:
+ for(Trigger oneTrigger : oneRule.getTriggerSet())
+ {
+ if(oneTrigger.getTriggerType() == triggerType)
+ {
+ ruleCandidates.add(oneRule);
+ break innerloop; // we don't need to check the other triggers in the same rule
+ }
+ }
+ }
+
+ return ruleCandidates;
}
public static ArrayList findRuleCandidatesByPoi(PointOfInterest searchPoi, boolean triggerParameter)
@@ -557,7 +580,7 @@ public class Rule implements Comparable
return ruleCandidates;
}
- public static ArrayList findRuleCandidatesByTimeFrame(TimeFrame searchTimeFrame, boolean triggerParameter)
+ /*public static ArrayList findRuleCandidatesByTimeFrame(TimeFrame searchTimeFrame, boolean triggerParameter)
{
ArrayList ruleCandidates = new ArrayList();
@@ -578,8 +601,9 @@ public class Rule implements Comparable
}
return ruleCandidates;
- }
- public static ArrayList findRuleCandidatesByTime(Time searchTime)
+ }*/
+
+ /*public static ArrayList findRuleCandidatesByTime(Time searchTime)
{
Miscellaneous.logEvent("i", "RuleSearch", "Searching for rules with TimeFrame with time " + searchTime.toString() + ". RuleCollection-Size: " + String.valueOf(ruleCollection.size()), 3);;
ArrayList ruleCandidates = new ArrayList();
@@ -598,7 +622,7 @@ public class Rule implements Comparable
if(oneTrigger.getTimeFrame().getTriggerTimeStart().getTime() > oneTrigger.getTimeFrame().getTriggerTimeStop().getTime())
{
- Miscellaneous.logEvent("i", "Timeframe search", "Rule goes over midnight.", 5);
+ Miscellaneous.logEvent("i", "Timeframe search", "Rule (" + oneRule.getName() + ") stretches over midnight.", 5);
if(oneTrigger.getTimeFrame().getTriggerTimeStart().getTime() <= searchTime.getTime() || searchTime.getTime() <= oneTrigger.getTimeFrame().getTriggerTimeStop().getTime()+20000) //add 20 seconds because of delay
{
ruleCandidates.add(oneRule);
@@ -607,7 +631,7 @@ public class Rule implements Comparable
}
else if(oneTrigger.getTimeFrame().getTriggerTimeStart().getTime() <= searchTime.getTime() && searchTime.getTime() <= oneTrigger.getTimeFrame().getTriggerTimeStop().getTime()+20000) //add 20 seconds because of delay
{
- Miscellaneous.logEvent("i", "RuleSearch", "Rule found with TimeFrame with time " + searchTime.toString(), 3);
+ Miscellaneous.logEvent("i", "RuleSearch", "Rule found (" + oneRule.getName() + ") with TimeFrame with time " + searchTime.toString(), 3);
ruleCandidates.add(oneRule);
break innerloop; //if the poi is found we don't need to search the other triggers in the same rule
}
@@ -618,29 +642,9 @@ public class Rule implements Comparable
Miscellaneous.logEvent("i", "RuleSearch", String.valueOf(ruleCandidates.size()) + " Rule(s) found with TimeFrame with time " + searchTime.toString(), 3);
return ruleCandidates;
- }
+ }*/
- public static ArrayList findRuleCandidatesByTimeFrame()
- {
- ArrayList ruleCandidates = new ArrayList();
-
- for(Rule oneRule : ruleCollection)
- {
- innerloop:
- for(Trigger oneTrigger : oneRule.getTriggerSet())
- {
- if(oneTrigger.getTriggerType() == Trigger.Trigger_Enum.timeFrame)
- {
- ruleCandidates.add(oneRule);
- break innerloop; //if the poi is found we don't need to search the other triggers in the same rule
- }
- }
- }
-
- return ruleCandidates;
- }
-
- public static ArrayList findRuleCandidatesByCharging(boolean triggerParameter)
+ /*public static ArrayList findRuleCandidatesByCharging(boolean triggerParameter)
{
ArrayList ruleCandidates = new ArrayList();
@@ -661,9 +665,9 @@ public class Rule implements Comparable
}
return ruleCandidates;
- }
+ }*/
- public static ArrayList findRuleCandidatesByUsbHost(boolean triggerParameter)
+ /*public static ArrayList findRuleCandidatesByUsbHost(boolean triggerParameter)
{
ArrayList ruleCandidates = new ArrayList();
@@ -684,147 +688,9 @@ public class Rule implements Comparable
}
return ruleCandidates;
- }
+ }*/
- public static ArrayList findRuleCandidatesByBatteryLevel()
- {
- ArrayList ruleCandidates = new ArrayList();
-
- for(Rule oneRule : ruleCollection)
- {
- innerloop:
- for(Trigger oneTrigger : oneRule.getTriggerSet())
- {
- if(oneTrigger.getTriggerType() == Trigger.Trigger_Enum.batteryLevel)
- {
-// if(oneTrigger.getTriggerParameter() == triggerParameter)
-// {
- ruleCandidates.add(oneRule);
- break innerloop; //if the poi is found we don't need to search the other triggers in the same rule
-// }
- }
- }
- }
-
- return ruleCandidates;
- }
-
- public static ArrayList findRuleCandidatesBySpeed()
- {
- ArrayList ruleCandidates = new ArrayList();
-
- for(Rule oneRule : ruleCollection)
- {
- innerloop:
- for(Trigger oneTrigger : oneRule.getTriggerSet())
- {
- if(oneTrigger.getTriggerType() == Trigger.Trigger_Enum.speed)
- {
-// if(oneTrigger.getTriggerParameter() == triggerParameter)
-// {
- ruleCandidates.add(oneRule);
- break innerloop; //if the poi is found we don't need to search the other triggers in the same rule
-// }
- }
- }
- }
-
- return ruleCandidates;
- }
-
- public static ArrayList findRuleCandidatesByNoiseLevel()
- {
- ArrayList ruleCandidates = new ArrayList();
-
- for(Rule oneRule : ruleCollection)
- {
- innerloop:
- for(Trigger oneTrigger : oneRule.getTriggerSet())
- {
- if(oneTrigger.getTriggerType() == Trigger.Trigger_Enum.noiseLevel)
- {
-// if(oneTrigger.getTriggerParameter() == triggerParameter)
-// {
- ruleCandidates.add(oneRule);
- break innerloop; //if the poi is found we don't need to search the other triggers in the same rule
-// }
- }
- }
- }
-
- return ruleCandidates;
- }
-
- public static ArrayList findRuleCandidatesByWifiConnection()
- {
- ArrayList ruleCandidates = new ArrayList();
-
- for(Rule oneRule : ruleCollection)
- {
- innerloop:
- for(Trigger oneTrigger : oneRule.getTriggerSet())
- {
- if(oneTrigger.getTriggerType() == Trigger.Trigger_Enum.wifiConnection)
- {
-// if(oneTrigger.getTriggerParameter() == triggerParameter)
-// {
- ruleCandidates.add(oneRule);
- break innerloop; //we don't need to search the other triggers in the same rule
-// }
- }
- }
- }
-
- return ruleCandidates;
- }
-
- public static ArrayList findRuleCandidatesByBluetoothConnection()
- {
- ArrayList ruleCandidates = new ArrayList();
-
- for(Rule oneRule : ruleCollection)
- {
- innerloop:
- for(Trigger oneTrigger : oneRule.getTriggerSet())
- {
- if(oneTrigger.getTriggerType() == Trigger.Trigger_Enum.bluetoothConnection)
- {
-// if(oneTrigger.getTriggerParameter() == triggerParameter)
-// {
- ruleCandidates.add(oneRule);
- break innerloop; //we don't need to search the other triggers in the same rule
-// }
- }
- }
- }
-
- return ruleCandidates;
- }
-
- public static ArrayList findRuleCandidatesByProcess()
- {
- ArrayList ruleCandidates = new ArrayList();
-
- for(Rule oneRule : ruleCollection)
- {
- innerloop:
- for(Trigger oneTrigger : oneRule.getTriggerSet())
- {
- if(oneTrigger.getTriggerType() == Trigger.Trigger_Enum.process_started_stopped)
- {
-// if(oneTrigger.getTriggerParameter() == triggerParameter)
-// {
- ruleCandidates.add(oneRule);
- break innerloop; //we don't need to search the other triggers in the same rule
-// }
- }
- }
- }
-
- return ruleCandidates;
- }
-
- public static ArrayList findRuleCandidatesByAirplaneMode(boolean triggerParameter)
+ /*public static ArrayList findRuleCandidatesByAirplaneMode(boolean triggerParameter)
{
ArrayList ruleCandidates = new ArrayList();
@@ -845,9 +711,9 @@ public class Rule implements Comparable
}
return ruleCandidates;
- }
+ }*/
- public static ArrayList findRuleCandidatesByRoaming(boolean triggerParameter)
+ /*public static ArrayList findRuleCandidatesByRoaming(boolean triggerParameter)
{
ArrayList ruleCandidates = new ArrayList();
@@ -868,9 +734,9 @@ public class Rule implements Comparable
}
return ruleCandidates;
- }
+ }*/
- public static ArrayList findRuleCandidatesByPhoneCall(String direction)
+ /*public static ArrayList findRuleCandidatesByPhoneCall(String direction)
{
ArrayList ruleCandidates = new ArrayList();
@@ -892,73 +758,7 @@ public class Rule implements Comparable
}
return ruleCandidates;
- }
-
- public static ArrayList findRuleCandidatesByNfc()
- {
- ArrayList ruleCandidates = new ArrayList();
-
- for(Rule oneRule : ruleCollection)
- {
- innerloop:
- for(Trigger oneTrigger : oneRule.getTriggerSet())
- {
- if(oneTrigger.getTriggerType() == Trigger.Trigger_Enum.nfcTag)
- {
-// if(oneTrigger.getTriggerParameter() == triggerParameter)
-// {
- ruleCandidates.add(oneRule);
- break innerloop; //we don't need to search the other triggers in the same rule
-// }
- }
- }
- }
-
- return ruleCandidates;
- }
-
- public static ArrayList findRuleCandidates(Trigger.Trigger_Enum triggerType)
- {
- ArrayList ruleCandidates = new ArrayList();
-
- for(Rule oneRule : ruleCollection)
- {
- innerloop:
- for(Trigger oneTrigger : oneRule.getTriggerSet())
- {
- if(oneTrigger.getTriggerType() == triggerType)
- {
- ruleCandidates.add(oneRule);
- break innerloop; //we don't need to search the other triggers in the same rule
- }
- }
- }
-
- return ruleCandidates;
- }
-
- public static ArrayList findRuleCandidatesByActivityDetection()
- {
- ArrayList ruleCandidates = new ArrayList();
-
- for(Rule oneRule : ruleCollection)
- {
- innerloop:
- for(Trigger oneTrigger : oneRule.getTriggerSet())
- {
- if(oneTrigger.getTriggerType() == Trigger.Trigger_Enum.activityDetection)
- {
-// if(oneTrigger.getTriggerParameter() == triggerParameter)
-// {
- ruleCandidates.add(oneRule);
- break innerloop; //we don't need to search the other triggers in the same rule
-// }
- }
- }
- }
-
- return ruleCandidates;
- }
+ }*/
public static ArrayList findRuleCandidatesByPoi(PointOfInterest searchPoi)
{
@@ -983,7 +783,7 @@ public class Rule implements Comparable
return ruleCandidates;
}
- public static ArrayList findRuleCandidatesByHeadphoneJack(boolean triggerParameter)
+ /*public static ArrayList findRuleCandidatesByHeadphoneJack(boolean triggerParameter)
{
ArrayList ruleCandidates = new ArrayList();
@@ -1004,7 +804,7 @@ public class Rule implements Comparable
}
return ruleCandidates;
- }
+ }*/
public static ArrayList findRuleCandidatesByProfile(Profile profile)
{
diff --git a/app/src/googlePlayFlavor/AndroidManifest.xml b/app/src/googlePlayFlavor/AndroidManifest.xml
index 1c45783..b4bf054 100644
--- a/app/src/googlePlayFlavor/AndroidManifest.xml
+++ b/app/src/googlePlayFlavor/AndroidManifest.xml
@@ -50,6 +50,7 @@
+
@@ -127,6 +128,19 @@
+
+
+
+
+
+
+
@@ -136,6 +150,7 @@
+
public boolean getsGreenLight(Context context)
{
- return isRuleActive() && applies(context) && hasNotAppliedSinceLastExecution();
+ if(applies(context))
+ {
+ if(hasNotAppliedSinceLastExecution())
+ return true;
+ else
+ Miscellaneous.logEvent("i", "getsGreenLight()", "Rule " + getName() + " has not flipped since its last execution.", 4);
+ }
+ else
+ Miscellaneous.logEvent("i", "getsGreenLight()", "Rule " + getName() + " does not apply.", 4);
+
+ return false;
}
public boolean applies(Context context)
{
if(AutomationService.getInstance() == null)
{
- Miscellaneous.logEvent("i", "RuleCheck", "Automation service not running. Rule cannot apply.", 3);
+ Miscellaneous.logEvent("i", "RuleCheck", "Automation service not running. Rule " + getName() + " cannot apply.", 3);
return false;
}
@@ -393,7 +403,7 @@ public class Rule implements Comparable
if (!found)
{
- Miscellaneous.logEvent("i", String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.ruleCheckOf), this.getName()), String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.ruleDoesntApplyActivityNotPresent), ActivityDetectionReceiver.getDescription(oneTrigger.getActivityDetectionType())), 3);
+ Miscellaneous.logEvent("i", String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.ruleCheckOf), this.getName()), String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.ruleDoesntApplyActivityNotPresent), getName(), ActivityDetectionReceiver.getDescription(oneTrigger.getActivityDetectionType())), 3);
return false;
}
else
@@ -402,7 +412,7 @@ public class Rule implements Comparable
{
if (oneDetectedActivity.getType() == oneTrigger.getActivityDetectionType() && oneDetectedActivity.getConfidence() < Settings.activityDetectionRequiredProbability)
{
- Miscellaneous.logEvent("i", String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.ruleCheckOf), this.getName()), String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.ruleDoesntApplyActivityGivenButTooLowProbability), ActivityDetectionReceiver.getDescription(oneDetectedActivity.getType()), String.valueOf(oneDetectedActivity.getConfidence()), String.valueOf(Settings.activityDetectionRequiredProbability)), 3);
+ Miscellaneous.logEvent("i", String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.ruleCheckOf), this.getName()), String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.ruleDoesntApplyActivityGivenButTooLowProbability), getName(), ActivityDetectionReceiver.getDescription(oneDetectedActivity.getType()), String.valueOf(oneDetectedActivity.getConfidence()), String.valueOf(Settings.activityDetectionRequiredProbability)), 3);
return false;
}
}
@@ -411,7 +421,7 @@ public class Rule implements Comparable
return true;
}
-
+
private class ActivateRuleTask extends AsyncTask