diff --git a/app/build.gradle b/app/build.gradle
index c743a7d..2c9acdf 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -69,5 +69,7 @@ dependencies {
androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1'
implementation 'androidx.preference:preference-ktx:1.2.1'
implementation 'androidx.cardview:cardview:1.0.0'
+ implementation "androidx.browser:browser:1.7.0"
+ implementation 'com.squareup.okhttp3:okhttp:4.12.0'
implementation 'nl.dionsegijn:konfetti-xml:2.0.2' // This library holds the fabric of reality together please dont remove it at any costs >:3
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 6004724..d5e9390 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -5,6 +5,7 @@
+
{
+ supportFragmentManager.beginTransaction()
+ .replace(R.id.fragmentContainer, DonateFragment())
+ .addToBackStack(null)
+ .commit()
+ true
+ }
else -> false
}.also {
binding.drawerLayout.closeDrawers()
diff --git a/app/src/main/java/partisan/weforge/xyz/pulse/Preferences.kt b/app/src/main/java/partisan/weforge/xyz/pulse/Preferences.kt
index bad91c5..bc7266c 100644
--- a/app/src/main/java/partisan/weforge/xyz/pulse/Preferences.kt
+++ b/app/src/main/java/partisan/weforge/xyz/pulse/Preferences.kt
@@ -14,6 +14,8 @@ class Preferences(private val context: Context) {
private const val BLACKLISTED_CONTACTS = "blacklisted_contacts"
private const val BLACKLIST_ENABLED = "blacklist_enabled"
private val SERVICE_ORDER_KEY = "service_order"
+ private const val DONATION_ACTIVATED = "donation_activated"
+ private const val DONATION_TOKEN = "donation_token"
private const val DEFAULT_REDIRECTION_DELAY = 2000L
private const val DEFAULT_POPUP_POSITION = 333
@@ -54,9 +56,24 @@ class Preferences(private val context: Context) {
}
var isBlacklistEnabled: Boolean
- get() = prefs.getBoolean(BLACKLIST_ENABLED, false)
- set(value) = prefs.edit { putBoolean(BLACKLIST_ENABLED, value) }
+ get() = prefs.getBoolean(BLACKLIST_ENABLED, false)
+ set(value) = prefs.edit { putBoolean(BLACKLIST_ENABLED, value) }
+ var isDonationActivated: Boolean
+ get() = prefs.getBoolean(DONATION_ACTIVATED, false)
+ set(value) = prefs.edit { putBoolean(DONATION_ACTIVATED, value) }
+
+ var donationToken: String
+ get() {
+ val stored = prefs.getString(DONATION_TOKEN, null)
+ return if (stored != null) {
+ stored
+ } else {
+ generateAndStoreToken()
+ }
+ }
+ set(value) = prefs.edit { putString(DONATION_TOKEN, value) }
+
var popupEnabled: Boolean
get() = prefs.getBoolean(POPUP_ENABLED, true)
set(value) = prefs.edit { putBoolean(POPUP_ENABLED, value) }
@@ -116,4 +133,12 @@ class Preferences(private val context: Context) {
}
blacklistedContacts = current
}
+
+ private fun generateAndStoreToken(): String {
+ val newToken = (1..16)
+ .map { "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".random() }
+ .joinToString("")
+ prefs.edit().putString(DONATION_TOKEN, newToken).apply()
+ return newToken
+ }
}
diff --git a/app/src/main/res/drawable/heart_filled_24.xml b/app/src/main/res/drawable/heart_filled_24.xml
new file mode 100644
index 0000000..cee1854
--- /dev/null
+++ b/app/src/main/res/drawable/heart_filled_24.xml
@@ -0,0 +1,11 @@
+
+
+
+
diff --git a/app/src/main/res/layout/fragment_donate.xml b/app/src/main/res/layout/fragment_donate.xml
new file mode 100644
index 0000000..ab45953
--- /dev/null
+++ b/app/src/main/res/layout/fragment_donate.xml
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/menu/main_menu.xml b/app/src/main/res/menu/main_menu.xml
index eb960d5..bd36f92 100644
--- a/app/src/main/res/menu/main_menu.xml
+++ b/app/src/main/res/menu/main_menu.xml
@@ -27,6 +27,11 @@
android:id="@+id/section_about"
android:title="@string/about_name"
android:enabled="false" />
+