new triggers: service or device starts

This commit is contained in:
jens 2022-02-06 20:12:11 +01:00
parent 275091f9d7
commit 0e51c577d5
7 changed files with 200 additions and 121 deletions

View File

@ -21,108 +21,109 @@ public class Action
public static final String intentPairSeparator = "intPairSplit"; public static final String intentPairSeparator = "intPairSplit";
public static final String vibrateSeparator = ","; public static final String vibrateSeparator = ",";
public enum Action_Enum { public enum Action_Enum
setWifi, {
setBluetooth, setWifi,
setUsbTethering, setBluetooth,
setWifiTethering, setUsbTethering,
setBluetoothTethering, setWifiTethering,
setDisplayRotation, setBluetoothTethering,
turnWifiOn,turnWifiOff, setDisplayRotation,
turnBluetoothOn,turnBluetoothOff, turnWifiOn,turnWifiOff,
triggerUrl, turnBluetoothOn,turnBluetoothOff,
changeSoundProfile, triggerUrl,
turnUsbTetheringOn,turnUsbTetheringOff, changeSoundProfile,
turnWifiTetheringOn,turnWifiTetheringOff, turnUsbTetheringOn,turnUsbTetheringOff,
enableScreenRotation,disableScreenRotation, turnWifiTetheringOn,turnWifiTetheringOff,
startOtherActivity, enableScreenRotation,disableScreenRotation,
waitBeforeNextAction, startOtherActivity,
turnScreenOnOrOff, waitBeforeNextAction,
setAirplaneMode, turnScreenOnOrOff,
setDataConnection, setAirplaneMode,
speakText, setDataConnection,
playMusic, speakText,
controlMediaPlayback, playMusic,
setScreenBrightness, controlMediaPlayback,
playSound, setScreenBrightness,
vibrate, playSound,
createNotification, vibrate,
closeNotification, createNotification,
sendTextMessage; closeNotification,
sendTextMessage;
public String getFullName(Context context) public String getFullName(Context context)
{ {
switch(this) switch(this)
{ {
case setWifi: case setWifi:
return context.getResources().getString(R.string.actionSetWifi); return context.getResources().getString(R.string.actionSetWifi);
case setBluetooth: case setBluetooth:
return context.getResources().getString(R.string.actionSetBluetooth); return context.getResources().getString(R.string.actionSetBluetooth);
case setWifiTethering: case setWifiTethering:
return context.getResources().getString(R.string.actionSetWifiTethering); return context.getResources().getString(R.string.actionSetWifiTethering);
case setBluetoothTethering: case setBluetoothTethering:
return context.getResources().getString(R.string.actionSetBluetoothTethering); return context.getResources().getString(R.string.actionSetBluetoothTethering);
case setUsbTethering: case setUsbTethering:
return context.getResources().getString(R.string.actionSetUsbTethering); return context.getResources().getString(R.string.actionSetUsbTethering);
case setDisplayRotation: case setDisplayRotation:
return context.getResources().getString(R.string.actionSetDisplayRotation); return context.getResources().getString(R.string.actionSetDisplayRotation);
case turnWifiOn: case turnWifiOn:
return context.getResources().getString(R.string.actionTurnWifiOn); return context.getResources().getString(R.string.actionTurnWifiOn);
case turnWifiOff: case turnWifiOff:
return context.getResources().getString(R.string.actionTurnWifiOff); return context.getResources().getString(R.string.actionTurnWifiOff);
case turnBluetoothOn: case turnBluetoothOn:
return context.getResources().getString(R.string.actionTurnBluetoothOn); return context.getResources().getString(R.string.actionTurnBluetoothOn);
case turnBluetoothOff: case turnBluetoothOff:
return context.getResources().getString(R.string.actionTurnBluetoothOff); return context.getResources().getString(R.string.actionTurnBluetoothOff);
case triggerUrl: case triggerUrl:
return context.getResources().getString(R.string.actionTriggerUrl); return context.getResources().getString(R.string.actionTriggerUrl);
case changeSoundProfile: case changeSoundProfile:
return context.getResources().getString(R.string.actionChangeSoundProfile); return context.getResources().getString(R.string.actionChangeSoundProfile);
case turnUsbTetheringOn: case turnUsbTetheringOn:
return context.getResources().getString(R.string.actionTurnUsbTetheringOn); return context.getResources().getString(R.string.actionTurnUsbTetheringOn);
case turnUsbTetheringOff: case turnUsbTetheringOff:
return context.getResources().getString(R.string.actionTurnUsbTetheringOff); return context.getResources().getString(R.string.actionTurnUsbTetheringOff);
case turnWifiTetheringOn: case turnWifiTetheringOn:
return context.getResources().getString(R.string.actionTurnWifiTetheringOn); return context.getResources().getString(R.string.actionTurnWifiTetheringOn);
case turnWifiTetheringOff: case turnWifiTetheringOff:
return context.getResources().getString(R.string.actionTurnWifiTetheringOff); return context.getResources().getString(R.string.actionTurnWifiTetheringOff);
case enableScreenRotation: case enableScreenRotation:
return context.getResources().getString(R.string.actionEnableScreenRotation); return context.getResources().getString(R.string.actionEnableScreenRotation);
case disableScreenRotation: case disableScreenRotation:
return context.getResources().getString(R.string.actionDisableScreenRotation); return context.getResources().getString(R.string.actionDisableScreenRotation);
case startOtherActivity: case startOtherActivity:
return context.getResources().getString(R.string.startOtherActivity); return context.getResources().getString(R.string.startOtherActivity);
case waitBeforeNextAction: case waitBeforeNextAction:
return context.getResources().getString(R.string.waitBeforeNextAction); return context.getResources().getString(R.string.waitBeforeNextAction);
case turnScreenOnOrOff: case turnScreenOnOrOff:
return context.getResources().getString(R.string.turnScreenOnOrOff); return context.getResources().getString(R.string.turnScreenOnOrOff);
case vibrate: case vibrate:
return context.getResources().getString(R.string.vibrate); return context.getResources().getString(R.string.vibrate);
case setAirplaneMode: case setAirplaneMode:
return context.getResources().getString(R.string.airplaneMode); return context.getResources().getString(R.string.airplaneMode);
case setDataConnection: case setDataConnection:
return context.getResources().getString(R.string.actionDataConnection); return context.getResources().getString(R.string.actionDataConnection);
case speakText: case speakText:
return context.getResources().getString(R.string.actionSpeakText); return context.getResources().getString(R.string.actionSpeakText);
case playMusic: case playMusic:
return context.getResources().getString(R.string.actionPlayMusic); return context.getResources().getString(R.string.actionPlayMusic);
case controlMediaPlayback: case controlMediaPlayback:
return context.getResources().getString(R.string.actionMediaControl); return context.getResources().getString(R.string.actionMediaControl);
case playSound: case playSound:
return context.getResources().getString(R.string.playSound); return context.getResources().getString(R.string.playSound);
case sendTextMessage: case sendTextMessage:
return context.getResources().getString(R.string.sendTextMessage); return context.getResources().getString(R.string.sendTextMessage);
case setScreenBrightness: case setScreenBrightness:
return context.getResources().getString(R.string.setScreenBrightness); return context.getResources().getString(R.string.setScreenBrightness);
case createNotification: case createNotification:
return context.getResources().getString(R.string.createNotification); return context.getResources().getString(R.string.createNotification);
case closeNotification: case closeNotification:
return context.getResources().getString(R.string.closeNotifications); return context.getResources().getString(R.string.closeNotifications);
default: default:
return "Unknown"; return "Unknown";
} }
} }
}; };
private Action_Enum action; private Action_Enum action;
private boolean parameter1 = false; private boolean parameter1 = false;

