Doc Core
Guia de customização de telas e textos para o Doc Core Android.
Customização Doc Core
Uso do termo Doc CoreNesta 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 adicionaisAlé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 compatibilidadeEste parâmetro
PARAM_CUSTOM_HOME_FRAGMENTfoi 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 { ... }viaDocCoreCustomInstructionsBuilder
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.*) ouStringno formato hex (ex.:"#FF0000"), dependendo do método. - Medidas:
BorderWidtheCornerRadiusaceitamFloat(ouInt, 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 |
|
(2) Background |
|
(3) Context Image |
|
(4) Bottom Sheet |
|
(5) Title |
|
(6) Caption |
|
(7) Physical Document Option |
|
(8) Digital document option |
|
(9) File Document Option (Documento PDF) |
|
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)
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âmetro | Descrição | Opcional | Padrão |
|---|---|---|---|
PARAM_ENVIRONMENT | Parâmetro referente ao ambiente que será executada a documentoscopia. | Não | — |
PARAM_APP_KEY | Parâmetro referente a APP_KEY gerada na Certiface API. | Não | — |
PARAM_TICKET | Ticket de sessão (uso interno/repasse). | Sim | null |
PARAM_HYBRID | Indica se o fluxo está sendo executado em modo híbrido. | Sim | false |
PARAM_THEME | Recebe uma instância de DocCopyTheme (tema/builder). | Sim | null |
PARAM_DEBUG_ON | Permite o retorno de informações do SDK no logcat. | Sim | false |
PARAM_SHOW_FEEDBACK | Controla exibição da tela de feedback ao final da jornada. | Sim | true |
PARAM_CUSTOM_HOME_FRAGMENT | Depreciado/ignorado (tela de instruções em Compose). | Sim | — |
PARAM_CUSTOM_CAMERA_FRAGMENT | Permite customizar a tela de captura via layout XML (R.layout). | Sim | 0 |
PARAM_CUSTOM_FEEDBACK_FRAGMENT | Refere-se à customização da tela de feedback via layout XML (R.layout). | Sim | 0 |
PARAM_CUSTOM_CAM_INSTRUCTION_SINGLE | Texto customizado único para a captura (quando aplicável). | Sim | null |
PARAM_CUSTOM_CAM_INSTRUCTION_FRONT | Texto customizado para a frente do documento. | Sim | null |
PARAM_CUSTOM_CAM_INSTRUCTION_BACK | Texto customizado para o verso do documento. | Sim | null |
PARAM_ENABLE_CNH_DIGITAL | Habilita a opção CNH Digital na tela de instruções. | Sim | false |
PARAM_ENABLE_PDF_UPLOAD | Habilita a opção Documento PDF (upload) na tela de instruções. | Sim | false |
PARAM_FONTS | Permite customizar as fontes do fluxo (mapa de DocCoreFontsKey). | Sim | null |
PARAM_CUSTOM_LOADING_BACKGROUND | Cor (hex string) do fundo do loading inicial. | Sim | null |
PARAM_CUSTOM_LOADING_SPINNER_COLOR | Cor (hex string) do spinner do loading inicial. | Sim | null |
PARAM_CUSTOM_LOADING_SIZE | Tamanho do loading inicial (Int). | Sim | 300 |
PARAM_CUSTOM_LOADING_TYPE | Tipo do loading inicial (LoadingTypeDocumentsCopy). | Sim | null |
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 imagem | Tipo | Propriedade |
|---|---|---|
| (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.
Customização via DocCopyTheme (cores, textos e ícones)
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".
| Propriedade | Tipo |
|---|---|
.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.
| Propriedade | Tipo |
|---|---|
.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.
| Propriedade | Tipo |
|---|---|
.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 imagem | Tipo | Propriedade |
|---|---|---|
| (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.
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) |
|
(2) | Erro (fundo, ícone, texto) |
|
(3) | Botão tentar novamente |
|
(4) | Status bar (sucesso) |
|
(5) | Status bar (erro) |
|
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 |
|
(2) | Background |
|
(3) | Ícone câmera |
|
(4) | Título |
|
(5) | Subtítulo |
|
(6) | Botão verificar permissão |
|
(7) | Botão Permitir |
|
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 Code → Upload (CNH Digital) → Loading → Resultado.
- Se o usuário conseguir ler o QR com sucesso: QR → Loading → Resultado (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: QR → Upload (CNH Digital) → Loading → Resultado.
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 |
|
(2) | Botão voltar |
|
(3) | Bottom sheet |
|
(4) | Título / legenda |
|
(5) | Botão upload de arquivo |
|
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 |
|
(2) | Botões voltar / fechar |
|
(3) | Título / descrição |
|
(4) | Área de seleção de arquivo |
|
(5) | Arquivo selecionado / sucesso |
|
(6) | Botão confirmar envio |
|
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 |
|
(2) | Indicador de loading |
|
(3) | Status bar |
|
6.2 Fluxo Envio de documento via PDF
Tela de upload (documento PDF)
Identificador | Seção | Métodos (DocumentFileCustomsBuilder) |
|---|---|---|
(1) | Background da tela |
|
(2) | Botões voltar / fechar |
|
(3) | Título / descrição |
|
(4) | Área de seleção de arquivo |
|
(5) | Arquivo selecionado / sucesso |
|
(6) | Botão confirmar envio |
|
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")
| Chave | Tela / Uso |
|---|---|
INSTRUCTIONS_TITLE_FONT | Tela de instruções — título |
INSTRUCTIONS_CAPTION_FONT | Tela de instruções — legenda |
INSTRUCTIONS_DOCUMENT_FIRST_BUTTON_TITLE_FONT | Tela de instruções — opção documento físico (título) |
INSTRUCTIONS_DOCUMENT_FIRST_BUTTON_CAPTION_FONT | Tela de instruções — opção documento físico (descrição) |
INSTRUCTIONS_DOCUMENT_SECOND_BUTTON_TITLE_FONT | Tela de instruções — opção CNH Digital (título) |
INSTRUCTIONS_DOCUMENT_SECOND_BUTTON_CAPTION_FONT | Tela de instruções — opção CNH Digital (descrição) |
INSTRUCTIONS_DOCUMENT_THIRD_BUTTON_TITLE_FONT | Tela de instruções — opção documento PDF (título) |
INSTRUCTIONS_DOCUMENT_THIRD_BUTTON_CAPTION_FONT | Tela de instruções — opção documento PDF (descrição) |
PERMISSION_TITLE_FONT | Tela de permissão — título |
PERMISSION_CAPTION_FONT | Tela de permissão — subtítulo |
PERMISSION_BUTTON_FONT | Tela de permissão — botão |
QR_BOTTOM_SHEET_TITLE_FONT | Tela de QR Code — título do bottom sheet |
QR_BOTTOM_SHEET_CAPTION_FONT | Tela de QR Code — legenda do bottom sheet |
QR_BOTTOM_SHEET_BUTTON_FONT | Tela de QR Code — botão de upload |
DIGITAL_CNH_TITLE_FONT | CNH Digital — título |
DIGITAL_CNH_CAPTION_FONT | CNH Digital — descrição |
DIGITAL_CNH_SELECT_FILE_FONT | CNH Digital — texto da área de seleção |
DIGITAL_CNH_SELECTED_FILE_FONT | CNH Digital — nome do arquivo selecionado |
DIGITAL_CNH_SELECTED_FILE_CAPTION_FONT | CNH Digital — texto de sucesso do arquivo |
DIGITAL_CNH_BUTTON_FONT | CNH Digital — botão confirmar |
DOCUMENT_UPLOAD_TITLE_FONT | Upload documento PDF — título |
DOCUMENT_UPLOAD_CAPTION_FONT | Upload documento PDF — descrição |
DOCUMENT_UPLOAD_SELECT_FILE_FONT | Upload documento PDF — área de seleção |
DOCUMENT_UPLOAD_SELECTED_FILE_FONT | Upload documento PDF — arquivo selecionado |
DOCUMENT_UPLOAD_SELECTED_FILE_CAPTION_FONT | Upload documento PDF — texto de sucesso |
DOCUMENT_UPLOAD_BUTTON_FONT | Upload documento PDF — botão confirmar |
RESULT_MESSAGE_FONT | Tela de resultado — mensagem (sucesso/erro) |
RESULT_RETRY_BUTTON_FONT | Tela 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
Updated about 9 hours ago
