Compare commits
No commits in common. "d402986dc3f25f0c4b3f8702914c627b7f5caed2" and "e76f9f69db80943ffa15236705fa246f499d854c" have entirely different histories.
d402986dc3
...
e76f9f69db
@ -66,7 +66,6 @@
|
|||||||
<uses-permission android:name="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"/>
|
<uses-permission android:name="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"/>
|
||||||
<uses-permission android:name="com.wireguard.android.permission.CONTROL_TUNNELS"/>
|
<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.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
|
||||||
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
|
|
||||||
|
|
||||||
<uses-feature
|
<uses-feature
|
||||||
android:name="android.hardware.telephony"
|
android:name="android.hardware.telephony"
|
||||||
@ -74,12 +73,6 @@
|
|||||||
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
|
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
|
||||||
<uses-permission android:name="android.permission.SEND_SMS"/>
|
<uses-permission android:name="android.permission.SEND_SMS"/>
|
||||||
|
|
||||||
<queries>
|
|
||||||
<intent>
|
|
||||||
<action
|
|
||||||
android:name="android.intent.action.TTS_SERVICE" />
|
|
||||||
</intent>
|
|
||||||
</queries>
|
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
|
@ -748,15 +748,4 @@ public class Rule implements Comparable<Rule>
|
|||||||
{
|
{
|
||||||
return ActivityPermissions.havePermissionsForRule(this, Miscellaneous.getAnyContext());
|
return ActivityPermissions.havePermissionsForRule(this, Miscellaneous.getAnyContext());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Rule getByName(String ruleName)
|
|
||||||
{
|
|
||||||
for(Rule r : Rule.getRuleCollection())
|
|
||||||
{
|
|
||||||
if(r.getName().equals(ruleName))
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -64,7 +64,6 @@
|
|||||||
<uses-permission android:name="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"/>
|
<uses-permission android:name="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"/>
|
||||||
<uses-permission android:name="com.wireguard.android.permission.CONTROL_TUNNELS"/>
|
<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.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
|
||||||
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
|
|
||||||
|
|
||||||
<uses-feature
|
<uses-feature
|
||||||
android:name="android.hardware.telephony"
|
android:name="android.hardware.telephony"
|
||||||
@ -72,12 +71,6 @@
|
|||||||
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
|
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
|
||||||
<uses-permission android:name="android.permission.SEND_SMS"/>
|
<uses-permission android:name="android.permission.SEND_SMS"/>
|
||||||
|
|
||||||
<queries>
|
|
||||||
<intent>
|
|
||||||
<action
|
|
||||||
android:name="android.intent.action.TTS_SERVICE" />
|
|
||||||
</intent>
|
|
||||||
</queries>
|
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
|
@ -529,7 +529,7 @@ public class Rule implements Comparable<Rule>
|
|||||||
innerloop:
|
innerloop:
|
||||||
for(Trigger oneTrigger : oneRule.getTriggerSet())
|
for(Trigger oneTrigger : oneRule.getTriggerSet())
|
||||||
{
|
{
|
||||||
if(oneTrigger.getTriggerType().equals(triggerType))
|
if(oneTrigger.getTriggerType() == triggerType)
|
||||||
{
|
{
|
||||||
ruleCandidates.add(oneRule);
|
ruleCandidates.add(oneRule);
|
||||||
break innerloop; // we don't need to check the other triggers in the same rule
|
break innerloop; // we don't need to check the other triggers in the same rule
|
||||||
@ -540,26 +540,6 @@ public class Rule implements Comparable<Rule>
|
|||||||
return ruleCandidates;
|
return ruleCandidates;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ArrayList<Rule> findRuleCandidates(Action.Action_Enum actionType)
|
|
||||||
{
|
|
||||||
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
|
|
||||||
|
|
||||||
for(Rule oneRule : ruleCollection)
|
|
||||||
{
|
|
||||||
innerloop:
|
|
||||||
for(Action oneAction : oneRule.getActionSet())
|
|
||||||
{
|
|
||||||
if(oneAction.getAction().equals(actionType))
|
|
||||||
{
|
|
||||||
ruleCandidates.add(oneRule);
|
|
||||||
break innerloop; // we don't need to check the other actions in the same rule
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ruleCandidates;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ArrayList<Rule> findRuleCandidatesByPoi(PointOfInterest searchPoi, boolean triggerParameter)
|
public static ArrayList<Rule> findRuleCandidatesByPoi(PointOfInterest searchPoi, boolean triggerParameter)
|
||||||
{
|
{
|
||||||
Miscellaneous.logEvent("i", "RuleSearch", "Searching for rules referencing POI " + searchPoi.getName() + ". Total size of ruleset: " + String.valueOf(ruleCollection.size()), 4);
|
Miscellaneous.logEvent("i", "RuleSearch", "Searching for rules referencing POI " + searchPoi.getName() + ". Total size of ruleset: " + String.valueOf(ruleCollection.size()), 4);
|
||||||
@ -601,6 +581,186 @@ public class Rule implements Comparable<Rule>
|
|||||||
return ruleCandidates;
|
return ruleCandidates;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*public static ArrayList<Rule> findRuleCandidatesByTimeFrame(TimeFrame searchTimeFrame, boolean triggerParameter)
|
||||||
|
{
|
||||||
|
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
|
||||||
|
|
||||||
|
for(int i=0; i<ruleCollection.size(); i++)
|
||||||
|
{
|
||||||
|
innerloop:
|
||||||
|
for(int j=0; j<ruleCollection.get(i).getTriggerSet().size(); j++)
|
||||||
|
{
|
||||||
|
if(ruleCollection.get(i).getTriggerSet().get(j).getTriggerType() == Trigger.Trigger_Enum.timeFrame)
|
||||||
|
{
|
||||||
|
if(ruleCollection.get(i).getTriggerSet().get(j).getTimeFrame().equals(searchTimeFrame) && ruleCollection.get(i).getTriggerSet().get(j).getTriggerParameter() == triggerParameter)
|
||||||
|
{
|
||||||
|
ruleCandidates.add(ruleCollection.get(i));
|
||||||
|
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> findRuleCandidatesByTime(Time searchTime)
|
||||||
|
{
|
||||||
|
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>();
|
||||||
|
|
||||||
|
for(Rule oneRule : ruleCollection)
|
||||||
|
{
|
||||||
|
innerloop:
|
||||||
|
for(Trigger oneTrigger : oneRule.getTriggerSet())
|
||||||
|
{
|
||||||
|
if(oneTrigger.getTriggerType() == Trigger.Trigger_Enum.timeFrame)
|
||||||
|
{
|
||||||
|
Miscellaneous.logEvent("i", "RuleSearch", "Searching interval: " + oneTrigger.getTimeFrame().getTriggerTimeStart().toString() + " to " + oneTrigger.getTimeFrame().getTriggerTimeStop().toString(), 5);
|
||||||
|
Miscellaneous.logEvent("i", "RuleSearch", "interval start: " + String.valueOf(oneTrigger.getTimeFrame().getTriggerTimeStart().getTime()), 5);
|
||||||
|
Miscellaneous.logEvent("i", "RuleSearch", "search time: " + String.valueOf(searchTime.getTime()), 5);
|
||||||
|
Miscellaneous.logEvent("i", "RuleSearch", "interval stop: " + String.valueOf(oneTrigger.getTimeFrame().getTriggerTimeStop().getTime()), 5);
|
||||||
|
|
||||||
|
if(oneTrigger.getTimeFrame().getTriggerTimeStart().getTime() > oneTrigger.getTimeFrame().getTriggerTimeStop().getTime())
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
break innerloop; //if the poi is found we don't need to search the other triggers in the same rule
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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 (" + 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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Miscellaneous.logEvent("i", "RuleSearch", String.valueOf(ruleCandidates.size()) + " Rule(s) found with TimeFrame with time " + searchTime.toString(), 3);
|
||||||
|
|
||||||
|
return ruleCandidates;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
/*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.charging)
|
||||||
|
{
|
||||||
|
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> findRuleCandidatesByUsbHost(boolean triggerParameter)
|
||||||
|
{
|
||||||
|
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
|
||||||
|
|
||||||
|
for(Rule oneRule : ruleCollection)
|
||||||
|
{
|
||||||
|
innerloop:
|
||||||
|
for(Trigger oneTrigger : oneRule.getTriggerSet())
|
||||||
|
{
|
||||||
|
if(oneTrigger.getTriggerType() == Trigger.Trigger_Enum.usb_host_connection)
|
||||||
|
{
|
||||||
|
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> 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.airplaneMode)
|
||||||
|
{
|
||||||
|
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> findRuleCandidatesByRoaming(boolean triggerParameter)
|
||||||
|
{
|
||||||
|
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
|
||||||
|
|
||||||
|
for(Rule oneRule : ruleCollection)
|
||||||
|
{
|
||||||
|
innerloop:
|
||||||
|
for(Trigger oneTrigger : oneRule.getTriggerSet())
|
||||||
|
{
|
||||||
|
if(oneTrigger.getTriggerType() == Trigger.Trigger_Enum.roaming)
|
||||||
|
{
|
||||||
|
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> findRuleCandidatesByPhoneCall(String direction)
|
||||||
|
{
|
||||||
|
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
|
||||||
|
|
||||||
|
for(Rule oneRule : ruleCollection)
|
||||||
|
{
|
||||||
|
innerloop:
|
||||||
|
for(Trigger oneTrigger : oneRule.getTriggerSet())
|
||||||
|
{
|
||||||
|
if(oneTrigger.getTriggerType() == Trigger.Trigger_Enum.phoneCall)
|
||||||
|
{
|
||||||
|
String[] elements = oneTrigger.getTriggerParameter2().split(triggerParameter2Split);
|
||||||
|
if(elements[1].equals(Trigger.triggerPhoneCallDirectionAny) || elements[1].equals(direction))
|
||||||
|
{
|
||||||
|
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)
|
||||||
{
|
{
|
||||||
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
|
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
|
||||||
@ -624,6 +784,29 @@ public class Rule implements Comparable<Rule>
|
|||||||
return ruleCandidates;
|
return ruleCandidates;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*public static ArrayList<Rule> findRuleCandidatesByHeadphoneJack(boolean triggerParameter)
|
||||||
|
{
|
||||||
|
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
|
||||||
|
|
||||||
|
for(Rule oneRule : ruleCollection)
|
||||||
|
{
|
||||||
|
innerloop:
|
||||||
|
for(Trigger oneTrigger : oneRule.getTriggerSet())
|
||||||
|
{
|
||||||
|
if(oneTrigger.getTriggerType() == Trigger.Trigger_Enum.headsetPlugged)
|
||||||
|
{
|
||||||
|
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> findRuleCandidatesByTriggerProfile(Profile profile)
|
public static ArrayList<Rule> findRuleCandidatesByTriggerProfile(Profile profile)
|
||||||
{
|
{
|
||||||
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
|
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
|
||||||
@ -721,15 +904,4 @@ public class Rule implements Comparable<Rule>
|
|||||||
{
|
{
|
||||||
return ActivityPermissions.havePermissionsForRule(this, Miscellaneous.getAnyContext());
|
return ActivityPermissions.havePermissionsForRule(this, Miscellaneous.getAnyContext());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Rule getByName(String ruleName)
|
|
||||||
{
|
|
||||||
for(Rule r : Rule.getRuleCollection())
|
|
||||||
{
|
|
||||||
if(r.getName().equals(ruleName))
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -65,7 +65,6 @@
|
|||||||
<uses-permission android:name="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"/>
|
<uses-permission android:name="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"/>
|
||||||
<uses-permission android:name="com.wireguard.android.permission.CONTROL_TUNNELS"/>
|
<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.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
|
||||||
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
|
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
|
@ -556,7 +556,7 @@ public class Rule implements Comparable<Rule>
|
|||||||
innerloop:
|
innerloop:
|
||||||
for(Trigger oneTrigger : oneRule.getTriggerSet())
|
for(Trigger oneTrigger : oneRule.getTriggerSet())
|
||||||
{
|
{
|
||||||
if(oneTrigger.getTriggerType().equals(triggerType))
|
if(oneTrigger.getTriggerType() == triggerType)
|
||||||
{
|
{
|
||||||
ruleCandidates.add(oneRule);
|
ruleCandidates.add(oneRule);
|
||||||
break innerloop; // we don't need to check the other triggers in the same rule
|
break innerloop; // we don't need to check the other triggers in the same rule
|
||||||
@ -567,26 +567,6 @@ public class Rule implements Comparable<Rule>
|
|||||||
return ruleCandidates;
|
return ruleCandidates;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ArrayList<Rule> findRuleCandidates(Action.Action_Enum actionType)
|
|
||||||
{
|
|
||||||
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
|
|
||||||
|
|
||||||
for(Rule oneRule : ruleCollection)
|
|
||||||
{
|
|
||||||
innerloop:
|
|
||||||
for(Action oneAction : oneRule.getActionSet())
|
|
||||||
{
|
|
||||||
if(oneAction.getAction().equals(actionType))
|
|
||||||
{
|
|
||||||
ruleCandidates.add(oneRule);
|
|
||||||
break innerloop; // we don't need to check the other actions in the same rule
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ruleCandidates;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ArrayList<Rule> findRuleCandidatesByPoi(PointOfInterest searchPoi, boolean triggerParameter)
|
public static ArrayList<Rule> findRuleCandidatesByPoi(PointOfInterest searchPoi, boolean triggerParameter)
|
||||||
{
|
{
|
||||||
Miscellaneous.logEvent("i", "RuleSearch", "Searching for rules referencing POI " + searchPoi.getName() + ". Total size of ruleset: " + String.valueOf(ruleCollection.size()), 4);
|
Miscellaneous.logEvent("i", "RuleSearch", "Searching for rules referencing POI " + searchPoi.getName() + ". Total size of ruleset: " + String.valueOf(ruleCollection.size()), 4);
|
||||||
@ -628,6 +608,186 @@ public class Rule implements Comparable<Rule>
|
|||||||
return ruleCandidates;
|
return ruleCandidates;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*public static ArrayList<Rule> findRuleCandidatesByTimeFrame(TimeFrame searchTimeFrame, boolean triggerParameter)
|
||||||
|
{
|
||||||
|
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
|
||||||
|
|
||||||
|
for(int i=0; i<ruleCollection.size(); i++)
|
||||||
|
{
|
||||||
|
innerloop:
|
||||||
|
for(int j=0; j<ruleCollection.get(i).getTriggerSet().size(); j++)
|
||||||
|
{
|
||||||
|
if(ruleCollection.get(i).getTriggerSet().get(j).getTriggerType() == Trigger.Trigger_Enum.timeFrame)
|
||||||
|
{
|
||||||
|
if(ruleCollection.get(i).getTriggerSet().get(j).getTimeFrame().equals(searchTimeFrame) && ruleCollection.get(i).getTriggerSet().get(j).getTriggerParameter() == triggerParameter)
|
||||||
|
{
|
||||||
|
ruleCandidates.add(ruleCollection.get(i));
|
||||||
|
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> findRuleCandidatesByTime(Time searchTime)
|
||||||
|
{
|
||||||
|
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>();
|
||||||
|
|
||||||
|
for(Rule oneRule : ruleCollection)
|
||||||
|
{
|
||||||
|
innerloop:
|
||||||
|
for(Trigger oneTrigger : oneRule.getTriggerSet())
|
||||||
|
{
|
||||||
|
if(oneTrigger.getTriggerType() == Trigger.Trigger_Enum.timeFrame)
|
||||||
|
{
|
||||||
|
Miscellaneous.logEvent("i", "RuleSearch", "Searching interval: " + oneTrigger.getTimeFrame().getTriggerTimeStart().toString() + " to " + oneTrigger.getTimeFrame().getTriggerTimeStop().toString(), 5);
|
||||||
|
Miscellaneous.logEvent("i", "RuleSearch", "interval start: " + String.valueOf(oneTrigger.getTimeFrame().getTriggerTimeStart().getTime()), 5);
|
||||||
|
Miscellaneous.logEvent("i", "RuleSearch", "search time: " + String.valueOf(searchTime.getTime()), 5);
|
||||||
|
Miscellaneous.logEvent("i", "RuleSearch", "interval stop: " + String.valueOf(oneTrigger.getTimeFrame().getTriggerTimeStop().getTime()), 5);
|
||||||
|
|
||||||
|
if(oneTrigger.getTimeFrame().getTriggerTimeStart().getTime() > oneTrigger.getTimeFrame().getTriggerTimeStop().getTime())
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
break innerloop; //if the poi is found we don't need to search the other triggers in the same rule
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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 (" + 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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Miscellaneous.logEvent("i", "RuleSearch", String.valueOf(ruleCandidates.size()) + " Rule(s) found with TimeFrame with time " + searchTime.toString(), 3);
|
||||||
|
|
||||||
|
return ruleCandidates;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
/*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.charging)
|
||||||
|
{
|
||||||
|
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> findRuleCandidatesByUsbHost(boolean triggerParameter)
|
||||||
|
{
|
||||||
|
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
|
||||||
|
|
||||||
|
for(Rule oneRule : ruleCollection)
|
||||||
|
{
|
||||||
|
innerloop:
|
||||||
|
for(Trigger oneTrigger : oneRule.getTriggerSet())
|
||||||
|
{
|
||||||
|
if(oneTrigger.getTriggerType() == Trigger.Trigger_Enum.usb_host_connection)
|
||||||
|
{
|
||||||
|
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> 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.airplaneMode)
|
||||||
|
{
|
||||||
|
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> findRuleCandidatesByRoaming(boolean triggerParameter)
|
||||||
|
{
|
||||||
|
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
|
||||||
|
|
||||||
|
for(Rule oneRule : ruleCollection)
|
||||||
|
{
|
||||||
|
innerloop:
|
||||||
|
for(Trigger oneTrigger : oneRule.getTriggerSet())
|
||||||
|
{
|
||||||
|
if(oneTrigger.getTriggerType() == Trigger.Trigger_Enum.roaming)
|
||||||
|
{
|
||||||
|
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> findRuleCandidatesByPhoneCall(String direction)
|
||||||
|
{
|
||||||
|
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
|
||||||
|
|
||||||
|
for(Rule oneRule : ruleCollection)
|
||||||
|
{
|
||||||
|
innerloop:
|
||||||
|
for(Trigger oneTrigger : oneRule.getTriggerSet())
|
||||||
|
{
|
||||||
|
if(oneTrigger.getTriggerType() == Trigger.Trigger_Enum.phoneCall)
|
||||||
|
{
|
||||||
|
String[] elements = oneTrigger.getTriggerParameter2().split(triggerParameter2Split);
|
||||||
|
if(elements[1].equals(Trigger.triggerPhoneCallDirectionAny) || elements[1].equals(direction))
|
||||||
|
{
|
||||||
|
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)
|
||||||
{
|
{
|
||||||
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
|
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
|
||||||
@ -651,6 +811,29 @@ public class Rule implements Comparable<Rule>
|
|||||||
return ruleCandidates;
|
return ruleCandidates;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*public static ArrayList<Rule> findRuleCandidatesByHeadphoneJack(boolean triggerParameter)
|
||||||
|
{
|
||||||
|
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
|
||||||
|
|
||||||
|
for(Rule oneRule : ruleCollection)
|
||||||
|
{
|
||||||
|
innerloop:
|
||||||
|
for(Trigger oneTrigger : oneRule.getTriggerSet())
|
||||||
|
{
|
||||||
|
if(oneTrigger.getTriggerType() == Trigger.Trigger_Enum.headsetPlugged)
|
||||||
|
{
|
||||||
|
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> findRuleCandidatesByTriggerProfile(Profile profile)
|
public static ArrayList<Rule> findRuleCandidatesByTriggerProfile(Profile profile)
|
||||||
{
|
{
|
||||||
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
|
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
|
||||||
@ -748,15 +931,4 @@ public class Rule implements Comparable<Rule>
|
|||||||
{
|
{
|
||||||
return ActivityPermissions.havePermissionsForRule(this, Miscellaneous.getAnyContext());
|
return ActivityPermissions.havePermissionsForRule(this, Miscellaneous.getAnyContext());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Rule getByName(String ruleName)
|
|
||||||
{
|
|
||||||
for(Rule r : Rule.getRuleCollection())
|
|
||||||
{
|
|
||||||
if(r.getName().equals(ruleName))
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package com.jens.automation2;
|
package com.jens.automation2;
|
||||||
|
|
||||||
import android.Manifest;
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
@ -124,7 +123,7 @@ public class ActivityManageActionSendTextMessage extends Activity
|
|||||||
{
|
{
|
||||||
for(int i=0; i<permissions.length; i++)
|
for(int i=0; i<permissions.length; i++)
|
||||||
{
|
{
|
||||||
if(permissions[i].equals(Manifest.permission.READ_CONTACTS))
|
if(permissions[i].equals("android.permission.READ_CONTACTS"))
|
||||||
{
|
{
|
||||||
if(grantResults[i] == PackageManager.PERMISSION_GRANTED)
|
if(grantResults[i] == PackageManager.PERMISSION_GRANTED)
|
||||||
{
|
{
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package com.jens.automation2;
|
package com.jens.automation2;
|
||||||
|
|
||||||
import android.Manifest;
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.app.ProgressDialog;
|
import android.app.ProgressDialog;
|
||||||
@ -13,7 +12,6 @@ import android.content.pm.PackageInfo;
|
|||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
import android.os.Build;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.text.InputType;
|
import android.text.InputType;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
@ -32,8 +30,6 @@ import android.widget.RadioButton;
|
|||||||
import android.widget.Spinner;
|
import android.widget.Spinner;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
|
|
||||||
import com.jens.automation2.Action.Action_Enum;
|
import com.jens.automation2.Action.Action_Enum;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -59,8 +55,6 @@ public class ActivityManageActionStartActivity extends Activity
|
|||||||
final static String startByActivityString = "0";
|
final static String startByActivityString = "0";
|
||||||
final static String startByBroadcastString = "1";
|
final static String startByBroadcastString = "1";
|
||||||
|
|
||||||
final static int requestCodeForRequestQueryAllPackagesPermission = 4711;
|
|
||||||
|
|
||||||
private class CustomPackageInfo extends PackageInfo implements Comparable<CustomPackageInfo>
|
private class CustomPackageInfo extends PackageInfo implements Comparable<CustomPackageInfo>
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
@ -337,13 +331,6 @@ public class ActivityManageActionStartActivity extends Activity
|
|||||||
return alertDialog;
|
return alertDialog;
|
||||||
}
|
}
|
||||||
|
|
||||||
void getAppList()
|
|
||||||
{
|
|
||||||
GetActivityListTask getActivityListTask = new GetActivityListTask();
|
|
||||||
getActivityListTask.execute();
|
|
||||||
progressDialog = ProgressDialog.show(ActivityManageActionStartActivity.this, "", ActivityManageActionStartActivity.this.getResources().getString(R.string.gettingListOfInstalledApplications));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState)
|
protected void onCreate(Bundle savedInstanceState)
|
||||||
{
|
{
|
||||||
@ -377,13 +364,9 @@ public class ActivityManageActionStartActivity extends Activity
|
|||||||
@Override
|
@Override
|
||||||
public void onClick(View v)
|
public void onClick(View v)
|
||||||
{
|
{
|
||||||
int targetSdkVersion = getApplicationContext().getApplicationInfo().targetSdkVersion;
|
GetActivityListTask getActivityListTask = new GetActivityListTask();
|
||||||
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && targetSdkVersion >= 30)
|
getActivityListTask.execute();
|
||||||
{
|
progressDialog = ProgressDialog.show(ActivityManageActionStartActivity.this, "", ActivityManageActionStartActivity.this.getResources().getString(R.string.gettingListOfInstalledApplications));
|
||||||
requestPermissions(new String[] {Manifest.permission.QUERY_ALL_PACKAGES}, requestCodeForRequestQueryAllPackagesPermission);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
getAppList();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -678,22 +661,4 @@ public class ActivityManageActionStartActivity extends Activity
|
|||||||
getActionStartActivityDialog1Application().show();
|
getActionStartActivityDialog1Application().show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
|
|
||||||
{
|
|
||||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
|
||||||
|
|
||||||
if(requestCode == requestCodeForRequestQueryAllPackagesPermission)
|
|
||||||
{
|
|
||||||
for(int i = 0; i < permissions.length; i++)
|
|
||||||
{
|
|
||||||
if(permissions[i].equals(Manifest.permission.QUERY_ALL_PACKAGES) && grantResults[i] == PackageManager.PERMISSION_GRANTED)
|
|
||||||
{
|
|
||||||
getAppList();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -12,7 +12,6 @@ import android.location.Location;
|
|||||||
import android.location.LocationListener;
|
import android.location.LocationListener;
|
||||||
import android.location.LocationManager;
|
import android.location.LocationManager;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
@ -137,45 +136,42 @@ public class ActivityManagePoi extends Activity
|
|||||||
|
|
||||||
private void getLocation()
|
private void getLocation()
|
||||||
{
|
{
|
||||||
Criteria criteriaNetwork = new Criteria();
|
Criteria critNetwork = new Criteria();
|
||||||
criteriaNetwork.setPowerRequirement(Criteria.POWER_LOW);
|
critNetwork.setPowerRequirement(Criteria.POWER_LOW);
|
||||||
criteriaNetwork.setAltitudeRequired(false);
|
critNetwork.setAltitudeRequired(false);
|
||||||
criteriaNetwork.setSpeedRequired(false);
|
critNetwork.setSpeedRequired(false);
|
||||||
criteriaNetwork.setBearingRequired(false);
|
critNetwork.setBearingRequired(false);
|
||||||
criteriaNetwork.setCostAllowed(false);
|
critNetwork.setCostAllowed(false);
|
||||||
criteriaNetwork.setAccuracy(Criteria.ACCURACY_COARSE);
|
critNetwork.setAccuracy(Criteria.ACCURACY_COARSE);
|
||||||
|
|
||||||
Criteria criteriaGps = new Criteria();
|
Criteria critGps = new Criteria();
|
||||||
criteriaGps.setAltitudeRequired(false);
|
critGps.setAltitudeRequired(false);
|
||||||
criteriaGps.setSpeedRequired(false);
|
critGps.setSpeedRequired(false);
|
||||||
criteriaGps.setBearingRequired(false);
|
critGps.setBearingRequired(false);
|
||||||
criteriaGps.setCostAllowed(true);
|
critGps.setCostAllowed(true);
|
||||||
criteriaGps.setAccuracy(Criteria.ACCURACY_FINE);
|
critGps.setAccuracy(Criteria.ACCURACY_FINE);
|
||||||
|
|
||||||
String provider1 = myLocationManager.getBestProvider(criteriaNetwork, true);
|
String provider1 = myLocationManager.getBestProvider(critNetwork, true);
|
||||||
String provider2 = myLocationManager.getBestProvider(criteriaGps, true);
|
String provider2 = myLocationManager.getBestProvider(critGps, true);
|
||||||
// String provider3 = myLocationManager.getProvider("wifi");
|
// String provider3 = myLocationManager.getProvider("wifi");
|
||||||
|
|
||||||
if(provider1 == null || provider2 == null)
|
if(provider1 == null | provider2 == null)
|
||||||
{
|
{
|
||||||
Toast.makeText(this, getResources().getString(R.string.logNoSuitableProvider), Toast.LENGTH_LONG).show();
|
Toast.makeText(this, getResources().getString(R.string.logNoSuitableProvider), Toast.LENGTH_LONG).show();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(provider1.equals(provider2))
|
|
||||||
Miscellaneous.logEvent("i", "POI Manager", "Both location providers are equal. Only one will be used.", 4);
|
|
||||||
|
|
||||||
locationSearchStart = Calendar.getInstance();
|
locationSearchStart = Calendar.getInstance();
|
||||||
startTimeout();
|
startTimeout();
|
||||||
|
|
||||||
if(!Settings.privacyLocationing && !ConnectivityReceiver.isDataConnectionAvailable(Miscellaneous.getAnyContext()) && !provider1.equals(provider2))
|
if(!Settings.privacyLocationing || !ConnectivityReceiver.isDataConnectionAvailable(AutomationService.getInstance()))
|
||||||
{
|
{
|
||||||
Miscellaneous.logEvent("i", "POI Manager", getResources().getString(R.string.logGettingPositionWithProvider) + " " + provider1, 3);
|
Miscellaneous.logEvent("i", "POI Manager", getResources().getString(R.string.logGettingPositionWithProvider) + " " + provider1, 3);
|
||||||
myLocationManager.requestLocationUpdates(provider1, 500, Settings.satisfactoryAccuracyNetwork, myLocationListenerNetwork);
|
myLocationManager.requestLocationUpdates(provider1, 500, Settings.satisfactoryAccuracyNetwork, myLocationListenerNetwork);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Miscellaneous.logEvent("i", "POI Manager", "Skipping network location.", 4);
|
Miscellaneous.logEvent("i", "POI Manager", "Skipping network location query because private locationing is active.", 4);
|
||||||
|
|
||||||
Miscellaneous.logEvent("i", "POI Manager", getResources().getString(R.string.logGettingPositionWithProvider) + " " + provider2, 3);
|
Miscellaneous.logEvent("i", "POI Manager", getResources().getString(R.string.logGettingPositionWithProvider) + " " + provider2, 3);
|
||||||
myLocationManager.requestLocationUpdates(provider2, 500, Settings.satisfactoryAccuracyGps, myLocationListenerGps);
|
myLocationManager.requestLocationUpdates(provider2, 500, Settings.satisfactoryAccuracyGps, myLocationListenerGps);
|
||||||
@ -314,20 +310,6 @@ public class ActivityManagePoi extends Activity
|
|||||||
public void onClick(DialogInterface dialog, int which)
|
public void onClick(DialogInterface dialog, int which)
|
||||||
{
|
{
|
||||||
progressDialog = ProgressDialog.show(ActivityManagePoi.this, "", getResources().getString(R.string.gettingPosition), true, true);
|
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
|
|
||||||
getLocation();
|
getLocation();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -45,8 +45,6 @@ public class ActivityManageProfile extends Activity
|
|||||||
TextView tvIncomingCallsRingtone, tvNotificationsRingtone;
|
TextView tvIncomingCallsRingtone, tvNotificationsRingtone;
|
||||||
EditText etName;
|
EditText etName;
|
||||||
|
|
||||||
boolean guiUpdate = false;
|
|
||||||
|
|
||||||
File incomingCallsRingtone = null, notificationsRingtone = null;
|
File incomingCallsRingtone = null, notificationsRingtone = null;
|
||||||
|
|
||||||
ArrayAdapter<String> soundModeAdapter;
|
ArrayAdapter<String> soundModeAdapter;
|
||||||
@ -370,8 +368,6 @@ public class ActivityManageProfile extends Activity
|
|||||||
|
|
||||||
public void editProfile(Profile profileToEdit)
|
public void editProfile(Profile profileToEdit)
|
||||||
{
|
{
|
||||||
guiUpdate = true;
|
|
||||||
|
|
||||||
etName.setText(ActivityMainProfiles.profileToEdit.getName());
|
etName.setText(ActivityMainProfiles.profileToEdit.getName());
|
||||||
checkBoxChangeSoundMode.setChecked(ActivityMainProfiles.profileToEdit.getChangeSoundMode());
|
checkBoxChangeSoundMode.setChecked(ActivityMainProfiles.profileToEdit.getChangeSoundMode());
|
||||||
checkBoxChangeDnd.setChecked(ActivityMainProfiles.profileToEdit.getChangeDndMode());
|
checkBoxChangeDnd.setChecked(ActivityMainProfiles.profileToEdit.getChangeDndMode());
|
||||||
@ -397,8 +393,6 @@ public class ActivityManageProfile extends Activity
|
|||||||
|
|
||||||
setIncomingCallsRingtone(ActivityMainProfiles.profileToEdit.getIncomingCallsRingtone());
|
setIncomingCallsRingtone(ActivityMainProfiles.profileToEdit.getIncomingCallsRingtone());
|
||||||
setNotificationsRingtone(ActivityMainProfiles.profileToEdit.getNotificationRingtone());
|
setNotificationsRingtone(ActivityMainProfiles.profileToEdit.getNotificationRingtone());
|
||||||
|
|
||||||
guiUpdate = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean loadFormValuesToVariable()
|
private boolean loadFormValuesToVariable()
|
||||||
|
@ -525,8 +525,6 @@ public class ActivityManageRule extends Activity
|
|||||||
items.add(new Item(typesLong[i].toString(), R.drawable.smartphone));
|
items.add(new Item(typesLong[i].toString(), R.drawable.smartphone));
|
||||||
else if(types[i].toString().equals(Trigger_Enum.profileActive.toString()))
|
else if(types[i].toString().equals(Trigger_Enum.profileActive.toString()))
|
||||||
items.add(new Item(typesLong[i].toString(), R.drawable.sound));
|
items.add(new Item(typesLong[i].toString(), R.drawable.sound));
|
||||||
else if(types[i].toString().equals(Trigger_Enum.musicPlaying.toString()))
|
|
||||||
items.add(new Item(typesLong[i].toString(), R.drawable.sound));
|
|
||||||
else if(types[i].toString().equals(Trigger_Enum.screenState.toString()))
|
else if(types[i].toString().equals(Trigger_Enum.screenState.toString()))
|
||||||
items.add(new Item(typesLong[i].toString(), R.drawable.smartphone));
|
items.add(new Item(typesLong[i].toString(), R.drawable.smartphone));
|
||||||
else
|
else
|
||||||
@ -589,7 +587,7 @@ public class ActivityManageRule extends Activity
|
|||||||
startActivityForResult(timeFrameEditor, requestCodeTriggerTimeframeAdd);
|
startActivityForResult(timeFrameEditor, requestCodeTriggerTimeframeAdd);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if(triggerType == Trigger_Enum.charging || triggerType == Trigger_Enum.musicPlaying)
|
else if(triggerType == Trigger_Enum.charging)
|
||||||
booleanChoices = new String[]{getResources().getString(R.string.started), getResources().getString(R.string.stopped)};
|
booleanChoices = new String[]{getResources().getString(R.string.started), getResources().getString(R.string.stopped)};
|
||||||
else if(triggerType == Trigger_Enum.usb_host_connection)
|
else if(triggerType == Trigger_Enum.usb_host_connection)
|
||||||
booleanChoices = new String[]{getResources().getString(R.string.connected), getResources().getString(R.string.disconnected)};
|
booleanChoices = new String[]{getResources().getString(R.string.connected), getResources().getString(R.string.disconnected)};
|
||||||
@ -720,7 +718,7 @@ public class ActivityManageRule extends Activity
|
|||||||
private AlertDialog getTriggerParameterDialog(final Context myContext, final String[] choices)
|
private AlertDialog getTriggerParameterDialog(final Context myContext, final String[] choices)
|
||||||
{
|
{
|
||||||
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
|
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
|
||||||
alertDialogBuilder.setTitle(getResources().getString(R.string.selectParameters));
|
alertDialogBuilder.setTitle(getResources().getString(R.string.selectTypeOfTrigger));
|
||||||
alertDialogBuilder.setItems(choices, new DialogInterface.OnClickListener()
|
alertDialogBuilder.setItems(choices, new DialogInterface.OnClickListener()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
|
@ -353,12 +353,6 @@ public class ActivityPermissions extends Activity
|
|||||||
if(!havePermission(Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, workingContext))
|
if(!havePermission(Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, workingContext))
|
||||||
addToArrayListUnique(Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, requiredPermissions);
|
addToArrayListUnique(Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, requiredPermissions);
|
||||||
|
|
||||||
for(Profile p : Profile.getProfileCollection())
|
|
||||||
{
|
|
||||||
if(p.changeIncomingCallsRingtone || p.changeNotificationRingtone)
|
|
||||||
addToArrayListUnique(Manifest.permission.READ_EXTERNAL_STORAGE, requiredPermissions);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!onlyGeneral)
|
if (!onlyGeneral)
|
||||||
{
|
{
|
||||||
for (Rule rule : Rule.getRuleCollection())
|
for (Rule rule : Rule.getRuleCollection())
|
||||||
@ -526,9 +520,6 @@ public class ActivityPermissions extends Activity
|
|||||||
addToArrayListUnique(Manifest.permission.MODIFY_AUDIO_SETTINGS, requiredPermissions);
|
addToArrayListUnique(Manifest.permission.MODIFY_AUDIO_SETTINGS, requiredPermissions);
|
||||||
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
|
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
|
||||||
addToArrayListUnique(Manifest.permission.ACCESS_NOTIFICATION_POLICY, requiredPermissions);
|
addToArrayListUnique(Manifest.permission.ACCESS_NOTIFICATION_POLICY, requiredPermissions);
|
||||||
Profile targetProfile = Profile.getByName(action.getParameter2());
|
|
||||||
if(targetProfile.changeIncomingCallsRingtone || targetProfile.changeNotificationRingtone)
|
|
||||||
addToArrayListUnique(Manifest.permission.READ_EXTERNAL_STORAGE, requiredPermissions);
|
|
||||||
break;
|
break;
|
||||||
case disableScreenRotation:
|
case disableScreenRotation:
|
||||||
addToArrayListUnique(Manifest.permission.WRITE_SETTINGS, requiredPermissions);
|
addToArrayListUnique(Manifest.permission.WRITE_SETTINGS, requiredPermissions);
|
||||||
@ -870,32 +861,6 @@ public class ActivityPermissions extends Activity
|
|||||||
case Manifest.permission.READ_EXTERNAL_STORAGE:
|
case Manifest.permission.READ_EXTERNAL_STORAGE:
|
||||||
for(String ruleName : getRulesUsing(Action.Action_Enum.playSound))
|
for(String ruleName : getRulesUsing(Action.Action_Enum.playSound))
|
||||||
usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName));
|
usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName));
|
||||||
|
|
||||||
for(String ruleName : getRulesUsing(Action.Action_Enum.changeSoundProfile))
|
|
||||||
{
|
|
||||||
Rule tempRule = Rule.getByName(ruleName);
|
|
||||||
if(tempRule != null)
|
|
||||||
{
|
|
||||||
for (Action a : tempRule.getActionSet())
|
|
||||||
{
|
|
||||||
if (a.getAction().equals(Action.Action_Enum.changeSoundProfile))
|
|
||||||
{
|
|
||||||
Profile p = Profile.getByName(a.getParameter2());
|
|
||||||
if (p.changeIncomingCallsRingtone || p.changeNotificationRingtone)
|
|
||||||
usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for(Profile p : Profile.getProfileCollection())
|
|
||||||
{
|
|
||||||
if(p.changeIncomingCallsRingtone || p.changeNotificationRingtone)
|
|
||||||
{
|
|
||||||
usingElements.add(String.format(getResources().getString(R.string.profileXrequiresThis), p.getName()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case Manifest.permission.BIND_DEVICE_ADMIN:
|
case Manifest.permission.BIND_DEVICE_ADMIN:
|
||||||
for(String ruleName : getRulesUsing(Action.Action_Enum.turnScreenOnOrOff))
|
for(String ruleName : getRulesUsing(Action.Action_Enum.turnScreenOnOrOff))
|
||||||
|
@ -218,13 +218,6 @@ public class AutomationService extends Service implements OnInitListener
|
|||||||
// Actions.setData(true);
|
// Actions.setData(true);
|
||||||
// ********** Test area **********
|
// ********** Test area **********
|
||||||
|
|
||||||
/*
|
|
||||||
On normal phones the app is supposed to automatically restart in case of any problems.
|
|
||||||
In the emulator we want it to stop to be able to better pinpoint the root cause.
|
|
||||||
*/
|
|
||||||
if(Miscellaneous.isAndroidEmulator())
|
|
||||||
return START_NOT_STICKY;
|
|
||||||
else
|
|
||||||
return START_STICKY;
|
return START_STICKY;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -327,12 +320,6 @@ public class AutomationService extends Service implements OnInitListener
|
|||||||
ReceiverCoordinator.startAllReceivers();
|
ReceiverCoordinator.startAllReceivers();
|
||||||
|
|
||||||
PackageReplacedReceiver.setHasServiceBeenRunning(true, this);
|
PackageReplacedReceiver.setHasServiceBeenRunning(true, this);
|
||||||
|
|
||||||
for(Rule r : Rule.getRuleCollection())
|
|
||||||
{
|
|
||||||
if(r.getsGreenLight(AutomationService.this))
|
|
||||||
r.activate(AutomationService.this, false);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void startLocationProvider()
|
protected void startLocationProvider()
|
||||||
|
@ -8,7 +8,6 @@ import android.app.NotificationChannel;
|
|||||||
import android.app.NotificationManager;
|
import android.app.NotificationManager;
|
||||||
import android.app.PendingIntent;
|
import android.app.PendingIntent;
|
||||||
import android.app.Service;
|
import android.app.Service;
|
||||||
import android.content.ContentUris;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
@ -25,7 +24,6 @@ import android.os.AsyncTask;
|
|||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
import android.provider.DocumentsContract;
|
|
||||||
import android.provider.MediaStore;
|
import android.provider.MediaStore;
|
||||||
import android.provider.Settings.Secure;
|
import android.provider.Settings.Secure;
|
||||||
import android.telephony.PhoneNumberUtils;
|
import android.telephony.PhoneNumberUtils;
|
||||||
@ -75,10 +73,8 @@ import java.math.BigDecimal;
|
|||||||
import java.math.RoundingMode;
|
import java.math.RoundingMode;
|
||||||
import java.net.HttpURLConnection;
|
import java.net.HttpURLConnection;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.security.DigestInputStream;
|
|
||||||
import java.security.KeyManagementException;
|
import java.security.KeyManagementException;
|
||||||
import java.security.KeyStore;
|
import java.security.KeyStore;
|
||||||
import java.security.MessageDigest;
|
|
||||||
import java.security.NoSuchAlgorithmException;
|
import java.security.NoSuchAlgorithmException;
|
||||||
import java.security.cert.CertificateException;
|
import java.security.cert.CertificateException;
|
||||||
import java.security.cert.X509Certificate;
|
import java.security.cert.X509Certificate;
|
||||||
@ -1193,8 +1189,7 @@ public class Miscellaneous extends Service
|
|||||||
|
|
||||||
public static double round(double value, int places)
|
public static double round(double value, int places)
|
||||||
{
|
{
|
||||||
if (places < 0)
|
if (places < 0) throw new IllegalArgumentException();
|
||||||
throw new IllegalArgumentException();
|
|
||||||
|
|
||||||
BigDecimal bd = new BigDecimal(Double.toString(value));
|
BigDecimal bd = new BigDecimal(Double.toString(value));
|
||||||
bd = bd.setScale(places, RoundingMode.HALF_UP);
|
bd = bd.setScale(places, RoundingMode.HALF_UP);
|
||||||
@ -1206,7 +1201,7 @@ public class Miscellaneous extends Service
|
|||||||
Cursor cursor = null;
|
Cursor cursor = null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
String[] proj = { MediaStore.Images.Media.DATA, MediaStore.Audio.Media.DATA };
|
String[] proj = { MediaStore.Images.Media.DATA };
|
||||||
cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
|
cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
|
||||||
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
|
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
|
||||||
cursor.moveToFirst();
|
cursor.moveToFirst();
|
||||||
@ -1226,114 +1221,6 @@ public class Miscellaneous extends Service
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getRealPathFromURI2(final Context context, final Uri uri)
|
|
||||||
{
|
|
||||||
final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
|
|
||||||
|
|
||||||
// DocumentProvider
|
|
||||||
if (isKitKat && DocumentsContract.isDocumentUri(context, uri))
|
|
||||||
{
|
|
||||||
// ExternalStorageProvider
|
|
||||||
if (isExternalStorageDocument(uri))
|
|
||||||
{
|
|
||||||
final String docId = DocumentsContract.getDocumentId(uri);
|
|
||||||
final String[] split = docId.split(":");
|
|
||||||
final String type = split[0];
|
|
||||||
|
|
||||||
if ("primary".equalsIgnoreCase(type))
|
|
||||||
{
|
|
||||||
return Environment.getExternalStorageDirectory() + "/" + split[1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// DownloadsProvider
|
|
||||||
else if (isDownloadsDocument(uri))
|
|
||||||
{
|
|
||||||
|
|
||||||
final String id = DocumentsContract.getDocumentId(uri);
|
|
||||||
final Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
|
|
||||||
|
|
||||||
return getDataColumn(context, contentUri, null, null);
|
|
||||||
}
|
|
||||||
// MediaProvider
|
|
||||||
else if (isMediaDocument(uri))
|
|
||||||
{
|
|
||||||
final String docId = DocumentsContract.getDocumentId(uri);
|
|
||||||
final String[] split = docId.split(":");
|
|
||||||
final String type = split[0];
|
|
||||||
|
|
||||||
Uri contentUri = null;
|
|
||||||
if ("image".equals(type))
|
|
||||||
{
|
|
||||||
contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
|
|
||||||
}
|
|
||||||
else if ("video".equals(type))
|
|
||||||
{
|
|
||||||
contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
|
|
||||||
}
|
|
||||||
else if ("audio".equals(type))
|
|
||||||
{
|
|
||||||
contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
|
|
||||||
}
|
|
||||||
|
|
||||||
final String selection = "_id=?";
|
|
||||||
final String[] selectionArgs = new String[] { split[1] };
|
|
||||||
|
|
||||||
return getDataColumn(context, contentUri, selection, selectionArgs);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// MediaStore (and general)
|
|
||||||
else if ("content".equalsIgnoreCase(uri.getScheme()))
|
|
||||||
{
|
|
||||||
return getDataColumn(context, uri, null, null);
|
|
||||||
}
|
|
||||||
// File
|
|
||||||
else if ("file".equalsIgnoreCase(uri.getScheme()))
|
|
||||||
{
|
|
||||||
return uri.getPath();
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs)
|
|
||||||
{
|
|
||||||
Cursor cursor = null;
|
|
||||||
final String column = "_data";
|
|
||||||
final String[] projection = { column };
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,
|
|
||||||
null);
|
|
||||||
if (cursor != null && cursor.moveToFirst())
|
|
||||||
{
|
|
||||||
final int column_index = cursor.getColumnIndexOrThrow(column);
|
|
||||||
return cursor.getString(column_index);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
if (cursor != null)
|
|
||||||
cursor.close();
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isExternalStorageDocument(Uri uri)
|
|
||||||
{
|
|
||||||
return "com.android.externalstorage.documents".equals(uri.getAuthority());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isDownloadsDocument(Uri uri)
|
|
||||||
{
|
|
||||||
return "com.android.providers.downloads.documents".equals(uri.getAuthority());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isMediaDocument(Uri uri)
|
|
||||||
{
|
|
||||||
return "com.android.providers.media.documents".equals(uri.getAuthority());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Method getClassMethodReflective(String className, String methodName)
|
public static Method getClassMethodReflective(String className, String methodName)
|
||||||
{
|
{
|
||||||
Class foundClass = null;
|
Class foundClass = null;
|
||||||
@ -1867,35 +1754,4 @@ public class Miscellaneous extends Service
|
|||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String checksumSha(String filepath) throws IOException
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
MessageDigest md = null;
|
|
||||||
md = MessageDigest.getInstance("SHA-256");
|
|
||||||
|
|
||||||
// file hashing with DigestInputStream
|
|
||||||
try (DigestInputStream dis = new DigestInputStream(new FileInputStream(filepath), md))
|
|
||||||
{
|
|
||||||
while (dis.read() != -1)
|
|
||||||
; //empty loop to clear the data
|
|
||||||
md = dis.getMessageDigest();
|
|
||||||
}
|
|
||||||
|
|
||||||
// bytes to hex
|
|
||||||
StringBuilder result = new StringBuilder();
|
|
||||||
for (byte b : md.digest())
|
|
||||||
{
|
|
||||||
result.append(String.format("%02x", b));
|
|
||||||
}
|
|
||||||
return result.toString();
|
|
||||||
}
|
|
||||||
catch (NoSuchAlgorithmException e)
|
|
||||||
{
|
|
||||||
Miscellaneous.logEvent("e", "shaChecksum", Log.getStackTraceString(e), 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -4,12 +4,10 @@ import android.app.NotificationManager;
|
|||||||
import android.content.ContentValues;
|
import android.content.ContentValues;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.media.AudioManager;
|
import android.media.AudioManager;
|
||||||
import android.media.Ringtone;
|
|
||||||
import android.media.RingtoneManager;
|
import android.media.RingtoneManager;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.provider.MediaStore;
|
import android.provider.MediaStore;
|
||||||
import android.provider.Settings;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
@ -308,31 +306,29 @@ public class Profile implements Comparable<Profile>
|
|||||||
|
|
||||||
ContentValues values = new ContentValues();
|
ContentValues values = new ContentValues();
|
||||||
values.put(MediaStore.MediaColumns.DATA, ringtoneFile.getAbsolutePath());
|
values.put(MediaStore.MediaColumns.DATA, ringtoneFile.getAbsolutePath());
|
||||||
|
// values.put(MediaStore.MediaColumns.TITLE, context.getResources().getString(R.string.app_name) + " ringtone");
|
||||||
|
// values.put(MediaStore.MediaColumns.TITLE, ringtoneFile.getName().replace(".mp3", "").replace(".", ""));
|
||||||
values.put(MediaStore.MediaColumns.TITLE, ringtoneFile.getName());
|
values.put(MediaStore.MediaColumns.TITLE, ringtoneFile.getName());
|
||||||
|
// values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/*");
|
||||||
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
|
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
|
||||||
values.put(MediaStore.MediaColumns.SIZE, ringtoneFile.length());
|
values.put(MediaStore.MediaColumns.SIZE, ringtoneFile.length());
|
||||||
|
// values.put(MediaStore.Audio.Media.ARTIST, R.string.app_name);
|
||||||
values.put(MediaStore.Audio.Media.IS_RINGTONE, ringtoneType == RingtoneManager.TYPE_RINGTONE);
|
values.put(MediaStore.Audio.Media.IS_RINGTONE, ringtoneType == RingtoneManager.TYPE_RINGTONE);
|
||||||
values.put(MediaStore.Audio.Media.IS_NOTIFICATION, ringtoneType == RingtoneManager.TYPE_NOTIFICATION);
|
values.put(MediaStore.Audio.Media.IS_NOTIFICATION, ringtoneType == RingtoneManager.TYPE_NOTIFICATION);
|
||||||
values.put(MediaStore.Audio.Media.IS_ALARM, false);
|
values.put(MediaStore.Audio.Media.IS_ALARM, false);
|
||||||
values.put(MediaStore.Audio.Media.IS_MUSIC, false);
|
values.put(MediaStore.Audio.Media.IS_MUSIC, false);
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Uri newRingTone = null;
|
|
||||||
|
|
||||||
//TODO: This part needs to be made compatible with Android 11 and above.
|
|
||||||
if(Build.VERSION.SDK_INT > 30)
|
|
||||||
{
|
|
||||||
Uri existingRingTone = MediaStore.Audio.Media.getContentUriForPath(ringtoneFile.getAbsolutePath());
|
Uri existingRingTone = MediaStore.Audio.Media.getContentUriForPath(ringtoneFile.getAbsolutePath());
|
||||||
|
|
||||||
if(existingRingTone != null)
|
if(existingRingTone != null)
|
||||||
context.getContentResolver().delete(existingRingTone, MediaStore.MediaColumns.DATA + "=\"" + ringtoneFile.getAbsolutePath() + "\"", null);
|
context.getContentResolver().delete(existingRingTone, MediaStore.MediaColumns.DATA + "=\"" + ringtoneFile.getAbsolutePath() + "\"", null);
|
||||||
|
Uri newRingTone = context.getContentResolver().insert(existingRingTone, values);
|
||||||
|
|
||||||
newRingTone = context.getContentResolver().insert(existingRingTone, values);
|
try
|
||||||
}
|
{
|
||||||
|
|
||||||
RingtoneManager.setActualDefaultRingtoneUri(context, ringtoneType, newRingTone);
|
RingtoneManager.setActualDefaultRingtoneUri(context, ringtoneType, newRingTone);
|
||||||
Miscellaneous.logEvent("i", "Profile", "Ringtone set to: " + newRingTone.toString(), 1);
|
Miscellaneous.logEvent("i", "Profile", "Ringtone set to: " + newRingTone.toString(), 1);
|
||||||
|
// Ringtone tone = RingtoneManager.getRingtone(context, RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE));
|
||||||
|
// tone.play();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
catch (Throwable t)
|
catch (Throwable t)
|
||||||
@ -640,33 +636,13 @@ public class Profile implements Comparable<Profile>
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*if (changeIncomingCallsRingtone)
|
// if(changeIncomingCallsRingtone)
|
||||||
{
|
// {
|
||||||
if (incomingCallsRingtone != null)
|
// if (incomingCallsRingtone != null)
|
||||||
{
|
// {
|
||||||
Uri ringtone_uri = RingtoneManager.getActualDefaultRingtoneUri(context, RingtoneManager.TYPE_RINGTONE);
|
// applyRingTone(incomingCallsRingtone, RingtoneManager.TYPE_RINGTONE, context);
|
||||||
|
// }
|
||||||
if (ringtone_uri != null)
|
// }
|
||||||
{
|
|
||||||
// if ringtone_uri is null get Default Ringtone
|
|
||||||
ringtone_uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
|
|
||||||
|
|
||||||
Ringtone currentRingtone = RingtoneManager.getRingtone(context, ringtone_uri);
|
|
||||||
String title = currentRingtone.getTitle(context);
|
|
||||||
*//* Ringtone desiredRingtone = RingtoneManager.getRingtone(context, Uri.fromFile(notificationRingtone));
|
|
||||||
boolean result = currentRingtone.equals(desiredRingtone);*//*
|
|
||||||
|
|
||||||
Uri desired_ringtone = MediaStore.Audio.Media.getContentUriForPath(incomingCallsRingtone.getAbsolutePath());
|
|
||||||
|
|
||||||
// File currentRingtoneFile = new File(Miscellaneous.getRealPathFromURI(context, ringtone_uri));
|
|
||||||
String currentChecksum = Miscellaneous.checksumSha(ringtone_uri.getPath());
|
|
||||||
String desiredChecksum = Miscellaneous.checksumSha(incomingCallsRingtone.getAbsolutePath());
|
|
||||||
|
|
||||||
if (!currentChecksum.equals(desiredChecksum))
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
if(changeVibrateWhenRinging)
|
if(changeVibrateWhenRinging)
|
||||||
{
|
{
|
||||||
@ -684,31 +660,9 @@ public class Profile implements Comparable<Profile>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*if (changeNotificationRingtone)
|
// if(changeNotificationRingtone)
|
||||||
{
|
// if(notificationRingtone != null)
|
||||||
if (notificationRingtone != null)
|
// applyRingTone(notificationRingtone, RingtoneManager.TYPE_NOTIFICATION, context);
|
||||||
{
|
|
||||||
Uri ringtone_uri = RingtoneManager.getActualDefaultRingtoneUri(context, RingtoneManager.TYPE_NOTIFICATION);
|
|
||||||
|
|
||||||
if (ringtone_uri == null)
|
|
||||||
{
|
|
||||||
// if ringtone_uri is null get Default Ringtone
|
|
||||||
ringtone_uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
|
|
||||||
|
|
||||||
File currentRingtone = new File(Settings.System.DEFAULT_NOTIFICATION_URI.getPath());
|
|
||||||
|
|
||||||
// File currentRingtone = new File(Miscellaneous.getRealPathFromURI(context, ringtone_uri));
|
|
||||||
|
|
||||||
String currentChecksum = Miscellaneous.checksumSha(currentRingtone.getAbsolutePath());
|
|
||||||
String desiredChecksum = Miscellaneous.checksumSha(notificationRingtone.getAbsolutePath());
|
|
||||||
|
|
||||||
if(!currentChecksum.equals(desiredChecksum))
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
if(changeScreenLockUnlockSound)
|
if(changeScreenLockUnlockSound)
|
||||||
{
|
{
|
||||||
|
@ -12,7 +12,6 @@ import com.jens.automation2.receivers.BluetoothReceiver;
|
|||||||
import com.jens.automation2.receivers.ConnectivityReceiver;
|
import com.jens.automation2.receivers.ConnectivityReceiver;
|
||||||
import com.jens.automation2.receivers.DeviceOrientationListener;
|
import com.jens.automation2.receivers.DeviceOrientationListener;
|
||||||
import com.jens.automation2.receivers.HeadphoneJackListener;
|
import com.jens.automation2.receivers.HeadphoneJackListener;
|
||||||
import com.jens.automation2.receivers.MediaPlayerListener;
|
|
||||||
import com.jens.automation2.receivers.NoiseListener;
|
import com.jens.automation2.receivers.NoiseListener;
|
||||||
import com.jens.automation2.receivers.PhoneStatusListener;
|
import com.jens.automation2.receivers.PhoneStatusListener;
|
||||||
import com.jens.automation2.receivers.ProcessListener;
|
import com.jens.automation2.receivers.ProcessListener;
|
||||||
@ -56,7 +55,6 @@ public class ReceiverCoordinator
|
|||||||
//NotificationListener.class,
|
//NotificationListener.class,
|
||||||
PhoneStatusListener.class,
|
PhoneStatusListener.class,
|
||||||
ProcessListener.class,
|
ProcessListener.class,
|
||||||
MediaPlayerListener.class,
|
|
||||||
ScreenStateReceiver.class,
|
ScreenStateReceiver.class,
|
||||||
TimeZoneListener.class
|
TimeZoneListener.class
|
||||||
};
|
};
|
||||||
@ -188,9 +186,6 @@ public class ReceiverCoordinator
|
|||||||
if(Rule.isAnyRuleUsing(Trigger.Trigger_Enum.headsetPlugged))
|
if(Rule.isAnyRuleUsing(Trigger.Trigger_Enum.headsetPlugged))
|
||||||
HeadphoneJackListener.getInstance().startListener(AutomationService.getInstance());
|
HeadphoneJackListener.getInstance().startListener(AutomationService.getInstance());
|
||||||
|
|
||||||
if(Rule.isAnyRuleUsing(Trigger.Trigger_Enum.musicPlaying))
|
|
||||||
MediaPlayerListener.getInstance().startListener(AutomationService.getInstance());
|
|
||||||
|
|
||||||
if(Rule.isAnyRuleUsing(Trigger.Trigger_Enum.screenState))
|
if(Rule.isAnyRuleUsing(Trigger.Trigger_Enum.screenState))
|
||||||
ScreenStateReceiver.startScreenStateReceiver(AutomationService.getInstance());
|
ScreenStateReceiver.startScreenStateReceiver(AutomationService.getInstance());
|
||||||
}
|
}
|
||||||
@ -207,7 +202,6 @@ public class ReceiverCoordinator
|
|||||||
DateTimeListener.stopAlarmListener(AutomationService.getInstance());
|
DateTimeListener.stopAlarmListener(AutomationService.getInstance());
|
||||||
NoiseListener.stopNoiseListener();
|
NoiseListener.stopNoiseListener();
|
||||||
ProcessListener.stopProcessListener(AutomationService.getInstance());
|
ProcessListener.stopProcessListener(AutomationService.getInstance());
|
||||||
MediaPlayerListener.getInstance().stopListener(AutomationService.getInstance());
|
|
||||||
DeviceOrientationListener.getInstance().stopListener(AutomationService.getInstance());
|
DeviceOrientationListener.getInstance().stopListener(AutomationService.getInstance());
|
||||||
|
|
||||||
try
|
try
|
||||||
@ -289,17 +283,6 @@ public class ReceiverCoordinator
|
|||||||
ScreenStateReceiver.stopScreenStateReceiver();
|
ScreenStateReceiver.stopScreenStateReceiver();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Rule.isAnyRuleUsing(Trigger.Trigger_Enum.musicPlaying))
|
|
||||||
{
|
|
||||||
Miscellaneous.logEvent("i", "LocationProvider", "Starting MediaPlayerListener because used in a new/changed rule.", 4);
|
|
||||||
MediaPlayerListener.getInstance().startListener(AutomationService.getInstance());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Miscellaneous.logEvent("i", "LocationProvider", "Shutting down MediaPlayerListener because not used in any rule.", 4);
|
|
||||||
MediaPlayerListener.getInstance().stopListener(AutomationService.getInstance());
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!BuildConfig.FLAVOR.equalsIgnoreCase("fdroidFlavor"))
|
if(!BuildConfig.FLAVOR.equalsIgnoreCase("fdroidFlavor"))
|
||||||
{
|
{
|
||||||
if (Rule.isAnyRuleUsing(Trigger.Trigger_Enum.activityDetection))
|
if (Rule.isAnyRuleUsing(Trigger.Trigger_Enum.activityDetection))
|
||||||
|
@ -66,7 +66,6 @@ public class Settings implements SharedPreferences
|
|||||||
public static boolean executeRulesAndProfilesWithSingleClick;
|
public static boolean executeRulesAndProfilesWithSingleClick;
|
||||||
public static boolean displayNewsOnMainScreen;
|
public static boolean displayNewsOnMainScreen;
|
||||||
public static boolean automaticUpdateCheck;
|
public static boolean automaticUpdateCheck;
|
||||||
public static long musicCheckFrequency;
|
|
||||||
|
|
||||||
public static boolean lockSoundChanges;
|
public static boolean lockSoundChanges;
|
||||||
public static boolean noticeAndroid9MicrophoneShown;
|
public static boolean noticeAndroid9MicrophoneShown;
|
||||||
@ -81,54 +80,53 @@ public class Settings implements SharedPreferences
|
|||||||
*/
|
*/
|
||||||
public static final String dateFormat = "E dd.MM.yyyy HH:mm:ss:ssss";
|
public static final String dateFormat = "E dd.MM.yyyy HH:mm:ss:ssss";
|
||||||
|
|
||||||
public static final int default_positioningEngine = 0;
|
protected static final int default_positioningEngine = 0;
|
||||||
public static final long default_minimumDistanceChangeForGpsUpdate = 100;
|
protected static final long default_minimumDistanceChangeForGpsUpdate = 100;
|
||||||
public static final long default_minimumDistanceChangeForNetworkUpdate = 500; // in Meters
|
protected static final long default_minimumDistanceChangeForNetworkUpdate = 500; // in Meters
|
||||||
public static final long default_satisfactoryAccuracyGps = 50;
|
protected static final long default_satisfactoryAccuracyGps = 50;
|
||||||
public static final long default_satisfactoryAccuracyNetwork = 1000;
|
protected static final long default_satisfactoryAccuracyNetwork = 1000;
|
||||||
public static final int default_gpsTimeout = 300; // seconds
|
protected static final int default_gpsTimeout = 300; // seconds
|
||||||
public static final long default_minimumTimeBetweenUpdate = 30000; // in Milliseconds
|
protected static final long default_minimumTimeBetweenUpdate = 30000; // in Milliseconds
|
||||||
public static final boolean default_startServiceAtSystemBoot = false;
|
protected static final boolean default_startServiceAtSystemBoot = false;
|
||||||
public static final boolean default_writeLogFile = false;
|
protected static final boolean default_writeLogFile = false;
|
||||||
public static final long default_logLevel = 2;
|
protected static final long default_logLevel = 2;
|
||||||
public static final int default_logFileMaxSize = 10;
|
protected static final int default_logFileMaxSize = 10;
|
||||||
public static final boolean default_useTextToSpeechOnNormal = false;
|
protected static final boolean default_useTextToSpeechOnNormal = false;
|
||||||
public static final boolean default_useTextToSpeechOnVibrate = false;
|
protected static final boolean default_useTextToSpeechOnVibrate = false;
|
||||||
public static final boolean default_useTextToSpeechOnSilent = false;
|
protected static final boolean default_useTextToSpeechOnSilent = false;
|
||||||
public static final boolean default_muteTextToSpeechDuringCalls = true;
|
protected static final boolean default_muteTextToSpeechDuringCalls = true;
|
||||||
public static final boolean default_useWifiForPositioning = true;
|
protected static final boolean default_useWifiForPositioning = true;
|
||||||
public static final boolean default_useAccelerometerForPositioning = true;
|
protected static final boolean default_useAccelerometerForPositioning = true;
|
||||||
public static final long default_useAccelerometerAfterIdleTime = 5;
|
protected static final long default_useAccelerometerAfterIdleTime = 5;
|
||||||
public static final long default_accelerometerMovementThreshold = 2;
|
protected static final long default_accelerometerMovementThreshold = 2;
|
||||||
public static final long default_speedMaximumTimeBetweenLocations = 4;
|
protected static final long default_speedMaximumTimeBetweenLocations = 4;
|
||||||
public static final long default_timeBetweenNoiseLevelMeasurements = 60;
|
protected static final long default_timeBetweenNoiseLevelMeasurements = 60;
|
||||||
public static final long default_lengthOfNoiseLevelMeasurements = 5;
|
protected static final long default_lengthOfNoiseLevelMeasurements = 5;
|
||||||
public static final long default_referenceValueForNoiseLevelMeasurements = 20;
|
protected static final long default_referenceValueForNoiseLevelMeasurements = 20;
|
||||||
public static final boolean default_hasServiceBeenRunning = false;
|
protected static final boolean default_hasServiceBeenRunning = false;
|
||||||
public static final boolean default_startServiceAfterAppUpdate = true;
|
protected static final boolean default_startServiceAfterAppUpdate = true;
|
||||||
public static final boolean default_startNewThreadForRuleActivation = true;
|
protected static final boolean default_startNewThreadForRuleActivation = true;
|
||||||
public static final boolean default_showIconWhenServiceIsRunning = true;
|
protected static final boolean default_showIconWhenServiceIsRunning = true;
|
||||||
public static final boolean default_httpAcceptAllCertificates = false;
|
protected static final boolean default_httpAcceptAllCertificates = false;
|
||||||
public static final int default_httpAttempts = 3;
|
protected static final int default_httpAttempts = 3;
|
||||||
public static final int default_httpAttemptsTimeout = 60;
|
protected static final int default_httpAttemptsTimeout = 60;
|
||||||
public static final int default_httpAttemptGap = 2;
|
protected static final int default_httpAttemptGap = 2;
|
||||||
public static final PointOfInterest default_lastActivePoi = null;
|
protected static final PointOfInterest default_lastActivePoi = null;
|
||||||
public static final boolean default_rememberLastActivePoi = true;
|
protected static final boolean default_rememberLastActivePoi = true;
|
||||||
public static final int default_locationRingBufferSize=3;
|
protected static final int default_locationRingBufferSize=3;
|
||||||
public static final long default_timeBetweenProcessMonitorings = 60;
|
protected static final long default_timeBetweenProcessMonitorings = 60;
|
||||||
public static final long default_acceptDevicePositionSignalEveryX_MilliSeconds = 1000;
|
protected static final long default_acceptDevicePositionSignalEveryX_MilliSeconds = 1000;
|
||||||
public static final int default_activityDetectionFrequency = 60;
|
protected static final int default_activityDetectionFrequency = 60;
|
||||||
public static final int default_activityDetectionRequiredProbability = 75;
|
protected static final int default_activityDetectionRequiredProbability = 75;
|
||||||
public static final boolean default_privacyLocationing = false;
|
protected static final boolean default_privacyLocationing = false;
|
||||||
public static final int default_startScreen = 0;
|
protected static final int default_startScreen = 0;
|
||||||
public static final int default_tabsPlacement = 0;
|
protected static final int default_tabsPlacement = 0;
|
||||||
public static final boolean default_executeRulesAndProfilesWithSingleClick = false;
|
protected static final boolean default_executeRulesAndProfilesWithSingleClick = false;
|
||||||
public static final boolean default_displayNewsOnMainScreen = false;
|
protected static final boolean default_displayNewsOnMainScreen = false;
|
||||||
public static final boolean default_automaticUpdateCheck = false;
|
protected static final boolean default_automaticUpdateCheck = false;
|
||||||
public static final boolean default_lockSoundChanges = false;
|
protected static final boolean default_lockSoundChanges = false;
|
||||||
public static final long default_lastNewsPolltime = -1;
|
protected static final long default_lastNewsPolltime = -1;
|
||||||
public static final long default_lastUpdateCheck = -1;
|
protected static final long default_lastUpdateCheck = -1;
|
||||||
public static final long default_musicCheckFrequency = 2500;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean contains(String arg0)
|
public boolean contains(String arg0)
|
||||||
@ -263,11 +261,6 @@ public class Settings implements SharedPreferences
|
|||||||
startScreen = Integer.parseInt(prefs.getString("startScreen", String.valueOf(default_startScreen)));
|
startScreen = Integer.parseInt(prefs.getString("startScreen", String.valueOf(default_startScreen)));
|
||||||
tabsPlacement = Integer.parseInt(prefs.getString("tabsPlacement", String.valueOf(default_tabsPlacement)));
|
tabsPlacement = Integer.parseInt(prefs.getString("tabsPlacement", String.valueOf(default_tabsPlacement)));
|
||||||
|
|
||||||
musicCheckFrequency = Long.parseLong(prefs.getString("musicCheckFrequency", String.valueOf(default_musicCheckFrequency)));
|
|
||||||
|
|
||||||
if(Settings.musicCheckFrequency == 0)
|
|
||||||
Settings.musicCheckFrequency = Settings.default_musicCheckFrequency;
|
|
||||||
|
|
||||||
executeRulesAndProfilesWithSingleClick = prefs.getBoolean("executeRulesAndProfilesWithSingleClick", default_executeRulesAndProfilesWithSingleClick);
|
executeRulesAndProfilesWithSingleClick = prefs.getBoolean("executeRulesAndProfilesWithSingleClick", default_executeRulesAndProfilesWithSingleClick);
|
||||||
automaticUpdateCheck = prefs.getBoolean("automaticUpdateCheck", default_automaticUpdateCheck);
|
automaticUpdateCheck = prefs.getBoolean("automaticUpdateCheck", default_automaticUpdateCheck);
|
||||||
displayNewsOnMainScreen = prefs.getBoolean("displayNewsOnMainScreen", default_displayNewsOnMainScreen);
|
displayNewsOnMainScreen = prefs.getBoolean("displayNewsOnMainScreen", default_displayNewsOnMainScreen);
|
||||||
@ -334,154 +327,154 @@ public class Settings implements SharedPreferences
|
|||||||
|
|
||||||
Editor editor = prefs.edit();
|
Editor editor = prefs.edit();
|
||||||
|
|
||||||
if(!prefs.contains("startServiceAtSystemBoot") || force)
|
if(!prefs.contains("startServiceAtSystemBoot") | force)
|
||||||
editor.putBoolean("startServiceAtSystemBoot", default_startServiceAtSystemBoot);
|
editor.putBoolean("startServiceAtSystemBoot", default_startServiceAtSystemBoot);
|
||||||
|
|
||||||
if(!prefs.contains("writeLogFile") || force)
|
if(!prefs.contains("writeLogFile") | force)
|
||||||
editor.putBoolean("writeLogFile", default_writeLogFile);
|
editor.putBoolean("writeLogFile", default_writeLogFile);
|
||||||
|
|
||||||
if(!prefs.contains("useTextToSpeechOnNormal") || force)
|
// if(!prefs.contains("useTextToSpeech") | force)
|
||||||
|
// editor.putBoolean("useTextToSpeech", default_useTextToSpeech);
|
||||||
|
|
||||||
|
if(!prefs.contains("useTextToSpeechOnNormal") | force)
|
||||||
editor.putBoolean("useTextToSpeechOnNormal", default_useTextToSpeechOnNormal);
|
editor.putBoolean("useTextToSpeechOnNormal", default_useTextToSpeechOnNormal);
|
||||||
|
|
||||||
if(!prefs.contains("useTextToSpeechOnVibrate") || force)
|
if(!prefs.contains("useTextToSpeechOnVibrate") | force)
|
||||||
editor.putBoolean("useTextToSpeechOnVibrate", default_useTextToSpeechOnVibrate);
|
editor.putBoolean("useTextToSpeechOnVibrate", default_useTextToSpeechOnVibrate);
|
||||||
|
|
||||||
if(!prefs.contains("useTextToSpeechOnSilent") || force)
|
if(!prefs.contains("useTextToSpeechOnSilent") | force)
|
||||||
editor.putBoolean("useTextToSpeechOnSilent", default_useTextToSpeechOnSilent);
|
editor.putBoolean("useTextToSpeechOnSilent", default_useTextToSpeechOnSilent);
|
||||||
|
|
||||||
if(!prefs.contains("muteTextToSpeechDuringCalls") || force)
|
if(!prefs.contains("muteTextToSpeechDuringCalls") | force)
|
||||||
editor.putBoolean("muteTextToSpeechDuringCalls", default_muteTextToSpeechDuringCalls);
|
editor.putBoolean("muteTextToSpeechDuringCalls", default_muteTextToSpeechDuringCalls);
|
||||||
|
|
||||||
if(!prefs.contains("positioningEngine") || force)
|
if(!prefs.contains("positioningEngine") | force)
|
||||||
editor.putString("positioningEngine", String.valueOf(default_positioningEngine));
|
editor.putString("positioningEngine", String.valueOf(default_positioningEngine));
|
||||||
|
|
||||||
if(!prefs.contains("useWifiForPositioning") || force)
|
if(!prefs.contains("useWifiForPositioning") | force)
|
||||||
editor.putBoolean("useWifiForPositioning", default_useWifiForPositioning);
|
editor.putBoolean("useWifiForPositioning", default_useWifiForPositioning);
|
||||||
|
|
||||||
if(!prefs.contains("hasServiceBeenRunning") || force)
|
if(!prefs.contains("hasServiceBeenRunning") | force)
|
||||||
editor.putBoolean("hasServiceBeenRunning", default_hasServiceBeenRunning);
|
editor.putBoolean("hasServiceBeenRunning", default_hasServiceBeenRunning);
|
||||||
|
|
||||||
if(!prefs.contains("startServiceAfterAppUpdate") || force)
|
if(!prefs.contains("startServiceAfterAppUpdate") | force)
|
||||||
editor.putBoolean("startServiceAfterAppUpdate", default_startServiceAfterAppUpdate);
|
editor.putBoolean("startServiceAfterAppUpdate", default_startServiceAfterAppUpdate);
|
||||||
|
|
||||||
if(!prefs.contains("startNewThreadForRuleActivation") || force)
|
if(!prefs.contains("startNewThreadForRuleActivation") | force)
|
||||||
editor.putBoolean("startNewThreadForRuleActivation", default_startNewThreadForRuleActivation);
|
editor.putBoolean("startNewThreadForRuleActivation", default_startNewThreadForRuleActivation);
|
||||||
|
|
||||||
if(!prefs.contains("showIconWhenServiceIsRunning") || force)
|
if(!prefs.contains("showIconWhenServiceIsRunning") | force)
|
||||||
editor.putBoolean("showIconWhenServiceIsRunning", default_showIconWhenServiceIsRunning);
|
editor.putBoolean("showIconWhenServiceIsRunning", default_showIconWhenServiceIsRunning);
|
||||||
|
|
||||||
if(!prefs.contains("useAccelerometerForPositioning") || force)
|
if(!prefs.contains("useAccelerometerForPositioning") | force)
|
||||||
editor.putBoolean("useAccelerometerForPositioning", default_useAccelerometerForPositioning);
|
editor.putBoolean("useAccelerometerForPositioning", default_useAccelerometerForPositioning);
|
||||||
|
|
||||||
if(!prefs.contains("useAccelerometerAfterIdleTime") || force)
|
if(!prefs.contains("useAccelerometerAfterIdleTime") | force)
|
||||||
editor.putString("useAccelerometerAfterIdleTime", String.valueOf(default_useAccelerometerAfterIdleTime));
|
editor.putString("useAccelerometerAfterIdleTime", String.valueOf(default_useAccelerometerAfterIdleTime));
|
||||||
|
|
||||||
if(!prefs.contains("accelerometerMovementThreshold") || force)
|
if(!prefs.contains("accelerometerMovementThreshold") | force)
|
||||||
editor.putString("accelerometerMovementThreshold", String.valueOf(default_accelerometerMovementThreshold));
|
editor.putString("accelerometerMovementThreshold", String.valueOf(default_accelerometerMovementThreshold));
|
||||||
|
|
||||||
if(!prefs.contains("speedMaximumTimeBetweenLocations") || force)
|
if(!prefs.contains("speedMaximumTimeBetweenLocations") | force)
|
||||||
editor.putString("speedMaximumTimeBetweenLocations", String.valueOf(default_speedMaximumTimeBetweenLocations));
|
editor.putString("speedMaximumTimeBetweenLocations", String.valueOf(default_speedMaximumTimeBetweenLocations));
|
||||||
|
|
||||||
if(!prefs.contains("MINIMUM_DISTANCE_CHANGE_FOR_GPS_UPDATE") || force)
|
if(!prefs.contains("MINIMUM_DISTANCE_CHANGE_FOR_GPS_UPDATE") | force)
|
||||||
editor.putString("MINIMUM_DISTANCE_CHANGE_FOR_GPS_UPDATE", String.valueOf(default_minimumDistanceChangeForGpsUpdate));
|
editor.putString("MINIMUM_DISTANCE_CHANGE_FOR_GPS_UPDATE", String.valueOf(default_minimumDistanceChangeForGpsUpdate));
|
||||||
|
|
||||||
if(!prefs.contains("MINIMUM_DISTANCE_CHANGE_FOR_NETWORK_UPDATE") || force)
|
if(!prefs.contains("MINIMUM_DISTANCE_CHANGE_FOR_NETWORK_UPDATE") | force)
|
||||||
editor.putString("MINIMUM_DISTANCE_CHANGE_FOR_NETWORK_UPDATE", String.valueOf(default_minimumDistanceChangeForNetworkUpdate));
|
editor.putString("MINIMUM_DISTANCE_CHANGE_FOR_NETWORK_UPDATE", String.valueOf(default_minimumDistanceChangeForNetworkUpdate));
|
||||||
|
|
||||||
if(!prefs.contains("SATISFACTORY_ACCURACY_GPS") || force)
|
if(!prefs.contains("SATISFACTORY_ACCURACY_GPS") | force)
|
||||||
editor.putString("SATISFACTORY_ACCURACY_GPS", String.valueOf(default_satisfactoryAccuracyGps));
|
editor.putString("SATISFACTORY_ACCURACY_GPS", String.valueOf(default_satisfactoryAccuracyGps));
|
||||||
|
|
||||||
if(!prefs.contains("SATISFACTORY_ACCURACY_NETWORK") || force)
|
if(!prefs.contains("SATISFACTORY_ACCURACY_NETWORK") | force)
|
||||||
editor.putString("SATISFACTORY_ACCURACY_NETWORK", String.valueOf(default_satisfactoryAccuracyNetwork));
|
editor.putString("SATISFACTORY_ACCURACY_NETWORK", String.valueOf(default_satisfactoryAccuracyNetwork));
|
||||||
|
|
||||||
if(!prefs.contains("gpsTimeout") || force)
|
if(!prefs.contains("gpsTimeout") | force)
|
||||||
editor.putString("gpsTimeout", String.valueOf(default_gpsTimeout));
|
editor.putString("gpsTimeout", String.valueOf(default_gpsTimeout));
|
||||||
|
|
||||||
if(!prefs.contains("MINIMUM_TIME_BETWEEN_UPDATE") || force)
|
if(!prefs.contains("MINIMUM_TIME_BETWEEN_UPDATE") | force)
|
||||||
editor.putString("MINIMUM_TIME_BETWEEN_UPDATE", String.valueOf(default_minimumTimeBetweenUpdate));
|
editor.putString("MINIMUM_TIME_BETWEEN_UPDATE", String.valueOf(default_minimumTimeBetweenUpdate));
|
||||||
|
|
||||||
if(!prefs.contains("timeBetweenNoiseLevelMeasurements") || force)
|
if(!prefs.contains("timeBetweenNoiseLevelMeasurements") | force)
|
||||||
editor.putString("timeBetweenNoiseLevelMeasurements", String.valueOf(default_timeBetweenNoiseLevelMeasurements));
|
editor.putString("timeBetweenNoiseLevelMeasurements", String.valueOf(default_timeBetweenNoiseLevelMeasurements));
|
||||||
|
|
||||||
if(!prefs.contains("lengthOfNoiseLevelMeasurements") || force)
|
if(!prefs.contains("lengthOfNoiseLevelMeasurements") | force)
|
||||||
editor.putString("lengthOfNoiseLevelMeasurements", String.valueOf(default_lengthOfNoiseLevelMeasurements));
|
editor.putString("lengthOfNoiseLevelMeasurements", String.valueOf(default_lengthOfNoiseLevelMeasurements));
|
||||||
|
|
||||||
if(!prefs.contains("referenceValueForNoiseLevelMeasurements") || force)
|
if(!prefs.contains("referenceValueForNoiseLevelMeasurements") | force)
|
||||||
editor.putString("referenceValueForNoiseLevelMeasurements", String.valueOf(default_referenceValueForNoiseLevelMeasurements));
|
editor.putString("referenceValueForNoiseLevelMeasurements", String.valueOf(default_referenceValueForNoiseLevelMeasurements));
|
||||||
|
|
||||||
if(!prefs.contains("logLevel") || force)
|
if(!prefs.contains("logLevel") | force)
|
||||||
editor.putString("logLevel", String.valueOf(default_logLevel));
|
editor.putString("logLevel", String.valueOf(default_logLevel));
|
||||||
|
|
||||||
if(!prefs.contains("logFileMaxSize") || force)
|
if(!prefs.contains("logFileMaxSize") | force)
|
||||||
editor.putString("logFileMaxSize", String.valueOf(default_logFileMaxSize));
|
editor.putString("logFileMaxSize", String.valueOf(default_logFileMaxSize));
|
||||||
|
|
||||||
if(!prefs.contains("httpAcceptAllCertificates") || force)
|
if(!prefs.contains("httpAcceptAllCertificates") | force)
|
||||||
editor.putBoolean("httpAcceptAllCertificates", default_httpAcceptAllCertificates);
|
editor.putBoolean("httpAcceptAllCertificates", default_httpAcceptAllCertificates);
|
||||||
|
|
||||||
if(!prefs.contains("httpAttempts") || force)
|
if(!prefs.contains("httpAttempts") | force)
|
||||||
editor.putString("httpAttempts", String.valueOf(default_httpAttempts));
|
editor.putString("httpAttempts", String.valueOf(default_httpAttempts));
|
||||||
|
|
||||||
if(!prefs.contains("httpAttemptsTimeout") || force)
|
if(!prefs.contains("httpAttemptsTimeout") | force)
|
||||||
editor.putString("httpAttemptsTimeout", String.valueOf(default_httpAttemptsTimeout));
|
editor.putString("httpAttemptsTimeout", String.valueOf(default_httpAttemptsTimeout));
|
||||||
|
|
||||||
if(!prefs.contains("httpAttemptGap") || force)
|
if(!prefs.contains("httpAttemptGap") | force)
|
||||||
editor.putString("httpAttemptGap", String.valueOf(default_httpAttemptGap));
|
editor.putString("httpAttemptGap", String.valueOf(default_httpAttemptGap));
|
||||||
|
|
||||||
if(!prefs.contains("lastActivePoi") || force)
|
if(!prefs.contains("lastActivePoi") | force)
|
||||||
editor.putString("lastActivePoi", "null");
|
editor.putString("lastActivePoi", "null");
|
||||||
|
|
||||||
if(!prefs.contains("rememberLastActivePoi") || force)
|
if(!prefs.contains("rememberLastActivePoi") | force)
|
||||||
editor.putBoolean("rememberLastActivePoi", default_rememberLastActivePoi);
|
editor.putBoolean("rememberLastActivePoi", default_rememberLastActivePoi);
|
||||||
|
|
||||||
if(!prefs.contains("locationRingBufferSize") || force)
|
if(!prefs.contains("locationRingBufferSize") | force)
|
||||||
editor.putString("locationRingBufferSize", String.valueOf(default_locationRingBufferSize));
|
editor.putString("locationRingBufferSize", String.valueOf(default_locationRingBufferSize));
|
||||||
|
|
||||||
if(!prefs.contains("timeBetweenProcessMonitorings") || force)
|
if(!prefs.contains("timeBetweenProcessMonitorings") | force)
|
||||||
editor.putString("timeBetweenProcessMonitorings", String.valueOf(default_timeBetweenProcessMonitorings));
|
editor.putString("timeBetweenProcessMonitorings", String.valueOf(default_timeBetweenProcessMonitorings));
|
||||||
|
|
||||||
if(!prefs.contains("acceptDevicePositionSignalEveryX_MilliSeconds") || force)
|
if(!prefs.contains("acceptDevicePositionSignalEveryX_MilliSeconds") | force)
|
||||||
editor.putString("acceptDevicePositionSignalEveryX_MilliSeconds", String.valueOf(default_acceptDevicePositionSignalEveryX_MilliSeconds));
|
editor.putString("acceptDevicePositionSignalEveryX_MilliSeconds", String.valueOf(default_acceptDevicePositionSignalEveryX_MilliSeconds));
|
||||||
|
|
||||||
if(!prefs.contains("activityDetectionFrequency") || force)
|
if(!prefs.contains("activityDetectionFrequency") | force)
|
||||||
editor.putString("activityDetectionFrequency", String.valueOf(default_activityDetectionFrequency));
|
editor.putString("activityDetectionFrequency", String.valueOf(default_activityDetectionFrequency));
|
||||||
|
|
||||||
if(!prefs.contains("activityDetectionRequiredProbability") || force)
|
if(!prefs.contains("activityDetectionRequiredProbability") | force)
|
||||||
editor.putString("activityDetectionRequiredProbability", String.valueOf(default_activityDetectionRequiredProbability));
|
editor.putString("activityDetectionRequiredProbability", String.valueOf(default_activityDetectionRequiredProbability));
|
||||||
|
|
||||||
if(!prefs.contains("privacyLocationing") || force)
|
if(!prefs.contains("privacyLocationing") | force)
|
||||||
editor.putBoolean("privacyLocationing", default_privacyLocationing);
|
editor.putBoolean("privacyLocationing", default_privacyLocationing);
|
||||||
|
|
||||||
if(!prefs.contains("startScreen") || force)
|
if(!prefs.contains("startScreen") | force)
|
||||||
editor.putString("startScreen", String.valueOf(default_startScreen));
|
editor.putString("startScreen", String.valueOf(default_startScreen));
|
||||||
|
|
||||||
if(!prefs.contains("tabsPlacement") || force)
|
if(!prefs.contains("tabsPlacement") | force)
|
||||||
editor.putString("tabsPlacement", String.valueOf(default_tabsPlacement));
|
editor.putString("tabsPlacement", String.valueOf(default_tabsPlacement));
|
||||||
|
|
||||||
if(!prefs.contains("executeRulesAndProfilesWithSingleClick") || force)
|
if(!prefs.contains("executeRulesAndProfilesWithSingleClick") | force)
|
||||||
editor.putBoolean("executeRulesAndProfilesWithSingleClick", default_executeRulesAndProfilesWithSingleClick);
|
editor.putBoolean("executeRulesAndProfilesWithSingleClick", default_executeRulesAndProfilesWithSingleClick);
|
||||||
|
|
||||||
if(!prefs.contains("automaticUpdateCheck") || force)
|
if(!prefs.contains("automaticUpdateCheck") | force)
|
||||||
editor.putBoolean("automaticUpdateCheck", default_automaticUpdateCheck);
|
editor.putBoolean("automaticUpdateCheck", default_automaticUpdateCheck);
|
||||||
|
|
||||||
if(!prefs.contains("displayNewsOnMainScreen") || force)
|
if(!prefs.contains("displayNewsOnMainScreen") | force)
|
||||||
editor.putBoolean("displayNewsOnMainScreen", default_displayNewsOnMainScreen);
|
editor.putBoolean("displayNewsOnMainScreen", default_displayNewsOnMainScreen);
|
||||||
|
|
||||||
if(!prefs.contains("musicCheckFrequency") || force)
|
if(!prefs.contains("lockSoundChanges") | force)
|
||||||
editor.putLong("musicCheckFrequency", default_musicCheckFrequency);
|
|
||||||
|
|
||||||
if(!prefs.contains("lockSoundChanges") || force)
|
|
||||||
editor.putBoolean("lockSoundChanges", default_lockSoundChanges);
|
editor.putBoolean("lockSoundChanges", default_lockSoundChanges);
|
||||||
|
|
||||||
if(!prefs.contains("noticeAndroid9MicrophoneShown") || force)
|
if(!prefs.contains("noticeAndroid9MicrophoneShown") | force)
|
||||||
editor.putBoolean("noticeAndroid9MicrophoneShown", false);
|
editor.putBoolean("noticeAndroid9MicrophoneShown", false);
|
||||||
|
|
||||||
if(!prefs.contains("lastNewsPolltime") || force)
|
if(!prefs.contains("lastNewsPolltime") | force)
|
||||||
editor.putLong("lastNewsPolltime", default_lastNewsPolltime);
|
editor.putLong("lastNewsPolltime", default_lastNewsPolltime);
|
||||||
|
|
||||||
if(!prefs.contains("lastUpdateCheck") || force)
|
if(!prefs.contains("lastUpdateCheck") | force)
|
||||||
editor.putLong("lastUpdateCheck", default_lastUpdateCheck);
|
editor.putLong("lastUpdateCheck", default_lastUpdateCheck);
|
||||||
|
|
||||||
if(!prefs.contains("whatHasBeenDone") || force)
|
if(!prefs.contains("whatHasBeenDone") | force)
|
||||||
editor.putString("whatHasBeenDone", "");
|
editor.putString("whatHasBeenDone", "");
|
||||||
|
|
||||||
editor.commit();
|
editor.commit();
|
||||||
@ -550,10 +543,6 @@ public class Settings implements SharedPreferences
|
|||||||
editor.putBoolean("automaticUpdateCheck", automaticUpdateCheck);
|
editor.putBoolean("automaticUpdateCheck", automaticUpdateCheck);
|
||||||
editor.putBoolean("displayNewsOnMainScreen", displayNewsOnMainScreen);
|
editor.putBoolean("displayNewsOnMainScreen", displayNewsOnMainScreen);
|
||||||
|
|
||||||
if(Settings.musicCheckFrequency == 0)
|
|
||||||
Settings.musicCheckFrequency = Settings.default_musicCheckFrequency;
|
|
||||||
editor.putString("musicCheckFrequency", String.valueOf(musicCheckFrequency));
|
|
||||||
|
|
||||||
editor.putBoolean("lockSoundChanges", lockSoundChanges);
|
editor.putBoolean("lockSoundChanges", lockSoundChanges);
|
||||||
editor.putBoolean("noticeAndroid9MicrophoneShown", noticeAndroid9MicrophoneShown);
|
editor.putBoolean("noticeAndroid9MicrophoneShown", noticeAndroid9MicrophoneShown);
|
||||||
editor.putBoolean("noticeAndroid10WifiShown", noticeAndroid10WifiShown);
|
editor.putBoolean("noticeAndroid10WifiShown", noticeAndroid10WifiShown);
|
||||||
|
@ -17,7 +17,6 @@ import com.jens.automation2.receivers.BluetoothReceiver;
|
|||||||
import com.jens.automation2.receivers.ConnectivityReceiver;
|
import com.jens.automation2.receivers.ConnectivityReceiver;
|
||||||
import com.jens.automation2.receivers.DeviceOrientationListener;
|
import com.jens.automation2.receivers.DeviceOrientationListener;
|
||||||
import com.jens.automation2.receivers.HeadphoneJackListener;
|
import com.jens.automation2.receivers.HeadphoneJackListener;
|
||||||
import com.jens.automation2.receivers.MediaPlayerListener;
|
|
||||||
import com.jens.automation2.receivers.NfcReceiver;
|
import com.jens.automation2.receivers.NfcReceiver;
|
||||||
import com.jens.automation2.receivers.NoiseListener;
|
import com.jens.automation2.receivers.NoiseListener;
|
||||||
import com.jens.automation2.receivers.NotificationListener;
|
import com.jens.automation2.receivers.NotificationListener;
|
||||||
@ -39,7 +38,7 @@ import java.util.Date;
|
|||||||
public class Trigger
|
public class Trigger
|
||||||
{
|
{
|
||||||
public enum Trigger_Enum {
|
public enum Trigger_Enum {
|
||||||
pointOfInterest, timeFrame, charging, batteryLevel, usb_host_connection, speed, noiseLevel, wifiConnection, process_started_stopped, airplaneMode, roaming, nfcTag, activityDetection, bluetoothConnection, headsetPlugged, notification, deviceOrientation, profileActive, screenState, musicPlaying, phoneCall; //phoneCall always needs to be at the very end because of Google's shitty so called privacy
|
pointOfInterest, timeFrame, charging, batteryLevel, usb_host_connection, speed, noiseLevel, wifiConnection, process_started_stopped, airplaneMode, roaming, nfcTag, activityDetection, bluetoothConnection, headsetPlugged, notification, deviceOrientation, profileActive, screenState, phoneCall; //phoneCall always needs to be at the very end because of Google's shitty so called privacy
|
||||||
|
|
||||||
public String getFullName(Context context)
|
public String getFullName(Context context)
|
||||||
{
|
{
|
||||||
@ -83,14 +82,13 @@ public class Trigger
|
|||||||
return context.getResources().getString(R.string.deviceOrientation);
|
return context.getResources().getString(R.string.deviceOrientation);
|
||||||
case profileActive:
|
case profileActive:
|
||||||
return context.getResources().getString(R.string.profile);
|
return context.getResources().getString(R.string.profile);
|
||||||
case musicPlaying:
|
|
||||||
return context.getResources().getString(R.string.musicPlaying);
|
|
||||||
case screenState:
|
case screenState:
|
||||||
return context.getResources().getString(R.string.screenState);
|
return context.getResources().getString(R.string.screenState);
|
||||||
default:
|
default:
|
||||||
return "Unknown";
|
return "Unknown";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Rule parentRule = null;
|
Rule parentRule = null;
|
||||||
@ -182,10 +180,6 @@ public class Trigger
|
|||||||
if(!checkProfileActive())
|
if(!checkProfileActive())
|
||||||
result = false;
|
result = false;
|
||||||
break;
|
break;
|
||||||
case musicPlaying:
|
|
||||||
if(!checkMusicPlaying())
|
|
||||||
result = false;
|
|
||||||
break;
|
|
||||||
case screenState:
|
case screenState:
|
||||||
if(!checkScreenState())
|
if(!checkScreenState())
|
||||||
result = false;
|
result = false;
|
||||||
@ -338,11 +332,6 @@ public class Trigger
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean checkMusicPlaying()
|
|
||||||
{
|
|
||||||
return triggerParameter == MediaPlayerListener.isAudioPlaying(Miscellaneous.getAnyContext());
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean checkProfileActive()
|
boolean checkProfileActive()
|
||||||
{
|
{
|
||||||
String demandedProfileName = getTriggerParameter2().split(Trigger.triggerParameter2Split)[0];
|
String demandedProfileName = getTriggerParameter2().split(Trigger.triggerParameter2Split)[0];
|
||||||
@ -1524,12 +1513,6 @@ public class Trigger
|
|||||||
else
|
else
|
||||||
returnString.append(String.format(Miscellaneous.getAnyContext().getString(R.string.profileNotActive), getTriggerParameter2().split(Trigger.triggerParameter2Split)[0]));
|
returnString.append(String.format(Miscellaneous.getAnyContext().getString(R.string.profileNotActive), getTriggerParameter2().split(Trigger.triggerParameter2Split)[0]));
|
||||||
break;
|
break;
|
||||||
case musicPlaying:
|
|
||||||
if(triggerParameter)
|
|
||||||
returnString.append(Miscellaneous.getAnyContext().getString(R.string.musicIsPlaying));
|
|
||||||
else
|
|
||||||
returnString.append(Miscellaneous.getAnyContext().getString(R.string.musicIsNotPlaying));
|
|
||||||
break;
|
|
||||||
case screenState:
|
case screenState:
|
||||||
String state;
|
String state;
|
||||||
switch(triggerParameter2)
|
switch(triggerParameter2)
|
||||||
|
@ -232,6 +232,12 @@ public class LocationProvider
|
|||||||
|
|
||||||
public void startLocationService()
|
public void startLocationService()
|
||||||
{
|
{
|
||||||
|
// if(Settings.useAccelerometerForPositioning && !Miscellaneous.isAndroidEmulator())
|
||||||
|
// {
|
||||||
|
// accelerometerHandler = new AccelerometerHandler();
|
||||||
|
// mySensorActivity = new SensorActivity(this);
|
||||||
|
// }
|
||||||
|
|
||||||
// startPhoneStateListener
|
// startPhoneStateListener
|
||||||
PhoneStatusListener.startPhoneStatusListener(parentService); // also used to mute anouncements during calls
|
PhoneStatusListener.startPhoneStatusListener(parentService); // also used to mute anouncements during calls
|
||||||
|
|
||||||
@ -242,6 +248,8 @@ public class LocationProvider
|
|||||||
{
|
{
|
||||||
if(Rule.isAnyRuleUsing(Trigger_Enum.pointOfInterest) | Rule.isAnyRuleUsing(Trigger_Enum.speed))
|
if(Rule.isAnyRuleUsing(Trigger_Enum.pointOfInterest) | Rule.isAnyRuleUsing(Trigger_Enum.speed))
|
||||||
{
|
{
|
||||||
|
// TelephonyManager telephonyManager = (TelephonyManager) AutomationService.getInstance().getSystemService(Context.TELEPHONY_SERVICE);
|
||||||
|
|
||||||
// startCellLocationChangedReceiver
|
// startCellLocationChangedReceiver
|
||||||
if (CellLocationChangedReceiver.isCellLocationChangedReceiverPossible())
|
if (CellLocationChangedReceiver.isCellLocationChangedReceiverPossible())
|
||||||
{
|
{
|
||||||
@ -506,6 +514,7 @@ public class LocationProvider
|
|||||||
Message msg = new Message();
|
Message msg = new Message();
|
||||||
msg.what = 1;
|
msg.what = 1;
|
||||||
speedHandler.sendMessageAtTime(msg, timeOfForcedLocationCheck.getTimeInMillis());
|
speedHandler.sendMessageAtTime(msg, timeOfForcedLocationCheck.getTimeInMillis());
|
||||||
|
// speedHandler.sendMessageDelayed(msg, delayTime);
|
||||||
speedTimerActive = true;
|
speedTimerActive = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -522,7 +531,7 @@ public class LocationProvider
|
|||||||
if(msg.what == 1)
|
if(msg.what == 1)
|
||||||
{
|
{
|
||||||
// time is up, no cell location updates since x minutes, start accelerometer
|
// time is up, no cell location updates since x minutes, start accelerometer
|
||||||
Miscellaneous.logEvent("i", "LocationProvider", "Timer triggered. Based on the last location and speed we may be at a POI. Forcing location update in case CellLocationChangedReceiver didn\'t fire.", 5);
|
String text = "Timer triggered. Based on the last location and speed we may be at a POI. Forcing location update in case CellLocationChangedReceiver didn\'t fire.";
|
||||||
|
|
||||||
Location currentLocation = CellLocationChangedReceiver.getInstance().getLocation("coarse");
|
Location currentLocation = CellLocationChangedReceiver.getInstance().getLocation("coarse");
|
||||||
AutomationService.getInstance().getLocationProvider().setCurrentLocation(currentLocation, false);
|
AutomationService.getInstance().getLocationProvider().setCurrentLocation(currentLocation, false);
|
||||||
|
@ -1,105 +0,0 @@
|
|||||||
package com.jens.automation2.receivers;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.media.AudioManager;
|
|
||||||
|
|
||||||
import com.jens.automation2.AutomationService;
|
|
||||||
import com.jens.automation2.Miscellaneous;
|
|
||||||
import com.jens.automation2.Rule;
|
|
||||||
import com.jens.automation2.Settings;
|
|
||||||
import com.jens.automation2.Trigger;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.Timer;
|
|
||||||
import java.util.TimerTask;
|
|
||||||
|
|
||||||
public class MediaPlayerListener implements AutomationListenerInterface
|
|
||||||
{
|
|
||||||
static MediaPlayerListener instance = null;
|
|
||||||
static AudioManager mAudioManager = null;
|
|
||||||
static boolean listenerActive = false;
|
|
||||||
Timer timer = null;
|
|
||||||
TimerTask task = null;
|
|
||||||
|
|
||||||
public static boolean isAudioPlaying(Context context)
|
|
||||||
{
|
|
||||||
if(mAudioManager == null)
|
|
||||||
mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
|
|
||||||
|
|
||||||
return mAudioManager.isMusicActive();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static MediaPlayerListener getInstance()
|
|
||||||
{
|
|
||||||
if(instance == null)
|
|
||||||
instance = new MediaPlayerListener();
|
|
||||||
|
|
||||||
return instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void startListener(AutomationService automationService)
|
|
||||||
{
|
|
||||||
Miscellaneous.logEvent("i", "MediaPlayerListener", "Starting listener.",5);
|
|
||||||
|
|
||||||
if(!listenerActive)
|
|
||||||
{
|
|
||||||
if(timer == null)
|
|
||||||
{
|
|
||||||
timer = new Timer();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
task.cancel();
|
|
||||||
timer.purge();
|
|
||||||
}
|
|
||||||
|
|
||||||
task = new TimerTask()
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
synchronized(this)
|
|
||||||
{
|
|
||||||
ArrayList<Rule> ruleCandidates = Rule.findRuleCandidates(Trigger.Trigger_Enum.musicPlaying);
|
|
||||||
for (int i = 0; i < ruleCandidates.size(); i++)
|
|
||||||
{
|
|
||||||
if (ruleCandidates.get(i).getsGreenLight(AutomationService.getInstance()))
|
|
||||||
ruleCandidates.get(i).activate(AutomationService.getInstance(), false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
timer.scheduleAtFixedRate(task, 0, Settings.musicCheckFrequency);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void stopListener(AutomationService automationService)
|
|
||||||
{
|
|
||||||
Miscellaneous.logEvent("i", "MediaPlayerListener", "Stopping listener.",5);
|
|
||||||
|
|
||||||
if(listenerActive)
|
|
||||||
{
|
|
||||||
if (timer != null)
|
|
||||||
{
|
|
||||||
timer.cancel();
|
|
||||||
timer.purge();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isListenerRunning()
|
|
||||||
{
|
|
||||||
return listenerActive;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Trigger.Trigger_Enum[] getMonitoredTrigger()
|
|
||||||
{
|
|
||||||
return new Trigger.Trigger_Enum[] { Trigger.Trigger_Enum.musicPlaying };
|
|
||||||
}
|
|
||||||
}
|
|
@ -293,17 +293,5 @@
|
|||||||
|
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
<PreferenceCategory
|
|
||||||
android:summary="@string/musicPlayingDetection"
|
|
||||||
android:title="@string/musicPlayingDetection">
|
|
||||||
|
|
||||||
<EditTextPreference
|
|
||||||
android:key="musicCheckFrequency"
|
|
||||||
android:summary="@string/musicCheckFrequencySummary"
|
|
||||||
android:title="@string/musicCheckFrequencyTitle"
|
|
||||||
android:inputType="number"></EditTextPreference>
|
|
||||||
|
|
||||||
</PreferenceCategory>
|
|
||||||
|
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
@ -690,13 +690,4 @@
|
|||||||
<string name="controlCenter">Steuerungszentrale</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.</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.</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="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>
|
|
||||||
<string name="musicIsPlaying">Musik läuift</string>
|
|
||||||
<string name="musicIsNotPlaying">Musik läuft nicht</string>
|
|
||||||
<string name="musicCheckFrequencyTitle">Prüffrequenz</string>
|
|
||||||
<string name="musicCheckFrequencySummary">Millisekunden zwischen Prüfungen</string>
|
|
||||||
<string name="musicPlayingDetection">Musik-läuft Erkennung</string>
|
|
||||||
<string name="locationNotWorkingOn12">Das Abrufen des Standorts scheint unter Android 12 derzeit nicht zu funktionieren. Wenn es bei Ihnen nicht klappt, tut mir das leid. Ich werde versuchen die Ursache zu beheben, sobald mir die Ursache bekannt ist. Wenn der Donut bei Ihnen also nicht aufhört sich zu drehen, wissen Sie warum.</string>
|
|
||||||
<string name="profileXrequiresThis">Profil \"%1$s\" benötigt dies.</string>
|
|
||||||
</resources>
|
</resources>
|
@ -689,13 +689,4 @@
|
|||||||
<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="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.</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.</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="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>
|
|
||||||
<string name="musicIsPlaying">musica esta reproduciendo</string>
|
|
||||||
<string name="musicIsNotPlaying">musica no esta reproduciendo</string>
|
|
||||||
<string name="musicCheckFrequencyTitle">Frecuencia de los controles</string>
|
|
||||||
<string name="musicCheckFrequencySummary">Millisegundos entre controles</string>
|
|
||||||
<string name="musicPlayingDetection">Musica tocando deteción</string>
|
|
||||||
<string name="locationNotWorkingOn12">Obtener la locación no parece estar funcionando en dispositivos Android 12 actualmente. Si no está funcionando para ti, lo siento. Intentaré arreglar esto tan pronto como conozca la causa. Así que si la rosquilla no deja de girar, ya sabes por qué.</string>
|
|
||||||
<string name="profileXrequiresThis">El perfil \"%1$s\" requiere esto.</string>
|
|
||||||
</resources>
|
</resources>
|
@ -456,10 +456,10 @@
|
|||||||
<string name="settingsSetToDefault">Impostazioni predefinite ripristinate.</string>
|
<string name="settingsSetToDefault">Impostazioni predefinite ripristinate.</string>
|
||||||
<string name="settingsWillTakeTime">Alcune impostazioni non saranno applicate prima che alcune impostazioni contestuali cambino o che il servizio venga riavviato.</string>
|
<string name="settingsWillTakeTime">Alcune impostazioni non saranno applicate prima che alcune impostazioni contestuali cambino o che il servizio venga riavviato.</string>
|
||||||
<string name="shareConfigAndLogExplanation">Questo creerà una email con la tua configurazione e i file di log allegati come file zip. Non sarà inviata automaticamente, dovrai premere \"invia\". Puoi anche cambiare il destinatario con te stesso, per esempio.</string>
|
<string name="shareConfigAndLogExplanation">Questo creerà una email con la tua configurazione e i file di log allegati come file zip. Non sarà inviata automaticamente, dovrai premere \"invia\". Puoi anche cambiare il destinatario con te stesso, per esempio.</string>
|
||||||
<string name="shareConfigAndLogFilesWithDev">Allegare i file di configurazione e di registro</string>
|
<string name="shareConfigAndLogFilesWithDev">Agganciare i file di configurazione e di registro</string>
|
||||||
<string name="showHelp">Mostra Aiuto</string>
|
<string name="showHelp">Mostra Aiuto</string>
|
||||||
<string name="showIcon">Mostra icona</string>
|
<string name="showIcon">Mostra icona</string>
|
||||||
<string name="showIconWhenServiceIsRunning">Mostra una icona quando il servizio è attivo (nasconderla funziona solo in versioni inferiori ad Android 7). Se hai una versione superiore, vai alle impostazioni di sistema, quindi Automation, e poi seleziona Notifiche, dove potrai disabilitare la \"Service notification\".</string>
|
<string name="showIconWhenServiceIsRunning">Mostra una icona quando il servizio è attivo (nasconderla funziona solo in versioni inferiori ad Android 7). Se hai una versione superiore, vai alle impostazioni di sistema, quindi all\'automazione, quindi alle notifiche e disabilita la \"Service notification\".</string>
|
||||||
<string name="showOnMap">Mostra sulla mappa</string>
|
<string name="showOnMap">Mostra sulla mappa</string>
|
||||||
<string name="someOptionsNotAvailableYet">Alcune opzioni sono disabilitate in quanto non ancora implementate. Saranno introdotte in una versione successiva.</string>
|
<string name="someOptionsNotAvailableYet">Alcune opzioni sono disabilitate in quanto non ancora implementate. Saranno introdotte in una versione successiva.</string>
|
||||||
<string name="soundMode">Modalità sonora</string>
|
<string name="soundMode">Modalità sonora</string>
|
||||||
@ -533,7 +533,7 @@
|
|||||||
<string name="tuesday">Martedì</string>
|
<string name="tuesday">Martedì</string>
|
||||||
<string name="unknownError">Errore indeterminato.</string>
|
<string name="unknownError">Errore indeterminato.</string>
|
||||||
<string name="until">finchè</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</string>
|
<string name="urlLegend">Variabili:\n È possibile utilizzare le seguenti variabili. All\'attivazione saranno sostituite con il valore corrispondente sul dispositivo. Includi le parentesi nel tuo testo.\n\n[uniqueid] - Il numero di serie del tuo dispositivo\n[serialnr] - Il serial number del tuo dispositivio (< 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\n[m] - Mese in formato numerico, sempre 2 cifre\n[Y] - L\’anno, sempre 4 cifre\n[h] - Ore in formato 12 ore, sempre 2 cifre con due punti\n[H] - Ore in formato 24 ore, sempre 2 cifre con due punti\n[i] - Minuti, sempre 2 cifre\n[s] - Secondi, sempre 2 cifre\n[ms] - millisecondi, sempre 3 cifre [notificationTitle] - titolo dell\'ultima notifica [notificationText] - testo dell\'ultima notifica</string>
|
||||||
<string name="urlToTrigger">URL da caricare:</string>
|
<string name="urlToTrigger">URL da caricare:</string>
|
||||||
<string name="urlTooShort">L\'url deve avere almeno 10 caratteri.</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>
|
<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>
|
||||||
@ -661,22 +661,22 @@
|
|||||||
<string name="launcherNotFound">Impossibile identificare un\'attività di avvio di questa app. Dovrai sceglierne uno manualmente.</string>
|
<string name="launcherNotFound">Impossibile identificare un\'attività di avvio di questa app. Dovrai sceglierne uno manualmente.</string>
|
||||||
<string name="createNotification">Crea notifica</string>
|
<string name="createNotification">Crea notifica</string>
|
||||||
<string name="enterTitle">Inserisci un titolo.</string>
|
<string name="enterTitle">Inserisci un titolo.</string>
|
||||||
<string name="enterText">Aggiungi un testo.</string>
|
<string name="enterText">Immettere un testo.</string>
|
||||||
<string name="info">Informazioni</string>
|
<string name="info">Info</string>
|
||||||
<string name="profileWasNotFound">Il profilo utilizzato in questa regola non sembra più esistere. Il primo in ordine alfabetico è stato selezionato.</string>
|
<string name="profileWasNotFound">Il profilo utilizzato in questa regola non sembra più esistere. Il primo in ordine alfabetico è stato selezionato.</string>
|
||||||
<string name="comparisonCaseInsensitive">I confronti non distinguono fra maiuscole e minuscole</string>
|
<string name="comparisonCaseInsensitive">I confronti sono fatti caso-INsensitive</string>
|
||||||
<string name="closeNotifications">Chiudi notifica(e)</string>
|
<string name="closeNotifications">Chiudi notifica(e)</string>
|
||||||
<string name="notificationCloseActionExplanation">Se non specifichi alcun criterio, questa azione chiuderà TUTTE le notifiche. Quindi si consiglia di specificare almeno i criteri per almeno una applicazione, titolo o testo.</string>
|
<string name="notificationCloseActionExplanation">Se non specifichi alcun criterio, questa azione chiuderà TUTTE le notifiche. Quindi si consiglia di specificare almeno i criteri per almeno 1 di applicazione, titolo o testo.</string>
|
||||||
<string name="profileWarning">Le impostazioni che modifichi in questa sezione possono far sì che tu non possa più notare certe cose dal tuo telefono. Possono perfino silenziare la sveglia. Quindi, qualunque cosa tu faccia, ti consigliamo di provarlo.</string>
|
<string name="profileWarning">Le impostazioni che fai qui possono far sì che tu non noti più certe cose dal tuo telefono. Possono anche mettere a tacere la sveglia. Quindi, qualunque cosa tu faccia, ti consigliamo di testarlo.</string>
|
||||||
<string name="ifString">se</string>
|
<string name="ifString">se</string>
|
||||||
<string name="actionMediaControlNotice">Tieni presente che questa azione potrebbe non funzionare con TUTTI i lettori là fuori. E anche se lo facesse, non tutti i pulsanti funzionerebbero necessariamente.</string>
|
<string name="actionMediaControlNotice">Tieni presente che questa azione potrebbe non funzionare con TUTTI i giocatori là fuori. E anche se lo fa, non tutti i pulsanti funzionano necessariamente.</string>
|
||||||
<string name="pleaseSelectActionValue">Si prega di selezionare un\'azione!</string>
|
<string name="pleaseSelectActionValue">Seleziona un\'azione!</string>
|
||||||
<string name="stop">stop</string>
|
<string name="stop">fermarsi</string>
|
||||||
<string name="android.permission.MEDIA_CONTENT_CONTROL">Controllo riproduzione multimediale</string>
|
<string name="android.permission.MEDIA_CONTENT_CONTROL">Controllare la riproduzione multimediale</string>
|
||||||
<string name="next">prossimo</string>
|
<string name="next">prossimo</string>
|
||||||
<string name="previous">precedente</string>
|
<string name="previous">precedente</string>
|
||||||
<string name="pause">pausa</string>
|
<string name="pause">pausa</string>
|
||||||
<string name="play">riproduci</string>
|
<string name="play">giocare</string>
|
||||||
<string name="playPause">attiva/disattiva riproduzione/pausa</string>
|
<string name="playPause">attiva/disattiva riproduzione/pausa</string>
|
||||||
<string name="selectCommand">Seleziona comando</string>
|
<string name="selectCommand">Seleziona comando</string>
|
||||||
<string name="actionMediaControl">Controllare la riproduzione multimediale</string>
|
<string name="actionMediaControl">Controllare la riproduzione multimediale</string>
|
||||||
@ -690,13 +690,4 @@
|
|||||||
<string name="sendEmailToDev">Invia email allo sviluppatore</string>
|
<string name="sendEmailToDev">Invia email allo sviluppatore</string>
|
||||||
<string name="controlCenter">Centro di controllo</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ù.</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ù.</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>
|
|
||||||
<string name="selectParameters">Selezionare i parametri</string>
|
|
||||||
<string name="musicCheckFrequencyTitle">Frequenza dei controlli [ms]</string>
|
|
||||||
<string name="musicCheckFrequencySummary">Millisecondi tra i controlli</string>
|
|
||||||
<string name="musicPlayingDetection">Rilevamento della riproduzione musicale</string>
|
|
||||||
<string name="profileXrequiresThis">Il profilo \"%1$s\" lo richiede.</string>
|
|
||||||
<string name="locationNotWorkingOn12">Ottenere la posizione non sembra funzionare su dispositivi Android 12 al momento. Se non funziona per te, mi dispiace. Cercherò di risolvere questo problema non appena conoscerò la causa. Quindi, se la ciambella non smette di girare, sai perché.</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -688,13 +688,4 @@
|
|||||||
<string name="stop">stoppen</string>
|
<string name="stop">stoppen</string>
|
||||||
<string name="pleaseSelectActionValue">Selecteer een actie!</string>
|
<string name="pleaseSelectActionValue">Selecteer een actie!</string>
|
||||||
<string name="actionMediaControlNotice">Houd er rekening mee dat deze actie mogelijk niet werkt met ALLE spelers die er zijn. En zelfs als dat zo is, werkt niet elke knop noodzakelijkerwijs.</string>
|
<string name="actionMediaControlNotice">Houd er rekening mee dat deze actie mogelijk niet werkt met ALLE spelers die er zijn. En zelfs als dat zo is, werkt niet elke knop noodzakelijkerwijs.</string>
|
||||||
<string name="musicPlaying">Er wordt muziek afgespeeld</string>
|
|
||||||
<string name="selectParameters">Selecteer parameters</string>
|
|
||||||
<string name="musicIsPlaying">er wordt muziek afgespeeld</string>
|
|
||||||
<string name="musicIsNotPlaying">muziek wordt niet afgespeeld</string>
|
|
||||||
<string name="musicCheckFrequencyTitle">Controleer frequentie [ms]</string>
|
|
||||||
<string name="musicCheckFrequencySummary">Milliseconden tussen controles</string>
|
|
||||||
<string name="musicPlayingDetection">Detectie van het afspelen van muziek</string>
|
|
||||||
<string name="locationNotWorkingOn12">Het verkrijgen van de locatie lijkt momenteel niet te werken op Android 12-apparaten. Als het niet voor je werkt, spijt het me. Ik zal proberen dit op te lossen zodra ik de oorzaak ken. Dus als de donut niet stopt met draaien, weet je waarom.</string>
|
|
||||||
<string name="profileXrequiresThis">Profiel \"%1$s\" vereist dit.</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -567,7 +567,6 @@
|
|||||||
<string name="android.permission.ACCESS_NOTIFICATION_POLICY">Override do not disturb policy</string>
|
<string name="android.permission.ACCESS_NOTIFICATION_POLICY">Override do not disturb policy</string>
|
||||||
<string name="theseAreThePermissionsRequired">These are the permissions required:</string>
|
<string name="theseAreThePermissionsRequired">These are the permissions required:</string>
|
||||||
<string name="ruleXrequiresThis">Rule \"%1$s\" requires this.</string>
|
<string name="ruleXrequiresThis">Rule \"%1$s\" requires this.</string>
|
||||||
<string name="profileXrequiresThis">Profile \"%1$s\" requires this.</string>
|
|
||||||
<string name="helpTextActivityDetection">This feature can detect if you\'re currently on the go and if it is on foot or in which type of vehicle (to a certain extent). The feature is not fully built into Automation, but is provided by Google Play Services. Technically it does not give a yes/no result, but return a percentage to which level it is sure it detected you\'re status. You can setup the percentage value from which Automation will accept a result. Two remarks: 1) More than 1 status could occur at the same time. For example you might be WALKING inside a driving bus. 2) This sensor is relatively expensive in terms of battery usage. If it is possible you might consider using alternatives, e.g. require your car\'s handsfree device to be connected to detect you\'re driving.</string>
|
<string name="helpTextActivityDetection">This feature can detect if you\'re currently on the go and if it is on foot or in which type of vehicle (to a certain extent). The feature is not fully built into Automation, but is provided by Google Play Services. Technically it does not give a yes/no result, but return a percentage to which level it is sure it detected you\'re status. You can setup the percentage value from which Automation will accept a result. Two remarks: 1) More than 1 status could occur at the same time. For example you might be WALKING inside a driving bus. 2) This sensor is relatively expensive in terms of battery usage. If it is possible you might consider using alternatives, e.g. require your car\'s handsfree device to be connected to detect you\'re driving.</string>
|
||||||
<string name="sendTextMessage">Send text message</string>
|
<string name="sendTextMessage">Send text message</string>
|
||||||
<string name="textToSend">Text to send</string>
|
<string name="textToSend">Text to send</string>
|
||||||
@ -787,12 +786,4 @@
|
|||||||
<string name="stop">stop</string>
|
<string name="stop">stop</string>
|
||||||
<string name="pleaseSelectActionValue">Please select an action!</string>
|
<string name="pleaseSelectActionValue">Please select an action!</string>
|
||||||
<string name="actionMediaControlNotice">Keep in mind that this action may not work with ALL players out there. And even if it does, not every buttons does necessarily work.</string>
|
<string name="actionMediaControlNotice">Keep in mind that this action may not work with ALL players out there. And even if it does, not every buttons does necessarily work.</string>
|
||||||
<string name="musicPlaying">Music playing</string>
|
|
||||||
<string name="selectParameters">Select parameters</string>
|
|
||||||
<string name="musicIsPlaying">music is playing</string>
|
|
||||||
<string name="musicIsNotPlaying">music is not playing</string>
|
|
||||||
<string name="musicPlayingDetection">Music playing detection</string>
|
|
||||||
<string name="musicCheckFrequencyTitle">Check frequency [ms]</string>
|
|
||||||
<string name="musicCheckFrequencySummary">Milliseconds between checks</string>
|
|
||||||
<string name="locationNotWorkingOn12">Getting the location does not seem to be working on Android 12 devices currently. If it isn\'t working for you, I\'m sorry. I\'ll try to fix this as soon as I know the cause. So if the donut doesn\'t stop spinning, you know why.</string>
|
|
||||||
</resources>
|
</resources>
|
@ -5,5 +5,3 @@
|
|||||||
* Fixed: Translation bug in dutch variables text
|
* Fixed: Translation bug in dutch variables text
|
||||||
* Fixed: Variables were not replaced when sending text messages
|
* Fixed: Variables were not replaced when sending text messages
|
||||||
* Fixed: Service wouldn't always start after device has been powered on
|
* Fixed: Service wouldn't always start after device has been powered on
|
||||||
* Fixed: Set ringtones on Android 11 and above
|
|
||||||
* Fixed: Permission read storage required for changing ringtones
|
|
Loading…
Reference in New Issue
Block a user