View File

@ -529,6 +529,10 @@ public class ActivityManageRule extends Activity
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.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 if(types[i].toString().equals(Trigger_Enum.deviceStarts.toString()))
items.add(new Item(typesLong[i].toString(), R.drawable.alarm));
else if(types[i].toString().equals(Trigger_Enum.serviceStarts.toString()))
items.add(new Item(typesLong[i].toString(), R.drawable.alarm));
else else
items.add(new Item(typesLong[i].toString(), R.drawable.placeholder)); items.add(new Item(typesLong[i].toString(), R.drawable.placeholder));
} }
@ -593,7 +597,7 @@ public class ActivityManageRule extends Activity
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)};
else if(triggerType == Trigger_Enum.speed | triggerType == Trigger_Enum.noiseLevel | triggerType == Trigger_Enum.batteryLevel) else if(triggerType == Trigger_Enum.speed || triggerType == Trigger_Enum.noiseLevel || triggerType == Trigger_Enum.batteryLevel)
booleanChoices = new String[]{getResources().getString(R.string.exceeds), getResources().getString(R.string.dropsBelow)}; booleanChoices = new String[]{getResources().getString(R.string.exceeds), getResources().getString(R.string.dropsBelow)};
else if(triggerType == Trigger_Enum.wifiConnection) else if(triggerType == Trigger_Enum.wifiConnection)
{ {
@ -698,6 +702,20 @@ public class ActivityManageRule extends Activity
getTriggerScreenStateDialog().show(); getTriggerScreenStateDialog().show();
return; return;
} }
else if(triggerType == Trigger_Enum.deviceStarts)
{
newTrigger.setTriggerType(Trigger_Enum.deviceStarts);
ruleToEdit.getTriggerSet().add(newTrigger);
refreshTriggerList();
return;
}
else if(triggerType == Trigger_Enum.serviceStarts)
{
newTrigger.setTriggerType(Trigger_Enum.serviceStarts);
ruleToEdit.getTriggerSet().add(newTrigger);
refreshTriggerList();
return;
}
else if(triggerType == Trigger_Enum.headsetPlugged) else if(triggerType == Trigger_Enum.headsetPlugged)
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)};

