Doc Core

Guia de customização de telas e textos para o Doc Core Android.

Customização Doc Core

📝

Uso do termo Doc Core

Nesta seção, compreende-se por Doc Core o módulo Documentscopy dentro do SDK.

Nesta seção, abordaremos o processo de customização da Doc Core, focando em três telas principais: Tela de Instruções, Tela de Captura de Documentos e Tela de Feedback.

A capacidade de personalizar essas telas oferece flexibilidade para adaptar a experiência do usuário conforme as necessidades do seu projeto.

Ao final do guia, você encontra exemplos de XML customizados das telas mencionadas, que podem servir como referência para suas próprias personalizações.

💡

Elementos adicionais

Além das telas obrigatórias, a tela customizada pode conter outros elementos, apenas tomando cuidado para que estes itens adicionais não interfiram no comportamento dos elementos obrigatórios.

Para usar o fluxo de CNH Digital ou de envio de documento via PDF, é necessário passar true no Intent em PARAM_ENABLE_CNH_DIGITAL ou PARAM_ENABLE_PDF_UPLOAD, respectivamente (ambos têm padrão false).


1. Tela de instruções

⚠️

Avisos e compatibilidade

Este parâmetro PARAM_CUSTOM_HOME_FRAGMENT foi depreciado.

No SDK 7.0.0, a tela de instruções passou para Compose e este parâmetro passou a ser ignorado:

  • DocumentscopyActivity.PARAM_CUSTOM_HOME_FRAGMENT
  • Migração recomendada: DocCopyTheme.Builder().setInstructionsThemeBuilder { ... } via DocCoreCustomInstructionsBuilder

Para customizar a tela de instruções, é necessário chamar o builder DocCoreCustomInstructionsBuilder e customizar corretamente os parâmetros que deseja.

Formatos e unidades suportadas

  • Cores: aceitam Int (ex.: R.color.*) ou String no formato hex (ex.: "#FF0000"), dependendo do método.
  • Medidas: BorderWidth e CornerRadius aceitam Float (ou Int, convertido internamente).

Imagem de referência

Os números na imagem correspondem aos identificadores da tabela abaixo.

Identificador → Métodos

Identificador

Método

(1) Back Button

setInstructionBackButtonIcon()
setInstructionBackButtonIconColor()
setInstructionBackButtonBackgroundColor()
setInstructionBackButtonBorderColor()

(2) Background

setInstructionBackgroundColor()
setInstructionLoadingColor()

(3) Context Image

setInstructionContextImage()

(4) Bottom Sheet

setInstructionBottomSheetColor()
setInstructionBottomSheetCornerRadius()

(5) Title

setInstructionTitle()
setInstructionTitleColor()

(6) Caption

setInstructionCaption()
setInstructionCaptionColor()

(7) Physical Document Option

setInstructionPhysicalDocumentOptionIconColor() setInstructionPhysicalDocumentOptionIconBorderColor() setInstructionPhysicalDocumentOptionCircleBackgroundColor() setInstructionPhysicalDocumentOptionBackgroundColor() setInstructionPhysicalDocumentOptionBorderColor() setInstructionPhysicalDocumentOptionBorderWidth() setInstructionPhysicalDocumentOptionCornerRadius() setInstructionPhysicalDocumentOptionTitle() setInstructionPhysicalDocumentOptionTitleColor() setInstructionPhysicalDocumentOptionDescription() setInstructionPhysicalDocumentOptionDescriptionColor() setInstructionPhysicalDocumentOptionArrowIconColor()

(8) Digital document option

setInstructionDigitalDocumentOptionImage() setInstructionDigitalDocumentOptionIconColor() setInstructionDigitalDocumentOptionIconBorderColor() setInstructionDigitalDocumentOptionCircleBackgroundColor() setInstructionDigitalDocumentOptionBackgroundColor() setInstructionDigitalDocumentOptionBorderColor() setInstructionDigitalDocumentOptionBorderWidth() setInstructionDigitalDocumentOptionCornerRadius() setInstructionDigitalDocumentOptionTitle() setInstructionDigitalDocumentOptionTitleColor() setInstructionDigitalDocumentOptionDescription() setInstructionDigitalDocumentOptionDescriptionColor() setInstructionDigitalDocumentOptionArrowIconColor()

(9) File Document Option (Documento PDF)

setInstructionFileDocumentOptionImage()
setInstructionFileDocumentOptionIconColor()
setInstructionFileDocumentOptionIconBorderColor()
setInstructionFileDocumentOptionCircleBackgroundColor()
setInstructionFileDocumentOptionBackgroundColor()
setInstructionFileDocumentOptionBorderColor()
setInstructionFileDocumentOptionBorderWidth()
setInstructionFileDocumentOptionCornerRadius()
setInstructionFileDocumentOptionTitle()
setInstructionFileDocumentOptionTitleColor()
setInstructionFileDocumentOptionDescription()
setInstructionFileDocumentOptionDescriptionColor()
setInstructionFileDocumentOptionArrowIconColor()

Exemplo de implementação:

Aqui podemos observar as propriedades disponiveis para customização, cada uma realizando sua determinada função com base no seu nome indicativo.

