Skip to content

Commit

Permalink
privacy options
Browse files Browse the repository at this point in the history
  • Loading branch information
gsanmartin committed Apr 23, 2024
1 parent e95db53 commit e018003
Show file tree
Hide file tree
Showing 6 changed files with 99 additions and 28 deletions.
5 changes: 3 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
def versionMajor = 3
def versionMinor = 1
def versionPatch = 11
def versionMinor = 2
def versionPatch = 0
def versionBuild = 0

apply from: rootProject.file('gradle/moduleapp.gradle')
Expand Down Expand Up @@ -101,6 +101,7 @@ dependencies {
implementation libs.firebase.crashlytics

implementation libs.play.services.ads
implementation("com.google.android.ump:user-messaging-platform:2.2.0")

//Test
testImplementation libs.junit
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,12 @@ import androidx.work.ExistingPeriodicWorkPolicy
import androidx.work.NetworkType
import androidx.work.PeriodicWorkRequest
import androidx.work.WorkManager
import com.android.billingclient.api.BillingClient.ProductType
import com.android.billingclient.api.BillingFlowParams
import com.android.billingclient.api.ProductDetails
import com.android.billingclient.api.QueryProductDetailsParams
import com.google.android.gms.ads.MobileAds
import com.google.android.gms.ads.RequestConfiguration
import com.google.android.ump.ConsentDebugSettings
import com.google.android.ump.ConsentInformation
import com.google.android.ump.ConsentRequestParameters
import com.google.android.ump.UserMessagingPlatform
import com.google.firebase.crashlytics.FirebaseCrashlytics
import com.uber.autodispose.android.lifecycle.scope
import com.uber.autodispose.autoDisposable
Expand All @@ -47,6 +47,7 @@ import net.kelmer.correostracker.ui.theme.CorreosTheme
import net.kelmer.correostracker.ui.theme.ThemeMode
import timber.log.Timber
import java.util.concurrent.TimeUnit
import java.util.concurrent.atomic.AtomicBoolean
import javax.inject.Inject

/**
Expand All @@ -68,15 +69,15 @@ class MainActivity : FragmentActivity() {
@Inject
lateinit var iapApi: IapApi

private lateinit var consentInformation: ConsentInformation
private var isMobileAdsInitializeCalled = AtomicBoolean(false)

@OptIn(ExperimentalMaterial3WindowSizeClassApi::class)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
MobileAds.initialize(this) {}
MobileAds.setRequestConfiguration(
RequestConfiguration.Builder().setTestDeviceIds(
listOf("11FFB04655CCB851EBC6E015D5ECDB0F", "149B05EAFE1941F7B62AF10E6B45270A"),
).build()
)

requestConsent()

lifecycleObservers.forEach {
Timber.i("Adding lifecycleObserver $it")
lifecycle.addObserver(it)
Expand Down Expand Up @@ -108,13 +109,66 @@ class MainActivity : FragmentActivity() {
}

initWorker()
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M && shouldShowRequestPermissionRationale(PERMISSION_NOTIS)) {
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M && shouldShowRequestPermissionRationale(
PERMISSION_NOTIS
)
) {
ActivityCompat.requestPermissions(this, arrayOf(PERMISSION_NOTIS), NOTI_REQ_PERMISSION)
}

inAppReviewService.showIfNeeded()
}

private fun requestConsent() {
val params = ConsentRequestParameters
.Builder()
.build()
ConsentDebugSettings
.Builder(this)
.addTestDeviceHashedId("8D36569186B06E4C7C60D856AC0E4A7B")

consentInformation = UserMessagingPlatform.getConsentInformation(this)
consentInformation.requestConsentInfoUpdate(this, params, {
UserMessagingPlatform.loadAndShowConsentFormIfRequired(
this@MainActivity
) { loadAndShowError ->
if (loadAndShowError != null) {
// Consent gathering failed.
Timber.w("${loadAndShowError.errorCode}: ${loadAndShowError.message}")
}

// Consent has been gathered.
if (consentInformation.canRequestAds()) {
initializeMobileAdsSdk()
}
}

}, { requestConsentError ->
Timber.w("${requestConsentError.errorCode}: ${requestConsentError.message}")
}
)
// Check if you can initialize the Google Mobile Ads SDK in parallel
// while checking for new consent information. Consent obtained in
// the previous session can be used to request ads.
if (consentInformation.canRequestAds()) {
initializeMobileAdsSdk()
}
}

private fun initializeMobileAdsSdk() {
if (isMobileAdsInitializeCalled.getAndSet(true)) {
return
}

// Initialize the Google Mobile Ads SDK.
MobileAds.initialize(this) {}
MobileAds.setRequestConfiguration(
RequestConfiguration.Builder().setTestDeviceIds(
listOf("11FFB04655CCB851EBC6E015D5ECDB0F", "149B05EAFE1941F7B62AF10E6B45270A"),
).build()
)
}

private fun onBuyClicked() {
iapApi.launchFlow(this)
.autoDisposable(lifecycle.scope(Lifecycle.Event.ON_STOP))
Expand All @@ -140,31 +194,42 @@ class MainActivity : FragmentActivity() {
PendingIntent.FLAG_IMMUTABLE
)
} else {
PendingIntent.getActivity(applicationContext, 0, notificationIntent, 0)
PendingIntent.getActivity(
applicationContext,
0,
notificationIntent,
PendingIntent.FLAG_IMMUTABLE
)
}

val notification = NotificationCompat.Builder(applicationContext, ParcelPollWorker.CHANNEL_ID)
.setSmallIcon(R.drawable.ic_reparto)
.setContentTitle("Test")
.setContentText("This is a test")
.setStyle(
NotificationCompat.BigTextStyle()
.bigText("This is a big test")
)
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setContentIntent(intent)
.setAutoCancel(true)
.build()
val notification =
NotificationCompat.Builder(applicationContext, ParcelPollWorker.CHANNEL_ID)
.setSmallIcon(R.drawable.ic_reparto)
.setContentTitle("Test")
.setContentText("This is a test")
.setStyle(
NotificationCompat.BigTextStyle()
.bigText("This is a big test")
)
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setContentIntent(intent)
.setAutoCancel(true)
.build()

try {
NotificationManagerCompat.from(applicationContext).notify(NotificationID.id, notification)
NotificationManagerCompat.from(applicationContext)
.notify(NotificationID.id, notification)
} catch (s: SecurityException) {
Timber.e(s)
FirebaseCrashlytics.getInstance().recordException(s)
}
}

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray,
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == NOTI_REQ_PERMISSION) {
Timber.i("Permission granted!")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ class ParcelListViewModel @Inject constructor(

fun getFeatureList(): List<Feature> {
return listOf(
Feature("3.2.0", R.string.changes_3_2_0),
Feature("3.1.6", R.string.changes_3_1_6),
Feature("3.1.0", R.string.changes_3_1_0),
Feature("3.0.0", R.string.changes_3_0_0),
Expand Down
2 changes: 2 additions & 0 deletions list/src/main/res/values-en/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
<string name="changes_3_0_0">New interface.</string>
<string name="changes_3_1_0">Due to the small number of donations the app now includes ads, which can be removed with Premium mode. If you have already made a donation, please get in touch!</string>
<string name="changes_3_1_6">Added a compact mode, improvements in text input, added weight and dimensions to extra info screen.</string>
<string name="changes_3_2_0">Added privacy options.</string>

<string name="feature_dialog_title">New features</string>
<string name="feature_dialog_opensource">This app has no affiliation with Sociedad Estatal Correos y Telegrafos, S.A. and has been created by an independent developer. It is free and open-source.</string>
<string name="feature_dialog_opensource_contribute">If you wish to contribute feel free to donate with a ko-fi:</string>
Expand Down
1 change: 1 addition & 0 deletions list/src/main/res/values-es/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
<string name="changes_3_0_0">Interfaz renovada.</string>
<string name="changes_3_1_0">Debido a las escasas donaciones la app incluye anuncios, que se pueden eliminar con el modo Premium. Si ya has hecho una donación, por favor contacta conmigo.</string>
<string name="changes_3_1_6">Añadido modo compacto, mejoras en la introducción de texto, añadidos peso y medidas (si presentes) a información extra</string>
<string name="changes_3_2_0">Añadidas opciones de privacidad.</string>

<string name="feature_dialog_title">Últimas novedades</string>
<string name="feature_dialog_opensource">Esta app NO tiene afiliación alguna con Correos, sino que es un desarrollo independiente y gratuito. Colabora con nosotros o reporta errores en nuestra web:</string>
Expand Down
1 change: 1 addition & 0 deletions list/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
<string name="changes_3_0_0">Interfaz renovada.</string>
<string name="changes_3_1_0">Debido a las escasas donaciones la app incluye anuncios, que se pueden eliminar con el modo Premium. Si ya has hecho una donación, por favor contacta conmigo.</string>
<string name="changes_3_1_6">Añadido modo compacto, mejoras en la introducción de texto, añadidos peso y medidas (si presentes) a información extra.</string>
<string name="changes_3_2_0">Añadidas opciones de privacidad.</string>
<string name="feature_dialog_title">Novedades</string>
<string name="feature_dialog_opensource">Esta app NO tiene afiliación alguna con la Sociedad Estatal Correos y Telégrafos, S.A. sino que ha sido creada por un desarrollador independiente. Seguimiento Correos es gratuita y open source.</string>
<string name="feature_dialog_opensource_contribute">Si quieres contribuir con el proyecto haz una donación a través de Kofi:</string>
Expand Down

0 comments on commit e018003

Please sign in to comment.