View File

@ -32,6 +32,7 @@ import com.jens.automation2.receivers.PackageReplacedReceiver;
import com.jens.automation2.receivers.PhoneStatusListener; import com.jens.automation2.receivers.PhoneStatusListener;
import java.util.Calendar; import java.util.Calendar;
import java.util.Set;
@SuppressLint("NewApi") @SuppressLint("NewApi")
public class AutomationService extends Service implements OnInitListener public class AutomationService extends Service implements OnInitListener
@ -192,6 +193,9 @@ public class AutomationService extends Service implements OnInitListener
{ {
Bundle b = intent.getExtras(); Bundle b = intent.getExtras();
startAtBoot = b.getBoolean("startAtBoot", false); startAtBoot = b.getBoolean("startAtBoot", false);
if(startAtBoot)
Settings.deviceStartDone = false;
} }
if (checkStartupRequirements(this, startAtBoot)) if (checkStartupRequirements(this, startAtBoot))
@ -211,12 +215,9 @@ public class AutomationService extends Service implements OnInitListener
ActivityMainScreen.updateMainScreen(); ActivityMainScreen.updateMainScreen();
this.isRunning = true; this.isRunning = true;
Miscellaneous.logEvent("i", "Service", this.getResources().getString(R.string.serviceStarted) + " VERSION_CODE: " + BuildConfig.VERSION_CODE + ", VERSION_NAME: " + BuildConfig.VERSION_NAME + ", flavor: " + BuildConfig.FLAVOR, 1); Miscellaneous.logEvent("i", "Service", this.getResources().getString(R.string.serviceStarted) + " VERSION_CODE: " + BuildConfig.VERSION_CODE + ", VERSION_NAME: " + BuildConfig.VERSION_NAME + ", flavor: " + BuildConfig.FLAVOR, 1);
Toast.makeText(this, this.getResources().getString(R.string.serviceStarted), Toast.LENGTH_LONG).show(); Toast.makeText(this, this.getResources().getString(R.string.serviceStarted), Toast.LENGTH_LONG).show();
// ********** Test area **********
// Miscellaneous.logEvent("i", "setNetworkType", "bin hier.", 3);
// Actions.setData(true);
// ********** Test area **********
/* /*
On normal phones the app is supposed to automatically restart in case of any problems. On normal phones the app is supposed to automatically restart in case of any problems.
@ -315,6 +316,8 @@ public class AutomationService extends Service implements OnInitListener
private void startUpRoutine() private void startUpRoutine()
{ {
Settings.serviceStartDone = false;
checkForTtsEngine(); checkForTtsEngine();
checkForPermissions(); checkForPermissions();
checkForRestrictedFeatures(); checkForRestrictedFeatures();
@ -333,6 +336,9 @@ public class AutomationService extends Service implements OnInitListener
if(r.getsGreenLight(AutomationService.this)) if(r.getsGreenLight(AutomationService.this))
r.activate(AutomationService.this, false); r.activate(AutomationService.this, false);
} }
Settings.serviceStartDone = true;
Settings.deviceStartDone = true;
} }
protected void startLocationProvider() protected void startLocationProvider()

View File

@ -215,7 +215,7 @@ public class ReceiverCoordinator
Class testClass = Class.forName(ActivityManageRule.activityDetectionClassPath); Class testClass = Class.forName(ActivityManageRule.activityDetectionClassPath);
Miscellaneous.runMethodReflective("ActivityDetectionReceiver", "stopActivityDetectionReceiver", null); Miscellaneous.runMethodReflective("ActivityDetectionReceiver", "stopActivityDetectionReceiver", null);
} }
catch(ClassNotFoundException e) catch(Exception e)
{ {
// Nothing to do, just not stopping this one. // Nothing to do, just not stopping this one.
} }

View File

@ -12,7 +12,7 @@ import java.util.Set;
public class Settings implements SharedPreferences public class Settings implements SharedPreferences
{ {
public static final int rulesThatHaveBeenRanHistorySize = 10; public static final int rulesThatHaveBeenRanHistorySize = 10;
public final static int lockSoundChangesInterval = 15; public static final int lockSoundChangesInterval = 15;
public static final int newsPollEveryXDays = 3; public static final int newsPollEveryXDays = 3;
public static final int newsDisplayForXDays = 3; public static final int newsDisplayForXDays = 3;
public static final int updateCheckFrequencyDays = 7; public static final int updateCheckFrequencyDays = 7;
@ -77,7 +77,13 @@ public class Settings implements SharedPreferences
public static ArrayList<String> whatHasBeenDone; public static ArrayList<String> whatHasBeenDone;
/* /*
Generic settings valid for all installations and not changable Not saved permanently.
*/
public static boolean deviceStartDone = true; // by default assume device has not just been started
public static boolean serviceStartDone = false;
/*
Generic settings valid for all installations and not changeable
*/ */
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";
@ -600,5 +606,4 @@ public class Settings implements SharedPreferences
// TODO Auto-generated method stub // TODO Auto-generated method stub
return null; return null;
} }
} }

