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: {
return context.getResources().getString(R.string.actionSetWifi); case setWifi:
case setBluetooth: return context.getResources().getString(R.string.actionSetWifi);
return context.getResources().getString(R.string.actionSetBluetooth); case setBluetooth:
case setWifiTethering: return context.getResources().getString(R.string.actionSetBluetooth);
return context.getResources().getString(R.string.actionSetWifiTethering); case setWifiTethering:
case setBluetoothTethering: return context.getResources().getString(R.string.actionSetWifiTethering);
return context.getResources().getString(R.string.actionSetBluetoothTethering); case setBluetoothTethering:
case setUsbTethering: return context.getResources().getString(R.string.actionSetBluetoothTethering);
return context.getResources().getString(R.string.actionSetUsbTethering); case setUsbTethering:
case setDisplayRotation: return context.getResources().getString(R.string.actionSetUsbTethering);
return context.getResources().getString(R.string.actionSetDisplayRotation); case setDisplayRotation:
case turnWifiOn: return context.getResources().getString(R.string.actionSetDisplayRotation);
return context.getResources().getString(R.string.actionTurnWifiOn); case turnWifiOn:
case turnWifiOff: return context.getResources().getString(R.string.actionTurnWifiOn);
return context.getResources().getString(R.string.actionTurnWifiOff); case turnWifiOff:
case turnBluetoothOn: return context.getResources().getString(R.string.actionTurnWifiOff);
return context.getResources().getString(R.string.actionTurnBluetoothOn); case turnBluetoothOn:
case turnBluetoothOff: return context.getResources().getString(R.string.actionTurnBluetoothOn);
return context.getResources().getString(R.string.actionTurnBluetoothOff); case turnBluetoothOff:
case triggerUrl: return context.getResources().getString(R.string.actionTurnBluetoothOff);
return context.getResources().getString(R.string.actionTriggerUrl); case triggerUrl:
case changeSoundProfile: return context.getResources().getString(R.string.actionTriggerUrl);
return context.getResources().getString(R.string.actionChangeSoundProfile); case changeSoundProfile:
case turnUsbTetheringOn: return context.getResources().getString(R.string.actionChangeSoundProfile);
return context.getResources().getString(R.string.actionTurnUsbTetheringOn); case turnUsbTetheringOn:
case turnUsbTetheringOff: return context.getResources().getString(R.string.actionTurnUsbTetheringOn);
return context.getResources().getString(R.string.actionTurnUsbTetheringOff); case turnUsbTetheringOff:
case turnWifiTetheringOn: return context.getResources().getString(R.string.actionTurnUsbTetheringOff);
return context.getResources().getString(R.string.actionTurnWifiTetheringOn); case turnWifiTetheringOn:
case turnWifiTetheringOff: return context.getResources().getString(R.string.actionTurnWifiTetheringOn);
return context.getResources().getString(R.string.actionTurnWifiTetheringOff); case turnWifiTetheringOff:
case enableScreenRotation: return context.getResources().getString(R.string.actionTurnWifiTetheringOff);
return context.getResources().getString(R.string.actionEnableScreenRotation); case enableScreenRotation:
case disableScreenRotation: return context.getResources().getString(R.string.actionEnableScreenRotation);
return context.getResources().getString(R.string.actionDisableScreenRotation); case disableScreenRotation:
case startOtherActivity: return context.getResources().getString(R.string.actionDisableScreenRotation);
return context.getResources().getString(R.string.startOtherActivity); case startOtherActivity:
case waitBeforeNextAction: return context.getResources().getString(R.string.startOtherActivity);
return context.getResources().getString(R.string.waitBeforeNextAction); case waitBeforeNextAction:
case turnScreenOnOrOff: return context.getResources().getString(R.string.waitBeforeNextAction);
return context.getResources().getString(R.string.turnScreenOnOrOff); case turnScreenOnOrOff:
case vibrate: return context.getResources().getString(R.string.turnScreenOnOrOff);
return context.getResources().getString(R.string.vibrate); case vibrate:
case setAirplaneMode: return context.getResources().getString(R.string.vibrate);
return context.getResources().getString(R.string.airplaneMode); case setAirplaneMode:
case setDataConnection: return context.getResources().getString(R.string.airplaneMode);
return context.getResources().getString(R.string.actionDataConnection); case setDataConnection:
case speakText: return context.getResources().getString(R.string.actionDataConnection);
return context.getResources().getString(R.string.actionSpeakText); case speakText:
case playMusic: return context.getResources().getString(R.string.actionSpeakText);
return context.getResources().getString(R.string.actionPlayMusic); case playMusic:
case controlMediaPlayback: return context.getResources().getString(R.string.actionPlayMusic);
return context.getResources().getString(R.string.actionMediaControl); case controlMediaPlayback:
case playSound: return context.getResources().getString(R.string.actionMediaControl);
return context.getResources().getString(R.string.playSound); case playSound:
case sendTextMessage: return context.getResources().getString(R.string.playSound);
return context.getResources().getString(R.string.sendTextMessage); case sendTextMessage:
case setScreenBrightness: return context.getResources().getString(R.string.sendTextMessage);
return context.getResources().getString(R.string.setScreenBrightness); case setScreenBrightness:
case createNotification: return context.getResources().getString(R.string.setScreenBrightness);
return context.getResources().getString(R.string.createNotification); case createNotification:
case closeNotification: return context.getResources().getString(R.string.createNotification);
return context.getResources().getString(R.string.closeNotifications); case closeNotification:
default: return context.getResources().getString(R.string.closeNotifications);
return "Unknown"; default:
} 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>