Refactoring

This commit is contained in:
Jens 2021-12-19 22:31:05 +01:00
parent 64801d8ff2
commit d1263b46b6
5 changed files with 140 additions and 509 deletions

View File

@ -200,6 +200,7 @@
<activity android:name=".ActivityManageActionStartActivity" /> <activity android:name=".ActivityManageActionStartActivity" />
<activity android:name=".ActivityManageTriggerNfc" /> <activity android:name=".ActivityManageTriggerNfc" />
<activity android:name=".ActivityManageActionSpeakText" /> <activity android:name=".ActivityManageActionSpeakText" />
<activity android:name=".ActivityManageActionPlaySound" />
<activity android:name=".ActivityManageTriggerBluetooth" /> <activity android:name=".ActivityManageTriggerBluetooth" />
<activity android:name=".ActivityMainProfiles" /> <activity android:name=".ActivityMainProfiles" />
<activity android:name=".ActivityManageProfile" /> <activity android:name=".ActivityManageProfile" />
@ -218,6 +219,7 @@
</service> </service>
<activity android:name=".ActivityPermissions" />
<!-- https://developer.android.com/about/versions/pie/android-9.0-changes-28#apache-p--> <!-- https://developer.android.com/about/versions/pie/android-9.0-changes-28#apache-p-->
<uses-library android:name="org.apache.http.legacy" android:required="false"/> <uses-library android:name="org.apache.http.legacy" android:required="false"/>

View File

@ -133,6 +133,19 @@
<receiver android:name=".receivers.ConnectivityReceiver" /> <receiver android:name=".receivers.ConnectivityReceiver" />
<receiver android:name=".receivers.TimeZoneListener" /> <receiver android:name=".receivers.TimeZoneListener" />
<receiver
android:name=".DeviceAdmin"
android:description="@string/app_name"
android:label="@string/app_name"
android:permission= "android.permission.BIND_DEVICE_ADMIN" >
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/policies" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>
<activity android:name=".ActivityManageRule" /> <activity android:name=".ActivityManageRule" />
<activity android:name=".ActivityManageActionTriggerUrl" /> <activity android:name=".ActivityManageActionTriggerUrl" />
<activity android:name=".ActivityDisplayLongMessage" /> <activity android:name=".ActivityDisplayLongMessage" />
@ -142,6 +155,7 @@
<activity android:name=".ActivityMaintenance" /> <activity android:name=".ActivityMaintenance" />
<activity android:name=".ActivityManageTriggerPhoneCall" /> <activity android:name=".ActivityManageTriggerPhoneCall" />
<activity android:name=".ActivityManageActionBrightnessSetting" /> <activity android:name=".ActivityManageActionBrightnessSetting" />
<activity android:name=".ActivityManageTriggerDeviceOrientation" />
<activity android:name=".ActivityHelp" /> <activity android:name=".ActivityHelp" />
<activity android:name=".ActivityManageActionVibrate" /> <activity android:name=".ActivityManageActionVibrate" />
<activity <activity

View File