private fun getNewTheme() = DocCopyTheme.Builder()
    // Instructions Screen
    .setInstructionsThemeBuilder {
        setInstructionBackgroundColor("#FF0000")
        setInstructionBottomSheetColor("#FF00FF")
        setInstructionLoadingColor("#00FFFF")

        setInstructionBackButtonIconColor("#C0C0C0")
        setInstructionBackButtonBackgroundColor("#33FF57")
        setInstructionBackButtonBorderColor("#654321")

        setInstructionTitle("Título Exemplo")
        setInstructionTitleColor("#FF5733")
        setInstructionCaption("Legenda Exemplo")
        setInstructionCaptionColor("#33FF57")

        setInstructionContextImage(br.com.oiti.certiface.R.drawable.ic_close)
        setInstructionBackButtonIcon(br.com.oiti.certiface.R.drawable.camera_permission)

        setInstructionPhysicalDocumentOptionImage(R.drawable.brand)
        setInstructionPhysicalDocumentOptionTitle("Documento Físico")
        setInstructionPhysicalDocumentOptionDescription("Subtexto Documento Físico")

        setInstructionDigitalDocumentOptionImage(br.com.oiti.liveness3d.R.drawable.cancel_button)
        setInstructionDigitalDocumentOptionTitle("CNH Digital")
        setInstructionDigitalDocumentOptionDescription("Subtexto CNH Digital")

        setInstructionFileDocumentOptionImage(R.drawable.ic_file_upload)
        setInstructionFileDocumentOptionTitle("Documento PDF")
        setInstructionFileDocumentOptionDescription("Subtexto Documento PDF")

        setInstructionBottomSheetCornerRadius(20f)
    }

    // Permissions Screen
    .setPermissionCustomsBuilder {
        setBackgroundColor("#1A1A1A")
        setBackButtonIcon(R.drawable.key)
        setCameraIcon(br.com.oiti.certiface.R.drawable.camera_permission)
        setTitle("Permissão de Câmera")
        setTitleColor("#FFFFFF")
        setSubTitle("Precisamos acessar sua câmera para capturar o documento")
        setSubTitleColor("#CCCCCC")
        setCheckPermissionButtonText("Verificar Permissão")
        setCheckPermissionButtonStyle("outlined")
        setPermissionButtonText("Permitir Acesso")
        setPermissionButtonColor("#4CAF50")
        setPermissionButtonTextColor("#FFFFFF")
    }

    // Processing Screen
    .setProcessingCustomsBuilder {
        setBackgroundColor("#1A1A1A")
        setLoadingDialogColor("#4CAF50")
        setLoadingIndicatorSize(80)
        setStatusBarColor("#000000")
        setStatusBarIsDarkIcons(false)
    }

    // Qr Screen
    .setQrCodeCustomsBuilder {
        setQrCodeOverlayImage(R.drawable.custom_overlay)
        setQrCodeSquareTargetColor("#FF5722")
        setQrCodeBackButtonIcon(R.drawable.key)
        setQrCodeBackButtonIconColor("#FFFFFF")
        setQrCodeBackButtonBackgroundColor("#00FF00")
        setQrCodeBackButtonBorderColor("#1B5E20")
        setQrCodeBottomSheetColor("#F5F5F5")
        setQrCodeBottomSheetCornerRadius(30f)
        setQrCodeTitle("Não conseguiu escanear?")
        setQrCodeTitleColor("#1A1A1A")
        setQrCodeCaption("Envie o documento de outra forma")
        setQrCodeCaptionColor("#666666")
        setQrCodeFileButtonText("Fazer upload do arquivo")
        setQrCodeFileButtonTextColor("#FFFFFF")
        setQrCodeFileButtonBackgroundColor("#FF5722")
        setQrCodeFileButtonBorderColor("#E64A19")
        setQrCodeFileButtonCornerRadius(16f)
    }

    // Digital CNH Screen
    .setDigitalCnhCustomsBuilder {
        setUploadBackgroundColor("#1A1A1A")

        setUploadBackButtonIcon(R.drawable.brand)
        setUploadBackButtonIconColor("#FFFFFF")
        setUploadBackButtonBackgroundColor("#3D3D3D")
        setUploadBackButtonBorderColor("#616161")

        setUploadCloseButtonIcon(br.com.oiti.certiface.R.drawable.back_icon)
        setUploadCloseButtonIconColor("#FF5722")
        setUploadCloseButtonBackgroundColor("#212121")
        setUploadCloseButtonBorderColor("#FFAB91")

        setUploadFileTitle("Envio de CNH Digital")
        setUploadFileTitleColor("#FFFFFF")
        setUploadFileDescription("Selecione o arquivo da CNH digital em PDF")
        setUploadFileDescriptionColor("#CCCCCC")

        setUploadSelectionAreaImage(R.drawable.brand)
        setUploadSelectionAreaIconColor("#1A1A1A")
        setUploadSelectionAreaHintText("Clique aqui para")
        setUploadSelectionAreaText("Selecionar o arquivo")
        setUploadSelectionAreaTextColor("#1A1A1A")
        setUploadSelectionAreaBackgroundColor("#535257")
        setUploadSelectionAreaBorderColor("#1B1BD1")
        setUploadSelectionAreaBorderWidth(2f)
        setUploadSelectionAreaCornerRadius(16f)
        setUploadAreaHeightDp(250f)

        setUploadSelectedFileBorderColor("#1B1BD1")
        setUploadSelectedFileContainerBackgroundColor("#3921a3")
        setUploadSelectedFileNameBackgroundColor("#a32121")
        setUploadSelectedFileNameColor("#1A1A1A")
        setUploadSelectedFileDeleteButtonIcon(br.com.oiti.liveness3d.R.drawable.close_icon)
        setUploadSelectedFileDeleteButtonIconColor("#FF0000")
        setUploadSelectedFileSuccessText("Arquivo selecionado!")
        setUploadSelectedFileSuccessTextColor("#FFFFFF")
        setUploadSelectedFileSuccessTextSizeSp(16f)
        setUploadSelectedFileSuccessIcon(R.drawable.ic_check)
        setUploadSelectedFileSuccessIconSizeDp(56f)

        setUploadConfirmButtonText("Enviar Documento")
        setUploadConfirmButtonTextColor("#FFFFFF")
        setUploadConfirmButtonBackgroundColor("#1B1BD1")
        setUploadConfirmButtonBorderColor("#12127F")
        setUploadConfirmButtonBorderWidth(2f)
        setUploadConfirmButtonDisabledBackgroundColor("#000000")
        setUploadConfirmButtonDisabledTextColor("#FFFFFF")
        setUploadConfirmButtonDisabledBorderColor("#424242")
    }

    // Document File Screen (PDF Upload)
    .setDocumentFileCustomsBuilder {
        setUploadBackgroundColor("#1A1A1A")
        setUploadFileTitle("Envio de Documento")
        setUploadFileDescription("Envie o arquivo do seu documento no formato PDF.")
        setUploadSelectionAreaHintText("Clique aqui para")
        setUploadSelectionAreaText("Selecionar o arquivo")
        setUploadConfirmButtonText("Enviar")
    }

    // Result Screen
    .setResultCustomsBuilder {
        setSuccessBackgroundColor("#4CAF50")
        setSuccessIcon(R.drawable.brand)
        setSuccessText("Documento enviado com sucesso!")
        setSuccessTextColor("#FFFFFF")
        setErrorBackgroundColor("#F44336")
        setErrorIcon(br.com.oiti.liveness3d.R.drawable.cancel_button)
        setErrorText("Erro ao enviar documento")
        setErrorTextColor("#FFFFFF")
        setRetryButtonColor("#FF5722")
        setRetryButtonText("Tentar Novamente")
        setRetryButtonTextColor("#FFFFFF")
        setStatusBarSuccessColor("#388E3C")
        setStatusBarSuccessIsDarkIcons(false)
        setStatusBarErrorColor("#D32F2F")
        setStatusBarErrorIsDarkIcons(false)
    }

    // Capture Screen (layout XML — cores/textos via tema)
    .setCaptureBackgroundColor("#333333")
    .setCaptureInstructionGuideTextFront("front GuideText")
    .setCaptureInstructionGuideTextBack("back GuideText Back")
    .setTextConfirmation("confimation example")
    .setCaptureInstructionGuideReviewText("review")
    .setCapturePreviewBorderColorForCapture("#FF0000")
    .setBackgroundOkColor("#000000")
    .setBackgroundDismissColor("#333333")
    .setCaptureBottomSheetShapeColor("#A5CD39")
    .setCaptureBackButtonColorsIcon("#A5CD39")
    .setCaptureCloseButtonColorsIcon("#A5CD39")
    .setTextOk("text ok")
    .setTextRedo("text voltar")
    .build()

2. Início da jornada (Intent da DocumentscopyActivity)

Para realizar o início da jornada da Doc Core possuímos alguns parâmetros necessários e alguns opcionais aos quais serão descritos abaixo. Neste tópico nos referimos à chamada via Intent da DocumentscopyActivity.

Descrição dos parâmetros

Como podemos observar na seguinte tabela possuímos somente 2 parâmetros obrigatórios, sendo eles PARAM_ENVIRONMENT e PARAM_APP_KEY.

ParâmetroDescriçãoOpcionalPadrão
PARAM_ENVIRONMENTParâmetro referente ao ambiente que será executada a documentoscopia.Não
PARAM_APP_KEYParâmetro referente a APP_KEY gerada na Certiface API.Não
PARAM_TICKETTicket de sessão (uso interno/repasse).Simnull
PARAM_HYBRIDIndica se o fluxo está sendo executado em modo híbrido.Simfalse
PARAM_THEMERecebe uma instância de DocCopyTheme (tema/builder).Simnull
PARAM_DEBUG_ONPermite o retorno de informações do SDK no logcat.Simfalse
PARAM_SHOW_FEEDBACKControla exibição da tela de feedback ao final da jornada.Simtrue
PARAM_CUSTOM_HOME_FRAGMENTDepreciado/ignorado (tela de instruções em Compose).Sim
PARAM_CUSTOM_CAMERA_FRAGMENTPermite customizar a tela de captura via layout XML (R.layout).Sim0
PARAM_CUSTOM_FEEDBACK_FRAGMENTRefere-se à customização da tela de feedback via layout XML (R.layout).Sim0
PARAM_CUSTOM_CAM_INSTRUCTION_SINGLETexto customizado único para a captura (quando aplicável).Simnull
PARAM_CUSTOM_CAM_INSTRUCTION_FRONTTexto customizado para a frente do documento.Simnull
PARAM_CUSTOM_CAM_INSTRUCTION_BACKTexto customizado para o verso do documento.Simnull
PARAM_ENABLE_CNH_DIGITALHabilita a opção CNH Digital na tela de instruções.Simfalse
PARAM_ENABLE_PDF_UPLOADHabilita a opção Documento PDF (upload) na tela de instruções.Simfalse
PARAM_FONTSPermite customizar as fontes do fluxo (mapa de DocCoreFontsKey).Simnull
PARAM_CUSTOM_LOADING_BACKGROUNDCor (hex string) do fundo do loading inicial.Simnull
PARAM_CUSTOM_LOADING_SPINNER_COLORCor (hex string) do spinner do loading inicial.Simnull
PARAM_CUSTOM_LOADING_SIZETamanho do loading inicial (Int).Sim300
PARAM_CUSTOM_LOADING_TYPETipo do loading inicial (LoadingTypeDocumentsCopy).Simnull

