1919import android .widget .LinearLayout ;
2020import android .widget .ListView ;
2121import android .widget .TextView ;
22- import android .widget .Toast ;
2322
23+ import com .hjq .toast .Toaster ;
2424import com .surcumference .fingerprint .BuildConfig ;
2525import com .surcumference .fingerprint .Lang ;
2626import com .surcumference .fingerprint .R ;
2727import com .surcumference .fingerprint .bean .DigitPasswordKeyPadInfo ;
2828import com .surcumference .fingerprint .plugin .inf .IAppPlugin ;
29+ import com .surcumference .fingerprint .plugin .inf .OnFingerprintVerificationOKListener ;
30+ import com .surcumference .fingerprint .util .AESUtils ;
2931import com .surcumference .fingerprint .util .ActivityViewObserver ;
3032import com .surcumference .fingerprint .util .AlipayVersionControl ;
3133import com .surcumference .fingerprint .util .ApplicationUtils ;
3234import com .surcumference .fingerprint .util .BlackListUtils ;
3335import com .surcumference .fingerprint .util .Config ;
3436import com .surcumference .fingerprint .util .DpUtils ;
3537import com .surcumference .fingerprint .util .ImageUtils ;
36- import com .surcumference .fingerprint .util .NotifyUtils ;
3738import com .surcumference .fingerprint .util .StyleUtils ;
3839import com .surcumference .fingerprint .util .Task ;
3940import com .surcumference .fingerprint .util .ViewUtils ;
41+ import com .surcumference .fingerprint .util .XFingerprintIdentify ;
4042import com .surcumference .fingerprint .util .drawable .XDrawable ;
4143import com .surcumference .fingerprint .util .log .L ;
4244import com .surcumference .fingerprint .view .AlipayPayView ;
4345import com .surcumference .fingerprint .view .DialogFrameLayout ;
4446import com .surcumference .fingerprint .view .SettingsView ;
45- import com .wei .android .lib .fingerprintidentify .FingerprintIdentify ;
46- import com .wei .android .lib .fingerprintidentify .base .BaseFingerprint ;
47+ import com .wei .android .lib .fingerprintidentify .bean .FingerprintIdentifyFailInfo ;
4748
4849import java .util .ArrayList ;
4950import java .util .List ;
5051
52+ import javax .crypto .Cipher ;
53+
5154public class AlipayBasePlugin implements IAppPlugin {
5255
5356
5457 private AlertDialog mFingerPrintAlertDialog ;
5558 private boolean mPwdActivityDontShowFlag ;
5659 private int mPwdActivityReShowDelayTimeMsec ;
5760
58- private FingerprintIdentify mFingerprintIdentify ;
61+ private XFingerprintIdentify mFingerprintIdentify ;
5962 private Activity mCurrentActivity ;
6063
6164 private boolean mIsViewTreeObserverFirst ;
@@ -188,50 +191,26 @@ public void onActivityResumed(Activity activity) {
188191 mCurrentActivity = activity ;
189192 }
190193
191- public void initFingerPrintLock (final Context context , final Runnable onSuccessUnlockCallback ) {
192- mFingerprintIdentify = new FingerprintIdentify (context );
193- mFingerprintIdentify .setSupportAndroidL (true );
194- mFingerprintIdentify .init ();
195- if (mFingerprintIdentify .isFingerprintEnable ()) {
196- mFingerprintIdentify .startIdentify (5 , new BaseFingerprint .IdentifyListener () {
197- @ Override
198- public void onSucceed () {
199- L .d ("指纹识别成功" );
200- onSuccessUnlockCallback .run ();
201- }
202-
203- @ Override
204- public void onNotMatch (int availableTimes ) {
205- // 指纹不匹配,并返回可用剩余次数并自动继续验证
206- L .d ("指纹识别失败,还可尝试" + String .valueOf (availableTimes ) + "次" );
207- NotifyUtils .notifyFingerprint (context , Lang .getString (R .id .toast_fingerprint_not_match ));
208- }
194+ public void initFingerPrintLock (final Context context , OnFingerprintVerificationOKListener onSuccessUnlockCallback ) {
195+ mFingerprintIdentify = new XFingerprintIdentify (context )
196+ .startIdentify (new XFingerprintIdentify .IdentifyListener () {
197+ @ Override
198+ public void onSucceed (Cipher cipher ) {
199+ super .onSucceed (cipher );
200+ onSuccessUnlockCallback .onFingerprintVerificationOK (cipher );
201+ }
209202
210- @ Override
211- public void onFailed (boolean isDeviceLocked ) {
212- // 错误次数达到上限或者API报错停止了验证,自动结束指纹识别
213- // isDeviceLocked 表示指纹硬件是否被暂时锁定
214- L .d ("多次尝试错误,请确认指纹 isDeviceLocked" , isDeviceLocked );
215- NotifyUtils .notifyFingerprint (context , Lang .getString (R .id .toast_fingerprint_retry_ended ));
216- AlertDialog dialog = mFingerPrintAlertDialog ;
217- if (dialog != null ) {
218- if (dialog .isShowing ()) {
219- dialog .dismiss ();
203+ @ Override
204+ public void onFailed (FingerprintIdentifyFailInfo failInfo ) {
205+ super .onFailed (failInfo );
206+ AlertDialog dialog = mFingerPrintAlertDialog ;
207+ if (dialog != null ) {
208+ if (dialog .isShowing ()) {
209+ dialog .dismiss ();
210+ }
220211 }
221212 }
222- }
223-
224- @ Override
225- public void onStartFailedByDeviceLocked () {
226- // 第一次调用startIdentify失败,因为设备被暂时锁定
227- L .d ("系统限制,重启后必须验证密码后才能使用指纹验证" );
228- NotifyUtils .notifyFingerprint (context , Lang .getString (R .id .toast_fingerprint_unlock_reboot ));
229- }
230- });
231- } else {
232- L .d ("系统指纹功能未启用" );
233- NotifyUtils .notifyFingerprint (context , Lang .getString (R .id .toast_fingerprint_not_enable ));
234- }
213+ });
235214 }
236215
237216 public boolean showFingerPrintDialog (final Activity activity ) {
@@ -252,11 +231,16 @@ public boolean showFingerPrintDialog(final Activity activity) {
252231 mPwdActivityDontShowFlag = false ;
253232 mPwdActivityReShowDelayTimeMsec = 0 ;
254233 clickDigitPasswordWidget (activity );
255- initFingerPrintLock (context , () -> {
234+ initFingerPrintLock (context , (cipher ) -> {
256235 BlackListUtils .applyIfNeeded (context );
257- String pwd = Config .from (activity ).getPassword ();
258- if (TextUtils .isEmpty (pwd )) {
259- Toast .makeText (activity , Lang .getString (R .id .toast_password_not_set_alipay ), Toast .LENGTH_SHORT ).show ();
236+ String passwordEncrypted = Config .from (activity ).getPasswordEncrypted ();
237+ if (TextUtils .isEmpty (passwordEncrypted )) {
238+ Toaster .showShort (Lang .getString (R .id .toast_password_not_set_alipay ));
239+ return ;
240+ }
241+ String password = AESUtils .decrypt (cipher , passwordEncrypted );
242+ if (TextUtils .isEmpty (password )) {
243+ Toaster .showShort (Lang .getString (R .id .toast_fingerprint_password_dec_failed ));
260244 return ;
261245 }
262246
@@ -268,26 +252,26 @@ public boolean showFingerPrintDialog(final Activity activity) {
268252 }
269253 };
270254
271- if (!tryInputGenericPassword (activity , pwd )) {
255+ if (!tryInputGenericPassword (activity , password )) {
272256 boolean tryAgain = false ;
273257 try {
274- inputDigitPassword (activity , pwd );
258+ inputDigitPassword (activity , password );
275259 } catch (NullPointerException e ) {
276260 tryAgain = true ;
277261 } catch (Exception e ) {
278- Toast . makeText ( context , Lang .getString (R .id .toast_password_auto_enter_fail ), Toast . LENGTH_LONG ). show ( );
262+ Toaster . showLong ( Lang .getString (R .id .toast_password_auto_enter_fail ));
279263 L .e (e );
280264 }
281265 if (tryAgain ) {
282266 clickDigitPasswordWidget (activity );
283267 Task .onMain (1000 , ()-> {
284268 try {
285- inputDigitPassword (activity , pwd );
269+ inputDigitPassword (activity , password );
286270 } catch (NullPointerException e ) {
287- Toast . makeText ( context , Lang .getString (R .id .toast_password_auto_enter_fail ), Toast . LENGTH_LONG ). show ( );
271+ Toaster . showLong ( Lang .getString (R .id .toast_password_auto_enter_fail ));
288272 L .d ("inputDigitPassword NPE" , e );
289273 } catch (Exception e ) {
290- Toast . makeText ( context , Lang .getString (R .id .toast_password_auto_enter_fail ), Toast . LENGTH_LONG ). show ( );
274+ Toaster . showLong ( Lang .getString (R .id .toast_password_auto_enter_fail ));
291275 L .e (e );
292276 }
293277 onCompleteRunnable .run ();
@@ -297,15 +281,12 @@ public boolean showFingerPrintDialog(final Activity activity) {
297281 }
298282 onCompleteRunnable .run ();
299283 });
300- DialogFrameLayout alipayPayView = new AlipayPayView (context ).withOnCloseImageClickListener (v -> {
284+ DialogFrameLayout alipayPayView = new AlipayPayView (context ).withOnCloseImageClickListener (( target , v ) -> {
301285 mPwdActivityDontShowFlag = true ;
302- AlertDialog dialog1 = mFingerPrintAlertDialog ;
303- if (dialog1 != null ) {
304- dialog1 .dismiss ();
305- }
286+ target .getDialog ().dismiss ();
306287 activity .onBackPressed ();
307288 }).withOnDismissListener (v -> {
308- FingerprintIdentify fingerprintIdentify = mFingerprintIdentify ;
289+ XFingerprintIdentify fingerprintIdentify = mFingerprintIdentify ;
309290 if (fingerprintIdentify != null ) {
310291 fingerprintIdentify .cancelIdentify ();
311292 }
0 commit comments