Rework
This commit is contained in:
		
							
								
								
									
										11
									
								
								.idea/deploymentTargetDropDown.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										11
									
								
								.idea/deploymentTargetDropDown.xml
									
									
									
										generated
									
									
									
								
							@@ -1,17 +1,6 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<project version="4">
 | 
			
		||||
  <component name="deploymentTargetDropDown">
 | 
			
		||||
    <runningDeviceTargetSelectedWithDropDown>
 | 
			
		||||
      <Target>
 | 
			
		||||
        <type value="RUNNING_DEVICE_TARGET" />
 | 
			
		||||
        <deviceKey>
 | 
			
		||||
          <Key>
 | 
			
		||||
            <type value="VIRTUAL_DEVICE_PATH" />
 | 
			
		||||
            <value value="C:\Users\jens\.android\avd\Android_11.avd" />
 | 
			
		||||
          </Key>
 | 
			
		||||
        </deviceKey>
 | 
			
		||||
      </Target>
 | 
			
		||||
    </runningDeviceTargetSelectedWithDropDown>
 | 
			
		||||
    <targetSelectedWithDropDown>
 | 
			
		||||
      <Target>
 | 
			
		||||
        <type value="QUICK_BOOT_TARGET" />
 | 
			
		||||
 
 | 
			
		||||
