Skip to content

Commit

Permalink
Merge pull request #37 from pokkst/master
Browse files Browse the repository at this point in the history
Multiterminal
  • Loading branch information
pokkst authored Sep 30, 2020
2 parents d2c16db + 4bd960e commit 3f8d7df
Show file tree
Hide file tree
Showing 9 changed files with 231 additions and 16 deletions.
4 changes: 2 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ android {
applicationId "com.bitcoin.merchant.app"
minSdkVersion 21
targetSdkVersion 29
versionCode 50107
versionName "5.1.7"
versionCode 50301
versionName "5.3.1"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,13 @@ class PaymentRequestFragment : ToolbarAwareFragment() {
val args = arguments
val amountFiat = args?.getDouble(PaymentInputFragment.AMOUNT_PAYABLE_FIAT, 0.0) ?: 0.0
if (amountFiat > 0.0) {
createNewInvoice(amountFiat)
if(Settings.getMultiterminal(requireContext())) {
createNewInvoice(amountFiat)
} else {
//Using BIP21
val invoiceRequest = createInvoiceRequest(amountFiat, Settings.getCountryCurrencyLocale(activity).currency)
createNewBip21Invoice(invoiceRequest?.address, amountFiat.toString())
}
} else {
resumeExistingInvoice()
}
Expand Down Expand Up @@ -196,20 +202,25 @@ class PaymentRequestFragment : ToolbarAwareFragment() {
}

if(invoiceStatus == null) {
val address = invoiceRequest.address
val bchAmount = toBch(invoiceRequest.amount.toDouble())
val bchSatoshis = getLongAmount(bchAmount)
ExpectedPayments.getInstance().addExpectedPayment(address, bchSatoshis, invoiceRequest.amount)
val intent = Intent(Action.SUBSCRIBE_TO_ADDRESS)
intent.putExtra("address", address)
LocalBroadcastManager.getInstance(activity).sendBroadcast(intent)
bip21Address = address
showQrCodeAndAmountFields(address!!, invoiceRequest.amount, bchAmount.toString())
createNewBip21Invoice(invoiceRequest.address, invoiceRequest.amount)
}

setWorkInProgress(false)
}
}

private fun createNewBip21Invoice(address: String?, amount: String) {
val bchAmount = toBch(amount.toDouble())
val bchSatoshis = getLongAmount(bchAmount)
ExpectedPayments.getInstance().addExpectedPayment(address, bchSatoshis, amount)
val intent = Intent(Action.SUBSCRIBE_TO_ADDRESS)
intent.putExtra("address", address)
LocalBroadcastManager.getInstance(activity).sendBroadcast(intent)
bip21Address = address
showQrCodeAndAmountFields(address!!, amount, bchAmount.toString())
setWorkInProgress(false)
}

