forked from jens/Automation
Calendar trigger
This commit is contained in:
parent
223cca442d
commit
ec62b91449
@ -139,6 +139,7 @@
|
|||||||
</intent-filter>
|
</intent-filter>
|
||||||
</receiver>
|
</receiver>
|
||||||
<receiver android:name=".receivers.PackageReplacedReceiver"
|
<receiver android:name=".receivers.PackageReplacedReceiver"
|
||||||
|
android:exported="true"
|
||||||
android:enabled="true">
|
android:enabled="true">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
|
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
|
||||||
@ -151,6 +152,7 @@
|
|||||||
|
|
||||||
<receiver
|
<receiver
|
||||||
android:name=".DeviceAdmin"
|
android:name=".DeviceAdmin"
|
||||||
|
android:exported="true"
|
||||||
android:description="@string/app_name"
|
android:description="@string/app_name"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:permission= "android.permission.BIND_DEVICE_ADMIN" >
|
android:permission= "android.permission.BIND_DEVICE_ADMIN" >
|
||||||
@ -193,6 +195,7 @@
|
|||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".ActivityMainTabLayout"
|
android:name=".ActivityMainTabLayout"
|
||||||
|
android:exported="true"
|
||||||
android:launchMode="singleTask">
|
android:launchMode="singleTask">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
@ -242,6 +245,7 @@
|
|||||||
|
|
||||||
<service
|
<service
|
||||||
android:name=".receivers.NotificationListener"
|
android:name=".receivers.NotificationListener"
|
||||||
|
android:exported="true"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE" >
|
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE" >
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
|
@ -10,9 +10,12 @@ import android.os.Looper;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
import com.google.android.gms.location.DetectedActivity;
|
import com.google.android.gms.location.DetectedActivity;
|
||||||
import com.jens.automation2.receivers.ActivityDetectionReceiver;
|
import com.jens.automation2.receivers.ActivityDetectionReceiver;
|
||||||
import com.jens.automation2.receivers.BroadcastListener;
|
import com.jens.automation2.receivers.BroadcastListener;
|
||||||
|
import com.jens.automation2.receivers.CalendarReceiver;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
@ -376,6 +379,11 @@ public class Rule implements Comparable<Rule>
|
|||||||
Miscellaneous.logEvent("i", "getsGreenLight()", "Rule " + getName() + " applies and has flipped since its last execution.", 4);
|
Miscellaneous.logEvent("i", "getsGreenLight()", "Rule " + getName() + " applies and has flipped since its last execution.", 4);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
else if(hasTriggerOfType(Trigger.Trigger_Enum.calendarEvent) && CalendarReceiver.mayRuleStillBeActivatedForPendingCalendarEvents(this))
|
||||||
|
{
|
||||||
|
Miscellaneous.logEvent("i", "getsGreenLight()", "Rule " + getName() + " applies, has not flipped since its last execution, but may still be executed for other calendar events.", 4);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
Miscellaneous.logEvent("i", "getsGreenLight()", "Rule " + getName() + " has not flipped since its last execution.", 4);
|
Miscellaneous.logEvent("i", "getsGreenLight()", "Rule " + getName() + " has not flipped since its last execution.", 4);
|
||||||
}
|
}
|
||||||
@ -384,7 +392,7 @@ public class Rule implements Comparable<Rule>
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean applies(Context context)
|
public boolean applies(Context context)
|
||||||
{
|
{
|
||||||
if(AutomationService.getInstance() == null)
|
if(AutomationService.getInstance() == null)
|
||||||
@ -780,4 +788,32 @@ public class Rule implements Comparable<Rule>
|
|||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(@Nullable Object obj)
|
||||||
|
{
|
||||||
|
return this.getName().equals(((Rule)obj).getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasTriggerOfType(Trigger.Trigger_Enum queryType)
|
||||||
|
{
|
||||||
|
for(Trigger t : getTriggerSet())
|
||||||
|
{
|
||||||
|
if(t.getTriggerType().equals(queryType))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasActionOfType(Action.Action_Enum queryType)
|
||||||
|
{
|
||||||
|
for(Action a : getActionSet())
|
||||||
|
{
|
||||||
|
if(a.getAction().equals(queryType))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
@ -136,6 +136,7 @@
|
|||||||
</intent-filter>
|
</intent-filter>
|
||||||
</receiver>
|
</receiver>
|
||||||
<receiver android:name=".receivers.PackageReplacedReceiver"
|
<receiver android:name=".receivers.PackageReplacedReceiver"
|
||||||
|
android:exported="true"
|
||||||
android:enabled="true">
|
android:enabled="true">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
|
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
|
||||||
@ -148,6 +149,7 @@
|
|||||||
|
|
||||||
<receiver
|
<receiver
|
||||||
android:name=".DeviceAdmin"
|
android:name=".DeviceAdmin"
|
||||||
|
android:exported="true"
|
||||||
android:description="@string/app_name"
|
android:description="@string/app_name"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:permission= "android.permission.BIND_DEVICE_ADMIN" >
|
android:permission= "android.permission.BIND_DEVICE_ADMIN" >
|
||||||
@ -190,6 +192,7 @@
|
|||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".ActivityMainTabLayout"
|
android:name=".ActivityMainTabLayout"
|
||||||
|
android:exported="true"
|
||||||
android:launchMode="singleTask">
|
android:launchMode="singleTask">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
@ -239,6 +242,7 @@
|
|||||||
|
|
||||||
<service
|
<service
|
||||||
android:name=".receivers.NotificationListener"
|
android:name=".receivers.NotificationListener"
|
||||||
|
android:exported="true"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE" >
|
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE" >
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
|
@ -344,7 +344,16 @@ public class Rule implements Comparable<Rule>
|
|||||||
if(oneTrigger.getTriggerType().equals(Trigger.Trigger_Enum.timeFrame))
|
if(oneTrigger.getTriggerType().equals(Trigger.Trigger_Enum.timeFrame))
|
||||||
{
|
{
|
||||||
if(oneTrigger.getTimeFrame().repetition > 0)
|
if(oneTrigger.getTimeFrame().repetition > 0)
|
||||||
return true;
|
{
|
||||||
|
if(this.getLastExecution() != null)
|
||||||
|
{
|
||||||
|
Calendar now = Calendar.getInstance();
|
||||||
|
if (this.getLastExecution().getTimeInMillis() + oneTrigger.getTimeFrame().getRepetition() * 1000 <= now.getTimeInMillis())
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if(oneTrigger.getTriggerType().equals(Trigger.Trigger_Enum.broadcastReceived))
|
else if(oneTrigger.getTriggerType().equals(Trigger.Trigger_Enum.broadcastReceived))
|
||||||
{
|
{
|
||||||
@ -372,7 +381,7 @@ public class Rule implements Comparable<Rule>
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean applies(Context context)
|
public boolean applies(Context context)
|
||||||
{
|
{
|
||||||
if(AutomationService.getInstance() == null)
|
if(AutomationService.getInstance() == null)
|
||||||
|
@ -172,7 +172,6 @@
|
|||||||
<activity android:name=".ActivityManageTriggerCheckVariable" />
|
<activity android:name=".ActivityManageTriggerCheckVariable" />
|
||||||
<activity android:name=".ActivityManageActionCopyToClipboard" />
|
<activity android:name=".ActivityManageActionCopyToClipboard" />
|
||||||
<activity android:name=".ActivityManageActionLocationService" />
|
<activity android:name=".ActivityManageActionLocationService" />
|
||||||
<activity android:name=".ActivityManageTriggerCalendar" />
|
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".ActivityMainTabLayout"
|
android:name=".ActivityMainTabLayout"
|
||||||
@ -222,6 +221,7 @@
|
|||||||
<activity android:name=".ActivityVolumeTest" />
|
<activity android:name=".ActivityVolumeTest" />
|
||||||
<activity android:name=".ActivityPermissions"></activity>
|
<activity android:name=".ActivityPermissions"></activity>
|
||||||
<activity android:name=".ActivityManageTriggerNotification" />
|
<activity android:name=".ActivityManageTriggerNotification" />
|
||||||
|
<activity android:name=".ActivityManageTriggerCalendar" />
|
||||||
|
|
||||||
<service
|
<service
|
||||||
android:name=".receivers.NotificationListener"
|
android:name=".receivers.NotificationListener"
|
||||||
|
@ -347,7 +347,16 @@ public class Rule implements Comparable<Rule>
|
|||||||
if(oneTrigger.getTriggerType().equals(Trigger.Trigger_Enum.timeFrame))
|
if(oneTrigger.getTriggerType().equals(Trigger.Trigger_Enum.timeFrame))
|
||||||
{
|
{
|
||||||
if(oneTrigger.getTimeFrame().repetition > 0)
|
if(oneTrigger.getTimeFrame().repetition > 0)
|
||||||
return true;
|
{
|
||||||
|
if(this.getLastExecution() != null)
|
||||||
|
{
|
||||||
|
Calendar now = Calendar.getInstance();
|
||||||
|
if (this.getLastExecution().getTimeInMillis() + oneTrigger.getTimeFrame().getRepetition() * 1000 <= now.getTimeInMillis())
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if(oneTrigger.getTriggerType().equals(Trigger.Trigger_Enum.broadcastReceived))
|
else if(oneTrigger.getTriggerType().equals(Trigger.Trigger_Enum.broadcastReceived))
|
||||||
{
|
{
|
||||||
|
@ -345,16 +345,33 @@ public class Action
|
|||||||
|
|
||||||
if (this.getAction().equals(Action_Enum.triggerUrl))
|
if (this.getAction().equals(Action_Enum.triggerUrl))
|
||||||
{
|
{
|
||||||
String[] components = parameter2.split(";");
|
String[] components;
|
||||||
|
if(parameter2.contains(Action.actionParameter2Split))
|
||||||
|
components = parameter2.split(Action.actionParameter2Split);
|
||||||
|
else
|
||||||
|
components = parameter2.split(";");
|
||||||
|
|
||||||
if (components.length >= 3)
|
if (components.length >= 3)
|
||||||
{
|
{
|
||||||
|
returnString.append(" (");
|
||||||
|
if(components.length >= 4)
|
||||||
|
returnString.append(components[3]);
|
||||||
|
else
|
||||||
|
returnString.append(ActivityManageActionTriggerUrl.methodGet);
|
||||||
|
returnString.append(")");
|
||||||
|
|
||||||
returnString.append(": " + components[2]);
|
returnString.append(": " + components[2]);
|
||||||
|
|
||||||
if (parameter1)
|
if (parameter1)
|
||||||
returnString.append(" " + Miscellaneous.getAnyContext().getResources().getString(R.string.usingAuthentication) + ".");
|
returnString.append(" " + Miscellaneous.getAnyContext().getResources().getString(R.string.usingAuthentication) + ".");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
returnString.append(" (");
|
||||||
|
returnString.append(ActivityManageActionTriggerUrl.methodGet);;
|
||||||
|
returnString.append(")");
|
||||||
returnString.append(": " + components[0]);
|
returnString.append(": " + components[0]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (this.getAction().equals(Action_Enum.startOtherActivity))
|
else if (this.getAction().equals(Action_Enum.startOtherActivity))
|
||||||
{
|
{
|
||||||
@ -786,7 +803,7 @@ public class Action
|
|||||||
if(!Settings.httpAcceptAllCertificates || !urlString.toLowerCase(Locale.getDefault()).contains("https"))
|
if(!Settings.httpAcceptAllCertificates || !urlString.toLowerCase(Locale.getDefault()).contains("https"))
|
||||||
response = Miscellaneous.downloadURL(urlString, urlUsername, urlPassword, method, httpParams);
|
response = Miscellaneous.downloadURL(urlString, urlUsername, urlPassword, method, httpParams);
|
||||||
else
|
else
|
||||||
response = Miscellaneous.downloadURLwithoutCertificateChecking(urlString, urlUsername, urlPassword, method, httpParams);
|
response = Miscellaneous.downloadUrlWithoutCertificateChecking(urlString, urlUsername, urlPassword, method, httpParams);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package com.jens.automation2;
|
package com.jens.automation2;
|
||||||
|
|
||||||
import static com.jens.automation2.ActivityManageActionTriggerUrl.edit;
|
//import static com.jens.automation2.ActivityManageActionTriggerUrl.edit;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
@ -3,6 +3,7 @@ package com.jens.automation2;
|
|||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
|
import android.content.Intent;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
@ -45,8 +46,8 @@ public class ActivityManageActionTriggerUrl extends Activity
|
|||||||
public static final String methodGet = "GET";
|
public static final String methodGet = "GET";
|
||||||
public static final String methodPost = "POST";
|
public static final String methodPost = "POST";
|
||||||
|
|
||||||
public static boolean edit = false;
|
// public static boolean edit = false;
|
||||||
public static Action resultingAction = null;
|
// public static Action resultingAction = null;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState)
|
protected void onCreate(Bundle savedInstanceState)
|
||||||
@ -95,11 +96,9 @@ public class ActivityManageActionTriggerUrl extends Activity
|
|||||||
{
|
{
|
||||||
if(etTriggerUrl.getText().toString().length() > 0)
|
if(etTriggerUrl.getText().toString().length() > 0)
|
||||||
{
|
{
|
||||||
if(resultingAction == null)
|
Intent returnIntent = new Intent();
|
||||||
resultingAction = new Action();
|
|
||||||
|
|
||||||
resultingAction.setAction(Action_Enum.triggerUrl);
|
returnIntent.putExtra(ActivityManageRule.intentNameActionParameter1, chkTriggerUrlUseAuthentication.isChecked());
|
||||||
resultingAction.setParameter1(chkTriggerUrlUseAuthentication.isChecked());
|
|
||||||
|
|
||||||
String username = etTriggerUrlUsername.getText().toString();
|
String username = etTriggerUrlUsername.getText().toString();
|
||||||
String password = etTriggerUrlPassword.getText().toString();
|
String password = etTriggerUrlPassword.getText().toString();
|
||||||
@ -120,15 +119,16 @@ public class ActivityManageActionTriggerUrl extends Activity
|
|||||||
if(httpParams.length() > 0)
|
if(httpParams.length() > 0)
|
||||||
httpParams = httpParams.substring(Action.actionParameters2SeparatorOuter.length());
|
httpParams = httpParams.substring(Action.actionParameters2SeparatorOuter.length());
|
||||||
|
|
||||||
ActivityManageActionTriggerUrl.resultingAction.setParameter2(
|
returnIntent.putExtra(ActivityManageRule.intentNameActionParameter2,
|
||||||
username + Action.actionParameter2Split +
|
username + Action.actionParameter2Split +
|
||||||
password + Action.actionParameter2Split +
|
password + Action.actionParameter2Split +
|
||||||
etTriggerUrl.getText().toString().trim() + Action.actionParameter2Split +
|
etTriggerUrl.getText().toString().trim() + Action.actionParameter2Split +
|
||||||
method + Action.actionParameter2Split +
|
method + Action.actionParameter2Split +
|
||||||
httpParams
|
httpParams
|
||||||
);
|
);
|
||||||
//TODO: Check if http params listview is scrollable
|
|
||||||
backToRuleManager();
|
setResult(RESULT_OK, returnIntent);
|
||||||
|
finish();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Toast.makeText(getBaseContext(), getResources().getString(R.string.urlTooShort), Toast.LENGTH_LONG).show();
|
Toast.makeText(getBaseContext(), getResources().getString(R.string.urlTooShort), Toast.LENGTH_LONG).show();
|
||||||
@ -169,22 +169,21 @@ public class ActivityManageActionTriggerUrl extends Activity
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
updateListView();
|
updateListView();
|
||||||
|
|
||||||
ActivityManageActionTriggerUrl.edit = getIntent().getBooleanExtra("edit", false);
|
if(getIntent().hasExtra(ActivityManageRule.intentNameActionParameter2))
|
||||||
if(edit)
|
|
||||||
{
|
{
|
||||||
// username,password,URL,etc.
|
// username,password,URL,etc.
|
||||||
String[] components;
|
String[] components;
|
||||||
|
|
||||||
if(ActivityManageActionTriggerUrl.resultingAction.getParameter2().contains(Action.actionParameter2Split))
|
if(getIntent().getStringExtra(ActivityManageRule.intentNameActionParameter2).contains(Action.actionParameter2Split))
|
||||||
components = ActivityManageActionTriggerUrl.resultingAction.getParameter2().split(Action.actionParameter2Split, -1);
|
components = getIntent().getStringExtra(ActivityManageRule.intentNameActionParameter2).split(Action.actionParameter2Split, -1);
|
||||||
else
|
else
|
||||||
components = ActivityManageActionTriggerUrl.resultingAction.getParameter2().split(";", -1);
|
components = getIntent().getStringExtra(ActivityManageRule.intentNameActionParameter2).split(";", -1);
|
||||||
|
|
||||||
if(components.length >= 3)
|
if(components.length >= 3)
|
||||||
{
|
{
|
||||||
etTriggerUrl.setText(components[2]);
|
etTriggerUrl.setText(components[2]);
|
||||||
chkTriggerUrlUseAuthentication.setChecked(ActivityManageActionTriggerUrl.resultingAction.getParameter1());
|
chkTriggerUrlUseAuthentication.setChecked(getIntent().getBooleanExtra(ActivityManageRule.intentNameActionParameter1, false));
|
||||||
etTriggerUrlUsername.setText(components[0]);
|
etTriggerUrlUsername.setText(components[0]);
|
||||||
etTriggerUrlPassword.setText(components[1]);
|
etTriggerUrlPassword.setText(components[1]);
|
||||||
|
|
||||||
@ -250,47 +249,7 @@ public class ActivityManageActionTriggerUrl extends Activity
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void backToRuleManager()
|
|
||||||
{
|
|
||||||
if(edit && resultingAction != null)
|
|
||||||
{
|
|
||||||
String username = etTriggerUrlUsername.getText().toString();
|
|
||||||
String password = etTriggerUrlPassword.getText().toString();
|
|
||||||
|
|
||||||
if(username == null)
|
|
||||||
username = "";
|
|
||||||
|
|
||||||
if(password == null)
|
|
||||||
password = "";
|
|
||||||
|
|
||||||
String method = methodGet;
|
|
||||||
if(rbTriggerUrlMethodPost.isChecked())
|
|
||||||
method = methodPost;
|
|
||||||
|
|
||||||
ActivityManageActionTriggerUrl.resultingAction.setParameter1(chkTriggerUrlUseAuthentication.isChecked());
|
|
||||||
|
|
||||||
String httpParams = "";
|
|
||||||
for (String s : httpParamsList)
|
|
||||||
httpParams += Action.actionParameters2SeparatorOuter + s;
|
|
||||||
if(httpParams.length() > 0)
|
|
||||||
httpParams = httpParams.substring(Action.actionParameters2SeparatorOuter.length());
|
|
||||||
|
|
||||||
ActivityManageActionTriggerUrl.resultingAction.setParameter2(
|
|
||||||
username + Action.actionParameter2Split +
|
|
||||||
password + Action.actionParameter2Split +
|
|
||||||
etTriggerUrl.getText().toString().trim() + Action.actionParameter2Split +
|
|
||||||
method + Action.actionParameter2Split +
|
|
||||||
httpParams
|
|
||||||
);
|
|
||||||
//TODO:Duplicate code in save routine in onCreate()
|
|
||||||
}
|
|
||||||
|
|
||||||
setResult(RESULT_OK);
|
|
||||||
|
|
||||||
this.finish();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateListView()
|
private void updateListView()
|
||||||
{
|
{
|
||||||
Miscellaneous.logEvent("i", "ListView", "Attempting to update lvTriggerUrlPostParameters", 4);
|
Miscellaneous.logEvent("i", "ListView", "Attempting to update lvTriggerUrlPostParameters", 4);
|
||||||
|
@ -396,9 +396,11 @@ public class ActivityManageRule extends Activity
|
|||||||
break;
|
break;
|
||||||
case triggerUrl:
|
case triggerUrl:
|
||||||
Intent activityEditTriggerUrlIntent = new Intent(ActivityManageRule.this, ActivityManageActionTriggerUrl.class);
|
Intent activityEditTriggerUrlIntent = new Intent(ActivityManageRule.this, ActivityManageActionTriggerUrl.class);
|
||||||
ActivityManageActionTriggerUrl.resultingAction = a;
|
// ActivityManageActionTriggerUrl.resultingAction = a;
|
||||||
ActivityManageActionTriggerUrl.resultingAction.setParentRule(ruleToEdit);
|
// ActivityManageActionTriggerUrl.resultingAction.setParentRule(ruleToEdit);
|
||||||
activityEditTriggerUrlIntent.putExtra("edit", true);
|
// activityEditTriggerUrlIntent.putExtra("edit", true);
|
||||||
|
activityEditTriggerUrlIntent.putExtra(intentNameActionParameter1, a.getParameter1());
|
||||||
|
activityEditTriggerUrlIntent.putExtra(intentNameActionParameter2, a.getParameter2());
|
||||||
startActivityForResult(activityEditTriggerUrlIntent, requestCodeActionTriggerUrlEdit);
|
startActivityForResult(activityEditTriggerUrlIntent, requestCodeActionTriggerUrlEdit);
|
||||||
break;
|
break;
|
||||||
case speakText:
|
case speakText:
|
||||||
@ -1380,12 +1382,13 @@ public class ActivityManageRule extends Activity
|
|||||||
|
|
||||||
if(requestCode == requestCodeActionTriggerUrlAdd)
|
if(requestCode == requestCodeActionTriggerUrlAdd)
|
||||||
{
|
{
|
||||||
//TODO: Transform into newer and cleaner handover method through intent data
|
|
||||||
if(resultCode == RESULT_OK)
|
if(resultCode == RESULT_OK)
|
||||||
{
|
{
|
||||||
//add TriggerUrl
|
newAction.setParentRule(ruleToEdit);
|
||||||
ActivityManageActionTriggerUrl.resultingAction.setParentRule(ruleToEdit);
|
newAction.setAction(Action_Enum.triggerUrl);
|
||||||
ruleToEdit.getActionSet().add(ActivityManageActionTriggerUrl.resultingAction);
|
newAction.setParameter1(data.getBooleanExtra(intentNameActionParameter1, true));
|
||||||
|
newAction.setParameter2(data.getStringExtra(intentNameActionParameter2));
|
||||||
|
ruleToEdit.getActionSet().add(newAction);
|
||||||
this.refreshActionList();
|
this.refreshActionList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1393,7 +1396,14 @@ public class ActivityManageRule extends Activity
|
|||||||
{
|
{
|
||||||
if(resultCode == RESULT_OK)
|
if(resultCode == RESULT_OK)
|
||||||
{
|
{
|
||||||
//edit TriggerUrl
|
ruleToEdit.getActionSet().get(editIndex).setParentRule(ruleToEdit);
|
||||||
|
|
||||||
|
if(data.hasExtra(intentNameActionParameter1))
|
||||||
|
ruleToEdit.getActionSet().get(editIndex).setParameter1(data.getBooleanExtra(intentNameActionParameter1, true));
|
||||||
|
|
||||||
|
if(data.hasExtra(intentNameActionParameter2))
|
||||||
|
ruleToEdit.getActionSet().get(editIndex).setParameter2(data.getStringExtra(intentNameActionParameter2));
|
||||||
|
|
||||||
this.refreshActionList();
|
this.refreshActionList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2246,7 +2256,7 @@ public class ActivityManageRule extends Activity
|
|||||||
{
|
{
|
||||||
//launch other activity to enter a url and parameters;
|
//launch other activity to enter a url and parameters;
|
||||||
newAction.setAction(Action_Enum.triggerUrl);
|
newAction.setAction(Action_Enum.triggerUrl);
|
||||||
ActivityManageActionTriggerUrl.resultingAction = null;
|
// ActivityManageActionTriggerUrl.resultingAction = null;
|
||||||
Intent editTriggerIntent = new Intent(context, ActivityManageActionTriggerUrl.class);
|
Intent editTriggerIntent = new Intent(context, ActivityManageActionTriggerUrl.class);
|
||||||
startActivityForResult(editTriggerIntent, requestCodeActionTriggerUrlAdd);
|
startActivityForResult(editTriggerIntent, requestCodeActionTriggerUrlAdd);
|
||||||
}
|
}
|
||||||
|
@ -53,6 +53,8 @@ public class ActivityManageTriggerCalendar extends Activity
|
|||||||
Miscellaneous.setDisplayLanguage(this);
|
Miscellaneous.setDisplayLanguage(this);
|
||||||
setContentView(R.layout.activity_manage_trigger_calendar);
|
setContentView(R.layout.activity_manage_trigger_calendar);
|
||||||
|
|
||||||
|
//TODO: Hint text about multiple rule execution
|
||||||
|
|
||||||
chkCalendarEventActive = (CheckBox) findViewById(R.id.chkCalendarEventActive);
|
chkCalendarEventActive = (CheckBox) findViewById(R.id.chkCalendarEventActive);
|
||||||
spinnerCalendarTitleDirection = (Spinner)findViewById(R.id.spinnerCalendarTitleDirection);
|
spinnerCalendarTitleDirection = (Spinner)findViewById(R.id.spinnerCalendarTitleDirection);
|
||||||
spinnerCalendarLocationDirection = (Spinner)findViewById(R.id.spinnerCalendarLocationDirection);
|
spinnerCalendarLocationDirection = (Spinner)findViewById(R.id.spinnerCalendarLocationDirection);
|
||||||
|
@ -223,7 +223,7 @@ public class Miscellaneous extends Service
|
|||||||
return result.toString();
|
return result.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String downloadURLwithoutCertificateChecking(String url, String username, String password, String method, Map<String, String> httpParams)
|
public static String downloadUrlWithoutCertificateChecking(String url, String username, String password, String method, Map<String, String> httpParams)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -298,25 +298,9 @@ public class Miscellaneous extends Service
|
|||||||
@Override
|
@Override
|
||||||
public IBinder onBind(Intent arg0)
|
public IBinder onBind(Intent arg0)
|
||||||
{
|
{
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// public static void logEvent(String type, String header, String description)
|
|
||||||
// {
|
|
||||||
// if(type.equals("e"))
|
|
||||||
// Log.e(header, description);
|
|
||||||
//
|
|
||||||
// if(type.equals("w"))
|
|
||||||
// Log.w(header, description);
|
|
||||||
//
|
|
||||||
// if(type.equals("i"))
|
|
||||||
// Log.i(header, description);
|
|
||||||
//
|
|
||||||
// if(Settings.writeLogFile)
|
|
||||||
// writeToLogFile(type, header, description);
|
|
||||||
// }
|
|
||||||
|
|
||||||
public static void logEvent(String type, String header, String description, int logLevel)
|
public static void logEvent(String type, String header, String description, int logLevel)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -353,7 +337,6 @@ public class Miscellaneous extends Service
|
|||||||
{
|
{
|
||||||
logCleanerRunning = true;
|
logCleanerRunning = true;
|
||||||
|
|
||||||
|
|
||||||
long maxSizeInBytes = (long)Settings.logFileMaxSize * 1024 * 1024;
|
long maxSizeInBytes = (long)Settings.logFileMaxSize * 1024 * 1024;
|
||||||
|
|
||||||
if(logFile.exists() && logFile.length() > (maxSizeInBytes))
|
if(logFile.exists() && logFile.length() > (maxSizeInBytes))
|
||||||
@ -1006,51 +989,45 @@ public class Miscellaneous extends Service
|
|||||||
private static void disableSSLCertificateChecking()
|
private static void disableSSLCertificateChecking()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
SSLSocketFactory ssf = null;
|
SSLSocketFactory ssf = null;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
SSLContext ctx = SSLContext.getInstance("TLS");
|
SSLContext ctx = SSLContext.getInstance("TLS");
|
||||||
|
|
||||||
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
|
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
|
||||||
trustStore.load(null, null);
|
trustStore.load(null, null);
|
||||||
ssf = new MySSLSocketFactoryInsecure(trustStore);
|
ssf = new MySSLSocketFactoryInsecure(trustStore);
|
||||||
ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
||||||
ctx.init(null, null, null);
|
ctx.init(null, null, null);
|
||||||
|
|
||||||
// return new DefaultHttpClient(ccm, client.getParams());
|
// return new DefaultHttpClient(ccm, client.getParams());
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
// return null;
|
// return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Install the all-trusting trust manager
|
// Install the all-trusting trust manager
|
||||||
SSLContext sc = SSLContext.getInstance("TLS");
|
SSLContext sc = SSLContext.getInstance("TLS");
|
||||||
sc.init(null, getInsecureTrustManager(), new java.security.SecureRandom());
|
sc.init(null, getInsecureTrustManager(), new java.security.SecureRandom());
|
||||||
// HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
|
// HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
|
||||||
// HttpsURLConnection.setDefaultSSLSocketFactory(ssf);
|
// HttpsURLConnection.setDefaultSSLSocketFactory(ssf);
|
||||||
|
|
||||||
// Install the all-trusting host verifier
|
// Install the all-trusting host verifier
|
||||||
HttpsURLConnection.setDefaultHostnameVerifier(getInsecureHostnameVerifier());
|
HttpsURLConnection.setDefaultHostnameVerifier(getInsecureHostnameVerifier());
|
||||||
HttpsURLConnection.setDefaultHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
HttpsURLConnection.setDefaultHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
||||||
}
|
}
|
||||||
catch (KeyManagementException e)
|
catch (KeyManagementException e)
|
||||||
{
|
{
|
||||||
// TODO Auto-generated catch block
|
Miscellaneous.logEvent("e", "SSL", Log.getStackTraceString(e), 4);
|
||||||
e.printStackTrace();
|
}
|
||||||
}
|
catch (NoSuchAlgorithmException e)
|
||||||
catch (NoSuchAlgorithmException e)
|
{
|
||||||
{
|
Miscellaneous.logEvent("e", "SSL", Log.getStackTraceString(e), 4);
|
||||||
// TODO Auto-generated catch block
|
}
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static TrustManager[] getInsecureTrustManager()
|
public static TrustManager[] getInsecureTrustManager()
|
||||||
|
@ -684,7 +684,6 @@ public class Trigger
|
|||||||
9 = calendarList
|
9 = calendarList
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
boolean isActive = getTriggerParameter();
|
boolean isActive = getTriggerParameter();
|
||||||
if (!ignoreActive && isActive != event.isCurrentlyActive())
|
if (!ignoreActive && isActive != event.isCurrentlyActive())
|
||||||
{
|
{
|
||||||
@ -756,6 +755,12 @@ public class Trigger
|
|||||||
|
|
||||||
// No contradictions found
|
// No contradictions found
|
||||||
Miscellaneous.logEvent("i", "CalendarCheck", "Event " + event + " matches.", 4);
|
Miscellaneous.logEvent("i", "CalendarCheck", "Event " + event + " matches.", 4);
|
||||||
|
|
||||||
|
/*
|
||||||
|
At this point the rule will either get executed for this event or it already has been executed for it.
|
||||||
|
*/
|
||||||
|
CalendarReceiver.addUsedPair(new CalendarReceiver.RuleEventPair(getParentRule(), event));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -272,29 +272,23 @@ public class CellLocationChangedReceiver extends PhoneStateListener
|
|||||||
locationListenerArmed = false;
|
locationListenerArmed = false;
|
||||||
Miscellaneous.logEvent("i", "LocationListener", "Disarmed location listener, accuracy reached", 4);
|
Miscellaneous.logEvent("i", "LocationListener", "Disarmed location listener, accuracy reached", 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Miscellaneous.logEvent("i", "LocationListener", "Giving update to POI class");
|
|
||||||
// PointOfInterest.positionUpdate(up2DateLocation, parentLocationProvider.parentService);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onProviderDisabled(String provider)
|
public void onProviderDisabled(String provider)
|
||||||
{
|
{
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onProviderEnabled(String provider)
|
public void onProviderEnabled(String provider)
|
||||||
{
|
{
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStatusChanged(String provider, int status, Bundle extras)
|
public void onStatusChanged(String provider, int status, Bundle extras)
|
||||||
{
|
{
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,8 +9,10 @@ import android.content.IntentFilter;
|
|||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
import com.jens.automation2.AutomationService;
|
import com.jens.automation2.AutomationService;
|
||||||
import com.jens.automation2.Miscellaneous;
|
import com.jens.automation2.Miscellaneous;
|
||||||
@ -29,7 +31,6 @@ public class CalendarReceiver extends BroadcastReceiver implements AutomationLis
|
|||||||
static CalendarReceiver calendarReceiverInstance = null;
|
static CalendarReceiver calendarReceiverInstance = null;
|
||||||
static boolean calendarReceiverActive = false;
|
static boolean calendarReceiverActive = false;
|
||||||
static IntentFilter calendarIntentFilter = null;
|
static IntentFilter calendarIntentFilter = null;
|
||||||
private static AutomationService automationServiceRef;
|
|
||||||
private static Intent calendarIntent = null;
|
private static Intent calendarIntent = null;
|
||||||
|
|
||||||
public static final int AVAILABILITY_OUT_OF_OFFICE = 4;
|
public static final int AVAILABILITY_OUT_OF_OFFICE = 4;
|
||||||
@ -45,6 +46,30 @@ public class CalendarReceiver extends BroadcastReceiver implements AutomationLis
|
|||||||
static AlarmManager alarmManager = null;
|
static AlarmManager alarmManager = null;
|
||||||
static boolean wakeupNeedsToBeScheduled = false;
|
static boolean wakeupNeedsToBeScheduled = false;
|
||||||
|
|
||||||
|
public static class RuleEventPair
|
||||||
|
{
|
||||||
|
Rule rule;
|
||||||
|
CalendarEvent event;
|
||||||
|
|
||||||
|
public RuleEventPair(Rule rule, CalendarEvent event)
|
||||||
|
{
|
||||||
|
this.rule = rule;
|
||||||
|
this.event = event;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
static List<RuleEventPair> calendarEventsUsed = new ArrayList<>(); // To determine for which events which rules have been executed
|
||||||
|
public static void addUsedPair(RuleEventPair pair)
|
||||||
|
{
|
||||||
|
// Add pair only if it's not in the list already.
|
||||||
|
for(RuleEventPair usedPair : calendarEventsUsed)
|
||||||
|
{
|
||||||
|
if(usedPair.rule.equals(pair.rule) && usedPair.event.equals(pair.event))
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
calendarEventsUsed.add(pair);
|
||||||
|
}
|
||||||
|
|
||||||
public static CalendarReceiver getInstance()
|
public static CalendarReceiver getInstance()
|
||||||
{
|
{
|
||||||
if(calendarReceiverInstance == null)
|
if(calendarReceiverInstance == null)
|
||||||
@ -73,9 +98,15 @@ public class CalendarReceiver extends BroadcastReceiver implements AutomationLis
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void checkForRules(Context context)
|
static void checkForRules(Context context)
|
||||||
{
|
{
|
||||||
//TODO: Overwrite notification
|
/*
|
||||||
|
Kann die selbe Regel mehrfach pro Termin ausgeführt werden? Nein, eh nicht, ne?
|
||||||
|
Am nächsten Tag ist es wieder ein anderer Termin.
|
||||||
|
|
||||||
|
Wenn zwei zeitgleiche Termine mit gleichen Inhalten in verschiedenen Kalendern sind,
|
||||||
|
würde die Regel so 2x ausgeführt werden.
|
||||||
|
*/
|
||||||
//TODO: Second appointment directly one after another or overlapping won't get executed
|
//TODO: Second appointment directly one after another or overlapping won't get executed
|
||||||
ArrayList<Rule> ruleCandidates = Rule.findRuleCandidates(Trigger.Trigger_Enum.calendarEvent);
|
ArrayList<Rule> ruleCandidates = Rule.findRuleCandidates(Trigger.Trigger_Enum.calendarEvent);
|
||||||
for (int i = 0; i < ruleCandidates.size(); i++)
|
for (int i = 0; i < ruleCandidates.size(); i++)
|
||||||
@ -86,24 +117,9 @@ public class CalendarReceiver extends BroadcastReceiver implements AutomationLis
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void startListener(AutomationService automationService)
|
public void startListener(AutomationService automationServiceRef)
|
||||||
{
|
{
|
||||||
if(!calendarReceiverActive)
|
startCalendarReceiver(automationServiceRef);
|
||||||
{
|
|
||||||
if(calendarReceiverInstance == null)
|
|
||||||
calendarReceiverInstance = new CalendarReceiver();
|
|
||||||
|
|
||||||
if(calendarIntentFilter == null)
|
|
||||||
{
|
|
||||||
calendarIntentFilter = new IntentFilter();
|
|
||||||
calendarIntentFilter.addAction(Intent.ACTION_PROVIDER_CHANGED);
|
|
||||||
// calendarIntentFilter.addDataScheme("content");
|
|
||||||
}
|
|
||||||
|
|
||||||
AutomationService.getInstance().registerReceiver(calendarReceiverInstance, calendarIntentFilter);
|
|
||||||
|
|
||||||
calendarReceiverActive = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -171,6 +187,37 @@ public class CalendarReceiver extends BroadcastReceiver implements AutomationLis
|
|||||||
{
|
{
|
||||||
return title;
|
return title;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(@Nullable Object obj)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
CalendarEvent compareEvent = (CalendarEvent) obj;
|
||||||
|
return calendarId == compareEvent.calendarId
|
||||||
|
&&
|
||||||
|
eventId.equals(compareEvent.eventId)
|
||||||
|
&&
|
||||||
|
title.equals(compareEvent.title)
|
||||||
|
&&
|
||||||
|
description.equals(compareEvent.description)
|
||||||
|
&&
|
||||||
|
location.equals(compareEvent.location)
|
||||||
|
&&
|
||||||
|
availability.equals(compareEvent.availability)
|
||||||
|
&&
|
||||||
|
start.getTimeInMillis() == compareEvent.start.getTimeInMillis()
|
||||||
|
&&
|
||||||
|
end.getTimeInMillis() == compareEvent.end.getTimeInMillis()
|
||||||
|
&&
|
||||||
|
allDay == compareEvent.allDay;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Miscellaneous.logEvent("e", "CalendarReceiver compare()", Log.getStackTraceString(e), 5);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<AndroidCalendar> readCalendars(Context context)
|
public static List<AndroidCalendar> readCalendars(Context context)
|
||||||
@ -394,22 +441,22 @@ public class CalendarReceiver extends BroadcastReceiver implements AutomationLis
|
|||||||
Collections.sort(wakeUpCandidatesList);
|
Collections.sort(wakeUpCandidatesList);
|
||||||
|
|
||||||
if(wakeUpCandidatesList.size() == 0)
|
if(wakeUpCandidatesList.size() == 0)
|
||||||
Miscellaneous.logEvent("i", "calculateNextWakeupForCalendar()", "Not scheduling any calendar related wakeup as there are no future events that might match a configured trigger.", 5);
|
Miscellaneous.logEvent("i", "calculateNextWakeupForCalendar()", "Not scheduling any calendar related wakeup as there are no future events that might match a configured trigger.", 4);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (nextWakeup == null || nextWakeup.getTimeInMillis() != wakeUpCandidatesList.get(0))
|
if (nextWakeup == null || nextWakeup.getTimeInMillis() != wakeUpCandidatesList.get(0))
|
||||||
{
|
{
|
||||||
Calendar newAlarm = Miscellaneous.calendarFromLong(wakeUpCandidatesList.get(0));
|
Calendar newAlarm = Miscellaneous.calendarFromLong(wakeUpCandidatesList.get(0));
|
||||||
if (nextWakeup == null)
|
if (nextWakeup == null)
|
||||||
Miscellaneous.logEvent("i", "calculateNextWakeupForCalendar()", "Chose " + Miscellaneous.formatDate(newAlarm.getTime()) + " as next wakeup for calendar triggers. Old was null.", 5);
|
Miscellaneous.logEvent("i", "calculateNextWakeupForCalendar()", "Chose " + Miscellaneous.formatDate(newAlarm.getTime()) + " as next wakeup for calendar triggers. Old was null.", 4);
|
||||||
else
|
else
|
||||||
Miscellaneous.logEvent("i", "calculateNextWakeupForCalendar()", "Chose " + Miscellaneous.formatDate(newAlarm.getTime()) + " as next wakeup for calendar triggers. Old was " + Miscellaneous.formatDate(nextWakeup.getTime()), 5);
|
Miscellaneous.logEvent("i", "calculateNextWakeupForCalendar()", "Chose " + Miscellaneous.formatDate(newAlarm.getTime()) + " as next wakeup for calendar triggers. Old was " + Miscellaneous.formatDate(nextWakeup.getTime()), 4);
|
||||||
nextWakeup = newAlarm;
|
nextWakeup = newAlarm;
|
||||||
if (!wakeupNeedsToBeScheduled)
|
if (!wakeupNeedsToBeScheduled)
|
||||||
wakeupNeedsToBeScheduled = true;
|
wakeupNeedsToBeScheduled = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Miscellaneous.logEvent("i", "calculateNextWakeupForCalendar()", "Alarm " + Miscellaneous.formatDate(nextWakeup.getTime()) + " has been selected as next wakeup, but not rescheduling since this was not a change.", 5);
|
Miscellaneous.logEvent("i", "calculateNextWakeupForCalendar()", "Alarm " + Miscellaneous.formatDate(nextWakeup.getTime()) + " has been selected as next wakeup, but not rescheduling since this was not a change.", 4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -418,8 +465,6 @@ public class CalendarReceiver extends BroadcastReceiver implements AutomationLis
|
|||||||
{
|
{
|
||||||
if (!calendarReceiverActive)
|
if (!calendarReceiverActive)
|
||||||
{
|
{
|
||||||
CalendarReceiver.automationServiceRef = automationServiceRef;
|
|
||||||
|
|
||||||
if (calendarReceiverInstance == null)
|
if (calendarReceiverInstance == null)
|
||||||
calendarReceiverInstance = new CalendarReceiver();
|
calendarReceiverInstance = new CalendarReceiver();
|
||||||
|
|
||||||
@ -438,4 +483,31 @@ public class CalendarReceiver extends BroadcastReceiver implements AutomationLis
|
|||||||
armOrRearmTimer();
|
armOrRearmTimer();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean mayRuleStillBeActivatedForPendingCalendarEvents(Rule rule)
|
||||||
|
{
|
||||||
|
for(CalendarEvent event : readCalendarEvents(Miscellaneous.getAnyContext(), false))
|
||||||
|
{
|
||||||
|
for(Trigger t : rule.getTriggerSet())
|
||||||
|
{
|
||||||
|
if(t.getTriggerType().equals(Trigger.Trigger_Enum.calendarEvent) && t.checkCalendarEvent(event, false))
|
||||||
|
{
|
||||||
|
if (!hasEventBeenUsedInRule(rule, event))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static boolean hasEventBeenUsedInRule(Rule rule, CalendarEvent event)
|
||||||
|
{
|
||||||
|
for (RuleEventPair executedPair : calendarEventsUsed)
|
||||||
|
{
|
||||||
|
if (executedPair.rule.equals(rule) && executedPair.event.equals(event))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
@ -26,8 +26,6 @@ import java.util.Calendar;
|
|||||||
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)
|
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)
|
||||||
public class NotificationListener extends NotificationListenerService// implements AutomationListenerInterface
|
public class NotificationListener extends NotificationListenerService// implements AutomationListenerInterface
|
||||||
{
|
{
|
||||||
static Calendar lastResponseToNotification = null;
|
|
||||||
static boolean listenerRunning = false;
|
|
||||||
static NotificationListener instance;
|
static NotificationListener instance;
|
||||||
static SimpleNotification lastNotification = null;
|
static SimpleNotification lastNotification = null;
|
||||||
|
|
||||||
@ -43,8 +41,6 @@ public class NotificationListener extends NotificationListenerService// implemen
|
|||||||
// a bitmap to be used instead of the small icon when showing the notification payload
|
// a bitmap to be used instead of the small icon when showing the notification payload
|
||||||
public static final String EXTRA_LARGE_ICON = "android.largeIcon";
|
public static final String EXTRA_LARGE_ICON = "android.largeIcon";
|
||||||
|
|
||||||
protected static IntentFilter notificationReceiverIntentFilter = null;
|
|
||||||
|
|
||||||
public static SimpleNotification getLastNotification()
|
public static SimpleNotification getLastNotification()
|
||||||
{
|
{
|
||||||
return lastNotification;
|
return lastNotification;
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
* Fixed: Broadcast receiver trigger would not trigger anything, but crash
|
* Fixed: Broadcast receiver trigger would not trigger anything, but crash
|
||||||
* Fixed: Bug in Android 14 (not in Automation!!!) required a change when dialing MMI codes containing a # character.
|
* Fixed: Bug in Android 14 (not in Automation!!!) required a change when dialing MMI codes containing a # character.
|
||||||
* Fixed: Storage permission might be displayed as not granted even if it was
|
* Fixed: Storage permission might be displayed as not granted even if it was
|
||||||
|
* Fixed: Applied a very old bugfix also to F-Droid and Google-Play editions that had by mistake been implemented only in the APK edition (timeFrame trigger with repetitions)
|
||||||
* Added: new action -> take screenshot
|
* Added: new action -> take screenshot
|
||||||
* Added: Location service (GPS) can be toggled between states if WRITE_SECURE_SETTINGS has been granted from a computer
|
* Added: Location service (GPS) can be toggled between states if WRITE_SECURE_SETTINGS has been granted from a computer
|
||||||
* Added: triggerUrl action can now be used with POST and parameters
|
* Added: triggerUrl action can now be used with POST and parameters
|
||||||
|
Loading…
Reference in New Issue
Block a user