UI for virtual card

This commit is contained in:
Eric Betts
2023-12-02 20:12:53 -08:00
parent 2e4f5abead
commit faef7b56f4
3 changed files with 68 additions and 0 deletions
+1
View File
@@ -14,3 +14,4 @@ ADD_SCENE(seader, delete, Delete)
ADD_SCENE(seader, delete_success, DeleteSuccess)
ADD_SCENE(seader, credential_info, CredentialInfo)
ADD_SCENE(seader, sam_info, SamInfo)
ADD_SCENE(seader, virtual_credential, VirtualCredential)
+8
View File
@@ -3,6 +3,7 @@
enum SubmenuIndex {
SubmenuIndexDelete,
SubmenuIndexInfo,
SubmenuIndexVirtual,
};
void seader_scene_saved_menu_submenu_callback(void* context, uint32_t index) {
@@ -21,6 +22,10 @@ void seader_scene_saved_menu_on_enter(void* context) {
submenu_add_item(
submenu, "Info", SubmenuIndexInfo, seader_scene_saved_menu_submenu_callback, seader);
// TODO: if iClass
submenu_add_item(
submenu, "Virtual", SubmenuIndexVirtual, seader_scene_saved_menu_submenu_callback, seader);
submenu_set_selected_item(
seader->submenu,
scene_manager_get_scene_state(seader->scene_manager, SeaderSceneSavedMenu));
@@ -41,6 +46,9 @@ bool seader_scene_saved_menu_on_event(void* context, SceneManagerEvent event) {
} else if(event.event == SubmenuIndexInfo) {
scene_manager_next_scene(seader->scene_manager, SeaderSceneCredentialInfo);
consumed = true;
} else if(event.event == SubmenuIndexVirtual) {
scene_manager_next_scene(seader->scene_manager, SeaderSceneVirtualCredential);
consumed = true;
}
}
+59
View File
@@ -0,0 +1,59 @@
#include "../seader_i.h"
#include <dolphin/dolphin.h>
void seader_scene_virtual_credential_on_enter(void* context) {
Seader* seader = context;
dolphin_deed(DolphinDeedNfcRead);
// Setup view
Popup* popup = seader->popup;
popup_set_header(popup, "Detecting\npicopass\ncard", 68, 30, AlignLeft, AlignTop);
popup_set_icon(popup, 0, 3, &I_RFIDDolphinReceive_97x61);
// Start worker
view_dispatcher_switch_to_view(seader->view_dispatcher, SeaderViewPopup);
seader->worker->stage = SeaderPollerEventTypeCardDetect;
seader_credential_clear(seader->credential);
seader->picopass_poller = picopass_poller_alloc(seader->nfc);
picopass_poller_start(seader->picopass_poller, seader_worker_poller_callback_picopass, seader);
seader_blink_start(seader);
}
bool seader_scene_virtual_credential_on_event(void* context, SceneManagerEvent event) {
Seader* seader = context;
bool consumed = false;
if(event.type == SceneManagerEventTypeCustom) {
if(event.event == SeaderCustomEventWorkerExit) {
seader->credential->type = SeaderCredentialTypePicopass;
scene_manager_next_scene(seader->scene_manager, SeaderSceneReadCardSuccess);
consumed = true;
} else if(event.event == SeaderCustomEventPollerSuccess) {
seader->credential->type = SeaderCredentialTypePicopass;
scene_manager_next_scene(seader->scene_manager, SeaderSceneReadCardSuccess);
consumed = true;
}
} else if(event.type == SceneManagerEventTypeBack) {
scene_manager_search_and_switch_to_previous_scene(
seader->scene_manager, SeaderSceneSamPresent);
consumed = true;
}
return consumed;
}
void seader_scene_virtual_credential_on_exit(void* context) {
Seader* seader = context;
if(seader->picopass_poller) {
picopass_poller_stop(seader->picopass_poller);
picopass_poller_free(seader->picopass_poller);
}
// Clear view
popup_reset(seader->popup);
seader_blink_stop(seader);
}