Merge remote-tracking branch 'origin/notification_action' into development
This commit is contained in:
commit
b2cd3cf17c
@ -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 116
|
versionCode 117
|
||||||
versionName "1.7.2"
|
versionName "1.7.3"
|
||||||
|
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
}
|
}
|
||||||
|
@ -152,6 +152,7 @@
|
|||||||
<activity android:name=".ActivityMaintenance" />
|
<activity android:name=".ActivityMaintenance" />
|
||||||
<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" />
|
||||||
|
@ -44,6 +44,7 @@ public class Action
|
|||||||
setScreenBrightness,
|
setScreenBrightness,
|
||||||
playSound,
|
playSound,
|
||||||
vibrate,
|
vibrate,
|
||||||
|
createNotification,
|
||||||
sendTextMessage;
|
sendTextMessage;
|
||||||
|
|
||||||
public String getFullName(Context context)
|
public String getFullName(Context context)
|
||||||
@ -108,6 +109,8 @@ 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);
|
||||||
default:
|
default:
|
||||||
return "Unknown";
|
return "Unknown";
|
||||||
}
|
}
|
||||||
@ -237,6 +240,9 @@ public class Action
|
|||||||
case setScreenBrightness:
|
case setScreenBrightness:
|
||||||
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.setScreenBrightness));
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.setScreenBrightness));
|
||||||
break;
|
break;
|
||||||
|
case createNotification:
|
||||||
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.createNotification));
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
returnString.append(action.toString());
|
returnString.append(action.toString());
|
||||||
}
|
}
|
||||||
@ -281,7 +287,7 @@ public class Action
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (parameter2 != null && parameter2.length() > 0)
|
if (parameter2 != null && parameter2.length() > 0)
|
||||||
returnString.append(": " + parameter2);
|
returnString.append(": " + parameter2.replace(Action.actionParameter2Split, "; "));
|
||||||
|
|
||||||
return returnString.toString();
|
return returnString.toString();
|
||||||
}
|
}
|
||||||
@ -451,6 +457,9 @@ public class Action
|
|||||||
case playSound:
|
case playSound:
|
||||||
Actions.playSound(getParameter1(), getParameter2());
|
Actions.playSound(getParameter1(), getParameter2());
|
||||||
break;
|
break;
|
||||||
|
case createNotification:
|
||||||
|
Actions.createNotification(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;
|
||||||
|
@ -8,7 +8,6 @@ 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;
|
||||||
@ -28,7 +27,6 @@ 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;
|
||||||
@ -54,6 +52,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 +78,26 @@ 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
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)
|
||||||
|
@ -14,6 +14,9 @@ import androidx.annotation.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;
|
||||||
@ -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,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();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -115,6 +115,8 @@ public class ActivityManageRule extends Activity
|
|||||||
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;
|
||||||
|
|
||||||
public static ActivityManageRule getInstance()
|
public static ActivityManageRule getInstance()
|
||||||
{
|
{
|
||||||
@ -353,8 +355,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:
|
||||||
@ -362,6 +364,13 @@ 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 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);
|
||||||
@ -1335,8 +1344,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();
|
||||||
@ -1367,6 +1376,20 @@ 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 == requestCodeActionVibrateEdit)
|
else if(requestCode == requestCodeActionVibrateEdit)
|
||||||
{
|
{
|
||||||
if(resultCode == RESULT_OK)
|
if(resultCode == RESULT_OK)
|
||||||
@ -1379,6 +1402,22 @@ 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 == requestCodeActionPlaySoundAdd)
|
else if(requestCode == requestCodeActionPlaySoundAdd)
|
||||||
{
|
{
|
||||||
if(resultCode == RESULT_OK)
|
if(resultCode == RESULT_OK)
|
||||||
@ -1519,6 +1558,8 @@ 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.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))
|
||||||
@ -1681,6 +1722,12 @@ 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.setScreenBrightness.toString()))
|
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.setScreenBrightness.toString()))
|
||||||
{
|
{
|
||||||
newAction.setAction(Action_Enum.setScreenBrightness);
|
newAction.setAction(Action_Enum.setScreenBrightness);
|
||||||
|
@ -529,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);
|
||||||
@ -588,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(
|
||||||
@ -608,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);
|
||||||
@ -1150,7 +1150,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,16 @@ 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 = "com.jens.automation2";
|
||||||
final static String channelName = "Service notification";
|
|
||||||
|
final static String NOTIFICATION_CHANNEL_ID_SERVICE = "com.jens.automation2_service";
|
||||||
|
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;
|
||||||
@ -205,7 +213,7 @@ public class AutomationService extends Service implements OnInitListener
|
|||||||
|
|
||||||
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 +373,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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -389,9 +397,9 @@ public class AutomationService extends Service implements OnInitListener
|
|||||||
Miscellaneous.logEvent("w", "Features disabled", "Background location disabled because Google to blame.", 5);
|
Miscellaneous.logEvent("w", "Features disabled", "Background location disabled because Google to blame.", 5);
|
||||||
|
|
||||||
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1)
|
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1)
|
||||||
Miscellaneous.createDismissableNotificationWithDelay(3300, getResources().getString(R.string.featuresDisabled), notificationIdRestrictions, pi);
|
Miscellaneous.createDismissibleNotificationWithDelay(3300, null, getResources().getString(R.string.featuresDisabled), notificationIdRestrictions, AutomationService.NOTIFICATION_CHANNEL_ID_SERVICE, pi);
|
||||||
else
|
else
|
||||||
Miscellaneous.createDismissableNotification(getResources().getString(R.string.featuresDisabled), notificationIdRestrictions, pi);
|
Miscellaneous.createDismissibleNotification(null, getResources().getString(R.string.featuresDisabled), notificationIdRestrictions, false, AutomationService.NOTIFICATION_CHANNEL_ID_SERVICE, pi);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -411,9 +419,9 @@ public class AutomationService extends Service implements OnInitListener
|
|||||||
Miscellaneous.logEvent("w", "Features disabled", "Background location disabled because Google to blame.", 5);
|
Miscellaneous.logEvent("w", "Features disabled", "Background location disabled because Google to blame.", 5);
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1)
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1)
|
||||||
Miscellaneous.createDismissableNotificationWithDelay(2200, getResources().getString(R.string.featuresDisabled), notificationIdLocationRestriction, pi);
|
Miscellaneous.createDismissibleNotificationWithDelay(2200, null, getResources().getString(R.string.featuresDisabled), notificationIdLocationRestriction, AutomationService.NOTIFICATION_CHANNEL_ID_SERVICE, pi);
|
||||||
else
|
else
|
||||||
Miscellaneous.createDismissableNotification(getResources().getString(R.string.featuresDisabled), notificationIdLocationRestriction, pi);
|
Miscellaneous.createDismissibleNotification(null, getResources().getString(R.string.featuresDisabled), notificationIdLocationRestriction, false, AutomationService.NOTIFICATION_CHANNEL_ID_SERVICE, pi);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -482,7 +490,7 @@ public class AutomationService extends Service implements OnInitListener
|
|||||||
return builder;
|
return builder;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static NotificationCompat.Builder createDefaultNotificationBuilder()
|
protected static NotificationCompat.Builder createServiceNotificationBuilder()
|
||||||
{
|
{
|
||||||
NotificationManager mNotificationManager = (NotificationManager) AutomationService.getInstance().getSystemService(Context.NOTIFICATION_SERVICE);
|
NotificationManager mNotificationManager = (NotificationManager) AutomationService.getInstance().getSystemService(Context.NOTIFICATION_SERVICE);
|
||||||
|
|
||||||
@ -490,14 +498,14 @@ public class AutomationService extends Service implements OnInitListener
|
|||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
|
||||||
{
|
{
|
||||||
NotificationChannel chan = new NotificationChannel(NOTIFICATION_CHANNEL_ID, channelName, NotificationManager.IMPORTANCE_LOW);
|
NotificationChannel channel = Miscellaneous.getNotificationChannel(AutomationService.NOTIFICATION_CHANNEL_ID_SERVICE);
|
||||||
// chan.setLightColor(Color.BLUE);
|
// channel.setLightColor(Color.BLUE);
|
||||||
chan.enableVibration(false);
|
channel.enableVibration(false);
|
||||||
chan.setSound(null, null);
|
channel.setSound(null, null);
|
||||||
chan.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
|
channel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
|
||||||
mNotificationManager.createNotificationChannel(chan);
|
mNotificationManager.createNotificationChannel(channel);
|
||||||
|
|
||||||
builder = new NotificationCompat.Builder(AutomationService.getInstance(), NOTIFICATION_CHANNEL_ID);
|
builder = new NotificationCompat.Builder(AutomationService.getInstance(), NOTIFICATION_CHANNEL_ID_SERVICE);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
builder = new NotificationCompat.Builder(AutomationService.getInstance());
|
builder = new NotificationCompat.Builder(AutomationService.getInstance());
|
||||||
@ -576,7 +584,7 @@ public class AutomationService extends Service implements OnInitListener
|
|||||||
String textToDisplay = bodyText + " " + lastRuleString;
|
String textToDisplay = bodyText + " " + lastRuleString;
|
||||||
|
|
||||||
if(notificationBuilder == null)
|
if(notificationBuilder == null)
|
||||||
notificationBuilder = createDefaultNotificationBuilder();
|
notificationBuilder = createServiceNotificationBuilder();
|
||||||
|
|
||||||
notificationBuilder.setContentText(textToDisplay);
|
notificationBuilder.setContentText(textToDisplay);
|
||||||
notificationBuilder.setStyle(new NotificationCompat.BigTextStyle().bigText(textToDisplay));
|
notificationBuilder.setStyle(new NotificationCompat.BigTextStyle().bigText(textToDisplay));
|
||||||
|
@ -8,7 +8,6 @@ import android.app.NotificationChannel;
|
|||||||
import android.app.NotificationManager;
|
import android.app.NotificationManager;
|
||||||
import android.app.PendingIntent;
|
import android.app.PendingIntent;
|
||||||
import android.app.Service;
|
import android.app.Service;
|
||||||
import android.content.ContentProvider;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
@ -16,6 +15,8 @@ import android.content.pm.PackageInfo;
|
|||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
|
import android.media.AudioAttributes;
|
||||||
|
import android.media.RingtoneManager;
|
||||||
import android.net.ConnectivityManager;
|
import android.net.ConnectivityManager;
|
||||||
import android.net.NetworkInfo;
|
import android.net.NetworkInfo;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
@ -26,7 +27,6 @@ import android.os.IBinder;
|
|||||||
import android.provider.MediaStore;
|
import android.provider.MediaStore;
|
||||||
import android.provider.Settings.Secure;
|
import android.provider.Settings.Secure;
|
||||||
import android.telephony.PhoneNumberUtils;
|
import android.telephony.PhoneNumberUtils;
|
||||||
import android.telephony.TelephonyManager;
|
|
||||||
import android.util.Base64;
|
import android.util.Base64;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
@ -83,6 +83,7 @@ import java.text.SimpleDateFormat;
|
|||||||
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;
|
||||||
import java.util.Scanner;
|
import java.util.Scanner;
|
||||||
import java.util.zip.ZipEntry;
|
import java.util.zip.ZipEntry;
|
||||||
import java.util.zip.ZipInputStream;
|
import java.util.zip.ZipInputStream;
|
||||||
@ -98,13 +99,10 @@ import javax.xml.parsers.DocumentBuilder;
|
|||||||
import javax.xml.parsers.DocumentBuilderFactory;
|
import javax.xml.parsers.DocumentBuilderFactory;
|
||||||
import javax.xml.parsers.ParserConfigurationException;
|
import javax.xml.parsers.ParserConfigurationException;
|
||||||
|
|
||||||
|
import androidx.annotation.RequiresApi;
|
||||||
import androidx.core.app.NotificationCompat;
|
import androidx.core.app.NotificationCompat;
|
||||||
import androidx.documentfile.provider.DocumentFile;
|
import androidx.documentfile.provider.DocumentFile;
|
||||||
|
|
||||||
import static android.provider.CalendarContract.CalendarCache.URI;
|
|
||||||
import static com.jens.automation2.AutomationService.NOTIFICATION_CHANNEL_ID;
|
|
||||||
import static com.jens.automation2.AutomationService.channelName;
|
|
||||||
|
|
||||||
public class Miscellaneous extends Service
|
public class Miscellaneous extends Service
|
||||||
{
|
{
|
||||||
protected static String writeableFolderStringCache = null;
|
protected static String writeableFolderStringCache = null;
|
||||||
@ -877,7 +875,7 @@ public class Miscellaneous extends Service
|
|||||||
|
|
||||||
@SuppressLint("NewApi")
|
@SuppressLint("NewApi")
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public static void createDismissableNotificationWithDelay(long delay, String textToDisplay, int notificationId, PendingIntent pendingIntent)
|
public static void createDismissibleNotificationWithDelay(long delay, String title, String textToDisplay, int notificationId, String notificationChannelId, PendingIntent pendingIntent)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
Now what's this about?
|
Now what's this about?
|
||||||
@ -903,7 +901,7 @@ public class Miscellaneous extends Service
|
|||||||
catch(Exception e)
|
catch(Exception e)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
createDismissableNotification(textToDisplay, notificationId, pendingIntent);
|
createDismissibleNotification(title, textToDisplay, notificationId, true, notificationChannelId, pendingIntent);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -924,40 +922,82 @@ public class Miscellaneous extends Service
|
|||||||
|
|
||||||
@SuppressLint("NewApi")
|
@SuppressLint("NewApi")
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public static void createDismissableNotification(String textToDisplay, int notificationId, PendingIntent pendingIntent)
|
public static void createDismissibleNotification(String title, String textToDisplay, int notificationId, boolean vibrate, String notificationChannelId, PendingIntent pendingIntent)
|
||||||
{
|
{
|
||||||
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
|
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
|
||||||
{
|
{
|
||||||
createDismissableNotificationSdk26(textToDisplay, notificationId, pendingIntent);
|
createDismissibleNotificationSdk26(title, textToDisplay, notificationId, vibrate, notificationChannelId, pendingIntent);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
NotificationManager mNotificationManager = (NotificationManager) Miscellaneous.getAnyContext().getSystemService(Context.NOTIFICATION_SERVICE);
|
NotificationManager mNotificationManager = (NotificationManager) Miscellaneous.getAnyContext().getSystemService(Context.NOTIFICATION_SERVICE);
|
||||||
|
|
||||||
NotificationCompat.Builder dismissableNotificationBuilder = createDismissableNotificationBuilder(pendingIntent);
|
NotificationCompat.Builder dismissibleNotificationBuilder = createDismissibleNotificationBuilder(vibrate, notificationChannelId, pendingIntent);
|
||||||
dismissableNotificationBuilder.setContentText(textToDisplay);
|
|
||||||
dismissableNotificationBuilder.setContentIntent(pendingIntent);
|
|
||||||
dismissableNotificationBuilder.setStyle(new NotificationCompat.BigTextStyle().bigText(textToDisplay));
|
|
||||||
dismissableNotificationBuilder.setAutoCancel(true);
|
|
||||||
|
|
||||||
Notification dismissableNotification = dismissableNotificationBuilder.build();
|
if(title == null)
|
||||||
|
dismissibleNotificationBuilder.setContentTitle(AutomationService.getInstance().getResources().getString(R.string.app_name));
|
||||||
|
else
|
||||||
|
dismissibleNotificationBuilder.setContentTitle(title);
|
||||||
|
|
||||||
mNotificationManager.notify(notificationId, dismissableNotification);
|
dismissibleNotificationBuilder.setContentText(textToDisplay);
|
||||||
|
dismissibleNotificationBuilder.setContentIntent(pendingIntent);
|
||||||
|
dismissibleNotificationBuilder.setStyle(new NotificationCompat.BigTextStyle().bigText(textToDisplay));
|
||||||
|
dismissibleNotificationBuilder.setAutoCancel(true);
|
||||||
|
|
||||||
/*NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
|
if(notificationChannelId.equals(AutomationService.NOTIFICATION_CHANNEL_ID_RULES))
|
||||||
.setSmallIcon(R.drawable.ic_launcher) // notification icon
|
dismissibleNotificationBuilder.setSmallIcon(R.drawable.info);
|
||||||
.setContentTitle("Notification!") // title for notification
|
|
||||||
.setContentText("Hello word") // message for notification
|
Notification dismissibleNotification = dismissibleNotificationBuilder.build();
|
||||||
.setAutoCancel(true); // clear notification after click
|
|
||||||
Intent intent = new Intent(this, MainActivity.class);
|
mNotificationManager.notify(notificationId, dismissibleNotification);
|
||||||
PendingIntent pi = PendingIntent.getActivity(this,0,intent,Intent.FLAG_ACTIVITY_NEW_TASK);
|
|
||||||
mBuilder.setContentIntent(pi);
|
|
||||||
NotificationManager mNotificationManager =
|
|
||||||
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
|
|
||||||
mNotificationManager.notify(0, dismissableNotification);*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void createDismissableNotificationSdk26(String textToDisplay, int notificationId, PendingIntent pendingIntent)
|
@RequiresApi(api = Build.VERSION_CODES.O)
|
||||||
|
static NotificationChannel findExistingChannel(List<NotificationChannel> channels, String channelId)
|
||||||
|
{
|
||||||
|
for(NotificationChannel c : channels)
|
||||||
|
{
|
||||||
|
if(c.getId().equals(channelId))
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
@RequiresApi(api = Build.VERSION_CODES.O)
|
||||||
|
static NotificationChannel getNotificationChannel(String channelId)
|
||||||
|
{
|
||||||
|
NotificationManager nm = (NotificationManager) Miscellaneous.getAnyContext().getSystemService(Context.NOTIFICATION_SERVICE);
|
||||||
|
List<NotificationChannel> channels = nm.getNotificationChannels();
|
||||||
|
if(channels.size() > 3)
|
||||||
|
{
|
||||||
|
for(NotificationChannel c : channels)
|
||||||
|
nm.deleteNotificationChannel(c.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
NotificationChannel channel = findExistingChannel(channels, channelId);
|
||||||
|
|
||||||
|
if(channel == null)
|
||||||
|
{
|
||||||
|
switch (channelId)
|
||||||
|
{
|
||||||
|
case AutomationService.NOTIFICATION_CHANNEL_ID_SERVICE:
|
||||||
|
channel = new NotificationChannel(AutomationService.NOTIFICATION_CHANNEL_ID_SERVICE, AutomationService.NOTIFICATION_CHANNEL_NAME_SERVICE, NotificationManager.IMPORTANCE_LOW);
|
||||||
|
break;
|
||||||
|
case AutomationService.NOTIFICATION_CHANNEL_ID_FUNCTIONALITY:
|
||||||
|
channel = new NotificationChannel(AutomationService.NOTIFICATION_CHANNEL_ID_FUNCTIONALITY, AutomationService.NOTIFICATION_CHANNEL_NAME_FUNCTIONALITY, NotificationManager.IMPORTANCE_HIGH);
|
||||||
|
break;
|
||||||
|
case AutomationService.NOTIFICATION_CHANNEL_ID_RULES:
|
||||||
|
channel = new NotificationChannel(AutomationService.NOTIFICATION_CHANNEL_ID_RULES, AutomationService.NOTIFICATION_CHANNEL_NAME_RULES, NotificationManager.IMPORTANCE_HIGH);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return channel;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void createDismissibleNotificationSdk26(String title, String textToDisplay, int notificationId, boolean vibrate, String notificationChannelId, PendingIntent pendingIntent)
|
||||||
{
|
{
|
||||||
NotificationManager mNotificationManager = (NotificationManager) AutomationService.getInstance().getSystemService(Context.NOTIFICATION_SERVICE);
|
NotificationManager mNotificationManager = (NotificationManager) AutomationService.getInstance().getSystemService(Context.NOTIFICATION_SERVICE);
|
||||||
|
|
||||||
@ -965,29 +1005,44 @@ public class Miscellaneous extends Service
|
|||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
|
||||||
{
|
{
|
||||||
NotificationChannel chan = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "Functionality warnings", NotificationManager.IMPORTANCE_HIGH);
|
NotificationChannel notificationChannel = getNotificationChannel(notificationChannelId);
|
||||||
// chan.setLightColor(Color.BLUE);
|
// notificationChannel.setLightColor(Color.BLUE);
|
||||||
chan.enableVibration(false);
|
notificationChannel.enableVibration(vibrate);
|
||||||
// chan.setSound(null, null);
|
try
|
||||||
chan.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
|
{
|
||||||
mNotificationManager.createNotificationChannel(chan);
|
Uri notificationSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
|
||||||
|
// Uri notificationSound = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE+ "://" +mContext.getPackageName()+"/"+R.raw.apple_ring));
|
||||||
|
// Ringtone r = RingtoneManager.getRingtone(Miscellaneous.getAnyContext(), notification);
|
||||||
|
AudioAttributes.Builder b = new AudioAttributes.Builder();
|
||||||
|
b.setContentType(AudioAttributes.CONTENT_TYPE_UNKNOWN);
|
||||||
|
notificationChannel.setSound(notificationSound, b.build());
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Miscellaneous.logEvent("i", "Notification", Log.getStackTraceString(e), 2);
|
||||||
|
}
|
||||||
|
notificationChannel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
|
||||||
|
mNotificationManager.createNotificationChannel(notificationChannel);
|
||||||
|
|
||||||
builder = new NotificationCompat.Builder(AutomationService.getInstance(), NOTIFICATION_CHANNEL_ID);
|
builder = new NotificationCompat.Builder(AutomationService.getInstance(), notificationChannel.getId());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
builder = new NotificationCompat.Builder(AutomationService.getInstance());
|
builder = new NotificationCompat.Builder(AutomationService.getInstance());
|
||||||
|
|
||||||
// if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
|
|
||||||
// builder.setCategory(Notification.CATEGORY_SERVICE);
|
|
||||||
|
|
||||||
builder.setWhen(System.currentTimeMillis());
|
builder.setWhen(System.currentTimeMillis());
|
||||||
builder.setContentIntent(pendingIntent);
|
builder.setContentIntent(pendingIntent);
|
||||||
|
|
||||||
|
if(title == null)
|
||||||
builder.setContentTitle(AutomationService.getInstance().getResources().getString(R.string.app_name));
|
builder.setContentTitle(AutomationService.getInstance().getResources().getString(R.string.app_name));
|
||||||
|
else
|
||||||
|
builder.setContentTitle(title);
|
||||||
|
|
||||||
builder.setOnlyAlertOnce(true);
|
builder.setOnlyAlertOnce(true);
|
||||||
|
|
||||||
if(Settings.showIconWhenServiceIsRunning)
|
if(Settings.showIconWhenServiceIsRunning && notificationChannelId.equals(AutomationService.NOTIFICATION_CHANNEL_ID_SERVICE))
|
||||||
builder.setSmallIcon(R.drawable.ic_launcher);
|
builder.setSmallIcon(R.drawable.ic_launcher);
|
||||||
|
else if(!notificationChannelId.equals(AutomationService.NOTIFICATION_CHANNEL_ID_SERVICE))
|
||||||
|
builder.setSmallIcon(R.drawable.info);
|
||||||
|
|
||||||
builder.setContentText(textToDisplay);
|
builder.setContentText(textToDisplay);
|
||||||
builder.setStyle(new NotificationCompat.BigTextStyle().bigText(textToDisplay));
|
builder.setStyle(new NotificationCompat.BigTextStyle().bigText(textToDisplay));
|
||||||
@ -995,7 +1050,6 @@ public class Miscellaneous extends Service
|
|||||||
NotificationManager notificationManager = (NotificationManager) Miscellaneous.getAnyContext().getSystemService(Context.NOTIFICATION_SERVICE);
|
NotificationManager notificationManager = (NotificationManager) Miscellaneous.getAnyContext().getSystemService(Context.NOTIFICATION_SERVICE);
|
||||||
notificationManager.notify(1, builder.build());
|
notificationManager.notify(1, builder.build());
|
||||||
|
|
||||||
|
|
||||||
// Intent notifyIntent = new Intent(context, notification.class);
|
// Intent notifyIntent = new Intent(context, notification.class);
|
||||||
// notifyIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
|
// notifyIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
|
||||||
//
|
//
|
||||||
@ -1017,7 +1071,7 @@ public class Miscellaneous extends Service
|
|||||||
// notificationManager.notify(1, notification);
|
// notificationManager.notify(1, notification);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static NotificationCompat.Builder createDismissableNotificationBuilder(PendingIntent myPendingIntent)
|
protected static NotificationCompat.Builder createDismissibleNotificationBuilder(boolean vibrate, String notificationChannelId, PendingIntent myPendingIntent)
|
||||||
{
|
{
|
||||||
NotificationManager mNotificationManager = (NotificationManager) AutomationService.getInstance().getSystemService(Context.NOTIFICATION_SERVICE);
|
NotificationManager mNotificationManager = (NotificationManager) AutomationService.getInstance().getSystemService(Context.NOTIFICATION_SERVICE);
|
||||||
|
|
||||||
@ -1025,14 +1079,14 @@ public class Miscellaneous extends Service
|
|||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
|
||||||
{
|
{
|
||||||
NotificationChannel chan = new NotificationChannel(NOTIFICATION_CHANNEL_ID, channelName, NotificationManager.IMPORTANCE_HIGH);
|
NotificationChannel notificationChannel = getNotificationChannel(notificationChannelId);
|
||||||
// chan.setLightColor(Color.BLUE);
|
// notificationChannel.setLightColor(Color.BLUE);
|
||||||
// chan.enableVibration(false);
|
notificationChannel.enableVibration(vibrate);
|
||||||
// chan.setSound(null, null);
|
// notificationChannel.setSound(null, null);
|
||||||
chan.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
|
notificationChannel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
|
||||||
mNotificationManager.createNotificationChannel(chan);
|
mNotificationManager.createNotificationChannel(notificationChannel);
|
||||||
|
|
||||||
builder = new NotificationCompat.Builder(AutomationService.getInstance(), NOTIFICATION_CHANNEL_ID);
|
builder = new NotificationCompat.Builder(AutomationService.getInstance(), notificationChannelId);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
builder = new NotificationCompat.Builder(AutomationService.getInstance());
|
builder = new NotificationCompat.Builder(AutomationService.getInstance());
|
||||||
|
10
app/src/main/res/drawable/info.xml
Normal file
10
app/src/main/res/drawable/info.xml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:viewportHeight="24"
|
||||||
|
android:tint="?attr/colorControlNormal">
|
||||||
|
<path
|
||||||
|
android:fillColor="@android:color/white"
|
||||||
|
android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM13,17h-2v-6h2v6zM13,9h-2L11,7h2v2z"/>
|
||||||
|
</vector>
|
@ -0,0 +1,90 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="@dimen/default_margin" >
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical" >
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/createNotification"
|
||||||
|
android:textSize="25dp"
|
||||||
|
android:layout_marginBottom="@dimen/default_margin" />
|
||||||
|
|
||||||
|
<TableLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:shrinkColumns="1"
|
||||||
|
android:stretchColumns="1">
|
||||||
|
|
||||||
|
<TableRow
|
||||||
|
android:layout_marginBottom="@dimen/activity_vertical_margin">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginRight="@dimen/default_margin"
|
||||||
|
android:text="@string/title" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/etNotificationTitle"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ems="10" />
|
||||||
|
|
||||||
|
</TableRow>
|
||||||
|
|
||||||
|
<TableRow
|
||||||
|
android:layout_marginBottom="@dimen/activity_vertical_margin">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:text="@string/text" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/etNotificationText"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ems="10" />
|
||||||
|
|
||||||
|
</TableRow>
|
||||||
|
|
||||||
|
</TableLayout>
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:layout_margin="10dp"
|
||||||
|
android:layout_marginVertical="@dimen/default_margin"
|
||||||
|
android:background="#aa000000" />
|
||||||
|
|
||||||
|
<ScrollView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tvLegend"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0dip"
|
||||||
|
android:text="@string/urlLegend" />
|
||||||
|
|
||||||
|
</ScrollView>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/bSaveActionNotification"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="@dimen/default_margin"
|
||||||
|
android:text="@string/save" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</ScrollView>
|
@ -57,7 +57,7 @@
|
|||||||
<string name="end">Ende</string>
|
<string name="end">Ende</string>
|
||||||
<string name="save">Speichern</string>
|
<string name="save">Speichern</string>
|
||||||
<string name="urlToTrigger">URL, die ausgelöst werden soll:</string>
|
<string name="urlToTrigger">URL, die ausgelöst werden soll:</string>
|
||||||
<string name="urlLegend">Variablen:\nSie können die folgenden Variablen verwenden. Vor dem Auslösen werden sie mit dem entsprechenden Wert Ihres Geräts ersetzt. Die Klammern müssen in den Text mit aufgenommen werden.\n\n[uniqueid] - Die Unique ID Ihres Geräts\n[serialnr] - Die Seriennummer Ihres Geräts\n[latitude] - Ihr gegenwärtiger Breitengrad\n[longitude] - Ihr gegenwärtiger Längengrad\n[phonenr] - Nummer des letzten ein- oder ausgehenden Anrufs\n[d] - Tag des Monats, 2-stellig mit führender Null\n[m] - Monat als Zahl, mit führenden Nullen\n[Y] - Vierstellige Jahreszahl\n[h] - Stunde im 12-Stunden-Format, mit führenden Nullen\n[H] - Stunde im 24-Stunden-Format, mit führenden Nullen\n[i] - Minuten, mit führenden Nullen\n[s] - Sekunden, mit führenden Nullen\n[ms] - milliseconds\n[notificationTitle] - Titel der letzten Benachrichtigung\n[notificationText] - Text der letzten Benachrichtigung</string>
|
<string name="urlLegend">Variablen:\nSie können die folgenden Variablen verwenden. Vor dem Auslösen werden sie mit dem entsprechenden Wert Ihres Geräts ersetzt. Die Klammern müssen in den Text mit aufgenommen werden.\n\n[uniqueid] - Die Unique ID Ihres Geräts\n[serialnr] - Die Seriennummer Ihres Geräts (< Android 9)\n[latitude] - Ihr gegenwärtiger Breitengrad\n[longitude] - Ihr gegenwärtiger Längengrad\n[phonenr] - Nummer des letzten ein- oder ausgehenden Anrufs\n[d] - Tag des Monats, 2-stellig mit führender Null\n[m] - Monat als Zahl, mit führenden Nullen\n[Y] - Vierstellige Jahreszahl\n[h] - Stunde im 12-Stunden-Format, mit führenden Nullen\n[H] - Stunde im 24-Stunden-Format, mit führenden Nullen\n[i] - Minuten, mit führenden Nullen\n[s] - Sekunden, mit führenden Nullen\n[ms] - milliseconds\n[notificationTitle] - Titel der letzten Benachrichtigung\n[notificationText] - Text der letzten Benachrichtigung</string>
|
||||||
<string name="wifi">WLAN</string>
|
<string name="wifi">WLAN</string>
|
||||||
<string name="activating">Aktiviere</string>
|
<string name="activating">Aktiviere</string>
|
||||||
<string name="deactivating">Deaktiviere</string>
|
<string name="deactivating">Deaktiviere</string>
|
||||||
|
@ -358,7 +358,7 @@
|
|||||||
<string name="networkAccuracy">Red exactitud [m]</string>
|
<string name="networkAccuracy">Red exactitud [m]</string>
|
||||||
<string name="minimumTimeForLocationUpdates">Tiempo mínimo para cambio en milisegundos para actualizar posición</string>
|
<string name="minimumTimeForLocationUpdates">Tiempo mínimo para cambio en milisegundos para actualizar posición</string>
|
||||||
<string name="timeForUpdate">Tiempo para actualizar [milisegundos]</string>
|
<string name="timeForUpdate">Tiempo para actualizar [milisegundos]</string>
|
||||||
<string name="urlLegend">Variables: Puede usar esas variables. Mientras ejecuta van a sustituir con los valores correspondientes en su dispositivo. Incluya las paréntecis en su texto. [uniqueid] - el número único de su dispositivo [serialnr] - el número de serie de su dispositivo [latitude] - su latitud [longitude] - su longitud [phonenr] - Ùltimo número de llamada realizada tanto de salida como entrante [d] - Dia del mes, 2 digitos con cero al comienzo [m] - número del mes, 2 digitos con cero al comienzo [Y] - Número del año, 4 digitos [h] - Hora, formato 12 horas con cero al comienzo [H] - Hora, formato 24 horas con cero al comienzo [i] - Minutos con cero al comienzo [s] - Segundos con cero al comienzo [ms] - milisegundos [notificationTitle] - Título de la última notificación [notificationText] - Texto de la última notificación</string>
|
<string name="urlLegend">Variables: Puede usar esas variables. Mientras ejecuta van a sustituir con los valores correspondientes en su dispositivo. Incluya las paréntecis en su texto.\n\n[uniqueid] - el número único de su dispositivo\n[serialnr] - el número de serie de su dispositivo (< Android 9)\n[latitude] - su latitud\n[longitude] - su longitud\n[phonenr] - Ùltimo número de llamada realizada tanto de salida como entrante\n[d] - Dia del mes, 2 digitos con cero al comienzo\n[m] - número del mes, 2 digitos con cero al comienzo\n[Y] - Número del año, 4 digitos\n[h] - Hora, formato 12 horas con cero al comienzo\n[H] - Hora, formato 24 horas con cero al comienzo\n[i] - Minutos con cero al comienzo\n[s] - Segundos con cero al comienzo\n[ms] - milisegundos\n[notificationTitle] - Título de la última notificación\n[notificationText] - Texto de la última notificación</string>
|
||||||
<string name="screenRotationAlreadyEnabled">Rotación del monitor todavia esta activado.</string>
|
<string name="screenRotationAlreadyEnabled">Rotación del monitor todavia esta activado.</string>
|
||||||
<string name="screenRotationAlreadyDisabled">Rotación del monitor todavia esta desactivado.</string>
|
<string name="screenRotationAlreadyDisabled">Rotación del monitor todavia esta desactivado.</string>
|
||||||
<string name="needLocationPermForWifiList">Se puede usar la lista de wifis conocidos para determinar los sitios en los cuales estuvo. Por eso el permiso de localización es necesario para cargar la lista de wifis. Si quiere elegir uno de la lista tiene que conceder el permiso. En caso contrario todavia puede introducir un nombre wifi manualmente.</string>
|
<string name="needLocationPermForWifiList">Se puede usar la lista de wifis conocidos para determinar los sitios en los cuales estuvo. Por eso el permiso de localización es necesario para cargar la lista de wifis. Si quiere elegir uno de la lista tiene que conceder el permiso. En caso contrario todavia puede introducir un nombre wifi manualmente.</string>
|
||||||
|
@ -533,7 +533,7 @@
|
|||||||
<string name="tuesday">Martedì</string>
|
<string name="tuesday">Martedì</string>
|
||||||
<string name="unknownError">Errore indeterminato.</string>
|
<string name="unknownError">Errore indeterminato.</string>
|
||||||
<string name="until">finchè</string>
|
<string name="until">finchè</string>
|
||||||
<string name="urlLegend">Variabili:\n È possibile utilizzare le seguenti variabili. All\'attivazione saranno sostituite con il valore corrispondente sul dispositivo. Includi le parentesi nel tuo testo.\n\n[uniqueid] - Il numero di serie del tuo dispositivo\n[serialnr] - Il serial number del tuo dispositivio\n[latitude] - La latitudine del tuo dispositivo\n[longitude] - La longitudine del tuo dispositivo\n[phonenr] - Numero dell\'ultima chiamata (entrante o uscente)\n[d] - Il giorno del mese, sempre 2 cifre\n[m] - Mese in formato numerico, sempre 2 cifre\n[Y] - L\’anno, sempre 4 cifre\n[h] - Ore in formato 12 ore, sempre 2 cifre con due punti\n[H] - Ore in formato 24 ore, sempre 2 cifre con due punti\n[i] - Minuti, sempre 2 cifre\n[s] - Secondi, sempre 2 cifre\n[ms] - millisecondi, sempre 3 cifre [notificationTitle] - titolo dell\'ultima notifica [notificationText] - testo dell\'ultima notifica</string>
|
<string name="urlLegend">Variabili:\n È possibile utilizzare le seguenti variabili. All\'attivazione saranno sostituite con il valore corrispondente sul dispositivo. Includi le parentesi nel tuo testo.\n\n[uniqueid] - Il numero di serie del tuo dispositivo\n[serialnr] - Il serial number del tuo dispositivio (< Android 9)\n[latitude] - La latitudine del tuo dispositivo\n[longitude] - La longitudine del tuo dispositivo\n[phonenr] - Numero dell\'ultima chiamata (entrante o uscente)\n[d] - Il giorno del mese, sempre 2 cifre\n[m] - Mese in formato numerico, sempre 2 cifre\n[Y] - L\’anno, sempre 4 cifre\n[h] - Ore in formato 12 ore, sempre 2 cifre con due punti\n[H] - Ore in formato 24 ore, sempre 2 cifre con due punti\n[i] - Minuti, sempre 2 cifre\n[s] - Secondi, sempre 2 cifre\n[ms] - millisecondi, sempre 3 cifre [notificationTitle] - titolo dell\'ultima notifica [notificationText] - testo dell\'ultima notifica</string>
|
||||||
<string name="urlToTrigger">URL da caricare:</string>
|
<string name="urlToTrigger">URL da caricare:</string>
|
||||||
<string name="urlTooShort">L\'url deve avere almeno 10 caratteri.</string>
|
<string name="urlTooShort">L\'url deve avere almeno 10 caratteri.</string>
|
||||||
<string name="usbTetheringFailForAboveGingerbread">Questo molto probabilmente non funzionerà dato che sei su una versione superiore ad Android 2.3. Tuttavia è possibile utilizzare la connessione wifi tethering per attivare la regola.</string>
|
<string name="usbTetheringFailForAboveGingerbread">Questo molto probabilmente non funzionerà dato che sei su una versione superiore ad Android 2.3. Tuttavia è possibile utilizzare la connessione wifi tethering per attivare la regola.</string>
|
||||||
|
@ -56,7 +56,7 @@
|
|||||||
<string name="end">Einde</string>
|
<string name="end">Einde</string>
|
||||||
<string name="save">Opslaan</string>
|
<string name="save">Opslaan</string>
|
||||||
<string name="urlToTrigger">URL om te activeren:</string>
|
<string name="urlToTrigger">URL om te activeren:</string>
|
||||||
<string name="urlLegend">Variabelen:U kunt de volgende variabelen gebruiken. Bij het triggeren zullen ze worden vervangen door de corresponderende waarde op je apparaat. Zet de haakjes in uw tekst. \n[uniqueid] - Het unieke id van uw apparaat[serienummer] - Het serienummer van uw apparaat[latitude] - De breedtegraad van uw apparaat[longitude] - De lengtegraad van uw apparaat[phonenr] - Nummer van het laatste inkomende of uitgaande gesprek[d] - Dag van de maand, 2 cijfers met voorloopnullen[m] - Numerieke weergave van een maand, met voorloopnullen[Y] - een volledige numerieke weergave van een jaar, 4 cijfers[h] - 12-uurs indeling van een uur, met voorloopnullen[H] - 24-uurs indeling van een uur, met voorloopnullen[i] - minuten, met voorloopnullen[s] - seconden, met voorloopnullen[ms] - milliseconden[notificationTitle] - titel van de laatste melding[notificationText] - tekst van de laatste melding</string>
|
<string name="urlLegend">Variabelen:U kunt de volgende variabelen gebruiken. Bij het triggeren zullen ze worden vervangen door de corresponderende waarde op je apparaat. Zet de haakjes in uw tekst. \n[uniqueid] - Het unieke id van uw apparaat[serialnr] - Het serienummer van uw apparaat (< Android 9)[latitude] - De breedtegraad van uw apparaat[longitude] - De lengtegraad van uw apparaat[phonenr] - Nummer van het laatste inkomende of uitgaande gesprek[d] - Dag van de maand, 2 cijfers met voorloopnullen[m] - Numerieke weergave van een maand, met voorloopnullen[Y] - een volledige numerieke weergave van een jaar, 4 cijfers[h] - 12-uurs indeling van een uur, met voorloopnullen[H] - 24-uurs indeling van een uur, met voorloopnullen[i] - minuten, met voorloopnullen[s] - seconden, met voorloopnullen[ms] - milliseconden[notificationTitle] - titel van de laatste melding[notificationText] - tekst van de laatste melding</string>
|
||||||
<string name="wifi">wifi</string>
|
<string name="wifi">wifi</string>
|
||||||
<string name="activating">Activeren</string>
|
<string name="activating">Activeren</string>
|
||||||
<string name="deactivating">Deactiveren</string>
|
<string name="deactivating">Deactiveren</string>
|
||||||
|
@ -70,7 +70,7 @@
|
|||||||
<string name="end">End</string>
|
<string name="end">End</string>
|
||||||
<string name="save">Save</string>
|
<string name="save">Save</string>
|
||||||
<string name="urlToTrigger">URL to trigger:</string>
|
<string name="urlToTrigger">URL to trigger:</string>
|
||||||
<string name="urlLegend">Variables:\nYou can use the following variables. Upon triggering they will be replaced with the corresponding value on your device. Include the brackets in your text.\n\n[uniqueid] - Your device\'s unique id\n[serialnr] - Your device\'s serial number\n[latitude] - Your device\'s latitude\n[longitude] - Your device\'s longitude\n[phonenr] - Number of last incoming or outgoing call\n[d] - Day of the month, 2 digits with leading zeros\n[m] - Numeric representation of a month, with leading zeros\n[Y] - A full numeric representation of a year, 4 digits\n[h] - 12-hour format of an hour with leading zeros\n[H] - 24-hour format of an hour with leading zeros\n[i] - Minutes with leading zeros\n[s] - Seconds, with leading zeros\n[ms] - milliseconds\n[notificationTitle] - title of last notification\n[notificationText] - text of last notification</string>
|
<string name="urlLegend">Variables:\nYou can use the following variables. Upon triggering they will be replaced with the corresponding value on your device. Include the brackets in your text.\n\n[uniqueid] - Your device\'s unique id\n[serialnr] - Your device\'s serial number (< Android 9)\n[latitude] - Your device\'s latitude\n[longitude] - Your device\'s longitude\n[phonenr] - Number of last incoming or outgoing call\n[d] - Day of the month, 2 digits with leading zeros\n[m] - Numeric representation of a month, with leading zeros\n[Y] - A full numeric representation of a year, 4 digits\n[h] - 12-hour format of an hour with leading zeros\n[H] - 24-hour format of an hour with leading zeros\n[i] - Minutes with leading zeros\n[s] - Seconds, with leading zeros\n[ms] - milliseconds\n[notificationTitle] - title of last notification\n[notificationText] - text of last notification</string>
|
||||||
<string name="wifi">wifi</string>
|
<string name="wifi">wifi</string>
|
||||||
<string name="activating">Activating</string>
|
<string name="activating">Activating</string>
|
||||||
<string name="deactivating">Deactivating</string>
|
<string name="deactivating">Deactivating</string>
|
||||||
@ -755,4 +755,9 @@
|
|||||||
<string name="pickActivityManually">Choose manually</string>
|
<string name="pickActivityManually">Choose manually</string>
|
||||||
<string name="launcherOrManualExplanation">Easy mode: Automation can try to identify the launcher activity of the desired program automatically. Alternatively you can also pick one of the application\'s activities manually. What would you like?</string>
|
<string name="launcherOrManualExplanation">Easy mode: Automation can try to identify the launcher activity of the desired program automatically. Alternatively you can also pick one of the application\'s activities manually. What would you like?</string>
|
||||||
<string name="launcherNotFound">A launcher activity of this app could not be identified. You will have to pick one manually.</string>
|
<string name="launcherNotFound">A launcher activity of this app could not be identified. You will have to pick one manually.</string>
|
||||||
|
<string name="createNotification">Create notification</string>
|
||||||
|
<string name="enterTitle">Enter a title.</string>
|
||||||
|
<string name="enterText">Enter a text.</string>
|
||||||
|
<string name="icon">Icon</string>
|
||||||
|
<string name="sound">Sound</string>
|
||||||
</resources>
|
</resources>
|
@ -20,6 +20,7 @@ Mögliche Auslöser:
|
|||||||
* Telefongespräch im Gange
|
* Telefongespräch im Gange
|
||||||
* Benachrichtigungen anderer Anwendungen
|
* Benachrichtigungen anderer Anwendungen
|
||||||
* Geräteausrichtung (Gyroskop)
|
* Geräteausrichtung (Gyroskop)
|
||||||
|
* Profile aktiv oder nicht
|
||||||
|
|
||||||
Mögliche Aktionen:
|
Mögliche Aktionen:
|
||||||
* WLAN ein-/ausschalten
|
* WLAN ein-/ausschalten
|
||||||
@ -40,6 +41,7 @@ Mögliche Aktionen:
|
|||||||
* Bildschirmhelligkeit ändern
|
* Bildschirmhelligkeit ändern
|
||||||
* SMS verschicken
|
* SMS verschicken
|
||||||
* Sounddatei abspielen.
|
* Sounddatei abspielen.
|
||||||
|
* Benachrichtigungen erstellen
|
||||||
|
|
||||||
Es ist ziemlich schwierig diese Anwendung über die vielen verschiedenen Geräte und Android Versionen am Laufen zu halten. Ich kann vieles im Emulator testen, aber eben nicht alles.
|
Es ist ziemlich schwierig diese Anwendung über die vielen verschiedenen Geräte und Android Versionen am Laufen zu halten. Ich kann vieles im Emulator testen, aber eben nicht alles.
|
||||||
Wenn also eine bestimmte Funktion nicht so tut wie sie sollte - lassen Sie es mich wissen. Über die Jahre habe ich noch alle Fehler behoben, die mir vernünftig gemeldet wurden. Aber dafür bin ich auf Ihre Mithilfe angewiesen.
|
Wenn also eine bestimmte Funktion nicht so tut wie sie sollte - lassen Sie es mich wissen. Über die Jahre habe ich noch alle Fehler behoben, die mir vernünftig gemeldet wurden. Aber dafür bin ich auf Ihre Mithilfe angewiesen.
|
||||||
|
@ -20,6 +20,7 @@ Supported triggers:
|
|||||||
* Phone call running
|
* Phone call running
|
||||||
* Notifications of other apps
|
* Notifications of other apps
|
||||||
* Device orientation (gyroscope)
|
* Device orientation (gyroscope)
|
||||||
|
* Profile active or not
|
||||||
|
|
||||||
Supported actions:
|
Supported actions:
|
||||||
* Change wifi state
|
* Change wifi state
|
||||||
@ -40,6 +41,7 @@ Supported actions:
|
|||||||
* Change screen brightness
|
* Change screen brightness
|
||||||
* Send text message
|
* Send text message
|
||||||
* Play sound file
|
* Play sound file
|
||||||
|
* Create notifications
|
||||||
|
|
||||||
It's quite hard to keep this app working across the many different hardwares as well as the many changes Android undergoes over the versions. I can test it in the emulator, but that cannot show all bugs.
|
It's quite hard to keep this app working across the many different hardwares as well as the many changes Android undergoes over the versions. I can test it in the emulator, but that cannot show all bugs.
|
||||||
So if a certain feature is not working on your device - let me know. Over the years I have fixed almost all bugs that have been reasonably reported to me. But for that I'm dependend on your input.
|
So if a certain feature is not working on your device - let me know. Over the years I have fixed almost all bugs that have been reasonably reported to me. But for that I'm dependend on your input.
|
||||||
|
@ -20,6 +20,7 @@ Disparadores:
|
|||||||
* Llamado de teléfono activo
|
* Llamado de teléfono activo
|
||||||
* Notificaciónes de otras apps
|
* Notificaciónes de otras apps
|
||||||
* Orientación del dispositivo (giroscopio)
|
* Orientación del dispositivo (giroscopio)
|
||||||
|
* Perfil activado o no
|
||||||
|
|
||||||
Aciónes:
|
Aciónes:
|
||||||
* Pasar de wifi
|
* Pasar de wifi
|
||||||
@ -40,6 +41,7 @@ Aciónes:
|
|||||||
* Cambiar luminosidad del monitor
|
* Cambiar luminosidad del monitor
|
||||||
* Enviar mensaje
|
* Enviar mensaje
|
||||||
* Tocar archivo sonido
|
* Tocar archivo sonido
|
||||||
|
* Crear notificaciones
|
||||||
|
|
||||||
Es muy dificil mantener esta applicación functionando en todos los hardwares y versiónes de Android. Puedo probrar mucho en el emulator, pero no puedo enviar todos los errores.
|
Es muy dificil mantener esta applicación functionando en todos los hardwares y versiónes de Android. Puedo probrar mucho en el emulator, pero no puedo enviar todos los errores.
|
||||||
Si una función no funcióna - digame. En muchos años resolvaba la mayoria de los errores que los halladores me informaron bien. Pero dependo en su ayuda.
|
Si una función no funcióna - digame. En muchos años resolvaba la mayoria de los errores que los halladores me informaron bien. Pero dependo en su ayuda.
|
||||||
|
@ -20,6 +20,7 @@ Eventi supportati:
|
|||||||
* Chiamata in esecuzione
|
* Chiamata in esecuzione
|
||||||
* Notificazione di un altra applicazione
|
* Notificazione di un altra applicazione
|
||||||
* Orientamento del dispositivo (giroscopio)
|
* Orientamento del dispositivo (giroscopio)
|
||||||
|
* Profilo attivo o meno
|
||||||
|
|
||||||
Azioni supportate:
|
Azioni supportate:
|
||||||
* Cambia lo stato del wifi
|
* Cambia lo stato del wifi
|
||||||
@ -40,6 +41,7 @@ Azioni supportate:
|
|||||||
* Cambia la luminosità dello schermo
|
* Cambia la luminosità dello schermo
|
||||||
* Manda un messaggio di testo
|
* Manda un messaggio di testo
|
||||||
* Esegui un file musicale
|
* Esegui un file musicale
|
||||||
|
* Creare notifiche
|
||||||
|
|
||||||
È piuttosto difficile mantere questa applicazione funzionante su tutti gli hardware esistenti ed includendo tutti i cambi che Android riceve fra una versione e l'altra. Posso effettuare tests nell'emulatore, ma non sarà possibile trovare tutti gli errori.
|
È piuttosto difficile mantere questa applicazione funzionante su tutti gli hardware esistenti ed includendo tutti i cambi che Android riceve fra una versione e l'altra. Posso effettuare tests nell'emulatore, ma non sarà possibile trovare tutti gli errori.
|
||||||
Pertanto, se una certa funzione non funziona sul tuo dispositivo - fammelo sapere. Nel corso degli anni ho potuto risolvere tutti gli errori che sono stati riportati in maniera ragionevole. Infatti, per questo, dipendo dalle informazioni condivise.
|
Pertanto, se una certa funzione non funziona sul tuo dispositivo - fammelo sapere. Nel corso degli anni ho potuto risolvere tutti gli errori che sono stati riportati in maniera ragionevole. Infatti, per questo, dipendo dalle informazioni condivise.
|
||||||
|
@ -22,6 +22,7 @@ Ondersteunde triggers:
|
|||||||
* Lopend telefoongesprek
|
* Lopend telefoongesprek
|
||||||
* Meldingen van andere apps
|
* Meldingen van andere apps
|
||||||
* Apparaat oriëntatie (gyroscoop)
|
* Apparaat oriëntatie (gyroscoop)
|
||||||
|
* Profiel actief of niet
|
||||||
|
|
||||||
Ondersteunde acties:
|
Ondersteunde acties:
|
||||||
* Wijzig wifi status
|
* Wijzig wifi status
|
||||||
@ -42,6 +43,7 @@ Ondersteunde acties:
|
|||||||
* Verander de helderheid van het scherm
|
* Verander de helderheid van het scherm
|
||||||
* Verstuur tekstbericht
|
* Verstuur tekstbericht
|
||||||
* Geluidsbestand afspelen
|
* Geluidsbestand afspelen
|
||||||
|
* Meldingen maken
|
||||||
|
|
||||||
Het is lastig om deze App werkend te houden over de vele verschillende hardware en de vele veranderingen die Android ondergaat in de loop der versies.
|
Het is lastig om deze App werkend te houden over de vele verschillende hardware en de vele veranderingen die Android ondergaat in de loop der versies.
|
||||||
Ik test het in een emulator, maar dat kan niet alle bugs laten zien.
|
Ik test het in een emulator, maar dat kan niet alle bugs laten zien.
|
||||||
|
Loading…
Reference in New Issue
Block a user