Skip to content

Commit 019bdbd

Browse files
authored
Merge pull request criticalmaps#349 from cbalster/housekeeping
Fix Notification and update targetSdk
2 parents 55f8b23 + fe5cf3b commit 019bdbd

File tree

19 files changed

+130
-185
lines changed

19 files changed

+130
-185
lines changed

.aiexclude

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
keystore.properties

.github/workflows/android.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@ jobs:
1414
runs-on: ubuntu-latest
1515
steps:
1616
- name: Checkout
17-
uses: actions/checkout@v3
17+
uses: actions/checkout@v5
1818

1919
- name: Gradle Wrapper Validation
20-
uses: gradle/wrapper-validation-action@v1
20+
uses: gradle/actions/wrapper-validation@v3
2121

2222
- name: Install JDK
23-
uses: actions/setup-java@v2
23+
uses: actions/setup-java@v5
2424
with:
2525
distribution: 'zulu'
2626
java-version: 17

app/build.gradle

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@ android {
2121
}
2222
}
2323

24-
compileSdk 33
24+
compileSdk 35
2525

2626
defaultConfig {
2727
applicationId "de.stephanlindauer.criticalmaps"
2828
minSdkVersion 16
29-
targetSdkVersion 33
29+
targetSdkVersion 35
3030
versionCode 48
3131
versionName "2.9.0"
3232
vectorDrawables.useSupportLibrary = true
@@ -39,7 +39,7 @@ android {
3939
debug {
4040
applicationIdSuffix ".debug"
4141
pseudoLocalesEnabled true
42-
minifyEnabled true
42+
minifyEnabled false
4343
shrinkResources false
4444
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
4545
}
@@ -64,6 +64,7 @@ android {
6464

6565
buildFeatures {
6666
viewBinding = true
67+
buildConfig true
6768
}
6869

6970
lint {
@@ -77,10 +78,11 @@ dependencies {
7778
implementation 'com.squareup:otto:1.3.8'
7879
implementation 'org.osmdroid:osmdroid-android:6.1.8'
7980
implementation 'com.squareup.picasso:picasso:2.8'
81+
implementation 'androidx.core:core:1.12.0'
8082
implementation 'androidx.appcompat:appcompat:1.6.1'
81-
implementation 'androidx.annotation:annotation:1.6.0'
83+
implementation 'androidx.annotation:annotation:1.9.1'
8284
implementation 'com.google.android.material:material:1.9.0'
83-
implementation 'androidx.exifinterface:exifinterface:1.3.6'
85+
implementation 'androidx.exifinterface:exifinterface:1.3.7'
8486
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
8587
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
8688
implementation 'com.jakewharton.timber:timber:5.0.1'
@@ -92,7 +94,7 @@ dependencies {
9294
implementation "com.google.dagger:dagger:$dagger_version"
9395
annotationProcessor "com.google.dagger:dagger-compiler:$dagger_version"
9496

95-
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.12'
97+
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.14'
9698

9799
errorprone("com.google.errorprone:error_prone_core:2.18.0")
98100

app/src/main/AndroidManifest.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@
1111
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
1212
android:maxSdkVersion="18" />
1313
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
14+
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" />
15+
<uses-permission
16+
android:name="android.permission.POST_NOTIFICATIONS"
17+
android:minSdkVersion="33" />
1418

1519
<uses-feature
1620
android:name="android.hardware.location.network"

app/src/main/java/de/stephanlindauer/criticalmaps/AppComponent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
public interface AppComponent {
2222
void inject(Main main);
2323
void inject(ServerSyncService serverSyncService);
24-
void inject(MapFragment serverSyncService);
24+
void inject(MapFragment mapFragment);
2525
void inject(ChatFragment chatFragment);
2626
void inject(SettingsFragment settingsFragment);
2727

app/src/main/java/de/stephanlindauer/criticalmaps/Main.java

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import android.animation.ArgbEvaluator;
44
import android.animation.ValueAnimator;
5-
import android.annotation.TargetApi;
65
import android.app.Activity;
76
import android.content.Intent;
87
import android.content.SharedPreferences;
@@ -23,6 +22,7 @@
2322

2423
import androidx.annotation.IdRes;
2524
import androidx.annotation.NonNull;
25+
import androidx.annotation.RequiresApi;
2626
import androidx.appcompat.app.ActionBarDrawerToggle;
2727
import androidx.appcompat.app.AppCompatActivity;
2828
import androidx.appcompat.widget.SwitchCompat;
@@ -82,7 +82,7 @@ public class Main extends AppCompatActivity implements NavigationView.OnNavigati
8282
setKeepScreenOn();
8383
break;
8484
case SharedPrefsKeys.PRIVACY_POLICY_ACCEPTED:
85-
if (!locationUpdateManager.checkPermission()) {
85+
if (!LocationUpdateManager.checkPermission()) {
8686
locationUpdateManager.requestPermission();
8787
}
8888
break;
@@ -143,8 +143,6 @@ public void onCreate(Bundle bundle) {
143143

144144
setShowOnLockscreen();
145145
setKeepScreenOn();
146-
147-
ServerSyncService.startService();
148146
}
149147

150148
@Override
@@ -226,15 +224,26 @@ public void onDrawerClosed(@NonNull View drawerView) {
226224
navigateTo(R.id.navigation_map);
227225
}
228226

229-
final boolean isPrivacyPolicyAccepted =
230-
!privacyPolicyAcceptedPreference.isSet() || !privacyPolicyAcceptedPreference.get();
231-
if (isPrivacyPolicyAccepted) {
227+
locationUpdateManager.initialize();
228+
229+
final boolean isPrivacyPolicyAccepted = privacyPolicyAcceptedPreference.get();
230+
if (!isPrivacyPolicyAccepted) {
232231
binding.introductionText.setMovementMethod(LinkMovementMethod.getInstance());
233232
binding.introductionText.setText(Html.fromHtml(getString(R.string.introduction_gps)));
234233
binding.introductionView.setVisibility(View.VISIBLE);
235234
}
236235
}
237236

237+
@Override
238+
protected void onResume() {
239+
super.onResume();
240+
Timber.d("onResume() called");
241+
final boolean isPrivacyPolicyAccepted = privacyPolicyAcceptedPreference.get();
242+
if (isPrivacyPolicyAccepted) {
243+
initiateServiceStartIfPermitted();
244+
}
245+
}
246+
238247
@Override
239248
protected void onStop() {
240249
permissionCheckHandler.detachActivity();
@@ -454,7 +463,7 @@ private void animateToolbar(int durationMillis, boolean toMap) {
454463
radiusAnimator.start();
455464
}
456465

457-
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
466+
@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
458467
private void fadeInStatusBarColor(int duration, boolean toMap) {
459468
int colorMap = ContextCompat.getColor(this, R.color.main_statusbarcolor_map);
460469
int colorOthers = ContextCompat.getColor(this, R.color.main_statusbarcolor_others);
@@ -484,4 +493,17 @@ private void handleObserverModeSwitchCheckedChanged(boolean isChecked) {
484493
new BooleanPreference(
485494
sharedPreferences, SharedPrefsKeys.OBSERVER_MODE_ACTIVE).set(isChecked);
486495
}
496+
497+
private void initiateServiceStartIfPermitted() {
498+
if (LocationUpdateManager.checkPermission()) {
499+
if (!ServerSyncService.isCurrentlyRunning()) {
500+
Timber.d("Location and notification permissions granted. Attempting to start ServerSyncService.");
501+
ServerSyncService.startService();
502+
} else {
503+
Timber.d("Location and notification permission granted, but service is already running.");
504+
}
505+
} else {
506+
Timber.d("Location and notification permission NOT granted. ServerSyncService will not be started.");
507+
}
508+
}
487509
}

app/src/main/java/de/stephanlindauer/criticalmaps/adapter/ChatMessageAdapter.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package de.stephanlindauer.criticalmaps.adapter;
22

3-
import android.animation.AnimatorInflater;
4-
import android.animation.ObjectAnimator;
53
import android.view.LayoutInflater;
64
import android.view.ViewGroup;
75

@@ -13,7 +11,6 @@
1311
import java.util.Locale;
1412
import java.util.TimeZone;
1513

16-
import de.stephanlindauer.criticalmaps.R;
1714
import de.stephanlindauer.criticalmaps.databinding.ViewChatmessageBinding;
1815
import de.stephanlindauer.criticalmaps.model.chat.ReceivedChatMessage;
1916
import de.stephanlindauer.criticalmaps.utils.TimeToWordStringConverter;

app/src/main/java/de/stephanlindauer/criticalmaps/fragments/ChatFragment.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ public void run() {
271271
getChatmessagesHandler.get().execute();
272272
}
273273
};
274-
timerGetChatmessages.scheduleAtFixedRate(timerTaskPullServer, 0, SERVER_SYNC_INTERVAL);
274+
timerGetChatmessages.schedule(timerTaskPullServer, 0, SERVER_SYNC_INTERVAL);
275275
}
276276

277277
private void stopGetChatmessagesTimer() {

app/src/main/java/de/stephanlindauer/criticalmaps/fragments/MapFragment.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import android.animation.AnimatorInflater;
44
import android.animation.ObjectAnimator;
5-
import android.annotation.TargetApi;
65
import android.content.Intent;
76
import android.content.SharedPreferences;
87
import android.graphics.drawable.Drawable;
@@ -19,6 +18,7 @@
1918
import androidx.annotation.ColorRes;
2019
import androidx.annotation.DrawableRes;
2120
import androidx.annotation.NonNull;
21+
import androidx.annotation.RequiresApi;
2222
import androidx.appcompat.app.AlertDialog;
2323
import androidx.appcompat.content.res.AppCompatResources;
2424
import androidx.core.content.ContextCompat;
@@ -256,9 +256,13 @@ public void onRotate(float deltaAngle) {
256256
binding.mapSetNorthFab.setRotation(mapView.getMapOrientation());
257257

258258
showGpxHandler.showGpx(mapView);
259+
260+
if (!LocationUpdateManager.checkPermission()) {
261+
zoomToLocation(defaultGeoPoint, NO_GPS_PERMISSION_ZOOM_LEVEL);
262+
}
259263
}
260264

261-
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
265+
@RequiresApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
262266
private void adjustToWindowsInsets() {
263267
// No-op on < API21
264268
ViewCompat.setOnApplyWindowInsetsListener(binding.mapOverlayContainerLayout, (v, insets) -> {
@@ -321,12 +325,6 @@ public void onResume() {
321325
sharedPreferences.registerOnSharedPreferenceChangeListener(
322326
observerModeOnSharedPreferenceChangeListener);
323327

324-
if (locationUpdateManager.checkPermission()) {
325-
locationUpdateManager.startListening();
326-
} else {
327-
zoomToLocation(defaultGeoPoint, NO_GPS_PERMISSION_ZOOM_LEVEL);
328-
}
329-
330328
startGetLocationTimer();
331329
}
332330

@@ -505,7 +503,7 @@ public void run() {
505503
getLocationHandler.get().execute();
506504
}
507505
};
508-
timerGetLocation.scheduleAtFixedRate(timerTaskPullServer, 0, SERVER_SYNC_INTERVAL);
506+
timerGetLocation.schedule(timerTaskPullServer, 0, SERVER_SYNC_INTERVAL);
509507
}
510508

511509
private void stopGetLocationTimer() {

app/src/main/java/de/stephanlindauer/criticalmaps/handler/PermissionCheckHandler.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public void requestPermissionsWithRationaleIfNeeded(PermissionRequest permission
4242
activePermissionRequest = permissionRequest;
4343

4444
// short-circuit here if already granted
45-
if (checkPermissionsGranted(permissionRequest.getPermissions())) {
45+
if (checkAllPermissionsGranted(permissionRequest.getPermissions())) {
4646
activePermissionRequest.getOnGrantedCallback().run();
4747
activePermissionRequest = null;
4848
return;
@@ -91,7 +91,8 @@ public boolean handlePermissionRequestCallback(int requestCode, int[] grantResul
9191
return false;
9292
}
9393

94-
boolean allPermissionsGranted = true;
94+
// Note: Can be an empty array that should be treated as cancellation.
95+
boolean allPermissionsGranted = grantResults.length > 0;
9596
for (int result : grantResults) {
9697
allPermissionsGranted = allPermissionsGranted &&
9798
result == PackageManager.PERMISSION_GRANTED;
@@ -120,7 +121,7 @@ public boolean handlePermissionRequestCallback(int requestCode, int[] grantResul
120121
return true;
121122
}
122123

123-
public static boolean checkPermissionsGranted(String[] permissions) {
124+
public static boolean checkAllPermissionsGranted(String[] permissions) {
124125
boolean permissionsGranted = true;
125126
for (String permission : permissions) {
126127
permissionsGranted = permissionsGranted && (PackageManager.PERMISSION_GRANTED ==

0 commit comments

Comments
 (0)