private fun resumeExistingInvoice() {
val invoice = Settings.getActiveInvoice(activity)
if (invoice == null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,7 @@ import com.bitcoin.merchant.app.R
import com.bitcoin.merchant.app.model.Analytics
import com.bitcoin.merchant.app.model.CountryCurrencyLocale
import com.bitcoin.merchant.app.model.PaymentTarget
import com.bitcoin.merchant.app.screens.dialogs.AddNewAddressDialog
import com.bitcoin.merchant.app.screens.dialogs.CurrencySelectionDialog
import com.bitcoin.merchant.app.screens.dialogs.MerchantNameEditorDialog
import com.bitcoin.merchant.app.screens.dialogs.SnackHelper
import com.bitcoin.merchant.app.screens.dialogs.*
import com.bitcoin.merchant.app.screens.features.ToolbarAwareFragment
import com.bitcoin.merchant.app.util.Settings

Expand All @@ -34,6 +31,7 @@ class SettingsFragment : ToolbarAwareFragment() {
private lateinit var lvPaymentAddress: LinearLayout
private lateinit var lvLocalCurrency: LinearLayout
private lateinit var lvPinCode: LinearLayout
private lateinit var lvBip70: LinearLayout
private lateinit var btnWallet: RelativeLayout
private lateinit var btnLocalBitcoin: RelativeLayout
private lateinit var btnThePit: RelativeLayout
Expand All @@ -55,13 +53,15 @@ class SettingsFragment : ToolbarAwareFragment() {
lvPaymentAddress = rootView.findViewById(R.id.lv_payment_address)
lvLocalCurrency = rootView.findViewById(R.id.lv_fiat_currency)
lvPinCode = rootView.findViewById(R.id.lv_pin_code)
lvBip70 = rootView.findViewById(R.id.lv_bip70)
btnWallet = rootView.findViewById(R.id.wallet_ad)
btnLocalBitcoin = rootView.findViewById(R.id.localbch_ad)
btnThePit = rootView.findViewById(R.id.bce_ad)
addOptionName()
addOptionCurrency()
addOptionAddress()
addOptionPin()
addOptionMultiterminal()
btnWallet.setOnClickListener {
Analytics.tap_link_wallet.send()
openUrl(activity.getString(R.string.url_wallet_bitcoin_com))
Expand Down Expand Up @@ -129,6 +129,18 @@ class SettingsFragment : ToolbarAwareFragment() {
}
}

private fun addOptionMultiterminal() {
val tvMultiterminal = rootView.findViewById<TextView>(R.id.tv_bip70)
val multiterminal = Settings.getMultiterminal(activity)
val summary = if (multiterminal)
getString(R.string.enabled)
else getString(R.string.disabled)
tvMultiterminal.text = summary
lvBip70.setOnClickListener {
ToggleMultiterminalDialog(this@SettingsFragment).show()
}
}

private fun changePin() {
val args = Bundle()
args.putBoolean(PinCodeFragment.EXTRA_DO_CREATE, true)
Expand Down Expand Up @@ -176,6 +188,12 @@ class SettingsFragment : ToolbarAwareFragment() {
}
}

fun setMultiterminal(enabled: Boolean) {
val v = rootView.findViewById<TextView>(R.id.tv_bip70)
v.text = if(enabled) getString(R.string.enabled) else getString(R.string.disabled)
SnackHelper.show(activity, activity.getString(R.string.notify_changes_have_been_saved))
}

fun validateThenSetPaymentTarget(address: String?) {
val paymentTarget = PaymentTarget.parse(address)
if (paymentTarget.isValid) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.bitcoin.merchant.app.screens.dialogs

import android.app.AlertDialog
import android.content.ClipboardManager
import android.content.Context
import android.widget.EditText
import android.widget.TextView
import com.bitcoin.merchant.app.MainActivity
import com.bitcoin.merchant.app.R
import com.bitcoin.merchant.app.model.PaymentTarget
import com.bitcoin.merchant.app.screens.SettingsFragment
import com.bitcoin.merchant.app.util.Settings

class ToggleMultiterminalDialog(private val settingsController: SettingsFragment) {
private val ctx: MainActivity = settingsController.activity
fun show() {
val tvReceiverHelp = TextView(ctx)
tvReceiverHelp.text = ctx.getString(R.string.options_explain_multiterminal)
tvReceiverHelp.setPadding(50, 10, 50, 10)
val builder = AlertDialog.Builder(ctx)
.setTitle(R.string.options_multiterminal)
.setView(tvReceiverHelp)
.setCancelable(true)
.setNeutralButton(R.string.button_cancel) { dialog, _ ->
dialog.dismiss()
}
.setPositiveButton(R.string.enable) { dialog, _ ->
Settings.setMultiterminal(ctx, true)
settingsController.setMultiterminal(true)
dialog.dismiss()
}
.setNegativeButton(R.string.disable) { dialog, _ ->
Settings.setMultiterminal(ctx, false)
settingsController.setMultiterminal(false)
dialog.dismiss()
}
if (!ctx.isFinishing) {
builder.show()
}
}
}
9 changes: 9 additions & 0 deletions app/src/main/java/com/bitcoin/merchant/app/util/Settings.kt
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,14 @@ object Settings {

private fun getXPubKey(xPub: String) = PrefsUtil.MERCHANT_KEY_XPUB_INDEX + "_" + xPub

fun getMultiterminal(context: Context): Boolean {
return PrefsUtil.getInstance(context).getValue(PrefsUtil.MERCHANT_KEY_MULTI_TERMINAL, false)
}

fun setMultiterminal(context: Context, multiTerminal: Boolean) {
PrefsUtil.getInstance(context).setValue(PrefsUtil.MERCHANT_KEY_MULTI_TERMINAL, multiTerminal)
}

private class PrefsUtil private constructor() {
companion object {
const val MERCHANT_KEY_PIN = "pin"
Expand All @@ -97,6 +105,7 @@ object Settings {
const val MERCHANT_KEY_MERCHANT_RECEIVER = "receiving_address"
const val MERCHANT_KEY_XPUB_INDEX = "xpub_index"
const val MERCHANT_KEY_PERSIST_INVOICE = "persist_invoice"
const val MERCHANT_KEY_MULTI_TERMINAL = "multi_terminal"
private lateinit var context: Context
private lateinit var instance: PrefsUtil
fun getInstance(ctx: Context): PrefsUtil {
Expand Down
43 changes: 43 additions & 0 deletions app/src/main/res/layout-sw600dp/fragment_settings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,49 @@

</LinearLayout>

<LinearLayout
android:id="@+id/lv_bip70"
android:layout_width="match_parent"
android:layout_height="75dp"
android:orientation="horizontal"
android:padding="10dp">

<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="9"
android:src="@drawable/setting_bip70" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:orientation="vertical">

<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1.35"
android:gravity="center_vertical"
android:paddingStart="10dp"
android:paddingEnd="10dp"
android:text="@string/settings_bip70"
android:textSize="18sp"
android:textStyle="bold" />

<TextView
android:id="@+id/tv_bip70"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:paddingStart="10dp"
android:paddingEnd="10dp"
android:singleLine="true"
android:textSize="14sp" />
</LinearLayout>

</LinearLayout>
</LinearLayout>

<Space
Expand Down
43 changes: 43 additions & 0 deletions app/src/main/res/layout-sw720dp/fragment_settings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,49 @@

</LinearLayout>

<LinearLayout
android:id="@+id/lv_bip70"
android:layout_width="match_parent"
android:layout_height="75dp"
android:orientation="horizontal"
android:padding="10dp">

<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="9"
android:src="@drawable/setting_bip70" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:orientation="vertical">

<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1.35"
android:gravity="center_vertical"
android:paddingStart="10dp"
android:paddingEnd="10dp"
android:text="@string/settings_bip70"
android:textSize="18sp"
android:textStyle="bold" />

<TextView
android:id="@+id/tv_bip70"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:paddingStart="10dp"
android:paddingEnd="10dp"
android:singleLine="true"
android:textSize="14sp" />
</LinearLayout>

</LinearLayout>
</LinearLayout>

<Space
Expand Down
43 changes: 43 additions & 0 deletions app/src/main/res/layout/fragment_settings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,49 @@

</LinearLayout>

<LinearLayout
android:id="@+id/lv_bip70"
android:layout_width="match_parent"
android:layout_height="75dp"
android:orientation="horizontal"
android:padding="10dp">

<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="9"
android:src="@drawable/setting_bip70" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:orientation="vertical">

<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1.35"
android:gravity="center_vertical"
android:paddingStart="10dp"
android:paddingEnd="10dp"
android:text="@string/settings_bip70"
android:textSize="18sp"
android:textStyle="bold" />

<TextView
android:id="@+id/tv_bip70"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:paddingStart="10dp"
android:paddingEnd="10dp"
android:singleLine="true"
android:textSize="14sp" />
</LinearLayout>

</LinearLayout>
</LinearLayout>

<Space
Expand Down
7 changes: 7 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@
<string name="no_history_text">There is no transaction history.</string>
<string name="options_explain_payment_address">A destination address can either be a Bitcoin Cash address, or an Extended Public Key (xpub) or a merchant API key or pairing code</string>
<string name="options_add_payment_address">Add destination address</string>
<string name="options_explain_multiterminal">For merchants using the same address across multiple terminals</string>
<string name="options_multiterminal">Enable/disable Multi-terminal</string>
<string name="button_save">Save</string>
<string name="payment_enter_an_amount">Enter an amount</string>
<string name="menu_profile">Profile</string>
Expand All @@ -49,6 +51,11 @@
<string name="settings_destination_address">Destination Address</string>
<string name="settings_local_currency">Local Currency</string>
<string name="settings_pin_code">PIN Code</string>
<string name="settings_bip70">Multi-terminal</string>
<string name="enabled">Enabled</string>
<string name="disabled">Disabled</string>
<string name="enable">Enable</string>
<string name="disable">Disable</string>
<string name="ad_title_local_bitcoin_cash">Local Bitcoin Cash</string>
<string name="ad_content_local_bitcoin_cash">Sell your Bitcoin Cash for Cash</string>
<string name="ad_content_bitcoincom_exchange">50+ trading pairs and SLP token support</string>
Expand Down

0 comments on commit 3f8d7df

Please sign in to comment.