diff --git a/app/src/apkFlavor/java/com/jens/automation2/Rule.java b/app/src/apkFlavor/java/com/jens/automation2/Rule.java index 31840a0..a2fa049 100644 --- a/app/src/apkFlavor/java/com/jens/automation2/Rule.java +++ b/app/src/apkFlavor/java/com/jens/automation2/Rule.java @@ -514,8 +514,6 @@ public class Rule implements Comparable protected boolean activateInternally(AutomationService automationService) { boolean isActuallyToggleable = isActuallyToggable(); - -// boolean notLastActive = getLastActivatedRule() == null || !getLastActivatedRule().equals(Rule.this); boolean doToggle = ruleToggle && isActuallyToggleable; String message; diff --git a/app/src/fdroidFlavor/java/com/jens/automation2/Rule.java b/app/src/fdroidFlavor/java/com/jens/automation2/Rule.java index 80e9a86..4b5c2ba 100644 --- a/app/src/fdroidFlavor/java/com/jens/automation2/Rule.java +++ b/app/src/fdroidFlavor/java/com/jens/automation2/Rule.java @@ -487,8 +487,6 @@ public class Rule implements Comparable protected boolean activateInternally(AutomationService automationService) { boolean isActuallyToggleable = isActuallyToggable(); - -// boolean notLastActive = getLastActivatedRule() == null || !getLastActivatedRule().equals(Rule.this); boolean doToggle = ruleToggle && isActuallyToggleable; String message; diff --git a/app/src/googlePlayFlavor/java/com/jens/automation2/Rule.java b/app/src/googlePlayFlavor/java/com/jens/automation2/Rule.java index 904aa28..599c678 100644 --- a/app/src/googlePlayFlavor/java/com/jens/automation2/Rule.java +++ b/app/src/googlePlayFlavor/java/com/jens/automation2/Rule.java @@ -514,8 +514,6 @@ public class Rule implements Comparable protected boolean activateInternally(AutomationService automationService) { boolean isActuallyToggleable = isActuallyToggable(); - -// boolean notLastActive = getLastActivatedRule() == null || !getLastActivatedRule().equals(Rule.this); boolean doToggle = ruleToggle && isActuallyToggleable; String message; diff --git a/app/src/main/java/com/jens/automation2/Actions.java b/app/src/main/java/com/jens/automation2/Actions.java index cd9591a..d66a23f 100644 --- a/app/src/main/java/com/jens/automation2/Actions.java +++ b/app/src/main/java/com/jens/automation2/Actions.java @@ -1777,7 +1777,7 @@ public class Actions } catch (Exception e) { - Miscellaneous.logEvent("e", "setData", "Error changing network type: " + Log.getStackTraceString(e), 2); + Miscellaneous.logEvent("e", "setData", "Error setting data connection: " + Log.getStackTraceString(e), 2); return false; } } diff --git a/app/src/main/java/com/jens/automation2/ActivityManageActionWifi.java b/app/src/main/java/com/jens/automation2/ActivityManageActionWifi.java index 968d945..9c2fb54 100644 --- a/app/src/main/java/com/jens/automation2/ActivityManageActionWifi.java +++ b/app/src/main/java/com/jens/automation2/ActivityManageActionWifi.java @@ -36,14 +36,14 @@ public class ActivityManageActionWifi extends Activity Intent input = getIntent(); if(input.hasExtra(ActivityManageRule.intentNameActionParameter1)) + { rbActionWifiOn.setChecked(input.getBooleanExtra(ActivityManageRule.intentNameActionParameter1, true)); + rbActionWifiOff.setChecked(!input.getBooleanExtra(ActivityManageRule.intentNameActionParameter1, true)); + } if(input.hasExtra(ActivityManageRule.intentNameActionParameter2)) chkWifiRunAsRoot.setChecked(Boolean.parseBoolean(input.getStringExtra(ActivityManageRule.intentNameActionParameter2))); -// if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) -// Miscellaneous.messageBox(getResources().getString(R.string.app_name), getResources().getString(R.string.android10WifiToggleNotice), ActivityManageActionWifi.this).show(); - if(getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.Q) tvWifiExplanation1.setVisibility(View.VISIBLE); else diff --git a/app/src/main/java/com/jens/automation2/ActivityPermissions.java b/app/src/main/java/com/jens/automation2/ActivityPermissions.java index 3e565a1..e431587 100644 --- a/app/src/main/java/com/jens/automation2/ActivityPermissions.java +++ b/app/src/main/java/com/jens/automation2/ActivityPermissions.java @@ -281,6 +281,19 @@ public class ActivityPermissions extends Activity return false; } + public static int getAmountOfRulesWhichLackPermissions(Context context) + { + int rulesWhichLackPermissions = 0; + + for(Rule r : Rule.getRuleCollection()) + { + if(!ActivityPermissions.havePermissionsForRule(r, context)) + rulesWhichLackPermissions++; + } + + return rulesWhichLackPermissions; + } + public static boolean havePermission(String s, Context context) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) @@ -536,6 +549,8 @@ public class ActivityPermissions extends Activity addToArrayListUnique(Manifest.permission.BLUETOOTH_ADMIN, requiredPermissions); addToArrayListUnique(Manifest.permission.BLUETOOTH, requiredPermissions); addToArrayListUnique(Manifest.permission.ACCESS_NETWORK_STATE, requiredPermissions); + if(Build.VERSION.SDK_INT >= 31) + addToArrayListUnique(Manifest.permission.BLUETOOTH_CONNECT, requiredPermissions); break; case charging: // addToArrayListUnique(Manifest.permission.READ_PHONE_STATE, requiredPermissions); @@ -911,12 +926,8 @@ public class ActivityPermissions extends Activity usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); break; case Manifest.permission.BLUETOOTH_ADMIN: - for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.bluetoothConnection)) - usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); - for(String ruleName : getRulesUsing(Action.Action_Enum.setBluetooth)) - usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); - break; case Manifest.permission.BLUETOOTH: + case Manifest.permission.BLUETOOTH_CONNECT: for(String ruleName : getRulesUsing(Trigger.Trigger_Enum.bluetoothConnection)) usingElements.add(String.format(getResources().getString(R.string.ruleXrequiresThis), ruleName)); for(String ruleName : getRulesUsing(Action.Action_Enum.setBluetooth)) diff --git a/app/src/main/java/com/jens/automation2/AutomationService.java b/app/src/main/java/com/jens/automation2/AutomationService.java index 2833407..cc720ed 100644 --- a/app/src/main/java/com/jens/automation2/AutomationService.java +++ b/app/src/main/java/com/jens/automation2/AutomationService.java @@ -180,6 +180,17 @@ public class AutomationService extends Service implements OnInitListener Rule.getRuleCollection().size() == 0 ) { + if( + Rule.getRuleCollection().size() > 0 + && + Rule.getRuleCollection().size() == ActivityPermissions.getAmountOfRulesWhichLackPermissions(Miscellaneous.getAnyContext()) + ) + { + Miscellaneous.logEvent("w", "AutomationService", "Don't have complete permissions for any defined rule. Not starting service.", 1); + Toast.makeText(context, context.getResources().getString(R.string.serviceWontStartPermissions), Toast.LENGTH_LONG).show(); + return false; + } + if (startAtBoot) { /* diff --git a/app/src/main/java/com/jens/automation2/receivers/BluetoothReceiver.java b/app/src/main/java/com/jens/automation2/receivers/BluetoothReceiver.java index bf37946..0317b96 100644 --- a/app/src/main/java/com/jens/automation2/receivers/BluetoothReceiver.java +++ b/app/src/main/java/com/jens/automation2/receivers/BluetoothReceiver.java @@ -7,6 +7,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.util.Log; +import android.widget.Toast; import com.jens.automation2.ActivityPermissions; import com.jens.automation2.AutomationService; @@ -149,8 +150,6 @@ public class BluetoothReceiver extends BroadcastReceiver implements AutomationLi { return lhs.getName().compareTo(rhs.getName()); } - - ; }); } catch(NullPointerException e) @@ -159,6 +158,12 @@ public class BluetoothReceiver extends BroadcastReceiver implements AutomationLi returnArray = new BluetoothDevice[] {}; } + catch(SecurityException se) + { + Toast.makeText(Miscellaneous.getAnyContext(), Miscellaneous.getAnyContext().getResources().getString(R.string.permissionRequiredBluetooth), Toast.LENGTH_SHORT).show(); + + returnArray = new BluetoothDevice[] {}; + } return returnArray; } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 650f3af..65c647d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -12,6 +12,7 @@ Please specify at least one trigger. Please specify at least one action. No rules defined. Service won\'t start. + Don\'t have full permission for any defined rule. Service won\'t start. No activated rules defined. Service won\'t start. Automation Service started. Version %1$s. @@ -970,4 +971,5 @@ far proximity is between \"%1$s\" and \"%2$s\" Please wait. + Bluetooth permission required to edit this rule. Request permissions from the main screen first. \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/changelogs/146.txt b/fastlane/metadata/android/en-US/changelogs/146.txt new file mode 100644 index 0000000..2e285e2 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/146.txt @@ -0,0 +1,3 @@ +* Fixed: Set-wifi action wasn't correctly pre-filled-out when editing action. +* Fixed: Service startup checks improved when no rules with full permissions were present. +* Fixed: Editing bluetooth trigger could crash if permissions weren't given. \ No newline at end of file