Exemplo de implementação:

Aqui podemos observar um exemplo de implementação ao qual realizamos a passagem dos parâmetros descritos acima. Observação para a passagem dos layouts, realizamos a passagem direta da referência sendo assim o R.layout.

fun onDocumentscopyClick() {
    val docCoreFontsKey = hashMapOf(
        DocCoreFontsKey.INSTRUCTIONS_TITLE_FONT to R.font.ubuntu_regular,
        DocCoreFontsKey.INSTRUCTIONS_CAPTION_FONT to R.font.ubuntu_regular,
        DocCoreFontsKey.INSTRUCTIONS_DOCUMENT_FIRST_BUTTON_TITLE_FONT to R.font.ubuntu_regular,
        DocCoreFontsKey.INSTRUCTIONS_DOCUMENT_FIRST_BUTTON_CAPTION_FONT to R.font.ubuntu_regular,
        DocCoreFontsKey.INSTRUCTIONS_DOCUMENT_SECOND_BUTTON_TITLE_FONT to R.font.ubuntu_regular,
        DocCoreFontsKey.INSTRUCTIONS_DOCUMENT_SECOND_BUTTON_CAPTION_FONT to R.font.ubuntu_regular,
        DocCoreFontsKey.INSTRUCTIONS_DOCUMENT_THIRD_BUTTON_TITLE_FONT to R.font.ubuntu_regular,
        DocCoreFontsKey.INSTRUCTIONS_DOCUMENT_THIRD_BUTTON_CAPTION_FONT to R.font.ubuntu_regular,

        DocCoreFontsKey.PERMISSION_TITLE_FONT to R.font.ubuntu_regular,
        DocCoreFontsKey.PERMISSION_CAPTION_FONT to R.font.ubuntu_regular,
        DocCoreFontsKey.PERMISSION_BUTTON_FONT to R.font.ubuntu_regular,

        DocCoreFontsKey.QR_BOTTOM_SHEET_TITLE_FONT to R.font.ubuntu_regular,
        DocCoreFontsKey.QR_BOTTOM_SHEET_CAPTION_FONT to R.font.ubuntu_regular,
        DocCoreFontsKey.QR_BOTTOM_SHEET_BUTTON_FONT to R.font.ubuntu_regular,

        DocCoreFontsKey.DIGITAL_CNH_TITLE_FONT to R.font.ubuntu_regular,
        DocCoreFontsKey.DIGITAL_CNH_CAPTION_FONT to R.font.ubuntu_regular,
        DocCoreFontsKey.DIGITAL_CNH_SELECT_FILE_FONT to R.font.ubuntu_regular,
        DocCoreFontsKey.DIGITAL_CNH_SELECTED_FILE_FONT to R.font.ubuntu_regular,
        DocCoreFontsKey.DIGITAL_CNH_SELECTED_FILE_CAPTION_FONT to R.font.ubuntu_regular,
        DocCoreFontsKey.DIGITAL_CNH_BUTTON_FONT to R.font.ubuntu_regular,

        DocCoreFontsKey.DOCUMENT_UPLOAD_TITLE_FONT to R.font.ubuntu_regular,
        DocCoreFontsKey.DOCUMENT_UPLOAD_CAPTION_FONT to R.font.ubuntu_regular,
        DocCoreFontsKey.DOCUMENT_UPLOAD_SELECT_FILE_FONT to R.font.ubuntu_regular,
        DocCoreFontsKey.DOCUMENT_UPLOAD_SELECTED_FILE_FONT to R.font.ubuntu_regular,
        DocCoreFontsKey.DOCUMENT_UPLOAD_SELECTED_FILE_CAPTION_FONT to R.font.ubuntu_regular,
        DocCoreFontsKey.DOCUMENT_UPLOAD_BUTTON_FONT to R.font.ubuntu_regular,

        DocCoreFontsKey.RESULT_MESSAGE_FONT to R.font.ubuntu_regular,
        DocCoreFontsKey.RESULT_RETRY_BUTTON_FONT to R.font.ubuntu_regular
    )

    val intent = Intent(this, DocumentscopyActivity::class.java).apply {
        putExtra(DocumentscopyActivity.PARAM_ENVIRONMENT, Environment.HML)
        putExtra(DocumentscopyActivity.PARAM_APP_KEY, appKey)
        putExtra(DocumentscopyActivity.PARAM_THEME, getNewTheme())
        putExtra(DocumentscopyActivity.PARAM_FONTS, docCoreFontsKey)
        putExtra(DocumentscopyActivity.PARAM_DEBUG_ON, false)

        putExtra(DocumentscopyActivity.PARAM_ENABLE_CNH_DIGITAL, true)
        putExtra(DocumentscopyActivity.PARAM_ENABLE_PDF_UPLOAD, true)

        putExtra(DocumentscopyActivity.PARAM_CUSTOM_CAMERA_FRAGMENT, R.layout.fragment_doc_camera_custom)
        putExtra(DocumentscopyActivity.PARAM_CUSTOM_FEEDBACK_FRAGMENT, R.layout.fragment_doc_feedback_custom)

        putExtra(DocumentscopyActivity.PARAM_CUSTOM_CAM_INSTRUCTION_FRONT, "Instrução frente")
        putExtra(DocumentscopyActivity.PARAM_CUSTOM_CAM_INSTRUCTION_BACK, "Instrução verso")
    }
    startActivity(intent)
}

Caso esteja utilizando versões mais antigas do Kotlin e/ou precise suportar integração legada, a chamada pode ser feita via startActivityForResult:

fun onDocumentscopyClickLegacy() {
    val intent = Intent(this, DocumentscopyActivity::class.java).apply {
        putExtra(DocumentscopyActivity.PARAM_ENVIRONMENT, Environment.HML)
        putExtra(DocumentscopyActivity.PARAM_APP_KEY, appKey)
        putExtra(DocumentscopyActivity.PARAM_THEME, getNewTheme())
        putExtra(DocumentscopyActivity.PARAM_ENABLE_CNH_DIGITAL, true)
        putExtra(DocumentscopyActivity.PARAM_ENABLE_PDF_UPLOAD, true)
    }
    startActivityForResult(intent, 1001)
}

3. Tela de captura de documento (layout XML)

A tela de captura é customizada via layout XML (PARAM_CUSTOM_CAMERA_FRAGMENT). Cores, textos e ícones podem ser ajustados via DocCopyTheme (tema). É possível personalizar completamente o layout, respeitando os componentes obrigatórios descritos abaixo.

Propriedades relacionadas a componentes necessários: caso opte por personalizar o layout a seguir sem a inclusão dos seguintes componentes, estará sujeito(a) a problemas ao executar o fluxo.

Componentes obrigatórios (layout XML)

Número na imagemTipoPropriedade
(1)ImageButton@+id/backButtonImageButton — Botão de voltar.
(2)RadioButton@+id/chck_frontRadioButton — Ícone indicativo da face frontal.
(2)RadioButton@+id/chck_backRadioButton — Ícone indicativo da face traseira.
(3)TextView@+id/instructionsTextView — Texto exibido para frente/verso.
(4)ImageView@+id/previewImageView — Preview da imagem.
(4)FrameLayout@+id/cameraFrameLayout — Preview da câmera.
(5)ImageButton@+id/captureButton — Botão de capturar imagem.
(6)ImageButton@+id/closeButton — Botão de fechar.
(7)R.layout@layout/layout_doc_camera_preview — Layout do preview da câmera.
(8)TextView@+id/bottomSheetTitleTextView — Texto “a imagem ficou boa?”.
(9)AppCompatButton@+id/takeNewPictureButton — Tirar nova foto.
(10)Button@+id/usePictureButton — Confirmar foto.
(0)View@+id/activityIndicatorView — Loading da tela.

Imagem de referência

Os números na imagem correspondem à coluna «Número na imagem» da tabela de componentes obrigatórios acima.

Tela de captura do documento.

Tela de captura do documento.


Customização via DocCopyTheme (cores, textos e ícones)

Para customizar cores, textos ou ícones via tema, é necessário criar uma função com DocCopyTheme.Builder() e passar no parâmetro PARAM_THEME, adicionando a propriedade de customização desejada.

Tabela de Cores

Nessa sessão utilizamos de dois formatos de passagem de cores: passando diretamente um R.color.black ou a passagem direta utilizando uma hex string no formato "#ff0000".

PropriedadeTipo
.setFrameBorder(Int)R.color
.setCapturePreviewBorderColorForCapture(String)Hex String
.setBackgroundCameraColor(Int)R.color
.setBackgroundCameraColorHybrid(String)Hex String
.setCaptureBackgroundColor(String)Hex String
.setCaptureBottomSheetBackground(String)Hex String
.setCaptureInstructionGuideBackgroundColor(String)Hex String
.setCaptureInstructionGuideTextColor(String)Hex String
.setCaptureBackButtonColorsIcon(String)Hex String
.setCaptureCloseButtonColorsIcon(String)Hex String
.setCaptureBottomSheetShapeColor(String)Hex String
.setBackgroundFeedbackColorTryAgain(Int)R.color
.setTryAgainColor(String)Hex String
.setTextDismissColor(Int)R.color
.setBackgroundDismissColor(String)Hex String
.setBackgroundFeedbackColorOk(Int)R.color
.setBackgroundOkColor(String)Hex String
.setTextOkColor(Int)R.color
.setTextOkColor(String)Hex String

