From ec68d375c729c178ac66b6fa0267320670c9a32d Mon Sep 17 00:00:00 2001 From: jens Date: Tue, 8 Jul 2025 18:11:56 +0200 Subject: [PATCH] Many fixes --- .../java/com/jens/automation2/Actions.java | 4 + .../jens/automation2/ActivityManagePoi.java | 59 ++++++++--- .../ActivityManageTriggerTimeFrame.java | 4 + .../jens/automation2/ActivityPermissions.java | 21 +++- .../receivers/DateTimeListener.java | 2 +- app/src/main/res/layout/activity_settings.xml | 100 +++++++----------- app/src/main/res/values/strings.xml | 4 +- .../metadata/android/en-US/changelogs/144.txt | 2 + 8 files changed, 112 insertions(+), 84 deletions(-) diff --git a/app/src/main/java/com/jens/automation2/Actions.java b/app/src/main/java/com/jens/automation2/Actions.java index f53ea13..4ea194f 100644 --- a/app/src/main/java/com/jens/automation2/Actions.java +++ b/app/src/main/java/com/jens/automation2/Actions.java @@ -32,6 +32,7 @@ import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.util.Log; import android.view.KeyEvent; +import android.view.WindowManager; import android.widget.Toast; import androidx.annotation.RequiresApi; @@ -2054,6 +2055,9 @@ public class Actions android.provider.Settings.System.putInt(context.getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE, android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL); int actualBrightnessValue = (int) ((float) brightnessValue / 100.0 * 255.0); + if(actualBrightnessValue == 0) + actualBrightnessValue = 1; // seems to be the minimum, 0 isn't working + android.provider.Settings.System.putInt(context.getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS, actualBrightnessValue); } diff --git a/app/src/main/java/com/jens/automation2/ActivityManagePoi.java b/app/src/main/java/com/jens/automation2/ActivityManagePoi.java index 1035e56..beafcec 100644 --- a/app/src/main/java/com/jens/automation2/ActivityManagePoi.java +++ b/app/src/main/java/com/jens/automation2/ActivityManagePoi.java @@ -1,5 +1,6 @@ package com.jens.automation2; +import android.Manifest; import android.app.Activity; import android.app.AlertDialog; import android.app.ProgressDialog; @@ -7,6 +8,7 @@ import android.content.ActivityNotFoundException; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; +import android.content.pm.PackageManager; import android.location.Criteria; import android.location.Location; import android.location.LocationListener; @@ -23,6 +25,9 @@ import android.widget.EditText; import android.widget.ImageButton; import android.widget.Toast; +import androidx.annotation.NonNull; +import androidx.core.content.PermissionChecker; + import com.jens.automation2.receivers.ConnectivityReceiver; import java.util.Calendar; @@ -40,6 +45,7 @@ public class ActivityManagePoi extends Activity EditText guiPoiName, guiPoiLatitude, guiPoiLongitude, guiPoiRadius; Calendar locationSearchStart = null; Timer timer = null; + int requestCodeGetLocationPermission = 1293; final static int defaultRadius = 250; final static int searchTimeout = 120; @@ -77,7 +83,15 @@ public class ActivityManagePoi extends Activity public void onClick(View v) { hideKeyboard(); - getNotificationDialog(getResources().getString(R.string.positioningWindowNotice)).show(); + if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) + { + if (ActivityPermissions.havePermission(Manifest.permission.ACCESS_FINE_LOCATION, ActivityManagePoi.this)) + getNotificationDialog(getResources().getString(R.string.positioningWindowNotice)).show(); + else + requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, requestCodeGetLocationPermission); + } + else + getNotificationDialog(getResources().getString(R.string.positioningWindowNotice)).show(); } }); @@ -111,7 +125,20 @@ public class ActivityManagePoi extends Activity //else // new Poi to be created } - + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) + { + if(requestCode == requestCodeGetLocationPermission) + { + if(permissions[0].equals(Manifest.permission.ACCESS_FINE_LOCATION) && grantResults[0] == PackageManager.PERMISSION_GRANTED) + getNotificationDialog(getResources().getString(R.string.positioningWindowNotice)).show(); + else + Toast.makeText(ActivityManagePoi.this, getResources().getString(R.string.locationPermissionRequired), Toast.LENGTH_LONG).show(); + } +// super.onRequestPermissionsResult(requestCode, permissions, grantResults); + } + private void createPoi() { myLocationManager.removeUpdates(myLocationListenerGps); @@ -314,20 +341,20 @@ public class ActivityManagePoi extends Activity public void onClick(DialogInterface dialog, int which) { progressDialog = ProgressDialog.show(ActivityManagePoi.this, "", getResources().getString(R.string.gettingPosition), true, true); - if(Build.VERSION.SDK_INT >= 31) - { - AlertDialog dia = Miscellaneous.messageBox(getResources().getString(R.string.info), getResources().getString(R.string.locationNotWorkingOn12), ActivityManagePoi.this); - dia.setOnDismissListener(new DialogInterface.OnDismissListener() - { - @Override - public void onDismiss(DialogInterface dialogInterface) - { - getLocation(); - } - }); - dia.show(); - } - else +// if(Build.VERSION.SDK_INT >= 31) +// { +// AlertDialog dia = Miscellaneous.messageBox(getResources().getString(R.string.info), getResources().getString(R.string.locationNotWorkingOn12), ActivityManagePoi.this); +// dia.setOnDismissListener(new DialogInterface.OnDismissListener() +// { +// @Override +// public void onDismiss(DialogInterface dialogInterface) +// { +// getLocation(); +// } +// }); +// dia.show(); +// } +// else getLocation(); } }; diff --git a/app/src/main/java/com/jens/automation2/ActivityManageTriggerTimeFrame.java b/app/src/main/java/com/jens/automation2/ActivityManageTriggerTimeFrame.java index 60d6f04..fb324bf 100644 --- a/app/src/main/java/com/jens/automation2/ActivityManageTriggerTimeFrame.java +++ b/app/src/main/java/com/jens/automation2/ActivityManageTriggerTimeFrame.java @@ -2,6 +2,7 @@ package com.jens.automation2; import android.app.Activity; import android.content.Intent; +import android.os.Build; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; @@ -37,6 +38,9 @@ public class ActivityManageTriggerTimeFrame extends Activity super.onCreate(savedInstanceState); Miscellaneous.setDisplayLanguage(this); setContentView(R.layout.activity_manage_trigger_timeframe); + + if(Build.VERSION.SDK_INT == 34) + Miscellaneous.messageBox(getResources().getString(R.string.info), getResources().getString(R.string.Android14TimePickerHint), ActivityManageTriggerTimeFrame.this).show(); startPicker = (TimePicker)findViewById(R.id.tpTimeFrameStart); stopPicker = (TimePicker)findViewById(R.id.tpTimeFrameStop); diff --git a/app/src/main/java/com/jens/automation2/ActivityPermissions.java b/app/src/main/java/com/jens/automation2/ActivityPermissions.java index a78fba0..0acecc6 100644 --- a/app/src/main/java/com/jens/automation2/ActivityPermissions.java +++ b/app/src/main/java/com/jens/automation2/ActivityPermissions.java @@ -565,7 +565,10 @@ public class ActivityPermissions extends Activity addToArrayListUnique(Manifest.permission.INTERNET, requiredPermissions); break; case timeFrame: - if(Build.VERSION.SDK_INT >= 31 && Miscellaneous.getTargetSDK(Miscellaneous.getAnyContext()) >= 31) + if(Build.VERSION.SDK_INT >= 31 && Miscellaneous.getTargetSDK(Miscellaneous.getAnyContext()) >= 31 +// || +// Build.VERSION.SDK_INT >= 33 + ) addToArrayListUnique(Manifest.permission.SCHEDULE_EXACT_ALARM, requiredPermissions); break; case usb_host_connection: @@ -697,7 +700,7 @@ public class ActivityPermissions extends Activity // addToArrayListUnique("net.kollnig.missioncontrol.permission.ADMIN", requiredPermissions); if(Build.VERSION.SDK_INT >= 29) { - String parts[]; + String[] parts; if(action.getParameter2().contains(Action.actionParameter2Split)) parts = action.getParameter2().split(Action.actionParameter2Split); else @@ -705,7 +708,15 @@ public class ActivityPermissions extends Activity // Permission only required for starts of activity, not broadcasts or services - if(parts[2].equals(ActivityManageActionStartActivity.startByActivityString)) + if( + ( + parts.length >= 4 + && + parts[3].equals(ActivityManageActionStartActivity.startByActivityString) + ) + || + parts[2].equals(ActivityManageActionStartActivity.startByActivityString) + ) addToArrayListUnique(Manifest.permission.SYSTEM_ALERT_WINDOW, requiredPermissions); } break; @@ -1073,14 +1084,14 @@ public class ActivityPermissions extends Activity ArrayList permissionList = new ArrayList(); for(String permission : permissionNames) { - if(permissionNames.equals(Manifest.permission.PROCESS_OUTGOING_CALLS)) + if(permission.equals(Manifest.permission.PROCESS_OUTGOING_CALLS)) { if(ActivityPermissions.isPermissionDeclaredInManifest(Miscellaneous.getAnyContext(), Manifest.permission.PROCESS_OUTGOING_CALLS) && !Miscellaneous.isGooglePlayInstalled(Miscellaneous.getAnyContext())) { permissionList.add(permission); } } - else if(permissionNames.equals(Manifest.permission.SEND_SMS)) + else if(permission.equals(Manifest.permission.SEND_SMS)) { if(ActivityPermissions.isPermissionDeclaredInManifest(Miscellaneous.getAnyContext(), Manifest.permission.SEND_SMS) && !Miscellaneous.isGooglePlayInstalled(Miscellaneous.getAnyContext())) { diff --git a/app/src/main/java/com/jens/automation2/receivers/DateTimeListener.java b/app/src/main/java/com/jens/automation2/receivers/DateTimeListener.java index 4b29b2e..6719e1c 100644 --- a/app/src/main/java/com/jens/automation2/receivers/DateTimeListener.java +++ b/app/src/main/java/com/jens/automation2/receivers/DateTimeListener.java @@ -218,7 +218,7 @@ public class DateTimeListener extends BroadcastReceiver implements AutomationLis private static void scheduleNextAlarm() { - Long currentTime = System.currentTimeMillis(); + long currentTime = System.currentTimeMillis(); ScheduleElement scheduleCandidate = null; if(alarmCandidates.size() == 0) diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index 06bc4bb..9df7c73 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -9,46 +9,41 @@ android:title="@string/generalSettings"> + android:key="startServiceAtSystemBoot" + android:summary="@string/onOff" + android:title="@string/startAtSystemBoot" /> - - + android:key="showIconWhenServiceIsRunning" + android:summary="@string/showIconWhenServiceIsRunning" + android:title="@string/showIcon" /> + android:key="logToConsole" + android:summary="@string/onOff" + android:title="@string/logToConsole" /> + android:key="writeLogFile" + android:summary="@string/onOff" + android:title="@string/writeLogFile" /> + android:inputType="number" /> + android:inputType="number" /> - - - - @@ -147,19 +132,19 @@ android:key="useAccelerometerAfterIdleTime" android:summary="@string/accelerometerTimer" android:title="@string/cellMastIdleTime" - android:inputType="number"> + android:inputType="number" /> + android:inputType="number" /> + android:inputType="number" /> + android:inputType="number" /> - + android:inputType="number" /> + + android:inputType="number" /> + android:inputType="number" /> + android:inputType="number"/> @@ -223,19 +202,19 @@ android:key="timeBetweenNoiseLevelMeasurements" android:summary="@string/timeBetweenNoiseLevelMeasurementsSummary" android:title="@string/timeBetweenNoiseLevelMeasurementsTitle" - android:inputType="number"> + android:inputType="number" /> + android:inputType="number" /> + android:inputType="number" /> @@ -252,19 +231,19 @@ android:key="httpAttempts" android:summary="@string/httpAttemptsSummary" android:title="@string/httpAttemptsTitle" - android:inputType="number"> + android:inputType="number" /> + android:inputType="number" /> + android:inputType="number" /> @@ -276,7 +255,7 @@ android:key="timeBetweenProcessMonitorings" android:summary="@string/timeBetweenProcessMonitoringsSummary" android:title="@string/timeBetweenProcessMonitoringsTitle" - android:inputType="number"> + android:inputType="number" /> @@ -288,7 +267,7 @@ android:key="acceptDevicePositionSignalEveryX_MilliSeconds" android:summary="@string/deviceOrientationTimeAcceptIntervalSummary" android:title="@string/deviceOrientationTimeAcceptIntervalTitle" - android:inputType="number"> + android:inputType="number" /> @@ -300,13 +279,13 @@ android:key="activityDetectionFrequency" android:summary="@string/activityDetectionFrequencySummary" android:title="@string/activityDetectionFrequencyTitle" - android:inputType="number"> + android:inputType="number" /> + android:inputType="number" /> @@ -318,9 +297,8 @@ android:key="musicCheckFrequency" android:summary="@string/musicCheckFrequencySummary" android:title="@string/musicCheckFrequencyTitle" - android:inputType="number"> + android:inputType="number" /> - \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3bf1cfc..1093bb4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -330,7 +330,7 @@ Name Radius [m] Status - Data connection + Data connection (mobile data) turn mobile data on turn mobile data off Roaming @@ -952,4 +952,6 @@ matches does not match Log to console (logcat) + Location permission is required to continue. + Apparently there\'s a bug in Android 14 regarding a time picker dialog. If the following screen crashes when you try to use the up and down buttons next to a field, try inputting numbers with the keyboard instead. I did never find a solution for this and my app is not the only one affected. It looks like this was fixed in Android 15. \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/changelogs/144.txt b/fastlane/metadata/android/en-US/changelogs/144.txt index 793a4a9..b6ca0a2 100644 --- a/fastlane/metadata/android/en-US/changelogs/144.txt +++ b/fastlane/metadata/android/en-US/changelogs/144.txt @@ -1,4 +1,6 @@ * Fixed: Crash when triggering a URL without parameter pairs * Fixed: When checking for battery charging type "any" the trigger didn't fire. * Fixed: Fixed warnings in logs for formatted notifications +* Fixed: Location permission requested now when creating a new location object. +* Fixed: Display-over-other-apps permission was not requested anymore for start another app actions. * Added: Setting to turn on/off console logging (logcat) \ No newline at end of file