@ -344,14 +344,24 @@ public class Rule implements Comparable<Rule>
public boolean getsGreenLight(Context context) 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) public boolean applies(Context context)
{ {
if(AutomationService.getInstance() == null) 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; return false;
} }
@ -476,6 +486,7 @@ public class Rule implements Comparable<Rule>
{ {
Rule.ruleRunHistory.add(0, Rule.this); // add at beginning for better visualization Rule.ruleRunHistory.add(0, Rule.this); // add at beginning for better visualization
Rule.lastActivatedRuleActivationTime = new Date(); Rule.lastActivatedRuleActivationTime = new Date();
while(ruleRunHistory.size() > Settings.rulesThatHaveBeenRanHistorySize) while(ruleRunHistory.size() > Settings.rulesThatHaveBeenRanHistorySize)
ruleRunHistory.remove(ruleRunHistory.size()-1); ruleRunHistory.remove(ruleRunHistory.size()-1);
String history = ""; String history = "";
@ -505,15 +516,27 @@ public class Rule implements Comparable<Rule>
public void activate(AutomationService automationService, boolean force) public void activate(AutomationService automationService, boolean force)
{ {
ActivateRuleTask task = new ActivateRuleTask(); ActivateRuleTask task = new ActivateRuleTask();
task.execute(automationService, force);
// if(Settings.startNewThreadForRuleActivation) }
task.execute(automationService, force);
// else public static ArrayList<Rule> findRuleCandidates(Trigger.Trigger_Enum triggerType)
// { {
// task.activateInternally(automationService, force); ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
// AutomationService.updateNotification();
// ActivityMainScreen.updateMainScreen(); 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<Rule> findRuleCandidatesByPoi(PointOfInterest searchPoi, boolean triggerParameter) public static ArrayList<Rule> findRuleCandidatesByPoi(PointOfInterest searchPoi, boolean triggerParameter)
@ -557,7 +580,7 @@ public class Rule implements Comparable<Rule>
return ruleCandidates; return ruleCandidates;
} }
public static ArrayList<Rule> findRuleCandidatesByTimeFrame(TimeFrame searchTimeFrame, boolean triggerParameter) /*public static ArrayList<Rule> findRuleCandidatesByTimeFrame(TimeFrame searchTimeFrame, boolean triggerParameter)
{ {
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>(); ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
@ -578,8 +601,9 @@ public class Rule implements Comparable<Rule>
} }
return ruleCandidates; return ruleCandidates;
} }*/
public static ArrayList<Rule> findRuleCandidatesByTime(Time searchTime)
/*public static ArrayList<Rule> findRuleCandidatesByTime(Time searchTime)
{ {
Miscellaneous.logEvent("i", "RuleSearch", "Searching for rules with TimeFrame with time " + searchTime.toString() + ". RuleCollection-Size: " + String.valueOf(ruleCollection.size()), 3);; Miscellaneous.logEvent("i", "RuleSearch", "Searching for rules with TimeFrame with time " + searchTime.toString() + ". RuleCollection-Size: " + String.valueOf(ruleCollection.size()), 3);;
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>(); ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
@ -598,7 +622,7 @@ public class Rule implements Comparable<Rule>
if(oneTrigger.getTimeFrame().getTriggerTimeStart().getTime() > oneTrigger.getTimeFrame().getTriggerTimeStop().getTime()) 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 if(oneTrigger.getTimeFrame().getTriggerTimeStart().getTime() <= searchTime.getTime() || searchTime.getTime() <= oneTrigger.getTimeFrame().getTriggerTimeStop().getTime()+20000) //add 20 seconds because of delay
{ {
ruleCandidates.add(oneRule); ruleCandidates.add(oneRule);
@ -607,7 +631,7 @@ public class Rule implements Comparable<Rule>
} }
else if(oneTrigger.getTimeFrame().getTriggerTimeStart().getTime() <= searchTime.getTime() && searchTime.getTime() <= oneTrigger.getTimeFrame().getTriggerTimeStop().getTime()+20000) //add 20 seconds because of delay 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); ruleCandidates.add(oneRule);
break innerloop; //if the poi is found we don't need to search the other triggers in the same rule 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<Rule>
Miscellaneous.logEvent("i", "RuleSearch", String.valueOf(ruleCandidates.size()) + " Rule(s) found with TimeFrame with time " + searchTime.toString(), 3); Miscellaneous.logEvent("i", "RuleSearch", String.valueOf(ruleCandidates.size()) + " Rule(s) found with TimeFrame with time " + searchTime.toString(), 3);
return ruleCandidates; return ruleCandidates;
} }*/
public static ArrayList<Rule> findRuleCandidatesByTimeFrame() /*public static ArrayList<Rule> findRuleCandidatesByCharging(boolean triggerParameter)
{
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
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<Rule> findRuleCandidatesByCharging(boolean triggerParameter)
{ {
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>(); ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
@ -661,9 +665,9 @@ public class Rule implements Comparable<Rule>
} }
return ruleCandidates; return ruleCandidates;
} }*/
public static ArrayList<Rule> findRuleCandidatesByUsbHost(boolean triggerParameter) /*public static ArrayList<Rule> findRuleCandidatesByUsbHost(boolean triggerParameter)
{ {
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>(); ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
@ -684,147 +688,9 @@ public class Rule implements Comparable<Rule>
} }
return ruleCandidates; return ruleCandidates;
} }*/
public static ArrayList<Rule> findRuleCandidatesByBatteryLevel() /*public static ArrayList<Rule> findRuleCandidatesByAirplaneMode(boolean triggerParameter)
{
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
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<Rule> findRuleCandidatesBySpeed()
{
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
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<Rule> findRuleCandidatesByNoiseLevel()
{
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
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<Rule> findRuleCandidatesByWifiConnection()
{
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
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<Rule> findRuleCandidatesByBluetoothConnection()
{
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
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<Rule> findRuleCandidatesByProcess()
{
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
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<Rule> findRuleCandidatesByAirplaneMode(boolean triggerParameter)
{ {
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>(); ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
@ -845,9 +711,9 @@ public class Rule implements Comparable<Rule>
} }
return ruleCandidates; return ruleCandidates;
} }*/
public static ArrayList<Rule> findRuleCandidatesByRoaming(boolean triggerParameter) /*public static ArrayList<Rule> findRuleCandidatesByRoaming(boolean triggerParameter)
{ {
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>(); ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
@ -868,9 +734,9 @@ public class Rule implements Comparable<Rule>
} }
return ruleCandidates; return ruleCandidates;
} }*/
public static ArrayList<Rule> findRuleCandidatesByPhoneCall(String direction) /*public static ArrayList<Rule> findRuleCandidatesByPhoneCall(String direction)
{ {
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>(); ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
@ -892,73 +758,7 @@ public class Rule implements Comparable<Rule>
} }
return ruleCandidates; return ruleCandidates;
} }*/
public static ArrayList<Rule> findRuleCandidatesByNfc()
{
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
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<Rule> findRuleCandidates(Trigger.Trigger_Enum triggerType)
{
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
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<Rule> findRuleCandidatesByActivityDetection()
{
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
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<Rule> findRuleCandidatesByPoi(PointOfInterest searchPoi) public static ArrayList<Rule> findRuleCandidatesByPoi(PointOfInterest searchPoi)
{ {
@ -983,7 +783,7 @@ public class Rule implements Comparable<Rule>
return ruleCandidates; return ruleCandidates;
} }
public static ArrayList<Rule> findRuleCandidatesByHeadphoneJack(boolean triggerParameter) /*public static ArrayList<Rule> findRuleCandidatesByHeadphoneJack(boolean triggerParameter)
{ {
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>(); ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
@ -1004,7 +804,7 @@ public class Rule implements Comparable<Rule>
} }
return ruleCandidates; return ruleCandidates;
} }*/
public static ArrayList<Rule> findRuleCandidatesByProfile(Profile profile) public static ArrayList<Rule> findRuleCandidatesByProfile(Profile profile)
{ {

View File

@ -50,6 +50,7 @@
<uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" />
<!-- <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />-->
<uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.NFC" /> <uses-permission android:name="android.permission.NFC" />
@ -127,6 +128,19 @@
<receiver android:name=".receivers.ConnectivityReceiver" /> <receiver android:name=".receivers.ConnectivityReceiver" />
<receiver android:name=".receivers.TimeZoneListener" /> <receiver android:name=".receivers.TimeZoneListener" />
<receiver
android:name=".DeviceAdmin"
android:description="@string/app_name"
android:label="@string/app_name"
android:permission= "android.permission.BIND_DEVICE_ADMIN" >
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/policies" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>
<activity android:name=".ActivityManageRule" /> <activity android:name=".ActivityManageRule" />
<activity android:name=".ActivityManageActionTriggerUrl" /> <activity android:name=".ActivityManageActionTriggerUrl" />
<activity android:name=".ActivityDisplayLongMessage" /> <activity android:name=".ActivityDisplayLongMessage" />
@ -136,6 +150,7 @@
<activity android:name=".ActivityMaintenance" /> <activity android:name=".ActivityMaintenance" />
<activity android:name=".ActivityManageTriggerPhoneCall" /> <activity android:name=".ActivityManageTriggerPhoneCall" />
<activity android:name=".ActivityManageActionBrightnessSetting" /> <activity android:name=".ActivityManageActionBrightnessSetting" />
<activity android:name=".ActivityManageTriggerDeviceOrientation" />
<activity android:name=".ActivityHelp" /> <activity android:name=".ActivityHelp" />
<activity android:name=".ActivityManageActionVibrate" /> <activity android:name=".ActivityManageActionVibrate" />
<activity <activity

View File

@ -348,14 +348,24 @@ public class Rule implements Comparable<Rule>
public boolean getsGreenLight(Context context) 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) public boolean applies(Context context)
{ {
if(AutomationService.getInstance() == null) 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; return false;
} }
@ -393,7 +403,7 @@ public class Rule implements Comparable<Rule>
if (!found) 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; return false;
} }
else else
@ -402,7 +412,7 @@ public class Rule implements Comparable<Rule>
{ {
if (oneDetectedActivity.getType() == oneTrigger.getActivityDetectionType() && oneDetectedActivity.getConfidence() < Settings.activityDetectionRequiredProbability) 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; return false;
} }
} }
@ -411,7 +421,7 @@ public class Rule implements Comparable<Rule>
return true; return true;
} }
private class ActivateRuleTask extends AsyncTask<Object, String, Void> private class ActivateRuleTask extends AsyncTask<Object, String, Void>
{ {
boolean wasActivated = false; boolean wasActivated = false;
@ -504,6 +514,7 @@ public class Rule implements Comparable<Rule>
{ {
Rule.ruleRunHistory.add(0, Rule.this); // add at beginning for better visualization Rule.ruleRunHistory.add(0, Rule.this); // add at beginning for better visualization
Rule.lastActivatedRuleActivationTime = new Date(); Rule.lastActivatedRuleActivationTime = new Date();
while(ruleRunHistory.size() > Settings.rulesThatHaveBeenRanHistorySize) while(ruleRunHistory.size() > Settings.rulesThatHaveBeenRanHistorySize)
ruleRunHistory.remove(ruleRunHistory.size()-1); ruleRunHistory.remove(ruleRunHistory.size()-1);
String history = ""; String history = "";
@ -533,15 +544,27 @@ public class Rule implements Comparable<Rule>
public void activate(AutomationService automationService, boolean force) public void activate(AutomationService automationService, boolean force)
{ {
ActivateRuleTask task = new ActivateRuleTask(); ActivateRuleTask task = new ActivateRuleTask();
task.execute(automationService, force);
// if(Settings.startNewThreadForRuleActivation) }
task.execute(automationService, force);
// else public static ArrayList<Rule> findRuleCandidates(Trigger.Trigger_Enum triggerType)
// { {
// task.activateInternally(automationService, force); ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
// AutomationService.updateNotification();
// ActivityMainScreen.updateMainScreen(); 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<Rule> findRuleCandidatesByPoi(PointOfInterest searchPoi, boolean triggerParameter) public static ArrayList<Rule> findRuleCandidatesByPoi(PointOfInterest searchPoi, boolean triggerParameter)
@ -585,7 +608,7 @@ public class Rule implements Comparable<Rule>
return ruleCandidates; return ruleCandidates;
} }
public static ArrayList<Rule> findRuleCandidatesByTimeFrame(TimeFrame searchTimeFrame, boolean triggerParameter) /*public static ArrayList<Rule> findRuleCandidatesByTimeFrame(TimeFrame searchTimeFrame, boolean triggerParameter)
{ {
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>(); ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
@ -606,8 +629,9 @@ public class Rule implements Comparable<Rule>
} }
return ruleCandidates; return ruleCandidates;
} }*/
public static ArrayList<Rule> findRuleCandidatesByTime(Time searchTime)
/*public static ArrayList<Rule> findRuleCandidatesByTime(Time searchTime)
{ {
Miscellaneous.logEvent("i", "RuleSearch", "Searching for rules with TimeFrame with time " + searchTime.toString() + ". RuleCollection-Size: " + String.valueOf(ruleCollection.size()), 3);; Miscellaneous.logEvent("i", "RuleSearch", "Searching for rules with TimeFrame with time " + searchTime.toString() + ". RuleCollection-Size: " + String.valueOf(ruleCollection.size()), 3);;
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>(); ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
@ -626,7 +650,7 @@ public class Rule implements Comparable<Rule>
if(oneTrigger.getTimeFrame().getTriggerTimeStart().getTime() > oneTrigger.getTimeFrame().getTriggerTimeStop().getTime()) 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 if(oneTrigger.getTimeFrame().getTriggerTimeStart().getTime() <= searchTime.getTime() || searchTime.getTime() <= oneTrigger.getTimeFrame().getTriggerTimeStop().getTime()+20000) //add 20 seconds because of delay
{ {
ruleCandidates.add(oneRule); ruleCandidates.add(oneRule);
@ -635,7 +659,7 @@ public class Rule implements Comparable<Rule>
} }
else if(oneTrigger.getTimeFrame().getTriggerTimeStart().getTime() <= searchTime.getTime() && searchTime.getTime() <= oneTrigger.getTimeFrame().getTriggerTimeStop().getTime()+20000) //add 20 seconds because of delay 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); ruleCandidates.add(oneRule);
break innerloop; //if the poi is found we don't need to search the other triggers in the same rule break innerloop; //if the poi is found we don't need to search the other triggers in the same rule
} }
@ -646,29 +670,9 @@ public class Rule implements Comparable<Rule>
Miscellaneous.logEvent("i", "RuleSearch", String.valueOf(ruleCandidates.size()) + " Rule(s) found with TimeFrame with time " + searchTime.toString(), 3); Miscellaneous.logEvent("i", "RuleSearch", String.valueOf(ruleCandidates.size()) + " Rule(s) found with TimeFrame with time " + searchTime.toString(), 3);
return ruleCandidates; return ruleCandidates;
} }*/
public static ArrayList<Rule> findRuleCandidatesByTimeFrame() /*public static ArrayList<Rule> findRuleCandidatesByCharging(boolean triggerParameter)
{
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
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<Rule> findRuleCandidatesByCharging(boolean triggerParameter)
{ {
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>(); ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
@ -689,9 +693,9 @@ public class Rule implements Comparable<Rule>
} }
return ruleCandidates; return ruleCandidates;
} }*/
public static ArrayList<Rule> findRuleCandidatesByUsbHost(boolean triggerParameter) /*public static ArrayList<Rule> findRuleCandidatesByUsbHost(boolean triggerParameter)
{ {
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>(); ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
@ -712,147 +716,9 @@ public class Rule implements Comparable<Rule>
} }
return ruleCandidates; return ruleCandidates;
} }*/
public static ArrayList<Rule> findRuleCandidatesByBatteryLevel() /*public static ArrayList<Rule> findRuleCandidatesByAirplaneMode(boolean triggerParameter)
{
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
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<Rule> findRuleCandidatesBySpeed()
{
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
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<Rule> findRuleCandidatesByNoiseLevel()
{
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
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<Rule> findRuleCandidatesByWifiConnection()
{
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
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<Rule> findRuleCandidatesByBluetoothConnection()
{
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
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<Rule> findRuleCandidatesByProcess()
{
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
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<Rule> findRuleCandidatesByAirplaneMode(boolean triggerParameter)
{ {
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>(); ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
@ -873,9 +739,9 @@ public class Rule implements Comparable<Rule>
} }
return ruleCandidates; return ruleCandidates;
} }*/
public static ArrayList<Rule> findRuleCandidatesByRoaming(boolean triggerParameter) /*public static ArrayList<Rule> findRuleCandidatesByRoaming(boolean triggerParameter)
{ {
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>(); ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
@ -896,9 +762,9 @@ public class Rule implements Comparable<Rule>
} }
return ruleCandidates; return ruleCandidates;
} }*/
public static ArrayList<Rule> findRuleCandidatesByPhoneCall(String direction) /*public static ArrayList<Rule> findRuleCandidatesByPhoneCall(String direction)
{ {
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>(); ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
@ -920,73 +786,7 @@ public class Rule implements Comparable<Rule>
} }
return ruleCandidates; return ruleCandidates;
} }*/
public static ArrayList<Rule> findRuleCandidatesByNfc()
{
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
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<Rule> findRuleCandidates(Trigger.Trigger_Enum triggerType)
{
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
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<Rule> findRuleCandidatesByActivityDetection()
{
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
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<Rule> findRuleCandidatesByPoi(PointOfInterest searchPoi) public static ArrayList<Rule> findRuleCandidatesByPoi(PointOfInterest searchPoi)
{ {
@ -1011,7 +811,7 @@ public class Rule implements Comparable<Rule>
return ruleCandidates; return ruleCandidates;
} }
public static ArrayList<Rule> findRuleCandidatesByHeadphoneJack(boolean triggerParameter) /*public static ArrayList<Rule> findRuleCandidatesByHeadphoneJack(boolean triggerParameter)
{ {
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>(); ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
@ -1032,7 +832,7 @@ public class Rule implements Comparable<Rule>
} }
return ruleCandidates; return ruleCandidates;
} }*/
public static ArrayList<Rule> findRuleCandidatesByProfile(Profile profile) public static ArrayList<Rule> findRuleCandidatesByProfile(Profile profile)
{ {