package Ġcom . lol lip op . icon core . util Ċ Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . util . Sparse Array Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . core . util . set Ċ import Ġcom . lol lip op . icon core . throwable . Icon Pack Exception Ċ import Ġcom . lol lip op . icon core . ui . Icon View Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . ArrayList Ċ import Ġkotlin . math . min Ċ Ċ /** Ċ Ġ* Ġ@ author Ġlo l lip op Ċ Ġ* Ġ@ date Ġ 1 0 / 2 4 / 2 0 Ġ 2 0 : 3 8 Ċ Ġ* Ġicon çļĦ Group è¾ ħ åĬ© ç±» Ċ Ġ* Ġ å®ĥ ä¼ļ èĩªåĬ¨ æ£Ģ ç´¢ å½ĵåīį å®¹åĻ¨ ä¸ŃçļĦ æīĢæľī Icon View Ċ Ġ* Ġ çĦ¶åĲİ éĩįæĸ° æİĴåºı ï¼Į åı¯ä»¥ æĸ¹ä¾¿ çļĦ è®°å½ķ ãĢģ ä½¿çĶ¨ ãĢģ ä¿®æĶ¹ Ċ Ġ*/ Ċ class ĠIcon Group ( private Ġval Ġview Group : ĠViewGroup ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġicon Index List Ġ= ĠArrayList < Int >() ĊĊĠĠĠ Ġprivate Ġval Ġicon Shown Map Ġ= ĠSparse Array < Int >() ĊĊĠĠĠ Ġprivate Ġval Ġrandom : ĠRandom Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠRandom () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġall Icon Count Ġ= Ġ 0 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå½ĵåīį å·² æľīçļĦ icon View æķ°éĩı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġicon Count : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġicon Index List . size ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġnotify Icon View Change () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠéĢļè¿ĩ éĩįæĸ° æİĴåºı åĲİçļĦ ä¸ĭ æłĩ èİ·åıĸ icon View ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Child At ( index : ĠInt ): ĠIcon View Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ< Ġ 0 Ġ|| Ġindex Ġ>= Ġicon Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIcon Pack Exception (" Index OutOfBounds ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġview Group . getChild At ( icon Index List [ index ]) Ġas ĠIcon View ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå½ĵ å®¹åĻ¨ ä¸ŃçļĦ View æĪĸèĢħ å¸ĥå±Ģ åıĳçĶŁ åıĺåĮĸ æĹ¶ ï¼Į ä½¿çĶ¨ æŃ¤ æĸ¹æ³ķ æ£Ģ ç´¢ å¹¶ æķ´ çĲĨ æĸ°çļĦ icon View ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnotify Icon View Change () Ġ{ ĊĠĠĠĠĠĠĠ Ġicon Index List . clear () ĊĠĠĠĠĠĠĠ Ġval Ġchild Count Ġ= Ġview Group . child Count ĊĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġchild Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġview Group . getChild At ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child Ġis ĠIcon View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Index List . add ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ èĩªåĬ¨ å¡« åħħ ĊĠĠĠĠ Ġ* Ġ å®ĥ ä¼ļ æł¹æį® ä¼łåħ¥ çļĦ æĢ» icon æķ°éĩı èĩªåĬ¨ è°ĥçĶ¨ å¡« åħħ çļĦ åĽŀè°ĥ åĩ½æķ° æĿ¥ ĊĠĠĠĠ Ġ* Ġ å¡« åħħ æ¯ıä¸ª icon View ï¼Į å¦Ĥæŀľ icon ä¸į è¶³ ï¼Į éĤ£ä¹Ī å°Ĩ ä¼ļ æĬĬ icon View è®¾ç½® ä¸ºç©º ĊĠĠĠĠ Ġ* Ġ å¹¶ä¸Ķ ä¼ļ å¯¹ icon è¿Ľè¡Į åİ» éĩįå¤į ï¼Į ä¿Ŀè¯ģ è®¾ç½® çļĦ icon æ²¡æľī éĩįå¤į çļĦ ĊĠĠĠĠ Ġ* Ġå¦Ĥæŀľ icon æķ°éĩı å¤§äºİ æĿ¥ View æķ°éĩı ï¼Į å®ĥ ä¼ļ åľ¨ åħ¶ä¸Ń éļıæľº æĳ ĺ åıĸ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġauto Fit ( all Count : ĠInt , Ġfit : Ġ( icon : ĠIcon View , Ġindex : ĠInt ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġall Icon Count Ġ= Ġall Count ĊĠĠĠĠĠĠĠ Ġicon Shown Map . clear () ĊĠĠĠĠĠĠĠ Ġif Ġ( icon Count Ġ< Ġall Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġ( min ( icon Count , Ġall Count ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrandom Index Ġ= Ġrandom Index ( all Count , Ġicon Shown Map , Ġrandom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġget Child At ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . icon Index Ġ= Ġrandom Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfit ( child , Ġrandom Index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġicon Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġget Child At ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ< Ġall Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfit ( child , Ġindex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . icon Index Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Shown Map [ index ] Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . load Icon ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . icon Index Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġä¿®æĶ¹ æŁĲä¸ª icon View çļĦ icon ĊĠĠĠĠ Ġ* Ġ å®ĥ ä»į çĦ¶ ç¬¦åĲĪ auto Fit çļĦ åħ¨éĥ¨ æĿ¡ä»¶ ï¼Į ä½Ĩæĺ¯ ä»ħ ä»ħ éĴĪå¯¹ å½ĵåīį icon åģļ ä¿®æĶ¹ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġchange Icon ( view : ĠIcon View , Ġfit : Ġ( icon : ĠIcon View , Ġindex : ĠInt ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( all Icon Count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġrandom Index Ġ= Ġrandom Index ( all Icon Count , Ġicon Shown Map , Ġrandom ) ĊĠĠĠĠĠĠĠ Ġfit ( view , Ġrandom Index ) ĊĠĠĠĠĠĠĠ Ġicon Shown Map [ view . icon Index ] Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġview . icon Index Ġ= Ġrandom Index ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éģįåİĨ å½ĵåīį çļĦæīĢæľī icon View ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠforEach ( run : Ġ( icon : ĠIcon View ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġicon Index List . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun ( getChild At ( index )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrandom Index ( max : ĠInt , Ġmap : ĠSparse Array < Int >, Ġrandom : ĠRandom ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( max Ġ> Ġicon Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Int Ġ= Ġrandom . nextInt ( max ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( map . get ( nextInt , Ġ 0 ) Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap . put ( nextInt , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnext Int ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġä¸º æīĢæľīçļĦ icon View ç»Łä¸Ģ è®¾ç½® èĥĮæĻ¯ ĊĠĠĠĠ Ġ* Ġ ä½Ĩæĺ¯ éľĢè¦ģ æ³¨æĦı çļĦæĺ¯ ï¼Į æ¯ıä¸ª icon View çļĦ èĥĮæĻ¯ æĺ¯ çĭ¬ç«ĭ çļĦ å®ŀä¾ĭ ĊĠĠĠĠ Ġ* Ġ@ param Ġmutate Ġå½ĵ è®¾ç½®ä¸º true æĹ¶ ï¼Į ĊĠĠĠĠ Ġ* Ġè¡¨ç¤º æ¯ıä¸ª view çļĦ èĥĮæĻ¯ æĺ¯ çĭ¬ç«ĭ çļĦ ï¼Į é»ĺè®¤ä¸º true ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset All Background ( drawable : ĠDrawable , Ġmutate : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġicon Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġget Child At ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child Ġis ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . background Ġ= Ġif Ġ( mutate ) Ġ{ drawable . mutate ()} Ġelse Ġ{ drawable } ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġä¸º æ¯ıä¸ª View è®¾ç½® èĥĮæĻ¯ é¢ľèī² ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset All Background ( color : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġicon Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġget Child At ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child Ġis ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . set BackgroundColor ( color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }