Ir para o conteúdo

Métodos que buscam no SDK o estilo da aplicação da adquirente previamente ajustados no portal PayStore.


Os métodos que seguem são responsáveis por obter a identidade visual da aplicação por meio da logo da interface grafica, logo do comprovante e o tema da aplicação, sendo assim utilizados para a estilização da aplicação. Para informações mais detalhadas sobre a personalização visual da aplicação clique aqui.

Métodos

Assinatura Descrição
void getLogo(PaymentCallback paymentCallback) Método utilizado para obter a imagem de logo da aplicação.
void getReceiptLogo(PaymentCallback paymentCallback) Método utilizado para obter a imagem de logo do comprovante da aplicação.
void getTheme(PaymentCallback<ColorsSdk> paymentCallback) Método utilizado para obter as cores do tema da aplicação.

Parâmetros

Nome Tipo Obrigatório Descrição
paymentCallback PaymentCallback Sim Callback pardrão utilizado para as demais funções do PaymentClient que carrega a String com o resultado das operações. No caso dos métodos getLogo e getReceiptLogo a String retornada representa uma imagem com base 64.
paymentCallback PaymentCallback<ColorsSdk> Sim Callback parametrizada com ColorsSdk que carrega o objeto com o resultado da operação.

Detalhes do parâmetro paymentCallback

O parâmetro paymentCallback é definido por a instância de um objeto PaymentClient.PaymentCallback que usa o tipo definido pelo seu retrono, ou seja, no caso dos métodos getLogo e getReceiptLogo que tem uma String retornada, a instância do paymentCallback deve ser PaymentClient.PaymentCallback<String>.

Para o método getTheme que tem como retorno um objeto ColorsSdk o seu paymentCallback deve ser instanciado como PaymentClient.PaymentCallback<ColorsSdk>.

É importante pontuar que para realizar a instância do paymentCallback, é necessário implementar os métodos onSuccess e onError devido ao PaymentClient.PaymentCallback ser uma interface.

O método onSuccess que deverá ser implementado carrega do resultado da operação em seu parâmetro, que deve ser do mesmo tipo do retono do método que se deseja chamar, ou seja, no caso do getLogo que tem o seu retorno como String o método onSuccess deve ser implementado com a assinatura do seu parâmetro sendo do tipo String. Para o método getTheme que tem o seu retorno como ColorsSdk o método onSuccess deve ser implementado com a assinatura do seu parâmetro sendo do tipo ColorsSdk. O onSuccess será executado sempre que a operação for bem sucedida.

No método onError a execução sempre ocorrerá quando houver falha ao executar a operação, a assinatura do seu método diferente do onSuccess não depende do tipo do retorno, sendo sempre ErrorData que contém os dados de erro da operação como os atributos.

Nome Tipo Descrição
ErrorData.paymentsResponseCode String Código de resposta para o erro ocorrido. Vide Códigos de Resposta
ErrorData.responseMessage String Mensagem descritiva da causa do erro.

Sintetizando os detalhes abordados em código temos:

PaymentClient paymentClient = new PaymentClient(); //Criando um objeto PaymentClient
paymentClient.bind(this.getApplicationContext());  //Realizando o bind

try{
    paymentClient.getLogo(new PaymentClient.PaymentCallback<String>() {
    //                                                        ^
    // instanciando o parâmetro para trabalhar com o tipo do seu retorno (String).        
        @Override
        public void onSuccess(String strImage) {
        //                      ^
        // Assinatura do método onSuccess com o parâmetro do tipo String.
        // O parâmetro strImage armazena a imagem em base 64.
        }
        @Override
        public void onError(ErrorData errorData) {

        }
    });
} catch (ClientException e) {}

