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