Tabela de Ícones

Nessa tabela utilizamos apenas do recurso de drawable, sendo assim necessitamos apenas da referência do R.drawable para que haja o processamento interno da referência.

PropriedadeTipo
.setIconBack()R.drawable
.setIconCamera()R.drawable

Tabela de Textos

Nessa tabela também necessitamos apenas de uma String. Ao chamar a propriedade deve ser passado por exemplo .setCaptureInstructionGuideTextFront("example") para aplicação da customização.

PropriedadeTipo
.setCaptureInstructionGuideTextFront()String
.setCaptureInstructionGuideTextBack()String
.setCaptureInstructionGuideReviewText()String
.setTextConfirmation()String
.setTextRedo()String
.setTextOk()String

4. Tela de Feedback (layout XML)

👍É possível personalizar completamente os layouts, usando como exemplo o parâmetro PARAM_CUSTOM_FEEDBACK_FRAGMENT, ao qual possui alguns parâmetros obrigatórios como descrito abaixo.

Para realizar a customização da tela de feedback utilizamos dos seguintes componentes:

Número na imagemTipoPropriedade
(1)LinearLayout@+id/successView — Tela de sucesso.
(2)ViewGroup@+id/failureView — Tela de falha.
(3)TextView@+id/failureTextView — Texto da falha.
(4)Button@+id/failureCloseButton — Botão de tentar novamente/fechar.

Os números na imagem de referência (Tela de Resultado em Compose) correspondem à tabela «Identificador → Métodos» na subseção abaixo.

Imagem de referência

Telas de feedback apresentadas no final da jornada.

Telas de feedback apresentadas no final da jornada.

Tela de Resultado (Compose)

A tela de sucesso/erro em Compose é customizada via setResultCustomsBuilder { ... }. Os números na imagem de referência correspondem aos identificadores da tabela.

Identificador

Seção

Métodos

(1)

Sucesso (fundo, ícone, texto)

setSuccessBackgroundColor(Int | String)
setSuccessIcon(R.drawable)
setSuccessText(String)
setSuccessTextColor(Int | String)

(2)

Erro (fundo, ícone, texto)

setErrorBackgroundColor(Int | String)
setErrorIcon(R.drawable)
setErrorText(String)
setErrorTextColor(Int | String)

(3)

Botão tentar novamente

setRetryButtonColor(Int | String)
setRetryButtonText(String)
setRetryButtonTextColor(Int | String)
setRetryButtonTextFont(Typeface)

(4)

Status bar (sucesso)

setStatusBarSuccessColor(Int | String)
setStatusBarSuccessIsDarkIcons(Boolean)

(5)

Status bar (erro)

setStatusBarErrorColor(Int | String)
setStatusBarErrorIsDarkIcons(Boolean)

5. Permissionamento de Câmera

Tela em Compose solicitando permissão de câmera quando o fluxo de CNH Digital ou de upload via PDF é utilizado sem a permissão concedida. Customização via setPermissionCustomsBuilder { ... } no DocCopyTheme.Builder().

Identificador

Seção

Métodos

(1)

Botão voltar

setBackButtonIcon(R.drawable)

(2)

Background

setBackgroundColor(Int | String)

(3)

Ícone câmera

setCameraIcon(R.drawable)

(4)

Título

setTitle(String)
setTitleColor(Int | String)
setTitleFont(Typeface)

(5)

Subtítulo

setSubTitle(String)
setSubTitleColor(Int | String)
setSubTitleFont(Typeface)

(6)

Botão verificar permissão

setCheckPermissionButtonText(String)
setCheckPermissionButtonTextFont(String)
setCheckPermissionButtonStyle(String)

(7)

Botão Permitir

setPermissionButtonText(String)
setPermissionButtonColor(Int | String)
setPermissionButtonTextColor(Int | String)
setPermissionButtonTextFont(Typeface)

Caso o usuário conceda a permissão, segue o fluxo. A permissão nativa do Android em si não é customizável.


6. Telas adicionais

Para habilitar, passar true em PARAM_ENABLE_CNH_DIGITAL ou PARAM_ENABLE_PDF_UPLOAD no Intent (ver seção 2).

Há dois fluxos distintos, descritos separadamente abaixo. As telas são em Compose e customizáveis via DocCopyTheme.Builder() e os builders indicados em cada subseção.


6.1 Fluxo CNH Digital

Habilitação: PARAM_ENABLE_CNH_DIGITAL = true.

Ordem das telas no fluxo (após Instruções e Permissão): QR CodeUpload (CNH Digital)LoadingResultado.

  • Se o usuário conseguir ler o QR com sucesso: QRLoadingResultado (não exibe a tela de upload).
  • Se o usuário não ler o QR e clicar no botão para enviar o arquivo: QRUpload (CNH Digital)LoadingResultado.

