diff --git a/WordPress/src/main/java/org/wordpress/android/support/he/ui/HENewTicketScreen.kt b/WordPress/src/main/java/org/wordpress/android/support/he/ui/HENewTicketScreen.kt index 413d2897ec0d..abfd73eef3bd 100644 --- a/WordPress/src/main/java/org/wordpress/android/support/he/ui/HENewTicketScreen.kt +++ b/WordPress/src/main/java/org/wordpress/android/support/he/ui/HENewTicketScreen.kt @@ -71,6 +71,7 @@ fun HENewTicketScreen( subject: String, messageText: String, siteAddress: String, + includeAppLogs: Boolean, ) -> Unit, userInfo: UserInfo, isSendingNewConversation: Boolean = false, @@ -98,7 +99,7 @@ fun HENewTicketScreen( isLoading = isSendingNewConversation, onClick = { selectedCategory?.let { category -> - onSubmit(category, subject, messageText, siteAddress) + onSubmit(category, subject, messageText, siteAddress, includeAppLogs) } } ) @@ -423,7 +424,7 @@ private fun HENewTicketScreenPreview() { HENewTicketScreen( snackbarHostState = snackbarHostState, onBackClick = { }, - onSubmit = { _, _, _, _-> }, + onSubmit = { _, _, _, _, _ -> }, userInfo = UserInfo("Test user", "test.user@automattic.com", null), attachmentActionsListener = object : AttachmentActionsListener { override fun onAddImageClick() { @@ -445,7 +446,7 @@ private fun HENewTicketScreenPreviewDark() { HENewTicketScreen( snackbarHostState = snackbarHostState, onBackClick = { }, - onSubmit = { _, _, _, _ -> }, + onSubmit = { _, _, _, _, _ -> }, userInfo = UserInfo("Test user", "test.user@automattic.com", null), attachmentActionsListener = object : AttachmentActionsListener { override fun onAddImageClick() { @@ -467,7 +468,7 @@ private fun HENewTicketScreenWordPressPreview() { HENewTicketScreen( snackbarHostState = snackbarHostState, onBackClick = { }, - onSubmit = { _, _, _, _ -> }, + onSubmit = { _, _, _, _, _ -> }, userInfo = UserInfo("Test user", "test.user@automattic.com", null), attachmentActionsListener = object : AttachmentActionsListener { override fun onAddImageClick() { @@ -489,7 +490,7 @@ private fun HENewTicketScreenPreviewWordPressDark() { HENewTicketScreen( snackbarHostState = snackbarHostState, onBackClick = { }, - onSubmit = { _, _, _, _ -> }, + onSubmit = { _, _, _, _, _ -> }, userInfo = UserInfo("Test user", "test.user@automattic.com", null), attachmentActionsListener = object : AttachmentActionsListener { override fun onAddImageClick() { diff --git a/WordPress/src/main/java/org/wordpress/android/support/he/ui/HESupportActivity.kt b/WordPress/src/main/java/org/wordpress/android/support/he/ui/HESupportActivity.kt index e6c2f9861f68..111dd4e88642 100644 --- a/WordPress/src/main/java/org/wordpress/android/support/he/ui/HESupportActivity.kt +++ b/WordPress/src/main/java/org/wordpress/android/support/he/ui/HESupportActivity.kt @@ -183,6 +183,7 @@ class HESupportActivity : AppCompatActivity() { onSendMessage = { message, includeAppLogs -> viewModel.onAddMessageToConversation( message = message, + includeAppLogs = includeAppLogs, ) }, onClearMessageSendResult = { viewModel.clearMessageSendResult() }, @@ -221,11 +222,12 @@ class HESupportActivity : AppCompatActivity() { HENewTicketScreen( snackbarHostState = snackbarHostState, onBackClick = { viewModel.onBackClick() }, - onSubmit = { category, subject, messageText, siteAddress -> + onSubmit = { category, subject, messageText, siteAddress, includeAppLogs -> viewModel.onSendNewConversation( subject = subject, message = messageText, tags = listOf(category.key), + includeAppLogs = includeAppLogs, ) }, userInfo = userInfo, diff --git a/WordPress/src/main/java/org/wordpress/android/support/he/ui/HESupportViewModel.kt b/WordPress/src/main/java/org/wordpress/android/support/he/ui/HESupportViewModel.kt index c7a906fc1c72..0dc25642bd3d 100644 --- a/WordPress/src/main/java/org/wordpress/android/support/he/ui/HESupportViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/support/he/ui/HESupportViewModel.kt @@ -17,6 +17,8 @@ import org.wordpress.android.support.he.repository.CreateConversationResult import org.wordpress.android.support.he.repository.HESupportRepository import org.wordpress.android.support.he.util.TempAttachmentsUtil import org.wordpress.android.util.AppLog +import org.wordpress.android.util.EncryptedLogging +import org.wordpress.android.util.LogFileProviderWrapper import org.wordpress.android.util.NetworkUtilsWrapper import javax.inject.Inject import javax.inject.Named @@ -26,6 +28,8 @@ class HESupportViewModel @Inject constructor( private val heSupportRepository: HESupportRepository, @Named(IO_THREAD) private val ioDispatcher: CoroutineDispatcher, private val tempAttachmentsUtil: TempAttachmentsUtil, + private val encryptedLogging: EncryptedLogging, + private val logFileProvider: LogFileProviderWrapper, accountStore: AccountStore, appLogWrapper: AppLogWrapper, networkUtilsWrapper: NetworkUtilsWrapper, @@ -56,18 +60,24 @@ class HESupportViewModel @Inject constructor( subject: String, message: String, tags: List, + includeAppLogs : Boolean, ) { viewModelScope.launch(ioDispatcher) { try { _isSendingMessage.value = true - val files = tempAttachmentsUtil.createTempFilesFrom(_attachments.value) + if (includeAppLogs) { + // TODO: use the Id to send it within the ticket + val logsId = uploadLogs() + } + + val attachments = tempAttachmentsUtil.createTempFilesFrom(_attachments.value) when (val result = heSupportRepository.createConversation( subject = subject, message = message, tags = tags, - attachments = files.map { it.path } + attachments = attachments.map { it.path } )) { is CreateConversationResult.Success -> { val newConversation = result.conversation @@ -89,7 +99,7 @@ class HESupportViewModel @Inject constructor( } } - tempAttachmentsUtil.removeTempFiles(files) + tempAttachmentsUtil.removeTempFiles(attachments) _isSendingMessage.value = false } catch (e: Exception) { _errorMessage.value = ErrorType.GENERAL @@ -101,11 +111,26 @@ class HESupportViewModel @Inject constructor( } } + private fun uploadLogs(): List { + val encryptedLogsUuid = mutableListOf() + logFileProvider.getLogFiles().lastOrNull()?.let { logFile -> + if (logFile.exists()) { + encryptedLogging.encryptAndUploadLogFile( + logFile = logFile, + shouldStartUploadImmediately = true + )?.let { uuid -> + encryptedLogsUuid.add(uuid) + } + } + } + return encryptedLogsUuid + } + override suspend fun getConversation(conversationId: Long): SupportConversation? = heSupportRepository.loadConversation(conversationId) @Suppress("TooGenericExceptionCaught") - fun onAddMessageToConversation(message: String) { + fun onAddMessageToConversation(message: String, includeAppLogs: Boolean,) { viewModelScope.launch(ioDispatcher) { try { val selectedConversation = _selectedConversation.value @@ -115,6 +140,12 @@ class HESupportViewModel @Inject constructor( } _isSendingMessage.value = true + + if (includeAppLogs) { + // TODO: use the Id to send it within the answer + val logsId = uploadLogs() + } + val files = tempAttachmentsUtil.createTempFilesFrom(_attachments.value) when (val result = heSupportRepository.addMessageToConversation(