From 8d229a9f0c8e94b04acd5de56a39bdd5eff8a444 Mon Sep 17 00:00:00 2001 From: marcus Date: Sun, 18 Jun 2023 20:58:21 +0200 Subject: [PATCH 1/3] Gradle update to 8.2.1 pick 1f4c0d8 Gradle update to 8.0.2 squash d07622a Gradle update to 8.0.2 --- .github/workflows/build.yml | 2 +- app/build.gradle | 22 +++++++++-- app/src/main/AndroidManifest.xml | 9 +++-- .../birthdayreminder/BirthdayReminder.java | 22 ++++++----- .../service/BirthdayBroadcastReceiver.java | 37 ++++++++++++------- app/src/main/res/{layout => menu}/menu.xml | 6 +-- build.gradle | 8 ++-- gradle.properties | 3 +- gradle/wrapper/gradle-wrapper.properties | 4 +- 9 files changed, 71 insertions(+), 42 deletions(-) rename app/src/main/res/{layout => menu}/menu.xml (86%) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index bc76159..80fa5bc 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,7 +15,7 @@ jobs: - name: Set up our JDK environment uses: actions/setup-java@v1.4.3 with: - java-version: 1.8 + java-version: 17 - name: Build all artifacts id: buildAllApks diff --git a/app/build.gradle b/app/build.gradle index 571d033..5823e88 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,13 +1,13 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 16 - buildToolsVersion "26.0.2" + compileSdkVersion 33 + namespace 'de.ubuntix.android.birthdayreminder' defaultConfig { applicationId "de.ubuntix.android.birthdayreminder" - minSdkVersion 7 - targetSdkVersion 16 + minSdkVersion 14 + targetSdkVersion 33 } buildTypes { @@ -16,4 +16,18 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } + + lint { + disable 'Instantiatable' + } +} + +allprojects { + tasks.withType(JavaCompile) { + options.compilerArgs << "-Xlint:deprecation" + } +} + +dependencies { + implementation 'androidx.preference:preference:1.2.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 44aecf3..fc4ae96 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -4,6 +4,7 @@ android:versionCode="9" android:versionName="1.0.0"> + @@ -13,7 +14,7 @@ android:label="@string/app_name"> + android:exported="true"> @@ -21,13 +22,13 @@ + android:name=".BirthdayEditor" /> - + diff --git a/app/src/main/java/de/ubuntix/android/birthdayreminder/BirthdayReminder.java b/app/src/main/java/de/ubuntix/android/birthdayreminder/BirthdayReminder.java index 0974bc8..69a73f7 100644 --- a/app/src/main/java/de/ubuntix/android/birthdayreminder/BirthdayReminder.java +++ b/app/src/main/java/de/ubuntix/android/birthdayreminder/BirthdayReminder.java @@ -121,22 +121,24 @@ protected void onListItemClick(ListView l, View v, int position, long id) { @SuppressLint("ResourceType") public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.layout.menu, menu); + inflater.inflate(R.menu.menu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle item selection - switch (item.getItemId()) { - case R.id.preferences: - startActivity(new Intent(this, PreferenceWindow.class)); - return true; - case R.id.quit: - finish(); - return true; - default: - return super.onOptionsItemSelected(item); + int itemId = item.getItemId(); + + if (itemId == R.id.preferences) { + startActivity(new Intent(this, PreferenceWindow.class)); + return true; + } + if (itemId == R.id.quit) { + finish(); + return true; } + + return super.onOptionsItemSelected(item); } } diff --git a/app/src/main/java/de/ubuntix/android/birthdayreminder/service/BirthdayBroadcastReceiver.java b/app/src/main/java/de/ubuntix/android/birthdayreminder/service/BirthdayBroadcastReceiver.java index 5741ee2..b3b4315 100644 --- a/app/src/main/java/de/ubuntix/android/birthdayreminder/service/BirthdayBroadcastReceiver.java +++ b/app/src/main/java/de/ubuntix/android/birthdayreminder/service/BirthdayBroadcastReceiver.java @@ -1,12 +1,5 @@ package de.ubuntix.android.birthdayreminder.service; -import java.sql.Time; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.List; -import java.util.SortedMap; -import java.util.TreeMap; - import android.app.AlarmManager; import android.app.Notification; import android.app.NotificationManager; @@ -15,6 +8,14 @@ import android.content.Context; import android.content.Intent; import android.content.res.Resources; + +import java.sql.Time; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; +import java.util.SortedMap; +import java.util.TreeMap; + import de.ubuntix.android.birthdayreminder.BirthdayReminder; import de.ubuntix.android.birthdayreminder.R; import de.ubuntix.android.birthdayreminder.database.Database; @@ -41,7 +42,7 @@ public void onReceive(Context context, Intent intent) { private static PendingIntent createPendingIntent(Context context) { Intent intent = new Intent(context, BirthdayBroadcastReceiver.class); intent.putExtra(TIMED, true); - return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); + return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_IMMUTABLE); } public static void start(Context context) { @@ -126,15 +127,23 @@ private void notifyBirthdays(Context context) { // create new notification if (notificationTexts.size() > 0) { - String titleText = String.format(res.getQuantityString(R.plurals.notificationTitle, countBirthdays), - countBirthdays); + String titleText = String.format(res.getQuantityString(R.plurals.notificationTitle, countBirthdays), countBirthdays); + Intent intent = new Intent(context, BirthdayReminder.class); - Notification notification = new Notification(R.drawable.balloons, titleText, System.currentTimeMillis()); + PendingIntent pi = PendingIntent.getActivity( + context, 0, intent, PendingIntent.FLAG_IMMUTABLE); + + Notification.Builder builder = new Notification.Builder(context); + + builder.setContentIntent(pi); + builder.setSmallIcon(R.drawable.balloons); + builder.setTicker(titleText); + builder.setContentText(StringUtils.join(notificationTexts, ", ")); + if (countBirthdays > 1) { - notification.number = countBirthdays; + builder.setNumber(countBirthdays); } - PendingIntent pi = PendingIntent.getActivity(context, 0, intent, Intent.FLAG_ACTIVITY_NEW_TASK); - notification.setLatestEventInfo(context, titleText, StringUtils.join(notificationTexts, ", "), pi); + Notification notification = builder.getNotification(); notificationManager.notify(0, notification); } } diff --git a/app/src/main/res/layout/menu.xml b/app/src/main/res/menu/menu.xml similarity index 86% rename from app/src/main/res/layout/menu.xml rename to app/src/main/res/menu/menu.xml index 299f9c3..2a1c0c6 100644 --- a/app/src/main/res/layout/menu.xml +++ b/app/src/main/res/menu/menu.xml @@ -1,7 +1,7 @@ + android:layout_width="match_parent" + android:layout_height="match_parent"> - \ No newline at end of file + diff --git a/build.gradle b/build.gradle index 8674409..e74a114 100644 --- a/build.gradle +++ b/build.gradle @@ -1,15 +1,17 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { - jcenter() + google() + mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' + classpath 'com.android.tools.build:gradle:8.0.2' } } allprojects { repositories { - jcenter() + google() + mavenCentral() } } diff --git a/gradle.properties b/gradle.properties index f98a4cc..d9cf55d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1 +1,2 @@ -org.gradle.jvmargs=-Xmx1536M \ No newline at end of file +org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index bb23672..9c8e492 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sat Oct 14 09:48:46 CEST 2017 +#Sun Jul 16 07:55:26 CEST 2023 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip From 31819d1cc1ea2d6fca0edb75febcd5fc48dfaf84 Mon Sep 17 00:00:00 2001 From: Stefan Richter Date: Sun, 16 Jul 2023 09:47:03 +0200 Subject: [PATCH 2/3] Fix missing runtime contacts permission on newer Android versions --- .../birthdayreminder/BirthdayReminder.java | 35 ++++++++++++++++++- app/src/main/res/values-de/strings.xml | 3 +- app/src/main/res/values/strings.xml | 3 +- 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/de/ubuntix/android/birthdayreminder/BirthdayReminder.java b/app/src/main/java/de/ubuntix/android/birthdayreminder/BirthdayReminder.java index 69a73f7..f9f21fb 100644 --- a/app/src/main/java/de/ubuntix/android/birthdayreminder/BirthdayReminder.java +++ b/app/src/main/java/de/ubuntix/android/birthdayreminder/BirthdayReminder.java @@ -1,8 +1,11 @@ package de.ubuntix.android.birthdayreminder; +import android.Manifest; import android.annotation.SuppressLint; import android.app.ListActivity; import android.content.Intent; +import android.content.pm.PackageManager; +import android.os.Build; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; @@ -10,6 +13,7 @@ import android.view.View; import android.widget.ListAdapter; import android.widget.ListView; +import android.widget.Toast; import java.text.DateFormatSymbols; import java.util.Calendar; @@ -34,6 +38,7 @@ public class BirthdayReminder extends ListActivity { // TODO: call/write message on birthday // TODO: hideNotificationPref + private static final int PERMISSIONS_REQUEST_WRITE_CONTACTS = 1; private final DateFormatSymbols dateSymbols = new DateFormatSymbols(); private Database db; @@ -53,13 +58,41 @@ public void onCreate(Bundle savedInstanceState) { if (prefs.getActivateService()) { BirthdayBroadcastReceiver.restart(getApplicationContext()); } + + // request runtime permission + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (!isContactsPermissionGranted()) { + requestPermissions(new String[]{Manifest.permission.WRITE_CONTACTS}, PERMISSIONS_REQUEST_WRITE_CONTACTS); + } + } + } + + private boolean isContactsPermissionGranted() { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { + return true; + } + + return checkSelfPermission(Manifest.permission.WRITE_CONTACTS) == PackageManager.PERMISSION_GRANTED; } @Override protected void onResume() { super.onResume(); - updateView(); + if (isContactsPermissionGranted()) { + updateView(); + } + } + + @Override + public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { + if (requestCode == PERMISSIONS_REQUEST_WRITE_CONTACTS) { + if (isContactsPermissionGranted()) { + updateView(); + } else { + Toast.makeText(this, R.string.no_contacts_permission, Toast.LENGTH_LONG).show(); + } + } } private void updateView() { diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index dd39fc7..d74790d 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -24,5 +24,6 @@ OK Abbrechen Telefon + Keine Berechtigung zum Lesen und Ă„ndern von Kontakten - \ 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 ba617c9..61520b6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -31,5 +31,6 @@ add date of birth + Phone + No permission to read and write contacts - \ No newline at end of file + From 94576bacf4b0f77f00596f6bfcc7513e7e270bd0 Mon Sep 17 00:00:00 2001 From: marcus Date: Thu, 27 Jul 2023 22:10:47 +0200 Subject: [PATCH 3/3] Move VersionCode and VersionName from build.gradle to AndroidManifest.xml --- app/build.gradle | 3 +++ app/src/main/AndroidManifest.xml | 4 +--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 5823e88..eb870d9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,6 +6,9 @@ android { defaultConfig { applicationId "de.ubuntix.android.birthdayreminder" + versionCode 9 + versionName "1.0.0" + minSdkVersion 14 targetSdkVersion 33 } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index fc4ae96..c7930e0 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,8 +1,6 @@ + package="de.ubuntix.android.birthdayreminder">