-
Notifications
You must be signed in to change notification settings - Fork 408
/
FingerprintScannerSample.java
155 lines (136 loc) · 5.51 KB
/
FingerprintScannerSample.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
//require FingerprintScanner
package com.codename1.samples;
import com.codename1.components.ToastBar;
import com.codename1.fingerprint.Fingerprint;
import com.codename1.fingerprint.KeyRevokedException;
import static com.codename1.ui.CN.*;
import com.codename1.ui.Display;
import com.codename1.ui.Form;
import com.codename1.ui.Dialog;
import com.codename1.ui.Label;
import com.codename1.ui.plaf.UIManager;
import com.codename1.ui.util.Resources;
import com.codename1.io.Log;
import com.codename1.ui.Toolbar;
import java.io.IOException;
import com.codename1.ui.layouts.BoxLayout;
import com.codename1.io.NetworkEvent;
import com.codename1.ui.Button;
import com.codename1.ui.CN;
import com.codename1.ui.Command;
import com.codename1.ui.Container;
import com.codename1.ui.TextField;
import com.codename1.util.AsyncResource;
/**
* This file was generated by <a href="https://www.codenameone.com/">Codename One</a> for the purpose
* of building native mobile applications using Java.
*/
public class FingerprintScannerSample {
private Form current;
private Resources theme;
public void init(Object context) {
// use two network threads instead of one
updateNetworkThreadCount(2);
theme = UIManager.initFirstTheme("/theme");
// Enable Toolbar on all Forms by default
Toolbar.setGlobalToolbar(true);
// Pro only feature
Log.bindCrashProtection(true);
addNetworkErrorListener(err -> {
// prevent the event from propagating
err.consume();
if(err.getError() != null) {
Log.e(err.getError());
}
Log.sendLogAsync();
Dialog.show("Connection Error", "There was a networking error in the connection to " + err.getConnectionRequest().getUrl(), "OK", null);
});
}
public void start() {
if(current != null){
current.show();
return;
}
Form hi = new Form("Hi World", BoxLayout.y());
TextField keyName = new TextField();
TextField keyValue = new TextField();
Button addItem = new Button("Add Item");
Button getItem = new Button("Get Item");
Button deleteItem = new Button("Delete Item");
Button checkAvailable = new Button("Check Available");
checkAvailable.addActionListener(evt->{
Container cnt = BoxLayout.encloseY(
new Label("TouchID: "+Fingerprint.isTouchIDAvailable()),
new Label("FaceID: "+Fingerprint.isFaceIDAvailable())
);
Dialog.show("Capabilities", cnt, new Command("OK"));
});
addItem.addActionListener(evt->{
if (!Fingerprint.isAvailable()) {
ToastBar.showErrorMessage("Fingerprint not avaiable on this platform");
return;
}
Fingerprint.addPassword("Adding secure item to keystore", keyName.getText(), keyValue.getText()).onResult((res, err)->{
if (err != null) {
if (AsyncResource.isCancelled(err)) {
Log.p("addPassword request was cancelled");
return;
}
Log.e(err);
ToastBar.showErrorMessage(err.getMessage());
} else {
ToastBar.showInfoMessage("Result: "+res);
}
});
});
getItem.addActionListener(evt->{
Fingerprint.getPassword("Getting secure item", keyName.getText()).onResult((res, err)->{
if (err != null) {
if (AsyncResource.isCancelled(err)) {
Log.p("getPassword request was cancelled");
return;
}
Log.e(err);
if (err instanceof KeyRevokedException) {
ToastBar.showErrorMessage("Your key has been invalidated, likely due to adding new fingerprints");
} else {
ToastBar.showErrorMessage(err.getMessage());
}
} else {
keyValue.setText(res);
hi.revalidateWithAnimationSafety();
}
});
});
deleteItem.addActionListener(evt->{
Fingerprint.deletePassword("Getting secure item", keyName.getText()).onResult((res, err)->{
if (err != null) {
if (AsyncResource.isCancelled(err)) {
Log.p("deletePassword request was cancelled");
}
Log.e(err);
ToastBar.showErrorMessage(err.getMessage());
} else {
keyValue.setText("");
hi.revalidateWithAnimationSafety();
}
});
});
Button checkHardware = new Button("Check Hardware");
checkHardware.addActionListener(evt->{
Fingerprint.isAvailable();
Dialog.show("Hardware", CN.getProperty("Fingerprint.types", "None"), "OK", null);
});
hi.addAll(checkHardware, new Label("Key:"), keyName, new Label("Value: "), keyValue, addItem, getItem, deleteItem, checkAvailable);
hi.show();
}
public void stop() {
current = getCurrentForm();
if(current instanceof Dialog) {
((Dialog)current).dispose();
current = getCurrentForm();
}
}
public void destroy() {
}
}