2024-01-15 08:32:15 -08:00
|
|
|
package co.electriccoin.zcash.ui.util
|
2023-11-13 05:53:16 -08:00
|
|
|
|
|
|
|
import android.content.Context
|
|
|
|
import android.content.Intent
|
|
|
|
import androidx.core.content.FileProvider
|
|
|
|
import co.electriccoin.zcash.ui.R
|
2023-11-23 02:07:09 -08:00
|
|
|
import co.electriccoin.zcash.ui.common.model.VersionInfo
|
2023-11-13 05:53:16 -08:00
|
|
|
import java.io.File
|
|
|
|
|
|
|
|
object FileShareUtil {
|
|
|
|
const val SHARE_OUTSIDE_THE_APP_FLAGS = Intent.FLAG_ACTIVITY_NEW_TASK
|
|
|
|
|
|
|
|
const val SHARE_CONTENT_PERMISSION_FLAGS = Intent.FLAG_GRANT_READ_URI_PERMISSION
|
|
|
|
|
|
|
|
const val ZASHI_INTERNAL_DATA_MIME_TYPE = "application/octet-stream" // NON-NLS
|
2024-01-15 08:32:15 -08:00
|
|
|
const val ZASHI_QR_CODE_MIME_TYPE = "image/png" // NON-NLS
|
2023-11-13 05:53:16 -08:00
|
|
|
|
|
|
|
const val ZASHI_INTERNAL_DATA_AUTHORITY = "co.electriccoin.zcash.provider" // NON-NLS
|
2023-11-23 02:07:09 -08:00
|
|
|
const val ZASHI_INTERNAL_DATA_AUTHORITY_DEBUG = "co.electriccoin.zcash.debug.provider" // NON-NLS
|
2023-11-13 05:53:16 -08:00
|
|
|
|
2023-12-19 02:03:28 -08:00
|
|
|
const val ZASHI_INTERNAL_DATA_AUTHORITY_TESTNET = "co.electriccoin.zcash.provider.testnet" // NON-NLS
|
|
|
|
const val ZASHI_INTERNAL_DATA_AUTHORITY_TESTNET_DEBUG = "co.electriccoin.zcash.debug.provider.testnet" // NON-NLS
|
|
|
|
|
2023-11-13 05:53:16 -08:00
|
|
|
/**
|
|
|
|
* Returns a new share internal app data intent with necessary permission granted exclusively to the data file.
|
|
|
|
*
|
|
|
|
* @param dataFilePath The private data file path we want to share
|
|
|
|
*
|
|
|
|
* @return Intent for launching an app for sharing
|
|
|
|
*/
|
|
|
|
internal fun newShareContentIntent(
|
|
|
|
context: Context,
|
2023-11-23 02:07:09 -08:00
|
|
|
dataFilePath: String,
|
2024-01-15 08:32:15 -08:00
|
|
|
fileType: String,
|
|
|
|
versionInfo: VersionInfo,
|
2023-11-13 05:53:16 -08:00
|
|
|
): Intent {
|
2023-12-11 01:20:32 -08:00
|
|
|
val fileUri =
|
|
|
|
FileProvider.getUriForFile(
|
|
|
|
context,
|
2023-12-19 02:03:28 -08:00
|
|
|
getAuthorityByVersionInfo(versionInfo),
|
2023-12-11 01:20:32 -08:00
|
|
|
File(dataFilePath)
|
2023-11-13 05:53:16 -08:00
|
|
|
)
|
2023-12-11 01:20:32 -08:00
|
|
|
|
|
|
|
val dataIntent: Intent =
|
|
|
|
Intent().apply {
|
|
|
|
action = Intent.ACTION_SEND
|
|
|
|
putExtra(Intent.EXTRA_STREAM, fileUri)
|
2024-01-15 08:32:15 -08:00
|
|
|
type = fileType
|
2023-12-11 01:20:32 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
val shareDataIntent =
|
|
|
|
Intent.createChooser(
|
|
|
|
dataIntent,
|
|
|
|
context.getString(R.string.export_data_export_data_chooser_title)
|
|
|
|
).apply {
|
|
|
|
addFlags(
|
|
|
|
SHARE_CONTENT_PERMISSION_FLAGS or
|
|
|
|
SHARE_OUTSIDE_THE_APP_FLAGS
|
|
|
|
)
|
|
|
|
}
|
2023-11-13 05:53:16 -08:00
|
|
|
|
|
|
|
return shareDataIntent
|
|
|
|
}
|
2023-12-19 02:03:28 -08:00
|
|
|
|
|
|
|
private fun getAuthorityByVersionInfo(versionInfo: VersionInfo) =
|
|
|
|
if (versionInfo.isTestnet) {
|
|
|
|
if (versionInfo.isDebuggable) {
|
|
|
|
ZASHI_INTERNAL_DATA_AUTHORITY_TESTNET_DEBUG
|
|
|
|
} else {
|
|
|
|
ZASHI_INTERNAL_DATA_AUTHORITY_TESTNET
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if (versionInfo.isDebuggable) {
|
|
|
|
ZASHI_INTERNAL_DATA_AUTHORITY_DEBUG
|
|
|
|
} else {
|
|
|
|
ZASHI_INTERNAL_DATA_AUTHORITY
|
|
|
|
}
|
|
|
|
}
|
2023-11-13 05:53:16 -08:00
|
|
|
}
|