diff --git a/app/src/apkFlavor/AndroidManifest.xml b/app/src/apkFlavor/AndroidManifest.xml
index 4756587..6bca09c 100644
--- a/app/src/apkFlavor/AndroidManifest.xml
+++ b/app/src/apkFlavor/AndroidManifest.xml
@@ -165,6 +165,7 @@
+
diff --git a/app/src/fdroidFlavor/AndroidManifest.xml b/app/src/fdroidFlavor/AndroidManifest.xml
index 821c7fc..77a006c 100644
--- a/app/src/fdroidFlavor/AndroidManifest.xml
+++ b/app/src/fdroidFlavor/AndroidManifest.xml
@@ -163,6 +163,7 @@
+
diff --git a/app/src/googlePlayFlavor/AndroidManifest.xml b/app/src/googlePlayFlavor/AndroidManifest.xml
index 736f13f..5d60ad4 100644
--- a/app/src/googlePlayFlavor/AndroidManifest.xml
+++ b/app/src/googlePlayFlavor/AndroidManifest.xml
@@ -150,6 +150,7 @@
+
diff --git a/app/src/main/java/com/jens/automation2/Action.java b/app/src/main/java/com/jens/automation2/Action.java
index f765e6c..817f663 100644
--- a/app/src/main/java/com/jens/automation2/Action.java
+++ b/app/src/main/java/com/jens/automation2/Action.java
@@ -49,6 +49,7 @@ public class Action
vibrate,
createNotification,
closeNotification,
+ sendBroadcast,
sendTextMessage;
public String getFullName(Context context)
@@ -119,6 +120,8 @@ public class Action
return context.getResources().getString(R.string.createNotification);
case closeNotification:
return context.getResources().getString(R.string.closeNotifications);
+ case sendBroadcast:
+ return context.getResources().getString(R.string.sendBroadcast);
default:
return "Unknown";
}
@@ -259,6 +262,9 @@ public class Action
case closeNotification:
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.closeNotifications));
break;
+ case sendBroadcast:
+ returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.sendBroadcast));
+ break;
default:
returnString.append(action.toString());
}
@@ -534,6 +540,9 @@ public class Action
else
Miscellaneous.logEvent("w", "Close notification", "Close notification was requested, but OS version is too low: " + String.valueOf(Build.VERSION.SDK_INT), 2);
break;
+ case sendBroadcast:
+ Actions.sendBroadcast(context, this.getParameter2());
+ break;
default:
Miscellaneous.logEvent("w", "Action", context.getResources().getString(R.string.unknownActionSpecified), 3);
break;
@@ -637,7 +646,7 @@ public class Action
//Do something with result
//Toast.makeText(context, text, duration) result;
Miscellaneous.logEvent("i", "HTTP RESULT", result, 3);
- Actions myAction=new Actions();
+ Actions myAction = new Actions();
myAction.useDownloadedWebpage(result);
}
}
diff --git a/app/src/main/java/com/jens/automation2/Actions.java b/app/src/main/java/com/jens/automation2/Actions.java
index 9d494ea..d3c0d5f 100644
--- a/app/src/main/java/com/jens/automation2/Actions.java
+++ b/app/src/main/java/com/jens/automation2/Actions.java
@@ -185,7 +185,15 @@ public class Actions
}
}
- public static class WifiStuff
+ public static void sendBroadcast(Context context, String action)
+ {
+ Miscellaneous.logEvent("i", "sendBroadcast", "Sending broadcast with action " + action, 5);
+ Intent broadcastIntent = new Intent();
+ broadcastIntent.setAction(action);
+ context.sendBroadcast(broadcastIntent);
+ }
+
+ public static class WifiStuff
{
public static Boolean setWifi(Context context, Boolean desiredState, boolean toggleActionIfPossible)
{
diff --git a/app/src/main/java/com/jens/automation2/ActivityManageActionSendBroadcast.java b/app/src/main/java/com/jens/automation2/ActivityManageActionSendBroadcast.java
new file mode 100644
index 0000000..f346984
--- /dev/null
+++ b/app/src/main/java/com/jens/automation2/ActivityManageActionSendBroadcast.java
@@ -0,0 +1,83 @@
+package com.jens.automation2;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.DialogInterface;
+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 ActivityManageActionSendBroadcast extends Activity
+{
+ EditText etBroadcastToSend;
+ Button bBroadcastSendShowSuggestions, bSaveSendBroadcast;
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState)
+ {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_manage_action_send_broadcast);
+
+ etBroadcastToSend = (EditText)findViewById(R.id.etBroadcastToSend);
+ bBroadcastSendShowSuggestions = (Button)findViewById(R.id.bBroadcastSendShowSuggestions);
+ bSaveSendBroadcast = (Button)findViewById(R.id.bSaveSendBroadcast);
+
+ bSaveSendBroadcast.setOnClickListener(new View.OnClickListener()
+ {
+ @Override
+ public void onClick(View view)
+ {
+ if(checkInput())
+ {
+ Intent answer = new Intent();
+ answer.putExtra(ActivityManageRule.intentNameActionParameter2, etBroadcastToSend.getText().toString());
+ setResult(RESULT_OK, answer);
+ finish();
+ }
+ }
+ });
+
+ bBroadcastSendShowSuggestions.setOnClickListener(new View.OnClickListener()
+ {
+ @Override
+ public void onClick(View v)
+ {
+ AlertDialog.Builder builder = new AlertDialog.Builder(ActivityManageActionSendBroadcast.this);
+ builder.setTitle(getResources().getString(R.string.selectBroadcast));
+ builder.setItems(ActivityManageTriggerBroadcast.broadcastSuggestions, new DialogInterface.OnClickListener()
+ {
+ @Override
+ public void onClick(DialogInterface dialogInterface, int which)
+ {
+ etBroadcastToSend.setText(ActivityManageTriggerBroadcast.broadcastSuggestions[which]);
+ }
+ });
+ builder.create().show();
+ }
+ });
+
+ Intent input = getIntent();
+
+ if(input.hasExtra(ActivityManageRule.intentNameActionParameter2))
+ etBroadcastToSend.setText(input.getStringExtra(ActivityManageRule.intentNameActionParameter2));
+ }
+
+ boolean checkInput()
+ {
+ String broadcastToSend = etBroadcastToSend.getText().toString();
+ if(StringUtils.isEmpty(broadcastToSend))
+ {
+ Toast.makeText(ActivityManageActionSendBroadcast.this, getResources().getString(R.string.enterBroadcast), Toast.LENGTH_SHORT).show();
+ return false;
+ }
+
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/jens/automation2/ActivityManageRule.java b/app/src/main/java/com/jens/automation2/ActivityManageRule.java
index cdb1fd3..a64e6dc 100644
--- a/app/src/main/java/com/jens/automation2/ActivityManageRule.java
+++ b/app/src/main/java/com/jens/automation2/ActivityManageRule.java
@@ -121,6 +121,8 @@ public class ActivityManageRule extends Activity
final static int requestCodeActionControlMediaEdit = 808;
final static int requestCodeTriggerBroadcastReceivedAdd = 809;
final static int requestCodeTriggerBroadcastReceivedEdit = 810;
+ final static int requestCodeActionSendBroadcastAdd = 811;
+ final static int requestCodeActionSendBroadcastEdit = 812;
public static ActivityManageRule getInstance()
{
@@ -375,6 +377,11 @@ public class ActivityManageRule extends Activity
activityEditVibrateIntent.putExtra("vibratePattern", a.getParameter2());
startActivityForResult(activityEditVibrateIntent, requestCodeActionVibrateEdit);
break;
+ case sendBroadcast:
+ Intent activityEditSendBroadcastIntent = new Intent(ActivityManageRule.this, ActivityManageActionSendBroadcast.class);
+ activityEditSendBroadcastIntent.putExtra(intentNameActionParameter2, a.getParameter2());
+ startActivityForResult(activityEditSendBroadcastIntent, requestCodeActionSendBroadcastEdit);
+ break;
case controlMediaPlayback:
Intent activityEditControlMediaIntent = new Intent(ActivityManageRule.this, ActivityManageActionControlMedia.class);
activityEditControlMediaIntent.putExtra(ActivityManageRule.intentNameActionParameter2, a.getParameter2());
@@ -1472,6 +1479,16 @@ public class ActivityManageRule extends Activity
this.refreshActionList();
}
}
+ else if(requestCode == requestCodeActionSendBroadcastAdd)
+ {
+ if(resultCode == RESULT_OK)
+ {
+ newAction.setParentRule(ruleToEdit);
+ newAction.setParameter2(data.getStringExtra(intentNameActionParameter2));
+ ruleToEdit.getActionSet().add(newAction);
+ this.refreshActionList();
+ }
+ }
else if(requestCode == requestCodeActionControlMediaAdd)
{
if(resultCode == RESULT_OK)
@@ -1518,6 +1535,18 @@ public class ActivityManageRule extends Activity
this.refreshActionList();
}
}
+ else if(requestCode == requestCodeActionSendBroadcastEdit)
+ {
+ 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 == requestCodeActionControlMediaEdit)
{
if(resultCode == RESULT_OK)
@@ -1728,6 +1757,8 @@ public class ActivityManageRule extends Activity
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.sendBroadcast.toString()))
+ items.add(new Item(typesLong[i].toString(), R.drawable.satellite));
else if(types[i].toString().equals(Action_Enum.sendTextMessage.toString()))
{
// if(ActivityPermissions.isPermissionDeclaratedInManifest(ActivityManageSpecificRule.this, "android.permission.SEND_SMS") && !Miscellaneous.isGooglePlayInstalled(ActivityManageSpecificRule.this))
@@ -1890,6 +1921,12 @@ public class ActivityManageRule extends Activity
Intent intent = new Intent(ActivityManageRule.this, ActivityManageActionVibrate.class);
startActivityForResult(intent, requestCodeActionVibrateAdd);
}
+ else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.sendBroadcast.toString()))
+ {
+ newAction.setAction(Action_Enum.sendBroadcast);
+ Intent intent = new Intent(ActivityManageRule.this, ActivityManageActionSendBroadcast.class);
+ startActivityForResult(intent, requestCodeActionSendBroadcastAdd);
+ }
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.controlMediaPlayback.toString()))
{
newAction.setAction(Action_Enum.controlMediaPlayback);
diff --git a/app/src/main/java/com/jens/automation2/ActivityManageTriggerBroadcast.java b/app/src/main/java/com/jens/automation2/ActivityManageTriggerBroadcast.java
index eb366e1..6c0888f 100644
--- a/app/src/main/java/com/jens/automation2/ActivityManageTriggerBroadcast.java
+++ b/app/src/main/java/com/jens/automation2/ActivityManageTriggerBroadcast.java
@@ -96,7 +96,7 @@ public class ActivityManageTriggerBroadcast extends Activity
});
}
- String[] broadcastSuggestions = {
+ public static String[] broadcastSuggestions = {
"android.accounts.LOGIN_ACCOUNTS_CHANGED",
"android.accounts.action.ACCOUNT_REMOVED",
"android.app.action.ACTION_PASSWORD_CHANGED",
diff --git a/app/src/main/java/com/jens/automation2/receivers/ScreenStateReceiver.java b/app/src/main/java/com/jens/automation2/receivers/ScreenStateReceiver.java
index 934439b..599c07c 100644
--- a/app/src/main/java/com/jens/automation2/receivers/ScreenStateReceiver.java
+++ b/app/src/main/java/com/jens/automation2/receivers/ScreenStateReceiver.java
@@ -12,6 +12,7 @@ import android.provider.Settings;
import androidx.annotation.RequiresApi;
+import com.jens.automation2.Actions;
import com.jens.automation2.ActivityPermissions;
import com.jens.automation2.AutomationService;
import com.jens.automation2.Miscellaneous;
@@ -134,11 +135,11 @@ public class ScreenStateReceiver extends BroadcastReceiver implements Automation
if(keyguardManager.isKeyguardLocked() && !keyguardManager.isDeviceLocked())
{
- sendLockBroadcast(Miscellaneous.getAnyContext(), broadcastScreenLockedWithoutSecurity);
+ Actions.sendBroadcast(Miscellaneous.getAnyContext(), broadcastScreenLockedWithoutSecurity);
}
else if(keyguardManager.isDeviceLocked())
{
- sendLockBroadcast(Miscellaneous.getAnyContext(), broadcastScreenLockedWithSecurity);
+ Actions.sendBroadcast(Miscellaneous.getAnyContext(), broadcastScreenLockedWithSecurity);
}
else
{
@@ -232,13 +233,13 @@ public class ScreenStateReceiver extends BroadcastReceiver implements Automation
if(keyguardManager.isKeyguardLocked() && !keyguardManager.isDeviceLocked())
{
- sendLockBroadcast(Miscellaneous.getAnyContext(), broadcastScreenLockedWithoutSecurity);
+ Actions.sendBroadcast(Miscellaneous.getAnyContext(), broadcastScreenLockedWithoutSecurity);
timer.purge();
timer.cancel();
}
else if(keyguardManager.isDeviceLocked())
{
- sendLockBroadcast(Miscellaneous.getAnyContext(), broadcastScreenLockedWithSecurity);
+ Actions.sendBroadcast(Miscellaneous.getAnyContext(), broadcastScreenLockedWithSecurity);
timer.purge();
timer.cancel();
}
@@ -270,11 +271,4 @@ public class ScreenStateReceiver extends BroadcastReceiver implements Automation
timer.scheduleAtFixedRate(task, 0, interval);
}
}
-
- static void sendLockBroadcast(Context context, String lockType)
- {
- Intent lockedBroadcastIntent = new Intent();
- lockedBroadcastIntent.setAction(lockType);
- context.sendBroadcast(lockedBroadcastIntent);
- }
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_manage_action_send_broadcast.xml b/app/src/main/res/layout/activity_manage_action_send_broadcast.xml
new file mode 100644
index 0000000..56b1ffe
--- /dev/null
+++ b/app/src/main/res/layout/activity_manage_action_send_broadcast.xml
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 2eca1c4..ebadbd9 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -716,7 +716,5 @@
gesperrt (nur wischen, keine PIN, etc.)gesperrt (mit PIN, etc.)Jeglicher Sperrzustand wird nur erkannt werden, wenn gleichzeitig der Bildschirm aus ist.
- JWenn Sie ein Problem, einen Vorschlag oder eine Frage haben, schreiben Sie bitte auch etwas in die Email. Senden Sie mir nicht einfach die Dateien mit dem Standard-Mailtext. Ich werde solche Nachrichten ignorieren, sollten wir nicht bereits in einer Konversation sein.
- W
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 845e347..182e379 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -816,4 +816,7 @@
locked (with PIN, etc.)Any state of locked will only be detected if the screen is off.If you have a problem, suggestions or question, please write something in the email. Do not just send me the files with the default mail body. I will ignore everything those unless we\'re already in a conversation.
+ Send broadcast
+ Enter a broadcast action.
+ This action allows to send a broadcast across the Android OS messaging system. This is not user-visible, but apps who listen for that specific broadcast can respond to it being sent.
\ No newline at end of file
diff --git a/fastlane/metadata/android/de-DE/full_description.txt b/fastlane/metadata/android/de-DE/full_description.txt
index 4593912..16b5dc7 100644
--- a/fastlane/metadata/android/de-DE/full_description.txt
+++ b/fastlane/metadata/android/de-DE/full_description.txt
@@ -21,6 +21,7 @@ Mögliche Auslöser:
* Benachrichtigungen anderer Anwendungen
* Geräteausrichtung (Gyroskop)
* Profile aktiv oder nicht
+* Broadcasts anderer Anwendungen
Mögliche Aktionen:
* WLAN ein-/ausschalten
@@ -54,4 +55,4 @@ Spenden sind sicher eine gute, aber nicht die einzige Möglichkeit mich zu motiv
* Wer mir etwas Gutes tun will, kann die Anwendung auch im Play Store bewerten (https://play.google.com/store/apps/details?id=com.jens.automation2).
* Außerdem ist Hilfe bei der Übersetzung willkommen. Englisch, Spanisch und Deutsch kann ich selbst. Aber sonst ist alles gern gesehen.
-Erklärungen zu den vielen Berechtigungen können hier abgerufen werden: https://server47.de/automation/permissions_de.html
\ No newline at end of file
+Erklärungen zu den vielen Berechtigungen können hier abgerufen werden: https://server47.de/automation/permissions.php
\ No newline at end of file
diff --git a/fastlane/metadata/android/en-US/full_description.txt b/fastlane/metadata/android/en-US/full_description.txt
index 77cb6e6..97dea88 100644
--- a/fastlane/metadata/android/en-US/full_description.txt
+++ b/fastlane/metadata/android/en-US/full_description.txt
@@ -21,6 +21,7 @@ Supported triggers:
* Notifications of other apps
* Device orientation (gyroscope)
* Profile active or not
+* Broadcasts of other apps
Supported actions:
* Change wifi state
@@ -54,4 +55,4 @@ Donations are certainly a good, but not the only way to motivate me :-)
* If you'd like to support me, you can also leave a positive review for the app on Google Play (https://play.google.com/store/apps/details?id=com.jens.automation2).
* Furthermore I can always use help in translating the app. English, German and some Spanish are among my own skills. But everything else is more than welcome.
-Explanation of the many permissions can be found here: https://server47.de/automation/permissions_en.html
\ No newline at end of file
+Explanation of the many permissions can be found here: https://server47.de/automation/permissions.php
\ No newline at end of file
diff --git a/fastlane/metadata/android/es-ES/full_description.txt b/fastlane/metadata/android/es-ES/full_description.txt
index f9a3acf..b6ace1c 100644
--- a/fastlane/metadata/android/es-ES/full_description.txt
+++ b/fastlane/metadata/android/es-ES/full_description.txt
@@ -21,6 +21,7 @@ Disparadores:
* Notificaciónes de otras apps
* Orientación del dispositivo (giroscopio)
* Perfil activado o no
+* Broadcasts de otras apps
Aciónes:
* Pasar de wifi
@@ -54,4 +55,4 @@ Donaciónes seguramente son una buena, pero no la unica posibilidad de apoyarme
* Si quiere apoyarme puedes escribir un buena revisión en Google Play (https://play.google.com/store/apps/details?id=com.jens.automation2).
* Además siempre necesito ayuda en traduciendo la app. Ingles, Aleman y Español estan en mis habilidades. Per todo lo demás es bienvenido.
-Puedes leer una explicación de los permisos aqui: https://server47.de/automation/permissions_en.html
\ No newline at end of file
+Puedes leer una explicación de los permisos aqui: https://server47.de/automation/permissions.php
\ No newline at end of file
diff --git a/fastlane/metadata/android/it-IT/full_description.txt b/fastlane/metadata/android/it-IT/full_description.txt
index 3c22ac5..c584a5e 100644
--- a/fastlane/metadata/android/it-IT/full_description.txt
+++ b/fastlane/metadata/android/it-IT/full_description.txt
@@ -21,6 +21,7 @@ Eventi supportati:
* Notificazione di un altra applicazione
* Orientamento del dispositivo (giroscopio)
* Profilo attivo o meno
+* Broadcasts di altre app
Azioni supportate:
* Cambia lo stato del wifi
@@ -56,8 +57,7 @@ Donativi sono sicuramente una buona forma di motivarmi, ma non l'unica :-)
Inglese, Tedesco e un po' di Spagnolo son parte delle mie abilità. Ma per tutte le altre, apprezzo molto ogni aiuto.
Una spiegazione di tutti i permessi si trova qui:
-https://server47.de/automation/permissions_en.html
-
+https://server47.de/automation/permissions.php
diff --git a/fastlane/metadata/android/nl-NL/full_description.txt b/fastlane/metadata/android/nl-NL/full_description.txt
index d27980c..b28c791 100644
--- a/fastlane/metadata/android/nl-NL/full_description.txt
+++ b/fastlane/metadata/android/nl-NL/full_description.txt
@@ -23,6 +23,7 @@ Ondersteunde triggers:
* Meldingen van andere apps
* Apparaat oriëntatie (gyroscoop)
* Profiel actief of niet
+* Broadcasts van andere apps
Ondersteunde acties:
* Wijzig wifi status
@@ -57,4 +58,4 @@ Donaties zijn zeker een goede, maar niet de enige manier om mij te motiveren :-)
* Als je me wilt steunen, kun je ook een positieve review voor de app achterlaten op Google Play ( https://play.google.com/store/apps/details?id=com.jens.automation2 ).
* Verder kan ik altijd hulp gebruiken bij het vertalen van de app. Engels, Duits en wat Spaans behoren tot mijn eigen vaardigheden. Maar al het andere is meer dan welkom.
-Uitleg van de vele permissies vind je hier (Engels) : https://server47.de/automation/permissions_en.html
\ No newline at end of file
+Uitleg van de vele permissies vind je hier (Engels) : https://server47.de/automation/permissions.php
\ No newline at end of file
diff --git a/fastlane/metadata/android/nl-NL/images/phoneScreenshots/5.png b/fastlane/metadata/android/nl-NL/images/phoneScreenshots/5.png
new file mode 100644
index 0000000..feefe28
Binary files /dev/null and b/fastlane/metadata/android/nl-NL/images/phoneScreenshots/5.png differ
diff --git a/fastlane/metadata/android/nl-NL/images/phoneScreenshots/6.png b/fastlane/metadata/android/nl-NL/images/phoneScreenshots/6.png
new file mode 100644
index 0000000..193ef12
Binary files /dev/null and b/fastlane/metadata/android/nl-NL/images/phoneScreenshots/6.png differ