Compare commits
33
Commits
v1.7.1
..
06080bb456
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
06080bb456 | ||
|
|
a5fd23949d | ||
|
|
59c7a2d313 | ||
|
|
ec61a3ffa5 | ||
|
|
a0c4cb7b6f | ||
|
|
22899347a1 | ||
|
|
4b84a0c2f5 | ||
|
|
724192e80b | ||
|
|
e6a7e2c5b5 | ||
|
|
e010e3392f | ||
|
|
f3c4a0fd91 | ||
|
|
f0853b3a30 | ||
|
|
98185a79df | ||
|
|
246a02371a | ||
|
|
9b8ae2271b | ||
|
|
b2cd3cf17c | ||
|
|
cf4ec286ae | ||
|
|
2a067507ae | ||
|
|
12f44aca8b | ||
|
|
1c8eec735d | ||
|
|
87edd595ba | ||
|
|
53f46c10da | ||
|
|
c5f04afe85 | ||
|
|
4d7fa711f9 | ||
|
|
4bea2113fa | ||
|
|
890260b8eb | ||
|
|
230521149f | ||
|
|
9a50da550a | ||
|
|
941bb3e1af | ||
|
|
5653a9c70e | ||
|
|
8c6331237d | ||
|
|
1bbf04d548 | ||
|
|
a2d93d27cb |
+3
-2
@@ -11,8 +11,8 @@ android {
|
|||||||
compileSdkVersion 29
|
compileSdkVersion 29
|
||||||
buildToolsVersion '29.0.2'
|
buildToolsVersion '29.0.2'
|
||||||
useLibrary 'org.apache.http.legacy'
|
useLibrary 'org.apache.http.legacy'
|
||||||
versionCode 115
|
versionCode 118
|
||||||
versionName "1.7.1"
|
versionName "1.7.3"
|
||||||
|
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
}
|
}
|
||||||
@@ -60,6 +60,7 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation 'org.jetbrains:annotations:15.0'
|
||||||
googlePlayFlavorImplementation 'com.google.firebase:firebase-appindexing:20.0.0'
|
googlePlayFlavorImplementation 'com.google.firebase:firebase-appindexing:20.0.0'
|
||||||
googlePlayFlavorImplementation 'com.google.android.gms:play-services-location:18.0.0'
|
googlePlayFlavorImplementation 'com.google.android.gms:play-services-location:18.0.0'
|
||||||
|
|
||||||
|
|||||||
@@ -11,8 +11,8 @@
|
|||||||
"type": "SINGLE",
|
"type": "SINGLE",
|
||||||
"filters": [],
|
"filters": [],
|
||||||
"attributes": [],
|
"attributes": [],
|
||||||
"versionCode": 115,
|
"versionCode": 116,
|
||||||
"versionName": "1.7.1-googlePlay",
|
"versionName": "1.7.2-googlePlay",
|
||||||
"outputFile": "app-googlePlayFlavor-release.apk"
|
"outputFile": "app-googlePlayFlavor-release.apk"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -65,6 +65,7 @@
|
|||||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
|
||||||
<uses-permission android:name="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"/>
|
<uses-permission android:name="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"/>
|
||||||
<uses-permission android:name="com.wireguard.android.permission.CONTROL_TUNNELS"/>
|
<uses-permission android:name="com.wireguard.android.permission.CONTROL_TUNNELS"/>
|
||||||
|
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
|
||||||
|
|
||||||
<uses-feature
|
<uses-feature
|
||||||
android:name="android.hardware.telephony"
|
android:name="android.hardware.telephony"
|
||||||
@@ -121,15 +122,7 @@
|
|||||||
<receiver android:name=".receivers.PackageReplacedReceiver"
|
<receiver android:name=".receivers.PackageReplacedReceiver"
|
||||||
android:enabled="true">
|
android:enabled="true">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<!--<action android:name="android.intent.action.PACKAGE_ADDED"/>
|
|
||||||
<action android:name="android.intent.action.PACKAGE_REPLACED" />
|
|
||||||
<action android:name="android.intent.action.PACKAGE_REMOVED"/>
|
|
||||||
<action android:name="android.intent.action.ACTION_PACKAGE_REPLACED" />-->
|
|
||||||
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
|
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
|
||||||
|
|
||||||
<!--<data
|
|
||||||
android:path="com.jens.automation2"
|
|
||||||
android:scheme="package" />-->
|
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</receiver>
|
</receiver>
|
||||||
<receiver android:name=".receivers.DateTimeListener" />
|
<receiver android:name=".receivers.DateTimeListener" />
|
||||||
@@ -154,10 +147,13 @@
|
|||||||
<activity android:name=".ActivityDisplayLongMessage" />
|
<activity android:name=".ActivityDisplayLongMessage" />
|
||||||
<activity android:name=".ActivityManageActionSendTextMessage" />
|
<activity android:name=".ActivityManageActionSendTextMessage" />
|
||||||
<activity android:name=".ActivityManageActionPlaySound" />
|
<activity android:name=".ActivityManageActionPlaySound" />
|
||||||
|
<activity android:name=".ActivityManageActionCloseNotification" />
|
||||||
|
<activity android:name=".ActivityManageTriggerProfile" />
|
||||||
<activity android:name=".ActivityManageTriggerTimeFrame" />
|
<activity android:name=".ActivityManageTriggerTimeFrame" />
|
||||||
<activity android:name=".ActivityMaintenance" />
|
<activity android:name=".ActivityControlCenter" />
|
||||||
<activity android:name=".ActivityManageTriggerPhoneCall" />
|
<activity android:name=".ActivityManageTriggerPhoneCall" />
|
||||||
<activity android:name=".ActivityManageActionBrightnessSetting" />
|
<activity android:name=".ActivityManageActionBrightnessSetting" />
|
||||||
|
<activity android:name=".ActivityManageActionCreateNotification" />
|
||||||
<activity android:name=".ActivityManageTriggerDeviceOrientation" />
|
<activity android:name=".ActivityManageTriggerDeviceOrientation" />
|
||||||
<activity android:name=".ActivityHelp" />
|
<activity android:name=".ActivityHelp" />
|
||||||
<activity android:name=".ActivityManageActionVibrate" />
|
<activity android:name=".ActivityManageActionVibrate" />
|
||||||
|
|||||||
@@ -12,10 +12,10 @@ import android.widget.Toast;
|
|||||||
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 java.sql.Time;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
public class Rule implements Comparable<Rule>
|
public class Rule implements Comparable<Rule>
|
||||||
@@ -23,9 +23,9 @@ public class Rule implements Comparable<Rule>
|
|||||||
private static ArrayList<Rule> ruleCollection = new ArrayList<Rule>();
|
private static ArrayList<Rule> ruleCollection = new ArrayList<Rule>();
|
||||||
public static boolean isAnyRuleActive = false;
|
public static boolean isAnyRuleActive = false;
|
||||||
|
|
||||||
private static ArrayList<Rule> ruleRunHistory = new ArrayList<Rule>();
|
private static List<Rule> ruleRunHistory = new ArrayList<Rule>();
|
||||||
|
|
||||||
public static ArrayList<Rule> getRuleRunHistory()
|
public static List<Rule> getRuleRunHistory()
|
||||||
{
|
{
|
||||||
return ruleRunHistory;
|
return ruleRunHistory;
|
||||||
}
|
}
|
||||||
@@ -833,8 +833,32 @@ public class Rule implements Comparable<Rule>
|
|||||||
|
|
||||||
return ruleCandidates;
|
return ruleCandidates;
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
|
public static ArrayList<Rule> findRuleCandidatesByTriggerProfile(Profile profile)
|
||||||
|
{
|
||||||
|
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
|
||||||
|
|
||||||
|
for(Rule oneRule : ruleCollection)
|
||||||
|
{
|
||||||
|
innerloop:
|
||||||
|
for(Trigger oneTrigger : oneRule.getTriggerSet())
|
||||||
|
{
|
||||||
|
if(oneTrigger.getTriggerType() == Trigger.Trigger_Enum.profileActive)
|
||||||
|
{
|
||||||
|
String profileName = oneTrigger.getTriggerParameter2().split(triggerParameter2Split)[0];
|
||||||
|
if(profileName.equals(profile.getName()))
|
||||||
|
{
|
||||||
|
ruleCandidates.add(oneRule);
|
||||||
|
break innerloop; //if the profile is found we don't need to search the other triggers in the same rule
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ruleCandidates;
|
||||||
|
}
|
||||||
|
|
||||||
public static ArrayList<Rule> findRuleCandidatesByProfile(Profile profile)
|
public static ArrayList<Rule> findRuleCandidatesByActionProfile(Profile profile)
|
||||||
{
|
{
|
||||||
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
|
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
|
||||||
|
|
||||||
|
|||||||
@@ -51,6 +51,7 @@
|
|||||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||||
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
||||||
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
|
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
|
||||||
|
<!-- <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />-->
|
||||||
<uses-permission android:name="android.permission.GET_TASKS" />
|
<uses-permission android:name="android.permission.GET_TASKS" />
|
||||||
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
||||||
<uses-permission android:name="android.permission.NFC" />
|
<uses-permission android:name="android.permission.NFC" />
|
||||||
@@ -62,6 +63,7 @@
|
|||||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
|
||||||
<uses-permission android:name="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"/>
|
<uses-permission android:name="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"/>
|
||||||
<uses-permission android:name="com.wireguard.android.permission.CONTROL_TUNNELS"/>
|
<uses-permission android:name="com.wireguard.android.permission.CONTROL_TUNNELS"/>
|
||||||
|
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
|
||||||
|
|
||||||
<uses-feature
|
<uses-feature
|
||||||
android:name="android.hardware.telephony"
|
android:name="android.hardware.telephony"
|
||||||
@@ -118,15 +120,7 @@
|
|||||||
<receiver android:name=".receivers.PackageReplacedReceiver"
|
<receiver android:name=".receivers.PackageReplacedReceiver"
|
||||||
android:enabled="true">
|
android:enabled="true">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<!--<action android:name="android.intent.action.PACKAGE_ADDED"/>
|
|
||||||
<action android:name="android.intent.action.PACKAGE_REPLACED" />
|
|
||||||
<action android:name="android.intent.action.PACKAGE_REMOVED"/>
|
|
||||||
<action android:name="android.intent.action.ACTION_PACKAGE_REPLACED" />-->
|
|
||||||
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
|
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
|
||||||
|
|
||||||
<!--<data
|
|
||||||
android:path="com.jens.automation2"
|
|
||||||
android:scheme="package" />-->
|
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</receiver>
|
</receiver>
|
||||||
<receiver android:name=".receivers.DateTimeListener" />
|
<receiver android:name=".receivers.DateTimeListener" />
|
||||||
@@ -151,10 +145,13 @@
|
|||||||
<activity android:name=".ActivityDisplayLongMessage" />
|
<activity android:name=".ActivityDisplayLongMessage" />
|
||||||
<activity android:name=".ActivityManageActionSendTextMessage" />
|
<activity android:name=".ActivityManageActionSendTextMessage" />
|
||||||
<activity android:name=".ActivityManageActionPlaySound" />
|
<activity android:name=".ActivityManageActionPlaySound" />
|
||||||
|
<activity android:name=".ActivityManageActionCloseNotification" />
|
||||||
|
<activity android:name=".ActivityManageTriggerProfile" />
|
||||||
<activity android:name=".ActivityManageTriggerTimeFrame" />
|
<activity android:name=".ActivityManageTriggerTimeFrame" />
|
||||||
<activity android:name=".ActivityMaintenance" />
|
<activity android:name=".ActivityControlCenter" />
|
||||||
<activity android:name=".ActivityManageTriggerPhoneCall" />
|
<activity android:name=".ActivityManageTriggerPhoneCall" />
|
||||||
<activity android:name=".ActivityManageActionBrightnessSetting" />
|
<activity android:name=".ActivityManageActionBrightnessSetting" />
|
||||||
|
<activity android:name=".ActivityManageActionCreateNotification" />
|
||||||
<activity android:name=".ActivityManageTriggerDeviceOrientation" />
|
<activity android:name=".ActivityManageTriggerDeviceOrientation" />
|
||||||
<activity android:name=".ActivityHelp" />
|
<activity android:name=".ActivityHelp" />
|
||||||
<activity android:name=".ActivityManageActionVibrate" />
|
<activity android:name=".ActivityManageActionVibrate" />
|
||||||
@@ -184,6 +181,7 @@
|
|||||||
</intent-filter>
|
</intent-filter>
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
<meta-data
|
<meta-data
|
||||||
android:name="android.nfc.action.TECH_DISCOVERED"
|
android:name="android.nfc.action.TECH_DISCOVERED"
|
||||||
@@ -217,7 +215,6 @@
|
|||||||
|
|
||||||
<activity android:name=".ActivityPermissions" />
|
<activity android:name=".ActivityPermissions" />
|
||||||
|
|
||||||
|
|
||||||
<!-- https://developer.android.com/about/versions/pie/android-9.0-changes-28#apache-p-->
|
<!-- https://developer.android.com/about/versions/pie/android-9.0-changes-28#apache-p-->
|
||||||
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
|
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
|
||||||
|
|
||||||
|
|||||||
@@ -8,10 +8,11 @@ import android.os.AsyncTask;
|
|||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
import java.sql.Time;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
public class Rule implements Comparable<Rule>
|
public class Rule implements Comparable<Rule>
|
||||||
@@ -19,9 +20,9 @@ public class Rule implements Comparable<Rule>
|
|||||||
private static ArrayList<Rule> ruleCollection = new ArrayList<Rule>();
|
private static ArrayList<Rule> ruleCollection = new ArrayList<Rule>();
|
||||||
public static boolean isAnyRuleActive = false;
|
public static boolean isAnyRuleActive = false;
|
||||||
|
|
||||||
private static ArrayList<Rule> ruleRunHistory = new ArrayList<Rule>();
|
private static List<Rule> ruleRunHistory = new ArrayList<Rule>();
|
||||||
|
|
||||||
public static ArrayList<Rule> getRuleRunHistory()
|
public static List<Rule> getRuleRunHistory()
|
||||||
{
|
{
|
||||||
return ruleRunHistory;
|
return ruleRunHistory;
|
||||||
}
|
}
|
||||||
@@ -805,8 +806,32 @@ public class Rule implements Comparable<Rule>
|
|||||||
|
|
||||||
return ruleCandidates;
|
return ruleCandidates;
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
|
public static ArrayList<Rule> findRuleCandidatesByTriggerProfile(Profile profile)
|
||||||
|
{
|
||||||
|
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
|
||||||
|
|
||||||
|
for(Rule oneRule : ruleCollection)
|
||||||
|
{
|
||||||
|
innerloop:
|
||||||
|
for(Trigger oneTrigger : oneRule.getTriggerSet())
|
||||||
|
{
|
||||||
|
if(oneTrigger.getTriggerType() == Trigger.Trigger_Enum.profileActive)
|
||||||
|
{
|
||||||
|
String profileName = oneTrigger.getTriggerParameter2().split(triggerParameter2Split)[0];
|
||||||
|
if(profileName.equals(profile.getName()))
|
||||||
|
{
|
||||||
|
ruleCandidates.add(oneRule);
|
||||||
|
break innerloop; //if the profile is found we don't need to search the other triggers in the same rule
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ruleCandidates;
|
||||||
|
}
|
||||||
|
|
||||||
public static ArrayList<Rule> findRuleCandidatesByProfile(Profile profile)
|
public static ArrayList<Rule> findRuleCandidatesByActionProfile(Profile profile)
|
||||||
{
|
{
|
||||||
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
|
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
|
||||||
|
|
||||||
|
|||||||
@@ -64,6 +64,7 @@
|
|||||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
|
||||||
<uses-permission android:name="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"/>
|
<uses-permission android:name="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"/>
|
||||||
<uses-permission android:name="com.wireguard.android.permission.CONTROL_TUNNELS"/>
|
<uses-permission android:name="com.wireguard.android.permission.CONTROL_TUNNELS"/>
|
||||||
|
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
@@ -113,15 +114,7 @@
|
|||||||
<receiver android:name=".receivers.PackageReplacedReceiver"
|
<receiver android:name=".receivers.PackageReplacedReceiver"
|
||||||
android:enabled="true">
|
android:enabled="true">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<!--<action android:name="android.intent.action.PACKAGE_ADDED"/>
|
|
||||||
<action android:name="android.intent.action.PACKAGE_REPLACED" />
|
|
||||||
<action android:name="android.intent.action.PACKAGE_REMOVED"/>
|
|
||||||
<action android:name="android.intent.action.ACTION_PACKAGE_REPLACED" />-->
|
|
||||||
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
|
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
|
||||||
|
|
||||||
<!--<data
|
|
||||||
android:path="com.jens.automation2"
|
|
||||||
android:scheme="package" />-->
|
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</receiver>
|
</receiver>
|
||||||
<receiver android:name=".receivers.DateTimeListener" />
|
<receiver android:name=".receivers.DateTimeListener" />
|
||||||
@@ -146,10 +139,13 @@
|
|||||||
<activity android:name=".ActivityDisplayLongMessage" />
|
<activity android:name=".ActivityDisplayLongMessage" />
|
||||||
<activity android:name=".ActivityManageActionSendTextMessage" />
|
<activity android:name=".ActivityManageActionSendTextMessage" />
|
||||||
<activity android:name=".ActivityManageActionPlaySound" />
|
<activity android:name=".ActivityManageActionPlaySound" />
|
||||||
|
<activity android:name=".ActivityManageActionCloseNotification" />
|
||||||
|
<activity android:name=".ActivityManageTriggerProfile" />
|
||||||
<activity android:name=".ActivityManageTriggerTimeFrame" />
|
<activity android:name=".ActivityManageTriggerTimeFrame" />
|
||||||
<activity android:name=".ActivityMaintenance" />
|
<activity android:name=".ActivityControlCenter" />
|
||||||
<activity android:name=".ActivityManageTriggerPhoneCall" />
|
<activity android:name=".ActivityManageTriggerPhoneCall" />
|
||||||
<activity android:name=".ActivityManageActionBrightnessSetting" />
|
<activity android:name=".ActivityManageActionBrightnessSetting" />
|
||||||
|
<activity android:name=".ActivityManageActionCreateNotification" />
|
||||||
<activity android:name=".ActivityManageTriggerDeviceOrientation" />
|
<activity android:name=".ActivityManageTriggerDeviceOrientation" />
|
||||||
<activity android:name=".ActivityHelp" />
|
<activity android:name=".ActivityHelp" />
|
||||||
<activity android:name=".ActivityManageActionVibrate" />
|
<activity android:name=".ActivityManageActionVibrate" />
|
||||||
@@ -213,7 +209,6 @@
|
|||||||
|
|
||||||
<activity android:name=".ActivityPermissions" />
|
<activity android:name=".ActivityPermissions" />
|
||||||
|
|
||||||
|
|
||||||
<!-- https://developer.android.com/about/versions/pie/android-9.0-changes-28#apache-p-->
|
<!-- https://developer.android.com/about/versions/pie/android-9.0-changes-28#apache-p-->
|
||||||
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
|
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
|
||||||
|
|
||||||
|
|||||||
@@ -12,10 +12,10 @@ import android.widget.Toast;
|
|||||||
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 java.sql.Time;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
public class Rule implements Comparable<Rule>
|
public class Rule implements Comparable<Rule>
|
||||||
@@ -23,9 +23,9 @@ public class Rule implements Comparable<Rule>
|
|||||||
private static ArrayList<Rule> ruleCollection = new ArrayList<Rule>();
|
private static ArrayList<Rule> ruleCollection = new ArrayList<Rule>();
|
||||||
public static boolean isAnyRuleActive = false;
|
public static boolean isAnyRuleActive = false;
|
||||||
|
|
||||||
private static ArrayList<Rule> ruleRunHistory = new ArrayList<Rule>();
|
private static List<Rule> ruleRunHistory = new ArrayList<Rule>();
|
||||||
|
|
||||||
public static ArrayList<Rule> getRuleRunHistory()
|
public static List<Rule> getRuleRunHistory()
|
||||||
{
|
{
|
||||||
return ruleRunHistory;
|
return ruleRunHistory;
|
||||||
}
|
}
|
||||||
@@ -833,8 +833,32 @@ public class Rule implements Comparable<Rule>
|
|||||||
|
|
||||||
return ruleCandidates;
|
return ruleCandidates;
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
|
public static ArrayList<Rule> findRuleCandidatesByTriggerProfile(Profile profile)
|
||||||
|
{
|
||||||
|
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
|
||||||
|
|
||||||
|
for(Rule oneRule : ruleCollection)
|
||||||
|
{
|
||||||
|
innerloop:
|
||||||
|
for(Trigger oneTrigger : oneRule.getTriggerSet())
|
||||||
|
{
|
||||||
|
if(oneTrigger.getTriggerType() == Trigger.Trigger_Enum.profileActive)
|
||||||
|
{
|
||||||
|
String profileName = oneTrigger.getTriggerParameter2().split(triggerParameter2Split)[0];
|
||||||
|
if(profileName.equals(profile.getName()))
|
||||||
|
{
|
||||||
|
ruleCandidates.add(oneRule);
|
||||||
|
break innerloop; //if the profile is found we don't need to search the other triggers in the same rule
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ruleCandidates;
|
||||||
|
}
|
||||||
|
|
||||||
public static ArrayList<Rule> findRuleCandidatesByProfile(Profile profile)
|
public static ArrayList<Rule> findRuleCandidatesByActionProfile(Profile profile)
|
||||||
{
|
{
|
||||||
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
|
ArrayList<Rule> ruleCandidates = new ArrayList<Rule>();
|
||||||
|
|
||||||
|
|||||||
@@ -44,6 +44,8 @@ public class Action
|
|||||||
setScreenBrightness,
|
setScreenBrightness,
|
||||||
playSound,
|
playSound,
|
||||||
vibrate,
|
vibrate,
|
||||||
|
createNotification,
|
||||||
|
closeNotification,
|
||||||
sendTextMessage;
|
sendTextMessage;
|
||||||
|
|
||||||
public String getFullName(Context context)
|
public String getFullName(Context context)
|
||||||
@@ -108,6 +110,10 @@ public class Action
|
|||||||
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:
|
||||||
|
return context.getResources().getString(R.string.createNotification);
|
||||||
|
case closeNotification:
|
||||||
|
return context.getResources().getString(R.string.closeNotifications);
|
||||||
default:
|
default:
|
||||||
return "Unknown";
|
return "Unknown";
|
||||||
}
|
}
|
||||||
@@ -153,138 +159,165 @@ public class Action
|
|||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
StringBuilder returnString = new StringBuilder();
|
StringBuilder returnString = new StringBuilder();
|
||||||
|
|
||||||
if(this.getAction().equals(Action_Enum.setWifi))
|
|
||||||
{
|
|
||||||
if(this.getParameter1())
|
|
||||||
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionTurnWifiOn));
|
|
||||||
else
|
|
||||||
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionTurnWifiOff));
|
|
||||||
}
|
|
||||||
else if(this.getAction().equals(Action_Enum.setBluetooth))
|
|
||||||
{
|
|
||||||
if(this.getParameter1())
|
|
||||||
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionTurnBluetoothOn));
|
|
||||||
else
|
|
||||||
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionTurnBluetoothOff));
|
|
||||||
}
|
|
||||||
else if(this.getAction().equals(Action_Enum.setUsbTethering))
|
|
||||||
{
|
|
||||||
if(this.getParameter1())
|
|
||||||
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionTurnUsbTetheringOn));
|
|
||||||
else
|
|
||||||
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionTurnUsbTetheringOff));
|
|
||||||
}
|
|
||||||
else if(this.getAction().equals(Action_Enum.setWifiTethering))
|
|
||||||
{
|
|
||||||
if(this.getParameter1())
|
|
||||||
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionTurnWifiTetheringOn));
|
|
||||||
else
|
|
||||||
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionTurnWifiTetheringOff));
|
|
||||||
}
|
|
||||||
else if(this.getAction().equals(Action_Enum.setBluetoothTethering))
|
|
||||||
{
|
|
||||||
if(this.getParameter1())
|
|
||||||
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionTurnBluetoothTetheringOn));
|
|
||||||
else
|
|
||||||
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionTurnBluetoothTetheringOff));
|
|
||||||
}
|
|
||||||
else if(this.getAction().equals(Action_Enum.setDisplayRotation))
|
|
||||||
{
|
|
||||||
if(this.getParameter1())
|
|
||||||
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionEnableScreenRotation));
|
|
||||||
else
|
|
||||||
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionDisableScreenRotation));
|
|
||||||
}
|
|
||||||
else if(this.getAction().equals(Action_Enum.setAirplaneMode))
|
|
||||||
{
|
|
||||||
if(this.getParameter1())
|
|
||||||
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionTurnAirplaneModeOn));
|
|
||||||
else
|
|
||||||
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionTurnAirplaneModeOff));
|
|
||||||
}
|
|
||||||
else if(this.getAction().equals(Action_Enum.setDataConnection))
|
|
||||||
{
|
|
||||||
if(this.getParameter1())
|
|
||||||
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionSetDataConnectionOn));
|
|
||||||
else
|
|
||||||
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionSetDataConnectionOff));
|
|
||||||
}
|
|
||||||
else if(this.getAction().equals(Action_Enum.startOtherActivity))
|
|
||||||
{
|
|
||||||
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.startOtherActivity));
|
|
||||||
}
|
|
||||||
else if(this.getAction().equals(Action_Enum.triggerUrl))
|
|
||||||
{
|
|
||||||
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionTriggerUrl));
|
|
||||||
}
|
|
||||||
else if(this.getAction().equals(Action_Enum.speakText))
|
|
||||||
{
|
|
||||||
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionSpeakText));
|
|
||||||
}
|
|
||||||
else if(this.getAction().equals(Action_Enum.playMusic))
|
|
||||||
{
|
|
||||||
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionPlayMusic));
|
|
||||||
}
|
|
||||||
else if(this.getAction().equals(Action_Enum.sendTextMessage))
|
|
||||||
{
|
|
||||||
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.sendTextMessage));
|
|
||||||
}
|
|
||||||
else if(this.getAction().equals(Action_Enum.turnScreenOnOrOff))
|
|
||||||
{
|
|
||||||
if(getParameter1())
|
|
||||||
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.turnScreenOn));
|
|
||||||
else
|
|
||||||
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.turnScreenOff));
|
|
||||||
}
|
|
||||||
else if(this.getAction().equals(Action_Enum.playSound))
|
|
||||||
{
|
|
||||||
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.playSound));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
returnString.append(action.toString());
|
|
||||||
|
|
||||||
if(this.getAction().equals(Action_Enum.triggerUrl))
|
|
||||||
|
try
|
||||||
{
|
{
|
||||||
String[] components = parameter2.split(";");
|
switch (getAction())
|
||||||
if(components.length >= 3)
|
|
||||||
{
|
{
|
||||||
returnString.append(": " + components[2]);
|
case setWifi:
|
||||||
|
if (this.getParameter1())
|
||||||
if(parameter1)
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionTurnWifiOn));
|
||||||
returnString.append(" using authentication.");
|
else
|
||||||
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionTurnWifiOff));
|
||||||
|
break;
|
||||||
|
case setBluetooth:
|
||||||
|
if (this.getParameter1())
|
||||||
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionTurnBluetoothOn));
|
||||||
|
else
|
||||||
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionTurnBluetoothOff));
|
||||||
|
break;
|
||||||
|
case setUsbTethering:
|
||||||
|
if (this.getParameter1())
|
||||||
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionTurnUsbTetheringOn));
|
||||||
|
else
|
||||||
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionTurnUsbTetheringOff));
|
||||||
|
break;
|
||||||
|
case setWifiTethering:
|
||||||
|
if (this.getParameter1())
|
||||||
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionTurnWifiTetheringOn));
|
||||||
|
else
|
||||||
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionTurnWifiTetheringOff));
|
||||||
|
break;
|
||||||
|
case setBluetoothTethering:
|
||||||
|
if (this.getParameter1())
|
||||||
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionTurnBluetoothTetheringOn));
|
||||||
|
else
|
||||||
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionTurnBluetoothTetheringOff));
|
||||||
|
break;
|
||||||
|
case setDisplayRotation:
|
||||||
|
if (this.getParameter1())
|
||||||
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionEnableScreenRotation));
|
||||||
|
else
|
||||||
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionDisableScreenRotation));
|
||||||
|
break;
|
||||||
|
case setAirplaneMode:
|
||||||
|
if (this.getParameter1())
|
||||||
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionTurnAirplaneModeOn));
|
||||||
|
else
|
||||||
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionTurnAirplaneModeOff));
|
||||||
|
break;
|
||||||
|
case setDataConnection:
|
||||||
|
if (this.getParameter1())
|
||||||
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionSetDataConnectionOn));
|
||||||
|
else
|
||||||
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionSetDataConnectionOff));
|
||||||
|
break;
|
||||||
|
case startOtherActivity:
|
||||||
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.startOtherActivity));
|
||||||
|
break;
|
||||||
|
case triggerUrl:
|
||||||
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionTriggerUrl));
|
||||||
|
break;
|
||||||
|
case speakText:
|
||||||
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionSpeakText));
|
||||||
|
break;
|
||||||
|
case playMusic:
|
||||||
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionPlayMusic));
|
||||||
|
break;
|
||||||
|
case sendTextMessage:
|
||||||
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.sendTextMessage));
|
||||||
|
break;
|
||||||
|
case turnScreenOnOrOff:
|
||||||
|
if (getParameter1())
|
||||||
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.turnScreenOn));
|
||||||
|
else
|
||||||
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.turnScreenOff));
|
||||||
|
break;
|
||||||
|
case playSound:
|
||||||
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.playSound));
|
||||||
|
break;
|
||||||
|
case changeSoundProfile:
|
||||||
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.actionChangeSoundProfile));
|
||||||
|
break;
|
||||||
|
case waitBeforeNextAction:
|
||||||
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.waitBeforeNextAction));
|
||||||
|
break;
|
||||||
|
case setScreenBrightness:
|
||||||
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.setScreenBrightness));
|
||||||
|
break;
|
||||||
|
case createNotification:
|
||||||
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.createNotification));
|
||||||
|
break;
|
||||||
|
case closeNotification:
|
||||||
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.closeNotifications));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
returnString.append(action.toString());
|
||||||
}
|
}
|
||||||
else
|
|
||||||
returnString.append(": " + components[0]);
|
if (this.getAction().equals(Action_Enum.triggerUrl))
|
||||||
}
|
|
||||||
else if(this.getAction().equals(Action_Enum.startOtherActivity))
|
|
||||||
{
|
|
||||||
returnString.append(": " + parameter2.replace(Action.intentPairSeperator, "/"));
|
|
||||||
}
|
|
||||||
else if(this.getAction().equals(Action_Enum.sendTextMessage))
|
|
||||||
{
|
|
||||||
String[] components = parameter2.split(Actions.smsSeparator);
|
|
||||||
if(components.length >= 2)
|
|
||||||
{
|
{
|
||||||
returnString.append(" to number " + components[0]);
|
String[] components = parameter2.split(";");
|
||||||
|
if (components.length >= 3)
|
||||||
|
{
|
||||||
|
returnString.append(": " + components[2]);
|
||||||
|
|
||||||
returnString.append(". Message: " + components[1]);
|
if (parameter1)
|
||||||
|
returnString.append(" " + Miscellaneous.getAnyContext().getResources().getString(R.string.usingAuthentication) + ".");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
returnString.append(": " + components[0]);
|
||||||
}
|
}
|
||||||
|
else if (this.getAction().equals(Action_Enum.startOtherActivity))
|
||||||
|
{
|
||||||
|
returnString.append(": " + parameter2.replace(Action.intentPairSeperator, "/"));
|
||||||
|
}
|
||||||
|
else if (this.getAction().equals(Action_Enum.sendTextMessage))
|
||||||
|
{
|
||||||
|
String[] components = parameter2.split(Actions.smsSeparator);
|
||||||
|
if (components.length >= 2)
|
||||||
|
{
|
||||||
|
returnString.append(" " + Miscellaneous.getAnyContext().getResources().getString(R.string.toNumber) + " " + components[0]);
|
||||||
|
|
||||||
|
returnString.append(". " + Miscellaneous.getAnyContext().getResources().getString(R.string.message) + ": " + components[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (this.getAction().equals(Action_Enum.setScreenBrightness))
|
||||||
|
{
|
||||||
|
returnString.append(" " + Miscellaneous.getAnyContext().getResources().getString(R.string.to) + " ");
|
||||||
|
|
||||||
|
if (parameter1)
|
||||||
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.brightnessAuto));
|
||||||
|
else
|
||||||
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.brightnessManual));
|
||||||
|
|
||||||
|
returnString.append(" / " + Integer.parseInt(parameter2) + "%");
|
||||||
|
}
|
||||||
|
else if (this.getAction().equals(Action_Enum.closeNotification))
|
||||||
|
{
|
||||||
|
returnString.append(" " + Miscellaneous.getAnyContext().getResources().getString(R.string.from) + " ");
|
||||||
|
|
||||||
|
String parts[] = this.getParameter2().split(Action.actionParameter2Split);
|
||||||
|
if (parts[0].equals(Trigger.anyAppString))
|
||||||
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.anyApp));
|
||||||
|
else
|
||||||
|
returnString.append(parts[0]);
|
||||||
|
|
||||||
|
if (!StringUtils.isBlank(parts[2]))
|
||||||
|
returnString.append(", " + Miscellaneous.getAnyContext().getResources().getString(R.string.ifString) + " " + Miscellaneous.getAnyContext().getResources().getString(R.string.title) + " " + Trigger.getMatchString(parts[1]) + " " + parts[2]);
|
||||||
|
|
||||||
|
if (parts.length > 4 && !StringUtils.isBlank(parts[4]))
|
||||||
|
returnString.append(", " + Miscellaneous.getAnyContext().getResources().getString(R.string.ifString) + " " + Miscellaneous.getAnyContext().getResources().getString(R.string.text) + " " + Trigger.getMatchString(parts[3]) + " " + parts[4]);
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (parameter2 != null && parameter2.length() > 0)
|
||||||
|
returnString.append(": " + parameter2.replace(Action.actionParameter2Split, "; "));
|
||||||
}
|
}
|
||||||
else if(this.getAction().equals(Action_Enum.setScreenBrightness))
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
returnString.append(" to ");
|
returnString.append(": " + Miscellaneous.getAnyContext().getResources().getString(R.string.error));
|
||||||
|
|
||||||
if(parameter1)
|
|
||||||
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.brightnessAuto));
|
|
||||||
else
|
|
||||||
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.brightnessManual));
|
|
||||||
|
|
||||||
returnString.append(" / " + Integer.parseInt(parameter2) + "%");
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
if (parameter2 != null && parameter2.length() > 0)
|
|
||||||
returnString.append(": " + parameter2);
|
|
||||||
|
|
||||||
return returnString.toString();
|
return returnString.toString();
|
||||||
}
|
}
|
||||||
@@ -454,6 +487,12 @@ public class Action
|
|||||||
case playSound:
|
case playSound:
|
||||||
Actions.playSound(getParameter1(), getParameter2());
|
Actions.playSound(getParameter1(), getParameter2());
|
||||||
break;
|
break;
|
||||||
|
case createNotification:
|
||||||
|
Actions.createNotification(this);
|
||||||
|
break;
|
||||||
|
case closeNotification:
|
||||||
|
Actions.closeNotification(this);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
Miscellaneous.logEvent("w", "Action", context.getResources().getString(R.string.unknownActionSpecified), 3);
|
Miscellaneous.logEvent("w", "Action", context.getResources().getString(R.string.unknownActionSpecified), 3);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -1,14 +1,17 @@
|
|||||||
package com.jens.automation2;
|
package com.jens.automation2;
|
||||||
|
|
||||||
|
import static com.jens.automation2.receivers.NotificationListener.EXTRA_TEXT;
|
||||||
|
import static com.jens.automation2.receivers.NotificationListener.EXTRA_TITLE;
|
||||||
|
|
||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.annotation.TargetApi;
|
import android.annotation.TargetApi;
|
||||||
|
import android.app.Notification;
|
||||||
import android.app.NotificationManager;
|
import android.app.NotificationManager;
|
||||||
import android.app.PendingIntent;
|
import android.app.PendingIntent;
|
||||||
import android.app.admin.DevicePolicyManager;
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.bluetooth.BluetoothAdapter;
|
import android.bluetooth.BluetoothAdapter;
|
||||||
import android.bluetooth.BluetoothDevice;
|
import android.bluetooth.BluetoothDevice;
|
||||||
import android.bluetooth.BluetoothManager;
|
|
||||||
import android.bluetooth.BluetoothProfile;
|
import android.bluetooth.BluetoothProfile;
|
||||||
import android.content.ActivityNotFoundException;
|
import android.content.ActivityNotFoundException;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@@ -19,16 +22,17 @@ import android.net.ConnectivityManager;
|
|||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.net.wifi.WifiManager;
|
import android.net.wifi.WifiManager;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
import android.os.Bundle;
|
||||||
import android.os.PowerManager;
|
import android.os.PowerManager;
|
||||||
import android.os.PowerManager.WakeLock;
|
import android.os.PowerManager.WakeLock;
|
||||||
import android.os.VibrationEffect;
|
import android.os.VibrationEffect;
|
||||||
import android.os.Vibrator;
|
import android.os.Vibrator;
|
||||||
import android.provider.MediaStore;
|
import android.provider.MediaStore;
|
||||||
|
import android.service.notification.StatusBarNotification;
|
||||||
import android.telephony.SmsManager;
|
import android.telephony.SmsManager;
|
||||||
import android.telephony.SubscriptionManager;
|
import android.telephony.SubscriptionManager;
|
||||||
import android.telephony.TelephonyManager;
|
import android.telephony.TelephonyManager;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.WindowManager;
|
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.annotation.RequiresApi;
|
import androidx.annotation.RequiresApi;
|
||||||
@@ -37,7 +41,9 @@ import com.jens.automation2.actions.wifi_router.MyOnStartTetheringCallback;
|
|||||||
import com.jens.automation2.actions.wifi_router.MyOreoWifiManager;
|
import com.jens.automation2.actions.wifi_router.MyOreoWifiManager;
|
||||||
import com.jens.automation2.location.WifiBroadcastReceiver;
|
import com.jens.automation2.location.WifiBroadcastReceiver;
|
||||||
import com.jens.automation2.receivers.ConnectivityReceiver;
|
import com.jens.automation2.receivers.ConnectivityReceiver;
|
||||||
|
import com.jens.automation2.receivers.NotificationListener;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.http.client.HttpClient;
|
import org.apache.http.client.HttpClient;
|
||||||
import org.apache.http.conn.ClientConnectionManager;
|
import org.apache.http.conn.ClientConnectionManager;
|
||||||
import org.apache.http.conn.scheme.Scheme;
|
import org.apache.http.conn.scheme.Scheme;
|
||||||
@@ -54,6 +60,7 @@ import java.lang.reflect.Method;
|
|||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
import java.net.NetworkInterface;
|
import java.net.NetworkInterface;
|
||||||
import java.security.KeyStore;
|
import java.security.KeyStore;
|
||||||
|
import java.util.Calendar;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@@ -79,6 +86,106 @@ public class Actions
|
|||||||
public static final String wireguard_tunnel_down = "com.wireguard.android.action.SET_TUNNEL_DOWN";
|
public static final String wireguard_tunnel_down = "com.wireguard.android.action.SET_TUNNEL_DOWN";
|
||||||
public static final String wireguard_tunnel_refresh = "com.wireguard.android.action.REFRESH_TUNNEL_STATES";
|
public static final String wireguard_tunnel_refresh = "com.wireguard.android.action.REFRESH_TUNNEL_STATES";
|
||||||
|
|
||||||
|
public static void createNotification(Action action)
|
||||||
|
{
|
||||||
|
String[] elements = action.getParameter2().split(Action.actionParameter2Split);
|
||||||
|
|
||||||
|
Miscellaneous.logEvent("w", "createNotification", "Creating notification with title " + elements[0] + " and text " + elements[1], 3);
|
||||||
|
|
||||||
|
int notificationId = Math.round(Calendar.getInstance().getTimeInMillis()/1000);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
String title = Miscellaneous.replaceVariablesInText(elements[0], Miscellaneous.getAnyContext());
|
||||||
|
String text = Miscellaneous.replaceVariablesInText(elements[1], Miscellaneous.getAnyContext());
|
||||||
|
Miscellaneous.createDismissibleNotification(title, text, notificationId, false, AutomationService.NOTIFICATION_CHANNEL_ID_RULES, null);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Miscellaneous.logEvent("w", "createNotification", "Error occurred while replacing vars: " + Log.getStackTraceString(e), 3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequiresApi(api = Build.VERSION_CODES.M)
|
||||||
|
public static void closeNotification(Action action)
|
||||||
|
{
|
||||||
|
NotificationManager nm = (NotificationManager) Miscellaneous.getAnyContext().getSystemService(Context.NOTIFICATION_SERVICE);
|
||||||
|
for(StatusBarNotification n : nm.getActiveNotifications())
|
||||||
|
{
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
|
||||||
|
{
|
||||||
|
String[] params = action.getParameter2().split(Action.actionParameter2Split);
|
||||||
|
|
||||||
|
String myApp = params[0];
|
||||||
|
String myTitleDir = params[1];
|
||||||
|
String requiredTitle = params[2];
|
||||||
|
String myTextDir = params[3];
|
||||||
|
String requiredText;
|
||||||
|
if (params.length >= 5)
|
||||||
|
requiredText = params[4];
|
||||||
|
else
|
||||||
|
requiredText = "";
|
||||||
|
|
||||||
|
for (StatusBarNotification sbn : NotificationListener.getInstance().getActiveNotifications())
|
||||||
|
{
|
||||||
|
NotificationListener.SimpleNotification sn = NotificationListener.convertNotificationToSimpleNotification(true, sbn);
|
||||||
|
|
||||||
|
Miscellaneous.logEvent("i", "NotificationCloseCheck", "Checking if this notification should be closed in the context of rule " + action.getParentRule().getName() + ": "+ sn.toString(), 5);
|
||||||
|
|
||||||
|
if (!myApp.equals(Trigger.anyAppString))
|
||||||
|
{
|
||||||
|
if (!myApp.equalsIgnoreCase(sn.getApp()))
|
||||||
|
{
|
||||||
|
Miscellaneous.logEvent("i", "NotificationCloseCheck", "Notification app name does not match rule.", 5);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
Notifications from Automation are disregarded to avoid infinite loops.
|
||||||
|
*/
|
||||||
|
if(myApp.equals(BuildConfig.APPLICATION_ID))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
If there are multiple notifications ("stacked") title or text might be null:
|
||||||
|
https://stackoverflow.com/questions/28047767/notificationlistenerservice-not-reading-text-of-stacked-notifications
|
||||||
|
*/
|
||||||
|
|
||||||
|
// T I T L E
|
||||||
|
if (!StringUtils.isEmpty(requiredTitle))
|
||||||
|
{
|
||||||
|
if (!Miscellaneous.compare(myTitleDir, requiredTitle, sn.getTitle()))
|
||||||
|
{
|
||||||
|
Miscellaneous.logEvent("i", "NotificationCloseCheck", "Notification title does not match rule.", 5);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// T E X T
|
||||||
|
if (!StringUtils.isEmpty(requiredText))
|
||||||
|
{
|
||||||
|
if (!Miscellaneous.compare(myTextDir, requiredText, sn.getText()))
|
||||||
|
{
|
||||||
|
Miscellaneous.logEvent("i", "NotificationCloseCheck", "Notification text does not match rule.", 5);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Miscellaneous.logEvent("i", "NotificationCloseCheck", "All criteria matches. Closing notification: " + sbn.getNotification().toString(), 3);
|
||||||
|
if(NotificationListener.getInstance() != null)
|
||||||
|
NotificationListener.getInstance().dismissNotification(sbn);
|
||||||
|
else
|
||||||
|
Miscellaneous.logEvent("i", "NotificationCloseCheck", "NotificationListener instance is null. Can\'t close notification.", 3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static class WifiStuff
|
public static class WifiStuff
|
||||||
{
|
{
|
||||||
public static Boolean setWifi(Context context, Boolean desiredState, boolean toggleActionIfPossible)
|
public static Boolean setWifi(Context context, Boolean desiredState, boolean toggleActionIfPossible)
|
||||||
@@ -694,7 +801,7 @@ public class Actions
|
|||||||
// am.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_OFF);
|
// am.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_OFF);
|
||||||
// }
|
// }
|
||||||
// else
|
// else
|
||||||
// myAudioManager.setRingerMode(desiredSoundSetting);
|
myAudioManager.setRingerMode(desiredSoundSetting);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String getIPAddressUsb(final boolean useIPv4)
|
private static String getIPAddressUsb(final boolean useIPv4)
|
||||||
|
|||||||
+43
-33
@@ -10,6 +10,7 @@ import android.os.Bundle;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
|
import android.widget.CheckBox;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
@@ -21,7 +22,7 @@ import org.apache.commons.lang3.StringUtils;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public class ActivityMaintenance extends Activity
|
public class ActivityControlCenter extends Activity
|
||||||
{
|
{
|
||||||
final static int requestCodeImport = 1001;
|
final static int requestCodeImport = 1001;
|
||||||
final static int requestCodeExport = 1002;
|
final static int requestCodeExport = 1002;
|
||||||
@@ -30,13 +31,14 @@ public class ActivityMaintenance extends Activity
|
|||||||
final static String prefsFileName = "com.jens.automation2_preferences.xml";
|
final static String prefsFileName = "com.jens.automation2_preferences.xml";
|
||||||
|
|
||||||
TextView tvFileStoreLocation, tvAppVersion;
|
TextView tvFileStoreLocation, tvAppVersion;
|
||||||
Button bVolumeTest, bMoreSettings, bSettingsSetToDefault, bShareConfigAndLog, bImportConfiguration, bExportConfiguration;
|
Button bVolumeTest, bMoreSettings, bSettingsSetToDefault, bSendEmailToDev, bImportConfiguration, bExportConfiguration;
|
||||||
|
CheckBox chkShareConfigAndLog;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(@Nullable Bundle savedInstanceState)
|
protected void onCreate(@Nullable Bundle savedInstanceState)
|
||||||
{
|
{
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setContentView(R.layout.activity_maintenance);
|
setContentView(R.layout.activity_control_center);
|
||||||
|
|
||||||
bVolumeTest = (Button) findViewById(R.id.bVolumeTest);
|
bVolumeTest = (Button) findViewById(R.id.bVolumeTest);
|
||||||
bVolumeTest.setOnClickListener(new View.OnClickListener()
|
bVolumeTest.setOnClickListener(new View.OnClickListener()
|
||||||
@@ -44,18 +46,25 @@ public class ActivityMaintenance extends Activity
|
|||||||
@Override
|
@Override
|
||||||
public void onClick(View v)
|
public void onClick(View v)
|
||||||
{
|
{
|
||||||
Intent intent = new Intent(ActivityMaintenance.this, ActivityVolumeTest.class);
|
Intent intent = new Intent(ActivityControlCenter.this, ActivityVolumeTest.class);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
bShareConfigAndLog = (Button) findViewById(R.id.bShareConfigAndLog);
|
chkShareConfigAndLog = (CheckBox)findViewById(R.id.chkShareConfigAndLog);
|
||||||
bShareConfigAndLog.setOnClickListener(new View.OnClickListener()
|
bSendEmailToDev = (Button) findViewById(R.id.bSendEmailToDev);
|
||||||
|
bSendEmailToDev.setOnClickListener(new View.OnClickListener()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v)
|
public void onClick(View v)
|
||||||
{
|
{
|
||||||
getShareConfigAndLogDialogue(ActivityMaintenance.this).show();
|
if(chkShareConfigAndLog.isChecked())
|
||||||
|
getShareConfigAndLogDialogue(ActivityControlCenter.this).show();
|
||||||
|
else
|
||||||
|
{
|
||||||
|
String subject = "Automation";
|
||||||
|
Miscellaneous.sendEmail(ActivityControlCenter.this, "android-development@gmx.de", "Automation logs", getSystemInfo(), null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -65,17 +74,17 @@ public class ActivityMaintenance extends Activity
|
|||||||
@Override
|
@Override
|
||||||
public void onClick(View v)
|
public void onClick(View v)
|
||||||
{
|
{
|
||||||
getDefaultSettingsDialog(ActivityMaintenance.this).show();
|
getDefaultSettingsDialog(ActivityControlCenter.this).show();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Button bMoreSettings = (Button) findViewById(R.id.bMoreSettings);
|
bMoreSettings = (Button) findViewById(R.id.bMoreSettings);
|
||||||
bMoreSettings.setOnClickListener(new View.OnClickListener()
|
bMoreSettings.setOnClickListener(new View.OnClickListener()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v)
|
public void onClick(View v)
|
||||||
{
|
{
|
||||||
Intent myIntent = new Intent(ActivityMaintenance.this, ActivitySettings.class);
|
Intent myIntent = new Intent(ActivityControlCenter.this, ActivitySettings.class);
|
||||||
startActivityForResult(myIntent, requestCodeMoreSettings);
|
startActivityForResult(myIntent, requestCodeMoreSettings);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -123,7 +132,7 @@ public class ActivityMaintenance extends Activity
|
|||||||
if (AutomationService.isMyServiceRunning(this))
|
if (AutomationService.isMyServiceRunning(this))
|
||||||
AutomationService.getInstance().serviceInterface(AutomationService.serviceCommands.reloadSettings);
|
AutomationService.getInstance().serviceInterface(AutomationService.serviceCommands.reloadSettings);
|
||||||
|
|
||||||
if (AutomationService.isMyServiceRunning(ActivityMaintenance.this))
|
if (AutomationService.isMyServiceRunning(ActivityControlCenter.this))
|
||||||
Toast.makeText(this, getResources().getString(R.string.settingsWillTakeTime), Toast.LENGTH_LONG).show();
|
Toast.makeText(this, getResources().getString(R.string.settingsWillTakeTime), Toast.LENGTH_LONG).show();
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@@ -170,7 +179,7 @@ public class ActivityMaintenance extends Activity
|
|||||||
if (Miscellaneous.copyDocumentFileToFile(file, dstRules))
|
if (Miscellaneous.copyDocumentFileToFile(file, dstRules))
|
||||||
filesImported++;
|
filesImported++;
|
||||||
else
|
else
|
||||||
Toast.makeText(ActivityMaintenance.this, getResources().getString(R.string.rulesImportError), Toast.LENGTH_LONG).show();
|
Toast.makeText(ActivityControlCenter.this, getResources().getString(R.string.rulesImportError), Toast.LENGTH_LONG).show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (file.getName().equals(prefsFileName))
|
else if (file.getName().equals(prefsFileName))
|
||||||
@@ -183,7 +192,7 @@ public class ActivityMaintenance extends Activity
|
|||||||
if (Miscellaneous.copyDocumentFileToFile(file, dstPrefs))
|
if (Miscellaneous.copyDocumentFileToFile(file, dstPrefs))
|
||||||
filesImported++;
|
filesImported++;
|
||||||
else
|
else
|
||||||
Toast.makeText(ActivityMaintenance.this, getResources().getString(R.string.prefsImportError), Toast.LENGTH_LONG).show();
|
Toast.makeText(ActivityControlCenter.this, getResources().getString(R.string.prefsImportError), Toast.LENGTH_LONG).show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -191,12 +200,12 @@ public class ActivityMaintenance extends Activity
|
|||||||
if(applicableFilesFound > 0)
|
if(applicableFilesFound > 0)
|
||||||
{
|
{
|
||||||
if(filesImported == 0)
|
if(filesImported == 0)
|
||||||
Toast.makeText(ActivityMaintenance.this, getResources().getString(R.string.noFilesImported), Toast.LENGTH_LONG).show();
|
Toast.makeText(ActivityControlCenter.this, getResources().getString(R.string.noFilesImported), Toast.LENGTH_LONG).show();
|
||||||
else if(filesImported < applicableFilesFound)
|
else if(filesImported < applicableFilesFound)
|
||||||
Toast.makeText(ActivityMaintenance.this, getResources().getString(R.string.notAllFilesImported), Toast.LENGTH_LONG).show();
|
Toast.makeText(ActivityControlCenter.this, getResources().getString(R.string.notAllFilesImported), Toast.LENGTH_LONG).show();
|
||||||
else if (filesImported == applicableFilesFound)
|
else if (filesImported == applicableFilesFound)
|
||||||
{
|
{
|
||||||
Toast.makeText(ActivityMaintenance.this, getResources().getString(R.string.configurationImportedSuccessfully), Toast.LENGTH_LONG).show();
|
Toast.makeText(ActivityControlCenter.this, getResources().getString(R.string.configurationImportedSuccessfully), Toast.LENGTH_LONG).show();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -208,19 +217,19 @@ public class ActivityMaintenance extends Activity
|
|||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
Miscellaneous.logEvent("e", "Reading import", "Rules re-read failed: " + Log.getStackTraceString(e), 1);
|
Miscellaneous.logEvent("e", "Reading import", "Rules re-read failed: " + Log.getStackTraceString(e), 1);
|
||||||
Toast.makeText(ActivityMaintenance.this, getResources().getString(R.string.errorReadingPoisAndRulesFromFile), Toast.LENGTH_LONG).show();
|
Toast.makeText(ActivityControlCenter.this, getResources().getString(R.string.errorReadingPoisAndRulesFromFile), Toast.LENGTH_LONG).show();
|
||||||
}
|
}
|
||||||
|
|
||||||
Settings.readFromPersistentStorage(ActivityMaintenance.this);
|
Settings.readFromPersistentStorage(ActivityControlCenter.this);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Toast.makeText(ActivityMaintenance.this, getResources().getString(R.string.noFilesImported), Toast.LENGTH_LONG).show();
|
Toast.makeText(ActivityControlCenter.this, getResources().getString(R.string.noFilesImported), Toast.LENGTH_LONG).show();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Toast.makeText(ActivityMaintenance.this, getResources().getString(R.string.noApplicableFilesFoundInDirectory), Toast.LENGTH_LONG).show();
|
Toast.makeText(ActivityControlCenter.this, getResources().getString(R.string.noApplicableFilesFoundInDirectory), Toast.LENGTH_LONG).show();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Toast.makeText(ActivityMaintenance.this, getResources().getString(R.string.noApplicableFilesFoundInDirectory), Toast.LENGTH_LONG).show();
|
Toast.makeText(ActivityControlCenter.this, getResources().getString(R.string.noApplicableFilesFoundInDirectory), Toast.LENGTH_LONG).show();
|
||||||
}
|
}
|
||||||
|
|
||||||
void exportFiles(Uri uriTree)
|
void exportFiles(Uri uriTree)
|
||||||
@@ -252,12 +261,12 @@ public class ActivityMaintenance extends Activity
|
|||||||
if(dstRules.canWrite() && dstPrefs.canWrite())
|
if(dstRules.canWrite() && dstPrefs.canWrite())
|
||||||
{
|
{
|
||||||
if(Miscellaneous.copyFileToDocumentFile(srcRules, dstRules) && Miscellaneous.copyFileToDocumentFile(srcPrefs, dstPrefs))
|
if(Miscellaneous.copyFileToDocumentFile(srcRules, dstRules) && Miscellaneous.copyFileToDocumentFile(srcPrefs, dstPrefs))
|
||||||
Toast.makeText(ActivityMaintenance.this, getResources().getString(R.string.configurationExportedSuccessfully), Toast.LENGTH_LONG).show();
|
Toast.makeText(ActivityControlCenter.this, getResources().getString(R.string.configurationExportedSuccessfully), Toast.LENGTH_LONG).show();
|
||||||
else
|
else
|
||||||
Toast.makeText(ActivityMaintenance.this, getResources().getString(R.string.ConfigurationExportError), Toast.LENGTH_LONG).show();
|
Toast.makeText(ActivityControlCenter.this, getResources().getString(R.string.ConfigurationExportError), Toast.LENGTH_LONG).show();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Toast.makeText(ActivityMaintenance.this, getResources().getString(R.string.ConfigurationExportError), Toast.LENGTH_LONG).show();
|
Toast.makeText(ActivityControlCenter.this, getResources().getString(R.string.ConfigurationExportError), Toast.LENGTH_LONG).show();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static AlertDialog getDefaultSettingsDialog(final Context context)
|
private static AlertDialog getDefaultSettingsDialog(final Context context)
|
||||||
@@ -296,32 +305,33 @@ public class ActivityMaintenance extends Activity
|
|||||||
srcFilesList.add(Miscellaneous.getWriteableFolder() + "/../shared_prefs/" + prefsFileName);
|
srcFilesList.add(Miscellaneous.getWriteableFolder() + "/../shared_prefs/" + prefsFileName);
|
||||||
|
|
||||||
String logFilePath = Miscellaneous.getWriteableFolder() + "/" + Miscellaneous.logFileName;
|
String logFilePath = Miscellaneous.getWriteableFolder() + "/" + Miscellaneous.logFileName;
|
||||||
if((new File(logFilePath)).exists())
|
if ((new File(logFilePath)).exists())
|
||||||
srcFilesList.add(logFilePath);
|
srcFilesList.add(logFilePath);
|
||||||
|
|
||||||
String logFilePathArchive = Miscellaneous.getWriteableFolder() + "/" + Miscellaneous.logFileName + "-old";
|
String logFilePathArchive = Miscellaneous.getWriteableFolder() + "/" + Miscellaneous.logFileName + "-old";
|
||||||
if((new File(logFilePathArchive)).exists())
|
if ((new File(logFilePathArchive)).exists())
|
||||||
srcFilesList.add(logFilePathArchive);
|
srcFilesList.add(logFilePathArchive);
|
||||||
|
|
||||||
String[] srcFiles = srcFilesList.toArray(new String[srcFilesList.size()]);
|
String[] srcFiles = srcFilesList.toArray(new String[srcFilesList.size()]);
|
||||||
|
|
||||||
if(dstZipFile.exists())
|
if (dstZipFile.exists())
|
||||||
dstZipFile.delete();
|
dstZipFile.delete();
|
||||||
|
|
||||||
Miscellaneous.zip(srcFiles, dstZipFile.getAbsolutePath());
|
Miscellaneous.zip(srcFiles, dstZipFile.getAbsolutePath());
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Without root the zip file in the cache directory is not directly accessible.
|
Without root the zip file in the cache directory is not directly accessible.
|
||||||
But have to route it through this content provider crap.
|
But have to route it through this content provider crap.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
String subject = "Automation logs";
|
String subject = "Automation logs";
|
||||||
|
|
||||||
Uri uri = Uri.parse("content://com.jens.automation2/" + Settings.zipFileName);
|
Uri uri = Uri.parse("content://com.jens.automation2/" + Settings.zipFileName);
|
||||||
|
|
||||||
Miscellaneous.sendEmail(ActivityMaintenance.this, "android-development@gmx.de", "Automation logs", getSystemInfo(), uri);
|
Miscellaneous.sendEmail(ActivityControlCenter.this, "android-development@gmx.de", "Automation logs", getSystemInfo(), uri);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
alertDialogBuilder.setNegativeButton(context.getResources().getString(R.string.no), null);
|
alertDialogBuilder.setNegativeButton(context.getResources().getString(R.string.no), null);
|
||||||
AlertDialog alertDialog = alertDialogBuilder.create();
|
AlertDialog alertDialog = alertDialogBuilder.create();
|
||||||
|
|
||||||
@@ -367,7 +377,7 @@ public class ActivityMaintenance extends Activity
|
|||||||
{
|
{
|
||||||
// if you reach this place, it means there is no any file
|
// if you reach this place, it means there is no any file
|
||||||
// explorer app installed on your device
|
// explorer app installed on your device
|
||||||
Toast.makeText(ActivityMaintenance.this, getResources().getString(R.string.noFileManageInstalled), Toast.LENGTH_LONG).show();
|
Toast.makeText(ActivityControlCenter.this, getResources().getString(R.string.noFileManageInstalled), Toast.LENGTH_LONG).show();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -184,8 +184,16 @@ public class ActivityMainProfiles extends ActivityGeneric
|
|||||||
startActivityForResult(manageSpecificProfileIntent, 2000);
|
startActivityForResult(manageSpecificProfileIntent, 2000);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if(profile.delete(myAutomationService))
|
Rule user = profile.isInUseByRules();
|
||||||
updateListView();
|
if(user == null)
|
||||||
|
{
|
||||||
|
if (profile.delete(ActivityMainProfiles.this))
|
||||||
|
updateListView();
|
||||||
|
else
|
||||||
|
Toast.makeText(ActivityMainProfiles.this, getResources().getString(R.string.profileCouldNotBeDeleted), Toast.LENGTH_LONG).show();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Toast.makeText(ActivityMainProfiles.this, String.format(getResources().getString(R.string.ruleXIsUsingProfileY), user.getName(), profile.getName()), Toast.LENGTH_LONG).show();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ public class ActivityMainRules extends ActivityGeneric
|
|||||||
else
|
else
|
||||||
holder = (RuleHolder) v.getTag();
|
holder = (RuleHolder) v.getTag();
|
||||||
|
|
||||||
System.out.println("Position ["+position+"]");
|
// System.out.println("Position ["+position+"]");
|
||||||
Rule r = Rule.getRuleCollection().get(position);
|
Rule r = Rule.getRuleCollection().get(position);
|
||||||
holder.tvRuleName.setText(r.getName());
|
holder.tvRuleName.setText(r.getName());
|
||||||
if(r.isRuleActive())
|
if(r.isRuleActive())
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package com.jens.automation2;
|
|||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.app.PendingIntent;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
@@ -11,7 +10,6 @@ import android.net.Uri;
|
|||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.util.Xml;
|
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
@@ -29,29 +27,25 @@ import androidx.core.text.HtmlCompat;
|
|||||||
|
|
||||||
import com.jens.automation2.AutomationService.serviceCommands;
|
import com.jens.automation2.AutomationService.serviceCommands;
|
||||||
import com.jens.automation2.Trigger.Trigger_Enum;
|
import com.jens.automation2.Trigger.Trigger_Enum;
|
||||||
import com.jens.automation2.location.CellLocationChangedReceiver;
|
|
||||||
import com.jens.automation2.location.LocationProvider;
|
import com.jens.automation2.location.LocationProvider;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.lang.reflect.Array;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
|
|
||||||
@SuppressLint("NewApi")
|
@SuppressLint("NewApi")
|
||||||
public class ActivityMainScreen extends ActivityGeneric
|
public class ActivityMainScreen extends ActivityGeneric
|
||||||
{
|
{
|
||||||
private static boolean guiChangeInProgress = false;
|
static boolean guiChangeInProgress = false;
|
||||||
|
static ActivityMainScreen activityMainScreenInstance = null;
|
||||||
|
static boolean updateNoteDisplayed = false;
|
||||||
|
static boolean uiUpdateRunning = false;
|
||||||
|
|
||||||
private static ActivityMainScreen activityMainScreenInstance = null;
|
ToggleButton toggleService, tbLockSound;
|
||||||
private ToggleButton toggleService, tbLockSound;
|
Button bShowHelp, bPrivacy, bAddSoundLockTIme, bDonate, bControlCenter;
|
||||||
private Button bShowHelp, bPrivacy, bSettingsErase, bAddSoundLockTIme, bDonate;
|
TextView tvActivePoi, tvClosestPoi, tvLastRule, tvMainScreenNotePermissions, tvMainScreenNoteFeaturesFromOtherFlavor, tvMainScreenNoteLocationImpossibleBlameGoogle, tvMainScreenNoteNews, tvLockSoundDuration;
|
||||||
private TextView tvActivePoi, tvClosestPoi, tvLastRule, tvMainScreenNotePermissions, tvMainScreenNoteFeaturesFromOtherFlavor, tvMainScreenNoteLocationImpossibleBlameGoogle, tvMainScreenNoteNews, tvlockSoundDuration;
|
|
||||||
private static boolean updateNoteDisplayed = false;
|
|
||||||
|
|
||||||
private ListView lvRuleHistory;
|
ListView lvRuleHistory;
|
||||||
private ArrayAdapter<Rule> ruleHistoryListViewAdapter;
|
ArrayAdapter<Rule> ruleHistoryListViewAdapter;
|
||||||
|
|
||||||
private static boolean uiUpdateRunning = false;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState)
|
public void onCreate(Bundle savedInstanceState)
|
||||||
@@ -79,7 +73,7 @@ public class ActivityMainScreen extends ActivityGeneric
|
|||||||
tvMainScreenNoteFeaturesFromOtherFlavor = (TextView) findViewById(R.id.tvMainScreenNoteFeaturesFromOtherFlavor);
|
tvMainScreenNoteFeaturesFromOtherFlavor = (TextView) findViewById(R.id.tvMainScreenNoteFeaturesFromOtherFlavor);
|
||||||
tvMainScreenNoteLocationImpossibleBlameGoogle = (TextView) findViewById(R.id.tvMainScreenNoteLocationImpossibleBlameGoogle);
|
tvMainScreenNoteLocationImpossibleBlameGoogle = (TextView) findViewById(R.id.tvMainScreenNoteLocationImpossibleBlameGoogle);
|
||||||
tvMainScreenNoteNews = (TextView) findViewById(R.id.tvMainScreenNoteNews);
|
tvMainScreenNoteNews = (TextView) findViewById(R.id.tvMainScreenNoteNews);
|
||||||
tvlockSoundDuration = (TextView)findViewById(R.id.tvlockSoundDuration);
|
tvLockSoundDuration = (TextView)findViewById(R.id.tvlockSoundDuration);
|
||||||
tbLockSound = (ToggleButton) findViewById(R.id.tbLockSound);
|
tbLockSound = (ToggleButton) findViewById(R.id.tbLockSound);
|
||||||
toggleService = (ToggleButton) findViewById(R.id.tbArmMastListener);
|
toggleService = (ToggleButton) findViewById(R.id.tbArmMastListener);
|
||||||
|
|
||||||
@@ -99,7 +93,8 @@ public class ActivityMainScreen extends ActivityGeneric
|
|||||||
if (toggleService.isChecked())
|
if (toggleService.isChecked())
|
||||||
{
|
{
|
||||||
startAutomationService(getBaseContext(), false);
|
startAutomationService(getBaseContext(), false);
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
stopAutomationService();
|
stopAutomationService();
|
||||||
}
|
}
|
||||||
@@ -147,13 +142,13 @@ public class ActivityMainScreen extends ActivityGeneric
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Button bSettings = (Button) findViewById(R.id.bSettings);
|
bControlCenter = (Button) findViewById(R.id.bControlCenter);
|
||||||
bSettings.setOnClickListener(new OnClickListener()
|
bControlCenter.setOnClickListener(new OnClickListener()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v)
|
public void onClick(View v)
|
||||||
{
|
{
|
||||||
Intent myIntent = new Intent(ActivityMainScreen.this, ActivityMaintenance.class);
|
Intent myIntent = new Intent(ActivityMainScreen.this, ActivityControlCenter.class);
|
||||||
startActivity(myIntent);
|
startActivity(myIntent);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -395,21 +390,21 @@ public class ActivityMainScreen extends ActivityGeneric
|
|||||||
long millis = end.getTimeInMillis() - now.getTimeInMillis();
|
long millis = end.getTimeInMillis() - now.getTimeInMillis();
|
||||||
long minutes = millis/1000/60;
|
long minutes = millis/1000/60;
|
||||||
if(minutes < 60)
|
if(minutes < 60)
|
||||||
activityMainScreenInstance.tvlockSoundDuration.setText(String.valueOf(minutes + " min..."));
|
activityMainScreenInstance.tvLockSoundDuration.setText(String.valueOf(minutes + " min..."));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
double hours = (double)minutes / 60.0;
|
double hours = (double)minutes / 60.0;
|
||||||
activityMainScreenInstance.tvlockSoundDuration.setText(String.valueOf(Math.round(hours * 100.0) / 100.0) + " h...");
|
activityMainScreenInstance.tvLockSoundDuration.setText(String.valueOf(Math.round(hours * 100.0) / 100.0) + " h...");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
activityMainScreenInstance.tvlockSoundDuration.setText(String.valueOf(""));
|
activityMainScreenInstance.tvLockSoundDuration.setText(String.valueOf(""));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
activityMainScreenInstance.tbLockSound.setChecked(false);
|
activityMainScreenInstance.tbLockSound.setChecked(false);
|
||||||
activityMainScreenInstance.tbLockSound.setEnabled(false);
|
activityMainScreenInstance.tbLockSound.setEnabled(false);
|
||||||
activityMainScreenInstance.tvlockSoundDuration.setText("");
|
activityMainScreenInstance.tvLockSoundDuration.setText("");
|
||||||
}
|
}
|
||||||
Settings.writeSettings(activityMainScreenInstance);
|
Settings.writeSettings(activityMainScreenInstance);
|
||||||
// uiUpdateRunning = false;
|
// uiUpdateRunning = false;
|
||||||
|
|||||||
@@ -10,10 +10,13 @@ import android.widget.CompoundButton;
|
|||||||
import android.widget.SeekBar;
|
import android.widget.SeekBar;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import androidx.annotation.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
public class ActivityManageActionBrightnessSetting extends Activity
|
public class ActivityManageActionBrightnessSetting extends Activity
|
||||||
{
|
{
|
||||||
|
public static final String intentNameAutoBrightness = "autoBrightness";
|
||||||
|
public static final String intentNameBrightnessValue = "brightnessValue";
|
||||||
|
|
||||||
CheckBox chkAutoBrightness;
|
CheckBox chkAutoBrightness;
|
||||||
SeekBar sbBrightness;
|
SeekBar sbBrightness;
|
||||||
Button bApplyBrightness;
|
Button bApplyBrightness;
|
||||||
@@ -22,7 +25,7 @@ public class ActivityManageActionBrightnessSetting extends Activity
|
|||||||
@Override
|
@Override
|
||||||
protected void onCreate(@Nullable Bundle savedInstanceState)
|
protected void onCreate(@Nullable Bundle savedInstanceState)
|
||||||
{
|
{
|
||||||
setContentView(R.layout.activity_manage_brightness_setting);
|
setContentView(R.layout.activity_manage_action_brightness_settings);
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
chkAutoBrightness = (CheckBox)findViewById(R.id.chkAutoBrightness);
|
chkAutoBrightness = (CheckBox)findViewById(R.id.chkAutoBrightness);
|
||||||
@@ -32,11 +35,11 @@ public class ActivityManageActionBrightnessSetting extends Activity
|
|||||||
|
|
||||||
Intent input = getIntent();
|
Intent input = getIntent();
|
||||||
|
|
||||||
if(input.hasExtra("autoBrightness"))
|
if(input.hasExtra(intentNameAutoBrightness))
|
||||||
chkAutoBrightness.setChecked(input.getBooleanExtra("autoBrightness", false));
|
chkAutoBrightness.setChecked(input.getBooleanExtra(intentNameAutoBrightness, false));
|
||||||
|
|
||||||
if(input.hasExtra("brightnessValue"))
|
if(input.hasExtra(intentNameBrightnessValue))
|
||||||
sbBrightness.setProgress(input.getIntExtra("brightnessValue", 0));
|
sbBrightness.setProgress(input.getIntExtra(intentNameBrightnessValue, 0));
|
||||||
|
|
||||||
bApplyBrightness.setOnClickListener(new View.OnClickListener()
|
bApplyBrightness.setOnClickListener(new View.OnClickListener()
|
||||||
{
|
{
|
||||||
@@ -44,8 +47,8 @@ public class ActivityManageActionBrightnessSetting extends Activity
|
|||||||
public void onClick(View view)
|
public void onClick(View view)
|
||||||
{
|
{
|
||||||
Intent answer = new Intent();
|
Intent answer = new Intent();
|
||||||
answer.putExtra("autoBrightness", chkAutoBrightness.isChecked());
|
answer.putExtra(intentNameAutoBrightness, chkAutoBrightness.isChecked());
|
||||||
answer.putExtra("brightnessValue", sbBrightness.getProgress());
|
answer.putExtra(intentNameBrightnessValue, sbBrightness.getProgress());
|
||||||
setResult(RESULT_OK, answer);
|
setResult(RESULT_OK, answer);
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,397 @@
|
|||||||
|
package com.jens.automation2;
|
||||||
|
|
||||||
|
import static com.jens.automation2.Trigger.triggerParameter2Split;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.app.AlertDialog;
|
||||||
|
import android.app.ProgressDialog;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.DialogInterface;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.pm.ActivityInfo;
|
||||||
|
import android.content.pm.ApplicationInfo;
|
||||||
|
import android.content.pm.PackageInfo;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
|
import android.os.AsyncTask;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.View.OnClickListener;
|
||||||
|
import android.widget.ArrayAdapter;
|
||||||
|
import android.widget.Button;
|
||||||
|
import android.widget.CheckBox;
|
||||||
|
import android.widget.CompoundButton;
|
||||||
|
import android.widget.EditText;
|
||||||
|
import android.widget.Spinner;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class ActivityManageActionCloseNotification extends Activity
|
||||||
|
{
|
||||||
|
public static final String intentNameNotificationApp = "app";
|
||||||
|
public static final String intentNameNotificationTitleDir = "titleDir";
|
||||||
|
public static final String intentNameNotificationTitle = "title";
|
||||||
|
public static final String intentNameNotificationTextDir = "textDir";
|
||||||
|
public static final String intentNameNotificationText = "text";
|
||||||
|
public static final String intentNameNotificationDirection = "direction";
|
||||||
|
|
||||||
|
boolean edit = false;
|
||||||
|
ProgressDialog progressDialog = null;
|
||||||
|
|
||||||
|
EditText etNotificationTitle, etNotificationText;
|
||||||
|
Button bSelectApp, bSaveActionCloseNotification;
|
||||||
|
Spinner spinnerTitleDirection, spinnerTextDirection;
|
||||||
|
TextView tvSelectedApplication;
|
||||||
|
|
||||||
|
private static List<PackageInfo> pInfos = null;
|
||||||
|
public static Trigger resultingTrigger;
|
||||||
|
|
||||||
|
private static String[] directions;
|
||||||
|
|
||||||
|
ArrayAdapter<String> directionSpinnerAdapter;
|
||||||
|
|
||||||
|
public static void getActivityList(final Context context)
|
||||||
|
{
|
||||||
|
if(pInfos == null)
|
||||||
|
{
|
||||||
|
pInfos = context.getPackageManager().getInstalledPackages(PackageManager.GET_ACTIVITIES);
|
||||||
|
Collections.sort(pInfos, new Comparator<PackageInfo>()
|
||||||
|
{
|
||||||
|
public int compare(PackageInfo obj1, PackageInfo obj2)
|
||||||
|
{
|
||||||
|
String name1 = "";
|
||||||
|
String name2 = "";
|
||||||
|
|
||||||
|
ApplicationInfo aInfo1 = obj1.applicationInfo;
|
||||||
|
if (aInfo1 != null)
|
||||||
|
{
|
||||||
|
name1 = (String) context.getPackageManager().getApplicationLabel(aInfo1);
|
||||||
|
}
|
||||||
|
ApplicationInfo aInfo2 = obj2.applicationInfo;
|
||||||
|
if (aInfo2 != null)
|
||||||
|
{
|
||||||
|
name2 = (String) context.getPackageManager().getApplicationLabel(aInfo2);
|
||||||
|
}
|
||||||
|
|
||||||
|
return name1.compareTo(name2);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String[] getApplicationNameListString(Context myContext)
|
||||||
|
{
|
||||||
|
// Generate the actual list
|
||||||
|
getActivityList(myContext);
|
||||||
|
|
||||||
|
ArrayList<String> returnList = new ArrayList<String>();
|
||||||
|
|
||||||
|
for (PackageInfo pInfo : pInfos)
|
||||||
|
{
|
||||||
|
ApplicationInfo aInfo = pInfo.applicationInfo;
|
||||||
|
if (aInfo != null)
|
||||||
|
{
|
||||||
|
String aLabel;
|
||||||
|
|
||||||
|
aLabel = (String) myContext.getPackageManager().getApplicationLabel(aInfo);
|
||||||
|
|
||||||
|
ActivityInfo[] aInfos = pInfo.activities;
|
||||||
|
if (aInfos != null && aInfos.length > 0) // Only put Applications into the list that have packages.
|
||||||
|
{
|
||||||
|
if(!returnList.contains(aLabel))
|
||||||
|
returnList.add(aLabel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return returnList.toArray(new String[returnList.size()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String[] getPackageListString(Context myContext, String applicationLabel)
|
||||||
|
{
|
||||||
|
// Generate the actual list
|
||||||
|
getActivityList(myContext);
|
||||||
|
|
||||||
|
ArrayList<String> returnList = new ArrayList<String>();
|
||||||
|
|
||||||
|
for (PackageInfo pInfo : pInfos)
|
||||||
|
{
|
||||||
|
if(myContext.getPackageManager().getApplicationLabel(pInfo.applicationInfo).equals(applicationLabel))
|
||||||
|
{
|
||||||
|
ActivityInfo[] aInfos = pInfo.activities;
|
||||||
|
if (aInfos != null && aInfos.length > 0)
|
||||||
|
{
|
||||||
|
returnList.add(pInfo.packageName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return returnList.toArray(new String[returnList.size()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String[] getPackageListString(Context myContext)
|
||||||
|
{
|
||||||
|
// Generate the actual list
|
||||||
|
getActivityList(myContext);
|
||||||
|
|
||||||
|
ArrayList<String> returnList = new ArrayList<String>();
|
||||||
|
|
||||||
|
for (PackageInfo pInfo : pInfos)
|
||||||
|
{
|
||||||
|
ActivityInfo[] aInfos = pInfo.activities;
|
||||||
|
if (aInfos != null && aInfos.length > 0)
|
||||||
|
{
|
||||||
|
returnList.add(pInfo.packageName);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Miscellaneous.logEvent("w", "Empty Application", "Application " + myContext.getPackageManager().getApplicationLabel(pInfo.applicationInfo) + " doesn\'t have packages.", 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
return returnList.toArray(new String[returnList.size()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String[] getActivityListForPackageName(String packageName)
|
||||||
|
{
|
||||||
|
ArrayList<String> returnList = new ArrayList<String>();
|
||||||
|
|
||||||
|
for (PackageInfo pInfo : pInfos)
|
||||||
|
{
|
||||||
|
if(pInfo.packageName.equals(packageName))
|
||||||
|
{
|
||||||
|
ActivityInfo[] aInfos = pInfo.activities;
|
||||||
|
if (aInfos != null)
|
||||||
|
{
|
||||||
|
for (ActivityInfo activityInfo : aInfos)
|
||||||
|
{
|
||||||
|
returnList.add(activityInfo.name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return returnList.toArray(new String[returnList.size()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ActivityInfo getActivityInfoForPackageNameAndActivityName(String packageName, String activityName)
|
||||||
|
{
|
||||||
|
for (PackageInfo pInfo : pInfos)
|
||||||
|
{
|
||||||
|
if(pInfo.packageName.equals(packageName))
|
||||||
|
{
|
||||||
|
ActivityInfo[] aInfos = pInfo.activities;
|
||||||
|
if (aInfos != null)
|
||||||
|
{
|
||||||
|
for (ActivityInfo activityInfo : aInfos)
|
||||||
|
{
|
||||||
|
if(activityInfo.name.equals(activityName))
|
||||||
|
return activityInfo;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private AlertDialog getActionStartActivityDialog1()
|
||||||
|
{
|
||||||
|
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
|
||||||
|
alertDialogBuilder.setTitle(getResources().getString(R.string.selectApplication));
|
||||||
|
final String[] applicationArray = ActivityManageActionCloseNotification.getApplicationNameListString(this);
|
||||||
|
alertDialogBuilder.setItems(applicationArray, new DialogInterface.OnClickListener()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which)
|
||||||
|
{
|
||||||
|
dialog.dismiss();
|
||||||
|
getActionStartActivityDialog2(applicationArray[which]).show();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
AlertDialog alertDialog = alertDialogBuilder.create();
|
||||||
|
|
||||||
|
return alertDialog;
|
||||||
|
}
|
||||||
|
private AlertDialog getActionStartActivityDialog2(String applicationName)
|
||||||
|
{
|
||||||
|
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
|
||||||
|
alertDialogBuilder.setTitle(getResources().getString(R.string.selectPackageOfApplication));
|
||||||
|
final String[] packageArray = ActivityManageActionCloseNotification.getPackageListString(this, applicationName);
|
||||||
|
alertDialogBuilder.setItems(packageArray, new DialogInterface.OnClickListener()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which)
|
||||||
|
{
|
||||||
|
//getActionStartActivityDialog3(packageArray[which]).show();
|
||||||
|
//Miscellaneous.messageBox(getResources().getString(R.string.hint), getResources().getString(R.string.chooseActivityHint), ActivityManageNotificationTrigger.this).show();
|
||||||
|
tvSelectedApplication.setText(packageArray[which]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
AlertDialog alertDialog = alertDialogBuilder.create();
|
||||||
|
|
||||||
|
return alertDialog;
|
||||||
|
}
|
||||||
|
private AlertDialog getActionStartActivityDialog3(final String packageName)
|
||||||
|
{
|
||||||
|
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
|
||||||
|
alertDialogBuilder.setTitle(getResources().getString(R.string.selectActivityToBeStarted));
|
||||||
|
final String activityArray[] = ActivityManageActionCloseNotification.getActivityListForPackageName(packageName);
|
||||||
|
alertDialogBuilder.setItems(activityArray, new DialogInterface.OnClickListener()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which)
|
||||||
|
{
|
||||||
|
ActivityInfo ai = ActivityManageActionCloseNotification.getActivityInfoForPackageNameAndActivityName(packageName, activityArray[which]);
|
||||||
|
tvSelectedApplication.setText(ai.packageName + ";" + ai.name);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
AlertDialog alertDialog = alertDialogBuilder.create();
|
||||||
|
|
||||||
|
return alertDialog;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState)
|
||||||
|
{
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
setContentView(R.layout.activity_manage_action_close_notification);
|
||||||
|
|
||||||
|
etNotificationTitle = (EditText)findViewById(R.id.etNotificationTitle);
|
||||||
|
etNotificationText = (EditText)findViewById(R.id.etNotificationText);
|
||||||
|
bSelectApp = (Button)findViewById(R.id.bSelectApp);
|
||||||
|
bSaveActionCloseNotification = (Button)findViewById(R.id.bSaveActionCloseNotification);
|
||||||
|
spinnerTitleDirection = (Spinner)findViewById(R.id.spinnerTitleDirection);
|
||||||
|
spinnerTextDirection = (Spinner)findViewById(R.id.spinnerTextDirection);
|
||||||
|
tvSelectedApplication = (TextView)findViewById(R.id.etActivityOrActionPath);
|
||||||
|
|
||||||
|
directions = new String[] {
|
||||||
|
getResources().getString(R.string.directionStringEquals),
|
||||||
|
getResources().getString(R.string.directionStringContains),
|
||||||
|
getResources().getString(R.string.directionStringStartsWith),
|
||||||
|
getResources().getString(R.string.directionStringEndsWith),
|
||||||
|
getResources().getString(R.string.directionStringNotEquals)
|
||||||
|
};
|
||||||
|
|
||||||
|
directionSpinnerAdapter = new ArrayAdapter<String>(this, R.layout.text_view_for_poi_listview_mediumtextsize, ActivityManageActionCloseNotification.directions);
|
||||||
|
spinnerTitleDirection.setAdapter(directionSpinnerAdapter);
|
||||||
|
spinnerTextDirection.setAdapter(directionSpinnerAdapter);
|
||||||
|
directionSpinnerAdapter.notifyDataSetChanged();
|
||||||
|
|
||||||
|
bSelectApp.setOnClickListener(new OnClickListener()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void onClick(View v)
|
||||||
|
{
|
||||||
|
GetActivityListTask getActivityListTask = new GetActivityListTask();
|
||||||
|
getActivityListTask.execute();
|
||||||
|
progressDialog = ProgressDialog.show(ActivityManageActionCloseNotification.this, "", ActivityManageActionCloseNotification.this.getResources().getString(R.string.gettingListOfInstalledApplications));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
bSaveActionCloseNotification.setOnClickListener(new OnClickListener()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void onClick(View v)
|
||||||
|
{
|
||||||
|
String app;
|
||||||
|
if(tvSelectedApplication.getText().toString().equalsIgnoreCase(getResources().getString(R.string.anyApp)))
|
||||||
|
app = Trigger.anyAppString;
|
||||||
|
else
|
||||||
|
app = tvSelectedApplication.getText().toString();
|
||||||
|
|
||||||
|
String titleDir = Trigger.getMatchCode(spinnerTitleDirection.getSelectedItem().toString());
|
||||||
|
String title = etNotificationTitle.getText().toString();
|
||||||
|
String textDir = Trigger.getMatchCode(spinnerTextDirection.getSelectedItem().toString());
|
||||||
|
String text = etNotificationText.getText().toString();
|
||||||
|
|
||||||
|
Intent responseData = new Intent();
|
||||||
|
if(edit)
|
||||||
|
{
|
||||||
|
// editedNotificationAction.setTriggerParameter(chkNotificationDirection.isChecked());
|
||||||
|
responseData.putExtra(ActivityManageRule.intentNameActionParameter2, app + Action.actionParameter2Split + titleDir + Action.actionParameter2Split + title + Action.actionParameter2Split + textDir + Action.actionParameter2Split + text);
|
||||||
|
ActivityManageActionCloseNotification.this.setResult(RESULT_OK, responseData);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// data.putExtra(intentNameNotificationDirection, chkNotificationDirection.isChecked());
|
||||||
|
responseData.putExtra(ActivityManageRule.intentNameActionParameter2,
|
||||||
|
app + Action.actionParameter2Split +
|
||||||
|
titleDir + Action.actionParameter2Split +
|
||||||
|
title + Action.actionParameter2Split +
|
||||||
|
textDir + Action.actionParameter2Split +
|
||||||
|
text
|
||||||
|
);
|
||||||
|
// data.putExtra(intentNameNotificationApp, app);
|
||||||
|
// data.putExtra(intentNameNotificationTitleDir, titleDir);
|
||||||
|
// data.putExtra(intentNameNotificationTitle, title);
|
||||||
|
// data.putExtra(intentNameNotificationTextDir, textDir);
|
||||||
|
// data.putExtra(intentNameNotificationText, text);
|
||||||
|
ActivityManageActionCloseNotification.this.setResult(RESULT_OK, responseData);
|
||||||
|
}
|
||||||
|
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Intent i = getIntent();
|
||||||
|
if(!StringUtils.isBlank(i.getStringExtra(ActivityManageRule.intentNameActionParameter2)))
|
||||||
|
{
|
||||||
|
edit = true;
|
||||||
|
loadValuesIntoGui(i.getStringExtra(ActivityManageRule.intentNameActionParameter2));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void loadValuesIntoGui(String param)
|
||||||
|
{
|
||||||
|
String[] params = param.split(Action.actionParameter2Split);
|
||||||
|
|
||||||
|
String app = params[0];
|
||||||
|
String titleDir = params[1];
|
||||||
|
String title = params[2];
|
||||||
|
String textDir = params[3];
|
||||||
|
String text;
|
||||||
|
if (params.length >= 5)
|
||||||
|
text = params[4];
|
||||||
|
else
|
||||||
|
text = "";
|
||||||
|
|
||||||
|
if(!app.equals(Trigger.anyAppString))
|
||||||
|
tvSelectedApplication.setText(app);
|
||||||
|
|
||||||
|
for(int i = 0; i < directions.length; i++)
|
||||||
|
{
|
||||||
|
if(Trigger.getMatchCode(directions[i]).equalsIgnoreCase(titleDir))
|
||||||
|
spinnerTitleDirection.setSelection(i);
|
||||||
|
|
||||||
|
if(Trigger.getMatchCode(directions[i]).equalsIgnoreCase(textDir))
|
||||||
|
spinnerTextDirection.setSelection(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(title.length() > 0)
|
||||||
|
etNotificationTitle.setText(title);
|
||||||
|
|
||||||
|
if(text.length() > 0)
|
||||||
|
etNotificationText.setText(text);
|
||||||
|
}
|
||||||
|
|
||||||
|
private class GetActivityListTask extends AsyncTask<Void, Void, Void>
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
protected Void doInBackground(Void... params)
|
||||||
|
{
|
||||||
|
getActivityList(ActivityManageActionCloseNotification.this);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostExecute(Void result)
|
||||||
|
{
|
||||||
|
progressDialog.dismiss();
|
||||||
|
getActionStartActivityDialog1().show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
package com.jens.automation2;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.Button;
|
||||||
|
import android.widget.EditText;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
public class ActivityManageActionCreateNotification extends Activity
|
||||||
|
{
|
||||||
|
public static final String intentNameNotificationTitle = "notificationTitle";
|
||||||
|
public static final String intentNameNotificationText = "notificationText";
|
||||||
|
|
||||||
|
EditText etNotificationTitle, etNotificationText;
|
||||||
|
Button bSaveActionNotification;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(@Nullable Bundle savedInstanceState)
|
||||||
|
{
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
setContentView(R.layout.activity_manage_action_create_notification);
|
||||||
|
|
||||||
|
etNotificationTitle = (EditText) findViewById(R.id.etNotificationTitle);
|
||||||
|
etNotificationText = (EditText)findViewById(R.id.etNotificationText);
|
||||||
|
bSaveActionNotification = (Button)findViewById(R.id.bSaveActionNotification);
|
||||||
|
|
||||||
|
Intent input = getIntent();
|
||||||
|
|
||||||
|
if(input.hasExtra(intentNameNotificationTitle))
|
||||||
|
etNotificationTitle.setText(input.getStringExtra(intentNameNotificationTitle));
|
||||||
|
|
||||||
|
if(input.hasExtra(intentNameNotificationText))
|
||||||
|
etNotificationText.setText(input.getStringExtra(intentNameNotificationText));
|
||||||
|
|
||||||
|
bSaveActionNotification.setOnClickListener(new View.OnClickListener()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void onClick(View view)
|
||||||
|
{
|
||||||
|
if(StringUtils.isBlank(etNotificationTitle.getText().toString()))
|
||||||
|
{
|
||||||
|
Toast.makeText(ActivityManageActionCreateNotification.this, getResources().getString(R.string.enterTitle), Toast.LENGTH_LONG).show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(StringUtils.isBlank(etNotificationText.getText().toString()))
|
||||||
|
{
|
||||||
|
Toast.makeText(ActivityManageActionCreateNotification.this, getResources().getString(R.string.enterText), Toast.LENGTH_LONG).show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Intent answer = new Intent();
|
||||||
|
answer.putExtra(intentNameNotificationTitle, etNotificationTitle.getText().toString());
|
||||||
|
answer.putExtra(intentNameNotificationText, etNotificationText.getText().toString());
|
||||||
|
setResult(RESULT_OK, answer);
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -230,44 +230,89 @@ public class ActivityManageActionStartActivity extends Activity
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private AlertDialog getActionStartActivityDialog1()
|
private AlertDialog getActionStartActivityDialog1Application()
|
||||||
{
|
{
|
||||||
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
|
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
|
||||||
alertDialogBuilder.setTitle(getResources().getString(R.string.selectApplication));
|
alertDialogBuilder.setTitle(getResources().getString(R.string.selectApplication));
|
||||||
final String[] applicationArray = ActivityManageActionStartActivity.getApplicationNameListString(this);
|
final String[] applicationArray = ActivityManageActionStartActivity.getApplicationNameListString(this);
|
||||||
alertDialogBuilder.setItems(applicationArray, new DialogInterface.OnClickListener()
|
alertDialogBuilder.setItems(applicationArray, new DialogInterface.OnClickListener()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
public void onClick(DialogInterface dialog, int which)
|
public void onClick(DialogInterface dialog, int which)
|
||||||
{
|
{
|
||||||
dialog.dismiss();
|
dialog.dismiss();
|
||||||
getActionStartActivityDialog2(applicationArray[which]).show();
|
getActionStartActivityDialog2(applicationArray[which]);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
AlertDialog alertDialog = alertDialogBuilder.create();
|
AlertDialog alertDialog = alertDialogBuilder.create();
|
||||||
|
|
||||||
return alertDialog;
|
return alertDialog;
|
||||||
}
|
}
|
||||||
private AlertDialog getActionStartActivityDialog2(String applicationName)
|
private void getActionStartActivityDialog2(String applicationName)
|
||||||
{
|
{
|
||||||
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
|
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
|
||||||
alertDialogBuilder.setTitle(getResources().getString(R.string.selectPackageOfApplication));
|
alertDialogBuilder.setTitle(getResources().getString(R.string.selectPackageOfApplication));
|
||||||
final String[] packageArray = ActivityManageActionStartActivity.getPackageListString(this, applicationName);
|
final String[] packageArray = ActivityManageActionStartActivity.getPackageListString(this, applicationName);
|
||||||
alertDialogBuilder.setItems(packageArray, new DialogInterface.OnClickListener()
|
if(packageArray.length > 1)
|
||||||
{
|
{
|
||||||
|
alertDialogBuilder.setItems(packageArray, new DialogInterface.OnClickListener()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which)
|
||||||
|
{
|
||||||
|
getActionStartActivityDialog4ActivityPickMethod(packageArray[which]).show();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
AlertDialog alertDialog = alertDialogBuilder.create();
|
||||||
|
alertDialog.show();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
getActionStartActivityDialog4ActivityPickMethod(packageArray[0]).show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private AlertDialog getActionStartActivityDialog4ActivityPickMethod(final String packageName)
|
||||||
|
{
|
||||||
|
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
|
||||||
|
alertDialogBuilder.setMessage(getResources().getString(R.string.launcherOrManualExplanation));
|
||||||
|
alertDialogBuilder.setPositiveButton(getResources().getString(R.string.takeLauncherActivity), new DialogInterface.OnClickListener()
|
||||||
|
{
|
||||||
@Override
|
@Override
|
||||||
public void onClick(DialogInterface dialog, int which)
|
public void onClick(DialogInterface dialog, int which)
|
||||||
{
|
{
|
||||||
getActionStartActivityDialog3(packageArray[which]).show();
|
// Pick the launcher automatically
|
||||||
Miscellaneous.messageBox(getResources().getString(R.string.hint), getResources().getString(R.string.chooseActivityHint), ActivityManageActionStartActivity.this).show();
|
Intent launchIntent = getPackageManager().getLaunchIntentForPackage(packageName);
|
||||||
|
if (launchIntent != null)
|
||||||
|
{
|
||||||
|
ActivityInfo ai = ActivityManageActionStartActivity.getActivityInfoForPackageNameAndActivityName(packageName, launchIntent.getComponent().getClassName());
|
||||||
|
etPackageName.setText(ai.packageName);
|
||||||
|
etActivityOrActionPath.setText(ai.name);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
getActionStartActivityDialog5Activity(packageName).show();
|
||||||
|
Miscellaneous.messageBox(getResources().getString(R.string.hint), getResources().getString(R.string.launcherNotFound) + Miscellaneous.lineSeparator + getResources().getString(R.string.chooseActivityHint), ActivityManageActionStartActivity.this).show();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
alertDialogBuilder.setNegativeButton(getResources().getString(R.string.pickActivityManually), new DialogInterface.OnClickListener()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which)
|
||||||
|
{
|
||||||
|
getActionStartActivityDialog5Activity(packageName).show();
|
||||||
|
Miscellaneous.messageBox(getResources().getString(R.string.hint), getResources().getString(R.string.chooseActivityHint), ActivityManageActionStartActivity.this).show();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
final String activityArray[] = ActivityManageActionStartActivity.getActivityListForPackageName(packageName);
|
||||||
AlertDialog alertDialog = alertDialogBuilder.create();
|
AlertDialog alertDialog = alertDialogBuilder.create();
|
||||||
|
|
||||||
return alertDialog;
|
return alertDialog;
|
||||||
}
|
}
|
||||||
private AlertDialog getActionStartActivityDialog3(final String packageName)
|
|
||||||
|
private AlertDialog getActionStartActivityDialog5Activity(final String packageName)
|
||||||
{
|
{
|
||||||
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
|
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
|
||||||
alertDialogBuilder.setTitle(getResources().getString(R.string.selectActivityToBeStarted));
|
alertDialogBuilder.setTitle(getResources().getString(R.string.selectActivityToBeStarted));
|
||||||
@@ -283,7 +328,6 @@ public class ActivityManageActionStartActivity extends Activity
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
AlertDialog alertDialog = alertDialogBuilder.create();
|
AlertDialog alertDialog = alertDialogBuilder.create();
|
||||||
|
|
||||||
return alertDialog;
|
return alertDialog;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -598,7 +642,6 @@ public class ActivityManageActionStartActivity extends Activity
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
AlertDialog alertDialog = alertDialogBuilder.create();
|
AlertDialog alertDialog = alertDialogBuilder.create();
|
||||||
|
|
||||||
return alertDialog;
|
return alertDialog;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -615,9 +658,7 @@ public class ActivityManageActionStartActivity extends Activity
|
|||||||
protected void onPostExecute(Void result)
|
protected void onPostExecute(Void result)
|
||||||
{
|
{
|
||||||
progressDialog.dismiss();
|
progressDialog.dismiss();
|
||||||
getActionStartActivityDialog1().show();
|
getActionStartActivityDialog1Application().show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3,7 +3,6 @@ package com.jens.automation2;
|
|||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.app.Dialog;
|
|
||||||
import android.app.ProgressDialog;
|
import android.app.ProgressDialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
@@ -14,6 +13,7 @@ import android.os.Build;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.text.InputType;
|
import android.text.InputType;
|
||||||
import android.text.util.Linkify;
|
import android.text.util.Linkify;
|
||||||
|
import android.util.Log;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
@@ -50,34 +50,35 @@ public class ActivityManageRule extends Activity
|
|||||||
{
|
{
|
||||||
final static String activityDetectionClassPath = "com.jens.automation2.receivers.ActivityDetectionReceiver";
|
final static String activityDetectionClassPath = "com.jens.automation2.receivers.ActivityDetectionReceiver";
|
||||||
public final static String intentNameTriggerParameter1 = "triggerParameter1";
|
public final static String intentNameTriggerParameter1 = "triggerParameter1";
|
||||||
|
public final static String intentNameTriggerParameter2 = "triggerParameter2";
|
||||||
public final static String intentNameActionParameter1 = "actionParameter1";
|
public final static String intentNameActionParameter1 = "actionParameter1";
|
||||||
public final static String intentNameActionParameter2 = "actionParameter2";
|
public final static String intentNameActionParameter2 = "actionParameter2";
|
||||||
|
|
||||||
public Context context;
|
public Context context;
|
||||||
private Button cmdTriggerAdd, cmdActionAdd, cmdSaveRule;
|
Button cmdTriggerAdd, cmdActionAdd, cmdSaveRule;
|
||||||
private ListView triggerListView, actionListView;
|
ListView triggerListView, actionListView;
|
||||||
private EditText etRuleName;
|
EditText etRuleName;
|
||||||
private CheckBox chkRuleActive, chkRuleToggle;
|
CheckBox chkRuleActive, chkRuleToggle;
|
||||||
private static ActivityManageRule instance = null;
|
static ActivityManageRule instance = null;
|
||||||
ImageView imageHelpButton;
|
ImageView imageHelpButton;
|
||||||
|
|
||||||
private static ProgressDialog progressDialog = null;
|
static ProgressDialog progressDialog = null;
|
||||||
|
|
||||||
private static Trigger_Enum triggerType;
|
static Trigger_Enum triggerType;
|
||||||
private static boolean triggerParameter;
|
static boolean triggerParameter;
|
||||||
private static PointOfInterest triggerPoi;
|
static PointOfInterest triggerPoi;
|
||||||
private static String triggerProcess;
|
static String triggerProcess;
|
||||||
private static int triggerBattery;
|
static int triggerBattery;
|
||||||
private static double triggerSpeed;
|
static double triggerSpeed;
|
||||||
private static double triggerNoise;
|
static double triggerNoise;
|
||||||
private static TimeFrame triggerTimeFrame;
|
static TimeFrame triggerTimeFrame;
|
||||||
private static String triggerWifiName;
|
static String triggerWifiName;
|
||||||
|
|
||||||
private static Rule ruleToEdit;
|
static Rule ruleToEdit;
|
||||||
private static boolean newRule;
|
static boolean newRule;
|
||||||
|
|
||||||
private static Trigger newTrigger;
|
static Trigger newTrigger;
|
||||||
private static Action newAction;
|
static Action newAction;
|
||||||
|
|
||||||
ArrayAdapter<Trigger> triggerListViewAdapter;
|
ArrayAdapter<Trigger> triggerListViewAdapter;
|
||||||
ArrayAdapter<Action> actionListViewAdapter;
|
ArrayAdapter<Action> actionListViewAdapter;
|
||||||
@@ -101,17 +102,23 @@ public class ActivityManageRule extends Activity
|
|||||||
final static int requestCodeTriggerDeviceOrientationAdd = 301;
|
final static int requestCodeTriggerDeviceOrientationAdd = 301;
|
||||||
final static int requestCodeTriggerDeviceOrientationEdit = 302;
|
final static int requestCodeTriggerDeviceOrientationEdit = 302;
|
||||||
final static int requestCodeTriggerNotificationAdd = 8000;
|
final static int requestCodeTriggerNotificationAdd = 8000;
|
||||||
final static int requestCodeTriggerNfcNotificationEdit = 8001;
|
final static int requestCodeTriggerNotificationEdit = 8001;
|
||||||
final static int requestCodeActionPlaySoundAdd = 501;
|
final static int requestCodeActionPlaySoundAdd = 501;
|
||||||
final static int requestCodeActionPlaySoundEdit = 502;
|
final static int requestCodeActionPlaySoundEdit = 502;
|
||||||
final static int requestCodeTriggerPhoneCallAdd = 601;
|
final static int requestCodeTriggerPhoneCallAdd = 601;
|
||||||
final static int requestCodeTriggerPhoneCallEdit = 602;
|
final static int requestCodeTriggerPhoneCallEdit = 602;
|
||||||
|
final static int requestCodeTriggerProfileAdd = 603;
|
||||||
|
final static int requestCodeTriggerProfileEdit = 604;
|
||||||
final static int requestCodeTriggerWifiAdd = 723;
|
final static int requestCodeTriggerWifiAdd = 723;
|
||||||
final static int requestCodeTriggerWifiEdit = 724;
|
final static int requestCodeTriggerWifiEdit = 724;
|
||||||
final static int requestCodeActionSendTextMessageAdd = 5001;
|
final static int requestCodeActionSendTextMessageAdd = 5001;
|
||||||
final static int requestCodeActionSendTextMessageEdit = 5002;
|
final static int requestCodeActionSendTextMessageEdit = 5002;
|
||||||
final static int requestCodeActionVibrateAdd = 801;
|
final static int requestCodeActionVibrateAdd = 801;
|
||||||
final static int requestCodeActionVibrateEdit = 802;
|
final static int requestCodeActionVibrateEdit = 802;
|
||||||
|
final static int requestCodeActionCreateNotificationAdd = 803;
|
||||||
|
final static int requestCodeActionCreateNotificationEdit = 804;
|
||||||
|
final static int requestCodeActionCloseNotificationAdd = 805;
|
||||||
|
final static int requestCodeActionCloseNotificationEdit = 806;
|
||||||
|
|
||||||
public static ActivityManageRule getInstance()
|
public static ActivityManageRule getInstance()
|
||||||
{
|
{
|
||||||
@@ -263,7 +270,7 @@ public class ActivityManageRule extends Activity
|
|||||||
ActivityManageTriggerNotification.editedNotificationTrigger = selectedTrigger;
|
ActivityManageTriggerNotification.editedNotificationTrigger = selectedTrigger;
|
||||||
Intent notificationEditor = new Intent(ActivityManageRule.this, ActivityManageTriggerNotification.class);
|
Intent notificationEditor = new Intent(ActivityManageRule.this, ActivityManageTriggerNotification.class);
|
||||||
notificationEditor.putExtra("edit", true);
|
notificationEditor.putExtra("edit", true);
|
||||||
startActivityForResult(notificationEditor, requestCodeTriggerNfcNotificationEdit);
|
startActivityForResult(notificationEditor, requestCodeTriggerNotificationEdit);
|
||||||
break;
|
break;
|
||||||
case phoneCall:
|
case phoneCall:
|
||||||
ActivityManageTriggerPhoneCall.editedPhoneCallTrigger = selectedTrigger;
|
ActivityManageTriggerPhoneCall.editedPhoneCallTrigger = selectedTrigger;
|
||||||
@@ -271,11 +278,17 @@ public class ActivityManageRule extends Activity
|
|||||||
phoneCallEditor.putExtra("edit", true);
|
phoneCallEditor.putExtra("edit", true);
|
||||||
startActivityForResult(phoneCallEditor, requestCodeTriggerPhoneCallEdit);
|
startActivityForResult(phoneCallEditor, requestCodeTriggerPhoneCallEdit);
|
||||||
break;
|
break;
|
||||||
|
case profileActive:
|
||||||
|
Intent profileActiveEditor = new Intent(ActivityManageRule.this, ActivityManageTriggerProfile.class);
|
||||||
|
profileActiveEditor.putExtra(ActivityManageRule.intentNameTriggerParameter1, selectedTrigger.getTriggerParameter());
|
||||||
|
profileActiveEditor.putExtra(ActivityManageRule.intentNameTriggerParameter2, selectedTrigger.getTriggerParameter2());
|
||||||
|
startActivityForResult(profileActiveEditor, requestCodeTriggerProfileEdit);
|
||||||
|
break;
|
||||||
case wifiConnection:
|
case wifiConnection:
|
||||||
Intent wifiEditor = new Intent(ActivityManageRule.this, ActivityManageTriggerWifi.class);
|
Intent wifiEditor = new Intent(ActivityManageRule.this, ActivityManageTriggerWifi.class);
|
||||||
wifiEditor.putExtra("edit", true);
|
wifiEditor.putExtra("edit", true);
|
||||||
wifiEditor.putExtra("wifiState", selectedTrigger.getTriggerParameter());
|
wifiEditor.putExtra(ActivityManageTriggerWifi.intentNameWifiState, selectedTrigger.getTriggerParameter());
|
||||||
wifiEditor.putExtra("wifiName", selectedTrigger.getTriggerParameter2());
|
wifiEditor.putExtra(ActivityManageTriggerWifi.intentNameWifiName, selectedTrigger.getTriggerParameter2());
|
||||||
startActivityForResult(wifiEditor, requestCodeTriggerWifiEdit);
|
startActivityForResult(wifiEditor, requestCodeTriggerWifiEdit);
|
||||||
break;
|
break;
|
||||||
case deviceOrientation:
|
case deviceOrientation:
|
||||||
@@ -285,7 +298,7 @@ public class ActivityManageRule extends Activity
|
|||||||
startActivityForResult(devicePositionEditor, requestCodeTriggerDeviceOrientationEdit);
|
startActivityForResult(devicePositionEditor, requestCodeTriggerDeviceOrientationEdit);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -344,8 +357,8 @@ public class ActivityManageRule extends Activity
|
|||||||
break;
|
break;
|
||||||
case setScreenBrightness:
|
case setScreenBrightness:
|
||||||
Intent activityEditScreenBrightnessIntent = new Intent(ActivityManageRule.this, ActivityManageActionBrightnessSetting.class);
|
Intent activityEditScreenBrightnessIntent = new Intent(ActivityManageRule.this, ActivityManageActionBrightnessSetting.class);
|
||||||
activityEditScreenBrightnessIntent.putExtra("autoBrightness", a.getParameter1());
|
activityEditScreenBrightnessIntent.putExtra(ActivityManageActionBrightnessSetting.intentNameAutoBrightness, a.getParameter1());
|
||||||
activityEditScreenBrightnessIntent.putExtra("brightnessValue", Integer.parseInt(a.getParameter2()));
|
activityEditScreenBrightnessIntent.putExtra(ActivityManageActionBrightnessSetting.intentNameBrightnessValue, Integer.parseInt(a.getParameter2()));
|
||||||
startActivityForResult(activityEditScreenBrightnessIntent, requestCodeActionScreenBrightnessEdit);
|
startActivityForResult(activityEditScreenBrightnessIntent, requestCodeActionScreenBrightnessEdit);
|
||||||
break;
|
break;
|
||||||
case vibrate:
|
case vibrate:
|
||||||
@@ -353,6 +366,18 @@ public class ActivityManageRule extends Activity
|
|||||||
activityEditVibrateIntent.putExtra("vibratePattern", a.getParameter2());
|
activityEditVibrateIntent.putExtra("vibratePattern", a.getParameter2());
|
||||||
startActivityForResult(activityEditVibrateIntent, requestCodeActionVibrateEdit);
|
startActivityForResult(activityEditVibrateIntent, requestCodeActionVibrateEdit);
|
||||||
break;
|
break;
|
||||||
|
case createNotification:
|
||||||
|
Intent activityEditCreateNotificationIntent = new Intent(ActivityManageRule.this, ActivityManageActionCreateNotification.class);
|
||||||
|
String[] elements = a.getParameter2().split(Action.actionParameter2Split);
|
||||||
|
activityEditCreateNotificationIntent.putExtra(ActivityManageActionCreateNotification.intentNameNotificationTitle, elements[0]);
|
||||||
|
activityEditCreateNotificationIntent.putExtra(ActivityManageActionCreateNotification.intentNameNotificationText, elements[1]);
|
||||||
|
startActivityForResult(activityEditCreateNotificationIntent, requestCodeActionCreateNotificationEdit);
|
||||||
|
break;
|
||||||
|
case closeNotification:
|
||||||
|
Intent activityEditCloseNotificationIntent = new Intent(ActivityManageRule.this, ActivityManageActionCloseNotification.class);
|
||||||
|
activityEditCloseNotificationIntent.putExtra(intentNameActionParameter2, a.getParameter2());
|
||||||
|
startActivityForResult(activityEditCloseNotificationIntent, requestCodeActionCloseNotificationEdit);
|
||||||
|
break;
|
||||||
case playSound:
|
case playSound:
|
||||||
Intent actionPlaySoundIntent = new Intent(context, ActivityManageActionPlaySound.class);
|
Intent actionPlaySoundIntent = new Intent(context, ActivityManageActionPlaySound.class);
|
||||||
actionPlaySoundIntent.putExtra("edit", true);
|
actionPlaySoundIntent.putExtra("edit", true);
|
||||||
@@ -496,6 +521,8 @@ public class ActivityManageRule extends Activity
|
|||||||
items.add(new Item(typesLong[i].toString(), R.drawable.notification));
|
items.add(new Item(typesLong[i].toString(), R.drawable.notification));
|
||||||
else if(types[i].toString().equals(Trigger_Enum.deviceOrientation.toString()))
|
else if(types[i].toString().equals(Trigger_Enum.deviceOrientation.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.profileActive.toString()))
|
||||||
|
items.add(new Item(typesLong[i].toString(), R.drawable.sound));
|
||||||
else
|
else
|
||||||
items.add(new Item(typesLong[i].toString(), R.drawable.placeholder));
|
items.add(new Item(typesLong[i].toString(), R.drawable.placeholder));
|
||||||
}
|
}
|
||||||
@@ -568,7 +595,6 @@ public class ActivityManageRule extends Activity
|
|||||||
Intent wifiTriggerEditor = new Intent(myContext, ActivityManageTriggerWifi.class);
|
Intent wifiTriggerEditor = new Intent(myContext, ActivityManageTriggerWifi.class);
|
||||||
startActivityForResult(wifiTriggerEditor, requestCodeTriggerWifiAdd);
|
startActivityForResult(wifiTriggerEditor, requestCodeTriggerWifiAdd);
|
||||||
return;
|
return;
|
||||||
// booleanChoices = new String[]{getResources().getString(R.string.started), getResources().getString(R.string.stopped)};
|
|
||||||
}
|
}
|
||||||
else if(triggerType == Trigger_Enum.deviceOrientation)
|
else if(triggerType == Trigger_Enum.deviceOrientation)
|
||||||
{
|
{
|
||||||
@@ -576,10 +602,7 @@ public class ActivityManageRule extends Activity
|
|||||||
Intent devicePositionTriggerEditor = new Intent(myContext, ActivityManageTriggerDeviceOrientation.class);
|
Intent devicePositionTriggerEditor = new Intent(myContext, ActivityManageTriggerDeviceOrientation.class);
|
||||||
startActivityForResult(devicePositionTriggerEditor, requestCodeTriggerDeviceOrientationAdd);
|
startActivityForResult(devicePositionTriggerEditor, requestCodeTriggerDeviceOrientationAdd);
|
||||||
return;
|
return;
|
||||||
// booleanChoices = new String[]{getResources().getString(R.string.started), getResources().getString(R.string.stopped)};
|
|
||||||
}
|
}
|
||||||
// else if(triggerType == Trigger_Enum.wifiConnection)
|
|
||||||
// booleanChoices = new String[]{getResources().getString(R.string.connected), getResources().getString(R.string.disconnected)};
|
|
||||||
else if(triggerType == Trigger_Enum.process_started_stopped)
|
else if(triggerType == Trigger_Enum.process_started_stopped)
|
||||||
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.notification)
|
else if(triggerType == Trigger_Enum.notification)
|
||||||
@@ -599,7 +622,21 @@ public class ActivityManageRule extends Activity
|
|||||||
Intent phoneTriggerEditor = new Intent(myContext, ActivityManageTriggerPhoneCall.class);
|
Intent phoneTriggerEditor = new Intent(myContext, ActivityManageTriggerPhoneCall.class);
|
||||||
startActivityForResult(phoneTriggerEditor, requestCodeTriggerPhoneCallAdd);
|
startActivityForResult(phoneTriggerEditor, requestCodeTriggerPhoneCallAdd);
|
||||||
return;
|
return;
|
||||||
// booleanChoices = new String[]{getResources().getString(R.string.started), getResources().getString(R.string.stopped)};
|
}
|
||||||
|
else if(triggerType == Trigger_Enum.profileActive)
|
||||||
|
{
|
||||||
|
if(Profile.getProfileCollection().size() > 0)
|
||||||
|
{
|
||||||
|
newTrigger.setTriggerType(Trigger_Enum.profileActive);
|
||||||
|
Intent profileTriggerEditor = new Intent(myContext, ActivityManageTriggerProfile.class);
|
||||||
|
startActivityForResult(profileTriggerEditor, requestCodeTriggerProfileAdd);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Toast.makeText(context, getResources().getString(R.string.noProfilesCreateOneFirst), Toast.LENGTH_LONG).show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if(triggerType == Trigger_Enum.activityDetection)
|
else if(triggerType == Trigger_Enum.activityDetection)
|
||||||
{
|
{
|
||||||
@@ -622,7 +659,7 @@ public class ActivityManageRule extends Activity
|
|||||||
}
|
}
|
||||||
catch (IllegalAccessException | InvocationTargetException e)
|
catch (IllegalAccessException | InvocationTargetException e)
|
||||||
{
|
{
|
||||||
e.printStackTrace();
|
Miscellaneous.logEvent("w", "ActivityDetection", "Either play services are not available or the ActivityDetection classes are not. " + Log.getStackTraceString(e), 4);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1030,7 +1067,6 @@ public class ActivityManageRule extends Activity
|
|||||||
@Override
|
@Override
|
||||||
protected String[] doInBackground(ActivityManageRule... params)
|
protected String[] doInBackground(ActivityManageRule... params)
|
||||||
{
|
{
|
||||||
// Looper.prepare();
|
|
||||||
final String[] applicationArray = ActivityManageActionStartActivity.getApplicationNameListString(params[0]);
|
final String[] applicationArray = ActivityManageActionStartActivity.getApplicationNameListString(params[0]);
|
||||||
return applicationArray;
|
return applicationArray;
|
||||||
}
|
}
|
||||||
@@ -1166,8 +1202,8 @@ public class ActivityManageRule extends Activity
|
|||||||
{
|
{
|
||||||
if(resultCode == RESULT_OK)
|
if(resultCode == RESULT_OK)
|
||||||
{
|
{
|
||||||
newTrigger.setTriggerParameter(data.getBooleanExtra("wifiState", false));
|
newTrigger.setTriggerParameter(data.getBooleanExtra(ActivityManageTriggerWifi.intentNameWifiState, false));
|
||||||
newTrigger.setTriggerParameter2(data.getStringExtra("wifiName"));
|
newTrigger.setTriggerParameter2(data.getStringExtra(ActivityManageTriggerWifi.intentNameWifiName));
|
||||||
newTrigger.setParentRule(ruleToEdit);
|
newTrigger.setParentRule(ruleToEdit);
|
||||||
ruleToEdit.getTriggerSet().add(newTrigger);
|
ruleToEdit.getTriggerSet().add(newTrigger);
|
||||||
this.refreshTriggerList();
|
this.refreshTriggerList();
|
||||||
@@ -1179,8 +1215,8 @@ public class ActivityManageRule extends Activity
|
|||||||
{
|
{
|
||||||
Trigger editedTrigger = new Trigger();
|
Trigger editedTrigger = new Trigger();
|
||||||
editedTrigger.setTriggerType(Trigger_Enum.wifiConnection);
|
editedTrigger.setTriggerType(Trigger_Enum.wifiConnection);
|
||||||
editedTrigger.setTriggerParameter(data.getBooleanExtra("wifiState", false));
|
editedTrigger.setTriggerParameter(data.getBooleanExtra(ActivityManageTriggerWifi.intentNameWifiState, false));
|
||||||
editedTrigger.setTriggerParameter2(data.getStringExtra("wifiName"));
|
editedTrigger.setTriggerParameter2(data.getStringExtra(ActivityManageTriggerWifi.intentNameWifiName));
|
||||||
editedTrigger.setParentRule(ruleToEdit);
|
editedTrigger.setParentRule(ruleToEdit);
|
||||||
ruleToEdit.getTriggerSet().set(editIndex, editedTrigger);
|
ruleToEdit.getTriggerSet().set(editIndex, editedTrigger);
|
||||||
this.refreshTriggerList();
|
this.refreshTriggerList();
|
||||||
@@ -1228,19 +1264,19 @@ public class ActivityManageRule extends Activity
|
|||||||
{
|
{
|
||||||
ruleToEdit.getTriggerSet().add(newTrigger);
|
ruleToEdit.getTriggerSet().add(newTrigger);
|
||||||
|
|
||||||
newTrigger.setTriggerParameter(data.getBooleanExtra("direction", false));
|
newTrigger.setTriggerParameter(data.getBooleanExtra(ActivityManageTriggerNotification.intentNameNotificationDirection, false));
|
||||||
newTrigger.setTriggerParameter2(
|
newTrigger.setTriggerParameter2(
|
||||||
data.getStringExtra("app") + Trigger.triggerParameter2Split +
|
data.getStringExtra(ActivityManageTriggerNotification.intentNameNotificationApp) + Trigger.triggerParameter2Split +
|
||||||
data.getStringExtra("titleDir") + Trigger.triggerParameter2Split +
|
data.getStringExtra(ActivityManageTriggerNotification.intentNameNotificationTitleDir) + Trigger.triggerParameter2Split +
|
||||||
data.getStringExtra("title") + Trigger.triggerParameter2Split +
|
data.getStringExtra(ActivityManageTriggerNotification.intentNameNotificationTitle) + Trigger.triggerParameter2Split +
|
||||||
data.getStringExtra("textDir") + Trigger.triggerParameter2Split +
|
data.getStringExtra(ActivityManageTriggerNotification.intentNameNotificationTextDir) + Trigger.triggerParameter2Split +
|
||||||
data.getStringExtra("text")
|
data.getStringExtra(ActivityManageTriggerNotification.intentNameNotificationText)
|
||||||
);
|
);
|
||||||
newTrigger.setParentRule(ruleToEdit);
|
newTrigger.setParentRule(ruleToEdit);
|
||||||
this.refreshTriggerList();
|
this.refreshTriggerList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(requestCode == requestCodeTriggerNfcNotificationEdit)
|
else if(requestCode == requestCodeTriggerNotificationEdit)
|
||||||
{
|
{
|
||||||
if(resultCode == RESULT_OK)
|
if(resultCode == RESULT_OK)
|
||||||
{
|
{
|
||||||
@@ -1315,8 +1351,8 @@ public class ActivityManageRule extends Activity
|
|||||||
{
|
{
|
||||||
if(resultCode == RESULT_OK)
|
if(resultCode == RESULT_OK)
|
||||||
{
|
{
|
||||||
newAction.setParameter1(data.getBooleanExtra("autoBrightness", false));
|
newAction.setParameter1(data.getBooleanExtra(ActivityManageActionBrightnessSetting.intentNameAutoBrightness, false));
|
||||||
newAction.setParameter2(String.valueOf(data.getIntExtra("brightnessValue", 0)));
|
newAction.setParameter2(String.valueOf(data.getIntExtra(ActivityManageActionBrightnessSetting.intentNameBrightnessValue, 0)));
|
||||||
newAction.setParentRule(ruleToEdit);
|
newAction.setParentRule(ruleToEdit);
|
||||||
ruleToEdit.getActionSet().add(newAction);
|
ruleToEdit.getActionSet().add(newAction);
|
||||||
this.refreshActionList();
|
this.refreshActionList();
|
||||||
@@ -1347,6 +1383,30 @@ public class ActivityManageRule extends Activity
|
|||||||
this.refreshActionList();
|
this.refreshActionList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if(requestCode == requestCodeActionCreateNotificationAdd)
|
||||||
|
{
|
||||||
|
if(resultCode == RESULT_OK)
|
||||||
|
{
|
||||||
|
newAction.setParentRule(ruleToEdit);
|
||||||
|
newAction.setParameter2(
|
||||||
|
data.getStringExtra(ActivityManageActionCreateNotification.intentNameNotificationTitle)
|
||||||
|
+ Action.actionParameter2Split +
|
||||||
|
data.getStringExtra(ActivityManageActionCreateNotification.intentNameNotificationText)
|
||||||
|
);
|
||||||
|
ruleToEdit.getActionSet().add(newAction);
|
||||||
|
this.refreshActionList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(requestCode == requestCodeActionCloseNotificationAdd)
|
||||||
|
{
|
||||||
|
if(resultCode == RESULT_OK)
|
||||||
|
{
|
||||||
|
newAction.setParentRule(ruleToEdit);
|
||||||
|
newAction.setParameter2(data.getStringExtra(intentNameActionParameter2));
|
||||||
|
ruleToEdit.getActionSet().add(newAction);
|
||||||
|
this.refreshActionList();
|
||||||
|
}
|
||||||
|
}
|
||||||
else if(requestCode == requestCodeActionVibrateEdit)
|
else if(requestCode == requestCodeActionVibrateEdit)
|
||||||
{
|
{
|
||||||
if(resultCode == RESULT_OK)
|
if(resultCode == RESULT_OK)
|
||||||
@@ -1359,6 +1419,34 @@ public class ActivityManageRule extends Activity
|
|||||||
this.refreshActionList();
|
this.refreshActionList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if(requestCode == requestCodeActionCreateNotificationEdit)
|
||||||
|
{
|
||||||
|
if(resultCode == RESULT_OK)
|
||||||
|
{
|
||||||
|
ruleToEdit.getActionSet().get(editIndex).setParentRule(ruleToEdit);
|
||||||
|
|
||||||
|
if(data.hasExtra(ActivityManageActionCreateNotification.intentNameNotificationTitle))
|
||||||
|
ruleToEdit.getActionSet().get(editIndex).setParameter2(
|
||||||
|
data.getStringExtra(ActivityManageActionCreateNotification.intentNameNotificationTitle)
|
||||||
|
+ Action.actionParameter2Split +
|
||||||
|
data.getStringExtra(ActivityManageActionCreateNotification.intentNameNotificationText)
|
||||||
|
);
|
||||||
|
|
||||||
|
this.refreshActionList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(requestCode == requestCodeActionCloseNotificationEdit)
|
||||||
|
{
|
||||||
|
if(resultCode == RESULT_OK)
|
||||||
|
{
|
||||||
|
ruleToEdit.getActionSet().get(editIndex).setParentRule(ruleToEdit);
|
||||||
|
|
||||||
|
if(data.hasExtra(intentNameActionParameter2))
|
||||||
|
ruleToEdit.getActionSet().get(editIndex).setParameter2(data.getStringExtra(intentNameActionParameter2));
|
||||||
|
|
||||||
|
this.refreshActionList();
|
||||||
|
}
|
||||||
|
}
|
||||||
else if(requestCode == requestCodeActionPlaySoundAdd)
|
else if(requestCode == requestCodeActionPlaySoundAdd)
|
||||||
{
|
{
|
||||||
if(resultCode == RESULT_OK)
|
if(resultCode == RESULT_OK)
|
||||||
@@ -1428,6 +1516,30 @@ public class ActivityManageRule extends Activity
|
|||||||
this.refreshTriggerList();
|
this.refreshTriggerList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if(requestCode == requestCodeTriggerProfileAdd)
|
||||||
|
{
|
||||||
|
if(resultCode == RESULT_OK)
|
||||||
|
{
|
||||||
|
newTrigger.setTriggerParameter(data.getBooleanExtra(ActivityManageRule.intentNameTriggerParameter1, true));
|
||||||
|
newTrigger.setTriggerParameter2(data.getStringExtra(ActivityManageRule.intentNameTriggerParameter2));
|
||||||
|
newTrigger.setParentRule(ruleToEdit);
|
||||||
|
ruleToEdit.getTriggerSet().add(newTrigger);
|
||||||
|
this.refreshTriggerList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(requestCode == requestCodeTriggerProfileEdit)
|
||||||
|
{
|
||||||
|
if(resultCode == RESULT_OK)
|
||||||
|
{
|
||||||
|
Trigger editedTrigger = new Trigger();
|
||||||
|
editedTrigger.setTriggerType(Trigger_Enum.profileActive);
|
||||||
|
editedTrigger.setTriggerParameter(data.getBooleanExtra(ActivityManageRule.intentNameTriggerParameter1, true));
|
||||||
|
editedTrigger.setTriggerParameter2(data.getStringExtra(ActivityManageRule.intentNameTriggerParameter2));
|
||||||
|
editedTrigger.setParentRule(ruleToEdit);
|
||||||
|
ruleToEdit.getTriggerSet().set(editIndex, editedTrigger);
|
||||||
|
this.refreshTriggerList();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected AlertDialog getActionTypeDialog()
|
protected AlertDialog getActionTypeDialog()
|
||||||
@@ -1475,6 +1587,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(Action_Enum.vibrate.toString()))
|
else if(types[i].toString().equals(Action_Enum.vibrate.toString()))
|
||||||
items.add(new Item(typesLong[i].toString(), R.drawable.vibrate));
|
items.add(new Item(typesLong[i].toString(), R.drawable.vibrate));
|
||||||
|
else if(types[i].toString().equals(Action_Enum.createNotification.toString()))
|
||||||
|
items.add(new Item(typesLong[i].toString(), R.drawable.notification));
|
||||||
|
else if(types[i].toString().equals(Action_Enum.closeNotification.toString()))
|
||||||
|
items.add(new Item(typesLong[i].toString(), R.drawable.notification));
|
||||||
else if(types[i].toString().equals(Action_Enum.sendTextMessage.toString()))
|
else if(types[i].toString().equals(Action_Enum.sendTextMessage.toString()))
|
||||||
{
|
{
|
||||||
// if(ActivityPermissions.isPermissionDeclaratedInManifest(ActivityManageSpecificRule.this, "android.permission.SEND_SMS") && !Miscellaneous.isGooglePlayInstalled(ActivityManageSpecificRule.this))
|
// if(ActivityPermissions.isPermissionDeclaratedInManifest(ActivityManageSpecificRule.this, "android.permission.SEND_SMS") && !Miscellaneous.isGooglePlayInstalled(ActivityManageSpecificRule.this))
|
||||||
@@ -1637,6 +1753,18 @@ public class ActivityManageRule extends Activity
|
|||||||
Intent intent = new Intent(ActivityManageRule.this, ActivityManageActionVibrate.class);
|
Intent intent = new Intent(ActivityManageRule.this, ActivityManageActionVibrate.class);
|
||||||
startActivityForResult(intent, requestCodeActionVibrateAdd);
|
startActivityForResult(intent, requestCodeActionVibrateAdd);
|
||||||
}
|
}
|
||||||
|
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.createNotification.toString()))
|
||||||
|
{
|
||||||
|
newAction.setAction(Action_Enum.createNotification);
|
||||||
|
Intent intent = new Intent(ActivityManageRule.this, ActivityManageActionCreateNotification.class);
|
||||||
|
startActivityForResult(intent, requestCodeActionCreateNotificationAdd);
|
||||||
|
}
|
||||||
|
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.closeNotification.toString()))
|
||||||
|
{
|
||||||
|
newAction.setAction(Action_Enum.closeNotification);
|
||||||
|
Intent intent = new Intent(ActivityManageRule.this, ActivityManageActionCloseNotification.class);
|
||||||
|
startActivityForResult(intent, requestCodeActionCloseNotificationAdd);
|
||||||
|
}
|
||||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.setScreenBrightness.toString()))
|
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.setScreenBrightness.toString()))
|
||||||
{
|
{
|
||||||
newAction.setAction(Action_Enum.setScreenBrightness);
|
newAction.setAction(Action_Enum.setScreenBrightness);
|
||||||
@@ -1907,4 +2035,4 @@ public class ActivityManageRule extends Activity
|
|||||||
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
|
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -43,7 +43,7 @@ public class ActivityManageTriggerDeviceOrientation extends Activity
|
|||||||
{
|
{
|
||||||
desiredAzimuth = Float.parseFloat(etDesiredAzimuth.getText().toString());
|
desiredAzimuth = Float.parseFloat(etDesiredAzimuth.getText().toString());
|
||||||
desiredAzimuthTolerance = Float.parseFloat(etDesiredAzimuthTolerance.getText().toString());
|
desiredAzimuthTolerance = Float.parseFloat(etDesiredAzimuthTolerance.getText().toString());
|
||||||
if (Math.abs(azimuth) <= Math.abs(desiredAzimuth - desiredAzimuthTolerance) || Math.abs(azimuth) <= desiredAzimuth + desiredAzimuthTolerance)
|
if (desiredAzimuthTolerance == 180 || (desiredAzimuth - desiredAzimuthTolerance <= azimuth && azimuth <= desiredAzimuth + desiredAzimuthTolerance))
|
||||||
{
|
{
|
||||||
tvAppliesAzimuth.setText(getResources().getString(R.string.yes));
|
tvAppliesAzimuth.setText(getResources().getString(R.string.yes));
|
||||||
tvAppliesAzimuth.setTextColor(Color.GREEN);
|
tvAppliesAzimuth.setTextColor(Color.GREEN);
|
||||||
@@ -63,7 +63,7 @@ public class ActivityManageTriggerDeviceOrientation extends Activity
|
|||||||
{
|
{
|
||||||
desiredPitch = Float.parseFloat(etDesiredPitch.getText().toString());
|
desiredPitch = Float.parseFloat(etDesiredPitch.getText().toString());
|
||||||
desiredPitchTolerance = Float.parseFloat(etDesiredPitchTolerance.getText().toString());
|
desiredPitchTolerance = Float.parseFloat(etDesiredPitchTolerance.getText().toString());
|
||||||
if (Math.abs(pitch) <= Math.abs(desiredPitch - desiredPitchTolerance) || Math.abs(pitch) <= desiredPitch + desiredPitchTolerance)
|
if (desiredPitchTolerance == 180 || (desiredPitch - desiredPitchTolerance <= pitch && pitch <= desiredPitch + desiredPitchTolerance))
|
||||||
{
|
{
|
||||||
tvAppliesPitch.setText(getResources().getString(R.string.yes));
|
tvAppliesPitch.setText(getResources().getString(R.string.yes));
|
||||||
tvAppliesPitch.setTextColor(Color.GREEN);
|
tvAppliesPitch.setTextColor(Color.GREEN);
|
||||||
@@ -83,7 +83,7 @@ public class ActivityManageTriggerDeviceOrientation extends Activity
|
|||||||
{
|
{
|
||||||
desiredRoll = Float.parseFloat(etDesiredRoll.getText().toString());
|
desiredRoll = Float.parseFloat(etDesiredRoll.getText().toString());
|
||||||
desiredRollTolerance = Float.parseFloat(etDesiredRollTolerance.getText().toString());
|
desiredRollTolerance = Float.parseFloat(etDesiredRollTolerance.getText().toString());
|
||||||
if (Math.abs(roll) <= Math.abs(desiredRoll - desiredRollTolerance) || Math.abs(roll) <= desiredRoll + desiredRollTolerance)
|
if (desiredRollTolerance == 180 || (desiredRoll - desiredRollTolerance <= roll && roll <= desiredRoll + desiredRollTolerance))
|
||||||
{
|
{
|
||||||
tvAppliesRoll.setText(getResources().getString(R.string.yes));
|
tvAppliesRoll.setText(getResources().getString(R.string.yes));
|
||||||
tvAppliesRoll.setTextColor(Color.GREEN);
|
tvAppliesRoll.setTextColor(Color.GREEN);
|
||||||
@@ -159,14 +159,16 @@ public class ActivityManageTriggerDeviceOrientation extends Activity
|
|||||||
@Override
|
@Override
|
||||||
public void onClick(View v)
|
public void onClick(View v)
|
||||||
{
|
{
|
||||||
|
// Round the values. Too long decimals will destroy the layout
|
||||||
|
|
||||||
if(!StringUtils.isEmpty(currentAzimuth.getText()))
|
if(!StringUtils.isEmpty(currentAzimuth.getText()))
|
||||||
etDesiredAzimuth.setText(currentAzimuth.getText());
|
etDesiredAzimuth.setText(String.valueOf(Math.round(Float.parseFloat(currentAzimuth.getText().toString()))));
|
||||||
|
|
||||||
if(!StringUtils.isEmpty(currentPitch.getText()))
|
if(!StringUtils.isEmpty(currentPitch.getText()))
|
||||||
etDesiredPitch.setText(currentPitch.getText());
|
etDesiredPitch.setText(String.valueOf(Math.round(Float.parseFloat(currentPitch.getText().toString()))));
|
||||||
|
|
||||||
if(!StringUtils.isEmpty(currentRoll.getText()))
|
if(!StringUtils.isEmpty(currentRoll.getText()))
|
||||||
etDesiredRoll.setText(currentRoll.getText());
|
etDesiredRoll.setText(String.valueOf(Math.round(Float.parseFloat(currentRoll.getText().toString()))));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -31,6 +31,13 @@ import static com.jens.automation2.Trigger.triggerParameter2Split;
|
|||||||
|
|
||||||
public class ActivityManageTriggerNotification extends Activity
|
public class ActivityManageTriggerNotification extends Activity
|
||||||
{
|
{
|
||||||
|
public static final String intentNameNotificationApp = "app";
|
||||||
|
public static final String intentNameNotificationTitleDir = "titleDir";
|
||||||
|
public static final String intentNameNotificationTitle = "title";
|
||||||
|
public static final String intentNameNotificationTextDir = "textDir";
|
||||||
|
public static final String intentNameNotificationText = "text";
|
||||||
|
public static final String intentNameNotificationDirection = "direction";
|
||||||
|
|
||||||
public static Trigger editedNotificationTrigger;
|
public static Trigger editedNotificationTrigger;
|
||||||
boolean edit = false;
|
boolean edit = false;
|
||||||
ProgressDialog progressDialog = null;
|
ProgressDialog progressDialog = null;
|
||||||
@@ -256,7 +263,7 @@ public class ActivityManageTriggerNotification extends Activity
|
|||||||
etNotificationTitle = (EditText)findViewById(R.id.etNotificationTitle);
|
etNotificationTitle = (EditText)findViewById(R.id.etNotificationTitle);
|
||||||
etNotificationText = (EditText)findViewById(R.id.etNotificationText);
|
etNotificationText = (EditText)findViewById(R.id.etNotificationText);
|
||||||
bSelectApp = (Button)findViewById(R.id.bSelectApp);
|
bSelectApp = (Button)findViewById(R.id.bSelectApp);
|
||||||
bSaveTriggerNotification = (Button)findViewById(R.id.bSaveTriggerNotification);
|
bSaveTriggerNotification = (Button)findViewById(R.id.bSaveActionCloseNotification);
|
||||||
spinnerTitleDirection = (Spinner)findViewById(R.id.spinnerTitleDirection);
|
spinnerTitleDirection = (Spinner)findViewById(R.id.spinnerTitleDirection);
|
||||||
spinnerTextDirection = (Spinner)findViewById(R.id.spinnerTextDirection);
|
spinnerTextDirection = (Spinner)findViewById(R.id.spinnerTextDirection);
|
||||||
tvSelectedApplication = (TextView)findViewById(R.id.etActivityOrActionPath);
|
tvSelectedApplication = (TextView)findViewById(R.id.etActivityOrActionPath);
|
||||||
@@ -305,7 +312,7 @@ public class ActivityManageTriggerNotification extends Activity
|
|||||||
{
|
{
|
||||||
String app;
|
String app;
|
||||||
if(tvSelectedApplication.getText().toString().equalsIgnoreCase(getResources().getString(R.string.anyApp)))
|
if(tvSelectedApplication.getText().toString().equalsIgnoreCase(getResources().getString(R.string.anyApp)))
|
||||||
app = "-1";
|
app = Trigger.anyAppString;
|
||||||
else
|
else
|
||||||
app = tvSelectedApplication.getText().toString();
|
app = tvSelectedApplication.getText().toString();
|
||||||
|
|
||||||
@@ -323,12 +330,12 @@ public class ActivityManageTriggerNotification extends Activity
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
Intent data = new Intent();
|
Intent data = new Intent();
|
||||||
data.putExtra("direction", chkNotificationDirection.isChecked());
|
data.putExtra(intentNameNotificationDirection, chkNotificationDirection.isChecked());
|
||||||
data.putExtra("app", app);
|
data.putExtra(intentNameNotificationApp, app);
|
||||||
data.putExtra("titleDir", titleDir);
|
data.putExtra(intentNameNotificationTitleDir, titleDir);
|
||||||
data.putExtra("title", title);
|
data.putExtra(intentNameNotificationTitle, title);
|
||||||
data.putExtra("textDir", textDir);
|
data.putExtra(intentNameNotificationTextDir, textDir);
|
||||||
data.putExtra("text", text);
|
data.putExtra(intentNameNotificationText, text);
|
||||||
ActivityManageTriggerNotification.this.setResult(RESULT_OK, data);
|
ActivityManageTriggerNotification.this.setResult(RESULT_OK, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -360,7 +367,7 @@ public class ActivityManageTriggerNotification extends Activity
|
|||||||
else
|
else
|
||||||
text = "";
|
text = "";
|
||||||
|
|
||||||
if(!app.equals("-1"))
|
if(!app.equals(Trigger.anyAppString))
|
||||||
tvSelectedApplication.setText(app);
|
tvSelectedApplication.setText(app);
|
||||||
|
|
||||||
for(int i = 0; i < directions.length; i++)
|
for(int i = 0; i < directions.length; i++)
|
||||||
@@ -395,4 +402,4 @@ public class ActivityManageTriggerNotification extends Activity
|
|||||||
getActionStartActivityDialog1().show();
|
getActionStartActivityDialog1().show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,124 @@
|
|||||||
|
package com.jens.automation2;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.ArrayAdapter;
|
||||||
|
import android.widget.Button;
|
||||||
|
import android.widget.CheckBox;
|
||||||
|
import android.widget.Spinner;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class ActivityManageTriggerProfile extends Activity
|
||||||
|
{
|
||||||
|
public static final String profileFieldName = "profileName";
|
||||||
|
|
||||||
|
boolean editMode = false;
|
||||||
|
|
||||||
|
Button bSaveTriggerProfile;
|
||||||
|
Spinner spinnerProfiles;
|
||||||
|
CheckBox chkProfileActive, chkProfileCheckSettings;
|
||||||
|
|
||||||
|
ArrayAdapter<Profile> profileSpinnerAdapter;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(@Nullable Bundle savedInstanceState)
|
||||||
|
{
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
setContentView(R.layout.activity_manage_trigger_profile);
|
||||||
|
|
||||||
|
bSaveTriggerProfile = (Button)findViewById(R.id.bSaveTriggerProfile);
|
||||||
|
spinnerProfiles = (Spinner)findViewById(R.id.spinnerProfiles);
|
||||||
|
chkProfileActive = (CheckBox)findViewById(R.id.chkProfileActive);
|
||||||
|
chkProfileCheckSettings = (CheckBox)findViewById(R.id.chkProfileCheckSettings);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
profileSpinnerAdapter = new ArrayAdapter<Profile>(this, R.layout.text_view_for_poi_listview_mediumtextsize, Profile.getProfileCollection());
|
||||||
|
loadProfileItems();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Miscellaneous.logEvent("w", "ActivityManageTriggerProfile", Log.getStackTraceString(e), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(getIntent().hasExtra(ActivityManageRule.intentNameTriggerParameter2))
|
||||||
|
{
|
||||||
|
editMode = true;
|
||||||
|
|
||||||
|
boolean active = getIntent().getBooleanExtra(ActivityManageRule.intentNameTriggerParameter1, true);
|
||||||
|
chkProfileActive.setChecked(active);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
String values[] = getIntent().getStringExtra(ActivityManageRule.intentNameTriggerParameter2).split(Trigger.triggerParameter2Split);
|
||||||
|
if(values.length >= 2)
|
||||||
|
{
|
||||||
|
boolean checkSettings = Boolean.parseBoolean(values[0]);
|
||||||
|
chkProfileCheckSettings.setChecked(checkSettings);
|
||||||
|
|
||||||
|
String profileName = values[0];
|
||||||
|
|
||||||
|
List<Profile> profileList = Profile.getProfileCollection();
|
||||||
|
|
||||||
|
boolean found = false;
|
||||||
|
|
||||||
|
for(int i = 0; i < profileList.size(); i++)
|
||||||
|
{
|
||||||
|
if(profileList.get(i).getName().equals(profileName))
|
||||||
|
{
|
||||||
|
spinnerProfiles.setSelection(i);
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!found)
|
||||||
|
Miscellaneous.messageBox(getResources().getString(R.string.info), getResources().getString(R.string.profileWasNotFound), ActivityManageTriggerProfile.this).show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(Exception e)
|
||||||
|
{
|
||||||
|
Toast.makeText(ActivityManageTriggerProfile.this, getResources().getString(R.string.triggerWrong), Toast.LENGTH_SHORT).show();
|
||||||
|
Miscellaneous.logEvent("e", "ActivityManageTriggerProfile", "There\'s something wrong with parameters. Content: " + getIntent().getStringExtra(ActivityManageRule.intentNameActionParameter2) + ", " + Log.getStackTraceString(e), 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bSaveTriggerProfile.setOnClickListener(new View.OnClickListener()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void onClick(View v)
|
||||||
|
{
|
||||||
|
Intent returnData = new Intent();
|
||||||
|
returnData.putExtra(ActivityManageRule.intentNameTriggerParameter1, chkProfileActive.isChecked());
|
||||||
|
returnData.putExtra(ActivityManageRule.intentNameTriggerParameter2,
|
||||||
|
spinnerProfiles.getSelectedItem().toString() + Trigger.triggerParameter2Split +
|
||||||
|
chkProfileCheckSettings.isChecked());
|
||||||
|
|
||||||
|
setResult(RESULT_OK, returnData);
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void loadProfileItems()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if(spinnerProfiles.getAdapter() == null)
|
||||||
|
spinnerProfiles.setAdapter(profileSpinnerAdapter);
|
||||||
|
|
||||||
|
profileSpinnerAdapter.notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
catch(NullPointerException e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -35,6 +35,9 @@ import java.util.List;
|
|||||||
|
|
||||||
public class ActivityManageTriggerWifi extends Activity
|
public class ActivityManageTriggerWifi extends Activity
|
||||||
{
|
{
|
||||||
|
public final static String intentNameWifiState = "wifiState";
|
||||||
|
public final static String intentNameWifiName = "wifiName";
|
||||||
|
|
||||||
RadioButton rbTriggerWifiConnected, rbTriggerWifiDisconnected;
|
RadioButton rbTriggerWifiConnected, rbTriggerWifiDisconnected;
|
||||||
EditText etTriggerWifiName;
|
EditText etTriggerWifiName;
|
||||||
Spinner spinnerWifiList;
|
Spinner spinnerWifiList;
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package com.jens.automation2;
|
|||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.app.Notification;
|
|
||||||
import android.app.NotificationManager;
|
import android.app.NotificationManager;
|
||||||
import android.app.admin.DevicePolicyManager;
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
@@ -16,14 +15,13 @@ import android.content.res.Resources;
|
|||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.os.PowerManager;
|
||||||
|
import android.provider.Settings;
|
||||||
import android.text.Html;
|
import android.text.Html;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
|
||||||
|
|
||||||
import androidx.core.app.NotificationManagerCompat;
|
|
||||||
|
|
||||||
import com.jens.automation2.receivers.NotificationListener;
|
import com.jens.automation2.receivers.NotificationListener;
|
||||||
|
|
||||||
@@ -48,6 +46,7 @@ public class ActivityPermissions extends Activity
|
|||||||
private static final int requestCodeForPermissionsBackgroundLocation = 12045;
|
private static final int requestCodeForPermissionsBackgroundLocation = 12045;
|
||||||
private static final int requestCodeForPermissionsNotifications = 12046;
|
private static final int requestCodeForPermissionsNotifications = 12046;
|
||||||
private static final int requestCodeForPermissionsDeviceAdmin = 12047;
|
private static final int requestCodeForPermissionsDeviceAdmin = 12047;
|
||||||
|
private static final int requestCodeForPermissionsBatteryOptimization = 12048;
|
||||||
protected String[] specificPermissionsToRequest = null;
|
protected String[] specificPermissionsToRequest = null;
|
||||||
|
|
||||||
public static String intentExtraName = "permissionsToBeRequested";
|
public static String intentExtraName = "permissionsToBeRequested";
|
||||||
@@ -288,6 +287,12 @@ public class ActivityPermissions extends Activity
|
|||||||
{
|
{
|
||||||
return haveDeviceAdmin();
|
return haveDeviceAdmin();
|
||||||
}
|
}
|
||||||
|
else if (s.equals(Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS))
|
||||||
|
{
|
||||||
|
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
|
||||||
|
String packageName = context.getApplicationContext().getPackageName();
|
||||||
|
return pm.isIgnoringBatteryOptimizations(packageName);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int res = context.checkCallingOrSelfPermission(s);
|
int res = context.checkCallingOrSelfPermission(s);
|
||||||
@@ -341,12 +346,13 @@ public class ActivityPermissions extends Activity
|
|||||||
for (Profile profile : Profile.getProfileCollection())
|
for (Profile profile : Profile.getProfileCollection())
|
||||||
{
|
{
|
||||||
if (profile.changeIncomingCallsRingtone)
|
if (profile.changeIncomingCallsRingtone)
|
||||||
{
|
|
||||||
addToArrayListUnique(Manifest.permission.WRITE_SETTINGS, requiredPermissions);
|
addToArrayListUnique(Manifest.permission.WRITE_SETTINGS, requiredPermissions);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!havePermission(Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, workingContext))
|
||||||
|
addToArrayListUnique(Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, requiredPermissions);
|
||||||
|
|
||||||
if (!onlyGeneral)
|
if (!onlyGeneral)
|
||||||
{
|
{
|
||||||
for (Rule rule : Rule.getRuleCollection())
|
for (Rule rule : Rule.getRuleCollection())
|
||||||
@@ -523,7 +529,7 @@ public class ActivityPermissions extends Activity
|
|||||||
break;
|
break;
|
||||||
case sendTextMessage:
|
case sendTextMessage:
|
||||||
addToArrayListUnique(Manifest.permission.SEND_SMS, requiredPermissions);
|
addToArrayListUnique(Manifest.permission.SEND_SMS, requiredPermissions);
|
||||||
checkPermissionsInVariableUse(action.getParameter2(), requiredPermissions);
|
getPermissionsForVariablesInUse(action.getParameter2(), requiredPermissions);
|
||||||
break;
|
break;
|
||||||
case setAirplaneMode:
|
case setAirplaneMode:
|
||||||
addToArrayListUnique(Manifest.permission.WRITE_SETTINGS, requiredPermissions);
|
addToArrayListUnique(Manifest.permission.WRITE_SETTINGS, requiredPermissions);
|
||||||
@@ -582,7 +588,7 @@ public class ActivityPermissions extends Activity
|
|||||||
// addToArrayListUnique("android.permission.TETHER_PRIVILEGED", requiredPermissions);
|
// addToArrayListUnique("android.permission.TETHER_PRIVILEGED", requiredPermissions);
|
||||||
break;
|
break;
|
||||||
case speakText:
|
case speakText:
|
||||||
checkPermissionsInVariableUse(action.getParameter2(), requiredPermissions);
|
getPermissionsForVariablesInUse(action.getParameter2(), requiredPermissions);
|
||||||
break;
|
break;
|
||||||
case startOtherActivity:
|
case startOtherActivity:
|
||||||
if(
|
if(
|
||||||
@@ -602,7 +608,7 @@ public class ActivityPermissions extends Activity
|
|||||||
break;
|
break;
|
||||||
case triggerUrl:
|
case triggerUrl:
|
||||||
addToArrayListUnique(Manifest.permission.INTERNET, requiredPermissions);
|
addToArrayListUnique(Manifest.permission.INTERNET, requiredPermissions);
|
||||||
checkPermissionsInVariableUse(action.getParameter2(), requiredPermissions);
|
getPermissionsForVariablesInUse(action.getParameter2(), requiredPermissions);
|
||||||
break;
|
break;
|
||||||
case turnBluetoothOff:
|
case turnBluetoothOff:
|
||||||
addToArrayListUnique(Manifest.permission.BLUETOOTH_ADMIN, requiredPermissions);
|
addToArrayListUnique(Manifest.permission.BLUETOOTH_ADMIN, requiredPermissions);
|
||||||
@@ -643,6 +649,9 @@ public class ActivityPermissions extends Activity
|
|||||||
case playSound:
|
case playSound:
|
||||||
addToArrayListUnique(Manifest.permission.READ_EXTERNAL_STORAGE, requiredPermissions);
|
addToArrayListUnique(Manifest.permission.READ_EXTERNAL_STORAGE, requiredPermissions);
|
||||||
break;
|
break;
|
||||||
|
case closeNotification:
|
||||||
|
addToArrayListUnique(Manifest.permission.BIND_NOTIFICATION_LISTENER_SERVICE, requiredPermissions);
|
||||||
|
break;
|
||||||
case turnScreenOnOrOff:
|
case turnScreenOnOrOff:
|
||||||
if(action.getParameter1())
|
if(action.getParameter1())
|
||||||
addToArrayListUnique(Manifest.permission.WAKE_LOCK, requiredPermissions);
|
addToArrayListUnique(Manifest.permission.WAKE_LOCK, requiredPermissions);
|
||||||
@@ -851,6 +860,9 @@ public class ActivityPermissions extends Activity
|
|||||||
for(String ruleName : getRulesUsing(Action.Action_Enum.turnScreenOnOrOff))
|
for(String ruleName : getRulesUsing(Action.Action_Enum.turnScreenOnOrOff))
|
||||||
usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName));
|
usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName));
|
||||||
break;
|
break;
|
||||||
|
case Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS:
|
||||||
|
usingElements.add(getResources().getString(R.string.recommendedForBetterReliability));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return usingElements;
|
return usingElements;
|
||||||
@@ -877,6 +889,7 @@ public class ActivityPermissions extends Activity
|
|||||||
requestPermissions(cachedPermissionsToRequest, true);
|
requestPermissions(cachedPermissionsToRequest, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (requestCode == requestCodeForPermissionsDeviceAdmin)
|
if (requestCode == requestCodeForPermissionsDeviceAdmin)
|
||||||
{
|
{
|
||||||
NotificationManager mNotificationManager = (NotificationManager) ActivityPermissions.this.getSystemService(Context.NOTIFICATION_SERVICE);
|
NotificationManager mNotificationManager = (NotificationManager) ActivityPermissions.this.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||||
@@ -897,6 +910,10 @@ public class ActivityPermissions extends Activity
|
|||||||
if (requestCode == requestCodeForPermissionsNotifications)
|
if (requestCode == requestCodeForPermissionsNotifications)
|
||||||
if(havePermission(Manifest.permission.BIND_NOTIFICATION_LISTENER_SERVICE, ActivityPermissions.this))
|
if(havePermission(Manifest.permission.BIND_NOTIFICATION_LISTENER_SERVICE, ActivityPermissions.this))
|
||||||
requestPermissions(cachedPermissionsToRequest, true);
|
requestPermissions(cachedPermissionsToRequest, true);
|
||||||
|
|
||||||
|
if (requestCode == requestCodeForPermissionsBatteryOptimization)
|
||||||
|
if(havePermission(Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, ActivityPermissions.this))
|
||||||
|
requestPermissions(cachedPermissionsToRequest, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -966,10 +983,20 @@ public class ActivityPermissions extends Activity
|
|||||||
{
|
{
|
||||||
requiredPermissions.remove(s);
|
requiredPermissions.remove(s);
|
||||||
cachedPermissionsToRequest = requiredPermissions;
|
cachedPermissionsToRequest = requiredPermissions;
|
||||||
Intent intent = new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS");
|
Intent intent = new Intent(Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS);
|
||||||
startActivityForResult(intent, requestCodeForPermissionsNotifications);
|
startActivityForResult(intent, requestCodeForPermissionsNotifications);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
else if(s.equals(Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS))
|
||||||
|
{
|
||||||
|
requiredPermissions.remove(s);
|
||||||
|
cachedPermissionsToRequest = requiredPermissions;
|
||||||
|
String packageName = getApplicationContext().getPackageName();
|
||||||
|
Intent intent = new Intent(android.provider.Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
|
||||||
|
intent.setData(Uri.parse("package:" + packageName));
|
||||||
|
startActivityForResult(intent, requestCodeForPermissionsBatteryOptimization);
|
||||||
|
return;
|
||||||
|
}
|
||||||
else if (s.equalsIgnoreCase(Manifest.permission.ACCESS_BACKGROUND_LOCATION) && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)
|
else if (s.equalsIgnoreCase(Manifest.permission.ACCESS_BACKGROUND_LOCATION) && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)
|
||||||
{
|
{
|
||||||
AlertDialog dialog = Miscellaneous.messageBox(getResources().getString(R.string.readLocation), getResources().getString(R.string.pleaseGiveBgLocation), ActivityPermissions.this);
|
AlertDialog dialog = Miscellaneous.messageBox(getResources().getString(R.string.readLocation), getResources().getString(R.string.pleaseGiveBgLocation), ActivityPermissions.this);
|
||||||
@@ -1126,7 +1153,7 @@ public class ActivityPermissions extends Activity
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static ArrayList<String> checkPermissionsInVariableUse(String text, ArrayList<String> permsList)
|
static ArrayList<String> getPermissionsForVariablesInUse(String text, ArrayList<String> permsList)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
[uniqueid]
|
[uniqueid]
|
||||||
|
|||||||
@@ -41,8 +41,14 @@ public class AutomationService extends Service implements OnInitListener
|
|||||||
protected final static int notificationIdRestrictions = 1005;
|
protected final static int notificationIdRestrictions = 1005;
|
||||||
protected final static int notificationIdLocationRestriction = 1006;
|
protected final static int notificationIdLocationRestriction = 1006;
|
||||||
|
|
||||||
final static String NOTIFICATION_CHANNEL_ID = "com.jens.automation2";
|
final static String NOTIFICATION_CHANNEL_ID_SERVICE = "com.jens.automation2_service";
|
||||||
final static String channelName = "Service notification";
|
final static String NOTIFICATION_CHANNEL_NAME_SERVICE = "Service notification";
|
||||||
|
|
||||||
|
final static String NOTIFICATION_CHANNEL_ID_FUNCTIONALITY = "com.jens.automation2_functionality";
|
||||||
|
final static String NOTIFICATION_CHANNEL_NAME_FUNCTIONALITY = "Functionality information";
|
||||||
|
|
||||||
|
final static String NOTIFICATION_CHANNEL_ID_RULES = "com.jens.automation2_rules";
|
||||||
|
final static String NOTIFICATION_CHANNEL_NAME_RULES = "Rule notifications";
|
||||||
|
|
||||||
protected static Notification myNotification;
|
protected static Notification myNotification;
|
||||||
protected static NotificationCompat.Builder notificationBuilder = null;
|
protected static NotificationCompat.Builder notificationBuilder = null;
|
||||||
@@ -65,7 +71,6 @@ public class AutomationService extends Service implements OnInitListener
|
|||||||
lockSoundChangesEnd = Calendar.getInstance();
|
lockSoundChangesEnd = Calendar.getInstance();
|
||||||
|
|
||||||
lockSoundChangesEnd.add(Calendar.MINUTE, Settings.lockSoundChangesInterval);
|
lockSoundChangesEnd.add(Calendar.MINUTE, Settings.lockSoundChangesInterval);
|
||||||
// ActivityMainScreen.getActivityMainScreenInstance().updateMainScreen();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void checkLockSoundChangesTimeElapsed()
|
public void checkLockSoundChangesTimeElapsed()
|
||||||
@@ -109,18 +114,6 @@ public class AutomationService extends Service implements OnInitListener
|
|||||||
|
|
||||||
public boolean checkStartupRequirements(Context context, boolean startAtBoot)
|
public boolean checkStartupRequirements(Context context, boolean startAtBoot)
|
||||||
{
|
{
|
||||||
// if (!ActivityPermissions.havePermission(ActivityPermissions.writeExternalStoragePermissionName, AutomationService.this))
|
|
||||||
// {
|
|
||||||
// /*
|
|
||||||
// Don't have permission to access external storage. This is a show stopper as
|
|
||||||
// the configuration file is stored on external storage.
|
|
||||||
// */
|
|
||||||
// Miscellaneous.logEvent("e", "Permission", "Don't have permission to access external storage. Will request it now.", 4);
|
|
||||||
//// Toast.makeText(AutomationService.this, getResources().getString(R.string.appRequiresPermissiontoAccessExternalStorage), Toast.LENGTH_LONG).show();
|
|
||||||
// ActivityPermissions.requestSpecificPermission(ActivityPermissions.writeExternalStoragePermissionName);
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
|
|
||||||
if(Build.VERSION.SDK_INT >= 28)
|
if(Build.VERSION.SDK_INT >= 28)
|
||||||
{
|
{
|
||||||
if (!ActivityPermissions.havePermission(Manifest.permission.FOREGROUND_SERVICE, AutomationService.this))
|
if (!ActivityPermissions.havePermission(Manifest.permission.FOREGROUND_SERVICE, AutomationService.this))
|
||||||
@@ -135,10 +128,15 @@ public class AutomationService extends Service implements OnInitListener
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PointOfInterest.getPointOfInterestCollection() == null | PointOfInterest.getPointOfInterestCollection().size() == 0
|
if (
|
||||||
|
|
PointOfInterest.getPointOfInterestCollection() == null
|
||||||
Rule.getRuleCollection() == null | Rule.getRuleCollection().size() == 0
|
||
|
||||||
)
|
PointOfInterest.getPointOfInterestCollection().size() == 0
|
||||||
|
||
|
||||||
|
Rule.getRuleCollection() == null
|
||||||
|
||
|
||||||
|
Rule.getRuleCollection().size() == 0
|
||||||
|
)
|
||||||
{
|
{
|
||||||
if (startAtBoot)
|
if (startAtBoot)
|
||||||
{
|
{
|
||||||
@@ -173,7 +171,7 @@ public class AutomationService extends Service implements OnInitListener
|
|||||||
}
|
}
|
||||||
|
|
||||||
//if still no POIs...
|
//if still no POIs...
|
||||||
if (Rule.getRuleCollection() == null | Rule.getRuleCollection().size() == 0)
|
if (Rule.getRuleCollection() == null || Rule.getRuleCollection().size() == 0)
|
||||||
{
|
{
|
||||||
Miscellaneous.logEvent("w", "AutomationService", context.getResources().getString(R.string.serviceWontStart), 1);
|
Miscellaneous.logEvent("w", "AutomationService", context.getResources().getString(R.string.serviceWontStart), 1);
|
||||||
Toast.makeText(context, context.getResources().getString(R.string.serviceWontStart), Toast.LENGTH_LONG).show();
|
Toast.makeText(context, context.getResources().getString(R.string.serviceWontStart), Toast.LENGTH_LONG).show();
|
||||||
@@ -199,13 +197,13 @@ public class AutomationService extends Service implements OnInitListener
|
|||||||
if (checkStartupRequirements(this, startAtBoot))
|
if (checkStartupRequirements(this, startAtBoot))
|
||||||
{
|
{
|
||||||
Miscellaneous.logEvent("i", "Service", this.getResources().getString(R.string.logServiceStarting) + " VERSION_CODE: " + BuildConfig.VERSION_CODE + ", VERSION_NAME: " + BuildConfig.VERSION_NAME + ", flavor: " + BuildConfig.FLAVOR, 1);
|
Miscellaneous.logEvent("i", "Service", this.getResources().getString(R.string.logServiceStarting) + " VERSION_CODE: " + BuildConfig.VERSION_CODE + ", VERSION_NAME: " + BuildConfig.VERSION_NAME + ", flavor: " + BuildConfig.FLAVOR, 1);
|
||||||
Miscellaneous.logEvent("i", "Service", ActivityMaintenance.getSystemInfo(), 1);
|
Miscellaneous.logEvent("i", "Service", ActivityControlCenter.getSystemInfo(), 1);
|
||||||
|
|
||||||
startUpRoutine();
|
startUpRoutine();
|
||||||
|
|
||||||
Intent myIntent = new Intent(this, ActivityMainTabLayout.class);
|
Intent myIntent = new Intent(this, ActivityMainTabLayout.class);
|
||||||
myPendingIntent = PendingIntent.getActivity(this, 0, myIntent, 0);
|
myPendingIntent = PendingIntent.getActivity(this, 0, myIntent, 0);
|
||||||
notificationBuilder = createDefaultNotificationBuilder();
|
notificationBuilder = createServiceNotificationBuilder();
|
||||||
|
|
||||||
updateNotification();
|
updateNotification();
|
||||||
|
|
||||||
@@ -365,9 +363,9 @@ public class AutomationService extends Service implements OnInitListener
|
|||||||
Miscellaneous.logEvent("w", "Features disabled", "Features disabled because of rule " + rule, 5);
|
Miscellaneous.logEvent("w", "Features disabled", "Features disabled because of rule " + rule, 5);
|
||||||
|
|
||||||
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1)
|
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1)
|
||||||
Miscellaneous.createDismissableNotificationWithDelay(1010, getResources().getString(R.string.featuresDisabled), ActivityPermissions.notificationIdPermissions, pi);
|
Miscellaneous.createDismissibleNotificationWithDelay(1010, null, getResources().getString(R.string.featuresDisabled), ActivityPermissions.notificationIdPermissions, AutomationService.NOTIFICATION_CHANNEL_ID_SERVICE, pi);
|
||||||
else
|
else
|
||||||
Miscellaneous.createDismissableNotification(getResources().getString(R.string.featuresDisabled), ActivityPermissions.notificationIdPermissions, pi);
|
Miscellaneous.createDismissibleNotification(null, getResources().getString(R.string.featuresDisabled), ActivityPermissions.notificationIdPermissions, false, AutomationService.NOTIFICATION_CHANNEL_ID_SERVICE, pi);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|||||||