Customização: setQrCodeCustomsBuilder { ... } (QR Code), setDigitalCnhCustomsBuilder { ... } (upload), setProcessingCustomsBuilder { ... } (loading). Permissão e resultado usam os mesmos builders das seções 5 e 4.

Seleção de arquivo: somente PDF (mimeType = "application/pdf").

Tela de QR Code

Os números na imagem de referência correspondem aos identificadores da tabela.

Identificador

Seção

Métodos (QrScreenCustomBuilder)

(1)

Overlay / alvo QR

setQrCodeOverlayImage(R.drawable)
setQrCodeSquareTargetColor(Int | String)

(2)

Botão voltar

setQrCodeBackButtonIcon(R.drawable)
setQrCodeBackButtonIconColor(Int | String)
setQrCodeBackButtonBackgroundColor(Int | String)
setQrCodeBackButtonBorderColor(Int | String)

(3)

Bottom sheet

setQrCodeBottomSheetColor(Int | String)
setQrCodeBottomSheetCornerRadius(Float | Int)

(4)

Título / legenda

setQrCodeTitle(String)
setQrCodeTitleColor(Int | String)
setQrCodeCaption(String)
setQrCodeCaptionColor(Int | String)

(5)

Botão upload de arquivo

setQrCodeFileButtonText(String)
setQrCodeFileButtonTextColor(Int | String)
setQrCodeFileButtonBackgroundColor(Int | String)
setQrCodeFileButtonBorderColor(Int | String)
setQrCodeFileButtonCornerRadius(Float | Int)

Tela de upload (CNH Digital)

Os números na imagem de referência correspondem aos identificadores da tabela.

Identificador

Seção

Métodos (DigitalCnhScreenCustomBuilder)

(1)

Background da tela

setUploadBackgroundColor(Int | String)

(2)

Botões voltar / fechar

setUploadBackButtonIcon()
setUploadBackButtonIconColor()
setUploadBackButtonBackgroundColor()
setUploadBackButtonBorderColor()
setUploadCloseButtonIcon()
setUploadCloseButtonIconColor()
setUploadCloseButtonBackgroundColor()
setUploadCloseButtonBorderColor()

(3)

Título / descrição

setUploadFileTitle()
setUploadFileTitleColor()
setUploadFileDescription()
setUploadFileDescriptionColor()

(4)

Área de seleção de arquivo

setUploadSelectionAreaImage()
setUploadSelectionAreaIconColor()
setUploadSelectionAreaHintText()
setUploadSelectionAreaText()
setUploadSelectionAreaTextColor()
setUploadSelectionAreaBackgroundColor()
setUploadSelectionAreaBorderColor()
setUploadSelectionAreaBorderWidth()
setUploadSelectionAreaCornerRadius()
setUploadAreaHeightDp()

(5)

Arquivo selecionado / sucesso

setUploadSelectedFileBorderColor()
setUploadSelectedFileContainerBackgroundColor()
setUploadSelectedFileNameBackgroundColor()
setUploadSelectedFileNameColor()
setUploadSelectedFileDeleteButtonIcon()
setUploadSelectedFileDeleteButtonIconColor()
setUploadSelectedFileSuccessText()
setUploadSelectedFileSuccessTextColor()
setUploadSelectedFileSuccessTextSizeSp()
setUploadSelectedFileSuccessIcon()
setUploadSelectedFileSuccessIconSizeDp()

(6)

Botão confirmar envio

setUploadConfirmButtonText()
setUploadConfirmButtonTextColor()
setUploadConfirmButtonBackgroundColor()
setUploadConfirmButtonBorderColor()
setUploadConfirmButtonBorderWidth()
setUploadConfirmButtonDisabledBackgroundColor()
setUploadConfirmButtonDisabledTextColor()
setUploadConfirmButtonDisabledBorderColor()

Tela de Loading / Processamento

Os números na imagem de referência correspondem aos identificadores da tabela.

Identificador

Seção

Métodos (ProcessingCustomsBuilder)

(1)

Background

setBackgroundColor(Int | String)

(2)

Indicador de loading

setLoadingDialogColor(Int | String)
setLoadingIndicatorSize(Int)
setLoadingIndicatorWidth(Int)

(3)

Status bar

setStatusBarColor(Int | String)
setStatusBarIsDarkIcons(Boolean)

6.2 Fluxo Envio de documento via PDF

Tela de upload (documento PDF)

Identificador

Seção

Métodos (DocumentFileCustomsBuilder)

(1)

Background da tela

setUploadBackgroundColor(Int | String)

(2)

Botões voltar / fechar

setUploadBackButtonIcon()
setUploadBackButtonIconColor()
setUploadBackButtonBackgroundColor()
setUploadBackButtonBorderColor()
setUploadCloseButtonIcon()
setUploadCloseButtonIconColor()
setUploadCloseButtonBackgroundColor()
setUploadCloseButtonBorderColor()

(3)

Título / descrição

setUploadFileTitle()
setUploadFileTitleColor()
setUploadFileDescription()
setUploadFileDescriptionColor()

