Skip to content

Commit

Permalink
Merge pull request #10681 from woocommerce/10670-backend-receipt-add-…
Browse files Browse the repository at this point in the history
…a-text-that-we-share-along-with-the-file

[Backend Receipt] Add a text that we share along with the file
  • Loading branch information
kidinov authored Feb 7, 2024
2 parents 5bf254e + 026c0bb commit d78e6d3
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 24 deletions.
2 changes: 2 additions & 0 deletions RELEASE-NOTES.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
17.3
-----
- [*] [Internal] Enhanced user experience in shipping label creation with automatic scrolling to the first invalid field upon form submission failure [https://github.com/woocommerce/woocommerce-android/pull/10657]
- [*] [Internal] Added a text along with the receipts file when it is shared [https://github.com/woocommerce/woocommerce-android/pull/10681]

17.2
-----
- [**] [Available for users with WooCommerce version of 8.7+, which is not released yet] Every order have a receipt now. The receipts can be shared via many apps installed on the phone [https://github.com/woocommerce/woocommerce-android/pull/10650]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,47 +4,59 @@ import android.app.Application
import android.content.Intent
import android.os.Environment
import androidx.core.content.FileProvider
import com.woocommerce.android.R
import com.woocommerce.android.media.FileUtils
import com.woocommerce.android.tools.SelectedSite
import com.woocommerce.android.util.FileDownloader
import java.io.File
import javax.inject.Inject

class PaymentReceiptShare @Inject constructor(
private val fileUtils: FileUtils,
private val fileDownloader: FileDownloader,
private val context: Application,
private val selectedSite: SelectedSite,
) {
@Suppress("TooGenericExceptionCaught")
suspend operator fun invoke(receiptUrl: String, orderNumber: Long): ReceiptShareResult {
val receiptFile = fileUtils.createTempTimeStampedFile(
storageDir = context.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS)
?: context.filesDir,
prefix = "receipt_$orderNumber",
fileExtension = "html"
)
return if (receiptFile == null) {
ReceiptShareResult.Error.FileCreation
} else if (!fileDownloader.downloadFile(receiptUrl, receiptFile)) {
ReceiptShareResult.Error.FileDownload
} else {
val uri = FileProvider.getUriForFile(
context,
context.packageName + ".provider",
receiptFile
return when {
receiptFile == null -> ReceiptShareResult.Error.FileCreation
!fileDownloader.downloadFile(receiptUrl, receiptFile) -> ReceiptShareResult.Error.FileDownload
else -> tryShare(receiptFile)
}
}

@Suppress("TooGenericExceptionCaught")
private fun tryShare(receiptFile: File): ReceiptShareResult {
val uri = FileProvider.getUriForFile(
context,
context.packageName + ".provider",
receiptFile
)

val text = context.getString(
R.string.card_reader_payment_receipt_email_subject,
selectedSite.get().name.orEmpty()
)
val intent = Intent(Intent.ACTION_SEND).apply {
type = "application/*"
putExtra(Intent.EXTRA_STREAM, uri)
putExtra(Intent.EXTRA_TEXT, text)
}
return try {
context.startActivity(
Intent.createChooser(intent, null).apply {
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}
)
val intent = Intent(Intent.ACTION_SEND).apply {
type = "application/*"
putExtra(Intent.EXTRA_STREAM, uri)
}
try {
context.startActivity(
Intent.createChooser(intent, null).apply {
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}
)
ReceiptShareResult.Success
} catch (e: Exception) {
ReceiptShareResult.Error.Sharing(e)
}
ReceiptShareResult.Success
} catch (e: Exception) {
ReceiptShareResult.Error.Sharing(e)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.woocommerce.android.ui.payments.receipt

import android.app.Application
import com.woocommerce.android.media.FileUtils
import com.woocommerce.android.tools.SelectedSite
import com.woocommerce.android.util.FileDownloader
import com.woocommerce.android.viewmodel.BaseUnitTest
import kotlinx.coroutines.ExperimentalCoroutinesApi
Expand All @@ -22,11 +23,13 @@ class PaymentReceiptShareTest : BaseUnitTest() {
private val context: Application = mock {
on { getExternalFilesDir(anyOrNull()) }.thenReturn(file)
}
private val selectedSite: SelectedSite = mock()

private val sut = PaymentReceiptShare(
fileUtils = fileUtils,
fileDownloader = fileDownloader,
context = context,
selectedSite,
)

@Test
Expand Down

0 comments on commit d78e6d3

Please sign in to comment.