package Ġprototype z . github . io . sq . demo . processes . login Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġio . reactivex . Observable Transformer Ċ import Ġprototype z . github . io . sq . Activity Result Ċ import Ġprototype z . github . io . sq . Sq Ċ import Ġprototype z . github . io . sq . activity . Sq Activity Ċ import Ġprototype z . github . io . sq . demo . processes . login . steps . Login By Pwd Fragment Ċ import Ġprototype z . github . io . sq . demo . processes . login . steps . Login By Sms Fragment Ċ import Ġprototype z . github . io . sq . demo . util . Login Info Ċ import Ġprototype z . github . io . sq . util . Intent Builder Ċ Ċ /** Ċ Ġ* Ġ çĻ» éĻĨ æµģç¨ĭ Ċ Ġ*/ Ċ class ĠLogin Activity Ġ: ĠS q Activity () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlogin By Pwd Fragment : ĠLogin By Pwd Fragment ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlogin By Sms Fragment : ĠLogin By Sms Fragment ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġlogin By Pwd Fragment Ġ= Ġfind OrCreate Fragment ( Login By Pwd Fragment :: class . java ) ĊĠĠĠĠĠĠĠ Ġlogin By Sms Fragment Ġ= Ġfind OrCreate Fragment ( Login By Sms Fragment :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( savedInstanceState Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpush ( login By Pwd Fragment ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġæµ ģ ç¨ĭ æİ§åĪ¶ éĢ»è¾ĳ ĊĊĠĠĠĠĠĠĠ Ġ// ĠçĶ¨æĪ· åĲį å¯Ĩçłģ éªĮè¯ģ ĊĠĠĠĠĠĠĠ Ġlogin By Pwd Fragment . login By Pwd Callback Ġ= Ġ{ Ġneed Sms Verify , Ġuser Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( need Sms Verify ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è¿Ľåħ¥ çŁŃ ä¿¡ éªĮè¯ģ æµģç¨ĭ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin By Sms Fragment . set Params ( user ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpush ( login By Sms Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ çĽ´æİ¥ çĻ»å½ķ æĪĲåĬŁ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogin Info . current Login User Ġ= Ġuser ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS q . set Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Login Activity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity . RESULT _ OK , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent Builder . newInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putExtra (" user ", Ġuser ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠçĶ¨æĪ· åĲį å¯Ĩçłģ éªĮè¯ģ Ġ- Ġ çŁŃ ä¿¡ éªĮè¯ģ ĊĠĠĠĠĠĠĠ Ġlogin By Sms Fragment . login By Sms Callback Ġ= Ġ Ġ{ Ġuser Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogin Info . current Login User Ġ= Ġuser ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS q . set Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Login Activity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity . RESULT _ OK , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent Builder . newInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putExtra (" user ", Ġuser ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĊĠĠĠĠĠĠĠ Ġ// ĠçĶ¨æĪ· åĲį å¯Ĩçłģ éªĮè¯ģ Ġ- Ġ åŃĲ æµģç¨ĭ ( çĽ´æİ¥ æ³¨åĨĮ æĪĲåĬŁ ) ĊĠĠĠĠĠĠĠ Ġlogin By Pwd Fragment . register Callback Ġ= Ġ{ Ġuser Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æ³¨åĨĮ æĪĲåĬŁ ä¹Ł è§Ĩ ä¸º çĻ»å½ķ æĪĲåĬŁ çļĦ ä¸Ģç§į ï¼Į éľĢè¦ģ éĢļçŁ¥ æµģç¨ĭ åıĳ èµ· èĢħ çĻ»å½ķ æĪĲåĬŁ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogin Info . current Login User Ġ= Ġuser ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS q . set Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Login Activity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity . RESULT _ OK , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent Builder . newInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putExtra (" user ", Ġuser ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREQUEST _ LOGIN Ġ= Ġ 4 0 1 ĊĊĠĠĠĠĠĠĠ Ġ// Ġé»ĺè®¤ æĥħåĨµ ï¼Į å¦Ĥæŀľ çĽ¸åĲĮ é¡µéĿ¢ ä¸Ń åıªæľī ä¸Ģ å¤Ħ æĵįä½ľ éľĢè¦ģ ç¡® ä¿Ŀ çĻ»å½ķ åı¯çĶ¨ ĊĠĠĠĠĠĠĠ Ġfun Ġensure Login WithContext ( activity : ĠAppCompatActivity ): ĠObservable Transformer < Bundle , ĠBundle > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġensure Login WithContext ( activity , ĠREQUEST _ LOGIN ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ å¤įæĿĤ æĥħåĨµ ï¼Į å¦Ĥæŀľ çĽ¸åĲĮ é¡µéĿ¢ ä¸Ń æľī å¤ļ å¤Ħ æĵįä½ľ éľĢè¦ģ ç¡® ä¿Ŀ çĻ»å½ķ åı¯çĶ¨ ï¼Į éĤ£ä¹Ī éľĢè¦ģ éĢļè¿ĩ Ġrequest Code Ġ åĮº åĪĨ è¯·æ±Ĥ çĶ± åĵª ä¸ª æĵįä½ľ åıĳ èµ· ĊĠĠĠĠĠĠĠ Ġfun Ġensure Login WithContext ( activity : ĠAppCompatActivity , Ġrequest Code : ĠInt ): ĠObservable Transformer < Bundle , ĠBundle > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠObservable Transformer Ġ{ Ġupstream Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupstream . subscribe Ġ{ Ġcontext Data Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Login Info . is Login ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS q . insert Activity Result ( activity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity . RESULT _ OK , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent Builder . newInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putExtra (" user ", ĠLogin Info . current Login User ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (), Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS q . startActivity For Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Intent For Login ( activity ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS q . obtain Activity Result ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġar Ġ-> Ġar . request Code Ġ== Ġrequest Code Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġar Ġ-> Ġar . result Code Ġ== ĠActivity . RESULT _ OK Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . request Context Data Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ ç¡® ä¿Ŀ å·² çĻ»å½ķ ï¼Į ä¸įéľĢè¦ģ ä¿ĿåŃĺ æµģç¨ĭ è§¦åıĳ çĤ¹ çļĦ ä¸Ĭä¸ĭ æĸĩ çļĦ ç®Ģåįķ æĥħåĨµ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġensure Login ( activity : ĠAppCompatActivity ): ĠObservable Transformer < T , ĠActivity Result > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠObservable Transformer Ġ{ Ġupstream Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupstream . subscribe Ġ{ Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Login Info . is Login ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS q . insert Activity Result ( activity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ LOGIN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity . RESULT _ OK , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent Builder . newInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putExtra (" user ", ĠLogin Info . current Login User ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS q . startActivity For Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Intent For Login ( activity ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ LOGIN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS q . obtain Activity Result ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġar Ġ-> Ġar . request Code Ġ== ĠREQUEST _ LOGIN Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġar Ġ-> Ġar . result Code Ġ== ĠActivity . RESULT _ OK Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġmake Intent For Login ( context : ĠContext ): ĠIntent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠIntent ( context , ĠLogin Activity :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊĊ