diff --git a/mobile/.gitignore b/mobile/.gitignore
index c7d39cbd..7cecd1c9 100644
--- a/mobile/.gitignore
+++ b/mobile/.gitignore
@@ -1,6 +1,7 @@
/build
/debug
/release
+/google/
# tests aren't ready yet
/src/androidTest
diff --git a/mobile/build.gradle b/mobile/build.gradle
index 8a61afc0..5c88b9c8 100644
--- a/mobile/build.gradle
+++ b/mobile/build.gradle
@@ -11,8 +11,8 @@ android {
minSdkVersion 21
targetSdkVersion 28
resConfigs "zh-rCN"
- versionCode 25
- versionName "1.3.4"
+ versionCode 26
+ versionName "1.3.5"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
@@ -26,11 +26,23 @@ android {
}
}
dataBinding.enabled = true
+ flavorDimensions("freedom")
+ productFlavors {
+ freedom {
+ dimension "freedom"
+ buildConfigField "boolean", "DONATIONS", "true"
+ }
+ google {
+ dimension "freedom"
+ buildConfigField "boolean", "DONATIONS", "false"
+ }
+ }
}
dependencies {
kapt "androidx.databinding:databinding-compiler:$androidPluginVersion"
implementation fileTree(dir: 'libs', include: ['*.jar'])
+ implementation 'com.android.billingclient:billing:1.1'
implementation "com.android.support:customtabs:$supportLibraryVersion"
implementation "com.android.support:design:$supportLibraryVersion"
implementation "com.android.support:preference-v14:$supportLibraryVersion"
diff --git a/mobile/src/main/AndroidManifest.xml b/mobile/src/main/AndroidManifest.xml
index 2796e587..2959d482 100644
--- a/mobile/src/main/AndroidManifest.xml
+++ b/mobile/src/main/AndroidManifest.xml
@@ -21,6 +21,7 @@
+
diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/EBegFragment.kt b/mobile/src/main/java/be/mygod/vpnhotspot/EBegFragment.kt
new file mode 100644
index 00000000..2f6c7e37
--- /dev/null
+++ b/mobile/src/main/java/be/mygod/vpnhotspot/EBegFragment.kt
@@ -0,0 +1,103 @@
+package be.mygod.vpnhotspot
+
+import android.app.AlertDialog
+import android.net.Uri
+import android.os.Bundle
+import android.support.v4.app.DialogFragment
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.view.ViewStub
+import android.widget.ArrayAdapter
+import android.widget.Button
+import android.widget.Spinner
+import com.android.billingclient.api.*
+import com.crashlytics.android.Crashlytics
+
+/**
+ * Based on: https://github.com/PrivacyApps/donations/blob/747d36a18433c7e9329691054122a8ad337a62d2/Donations/src/main/java/org/sufficientlysecure/donations/DonationsFragment.java
+ */
+class EBegFragment : DialogFragment(), PurchasesUpdatedListener, BillingClientStateListener,
+ SkuDetailsResponseListener, ConsumeResponseListener {
+ companion object {
+ private const val TAG = "EBegFragment"
+ }
+
+ private lateinit var billingClient: BillingClient
+ private lateinit var googleSpinner: Spinner
+ private var skus: MutableList? = null
+ set(value) {
+ field = value
+ googleSpinner.apply {
+ val adapter = ArrayAdapter(requireContext(), android.R.layout.simple_spinner_item,
+ value?.map { it.price } ?: emptyList())
+ adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
+ setAdapter(adapter)
+ }
+ }
+
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View =
+ inflater.inflate(R.layout.fragment_ebeg, container, false)
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ googleSpinner = view.findViewById(R.id.donations__google_android_market_spinner)
+ billingClient = BillingClient.newBuilder(view.context).setListener(this).build()
+ onBillingServiceDisconnected()
+ view.findViewById