Many fixes

This commit is contained in:
2025-07-08 18:11:56 +02:00
parent e8524f719f
commit ec68d375c7
8 changed files with 112 additions and 84 deletions

View File

@ -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);
}

View File

@ -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();
}
});
@ -112,6 +126,19 @@ public class ActivityManagePoi extends Activity
// 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();
}
};

View File

@ -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;
@ -38,6 +39,9 @@ public class ActivityManageTriggerTimeFrame extends Activity
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);
startPicker.setIs24HourView(true);

View File

@ -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<String> permissionList = new ArrayList<String>();
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()))
{

View File

@ -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)

View File

@ -9,46 +9,41 @@
android:title="@string/generalSettings">
<CheckBoxPreference
android:key="startServiceAtSystemBoot"
android:summary="@string/onOff"
android:title="@string/startAtSystemBoot" />
android:key="startServiceAtSystemBoot"
android:summary="@string/onOff"
android:title="@string/startAtSystemBoot" />
<CheckBoxPreference
android:key="startServiceAfterAppUpdate"
android:summary="@string/startServiceAfterAppUpdate"
android:title="@string/startServiceAfterAppUpdateShort" />
<!--
android:key="startServiceAfterAppUpdate"
android:summary="@string/startServiceAfterAppUpdate"
android:title="@string/startServiceAfterAppUpdateShort" />
<CheckBoxPreference
android:key="startNewThreadForRuleActivation"
android:summary="@string/startNewThreadForRuleExecution"
android:title="@string/newThreadRules" />
-->
<CheckBoxPreference
android:key="showIconWhenServiceIsRunning"
android:summary="@string/showIconWhenServiceIsRunning"
android:title="@string/showIcon" />
android:key="showIconWhenServiceIsRunning"
android:summary="@string/showIconWhenServiceIsRunning"
android:title="@string/showIcon" />
<CheckBoxPreference
android:key="logToConsole"
android:summary="@string/onOff"
android:title="@string/logToConsole" />
android:key="logToConsole"
android:summary="@string/onOff"
android:title="@string/logToConsole" />
<CheckBoxPreference
android:key="writeLogFile"
android:summary="@string/onOff"
android:title="@string/writeLogFile" />
android:key="writeLogFile"
android:summary="@string/onOff"
android:title="@string/writeLogFile" />
<EditTextPreference
android:key="logLevel"
android:summary="@string/logLevelSummary"
android:title="@string/logLevelTitle"
android:inputType="number"></EditTextPreference>
android:inputType="number" />
<EditTextPreference
android:key="logFileMaxSize"
android:summary="@string/logFileMaxSizeSummary"
android:title="@string/logFileMaxSizeTitle"
android:inputType="number"></EditTextPreference>
android:inputType="number" />
<ListPreference
android:key="startScreen"
@ -119,21 +114,11 @@
</PreferenceCategory>
<PreferenceCategory
android:summary="@string/positioningSettings"
android:title="@string/positioningSettings">
<!-- android:id="@id/lstPositioningEngine"-->
<!--
<ListPreference
android:title="@string/positioningEngine"
android:key="positioningEngine"
android:defaultValue="0"
android:entries="@array/positioningEngineOptions"
android:entryValues="@array/positioningEngineOptionsValues" />
-->
<CheckBoxPreference
<CheckBoxPreference
android:key="useWifiForPositioning"
android:summary="@string/listenToWifiState"
android:title="@string/wifiState" />
@ -147,19 +132,19 @@
android:key="useAccelerometerAfterIdleTime"
android:summary="@string/accelerometerTimer"
android:title="@string/cellMastIdleTime"
android:inputType="number"></EditTextPreference>
android:inputType="number" />
<EditTextPreference
android:key="accelerometerMovementThreshold"
android:summary="@string/accelerometerThresholdDescription"
android:title="@string/accelerometerThreshold"
android:inputType="number"></EditTextPreference>
android:inputType="number" />
<EditTextPreference
android:key="speedMaximumTimeBetweenLocations"
android:summary="@string/speedMaximumTimeBetweenLocations"
android:title="@string/speedMaximumTime"
android:inputType="number"></EditTextPreference>
android:inputType="number" />
<CheckBoxPreference
android:key="rememberLastActivePoi"
@ -181,37 +166,31 @@
android:key="MINIMUM_DISTANCE_CHANGE_FOR_GPS_UPDATE"
android:summary="@string/minimumDistanceChangeForGpsLocationUpdates"
android:title="@string/distanceForGpsUpdate"
android:inputType="number"></EditTextPreference>
android:inputType="number" />
<EditTextPreference
android:key="MINIMUM_DISTANCE_CHANGE_FOR_NETWORK_UPDATE"
android:summary="@string/minimumDistanceChangeForNetworkLocationUpdates"
android:title="@string/distanceForNetworkUpdate"
android:inputType="number"></EditTextPreference>
<!-- We won't need this setting anymore, at least it won't be available for the user.
<EditTextPreference
android:key="SATISFACTORY_ACCURACY_GPS"
android:summary="@string/satisfactoryAccuracyGps"
android:title="@string/gpsAccuracy"
android:inputType="number"></EditTextPreference>
-->
android:inputType="number" />
<EditTextPreference
android:key="SATISFACTORY_ACCURACY_NETWORK"
android:summary="@string/satisfactoryAccuracyNetwork"
android:title="@string/networkAccuracy"
android:inputType="number"></EditTextPreference>
android:inputType="number" />
<EditTextPreference
android:key="MINIMUM_TIME_BETWEEN_UPDATE"
android:summary="@string/minimumTimeForLocationUpdates"
android:title="@string/timeForUpdate"
android:inputType="number"></EditTextPreference>
android:inputType="number" />
<EditTextPreference
android:key="gpsTimeout"
android:summary="@string/timeoutForGpsComparisonsSummary"
android:title="@string/timeoutForGpsComparisonsTitle"
android:inputType="number"></EditTextPreference>
android:inputType="number"/>
</PreferenceCategory>
@ -223,19 +202,19 @@
android:key="timeBetweenNoiseLevelMeasurements"
android:summary="@string/timeBetweenNoiseLevelMeasurementsSummary"
android:title="@string/timeBetweenNoiseLevelMeasurementsTitle"
android:inputType="number"></EditTextPreference>
android:inputType="number" />
<EditTextPreference
android:key="lengthOfNoiseLevelMeasurements"
android:summary="@string/lengthOfNoiseLevelMeasurementsSummary"
android:title="@string/lengthOfNoiseLevelMeasurementsTitle"
android:inputType="number"></EditTextPreference>
android:inputType="number" />
<EditTextPreference
android:key="referenceValueForNoiseLevelMeasurements"
android:summary="@string/referenceValueForNoiseLevelMeasurementsSummary"
android:title="@string/referenceValueForNoiseLevelMeasurementsTitle"
android:inputType="number"></EditTextPreference>
android:inputType="number" />
</PreferenceCategory>
@ -252,19 +231,19 @@
android:key="httpAttempts"
android:summary="@string/httpAttemptsSummary"
android:title="@string/httpAttemptsTitle"
android:inputType="number"></EditTextPreference>
android:inputType="number" />
<EditTextPreference
android:key="httpAttemptsTimeout"
android:summary="@string/httpAttemptsTimeoutSummary"
android:title="@string/httpAttemptsTimeoutTitle"
android:inputType="number"></EditTextPreference>
android:inputType="number" />
<EditTextPreference
android:key="httpAttemptGap"
android:summary="@string/httpAttemptGapSummary"
android:title="@string/httpAttemptGapTitle"
android:inputType="number"></EditTextPreference>
android:inputType="number" />
</PreferenceCategory>
@ -276,7 +255,7 @@
android:key="timeBetweenProcessMonitorings"
android:summary="@string/timeBetweenProcessMonitoringsSummary"
android:title="@string/timeBetweenProcessMonitoringsTitle"
android:inputType="number"></EditTextPreference>
android:inputType="number" />
</PreferenceCategory>
@ -288,7 +267,7 @@
android:key="acceptDevicePositionSignalEveryX_MilliSeconds"
android:summary="@string/deviceOrientationTimeAcceptIntervalSummary"
android:title="@string/deviceOrientationTimeAcceptIntervalTitle"
android:inputType="number"></EditTextPreference>
android:inputType="number" />
</PreferenceCategory>
@ -300,13 +279,13 @@
android:key="activityDetectionFrequency"
android:summary="@string/activityDetectionFrequencySummary"
android:title="@string/activityDetectionFrequencyTitle"
android:inputType="number"></EditTextPreference>
android:inputType="number" />
<EditTextPreference
android:key="activityDetectionRequiredProbability"
android:summary="@string/activityDetectionRequiredProbabilitySummary"
android:title="@string/activityDetectionRequiredProbabilityTitle"
android:inputType="number"></EditTextPreference>
android:inputType="number" />
</PreferenceCategory>
@ -318,9 +297,8 @@
android:key="musicCheckFrequency"
android:summary="@string/musicCheckFrequencySummary"
android:title="@string/musicCheckFrequencyTitle"
android:inputType="number"></EditTextPreference>
android:inputType="number" />
</PreferenceCategory>
</PreferenceScreen>

View File

@ -330,7 +330,7 @@
<string name="name">Name</string>
<string name="radiusWithUnit">Radius [m]</string>
<string name="status">Status</string>
<string name="actionDataConnection">Data connection</string>
<string name="actionDataConnection">Data connection (mobile data)</string>
<string name="actionSetDataConnectionOn">turn mobile data on</string>
<string name="actionSetDataConnectionOff">turn mobile data off</string>
<string name="roaming">Roaming</string>
@ -952,4 +952,6 @@
<string name="matches">matches</string>
<string name="doesNotMatch">does not match</string>
<string name="logToConsole">Log to console (logcat)</string>
<string name="locationPermissionRequired">Location permission is required to continue.</string>
<string name="Android14TimePickerHint">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.</string>
</resources>

View File

@ -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)