diff --git a/app/src/main/java/com/jens/automation2/Action.java b/app/src/main/java/com/jens/automation2/Action.java
index 0cb58e1..54f2ca8 100644
--- a/app/src/main/java/com/jens/automation2/Action.java
+++ b/app/src/main/java/com/jens/automation2/Action.java
@@ -15,6 +15,7 @@ public class Action
{
public static final String actionParameter2Split = "ap2split";
public static final String intentPairSeperator = "intPairSplit";
+ public static final String vibrateSeparator = ",";
public enum Action_Enum {
setWifi,
@@ -38,6 +39,7 @@ public class Action
playMusic,
setScreenBrightness,
playSound,
+ vibrate,
sendTextMessage;
public String getFullName(Context context)
@@ -84,6 +86,8 @@ public class Action
return context.getResources().getString(R.string.waitBeforeNextAction);
case wakeupDevice:
return context.getResources().getString(R.string.wakeupDevice);
+ case vibrate:
+ return context.getResources().getString(R.string.vibrate);
case setAirplaneMode:
return context.getResources().getString(R.string.airplaneMode);
case setDataConnection:
@@ -405,6 +409,9 @@ public class Action
case setScreenBrightness:
Actions.setScreenBrightness(getParameter1(), Integer.parseInt(getParameter2()));
break;
+ case vibrate:
+ Actions.vibrate(getParameter1(), getParameter2());
+ break;
case playSound:
Actions.playSound(getParameter1(), getParameter2());
break;
diff --git a/app/src/main/java/com/jens/automation2/Actions.java b/app/src/main/java/com/jens/automation2/Actions.java
index 70939fd..e2873e9 100644
--- a/app/src/main/java/com/jens/automation2/Actions.java
+++ b/app/src/main/java/com/jens/automation2/Actions.java
@@ -16,6 +16,8 @@ import android.net.wifi.WifiManager;
import android.os.Build;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
+import android.os.VibrationEffect;
+import android.os.Vibrator;
import android.provider.MediaStore;
import android.telephony.SmsManager;
import android.telephony.SubscriptionManager;
@@ -544,7 +546,38 @@ public class Actions
Miscellaneous.logEvent("i", "Play sound file", "Not playing sound file because phone is on some kind of mute state.", 2);
}
- public void useDownloadedWebpage(String result)
+ public static void vibrate(boolean parameter1, String parameter2)
+ {
+ String vibrateDurations[] = parameter2.split(Action.vibrateSeparator);
+
+ int counter = 1;
+ for(String vibrate : vibrateDurations)
+ {
+ if(counter % 2 != 0)
+ {
+ Vibrator vibrator = (Vibrator) Miscellaneous.getAnyContext().getSystemService(Context.VIBRATOR_SERVICE);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
+ vibrator.vibrate(VibrationEffect.createOneShot(Long.parseLong(vibrate), VibrationEffect.DEFAULT_AMPLITUDE));
+ else
+ vibrator.vibrate(Long.parseLong(vibrate));
+ }
+ else
+ {
+ try
+ {
+ Thread.sleep(Long.parseLong(vibrate));
+ }
+ catch (Exception e)
+ {
+ Miscellaneous.logEvent("e", "VibrateSleep", Log.getStackTraceString(e), 5);
+ }
+ }
+
+ counter++;
+ }
+ }
+
+ public void useDownloadedWebpage(String result)
{
// Toast.makeText(context, "Result: " + result, Toast.LENGTH_LONG).show();
}
diff --git a/app/src/main/java/com/jens/automation2/ActivityManageActionSendTextMessage.java b/app/src/main/java/com/jens/automation2/ActivityManageActionSendTextMessage.java
index f399e33..b7558f9 100644
--- a/app/src/main/java/com/jens/automation2/ActivityManageActionSendTextMessage.java
+++ b/app/src/main/java/com/jens/automation2/ActivityManageActionSendTextMessage.java
@@ -84,20 +84,10 @@ public class ActivityManageActionSendTextMessage extends Activity
etPhoneNumber.setText(parameters[0]);
etSendTextMessage.setText(parameters[1]);
}
-
-
-// String url = getIntent().getStringExtra("urlToTrigger");
-// if(url != null)
-// existingUrl = url;
}
private void backToRuleManager()
{
-// Intent returnIntent = new Intent();
-// returnIntent.putExtra("urlToTrigger", existingUrl);
-
-// setResult(RESULT_OK, returnIntent);
-
if(edit && resultingAction != null)
{
ActivityManageActionSendTextMessage.resultingAction.setParameter2(etPhoneNumber.getText().toString() + Actions.smsSeparator + etSendTextMessage.getText().toString());
diff --git a/app/src/main/java/com/jens/automation2/ActivityManageActionVibrate.java b/app/src/main/java/com/jens/automation2/ActivityManageActionVibrate.java
index 6f40466..5eeb51c 100644
--- a/app/src/main/java/com/jens/automation2/ActivityManageActionVibrate.java
+++ b/app/src/main/java/com/jens/automation2/ActivityManageActionVibrate.java
@@ -3,6 +3,7 @@ package com.jens.automation2;
import android.Manifest;
import android.app.Activity;
import android.content.Context;
+import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.os.VibrationEffect;
@@ -11,9 +12,12 @@ import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
+import android.widget.Toast;
import androidx.annotation.Nullable;
+import org.apache.commons.lang3.StringUtils;
+
public class ActivityManageActionVibrate extends Activity
{
TextView etVibratePattern;
@@ -29,29 +33,53 @@ public class ActivityManageActionVibrate extends Activity
bTestVibratePattern = (Button)findViewById(R.id.bTestVibratePattern);
bSaveVibratePattern = (Button)findViewById(R.id.bSaveVibratePattern);
+ bSaveVibratePattern.setOnClickListener(new View.OnClickListener()
+ {
+ @Override
+ public void onClick(View view)
+ {
+ if(checkInput())
+ {
+ Intent answer = new Intent();
+ answer.putExtra("vibratePattern", etVibratePattern.getText().toString());
+ setResult(RESULT_OK, answer);
+ finish();
+ }
+ }
+ });
+
bTestVibratePattern.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
- if(ActivityPermissions.havePermission(Manifest.permission.VIBRATE, ActivityManageActionVibrate.this))
+ if(checkInput())
{
- String vibrateDurations[] = etVibratePattern.getText().toString().split(",");
-
- for(String duration : vibrateDurations)
+ if (ActivityPermissions.havePermission(Manifest.permission.VIBRATE, ActivityManageActionVibrate.this))
{
- Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
- {
- vibrator.vibrate(VibrationEffect.createOneShot(Long.parseLong(duration), VibrationEffect.DEFAULT_AMPLITUDE));
- }
- else
- {
- vibrator.vibrate(Long.parseLong(duration));
- }
+ String pattern = etVibratePattern.getText().toString();
+ Actions.vibrate(false, pattern);
}
}
}
});
+
+ Intent input = getIntent();
+
+ if(input.hasExtra("vibratePattern"))
+ etVibratePattern.setText(input.getStringExtra("vibratePattern"));
+ }
+
+ boolean checkInput()
+ {
+ String vibratePattern = etVibratePattern.getText().toString();
+ String regex = "^[0-9,]+$";
+ if(StringUtils.isEmpty(vibratePattern) || !vibratePattern.matches(regex) || vibratePattern.substring(0, 1).equals(",") || vibratePattern.substring(vibratePattern.length()-1).equals(","))
+ {
+ Toast.makeText(ActivityManageActionVibrate.this, getResources().getString(R.string.pleaseEnterValidVibrationPattern), 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 65b91c9..0476b4e 100644
--- a/app/src/main/java/com/jens/automation2/ActivityManageRule.java
+++ b/app/src/main/java/com/jens/automation2/ActivityManageRule.java
@@ -103,6 +103,9 @@ public class ActivityManageRule extends Activity
final static int requestCodeTriggerPhoneCallEdit = 602;
final static int requestCodeTriggerWifiAdd = 723;
final static int requestCodeTriggerWifiEdit = 724;
+ final static int requestCodeActionSendTextMessageAdd = 5001;
+ final static int requestCodeActionVibrateAdd = 801;
+ final static int requestCodeActionVibrateEdit = 802;
public static ActivityManageRule getInstance()
{
@@ -228,27 +231,11 @@ public class ActivityManageRule extends Activity
Trigger selectedTrigger = (Trigger)triggerListView.getItemAtPosition(arg2);
switch(selectedTrigger.getTriggerType())
{
-// case batteryLevel:
-// break;
-// case charging:
-// break;
-// case noiseLevel:
-// break;
-// case pointOfInterest:
-// break;
-// case process_started_stopped:
-// break;
-// case speed:
-// break;
case timeFrame:
ActivityManageTriggerTimeFrame.editedTimeFrameTrigger = selectedTrigger;
Intent timeFrameEditor = new Intent(ActivityManageRule.this, ActivityManageTriggerTimeFrame.class);
startActivityForResult(timeFrameEditor, requestCodeTriggerTimeframeEdit);
break;
-// case usb_host_connection:
-// break;
-// case wifiConnection:
-// break;
case bluetoothConnection:
ActivityManageTriggerBluetooth.editedBluetoothTrigger = selectedTrigger;
Intent bluetoothEditor = new Intent(ActivityManageRule.this, ActivityManageTriggerBluetooth.class);
@@ -306,14 +293,6 @@ public class ActivityManageRule extends Activity
Action a = (Action)actionListView.getItemAtPosition(arg2);
switch(a.getAction())
{
-// case changeSoundProfile:
-// break;
-// case disableScreenRotation:
-// break;
-// case enableScreenRotation:
-// break;
-// case setAirplaneMode:
-// break;
case startOtherActivity:
Intent intent = new Intent(ActivityManageRule.this, ActivityManageActionStartActivity.class);
ActivityManageActionStartActivity.resultingAction = a;
@@ -340,11 +319,15 @@ public class ActivityManageRule extends Activity
break;
case setScreenBrightness:
Intent activityEditScreenBrightnessIntent = new Intent(ActivityManageRule.this, ActivityManageActionBrightnessSetting.class);
-// ActivityEditTriggerUrl.resultingAction = a;
activityEditScreenBrightnessIntent.putExtra("autoBrightness", a.getParameter1());
activityEditScreenBrightnessIntent.putExtra("brightnessValue", Integer.parseInt(a.getParameter2()));
startActivityForResult(activityEditScreenBrightnessIntent, requestCodeActionScreenBrightnessEdit);
break;
+ case vibrate:
+ Intent activityEditVibrateIntent = new Intent(ActivityManageRule.this, ActivityManageActionVibrate.class);
+ activityEditVibrateIntent.putExtra("vibratePattern", a.getParameter2());
+ startActivityForResult(activityEditVibrateIntent, requestCodeActionVibrateEdit);
+ break;
case playSound:
Intent actionPlaySoundIntent = new Intent(context, ActivityManageActionPlaySound.class);
actionPlaySoundIntent.putExtra("edit", true);
@@ -686,13 +669,6 @@ public class ActivityManageRule extends Activity
String[] choices = (String[]) choicesList.toArray(new String[choicesList.size()]);
getTriggerNoiseDialog(myContext, choices).show();
}
-// else if(triggerType.equals(Trigger.Event_Enum.timeFrame))
-// {
-// newTrigger.setTriggerType(Trigger.Event_Enum.timeFrame);
-// ActivityManageTimeFrame.editedTimeFrameTrigger = null;
-// Intent timeFrameEditor = new Intent(myContext, ActivityManageTimeFrame.class);
-// startActivityForResult(timeFrameEditor, 2000);
-// }
else if(triggerType.equals(Trigger_Enum.wifiConnection))
{
newTrigger.setTriggerType(Trigger_Enum.wifiConnection);
@@ -703,7 +679,6 @@ public class ActivityManageRule extends Activity
progressDialog = ProgressDialog.show(myContext, null, getResources().getString(R.string.gettingListOfInstalledApplications), true, false);
newTrigger.setTriggerType(Trigger_Enum.process_started_stopped);
new GenerateApplicationSelectionsDialogTask().execute(ActivityManageRule.this);
-// getTriggerRunningProcessDialog1(myContext).show();
}
else if(triggerType.equals(Trigger_Enum.phoneCall))
{
@@ -1298,6 +1273,25 @@ public class ActivityManageRule extends Activity
this.refreshActionList();
}
}
+ else if(requestCode == requestCodeActionVibrateAdd)
+ {
+ if(resultCode == RESULT_OK)
+ {
+ newAction.setParameter2(data.getStringExtra("vibratePattern"));
+ ruleToEdit.getActionSet().add(newAction);
+ this.refreshActionList();
+ }
+ }
+ else if(requestCode == requestCodeActionVibrateEdit)
+ {
+ if(resultCode == RESULT_OK)
+ {
+ if(data.hasExtra("vibratePattern"))
+ ruleToEdit.getActionSet().get(editIndex).setParameter2(data.getStringExtra("vibratePattern"));
+
+ this.refreshActionList();
+ }
+ }
else if(requestCode == requestCodeActionPlaySoundAdd)
{
if(resultCode == RESULT_OK)
@@ -1375,6 +1369,8 @@ public class ActivityManageRule extends Activity
items.add(new Item(typesLong[i].toString(), R.drawable.brightness));
else if(types[i].toString().equals(Action_Enum.playSound.toString()))
items.add(new Item(typesLong[i].toString(), R.drawable.sound));
+ else if(types[i].toString().equals(Action_Enum.vibrate.toString()))
+ items.add(new Item(typesLong[i].toString(), R.drawable.vibrate));
else if(types[i].toString().equals(Action_Enum.sendTextMessage.toString()))
{
// if(ActivityPermissions.isPermissionDeclaratedInManifest(ActivityManageSpecificRule.this, "android.permission.SEND_SMS") && !Miscellaneous.isGooglePlayInstalled(ActivityManageSpecificRule.this))
@@ -1504,14 +1500,13 @@ public class ActivityManageRule extends Activity
}
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.sendTextMessage.toString()))
{
-// if(ActivityPermissions.isPermissionDeclaratedInManifest(ActivityManageSpecificRule.this, "android.permission.SEND_SMS") && !Miscellaneous.isGooglePlayInstalled(ActivityManageSpecificRule.this))
if(ActivityPermissions.isPermissionDeclaratedInManifest(ActivityManageRule.this, "android.permission.SEND_SMS"))
{
//launch other activity to enter parameters;
newAction.setAction(Action_Enum.sendTextMessage);
ActivityManageActionSendTextMessage.resultingAction = null;
Intent editTriggerIntent = new Intent(context, ActivityManageActionSendTextMessage.class);
- startActivityForResult(editTriggerIntent, 5001);
+ startActivityForResult(editTriggerIntent, requestCodeActionSendTextMessageAdd);
}
}
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.playMusic.toString()))
@@ -1520,6 +1515,12 @@ public class ActivityManageRule extends Activity
ruleToEdit.getActionSet().add(newAction);
refreshActionList();
}
+ else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.vibrate.toString()))
+ {
+ newAction.setAction(Action_Enum.vibrate);
+ Intent intent = new Intent(ActivityManageRule.this, ActivityManageActionVibrate.class);
+ startActivityForResult(intent, requestCodeActionVibrateAdd);
+ }
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.setScreenBrightness.toString()))
{
newAction.setAction(Action_Enum.setScreenBrightness);
@@ -1637,63 +1638,6 @@ public class ActivityManageRule extends Activity
return alertDialog;
}
- /*private AlertDialog getActionStartActivityDialog1(final Context myContext)
- {
- AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
- alertDialogBuilder.setTitle(myContext.getResources().getString(R.string.selectApplication));
- final String[] applicationArray = ActivityManageStartActivity.getApplicationNameListString(ActivityManageSpecificRule.this);
- alertDialogBuilder.setItems(applicationArray, new DialogInterface.OnClickListener()
- {
- @Override
- public void onClick(DialogInterface dialog, int which)
- {
- getActionStartActivityDialog2(myContext, applicationArray[which]).show();
- }
- });
- AlertDialog alertDialog = alertDialogBuilder.create();
-
- return alertDialog;
- }
- private AlertDialog getActionStartActivityDialog2(final Context myContext, String applicationName)
- {
- AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
- alertDialogBuilder.setTitle(myContext.getResources().getString(R.string.selectPackageOfApplication));
- final String[] packageArray = ActivityManageStartActivity.getPackageListString(ActivityManageSpecificRule.this, applicationName);
- alertDialogBuilder.setItems(packageArray, new DialogInterface.OnClickListener()
- {
- @Override
- public void onClick(DialogInterface dialog, int which)
- {
- getActionStartActivityDialog3(ActivityManageSpecificRule.this, packageArray[which]).show();
- }
- });
- AlertDialog alertDialog = alertDialogBuilder.create();
-
- return alertDialog;
- }
- private AlertDialog getActionStartActivityDialog3(final Context myContext, final String packageName)
- {
- AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
- alertDialogBuilder.setTitle(myContext.getResources().getString(R.string.selectActivityToBeStarted));
- final String activityArray[] = ActivityManageStartActivity.getActivityListForPackageName(packageName);
- alertDialogBuilder.setItems(activityArray, new DialogInterface.OnClickListener()
- {
- @Override
- public void onClick(DialogInterface dialog, int which)
- {
- ActivityInfo ai = ActivityManageStartActivity.getActivityInfoForPackageNameAndActivityName(packageName, activityArray[which]);
-// Log.i("Selected", ai.packageName + " / " + ai.name);
- newAction.setParameter2(ai.packageName + ";" + ai.name);
- newAction.toString();
- ruleToEdit.getActionSet().add(newAction);
- refreshActionList();
- }
- });
- AlertDialog alertDialog = alertDialogBuilder.create();
-
- return alertDialog;
- }*/
-
private AlertDialog getActionWaitBeforeNextActionDialog(final Context myContext)
{
AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
diff --git a/app/src/main/java/com/jens/automation2/ActivityPermissions.java b/app/src/main/java/com/jens/automation2/ActivityPermissions.java
index e0bd1d4..e17cf1d 100644
--- a/app/src/main/java/com/jens/automation2/ActivityPermissions.java
+++ b/app/src/main/java/com/jens/automation2/ActivityPermissions.java
@@ -852,9 +852,7 @@ public class ActivityPermissions extends Activity
{
if (requestCode == requestCodeForPermissionsBackgroundLocation)
{
- NotificationManager mNotificationManager = (NotificationManager) ActivityPermissions.this.getSystemService(Context.NOTIFICATION_SERVICE);
-
- if (mNotificationManager.isNotificationPolicyAccessGranted())
+ if (havePermission(Manifest.permission.ACCESS_BACKGROUND_LOCATION, ActivityPermissions.this))
requestPermissions(cachedPermissionsToRequest, true);
}
}
diff --git a/app/src/main/res/drawable-hdpi/vibrate.png b/app/src/main/res/drawable-hdpi/vibrate.png
new file mode 100644
index 0000000..6e9c4e4
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/vibrate.png differ
diff --git a/app/src/main/res/layout/activity_manage_action_vibrate.xml b/app/src/main/res/layout/activity_manage_action_vibrate.xml
index 102d0e9..a7702df 100644
--- a/app/src/main/res/layout/activity_manage_action_vibrate.xml
+++ b/app/src/main/res/layout/activity_manage_action_vibrate.xml
@@ -26,7 +26,8 @@
+ android:layout_height="wrap_content"
+ android:layout_marginVertical="@dimen/default_margin"/>