@@ -358,40 +358,8 @@ public class Rule implements Comparable<Rule>
 | 
			
		||||
		{
 | 
			
		||||
			for(Trigger oneTrigger : this.getTriggerSet())
 | 
			
		||||
			{
 | 
			
		||||
				if(oneTrigger.getTriggerType().equals(Trigger.Trigger_Enum.activityDetection))
 | 
			
		||||
				{
 | 
			
		||||
					if (ActivityDetectionReceiver.getActivityDetectionLastResult() != null)
 | 
			
		||||
					{
 | 
			
		||||
						boolean found = false;
 | 
			
		||||
						for (DetectedActivity oneDetectedActivity : ActivityDetectionReceiver.getActivityDetectionLastResult().getProbableActivities())
 | 
			
		||||
						{
 | 
			
		||||
							if (oneDetectedActivity.getType() == oneTrigger.getActivityDetectionType())
 | 
			
		||||
								found = true;
 | 
			
		||||
						}
 | 
			
		||||
 | 
			
		||||
						if (!found)
 | 
			
		||||
						{
 | 
			
		||||
							Miscellaneous.logEvent("i", String.format(context.getResources().getString(R.string.ruleCheckOf), this.getName()), String.format(context.getResources().getString(R.string.ruleDoesntApplyActivityNotPresent), ActivityDetectionReceiver.getDescription(oneTrigger.getActivityDetectionType())), 3);
 | 
			
		||||
							return false;
 | 
			
		||||
						}
 | 
			
		||||
						else
 | 
			
		||||
						{
 | 
			
		||||
							for (DetectedActivity oneDetectedActivity : ActivityDetectionReceiver.getActivityDetectionLastResult().getProbableActivities())
 | 
			
		||||
							{
 | 
			
		||||
								if (oneDetectedActivity.getType() == oneTrigger.getActivityDetectionType() && oneDetectedActivity.getConfidence() < Settings.activityDetectionRequiredProbability)
 | 
			
		||||
								{
 | 
			
		||||
									Miscellaneous.logEvent("i", String.format(context.getResources().getString(R.string.ruleCheckOf), this.getName()), String.format(context.getResources().getString(R.string.ruleDoesntApplyActivityGivenButTooLowProbability), ActivityDetectionReceiver.getDescription(oneDetectedActivity.getType()), String.valueOf(oneDetectedActivity.getConfidence()), String.valueOf(Settings.activityDetectionRequiredProbability)), 3);
 | 
			
		||||
									return false;
 | 
			
		||||
								}
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				else
 | 
			
		||||
				{
 | 
			
		||||
					if (!oneTrigger.applies(null, context))
 | 
			
		||||
						return false;
 | 
			
		||||
				}
 | 
			
		||||
				if (!oneTrigger.applies(null, context))
 | 
			
		||||
					return false;
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
			return true;
 | 
			
		||||
@@ -401,6 +369,44 @@ public class Rule implements Comparable<Rule>
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * This is actually a function of the class Trigger, but Rule is already distinguished by flavors, Trigger is not.
 | 
			
		||||
	 * Hence it is here.
 | 
			
		||||
	 * @param oneTrigger
 | 
			
		||||
	 * @return
 | 
			
		||||
	 */
 | 
			
		||||
	boolean checkActivityDetection(Trigger oneTrigger)
 | 
			
		||||
	{
 | 
			
		||||
		if (ActivityDetectionReceiver.getActivityDetectionLastResult() != null)
 | 
			
		||||
		{
 | 
			
		||||
			boolean found = false;
 | 
			
		||||
			for (DetectedActivity oneDetectedActivity : ActivityDetectionReceiver.getActivityDetectionLastResult().getProbableActivities())
 | 
			
		||||
			{
 | 
			
		||||
				if (oneDetectedActivity.getType() == oneTrigger.getActivityDetectionType())
 | 
			
		||||
					found = true;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if (!found)
 | 
			
		||||
			{
 | 
			
		||||
				Miscellaneous.logEvent("i", String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.ruleCheckOf), this.getName()), String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.ruleDoesntApplyActivityNotPresent), ActivityDetectionReceiver.getDescription(oneTrigger.getActivityDetectionType())), 3);
 | 
			
		||||
				return false;
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				for (DetectedActivity oneDetectedActivity : ActivityDetectionReceiver.getActivityDetectionLastResult().getProbableActivities())
 | 
			
		||||
				{
 | 
			
		||||
					if (oneDetectedActivity.getType() == oneTrigger.getActivityDetectionType() && oneDetectedActivity.getConfidence() < Settings.activityDetectionRequiredProbability)
 | 
			
		||||
					{
 | 
			
		||||
						Miscellaneous.logEvent("i", String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.ruleCheckOf), this.getName()), String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.ruleDoesntApplyActivityGivenButTooLowProbability), ActivityDetectionReceiver.getDescription(oneDetectedActivity.getType()), String.valueOf(oneDetectedActivity.getConfidence()), String.valueOf(Settings.activityDetectionRequiredProbability)), 3);
 | 
			
		||||
						return false;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private class ActivateRuleTask extends AsyncTask<Object, String, Void>
 | 
			
		||||
	{
 | 
			
		||||
		boolean wasActivated = false;
 | 
			
		||||
@@ -418,7 +424,8 @@ public class Rule implements Comparable<Rule>
 | 
			
		||||
			
 | 
			
		||||
	        if (Looper.myLooper() == null)
 | 
			
		||||
	        	Looper.prepare();
 | 
			
		||||
	        
 | 
			
		||||
 | 
			
		||||
			setLastExecution(Calendar.getInstance());
 | 
			
		||||
			wasActivated = activateInternally((AutomationService)params[0], (Boolean)params[1]);
 | 
			
		||||
 | 
			
		||||
			return null;
 | 
			
		||||
@@ -443,7 +450,7 @@ public class Rule implements Comparable<Rule>
 | 
			
		||||
			 */
 | 
			
		||||
			if(wasActivated)
 | 
			
		||||
			{
 | 
			
		||||
				setLastExecution(Calendar.getInstance());
 | 
			
		||||
//				setLastExecution(Calendar.getInstance());
 | 
			
		||||
				AutomationService.updateNotification();
 | 
			
		||||
				ActivityMainScreen.updateMainScreen();
 | 
			
		||||
				super.onPostExecute(result);
 | 
			
		||||
@@ -462,8 +469,8 @@ public class Rule implements Comparable<Rule>
 | 
			
		||||
			boolean doToggle = ruleToggle && isActuallyToggable;
 | 
			
		||||
 | 
			
		||||
			//if(notLastActive || force || doToggle)
 | 
			
		||||
			if(force || doToggle)
 | 
			
		||||
			{
 | 
			
		||||
//			if(force || doToggle)
 | 
			
		||||
//			{
 | 
			
		||||
				String message;
 | 
			
		||||
				if(!doToggle)
 | 
			
		||||
					message = String.format(automationService.getResources().getString(R.string.ruleActivate), Rule.this.getName());
 | 
			
		||||
@@ -492,6 +499,7 @@ public class Rule implements Comparable<Rule>
 | 
			
		||||
				{
 | 
			
		||||
					Rule.ruleRunHistory.add(0, Rule.this);		// add at beginning for better visualization
 | 
			
		||||
					Rule.lastActivatedRuleActivationTime = new Date();
 | 
			
		||||
 | 
			
		||||
					while(ruleRunHistory.size() > Settings.rulesThatHaveBeenRanHistorySize)
 | 
			
		||||
						ruleRunHistory.remove(ruleRunHistory.size()-1);
 | 
			
		||||
					String history = "";
 | 
			
		||||
@@ -507,12 +515,12 @@ public class Rule implements Comparable<Rule>
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				Miscellaneous.logEvent("i", "Rule", String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.ruleActivationComplete), Rule.this.getName()), 2);
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				Miscellaneous.logEvent("i", "Rule", "Request to activate rule " + Rule.this.getName() + ", but it is the last one that was activated. Won't do it again.", 3);
 | 
			
		||||
				return false;
 | 
			
		||||
			}
 | 
			
		||||
//			}
 | 
			
		||||
//			else
 | 
			
		||||
//			{
 | 
			
		||||
//				Miscellaneous.logEvent("i", "Rule", "Request to activate rule " + Rule.this.getName() + ", but it is the last one that was activated. Won't do it again.", 3);
 | 
			
		||||
//				return false;
 | 
			
		||||
//			}
 | 
			
		||||
 | 
			
		||||
			return true;
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,10 @@
 | 
			
		||||
package com.jens.automation2;
 | 
			
		||||
 | 
			
		||||
import static android.content.Context.DEVICE_POLICY_SERVICE;
 | 
			
		||||
 | 
			
		||||
import android.bluetooth.BluetoothDevice;
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.graphics.Color;
 | 
			
		||||
import android.os.Build;
 | 
			
		||||
import android.os.Bundle;
 | 
			
		||||
import android.service.notification.StatusBarNotification;
 | 
			
		||||
@@ -15,6 +18,7 @@ import com.jens.automation2.location.WifiBroadcastReceiver;
 | 
			
		||||
import com.jens.automation2.receivers.BatteryReceiver;
 | 
			
		||||
import com.jens.automation2.receivers.BluetoothReceiver;
 | 
			
		||||
import com.jens.automation2.receivers.ConnectivityReceiver;
 | 
			
		||||
import com.jens.automation2.receivers.DevicePositionListener;
 | 
			
		||||
import com.jens.automation2.receivers.HeadphoneJackListener;
 | 
			
		||||
import com.jens.automation2.receivers.NfcReceiver;
 | 
			
		||||
import com.jens.automation2.receivers.NoiseListener;
 | 
			
		||||
@@ -109,7 +113,13 @@ public class Trigger
 | 
			
		||||
						result = false;
 | 
			
		||||
					break;
 | 
			
		||||
				case devicePosition:
 | 
			
		||||
					and others
 | 
			
		||||
					if(!checkDevicePosition())
 | 
			
		||||
						result = false;
 | 
			
		||||
					break;
 | 
			
		||||
				case activityDetection:
 | 
			
		||||
					if(!getParentRule().checkActivityDetection(this))
 | 
			
		||||
						result = false;
 | 
			
		||||
					break;
 | 
			
		||||
				default:
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
@@ -266,6 +276,55 @@ public class Trigger
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	boolean checkDevicePosition()
 | 
			
		||||
	{
 | 
			
		||||
		String devicePositionPieces[] = getTriggerParameter2().split(Trigger.triggerParameter2Split);
 | 
			
		||||
		float desiredAzimuth = Float.parseFloat(devicePositionPieces[0]);
 | 
			
		||||
		float desiredAzimuthTolerance = Float.parseFloat(devicePositionPieces[1]);
 | 
			
		||||
		float desiredPitch = Float.parseFloat(devicePositionPieces[2]);
 | 
			
		||||
		float desiredPitchTolerance = Float.parseFloat(devicePositionPieces[3]);
 | 
			
		||||
		float desiredRoll = Float.parseFloat(devicePositionPieces[4]);
 | 
			
		||||
		float desiredRollTolerance = Float.parseFloat(devicePositionPieces[5]);
 | 
			
		||||
		float currentAzimuth = DevicePositionListener.getInstance().getAzimuth();
 | 
			
		||||
		float currentPitch = DevicePositionListener.getInstance().getPitch();
 | 
			
		||||
		float currentRoll = DevicePositionListener.getInstance().getRoll();
 | 
			
		||||
 | 
			
		||||
		if(
 | 
			
		||||
				!(
 | 
			
		||||
					currentAzimuth <= desiredAzimuth + desiredAzimuthTolerance
 | 
			
		||||
							&&
 | 
			
		||||
					currentAzimuth >= desiredAzimuth - desiredAzimuthTolerance
 | 
			
		||||
				)
 | 
			
		||||
		)
 | 
			
		||||
		{
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if(
 | 
			
		||||
				!(
 | 
			
		||||
					currentPitch <= desiredPitch + desiredPitchTolerance
 | 
			
		||||
							&&
 | 
			
		||||
					currentPitch >= desiredPitch - desiredPitchTolerance
 | 
			
		||||
				)
 | 
			
		||||
		)
 | 
			
		||||
		{
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if(
 | 
			
		||||
				!(
 | 
			
		||||
					currentRoll <= desiredRoll + desiredRollTolerance
 | 
			
		||||
							&&
 | 
			
		||||
					currentRoll >= desiredRoll - desiredRollTolerance
 | 
			
		||||
				)
 | 
			
		||||
		)
 | 
			
		||||
		{
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    boolean checkHeadsetPlugged()
 | 
			
		||||
	{
 | 
			
		||||
		if(HeadphoneJackListener.isHeadsetConnected() != this.getTriggerParameter())
 | 
			
		||||
 
 | 
			
		||||
@@ -49,6 +49,21 @@ public class DevicePositionListener implements SensorEventListener, AutomationLi
 | 
			
		||||
        return instance;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public float getAzimuth()
 | 
			
		||||
    {
 | 
			
		||||
        return azimuth;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public float getPitch()
 | 
			
		||||
    {
 | 
			
		||||
        return pitch;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public float getRoll()
 | 
			
		||||
    {
 | 
			
		||||
        return roll;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void startSensorFromConfigActivity(Context context, ActivityManageTriggerDevicePosition activityManageTriggerDevicePositionInstance)
 | 
			
		||||
    {
 | 
			
		||||
        this.activityManageTriggerDevicePositionInstance = activityManageTriggerDevicePositionInstance;
 | 
			
		||||
@@ -129,7 +144,15 @@ public class DevicePositionListener implements SensorEventListener, AutomationLi
 | 
			
		||||
            ArrayList<Rule> ruleCandidates = Rule.findRuleCandidates(Trigger.Trigger_Enum.devicePosition);
 | 
			
		||||
            for (int i = 0; i < ruleCandidates.size(); i++)
 | 
			
		||||
            {
 | 
			
		||||
                if (ruleCandidates.get(i).applies(Miscellaneous.getAnyContext()) && ruleCandidates.get(i).hasNotAppliedSinceLastExecution())
 | 
			
		||||
                boolean applies = ruleCandidates.get(i).applies(Miscellaneous.getAnyContext());
 | 
			
		||||
                boolean flipped = ruleCandidates.get(i).hasNotAppliedSinceLastExecution();
 | 
			
		||||
 | 
			
		||||
//                if (
 | 
			
		||||
//                        ruleCandidates.get(i).applies(Miscellaneous.getAnyContext())
 | 
			
		||||
//                            &&
 | 
			
		||||
//                        ruleCandidates.get(i).hasNotAppliedSinceLastExecution()
 | 
			
		||||
//                )
 | 
			
		||||
                if(applies && flipped)
 | 
			
		||||
                    ruleCandidates.get(i).activate(AutomationService.getInstance(), false);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user