(4)

Área de seleção de arquivo

setUploadSelectionAreaImage()
setUploadSelectionAreaIconColor()
setUploadSelectionAreaHintText()
setUploadSelectionAreaText()
setUploadSelectionAreaTextColor()
setUploadSelectionAreaBackgroundColor()
setUploadSelectionAreaBorderColor()
setUploadSelectionAreaBorderWidth()
setUploadSelectionAreaCornerRadius()
setUploadAreaHeightDp()

(5)

Arquivo selecionado / sucesso

setUploadSelectedFileBorderColor()
setUploadSelectedFileContainerBackgroundColor()
setUploadSelectedFileNameBackgroundColor()
setUploadSelectedFileNameColor()
setUploadSelectedFileDeleteButtonIcon()
setUploadSelectedFileDeleteButtonIconColor()
setUploadSelectedFileSuccessText()
setUploadSelectedFileSuccessTextColor()
setUploadSelectedFileSuccessTextSizeSp()
setUploadSelectedFileSuccessIcon()
setUploadSelectedFileSuccessIconSizeDp()

(6)

Botão confirmar envio

setUploadConfirmButtonText()
setUploadConfirmButtonTextColor()
setUploadConfirmButtonBackgroundColor()
setUploadConfirmButtonBorderColor()
setUploadConfirmButtonBorderWidth()
setUploadConfirmButtonDisabledBackgroundColor()
setUploadConfirmButtonDisabledTextColor()
setUploadConfirmButtonDisabledBorderColor()


7. Fonts (DocCoreFontsKey)

O enum DocCoreFontsKey contém as chaves de fonte utilizadas no fluxo. A customização é feita via parâmetro PARAM_FONTS no Intent da DocumentscopyActivity, passando um Map<DocCoreFontsKey, T> onde T pode ser:

  • Int: referência de fonte em res/font (ex.: R.font.ubuntu_regular)
  • String: caminho do arquivo em assets/ (ex.: "fonts/ubuntu_regular.ttf")
ChaveTela / Uso
INSTRUCTIONS_TITLE_FONTTela de instruções — título
INSTRUCTIONS_CAPTION_FONTTela de instruções — legenda
INSTRUCTIONS_DOCUMENT_FIRST_BUTTON_TITLE_FONTTela de instruções — opção documento físico (título)
INSTRUCTIONS_DOCUMENT_FIRST_BUTTON_CAPTION_FONTTela de instruções — opção documento físico (descrição)
INSTRUCTIONS_DOCUMENT_SECOND_BUTTON_TITLE_FONTTela de instruções — opção CNH Digital (título)
INSTRUCTIONS_DOCUMENT_SECOND_BUTTON_CAPTION_FONTTela de instruções — opção CNH Digital (descrição)
INSTRUCTIONS_DOCUMENT_THIRD_BUTTON_TITLE_FONTTela de instruções — opção documento PDF (título)
INSTRUCTIONS_DOCUMENT_THIRD_BUTTON_CAPTION_FONTTela de instruções — opção documento PDF (descrição)
PERMISSION_TITLE_FONTTela de permissão — título
PERMISSION_CAPTION_FONTTela de permissão — subtítulo
PERMISSION_BUTTON_FONTTela de permissão — botão
QR_BOTTOM_SHEET_TITLE_FONTTela de QR Code — título do bottom sheet
QR_BOTTOM_SHEET_CAPTION_FONTTela de QR Code — legenda do bottom sheet
QR_BOTTOM_SHEET_BUTTON_FONTTela de QR Code — botão de upload
DIGITAL_CNH_TITLE_FONTCNH Digital — título
DIGITAL_CNH_CAPTION_FONTCNH Digital — descrição
DIGITAL_CNH_SELECT_FILE_FONTCNH Digital — texto da área de seleção
DIGITAL_CNH_SELECTED_FILE_FONTCNH Digital — nome do arquivo selecionado
DIGITAL_CNH_SELECTED_FILE_CAPTION_FONTCNH Digital — texto de sucesso do arquivo
DIGITAL_CNH_BUTTON_FONTCNH Digital — botão confirmar
DOCUMENT_UPLOAD_TITLE_FONTUpload documento PDF — título
DOCUMENT_UPLOAD_CAPTION_FONTUpload documento PDF — descrição
DOCUMENT_UPLOAD_SELECT_FILE_FONTUpload documento PDF — área de seleção
DOCUMENT_UPLOAD_SELECTED_FILE_FONTUpload documento PDF — arquivo selecionado
DOCUMENT_UPLOAD_SELECTED_FILE_CAPTION_FONTUpload documento PDF — texto de sucesso
DOCUMENT_UPLOAD_BUTTON_FONTUpload documento PDF — botão confirmar
RESULT_MESSAGE_FONTTela de resultado — mensagem (sucesso/erro)
RESULT_RETRY_BUTTON_FONTTela de resultado — botão tentar novamente

8. Exemplos de layouts customizados

Nessa sessão apresentamos um repositório onde podemos encontrar alguns exemplos de customização para os layouts das telas citadas acima.

📘Confira no seguinte repositório: https://github.com/oititec/custom-views-examples/tree/main/Android/DocCore