try{
    paymentClient.getTheme(new PaymentClient.PaymentCallback<ColorsSdk>() {
    //                                                           ^
    // instanciando o parâmetro para trabalhar com o tipo do seu retorno (ColorsSdk).
        @Override
        public void onSuccess(ColorsSdk theme) {
        //                        ^
        // Assinatura do método onSuccess com o parâmetro do tipo ColorsSdk.
        // O parâmetro theme armazena o tema da aplicação.
        }
        @Override
        public void onError(ErrorData errorData) {

        }
    });
} catch (ClientException e) {}

ColorsSdk

Construtores
ColorsSdk()
ColorsSdk(String colorPrimary, String colorPrimaryDark, String colorAccent, String colorPrimaryLight)
getters setters
String getThemeName() void setThemeName(String themeName)
String getColorPrimary() void setColorPrimary(String colorPrimary)
String getColorPrimaryDark() void setColorPrimaryDark(String colorPrimaryDark)
String getColorAccent() void setColorAccent(String colorAccent)
String getColorPrimaryLight() void setColorPrimaryLight(String colorPrimaryLight)

Exemplo prático

Activity

public class GetVisualActivity extends AppCompatActivity implements PaymentClient.PaymentCallback<ReversePayment> {

    private PaymentClient paymentClient;
    public static final String TAG = "TAG_DEMO";
    private final int GET_LOGO = 0;
    private final int GET_RECEIPT_LOGO = 1;
    private final int GET_THEME = 2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_get_visual);

        paymentClient = new PaymentClient();
        paymentClient.bind(this.getApplicationContext());


        Button btn_logo = findViewById(R.id.btn_logo);
        btn_logo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                doExecute(GET_LOGO);
            }
        });

        Button btn_receipt = findViewById(R.id.btn_receipt_logo);
        btn_receipt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                doExecute(GET_RECEIPT_LOGO);
            }
        });

        Button btn_theme = findViewById(R.id.btn_theme);
        btn_theme.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                doExecute(GET_THEME);
            }
        });
    }

    @Override
    public void onSuccess(ReversePayment reversePayment) {

    }

    @Override
    public void onError(ErrorData errorData) {

    }

    @Override
    protected void onDestroy() {
        try {
            paymentClient.unbind(this);
        } catch (Exception e) {
            Log.e(TAG, e.getMessage());
        }
        super.onDestroy();
    }

    public void  doExecute (int function) {
        switch (function)
        {
            case GET_LOGO:
                try{
                    paymentClient.getLogo(new PaymentClient.PaymentCallback<String>() {
                        @Override
                        public void onSuccess(String s) {
                            Toast.makeText(getApplicationContext(), "ok getLogo", Toast.LENGTH_SHORT).show();
                            ImageView imageReceiptLogo = findViewById(R.id.image_view_logo);
                            imageReceiptLogo.setImageBitmap(convertBase64ToBitMap(s));
                        }

                        @Override
                        public void onError(ErrorData errorData) {
                            Toast.makeText(getApplicationContext(), "erro getLogo", Toast.LENGTH_SHORT).show();
                        }
                    });
                } catch (ClientException e) {
                    Log.e(TAG, "Error testCard", e);
                }
                break;

            case GET_RECEIPT_LOGO:
                try {
                    paymentClient.getReceiptLogo(new PaymentClient.PaymentCallback<String>() {
                        @Override
                        public void onSuccess(String s) {
                            Toast.makeText(getApplicationContext(), "ok getReceiptLogo", Toast.LENGTH_SHORT).show();
                            ImageView imageReceiptLogo = findViewById(R.id.image_view_receipt_logo);
                            imageReceiptLogo.setImageBitmap(convertBase64ToBitMap(s));
                        }

                        @Override
                        public void onError(ErrorData errorData) {
                            Toast.makeText(getApplicationContext(), "erro getReceiptLogo", Toast.LENGTH_SHORT).show();
                        }
                    });
                }
                catch (ClientException e) {
                    Log.e(TAG, "Error testCard", e);
                }
                break;

            case GET_THEME:
                try {
                    paymentClient.getTheme(new PaymentClient.PaymentCallback<ColorsSdk>() {

                        @Override
                        public void onSuccess(ColorsSdk colorsSdk) {
                            Toast.makeText(getApplicationContext(), "Theme ok", Toast.LENGTH_SHORT).show();
                            showTheme(colorsSdk);
                        }

                        @Override
                        public void onError(ErrorData errorData) {
                            Toast.makeText(getApplicationContext(), "Theme erro", Toast.LENGTH_SHORT).show();
                        }
                    });
                } catch (ClientException e) {
                    e.printStackTrace();
                }
                break;

        }

    }

    private void getLogo() throws ClientException {
        paymentClient.getLogo(new PaymentClient.PaymentCallback<String>() {
            @Override
            public void onSuccess(String strImage) {
                Toast.makeText(getApplicationContext(), "ok getLogo", Toast.LENGTH_SHORT).show();
                ImageView imageReceiptLogo = findViewById(R.id.image_view_receipt_logo);
                imageReceiptLogo.setImageBitmap(convertBase64ToBitMap(strImage));
            }

            @Override
            public void onError(ErrorData errorData) {
                Toast.makeText(getApplicationContext(), "erro getLogo", Toast.LENGTH_SHORT).show();
            }
        });
    }

    private void showTheme(ColorsSdk colorsSdk) {
        View colorPrimary = findViewById(R.id.view_color_primary);
        View colorPrimaryDark = findViewById(R.id.view_color_primary_dark);
        View colorAccent = findViewById(R.id.view_color_accent);
        View colorPrimarylight = findViewById(R.id.view_color_primary_light);
        TextView themeName = findViewById(R.id.text_view_theme_name);

        colorPrimary.setBackgroundColor(Color.parseColor(colorsSdk.getColorPrimary()));
        colorPrimaryDark.setBackgroundColor(Color.parseColor(colorsSdk.getColorPrimaryDark()));
        colorAccent.setBackgroundColor(Color.parseColor(colorsSdk.getColorAccent()));
        colorPrimarylight.setBackgroundColor(Color.parseColor(colorsSdk.getColorPrimaryLight()));
        themeName.setText(colorsSdk.getThemeName());
    }

    private Bitmap convertBase64ToBitMap(String base64)
    {
        Bitmap decodedByte = null;

        if (!base64.isEmpty()) {
            byte[] decodedString = Base64.decode(base64, Base64.DEFAULT);
            decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
        }

        return decodedByte;
    }

}

xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".GetVisualActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:gravity="center">

        <Button
            android:id="@+id/btn_logo"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="getLogo"
            tools:ignore="MissingConstraints"
            />

        <ImageView
            android:id="@+id/image_view_logo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <Button
            android:id="@+id/btn_receipt_logo"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="getReceiptLogo"
            tools:ignore="MissingConstraints"
            tools:layout_editor_absoluteX="159dp"
            tools:layout_editor_absoluteY="372dp" />

        <ImageView
            android:id="@+id/image_view_receipt_logo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <Button
            android:id="@+id/btn_theme"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="getTheme" />

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:gravity="center">

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">
                <TextView
                    android:id="@+id/text_view_theme_name"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textSize="14sp"
                    android:gravity="center"/>
            </LinearLayout>

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
                <View
                    android:id="@+id/view_color_primary"
                    android:layout_width="50dp"
                    android:layout_height="50dp" />

                <View
                    android:id="@+id/view_color_primary_dark"
                    android:layout_width="50dp"
                    android:layout_height="50dp" />

                <View
                    android:id="@+id/view_color_accent"
                    android:layout_width="50dp"
                    android:layout_height="50dp" />

                <View
                    android:id="@+id/view_color_primary_light"
                    android:layout_width="50dp"
                    android:layout_height="50dp" />
            </LinearLayout>

        </LinearLayout>

    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

Resultado

Implementando o exemplo é possível obter o seguinte resultado: