Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions .github/workflows/v3-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,21 @@ on:
jobs:
build:
name: Setup Environment and build
runs-on: ubuntu-latest
runs-on: ubuntu-24.04
steps:
- name: Checkout the code to specific branch
uses: actions/checkout@v5
uses: actions/checkout@v7
with:
ref: ${{ github.event.inputs.branch }}

- name: Set up JDK
uses: actions/setup-java@v5
uses: actions/setup-java@v6
with:
distribution: 'temurin'
java-version: '17'

- name: Setup Android SDK
uses: android-actions/setup-android@v3
uses: android-actions/setup-android@v4

- name: Make gradlew executable
run: chmod +x ./gradlew
Expand Down Expand Up @@ -117,7 +117,7 @@ jobs:

- name: Create Github Release
id: create_release
uses: softprops/action-gh-release@v2
uses: softprops/action-gh-release@v3
with:
prerelease: ${{ env.BUILD_TARGET == 'debug' }}
tag_name: ${{ env.VERSION_TAG }}
Expand Down
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,13 @@ All notable changes to this project will be documented in this file.

- **TBD** Configuration response error handling

## [3.5.3] - 2026-09-29

### Removed

- Removed unused READ_MEDIA_IMAGES, READ_MEDIA_VIDEO and READ_MEDIA_AUDIO permissions that blocked Google Play uploads under the Photo and Video Permissions policy
- Removed unnecessary storage permission prompts before export and invoice sharing

## [3.5.2] - 2026-09-01

### Fixed
Expand Down
2 changes: 1 addition & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ apply plugin: 'com.google.firebase.crashlytics'

def versionMajor = 3
def versionMinor = 5
def versionPatch = 2
def versionPatch = 3
def versionBuild = 1

def appVersionBuild = Integer.valueOf(System.env.GITHUB_RUN_NUMBER ?: versionBuild)
Expand Down
5 changes: 0 additions & 5 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,6 @@
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CAMERA" />

<!-- Required only if your app targets Android 13. -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />

<!-- Required to maintain app compatibility. -->
<uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,8 @@ import com.google.firebase.crashlytics.FirebaseCrashlytics
import com.karumi.dexter.Dexter
import com.karumi.dexter.MultiplePermissionsReport
import com.karumi.dexter.PermissionToken
import com.karumi.dexter.listener.PermissionDeniedResponse
import com.karumi.dexter.listener.PermissionGrantedResponse
import com.karumi.dexter.listener.PermissionRequest
import com.karumi.dexter.listener.multi.MultiplePermissionsListener
import com.karumi.dexter.listener.single.PermissionListener
import dagger.android.support.AndroidSupportInjection
import online.taxcore.pos.AppSession
import online.taxcore.pos.R
Expand Down Expand Up @@ -244,11 +241,7 @@ class CatalogDashFragment : Fragment() {
}

binding.catalogExportButton.setOnClickListener {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
startCatalogExport()
} else {
attemptCatalogExport()
}
startCatalogExport()
}

binding.catalogImportButton.setOnClickListener {
Expand All @@ -262,27 +255,6 @@ class CatalogDashFragment : Fragment() {
}
}

private fun attemptCatalogExport() {
Dexter.withContext(activity)
.withPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
.withListener(object : PermissionListener {
override fun onPermissionGranted(response: PermissionGrantedResponse) {/* ... */
startCatalogExport()
}

override fun onPermissionDenied(response: PermissionDeniedResponse) {/* ... */
toast(getString(R.string.denied_permission))
}

override fun onPermissionRationaleShouldBeShown(
permission: PermissionRequest,
token: PermissionToken
) {/* ... */
token.continuePermissionRequest()
}
}).check()
}

