Přeskočit na hlavní obsah

Indikátor načítání

SecureLoadingIndicator (Jetpack Compose), SecureLoadingView (XML/View) a SecureLoadingOverlay jsou volitelné komponenty knihovny zobrazující animovaný indikátor načítání během zpracování platby. Po navázání na ComgateSecureSession se komponenta zobrazuje a skrývá automaticky v závislosti na stavu platby.

Tip

Komponenta je volitelná — platba proběhne korektně i bez ní. Slouží výhradně k vizuální zpětné vazbě pro uživatele.

Struktura

Indikátor načítání se skládá ze dvou vizuálních prvků:

  • Animovaný spinner — kruhový spinner s plynule otáčejícím se obloukem nad statickou dráhou
  • Textový popisek — volitelný text zobrazený pod spinnerem; výchozí text se automaticky odvozuje z jazyka session

Ve výchozím stavu je komponenta skrytá (visibility GONE) a zobrazí se teprve při zahájení zpracování platby.

Použití v Jetpack Compose

import cz.comgate.sdk.compose.*

val loadingState = rememberLoadingIndicatorState(session)

SecureLoadingIndicator(
state = loadingState,
modifier = Modifier
.fillMaxWidth()
.padding(top = 12.dp)
)

rememberLoadingIndicatorState(session) vytvoří LoadingIndicatorState, automaticky naváže komponentu na session a zapamatuje ji po dobu rekomposic. Není třeba volat žádnou inicializaci navíc.

Použití v XML (View)

Přidejte SecureLoadingView do layoutu:

<cz.comgate.sdk.SecureLoadingView
android:id="@+id/loadingView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
app:loadingSpinnerColor="#1E88E5"
app:loadingTrackColor="#BBDEFB"
app:loadingStrokeWidth="5dp"
app:loadingSpinnerSize="52dp"
app:loadingBackgroundColor="#F5F9FF"
app:loadingCornerRadius="12dp"
app:loadingPaddingHorizontal="16dp"
app:loadingPaddingVertical="20dp" />

Poté v kódu aktivity nebo fragmentu naváže komponentu na session:

binding.loadingView.setup(session)

Automatická integrace se session

Po navázání (setup(session) nebo rememberLoadingIndicatorState(session)) se komponenta chová automaticky:

  • Zobrazí se, jakmile zahájí zpracování platby (uživatel stiskl platební tlačítko)
  • Skryje se, jakmile dorazí terminální výsledek platby (Paid, Cancelled, Failed)

Automatické chování lze kdykoliv zakázat — například pokud si zobrazení načítání řídíte sami:

// Compose (přes state)
loadingState.isLoadingEnabled = false

// View
binding.loadingView.isLoadingEnabled = false
Informace

Při isLoadingEnabled = false jsou metody show() / hide() stále plně funkční. Zakázáno je pouze automatické zobrazeni řízené stavem platby.

Manuální ovládání

Komponentu lze ovládat nezávisle na session — například pro vlastní načítací scénáře nesouvisející s platbou:

// Compose
loadingState.show()
loadingState.hide()

// View
binding.loadingView.show()
binding.loadingView.hide()

SecureLoadingOverlay

SecureLoadingOverlay je alternativní varianta indikátoru načítání. Na rozdíl od SecureLoadingView, která se vkládá přímo do layoutu, se SecureLoadingOverlay zobrazuje jako plovoucí panel vykreslený nad celou obrazovkou se ztmaveným pozadím.

Nejde o View — nevkládáte ji do XML layoutu ani do Compose stromu. Vytvoříte ji jako běžný objekt v kódu.

Tip

Komponenta je volitelná — platba proběhne korektně i bez ní.

Použití

Vytvořte instanci, volitelně nakonfigurujte styl a zavolejte setup(session, activity):

import cz.comgate.sdk.ui.SecureLoadingOverlay

val loadingOverlay = SecureLoadingOverlay()
loadingOverlay.setup(session, this) // 'this' je Activity / AppCompatActivity