View File

@ -3,7 +3,7 @@ package com.jens.automation2;
import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothDevice;
import android.content.Context; import android.content.Context;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.SystemClock;
import android.service.notification.StatusBarNotification; import android.service.notification.StatusBarNotification;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import android.util.Log; import android.util.Log;
@ -25,10 +25,6 @@ import com.jens.automation2.receivers.PhoneStatusListener;
import com.jens.automation2.receivers.ProcessListener; import com.jens.automation2.receivers.ProcessListener;
import com.jens.automation2.receivers.ScreenStateReceiver; import com.jens.automation2.receivers.ScreenStateReceiver;
import static com.jens.automation2.Trigger.triggerParameter2Split;
import static com.jens.automation2.receivers.NotificationListener.EXTRA_TEXT;
import static com.jens.automation2.receivers.NotificationListener.EXTRA_TITLE;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import java.sql.Time; import java.sql.Time;
@ -38,8 +34,31 @@ 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,
musicPlaying,
deviceStarts,
serviceStarts,
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)
{ {
@ -87,6 +106,10 @@ public class Trigger
return context.getResources().getString(R.string.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);
case deviceStarts:
return context.getResources().getString(R.string.deviceStarts);
case serviceStarts:
return context.getResources().getString(R.string.serviceStarts);
default: default:
return "Unknown"; return "Unknown";
} }
@ -190,6 +213,14 @@ public class Trigger
if(!checkScreenState()) if(!checkScreenState())
result = false; result = false;
break; break;
case deviceStarts:
if(!checkDeviceStarts())
result = false;
break;
case serviceStarts:
if(!checkServiceStarts())
result = false;
break;
default: default:
break; break;
} }
@ -343,6 +374,16 @@ public class Trigger
return triggerParameter == MediaPlayerListener.isAudioPlaying(Miscellaneous.getAnyContext()); return triggerParameter == MediaPlayerListener.isAudioPlaying(Miscellaneous.getAnyContext());
} }
boolean checkDeviceStarts()
{
return checkServiceStarts() && !Settings.deviceStartDone;
}
boolean checkServiceStarts()
{
return !Settings.serviceStartDone;
}
boolean checkProfileActive() boolean checkProfileActive()
{ {
String demandedProfileName = getTriggerParameter2().split(Trigger.triggerParameter2Split)[0]; String demandedProfileName = getTriggerParameter2().split(Trigger.triggerParameter2Split)[0];
@ -1546,9 +1587,13 @@ public class Trigger
default: default:
state = Miscellaneous.getAnyContext().getString(R.string.unknown); state = Miscellaneous.getAnyContext().getString(R.string.unknown);
} }
case deviceStarts:
returnString.append(String.format(Miscellaneous.getAnyContext().getString(R.string.screenIs), state)); // This type doesn't have an activate/deactivate equivalent
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.deviceHasJustStarted));
break;
case serviceStarts:
// This type doesn't have an activate/deactivate equivalent
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.serviceHasJustStarted));
break; break;
default: default:
returnString.append("error"); returnString.append("error");

View File

@ -796,4 +796,8 @@
<string name="musicCheckFrequencySummary">Milliseconds between checks</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> <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>
<string name="lastProfile">Last profile:</string> <string name="lastProfile">Last profile:</string>
<string name="deviceStarts">Device starts</string>
<string name="serviceStarts">Service starts</string>
<string name="deviceHasJustStarted">device has just started</string>
<string name="serviceHasJustStarted">service has just started</string>
</resources> </resources>