@SuppressLint("CheckResult")
private fun startCatalogExport() {
MaterialDialog(requireContext()).show {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -295,8 +295,6 @@ class DashboardActivity : BaseActivity() {

private fun askPermission() {
Dexter.withContext(this).withPermissions(
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.CAMERA
).withListener(object : MultiplePermissionsListener {
override fun onPermissionsChecked(report: MultiplePermissionsReport?) {}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
package online.taxcore.pos.ui.invoice

// import online.taxcore.pos.utils.CreatePdf // TODO: Migrate to iText7
import android.Manifest
import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.graphics.Typeface
import android.os.Build
import android.os.Bundle
import android.print.PrintManager
import android.util.Base64
Expand All @@ -19,20 +17,13 @@ import androidx.fragment.app.DialogFragment
import androidx.fragment.app.FragmentManager
import androidx.preference.PreferenceManager
import com.bumptech.glide.Glide
import com.karumi.dexter.Dexter
import com.karumi.dexter.PermissionToken
import com.karumi.dexter.listener.PermissionDeniedResponse
import com.karumi.dexter.listener.PermissionGrantedResponse
import com.karumi.dexter.listener.PermissionRequest
import com.karumi.dexter.listener.single.PermissionListener
import online.taxcore.pos.BuildConfig
import online.taxcore.pos.R
import online.taxcore.pos.constants.PrefConstants
import online.taxcore.pos.databinding.InvoicePreviewDialogBinding
import online.taxcore.pos.enums.ExportMimeType
import online.taxcore.pos.ui.base.BaseActivity
import online.taxcore.pos.utils.CreatePdf
import online.taxcore.pos.utils.toast
import java.io.File

class FiscalInvoiceFragment : DialogFragment() {
Expand Down Expand Up @@ -101,40 +92,9 @@ class FiscalInvoiceFragment : DialogFragment() {
}

binding.mainAppBarShare.setOnClickListener {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
invoiceNumber?.let { invoiceNo ->
createAndSharePdf(
invoiceNo,
invoiceJournal
)

}
return@setOnClickListener
invoiceNumber?.let { invoiceNo ->
createAndSharePdf(invoiceNo, invoiceJournal)
}

Dexter.withContext(activity)
.withPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
.withListener(object : PermissionListener {
override fun onPermissionGranted(response: PermissionGrantedResponse) {/* ... */
invoiceNumber?.let { it1 ->
createAndSharePdf(
it1,
invoiceJournal
)
}
}

override fun onPermissionDenied(response: PermissionDeniedResponse) {/* ... */
toast(getString(R.string.denied_permission))
}

override fun onPermissionRationaleShouldBeShown(
permission: PermissionRequest,
token: PermissionToken
) {/* ... */
token.continuePermissionRequest()
}
}).check()
}

binding.mainAppBarPrint.setOnClickListener {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,8 @@ import com.vicpin.krealmextensions.deleteAll
import io.realm.Realm
import com.karumi.dexter.MultiplePermissionsReport
import com.karumi.dexter.PermissionToken
import com.karumi.dexter.listener.PermissionDeniedResponse
import com.karumi.dexter.listener.PermissionGrantedResponse
import com.karumi.dexter.listener.PermissionRequest
import com.karumi.dexter.listener.multi.MultiplePermissionsListener
import com.karumi.dexter.listener.single.PermissionListener
import dagger.android.support.AndroidSupportInjection
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
Expand Down Expand Up @@ -140,23 +137,15 @@ class JournalDashFragment : Fragment() {
}

binding.journalExportButton.setOnClickListener {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
startJournalExport()
} else {
attemptJournalExport()
}
startJournalExport()
}

// Secret long press (5 seconds) to export and clear journal
binding.journalExportButton.setOnTouchListener { _, event ->
when (event.action) {
MotionEvent.ACTION_DOWN -> {
secretExportRunnable = Runnable {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
startJournalExportAndClear()
} else {
attemptJournalExportAndClear()
}
startJournalExportAndClear()
}
secretExportHandler.postDelayed(secretExportRunnable!!, SECRET_HOLD_DURATION)
false
Expand Down Expand Up @@ -217,25 +206,6 @@ class JournalDashFragment : Fragment() {
}
}

private fun attemptJournalExport() {
Dexter.withContext(activity).withPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
.withListener(object : PermissionListener {
override fun onPermissionGranted(response: PermissionGrantedResponse) {/* ... */
startJournalExport()
}

override fun onPermissionDenied(response: PermissionDeniedResponse) {/* ... */
toast(getString(R.string.denied_permission))
}

override fun onPermissionRationaleShouldBeShown(
permission: PermissionRequest, token: PermissionToken
) {/* ... */
token.continuePermissionRequest()
}
}).check()
}

private fun startJournalExport() {
MaterialDialog(requireContext()).show {
title(R.string.title_export_journal)
Expand All @@ -257,25 +227,6 @@ class JournalDashFragment : Fragment() {
}
}

private fun attemptJournalExportAndClear() {
Dexter.withContext(activity).withPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
.withListener(object : PermissionListener {
override fun onPermissionGranted(response: PermissionGrantedResponse) {
startJournalExportAndClear()
}

override fun onPermissionDenied(response: PermissionDeniedResponse) {
toast(getString(R.string.denied_permission))
}

override fun onPermissionRationaleShouldBeShown(
permission: PermissionRequest, token: PermissionToken
) {
token.continuePermissionRequest()
}
}).check()
}

private fun startJournalExportAndClear() {
MaterialDialog(requireContext()).show {
title(R.string.dialog_title_export_and_clear)
Expand Down
Loading