mirror of
https://github.com/bettse/seader.git
synced 2026-08-28 10:34:05 +00:00
UI for virtual card
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
Reference in New Issue
Block a user