package Ġcom . github . ih sg . demo . util Ċ Ċ import Ġandroid . text . TextUtils Ċ import Ġcom . github . ih sg . demo . util . Security Util . encrypt Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġh sg Ġon Ġ 1 4 / 1 0 / 2 0 1 7 . Ċ Ġ*/ Ċ open Ġclass ĠPattern Helper Ġ{ ĊĠĠĠ Ġvar Ġmessage : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġprivate Ġvar Ġstorage Pwd : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġtmp Pwd : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġtimes Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġis Finish Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġvar Ġis Ok Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġfun Ġvalidate For Setting ( hit Index List : ĠList < Int > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Finish Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġis Ok Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( hit Index List Ġ== Ġnull Ġ|| Ġhit Index List . size Ġ< ĠMAX _ SIZE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtmp Pwd Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġsize ErrorMsg ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// 1 . Ġdraw Ġfirst Ġtime ĊĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . isEmpty ( tmp Pwd )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtmp Pwd Ġ= Ġconvert 2 String ( hit Index List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġre Draw Msg ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Ok Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// 2 . Ġdraw Ġsecond Ġtimes ĊĠĠĠĠĠĠĠ Ġif Ġ( tmp Pwd Ġ== Ġconvert 2 String ( hit Index List )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġsetting Success Msg ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave To Storage ( tmp Pwd ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Ok Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Finish Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtmp Pwd Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġdiff Pre ErrorMsg ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġvalidate For Checking ( hit Index List : ĠList < Int > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Ok Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( hit Index List Ġ== Ġnull Ġ|| Ġhit Index List . size Ġ< ĠMAX _ SIZE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimes ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Finish Ġ= Ġtimes Ġ>= ĠMAX _ SIZE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġpwd ErrorMsg ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstorage Pwd Ġ= Ġfrom Storage ĊĠĠĠĠĠĠĠ Ġif Ġ(! TextUtils . isEmpty ( storage Pwd ) Ġ&& Ġstorage Pwd Ġ== Ġconvert 2 String ( hit Index List )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġchecking Success Msg ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Ok Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Finish Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimes ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Finish Ġ= Ġtimes Ġ>= ĠMAX _ SIZE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġpwd ErrorMsg ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġremain Times : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( times Ġ< Ġ 5 ) ĠMAX _ TIMES Ġ- Ġtimes Ġelse Ġ 0 ĊĠĠĠ Ġprivate Ġval Ġre Draw Msg : ĠString Ġ= Ġ" è¯· åĨį æ¬¡ ç»ĺ åĪ¶ è§£ éĶģ åĽ¾ æ¡Ī " ĊĠĠĠ Ġprivate Ġval Ġsetting Success Msg : ĠString Ġ= Ġ" æīĭ åĬ¿ è§£ éĶģ åĽ¾ æ¡Ī è®¾ç½® æĪĲåĬŁ ï¼ģ " ĊĠĠĠ Ġprivate Ġval Ġchecking Success Msg : ĠString Ġ= Ġ" è§£ éĶģ æĪĲåĬŁ ï¼ģ " ĊĠĠĠ Ġprivate Ġval Ġsize ErrorMsg : ĠString Ġ= ĠString . format (" èĩ³ å°ĳ è¿ŀæİ¥ ä¸ª % d çĤ¹ ï¼Į è¯· éĩįæĸ° ç»ĺ åĪ¶ ", ĠMAX _ SIZE ) ĊĠĠĠ Ġprivate Ġval Ġdiff Pre ErrorMsg : ĠString Ġ= Ġ" ä¸İ ä¸Ĭ æ¬¡ ç»ĺ åĪ¶ ä¸į ä¸Ģèĩ´ ï¼Į è¯· éĩįæĸ° ç»ĺ åĪ¶ " ĊĠĠĠ Ġprivate Ġval Ġpwd ErrorMsg : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠString . format (" å¯Ĩçłģ éĶĻè¯¯ ï¼Į è¿ĺ åī © % d æ¬¡ æľº ä¼ļ ", Ġremain Times ) ĊĊĠĠĠ Ġprivate Ġfun Ġconvert 2 String ( hit Index List : ĠList < Int >): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġhit Index List . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave To Storage ( gesture Pwd : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġencrypt Pwd Ġ= Ġencrypt ( gesture Pwd !! ) ĊĠĠĠĠĠĠĠ ĠSharedPreferences Util . save String ( GEST URE _ PWD _ KEY , Ġencrypt Pwd ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġfrom Storage : ĠString ? Ġ= ĠSharedPreferences Util . getString ( GEST URE _ PWD _ KEY )?. let Ġ{ ĠSecurity Util . decrypt ( it ) Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMAX _ SIZE Ġ= Ġ 4 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMAX _ TIMES Ġ= Ġ 5 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠG EST URE _ PWD _ KEY Ġ= Ġ" gesture _ pwd _ key " ĊĠĠĠ Ġ} Ċ }