76 lines
3.2 KiB
C
76 lines
3.2 KiB
C
#include "feature_signTx.h"
|
|
#include "ux.h"
|
|
#include "eth_plugin_handler.h"
|
|
#include "ui_callbacks.h"
|
|
#include "ui_plugin.h"
|
|
|
|
// This function is not exported by the SDK
|
|
void ux_layout_paging_redisplay_by_addr(unsigned int stack_slot);
|
|
|
|
void plugin_ui_get_id() {
|
|
ethQueryContractID_t pluginQueryContractID;
|
|
eth_plugin_prepare_query_contract_ID(&pluginQueryContractID,
|
|
strings.common.fullAddress,
|
|
sizeof(strings.common.fullAddress),
|
|
strings.common.fullAmount,
|
|
sizeof(strings.common.fullAmount));
|
|
// Query the original contract for ID if it's not an internal alias
|
|
if (!eth_plugin_call(ETH_PLUGIN_QUERY_CONTRACT_ID, (void *) &pluginQueryContractID)) {
|
|
PRINTF("Plugin query contract ID call failed\n");
|
|
io_seproxyhal_touch_tx_cancel(NULL);
|
|
}
|
|
}
|
|
|
|
void plugin_ui_get_item() {
|
|
ethQueryContractUI_t pluginQueryContractUI;
|
|
eth_plugin_prepare_query_contract_UI(&pluginQueryContractUI,
|
|
dataContext.tokenContext.pluginUiCurrentItem,
|
|
strings.common.fullAddress,
|
|
sizeof(strings.common.fullAddress),
|
|
strings.common.fullAmount,
|
|
sizeof(strings.common.fullAmount));
|
|
if (!eth_plugin_call(ETH_PLUGIN_QUERY_CONTRACT_UI, (void *) &pluginQueryContractUI)) {
|
|
PRINTF("Plugin query contract UI call failed\n");
|
|
io_seproxyhal_touch_tx_cancel(NULL);
|
|
}
|
|
}
|
|
|
|
void display_next_plugin_item(bool entering) {
|
|
if (entering) {
|
|
if (dataContext.tokenContext.pluginUiState == PLUGIN_UI_OUTSIDE) {
|
|
dataContext.tokenContext.pluginUiState = PLUGIN_UI_INSIDE;
|
|
dataContext.tokenContext.pluginUiCurrentItem = 0;
|
|
plugin_ui_get_item();
|
|
ux_flow_next();
|
|
} else {
|
|
if (dataContext.tokenContext.pluginUiCurrentItem > 0) {
|
|
dataContext.tokenContext.pluginUiCurrentItem--;
|
|
plugin_ui_get_item();
|
|
ux_flow_next();
|
|
} else {
|
|
dataContext.tokenContext.pluginUiState = PLUGIN_UI_OUTSIDE;
|
|
dataContext.tokenContext.pluginUiCurrentItem = 0;
|
|
ux_flow_prev();
|
|
}
|
|
}
|
|
} else {
|
|
if (dataContext.tokenContext.pluginUiState == PLUGIN_UI_OUTSIDE) {
|
|
dataContext.tokenContext.pluginUiState = PLUGIN_UI_INSIDE;
|
|
plugin_ui_get_item();
|
|
ux_flow_prev();
|
|
} else {
|
|
if (dataContext.tokenContext.pluginUiCurrentItem <
|
|
dataContext.tokenContext.pluginUiMaxItems - 1) {
|
|
dataContext.tokenContext.pluginUiCurrentItem++;
|
|
plugin_ui_get_item();
|
|
ux_flow_prev();
|
|
// Reset multi page layout to the first page
|
|
G_ux.layout_paging.current = 0;
|
|
ux_layout_paging_redisplay_by_addr(G_ux.stack_count - 1);
|
|
} else {
|
|
dataContext.tokenContext.pluginUiState = PLUGIN_UI_OUTSIDE;
|
|
ux_flow_next();
|
|
}
|
|
}
|
|
}
|
|
} |