Po zavolání setup se overlay zobrazuje a skrývá automaticky:

  • Zobrazí se, jakmile zahájí zpracování platby
  • Skryje se, jakmile dorazí terminální výsledek platby (Paid, Cancelled, Failed)
  • Odváže se, jakmile je aktivita zničena (automaticky, pokud aktivita implementuje LifecycleOwner, což AppCompatActivity splňuje)
Informace

Pokud aktivita neimplementuje LifecycleOwner, volejte detach() ručně v onDestroy.

Ztmavení pozadí

Vlastnost dimAmount (typ Float, výchozí hodnota 0.5) určuje průhlednost ztmaveného pozadí za overlayem:

loadingOverlay.dimAmount = 0.0f   // bez ztmavení
loadingOverlay.dimAmount = 0.5f // výchozí — poloprůhledně černé
loadingOverlay.dimAmount = 1.0f // plně černé

Stylizace

Stylovací rozhraní SecureLoadingOverlay je totožné s rozhraním SecureLoadingView. Všechny metody lze volat před i po zavolání setup:

MetodaPopisVýchozí
setSpinnerColor(color: Int)Barva otáčejícího se oblouku#4287f5
setTrackColor(color: Int)Barva statické dráhy#E0E0E0
setStrokeWidthDp(dp: Float)Šířka tahu spinneru v dp4f
setSpinnerSizeDp(dp: Float)Velikost spinneru v dp48f
setLoadingText(text: String?)Text pod spinnerem; null nebo prázdný řetězec text skryjeautomaticky z překladu session
setLoadingTextColor(color: Int)Barva textu#666666
setLoadingTextSizeSp(sp: Float)Velikost textu v sp14f
setLoadingTextGapDp(dp: Float)Mezera mezi spinnerem a textem v dp8f
setLoadingFontFamily(family: String)Název rodiny písma (např. "sans-serif-medium")systémové
setLoadingTypeface(typeface: Typeface)Přímé nastavení fontusystémové
setLoadingBackgroundColor(color: Int)Barva pozadí karty; Color.TRANSPARENT pro spinner bez kartybílá
setLoadingCornerRadiusDp(dp: Float)Zaoblení rohů karty v dp12f
setLoadingPaddingDp(horizontalDp: Float, verticalDp: Float)Vnitřní odsazení karty v dp24f × 24f

Příklad:

val loadingOverlay = SecureLoadingOverlay()
loadingOverlay.setSpinnerColor(Color.parseColor("#1E88E5"))
loadingOverlay.setTrackColor(Color.parseColor("#BBDEFB"))
loadingOverlay.setStrokeWidthDp(4f)
loadingOverlay.setSpinnerSizeDp(52f)
loadingOverlay.setLoadingCornerRadiusDp(16f)
loadingOverlay.setLoadingPaddingDp(28f, 28f)
loadingOverlay.dimAmount = 0.6f
loadingOverlay.setup(session, this)

Automatická integrace se session

Automatické chování lze zakázat vlastností isLoadingEnabled — například pokud si zobrazení načítání řídíte sami:

loadingOverlay.isLoadingEnabled = false
Informace

Při isLoadingEnabled = false jsou metody show() / hide() stále plně funkční. Zakázáno je pouze automatické zobrazení řízené stavem platby.

Manuální ovládání

Overlay lze zobrazit a skrýt nezávisle na session — například pro vlastní načítací scénáře nesouvisející s platbou:

loadingOverlay.show(activity)
loadingOverlay.hide()

Odpojení od session

loadingOverlay.detach()

detach() odstraní posluchač na session a skryje případný zobrazený overlay. Při použití AppCompatActivity se volá automaticky při onDestroy.

Překlad textového popisku

Výchozí text pod spinnerem je automaticky odvozený z jazyka zvolené platební session — žádné ruční nastavení není nutné.

Vlastní text popisku lze nastavit takto:

// Compose (přes LoadingIndicatorState)
loadingState.setLoadingText("Zpracováváme platbu…")

// View
binding.loadingView.setLoadingText("Zpracováváme platbu…")

Po nastavení vlastního textu se automatický překlad ze session na tento popisek již neuplatní — ani při změně jazyka platby.

Popisek lze skrýt předáním null nebo prázdného řetězce:

loadingState.setLoadingText(null)

Stylování

Metody

Všechny níže uvedené metody jsou dostupné při přímém volání na View.

V Compose je část metod dostupná přes LoadingIndicatorState a kompletní sada je dostupná přes update blok composable SecureLoadingIndicator (přímý přístup k instanci SecureLoadingView).

MetodaParametrPopis
setSpinnerColor(color)IntBarva otáčejícího se oblouku.
setTrackColor(color)IntBarva statické dráhy spinneru.
setStrokeWidthDp(dp)FloatTloušťka oblouku i dráhy v dp.
setSpinnerSizeDp(dp)FloatPrůměr spinneru v dp.
setLoadingText(text)String?Text popisku pod spinnerem. null nebo "" popisek skryje.
setLoadingTextColor(color)IntBarva textu popisku.
setLoadingTextSizeSp(sp)FloatVelikost textu popisku v sp.
setLoadingBackgroundColor(color)IntBarva pozadí celé komponenty.
setLoadingCornerRadiusDp(dp)FloatZaoblení rohů pozadí v dp.
setLoadingPaddingDp(horizontalDp, verticalDp)Float, FloatVnitřní odsazení komponenty v dp.
setLoadingTextGapDp(dp)FloatMezera mezi spinnerem a popiskem v dp.
setLoadingFontFamily(family)StringRodina písma popisku (např. "sans-serif-medium").
setLoadingTypeface(typeface)TypefacePísmo popisku pomocí instance Typeface.
Informace

LoadingIndicatorState v Compose exponuje zkrácenou sadu metod: setSpinnerColor, setTrackColor, setStrokeWidthDp, setSpinnerSizeDp, setLoadingText, setLoadingTextColorsetLoadingTextSizeSp. Zbývající metody (pozadí, zaoblení rohů, odsazení atd.) jsou dostupné výhradně přes update blok — viz ukázka níže.

Příklad v Compose (update blok)

SecureLoadingIndicator(
state = loadingState,
modifier = Modifier.fillMaxWidth(),
update = {
setSpinnerColor(Color.parseColor("#FF0000"))
setTrackColor(Color.parseColor("#FFEBEE"))
setStrokeWidthDp(4f)
setSpinnerSizeDp(48f)
setLoadingBackgroundColor(Color.WHITE)
setLoadingCornerRadiusDp(12f)
setLoadingPaddingDp(16f, 20f)
}
)

XML atributy

XML atributFormátVýchozí hodnotaPopis
app:loadingSpinnerColorcolor#4287f5Barva otáčejícího se oblouku.
app:loadingTrackColorcolor#E0E0E0Barva statické dráhy spinneru.
app:loadingStrokeWidthdimension4dpTloušťka oblouku i dráhy.
app:loadingSpinnerSizedimension48dpPrůměr spinneru.
app:loadingTextstring(překlad session)Vlastní text popisku. Pokud není uveden, použije se přeložený text ze session.
app:loadingTextColorcolor#666666Barva textu popisku.
app:loadingTextSizedimension14spVelikost textu popisku.
app:loadingTextGapdimension8dpMezera mezi spinnerem a popiskem.
app:loadingBackgroundColorcolorPrůhlednáBarva pozadí celé komponenty.
app:loadingCornerRadiusdimension0dpZaoblení rohů pozadí.
app:loadingPaddingHorizontaldimension16dpHorizontální vnitřní odsazení.
app:loadingPaddingVerticaldimension16dpVertikální vnitřní odsazení.
app:loadingEnabledbooleantruePovoluje/zakazuje automatické zobrazení při zpracování platby.