From f125bf24ec8846e69aab089ef960555054d3bdb7 Mon Sep 17 00:00:00 2001 From: Arne Jans Date: Wed, 14 Dec 2011 01:54:42 +0100 Subject: [PATCH 01/16] Alpha version of dualpane-layout with actionbar and fixed editing of readonly-tasks --- actionbarsherlock/library/.classpath | 8 + actionbarsherlock/library/.project | 33 ++ .../library/bin/actionbarsherlock.jar | Bin 0 -> 285923 bytes ...bs__ab_stacked_transparent_dark_holo.9.png | Bin 0 -> 214 bytes ...s__ab_stacked_transparent_light_holo.9.png | Bin 0 -> 212 bytes .../abs__cab_background_holo_dark.9.png | Bin 0 -> 2877 bytes .../abs__cab_background_holo_light.9.png | Bin 0 -> 2990 bytes .../abs__cab_ic_close_focused_holo.png | Bin 0 -> 1039 bytes .../abs__cab_ic_close_normal_holo.png | Bin 0 -> 749 bytes .../abs__cab_ic_close_pressed_holo.png | Bin 0 -> 1129 bytes .../abs__ic_ab_back_holo_dark.png | Bin 0 -> 799 bytes .../abs__ic_ab_back_holo_light.png | Bin 0 -> 799 bytes .../abs__list_focused_holo.9.png | Bin 0 -> 231 bytes .../abs__list_longpressed_holo.9.png | Bin 0 -> 198 bytes .../abs__list_pressed_holo_dark.9.png | Bin 0 -> 198 bytes .../abs__list_pressed_holo_light.9.png | Bin 0 -> 198 bytes ...bs__list_selector_disabled_holo_dark.9.png | Bin 0 -> 203 bytes ...s__list_selector_disabled_holo_light.9.png | Bin 0 -> 204 bytes .../abs__spinner_default_holo_dark.9.png | Bin 0 -> 309 bytes .../abs__spinner_default_holo_light.9.png | Bin 0 -> 309 bytes .../abs__spinner_disabled_holo_dark.9.png | Bin 0 -> 314 bytes .../abs__spinner_disabled_holo_light.9.png | Bin 0 -> 314 bytes .../abs__spinner_focused_holo_dark.9.png | Bin 0 -> 329 bytes .../abs__spinner_focused_holo_light.9.png | Bin 0 -> 476 bytes .../abs__spinner_pressed_holo_dark.9.png | Bin 0 -> 462 bytes .../abs__spinner_pressed_holo_light.9.png | Bin 0 -> 493 bytes .../abs__tab_selected_focused_holo.9.png | Bin 0 -> 225 bytes .../abs__tab_selected_holo.9.png | Bin 0 -> 160 bytes ...s__tab_selected_pressed_focused_holo.9.png | Bin 0 -> 525 bytes .../abs__tab_selected_pressed_holo.9.png | Bin 0 -> 254 bytes .../abs__tab_unselected_focused_holo.9.png | Bin 0 -> 224 bytes .../abs__tab_unselected_holo.9.png | Bin 0 -> 150 bytes ..._tab_unselected_pressed_focused_holo.9.png | Bin 0 -> 540 bytes .../abs__tab_unselected_pressed_holo.9.png | Bin 0 -> 255 bytes ...bs__ab_stacked_transparent_dark_holo.9.png | Bin 0 -> 199 bytes ...s__ab_stacked_transparent_light_holo.9.png | Bin 0 -> 198 bytes .../abs__cab_background_holo_dark.9.png | Bin 0 -> 1764 bytes .../abs__cab_background_holo_light.9.png | Bin 0 -> 1813 bytes .../abs__cab_ic_close_focused_holo.png | Bin 0 -> 732 bytes .../abs__cab_ic_close_normal_holo.png | Bin 0 -> 520 bytes .../abs__cab_ic_close_pressed_holo.png | Bin 0 -> 803 bytes .../abs__ic_ab_back_holo_dark.png | Bin 0 -> 607 bytes .../abs__ic_ab_back_holo_light.png | Bin 0 -> 607 bytes .../abs__list_focused_holo.9.png | Bin 0 -> 232 bytes .../abs__list_longpressed_holo.9.png | Bin 0 -> 189 bytes .../abs__list_pressed_holo_dark.9.png | Bin 0 -> 189 bytes .../abs__list_pressed_holo_light.9.png | Bin 0 -> 192 bytes ...bs__list_selector_disabled_holo_dark.9.png | Bin 0 -> 190 bytes ...s__list_selector_disabled_holo_light.9.png | Bin 0 -> 191 bytes .../abs__spinner_default_holo_dark.9.png | Bin 0 -> 280 bytes .../abs__spinner_default_holo_light.9.png | Bin 0 -> 278 bytes .../abs__spinner_disabled_holo_dark.9.png | Bin 0 -> 300 bytes .../abs__spinner_disabled_holo_light.9.png | Bin 0 -> 300 bytes .../abs__spinner_focused_holo_dark.9.png | Bin 0 -> 328 bytes .../abs__spinner_focused_holo_light.9.png | Bin 0 -> 479 bytes .../abs__spinner_pressed_holo_dark.9.png | Bin 0 -> 386 bytes .../abs__spinner_pressed_holo_light.9.png | Bin 0 -> 448 bytes .../abs__tab_selected_focused_holo.9.png | Bin 0 -> 210 bytes .../abs__tab_selected_holo.9.png | Bin 0 -> 157 bytes ...s__tab_selected_pressed_focused_holo.9.png | Bin 0 -> 442 bytes .../abs__tab_selected_pressed_holo.9.png | Bin 0 -> 217 bytes .../abs__tab_unselected_focused_holo.9.png | Bin 0 -> 219 bytes .../abs__tab_unselected_holo.9.png | Bin 0 -> 148 bytes ..._tab_unselected_pressed_focused_holo.9.png | Bin 0 -> 452 bytes .../abs__tab_unselected_pressed_holo.9.png | Bin 0 -> 220 bytes .../abs__action_item_divider.9.png | Bin 0 -> 132 bytes .../abs__action_item_divider.9.png | Bin 0 -> 132 bytes actionbarsherlock/samples/demos/.classpath | 7 + actionbarsherlock/samples/demos/.project | 33 ++ astrid/AndroidManifest.xml | 6 +- astrid/libs/crittercism1.01.jar | Bin 0 -> 148336 bytes .../todoroo/astrid/actfm/TagViewActivity.java | 87 ++--- .../astrid/core/CustomFilterActivity.java | 3 +- .../astrid/gtasks/GtasksListActivity.java | 24 +- .../reminders/NotificationActivity.java | 38 +-- astrid/project.properties | 7 +- .../activity/DraggableTaskListActivity.java | 10 +- .../astrid/activity/FilterListActivity.java | 64 +++- .../astrid/activity/ShareLinkActivity.java | 6 +- .../astrid/activity/TaskListActivity.java | 309 +++++++++++------- .../todoroo/astrid/adapter/TaskAdapter.java | 91 +++--- .../helper/TaskAdapterAddOnManager.java | 12 +- .../astrid/welcome/SplashScreenLauncher.java | 4 +- 83 files changed, 459 insertions(+), 283 deletions(-) create mode 100644 actionbarsherlock/library/.classpath create mode 100644 actionbarsherlock/library/.project create mode 100644 actionbarsherlock/library/bin/actionbarsherlock.jar create mode 100644 actionbarsherlock/library/bin/res/drawable-hdpi/abs__ab_stacked_transparent_dark_holo.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-hdpi/abs__ab_stacked_transparent_light_holo.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-hdpi/abs__cab_background_holo_dark.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-hdpi/abs__cab_background_holo_light.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-hdpi/abs__cab_ic_close_focused_holo.png create mode 100644 actionbarsherlock/library/bin/res/drawable-hdpi/abs__cab_ic_close_normal_holo.png create mode 100644 actionbarsherlock/library/bin/res/drawable-hdpi/abs__cab_ic_close_pressed_holo.png create mode 100644 actionbarsherlock/library/bin/res/drawable-hdpi/abs__ic_ab_back_holo_dark.png create mode 100644 actionbarsherlock/library/bin/res/drawable-hdpi/abs__ic_ab_back_holo_light.png create mode 100644 actionbarsherlock/library/bin/res/drawable-hdpi/abs__list_focused_holo.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-hdpi/abs__list_longpressed_holo.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-hdpi/abs__list_pressed_holo_dark.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-hdpi/abs__list_pressed_holo_light.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-hdpi/abs__list_selector_disabled_holo_dark.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-hdpi/abs__list_selector_disabled_holo_light.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-hdpi/abs__spinner_default_holo_dark.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-hdpi/abs__spinner_default_holo_light.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-hdpi/abs__spinner_disabled_holo_dark.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-hdpi/abs__spinner_disabled_holo_light.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-hdpi/abs__spinner_focused_holo_dark.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-hdpi/abs__spinner_focused_holo_light.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-hdpi/abs__spinner_pressed_holo_dark.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-hdpi/abs__spinner_pressed_holo_light.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-hdpi/abs__tab_selected_focused_holo.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-hdpi/abs__tab_selected_holo.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-hdpi/abs__tab_selected_pressed_focused_holo.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-hdpi/abs__tab_selected_pressed_holo.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-hdpi/abs__tab_unselected_focused_holo.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-hdpi/abs__tab_unselected_holo.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-hdpi/abs__tab_unselected_pressed_focused_holo.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-hdpi/abs__tab_unselected_pressed_holo.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-mdpi/abs__ab_stacked_transparent_dark_holo.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-mdpi/abs__ab_stacked_transparent_light_holo.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-mdpi/abs__cab_background_holo_dark.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-mdpi/abs__cab_background_holo_light.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-mdpi/abs__cab_ic_close_focused_holo.png create mode 100644 actionbarsherlock/library/bin/res/drawable-mdpi/abs__cab_ic_close_normal_holo.png create mode 100644 actionbarsherlock/library/bin/res/drawable-mdpi/abs__cab_ic_close_pressed_holo.png create mode 100644 actionbarsherlock/library/bin/res/drawable-mdpi/abs__ic_ab_back_holo_dark.png create mode 100644 actionbarsherlock/library/bin/res/drawable-mdpi/abs__ic_ab_back_holo_light.png create mode 100644 actionbarsherlock/library/bin/res/drawable-mdpi/abs__list_focused_holo.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-mdpi/abs__list_longpressed_holo.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-mdpi/abs__list_pressed_holo_dark.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-mdpi/abs__list_pressed_holo_light.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-mdpi/abs__list_selector_disabled_holo_dark.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-mdpi/abs__list_selector_disabled_holo_light.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-mdpi/abs__spinner_default_holo_dark.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-mdpi/abs__spinner_default_holo_light.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-mdpi/abs__spinner_disabled_holo_dark.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-mdpi/abs__spinner_disabled_holo_light.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-mdpi/abs__spinner_focused_holo_dark.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-mdpi/abs__spinner_focused_holo_light.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-mdpi/abs__spinner_pressed_holo_dark.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-mdpi/abs__spinner_pressed_holo_light.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-mdpi/abs__tab_selected_focused_holo.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-mdpi/abs__tab_selected_holo.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-mdpi/abs__tab_selected_pressed_focused_holo.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-mdpi/abs__tab_selected_pressed_holo.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-mdpi/abs__tab_unselected_focused_holo.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-mdpi/abs__tab_unselected_holo.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-mdpi/abs__tab_unselected_pressed_focused_holo.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-mdpi/abs__tab_unselected_pressed_holo.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-nodpi-v11/abs__action_item_divider.9.png create mode 100644 actionbarsherlock/library/bin/res/drawable-nodpi/abs__action_item_divider.9.png create mode 100644 actionbarsherlock/samples/demos/.classpath create mode 100644 actionbarsherlock/samples/demos/.project create mode 100644 astrid/libs/crittercism1.01.jar diff --git a/actionbarsherlock/library/.classpath b/actionbarsherlock/library/.classpath new file mode 100644 index 000000000..a4763d1ee --- /dev/null +++ b/actionbarsherlock/library/.classpath @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/actionbarsherlock/library/.project b/actionbarsherlock/library/.project new file mode 100644 index 000000000..be2b2c053 --- /dev/null +++ b/actionbarsherlock/library/.project @@ -0,0 +1,33 @@ + + + actionbarsherlock + + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + diff --git a/actionbarsherlock/library/bin/actionbarsherlock.jar b/actionbarsherlock/library/bin/actionbarsherlock.jar new file mode 100644 index 0000000000000000000000000000000000000000..3dd76be0e13d55b7faada68095ad489ad1fd2ead GIT binary patch literal 285923 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

`m@FzuuDfUt;5AUK0j^b-+FF?E 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 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-hdpi/abs__cab_background_holo_light.9.png b/actionbarsherlock/library/bin/res/drawable-hdpi/abs__cab_background_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..db78cc217a110e9557d3dd6813620e6152bca6b2 GIT binary patch literal 2990 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 CI6dV6 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-hdpi/abs__cab_ic_close_focused_holo.png b/actionbarsherlock/library/bin/res/drawable-hdpi/abs__cab_ic_close_focused_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..abcc8eb1e11eb40d8e54d083e7deb6e1fcfac724 GIT binary patch literal 1039 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBgK_V2lay32_B-XPy~FGzo$9nAy$1 z@GU6`@(X5QWMPvsG}ac8;gS<)Qa9pr?f8-;p|#{y08iV$|6fy+!d= zm1|9ybv++`&yZZRTFJoUL6-ZE>nbH*fReJ4IU;y4;$t=6rK5htrMO zs=wE-Ta+m(s3YBV&-zTK&AILdc6m+Nvcn(jfbsm!)5S5w{udFf11axr~j$w)QpI<&{pTG zf?>hG4^Q~>Bj9*MEpx;DO$iOhIFi>a^E6*HC;ymS_QA-`YEg!a+{evtWoJ3osON87 zCn0j8N#H%(ie5TP2C9_IcBOpnm&==+b>ZmxwYr2>7(lt z!&RQ|C`wMA{BmpSpKWt=AKbZd^Y63o7Vpp2seZd?VG;6E`AL6l#n(MozRp|X<9X(g ze}=KwF6krlUuFCC?UbAHL)~GF6tXJh<%qrdKjGxi)uaRh+Fjnl|t3zI~;a-)V2Eu-|Ym z*Z&=FI;;Glzq20Ke||Zkx8lLGQ$_Mi8`i)2AN>3IS5{{ED4C#^|Nnt0kHOQ`&t;uc GLK6Uc!saIc literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-hdpi/abs__cab_ic_close_normal_holo.png b/actionbarsherlock/library/bin/res/drawable-hdpi/abs__cab_ic_close_normal_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..f0df90d8faadc02ec898f15ea4ebba8fb3cf4485 GIT binary patch literal 749 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBgK_VB`+)32_B-XPy~Fpb$9C5iSV~ zj>wWAzhDNjtdG{cPgT-LK)ceR>=0$Q55^E7t6U(_Id=(m06T%YJwb2E$i zcRpHjzy8I9Gme+puJ)U{Kc*g17u3G;WxZ`0!QsB5HLSIhwksTc62EcZ!THP9&O5*0ywO!fv+V{GKmRfNr4sz#=O>eRS>O+$ zU$SDR9d~Vg-dM|@W`DseW^46XK-fL%r^H{+KO3~~%$*l{@jA!r!aByf*hylqUfud^ zenfQ7Ug3Z9c5U{V^L?SmSJm&mIZ;ivztXqO*Z3ECX1kNmj(>1z)2^)5n9o_EKXKcmn*94`%zaEk?7H_!-no0iMf=I#-xE)GGryNt)ED}-{L$Qf v`wnv4Ke+ARVw=+Cs=K$|Js9s1e@(xrQt^ZJQnzcsh+^<`^>bP0l+XkKxVBuH literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-hdpi/abs__cab_ic_close_pressed_holo.png b/actionbarsherlock/library/bin/res/drawable-hdpi/abs__cab_ic_close_pressed_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..e689d42c74e43facf8098ef5d3a6e0fa8934ef65 GIT binary patch literal 1129 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBgK_VC)R=32_B-|C0#ryK<^bK+W}RW$e?M;7C55Gzlghf{g{#-&Z)q#nnlS5nKKz~`xn{MJfyaZaweAmoWN%pR zcK>IN=|)cdyLp=z-}zazb)n0x`D)HL=W;mRn60|`_xh~$%hxS*S(KR}DySpfbh*BpK!NtdLTU?h1X>ygz1qqpa zk(w2>bd|_bW!IHn>`(R6)5=b6DlZp~t4NmnHfQedTFdQ!-W_{dwQl)3k)!KozB;k{ z@`1-wKbGXA-S|AyVQT8Dm3FUE_ZK`WR&oBA>1(Yl+g=p^?4j}f2Y-J=1^nRRJ-w!@ zV1 zXO}h8{Z;N9ui4MMUXr=_NX?&?KNk!>J3bQqy;x3?b%j)NvP_$uv3=vJ_(CpWNz2Jc ze0|Rw*mv*oFYMEnjNjK)QR`gi=POcR^i2HSPuEAmLh+sNGyX(e`jPr1eA0(om1~Xm zU(5DNV%q0FKTv1q!9P_sXE*k$uzj9==HHx}mVUJaBU-huwqHWP^f6-|eYaSN^!UV~^3t zU4^}8eP-A0&3th8`^ry$5By56E;6^!{-J+&z2L8z(d{`dd)j|b`@N##uIu^wt^RT4 YTI&mdKI;Vst01p9b`~Uy| literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-hdpi/abs__ic_ab_back_holo_dark.png b/actionbarsherlock/library/bin/res/drawable-hdpi/abs__ic_ab_back_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..f54eb18716a974ad9a437e471d881661847ec557 GIT binary patch literal 799 zcmeAS@N?(olHy`uVBq!ia0vp^DnJ~zOda63Y3x{ zzhDLiCJQGAdrL-}-mcCGvW@k%bv13ioOvw`tvMV)9WqAkR$|pnQ7O$O{BG)1)&_y> z`O@K%+y$Ae${y}&ENMl&Qeh?{f@MiMj`CU+LdBKkA#4HH4$Nj?V65|WaSZV|{x;-h z&>;tbGcFTC7eyvD_#9Ah+7bBi*l)3;%wPZiKRWm5rkaAV`KEuTta_XC{mYrYR8@}& z5A+!s-e_JCKmU+_f5DrXAy&4tPjR&Qh|HLMK5g?kCpH%MO^Fw$TIQcT|5=8yHAx|` zZK+X>KD$d)pUo7#Fo`~~=#Q$4!ed$07tFiFCB|{LTh72^Xhw>Sa`e? zwuAFRLK6%%Z$x6|ZT?bdk&1A9PU7jnlXXn*o1EFIw@4j@nf4}46 z%ldf=^P?LH-VT+&-gLFut^R*pZ&JcNkv+VcRdbDM4A}JD_>SfM_`%W?Yx}Cv?z{SA z@fuV8jSn3ju2t|+`S^I%?;GtOW^bLLaB%-2YuPTvztcXIg0cdGr>mdKI;Vst0GPk9 A{{R30 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-hdpi/abs__ic_ab_back_holo_light.png b/actionbarsherlock/library/bin/res/drawable-hdpi/abs__ic_ab_back_holo_light.png new file mode 100644 index 0000000000000000000000000000000000000000..96d8887317759f7176737265f398ba1427cfeb1a GIT binary patch literal 799 zcmeAS@N?(olHy`uVBq!ia0vp^DnJ~xW+toQiwz0mpuBOeGGq0tgHHRapL&m7xO02pmDy6xE-%Y*B+8~fU zUpicpyC9QQ*~49pC9Q~8D$GPguq;W(QC_P;sJOB`ge~COf!PcUjCGzajv*e$--g@_ zI^-a5#$`h2qR6BMp92a`I|4r*`z>~q`Ro7xN9P{hR8tT(-}LX4Rc~{?e>u~as_HS} zfj%R{8_g@?=O6O#FL*OE#L9N|DULQDkr}hkr)@sx#Kz*jDe>Y|%lwn)Kg%$-CMg8A zEj6mqXLpI}vzek7CebGr{ZVyMcr2?LG|gm$P_EZ|SC<$iKx<^R;)Ck;wOKHRo(W$xqiSotd;=Xl=}BUVU#93y+uL z*5t|A?Ylg;I!ij4Z$DbpvBkIV&M!XyprYN?S8D6)Pxz^cmM@sx!x#D3YMHXEW5F5M z1-q+@yzcUzJNNU~m6NT@C+~VPSt(kw>)`6RnJo6Z%X3Bc?7UiRAaqRT-Iosc?{{2$ zSwBx zUSq1i@u9=RwF*8eA0My!eWU%u?5#5t4(>l>E!(B|ciN{?P*z~@boFyt=akR{0Bjr^ A1^@s6 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-hdpi/abs__list_focused_holo.9.png b/actionbarsherlock/library/bin/res/drawable-hdpi/abs__list_focused_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..1820612c36e2439b5bee54d80412d65356d42b52 GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0vp^oIq^A!3HD`KM5!WQXzQ-A;}C(Odtt-fCVVY3dG_- zECIxfXc)*v6??t5Ag!j{~8pVYE3UAE-6f9-2G(Oxa7P?J>|A%asy4fXad^*)}}JaNV<9)_fa;!CGh Rzjp;$=jrO_vd$@?2>`WeGXMYp literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-hdpi/abs__list_longpressed_holo.9.png b/actionbarsherlock/library/bin/res/drawable-hdpi/abs__list_longpressed_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..28ef2237520f451378b0cc3c335ec06a067dc2be GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^oIq^A!3HD`KM5!WQXzQ-A;}C(Odtt-fCVVY3dG_- zECIxfFg%kX?LQ2|#6UDt+j>bLt?TLH7-Dfc`Op9V_RNY0PE7b#ucqkg!{gEr=(@Pe oO|(}_D%50E$E_}j&XuPa-ivdDxw-W}18QXOboFyt=akR{08@4-&j0`b literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-hdpi/abs__list_pressed_holo_dark.9.png b/actionbarsherlock/library/bin/res/drawable-hdpi/abs__list_pressed_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..80509cdfd1eb3cf9e79aa805b6d3b5c729ea10f2 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^oIq^A!3HD`KM5!WQXzQ-A;}C(Odtt-fCVVY3dG_- zECIxfFr2t-=YJT6iGgUDL>&zvt?TLH7-Dfc`Op9V_RNY0Hr0qbD=E7A@VGPtx-RZ= o6YbTK3N=~PajQ$BbLA<9ykrhp6^`}0fEpP*UHx3vIVCg!0I@_UZ~y=R literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-hdpi/abs__list_pressed_holo_light.9.png b/actionbarsherlock/library/bin/res/drawable-hdpi/abs__list_pressed_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..e4f4e44a97955a56918ba39be998ea78b4cd3843 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^oIq^A!3HD`KM5!WQXzQ-A;}C(Odtt-fCVVY3dG_- zECIxfFzm~a_8*2}Vj%jwWye<_t?TLH7-Dfc`Op9V_RNY0PE7cAfBFO^H8!OKD;5R1 oF79#@?bVVBb;)(@ITDh}@cJnSm-E;2Aj=p$UHx3vIVCg!0FE6hA^-pY literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-hdpi/abs__list_selector_disabled_holo_dark.9.png b/actionbarsherlock/library/bin/res/drawable-hdpi/abs__list_selector_disabled_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..cb1289628fa2bc01b3ec2e7c38c3d6c8107a99af GIT binary patch literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^qCjlV!3HGx6`GF$sgS&akYolXCQcw5AK(T`@&K_M z5X(0J2@nPX#s(k(!a#t+PU{r-3luZ*ba4!cIQ;g^Mn(n!h65Xlb{^){+ptlUJtbuI m_HS>PSB7X!^;#N)p!QmQ`N;Uo$Sd9mWTdC7pUXO@geCyw(J2Q2 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-hdpi/abs__list_selector_disabled_holo_light.9.png b/actionbarsherlock/library/bin/res/drawable-hdpi/abs__list_selector_disabled_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..233da8e3aa1cffcc8ee5fd218b7ef1674e7dbaff GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^qCjlV!3HGx6`GF$sgS&akYolXCQcw5AK(T`@&K_M z5X;Mh2p|RmMqKQ54W&_4sa{Lr)R$KbZpRqstURz*6J)-ptDnm{r-UW|UMVQ2 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-hdpi/abs__spinner_default_holo_dark.9.png b/actionbarsherlock/library/bin/res/drawable-hdpi/abs__spinner_default_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..ed820cbbb4fc5c24d50c085efd165b4be2814bc1 GIT binary patch literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^xj<~o!3HFkmpxwyq(brvLXsJnm^guK7?1-p%z+rB zj2$Wn5|amFAs`lpieaM|fr4OsBlVI6kUhuK#WAGf*4xV)c@H@VxLiESDiD0)sGrQ_ zOB_ot9usqA?Rz6E_a$!ECDzZSp$G#D9Lnv#<#ku;Nx#vJircU|qh82o%YlSNtZc%% z1~W1m54v#ks6{0hTx4qQ6q7)cnw@WJJtL#I{^sgc+a&Y5#l(0(1}99reQ)9J`Oki? gH9U5li{Zf18pbI>mTMWacpE^{p00i_>zopr0NsX9s{jB1 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-hdpi/abs__spinner_default_holo_light.9.png b/actionbarsherlock/library/bin/res/drawable-hdpi/abs__spinner_default_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..8d42e32d91ff695de934fdf250bdec44270ae12a GIT binary patch literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^xj<~o!3HFkmpxwyq(brvLXsJnm^guK7?1-p%z+rB zj2$Wn5|amFAs`lpieaM|fr4OsBlVI6kUhuK#WAGf*4xV)c@H@VxLiESDscJuGe4Qh zmpGON9{=jX+V@6S?n~URORS$uLlFiRIF#Fe%j>SxlYXNc6}Mq`M!k^FmIDckSlNVi z4Q6CC9(3X6QHx42xX9GpDJFp?H9OzddPYWZ{ms>@wn^r9i;3}o3{IGK``*Ic^Pl}( hYk2H97sG+2HH@#{N~Y^CRjmO@d%F6$taD0e0sx46QL_L5 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-hdpi/abs__spinner_disabled_holo_dark.9.png b/actionbarsherlock/library/bin/res/drawable-hdpi/abs__spinner_disabled_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..fc08574ccee68cf3a2a041e7f9982a04f682a765 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^IY4Z~!3HFoU&LDhsgS&akYolXCQcw52IPPYGav>j z17Q#ViOB=85D*IkF)qLelmKG~)u3HK_Cik=$B>F!Z?Ej;JnSIia`7Yo9BCPeDZ7}y z#vi=)&?=QSLJI@1zT zH?nAVt42iX96Xi887AhvVH1+nq$gR|&L-JT^6}K$UlYC|H_6v?Ui6-~-a1{ZASZuV pd-+yk&qt&4bj z17Q#ViOB=85D*IkF)qLelmKG~)u3HK_Cik=$B>F!Z?Ej;JnSIia`7Yo9BCPeDZ3iq z?q}Kh&?=QSLJI@1zT zH?nAVt42iX96Xi887AhvVH1+nq$gR|&L-JT^6}K$UlYC|H_6v?Ui6-~-a1{ZASZuV pd-+yk&qt&4bj z17Q#ViOB=85D*IkF)qLelmKG~)u3HK_6AQE$B>F!Z*OemJ!HV(a*_FB@CF9wfX$4| z20-MiRpvQ&ZUW;a!Pf43*}6M-=$rc?Oun%u@l@rzocwwFdrUd5iN033!Is1sCg#0i zQ$*9$qe5$RrX{3qWYO+cjfm7acnVo6=VruqmG$w*ye2hgig$kXDT;rTr@ux+3~2U& zZEv3OwQ1&mUh};0=e=X`Ni%QW|CPM%TIAIXCWZuCdF>=^MZZ#yJs@Xzy85}Sb4q9e E067<06aWAK literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-hdpi/abs__spinner_focused_holo_light.9.png b/actionbarsherlock/library/bin/res/drawable-hdpi/abs__spinner_focused_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..b17ba12f4dc9dc51a19bb64749a0aec41de98c1e GIT binary patch literal 476 zcmeAS@N?(olHy`uVBq!ia0vp^IY4Z~!3HFoU&LDhsgS&akYolXCQcw52IPPYGav>j z17Q#ViOB=85D*IkF)qLelmKG~)u3HKrn9GuV@SoVx3?U%SrR1AuTX#Hv5(eSYzO_gm|?KDPhwt-LEa zLB(?t9DPxK$Z>1wy4R5ln0_4ycG)AnX79$ZhNTOanm@2oikscadHl+)2!`MTuRb&# zjFNc0t$L3^$qu84)5&w~Wn}uYQZ|Sk`z7&ZRp5QYh(!@>-eRW{P9{m}MCvrFcBgJg z*~l|ZXWGF@M~xyjAxk!R9*>qZfh*#}}iKYWr_ zyZm?2R@*-AN^hOTzj`AcSj#TW>x@3|WrpAV?hfwqh{(D3t+rdQxuX}&CdU14i`<3I z4)^8SK#%>^R<3WCjSaG%w}12gkG0bOUwRx%0Q&dWE8z#nuh`t!c-|Zo=AN#8F6*2U FngG+5ujl{( literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-hdpi/abs__spinner_pressed_holo_dark.9.png b/actionbarsherlock/library/bin/res/drawable-hdpi/abs__spinner_pressed_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..5305fa27076670a03d6edb5ce9b01b8fda2188dc GIT binary patch literal 462 zcmeAS@N?(olHy`uVBq!ia0vp^xj<~o!3HFkmpxwyq(brvLXsJnm^guK7?1-p%z+rB zj2$Wn5|amFAs`k8Vn&Cwng3xlhz;X|#6Y-v&!rL|W$NkT7*cWT?Oj7JW=9#fkJ~rj z?r2TW5}vT3V{JlW;?f6_HcjQ9^qkh%wCZH`Ol_SSDl|J{S-_?p^Y>kUFY;gBnEAF( zY5D$j4Z;sNG;Rb$Gp;{S%)I5mk(oUEHWfyRCcLp(BqhF}j4$x&y~Ksjmvp8rnwbGa zYO{c-6Npgw)9!yf_CqPt9e9b_um%U)&3H@wT=JGb-6bb@CE8hEx7&0;{GhjviSV7 aCG!uMMS8S!hXBKofx*+&&t;ucLK6TG5~|Yx literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-hdpi/abs__spinner_pressed_holo_light.9.png b/actionbarsherlock/library/bin/res/drawable-hdpi/abs__spinner_pressed_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..db9795b9f187eec576f7677b6e28458d3c60c95c GIT binary patch literal 493 zcmeAS@N?(olHy`uVBq!ia0vp^IY4Z~!3HFoU&LDhsgS&akYolXCQcw52IPPYGav>j z17Q#ViOB=85D*IkF(WeeowfcNG9Sdg&iXYLNQHR1IEGZ*dV6PM)}a82wukGZ1n%6K zWGx_GSa|BuHP1JqC7Z8b$-BEtb8gHMXJe7TJ4|!mTw$wXSIug7<6LO?btc3pUJBa+2pWFB(O*@vPm$yH2{%d0uZr4h30PQ|Gt88hT@v*FCQ}) zI7fJXie-Ppvw^|5jdg~h&Vimp#xx#ogXD+?$-_)%B*YSqAxU{&QcW(s{3!KK%-*xj zXRTKLeZH%~^2N`WdOv=}Y>i!WR`;TSnDrUQz5jAGG)uPHS)YkOv%bvk>3{D#TDJ4` z=h&1;`WLc>n{Vzp>9`?c|M6*Q^$thH@~ literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-hdpi/abs__tab_selected_focused_holo.9.png b/actionbarsherlock/library/bin/res/drawable-hdpi/abs__tab_selected_focused_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..e32e685f4a7e7a7ad30c24ac0279243015b2ed11 GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^96;>B!3HExhi`cfq(brvLXsJnm^guKe1I7!$qK|^ z`v1%`3=KdGqd^)$d>~+i;q0hC6M$?FPZ!4!kK@U6D%&2~Gc%buy{wwSAk56@5WvVi zX(P`|H6C6bATT~ZA>q)9ra;!kTyCO0S`wiKs~YBUNdzzd_s3p}uSFDS@Jr4YhxQz2 P2U+6j>gTe~DWM4f18g(5 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-hdpi/abs__tab_selected_holo.9.png b/actionbarsherlock/library/bin/res/drawable-hdpi/abs__tab_selected_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..ec10b59bf73583842fd5a7e005a553330280d9ea GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-X!3HE*OU}jvDT};F)x;)?!V`FPmzOnQ~G6RFUDKn3M#HRBgJ3L+e KT-G@yGywqTRT;tn literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-hdpi/abs__tab_selected_pressed_focused_holo.9.png b/actionbarsherlock/library/bin/res/drawable-hdpi/abs__tab_selected_pressed_focused_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..6eea722c6cbda193fc1737a289ec775409964100 GIT binary patch literal 525 zcmeAS@N?(olHy`uVBq!ia0vp^96;>B!3HExhi`cfq(brvLXsJnm^guKe1I7!$qK|^ z`v1%`AhnDjdR6ycyU_TFzd$rd42E0O(*FXvC7v#hAs)xChFbeE8;Z=CSvq&}6Rv?81{J;NR=404)d-gwJ76!IVkw3qxv;GGisl|7M6&sAOB@d!^q=TE$V9d2-B8 zxrv)SH<)knm5bdT_pbZpkJd9Tuv+=|W=Klc#fWjt<+R(KsX zSbbt$8QZa-+9qAY^D9z3LKn4N`W3Xlt60F0Omph)s`^>bP0l+XkKIM&L& literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-hdpi/abs__tab_selected_pressed_holo.9.png b/actionbarsherlock/library/bin/res/drawable-hdpi/abs__tab_selected_pressed_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..86a18383f3cb2030098ec35b0be5aad3dca70182 GIT binary patch literal 254 zcmeAS@N?(olHy`uVBq!ia0vp^OhD|x!3HGnl&a_fDT};l&t>WfYXqI`*QlP7CA% MPgg&ebxsLQ0LO<-{r~^~ literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-hdpi/abs__tab_unselected_focused_holo.9.png b/actionbarsherlock/library/bin/res/drawable-hdpi/abs__tab_unselected_focused_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..4206afbc55e9a97290c462ee642e739f70853eb5 GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^96;>B!3HExhi`cfq(brvLXsJnm^guKe1I7!$qK|^ z`v1%`3=KdGqd^)$d>~+i;q0hC6M$@YPZ!4!kK@U6D%&2~Gc%buy{wwSAk56@5WvVi zX(P`|H6C6bATT~ZA>q)9ra;!kTyCO0S`wiKs}e#OS8_=NFaP()KU$k%cNpi3_@<)s PAUix={an^LB{Ts5(d;wG literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-hdpi/abs__tab_unselected_holo.9.png b/actionbarsherlock/library/bin/res/drawable-hdpi/abs__tab_unselected_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..2ffb0bbc53a8eb2869a907c49af018b88f42fcef GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-a!3HGrH`~quQWkjyA;}C(OdttD0Hy{^|4*Iz zllSe5I-n*=PZ!4!j_b(@4(vTEgX{mLCjdcH=K)Cu_dcc{dLP6tf=u>w^>bP0l+XkK D3nm=V literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-hdpi/abs__tab_unselected_pressed_focused_holo.9.png b/actionbarsherlock/library/bin/res/drawable-hdpi/abs__tab_unselected_pressed_focused_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..dd8a7493110a4638cb08e0ab0b9e9c5b1f70a026 GIT binary patch literal 540 zcmeAS@N?(olHy`uVBq!ia0vp^96;>B!3HExhi`cfq(brvLXsJnm^guKe1I7!$qK|^ z`v1%`AhnDjdS&-M+u(#rKS4A|42Er^?-T*K&7LlfAs)xKhV2eL>>w~lQnS@<0n3RO zja(X?4MGLHEiEkXpb^Ss0MDN$;!R zwAqqucf2njjSI}1-J`;-kr{4cx^wl#z`x(T&n^+`Jm~7#Tl@0L>Sfd3oYm;DH5IzM zhPi^_$vly*i~Edn8(2)uecmsrjyR`wFzj+zT}j^FOX9ab7|%MHnyWcUefP=9k0sWy z-3aNvCb^Y0@{Zuu7R}~|8d@7)xQV%5bvqn!N-(E0)$MEB6q&2OYxTEozA;_tSi(}3 zLt8vgP7@L0N^dr-Og-J`sLb|0DMQCRO(EEHaiP{MgVdsk5@*T(PS1|Famd=6HMcP` rSpDQ>SaQ})#*VSUeEa)<_j5mT@2uY;S9R1t5EN&gu6{1-oD!M<+Z@+` literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-hdpi/abs__tab_unselected_pressed_holo.9.png b/actionbarsherlock/library/bin/res/drawable-hdpi/abs__tab_unselected_pressed_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..199464b69b045327fdb0de31b8464f406a64edf8 GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^OhD|x!3HGnl&a_fDT};i%vjGoF_@-Y|_GtS*P^?kvKkFma$HZ=+Y+bl?V@bL8 z%|E|v80Y+AGH3|U?Yp*sW96y?Z;qddZ!5XXzu`fiMZ&%}ODAr=A7Zus;orSB-#t0c z7GH4;^O*8pY~J$r8|hL#mrhI;*i|KBgd%*!au+teBR literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-mdpi/abs__ab_stacked_transparent_light_holo.9.png b/actionbarsherlock/library/bin/res/drawable-mdpi/abs__ab_stacked_transparent_light_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..f3a769b2b7f49e7864e210067cd09a84533e7025 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjA$bKM$qY%& f&B~6gTe~DWM4f9}^$q literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-mdpi/abs__cab_background_holo_dark.9.png b/actionbarsherlock/library/bin/res/drawable-mdpi/abs__cab_background_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..d152cdf66a54763f4e25dd7ba267b0543e3f9dc4 GIT binary patch literal 1764 zcmaJ?c~FxF9{uu>a4C>DKrkiTs9e%+g@_zRHWVU4fJGPqA%bl<V@10h6~mF`NRdN}f}}t&90}KQhC3u2F&lSg{d3>U`(1D5y+40Be!iYsnix$0 z0JMl+ga815DM#S6x~j4su|0M~*#Z-i0;2#B)cB_pxw|r~4T)$rGm2|)m(?zmM;cp_N-==T(hjpyv z{=6_VCUAIp9ObHso*y)EUp9+LWZVy9_T65oVBbALyOw)R-z+ZY%^xWeGtNJ1qF427 zIw*^6b3W(i2i{V2rn;vt43V@X|o= zzH^ue0=$xbcPhqI=A9Tv%~4YIf=r7TlhziPP6;8srg(`h!+;GN293Hv?WntcE8{O( zquHX6+i{j{_n`;XwwHP_;%6zwBjV8USD|@@X+h=A7ilc`EG4sK(?n{U3bTr-+ND-@ zujTYyJDuS@i9MH|9348Qj<4Ax9!-9lD#YM4k&v9<7^iPhnY_n^uCRRstfNmPZi#plq{N7qQXUwGjs> zF#5?Gvb1hFdU(hiS)NtpdEuYg4OeO85S}!I+9wU4xP$7-csw7)%r5SypVf$9Bydmk zP5d=rKyqr=@r&-x*nRKL$ov8f&*S3qvn_)rwk$x+@7K+zFc3*>jmBMxe>s>*sceZS z^}E?D+DSL<;$U{L*K~!;f%IU~8kp4kU<5O;vNoD+JOj@ci&FvDtJ@(XQHQy#HL5vl z{lG`WYgYU!KkHjZ$_A)NYL-p?N`!f!V7ijh9pa1`z zL`veUAP1e$>>;E4u_bWyO2&$pEc`1zr_GDkWH|UeSY+bP{tu~cdYHU>a(IPx1ksuuX@-dq0%4LI-? zed6m7X*0_|YpumTR0rW!ICK0tY5Tfg+6BCw!Wgw{4kzF6F==wS$&4GKYS#VkOut%K zi;I5aLO=I3S3MHUT*K!duongn(MQG#I1aBp%B8eN-ZFW#mh6M+9xDzAP%ARrR8*@b1z+Tc z$fiZ|_59g_V@{rvEbRV%s5Z2)R?8KPLYaaTU_Fa~MNN2?MdWt8l&r~6gX)*&C<=H;7W1J>EAC;7GD{t-m1Bcg7&*8G ztTCjau>e~w^ZXzSXBo5YnD$~z(}{&(KA*`I3ma97s$K2LagoSGH6)QY4FC3qV471# zq}96pcv+*)2NnzZJ@V?R*iZCe^jk!>Vq)0)=`OSLvXfUEHMyjFK-e-+)tgZl!(AdQ zCGuS!5E?Em8w-Vr&&4HiK%l9ce~T>G%x%DzH+ZMr>K$JlAE1se=&IoWmmgU6>WUm0 z{RSR6w2XAmD8%Y@pvE&hR~vHb2Qw=H+tg`vI_^= zJo6txE*VxWccGr-+cOmI=|x8Y{p$dGffV@h-Ant~AKs}#5(H#jE3)5YaoETW7)`n8;3g0gPqX}GajFgL=Rs=tvmVe{{aVdHKzao literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-mdpi/abs__cab_background_holo_light.9.png b/actionbarsherlock/library/bin/res/drawable-mdpi/abs__cab_background_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..fb30a707d58d82ae6b6734790058382f684556b2 GIT binary patch literal 1813 zcmaJ?dobJi7XSVth=f)mw6*n$*D7fhwd$E_BGGNpt}3de)m^U=T2z~s#A+K<5s%Jo zFR@-Nt3<_8>pePHyGX9avt+j{R#WjzmB>wZ=H5TLLLE8lDv5IRGF<3mgzCii)u^!zjczCe}9;z+h^ho&N)v!rN64uArU#AHRbCP%(c_ z{X1Eq|3&`VfF1xUcRYzFe3K@`m(IpaIjYaP&QeJHFSJSCE06e2Z7A*f*U~)rBliFk zQvb_D75}TD1FN;-1A8pSw?D2K9EE@+|D);y01Oqe1O=1KS~d9{<2J54cT*~wI-JmL z7=B^fW|KW#Slr-RB}wsp%8I_do{Q|Y58)U{1va(oz4sF)Ix1ZI_?*V9?>JASPc|wp zuxrJf8P}qpFCsh3V!PbD5GQ_7iZ_EbF|$(70=0ax9s>%sl!wIyYP4Y;jbqikgO>O(rVnB9|9lK z?ym>V-P;jj2{%?tao5*3@i=OuM1LU0$SBXnv4NQr7$!=975CBNlzA;+WYxPL%1@)} zs9KkyScYxAf05^xgbBxvaxpW9bnzTo05r@lvP5^706ah050W(R*I>SwTy~i(_a8l za=+AOweKqw=OH@#lJS!T_ho}D4)*wssFkdOt6A0U>=oq{Nu0j4Bt^fl;tZDeYg8Y8g3Hs^2t< zSRTs3Za|s-yqo}x&I{@~_WNn!^dHv6m564P(2XOzX(B5e-@QapirkE_+rn+Xv}zbz zDKxU7wY#p~-79F~MWdl)OW5H&*oc|5Rg3P#B1AY!;^;p{hMXBI9&kSEidz=$i6dFj z^lsA9*I)D;selwq*b6k)+O*{7Ex;2Tb@}-uoxarW96HmM5rxjX>fy1DI9gw+KEX)X z#+J;2MD~v|w%A)6YIdrkvk0hH#t(X%b0zpx>dUu-o5d|%5gN<`Fz!BNY6Z-2FD~-P zst`vY4q9l>fj&pz{sUplx}<$R2O;(cPWC7XKmEwe)`3;~L0>O@;;q z43pL-EFkCJDwL6lJAGG*%&Q;i3bGz9V0rRyGa2deWuVcK5P^_Hva{dU{Zv=*VC43- zeRBxs4VA-VDZ!o~*s~aAcpOxz|aH^dJIq$8z_0ZdhiO?krZlgzdjB}#1sI^7< z8)^$=D&@RSUUX&Xtj?SPR!eP7KX}y8(BBK4+uq=P-X&gM>^a4kUjp_g0Ph%xKyp1m zt=S(7?c|)GlkwgmXxsl8j0_lvRCBDF-huNjQJ%Gp6BBzcrZ1v=z9M z)lTN$lVT2i+E1>LCvgPx;^ey_O)A`Pwz>?y=zk}F#Trh7X^vM`ytUGLii=*O)Ngtu zNsnV{q{M&@~X~WECXfHIewZ@x_Oon0H=7?pwNE>P+GgN~U`X{De3K#)u(CK;j*yu2Zd8lC)Q*hH-mLBhfke}- zsJ+m}j=o5b;ux5J8&f*Z6=I1o2cFfPmi&HxbvFpQovc>Z~bmXP2XizoQTn zrjdm#eTT1UuZ-NXl!lvuIJEQDW%eU8R0y%!rx{>&v!qD6RJg{aKajvTAUMZ zOXN*+m|=!h_gaO0vZMvKnTDKkOORr_YE~`R^?C7eG)h2RCyoF7+?E%fkBNKoe)O*t zc~WuM`#KR|{o<`wD^qU{gAM;HH-7R@V>kr~J(uZ}#B&JkK^ePuzGB;GiMQj^L^E!& z^{~5e>OkMcma2IN&o7I3vR}^7Ky@QGqA)*;#RYn55L}$fKt!vxY54#Phmmp1&$U0kZR#ovE c{s)YR6}Q0?ejf@}!qq=po+K|~tvfaK-|0gps{jB1 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-mdpi/abs__cab_ic_close_focused_holo.png b/actionbarsherlock/library/bin/res/drawable-mdpi/abs__cab_ic_close_focused_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..9e590b1d67b9ce1d44e9e654fc996eef699bf095 GIT binary patch literal 732 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabRA=0U}OsL32_B-XPz0+D6{i&GcXjw zN`m}?8F-ZCIeArB4UG-Bgmu|^inzsRrLgGy|5dW+YciwR`QN2W=1bY0`%`YRY^k7} z&DqKoi%(arS}1FM>Tm5DQL7VkWsc7_5~^6ffI+`ZVQ;U5`Mxs~_(b&gN=pF4+t|~^ zF~s8Z)yXfTnjA#h0uMbiKC>wG))rfpXcO);LAO_IIeP8){;7P%ONEO#h5<@@1M%Mz+kQI`G7f&bzxzA2Il>Tnv`@FotQo?x%mfI zd~CDjBh|3D=QYW}5=XXMJimQHGylfHcXH43T6x&-*?nBq&Rp8zEF(KP&{-~S?hnof zFR~|GRCp|MPqNVdAg{8+=Q*FR9bNjOzszVA!(2V_=Uf{uAKK&gTq&ZfT+ zU3wI<-PUZC+EKSMe^m*HJ0Vz_ZY4HSdL& zo0i{nzGr?^?iz!r^Qqh?%9G|@Dq=V$e0Gjfd1nrPep}a1r%U#H^_)6kUiyDbpGt3y zT=Tzd`7^WE2g(9JCG>YS&ym0RXP(!=KgNr4mHjR2oa*@g7N~GJ?Uc556BU0r>$*OF u?0!zwcl`>L)1Pabww$}`{(s~DPi)5Lcz+rFd|eFm5`(9!pUXO@geCyjFyq+( literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-mdpi/abs__cab_ic_close_pressed_holo.png b/actionbarsherlock/library/bin/res/drawable-mdpi/abs__cab_ic_close_pressed_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..623629418581da26a07e2b5259f5fc26ad4bc677 GIT binary patch literal 803 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabRA=0VAKil32_B-{}T z)fLTy50WA5nP(Vgo?+Z^+xOr9zbh`Q&N|C{@Ifk2>ih3E^Uw1GrMBPpUVd45#T7N6 z;H$5vA%fd(d;a_PXZd9%pcKTMH($@sKQFNLmiw~Hipwvny#00&%ys?y@7J@;-ePU_3c_x;TbdoW45wdDI~X0as>;JKYLWr!zv5#FZ8; zSaGB+_6_Tsi2MI#=ZGXSS2EnK|2%i{nKO4?0{>m)Y*m&$>(%RK^*2V;Va@C9UCbUO zzvqd2d{emgI!x-q_5LFbDm+S_&WGnMbd+Cs(a>dPZ z6KHj~jjecI<+USCHZFYK-Z@VMnZrS|T{JgnFd81iefz^^`-v0TYm%Qv|X#T1C zSv!VZ`b_?vzcI>}lcprzGuqFrHOKv;>5})0qb_eg^M2;-N}C(Ul;=IUT~qh4W^av- z`q%K5rDCOf_D+}jx$)yiPQjp>@3}9|*62zI#Q!sWwdkAfPo;(1*e0&}waWhM>Awv8 XK3Yo;Y%`Ju#vX&GtDnm{r-UW|D9gLX literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-mdpi/abs__ic_ab_back_holo_dark.png b/actionbarsherlock/library/bin/res/drawable-mdpi/abs__ic_ab_back_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..56720f338449833385ce058abc91837f9ee53ace GIT binary patch literal 607 zcmeAS@N?(olHy`uVBq!ia0vp^5q|OKUgt!9fGs6hfluoz=^pa~y zkY6wZ10xFuJ2zWWO=*KalXrK0n|58Zl0Zdmr&D~peN&Z?qAq7ai*HD_S)+7DoNTK> zVuEnBondH44p)(ns)l=4IWKEq>=nmkpn<q|OKUgt!7}<6#7R=dG9s^pa~y zkY6wZ10xFuJ2zWWO=*KalXrK0n|58Zl0Zdmr&D~peN&Z?qAq7ai*HD_S)+7DoNTK> zVuEnBondH44p)(ns)l=4IWKEq>=nmkpn<Uo`e_llb1a>Tm zGXMj_2Mjs}Q!~HqmXHJrr^%N5?hik{;>ZdXT@?xO`E`K^*;inRXklBLp07O|M~ylp4sfci3#88)yz26*klqyl0uSJ eco{r8#m4Z5ox^O;8fzt>dInEdKbLh*2~7aQP$FOe literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-mdpi/abs__list_pressed_holo_dark.9.png b/actionbarsherlock/library/bin/res/drawable-mdpi/abs__list_pressed_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..bf0175fea4d1928f5baba707cf0104de64c8c612 GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^Y(T8Q0U`}8Ig^1@NM1omG6NG6CyC9Ikt>Wq87@~1L`Op9V_RMAnHr0qbE17YsvB@NaB!wic e@G^LGij5(Njr}i!K*JTFdInEdKbLh*2~7ZkA0!zopr07eEQCjbBd literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-mdpi/abs__list_selector_disabled_holo_light.9.png b/actionbarsherlock/library/bin/res/drawable-mdpi/abs__list_selector_disabled_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..80cd8e6171f7d64c46eb68a7f5d681b9b16a7876 GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp@K&;8Z1|;8ITO0$VLh=eik{OtoIDu?@fE_5w0mQ;U zEFupiKo|%Zaj{=|Uo{5Gt9iOOhIkx*d)knZK|z2)am$JC{wpO*?8?NB&E8zAG1Y5n c(8`cQtZT{`3wAE`bpsjc>FVdQ&MBb@0J5YZCjbBd literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-mdpi/abs__spinner_default_holo_dark.9.png b/actionbarsherlock/library/bin/res/drawable-mdpi/abs__spinner_default_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..ff88f7b21d08a61e74608401ebc9f3d206f51d24 GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^oPJV49~6~jg`0tLa?;f|d;kX`TT;uw-~@9njXyoVfk+5(+V^XVKsE3h}{?{}+)=g9#q8ji=mSafVn0 z_s+NjLxi literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-mdpi/abs__spinner_default_holo_light.9.png b/actionbarsherlock/library/bin/res/drawable-mdpi/abs__spinner_default_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..9e758667ac958925deb1832645b45461740bb531 GIT binary patch literal 278 zcmeAS@N?(olHy`uVBq!ia0vp^oPJV49~6~jg`0tLa?;f|d;kX`HP;uw-~@9njXyiSfhE{@J#{3Z|O1T1?m zy!h(E=kfnti^~S%g@>2(#(-_gdHwG6@3%Uq-4`tPINrEUNtaD1Qz@Wk$xMff6VsTF zx>89^O}0;t*S>u*>n= ze1+y4JDYlY73FT-xbxd9`02uvnjoD(;5aoX=>89^O}0;t*S>VCDEt zUa|Vd&Zgd8MY&ry?)>%&e!B3aCP*g`I6j>d{P)a>qVCOtC;E-AWp`RsPTAri74=%P zVvgsfSGAsQGW#0^kEb6|45(FDAO9`4@zIjk+kS0H=N3t?-gU~E{ZrckbEPwmdzZ}p r&&t3M@KUPzs*I(F=Ff z``m-jHDYNwDLY$lItQ9{Fl}OMy8ru#?6y6J-~9K6nBTDScJS}-n;oV(&S`V_TJb&kZ#qNyI^Ud4)f9@8@WZ~pByb*!*n#T&a*RF_(kgZ zlfm!V7F#^k|1SG&fpZKCBg6kRVzopr0R7-(0ssI2 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-mdpi/abs__spinner_focused_holo_light.9.png b/actionbarsherlock/library/bin/res/drawable-mdpi/abs__spinner_focused_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..4f093152ff90a20c77b3b032bdf71b1fe69cf63d GIT binary patch literal 479 zcmeAS@N?(olHy`uVBq!ia0vp^9zd+Y!3HE_CHKezsgS&akYolXCQcw521I}i6(DAT zVvsmUOcaQDfS4DEaREl41Q_3#vu`Po>E`L;7?N@C?Tn3H%#H$W|Myz+20CAgP)$k} zK5{O6!`97ys*jX8Dw{(zYgvP%qu38cdh99@-~TogEi2NiW?x>W9ip${eNLrv#hGKSUQgFBuV6Y+?tZq&X2tb+lRu_~@9QfCHE(E( z{Zsh+*!2C^^7f7=3?ed@)n5Kra5}O6(^9s%$1N`DJV}vX>zezosr^~Cqi&pz(+T;H ZT-Wx_c(Lr-Wld19d%F6$taD0e0svJfseu3h literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-mdpi/abs__spinner_pressed_holo_dark.9.png b/actionbarsherlock/library/bin/res/drawable-mdpi/abs__spinner_pressed_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..c611451085dfc8d4e3076818c38b7096f4c97f93 GIT binary patch literal 386 zcmeAS@N?(olHy`uVBq!ia0vp^oPJV49~#EcGUGylVA5F5q^iGi>%t6esbe(CAr7?N@C?JaArLk=Qt5ASPe znTd5xI2Us8mb+$0b^-UhlSgmdi1uD}Bb8lAaZzh*QzcKt3)|)MGVOL4@NC~|Z{t2G zZIacZnwd+w)iqgOB+Gg(RA1Tcnid9aFxNRKZN~+Nl>i9W)I&6A0<;(qxL6EDO@K-Pl#MP3>3?X2`q{rKTl$Lp{;UwutZ%sYc-o#f^>L%x{xanw%diP0=$nnb5Sh<-$Tir`3vvx*h+& z`?33NvN>$|pHV_PD0A}*{xnmdGgcK$7C7+b*{?^e3{#G<748d8=KjN?bWV)BRqUl; zhXad}KqH5X0+V0|ki*Jd6RsSv`M(In0WTW7<31}gT&>%4S+zN4 t+xll4kLoYbY;gP2_~g)yrj7P5xHFywOf_y7}7k{O7> z^#7S>7#e^WMuRkh_&~r2!^a&DoB*;dJzX3_G|nf_scd^_&&*F&6Bu;@ wM0tRK*T8X&mOCp57IGRb^ZWa={y+{pgS8aFVdQ&MBb@ E0D-I>`Tzg` literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-mdpi/abs__tab_selected_pressed_focused_holo.9.png b/actionbarsherlock/library/bin/res/drawable-mdpi/abs__tab_selected_pressed_focused_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..e26b4f9514158be53863b197a97ef4c5a16af37e GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^tUzqQ!3HF6-q`RPNQLATgd{UCF>wOf_y7}7k{O7> z^#7S>Kx!F5^s4T?cA@bTe}QO_7z}IJMlS_&6+K-XLp08>oxIoA*-@Zn|IG4@+J)Q# zfy}Z2LX5f(#7=l{-sRw%FyWwcfxVr$rcwu{9L6wOyRB}?blhTT#okHqU zb{)Cw_{&UVqR9;QH{p?hcoWjvuymEO_0HbB0my&v!s{QoKr`pS;DkG$Ro;J6<>>T-Jqy3M9 sh&krf`?vGW-?h8`e0*I?y>A`kwWMV`lTt$80|So1)78&qol`;+000%Ce*gdg literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-mdpi/abs__tab_selected_pressed_holo.9.png b/actionbarsherlock/library/bin/res/drawable-mdpi/abs__tab_selected_pressed_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..e58bbc6313fd4cf1f857e8abcc61b03340de1d03 GIT binary patch literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI_!3HER7z;E4DT};p)YFn-ll^r+@9lqG Z|A|4)M=LP0V!15HVoz5;mvv4FO#mV|Ij#Tz literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-mdpi/abs__tab_unselected_focused_holo.9.png b/actionbarsherlock/library/bin/res/drawable-mdpi/abs__tab_unselected_focused_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..32575002ca796c6dc25796a7ebbe0094462e1b4d GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^tUzqQ!3HF6-q`RPNQLATgd{UCF>wOf_y7}7k{O7> z^#7S>7#e^WMuRkh_&~r2!^a&DoB*<&JY5_^G|nf_scd^_&&*F&6Bu;@ zM0sAS@$ed-cVKy__5c5W{_xJw-zy#fp+YZzopr0Of}_>;M1& literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-mdpi/abs__tab_unselected_holo.9.png b/actionbarsherlock/library/bin/res/drawable-mdpi/abs__tab_unselected_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..e18ac5dd627f7ef65b5730580797f7f9de50b9fb GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrH!3HFQ?xr>YDT};wOf_y7}7k{O7> z^#7S>Kx!F5^vdpiw!sOLeu8L_7z|Hzc%TL3YJ0jkhG?AcoqXE&hyjDkeV>|Ew*@Ra zE;5S-2(f!5WIs4DQQ2gZhew9u;e+!{b-Fu5Zf;DsnXj^|T8Ux(?e5=`FCWilxV%o` zYvs*6eRBr=^Zc_nf7bqX!X!kRy>{Q7a$&YAr+2M3+TSlGFT8lz{FhEiO(4^iqkW31 zOpI5vRIamjE->?(X0hSQWf`uQvjdb=H6~ij(vWo8Iwvl+VDpoElU$ccW;)Z|7)ozuOwa{%XBof#N#b?F;TKH(7YHKq|x8NY-}6?FMo4`yFR% dYVOpxGpN7h(hgMUTK)uNx2LP0%Q~loCIHyYJq!Q< literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-nodpi-v11/abs__action_item_divider.9.png b/actionbarsherlock/library/bin/res/drawable-nodpi-v11/abs__action_item_divider.9.png new file mode 100644 index 0000000000000000000000000000000000000000..f4b21f8f1f7b5544c8b1abb9c72526d053037ed7 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>le~hEWCkWCkOUzBQ^RPyZ{NNi o4x42_4cwkCjv*Y^lW(N+FfeXn_;lX<`w@^ip00i_>zopr0KJnGkN^Mx literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/bin/res/drawable-nodpi/abs__action_item_divider.9.png b/actionbarsherlock/library/bin/res/drawable-nodpi/abs__action_item_divider.9.png new file mode 100644 index 0000000000000000000000000000000000000000..cac34343e2aea495c0c6a297c488e9d6c36de846 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>le~hEWCkWCkOUzBQ^T0HZ{NOx o+lS478n``O978y+C*PRP#=!WLQ8lS|K?TShPgg&ebxsLQ0MwflXaE2J literal 0 HcmV?d00001 diff --git a/actionbarsherlock/samples/demos/.classpath b/actionbarsherlock/samples/demos/.classpath new file mode 100644 index 000000000..0e4e50f4b --- /dev/null +++ b/actionbarsherlock/samples/demos/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/actionbarsherlock/samples/demos/.project b/actionbarsherlock/samples/demos/.project new file mode 100644 index 000000000..35b757909 --- /dev/null +++ b/actionbarsherlock/samples/demos/.project @@ -0,0 +1,33 @@ + + + actionbarsherlockdemos + + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + diff --git a/astrid/AndroidManifest.xml b/astrid/AndroidManifest.xml index aaf149191..cb545ccb4 100644 --- a/astrid/AndroidManifest.xml +++ b/astrid/AndroidManifest.xml @@ -87,7 +87,7 @@ - @@ -124,7 +124,7 @@ - @@ -343,7 +343,7 @@ - diff --git a/astrid/libs/crittercism1.01.jar b/astrid/libs/crittercism1.01.jar new file mode 100644 index 0000000000000000000000000000000000000000..bf228660a5b77a95c6375d70413275d18e5d105f GIT binary patch literal 148336 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

aY{7MG%#_k!iFwtBKz-%; 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≶3^9n1-f06)gexj8nVq19N_*8D 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⁣~5+a%iC%oJ!!E&J0hbmBs;HT!5Z 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 literal 0 HcmV?d00001 diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewActivity.java b/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewActivity.java index e0d5c93c3..35844e8e3 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewActivity.java @@ -8,17 +8,18 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; +import android.app.Activity; import android.app.ProgressDialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; +import android.support.v4.view.Menu; +import android.support.v4.view.MenuItem; import android.text.TextUtils; import android.util.DisplayMetrics; import android.util.Log; -import android.view.Menu; -import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; @@ -94,7 +95,7 @@ public class TagViewActivity extends TaskListActivity { // --- UI initialization @Override - protected void onCreate(final Bundle savedInstanceState) { + public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); getListView().setOnKeyListener(null); @@ -107,28 +108,28 @@ public class TagViewActivity extends TaskListActivity { return false; } }; - ((EditText) findViewById(R.id.quickAddText)).setOnTouchListener(onTouch); + ((EditText) getView().findViewById(R.id.quickAddText)).setOnTouchListener(onTouch); - View settingsContainer = findViewById(R.id.settingsContainer); + View settingsContainer = getView().findViewById(R.id.settingsContainer); settingsContainer.setVisibility(View.VISIBLE); - View settingsButton = findViewById(R.id.settings); + View settingsButton = getView().findViewById(R.id.settings); settingsButton.setOnClickListener(settingsListener); - View membersEdit = findViewById(R.id.members_edit); + View membersEdit = getView().findViewById(R.id.members_edit); membersEdit.setOnClickListener(settingsListener); - findViewById(R.id.listLabel).setPadding(0, 0, 0, 0); + getView().findViewById(R.id.listLabel).setPadding(0, 0, 0, 0); if (actFmPreferenceService.isLoggedIn()) { - View activityContainer = findViewById(R.id.activityContainer); + View activityContainer = getView().findViewById(R.id.activityContainer); activityContainer.setVisibility(View.VISIBLE); - ImageView activity = (ImageView) findViewById(R.id.activity); + ImageView activity = (ImageView) getView().findViewById(R.id.activity); activity.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - Intent intent = new Intent(TagViewActivity.this, TagUpdatesActivity.class); + Intent intent = new Intent(getActivity(), TagUpdatesActivity.class); intent.putExtra(EXTRA_TAG_DATA, tagData); startActivity(intent); AndroidUtilities.callApiMethod(5, TagViewActivity.this, "overridePendingTransition", //$NON-NLS-1$ @@ -145,7 +146,7 @@ public class TagViewActivity extends TaskListActivity { private final OnClickListener settingsListener = new OnClickListener() { @Override public void onClick(View v) { - Intent intent = new Intent(TagViewActivity.this, TagSettingsActivity.class); + Intent intent = new Intent(getActivity(), TagSettingsActivity.class); intent.putExtra(EXTRA_TAG_DATA, tagData); startActivityForResult(intent, REQUEST_CODE_SETTINGS); AndroidUtilities.callApiMethod(5, TagViewActivity.this, "overridePendingTransition", //$NON-NLS-1$ @@ -159,7 +160,7 @@ public class TagViewActivity extends TaskListActivity { */ @Override protected View getListBody(ViewGroup root) { - ViewGroup parent = (ViewGroup) getLayoutInflater().inflate(R.layout.task_list_body_tag_v2, root, false); + ViewGroup parent = (ViewGroup) getActivity().getLayoutInflater().inflate(R.layout.task_list_body_tag_v2, root, false); taskListView = super.getListBody(parent); if(actFmPreferenceService.isLoggedIn()) @@ -171,8 +172,8 @@ public class TagViewActivity extends TaskListActivity { private void showListSettingsPopover() { if (!Preferences.getBoolean(R.string.p_showed_list_settings_help, false)) { - View tabView = findViewById(R.id.settings); - HelpInfoPopover.showPopover(this, tabView, R.string.help_popover_list_settings); + View tabView = getView().findViewById(R.id.settings); + HelpInfoPopover.showPopover(getActivity(), tabView, R.string.help_popover_list_settings); Preferences.setBoolean(R.string.p_showed_list_settings_help, true); } } @@ -198,8 +199,8 @@ public class TagViewActivity extends TaskListActivity { dataLoaded = true; } - String tag = getIntent().getStringExtra(EXTRA_TAG_NAME); - long remoteId = getIntent().getLongExtra(EXTRA_TAG_REMOTE_ID, 0); + String tag = getActivity().getIntent().getStringExtra(EXTRA_TAG_NAME); + long remoteId = getActivity().getIntent().getLongExtra(EXTRA_TAG_REMOTE_ID, 0); if(tag == null && remoteId == 0) return; @@ -270,7 +271,7 @@ public class TagViewActivity extends TaskListActivity { final ProgressDialog progressDialog; if(manual && !noRemoteId) - progressDialog = DialogUtilities.progressDialog(this, getString(R.string.DLG_please_wait)); + progressDialog = DialogUtilities.progressDialog(getActivity(), getString(R.string.DLG_please_wait)); else progressDialog = null; @@ -282,8 +283,8 @@ public class TagViewActivity extends TaskListActivity { String oldName = tagData.getValue(TagData.NAME); actFmSyncService.fetchTag(tagData); - DialogUtilities.dismissDialog(TagViewActivity.this, progressDialog); - runOnUiThread(new Runnable() { + DialogUtilities.dismissDialog(getActivity(), progressDialog); + getActivity().runOnUiThread(new Runnable() { @Override public void run() { if(noRemoteId && tagData.getValue(TagData.REMOTE_ID) > 0) @@ -315,12 +316,12 @@ public class TagViewActivity extends TaskListActivity { actFmSyncService.fetchTasksForTag(tagData, manual, new Runnable() { @Override public void run() { - runOnUiThread(new Runnable() { + getActivity().runOnUiThread(new Runnable() { @Override public void run() { loadTaskListContent(true); ((TextView)taskListView.findViewById(android.R.id.empty)).setText(R.string.TLA_no_items); - DialogUtilities.dismissDialog(TagViewActivity.this, progressDialog); + DialogUtilities.dismissDialog(getActivity(), progressDialog); } }); } @@ -329,11 +330,11 @@ public class TagViewActivity extends TaskListActivity { actFmSyncService.fetchUpdatesForTag(tagData, manual, new Runnable() { @Override public void run() { - runOnUiThread(new Runnable() { + getActivity().runOnUiThread(new Runnable() { @Override public void run() { //refreshUpdatesList(); - DialogUtilities.dismissDialog(TagViewActivity.this, progressDialog); + DialogUtilities.dismissDialog(getActivity(), progressDialog); } }); } @@ -342,7 +343,7 @@ public class TagViewActivity extends TaskListActivity { } private void setUpMembersGallery() { - LinearLayout membersView = (LinearLayout)findViewById(R.id.shared_with); + LinearLayout membersView = (LinearLayout)getView().findViewById(R.id.shared_with); membersView.setOnClickListener(settingsListener); try { String membersString = tagData.getValue(TagData.MEMBERS); @@ -363,7 +364,7 @@ public class TagViewActivity extends TaskListActivity { } catch (JSONException e) { e.printStackTrace(); } - findViewById(R.id.filter_assigned).setOnClickListener(new OnClickListener() { + getActivity().findViewById(R.id.filter_assigned).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { resetAssignedFilter(); @@ -374,8 +375,8 @@ public class TagViewActivity extends TaskListActivity { @SuppressWarnings("nls") private void addImageForMember(LinearLayout membersView, JSONObject member) { DisplayMetrics displayMetrics = new DisplayMetrics(); - getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); - AsyncImageView image = new AsyncImageView(this); + getActivity().getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); + AsyncImageView image = new AsyncImageView(getActivity()); image.setLayoutParams(new LinearLayout.LayoutParams((int)(50 * displayMetrics.density), (int)(50 * displayMetrics.density))); image.setDefaultImageResource(R.drawable.icn_default_person_image); @@ -415,9 +416,9 @@ public class TagViewActivity extends TaskListActivity { else assignedCriterion = Task.USER_ID.eq(id); Criterion assigned = Criterion.and(TaskCriteria.activeAndVisible(), assignedCriterion); - filter = TagFilterExposer.filterFromTag(TagViewActivity.this, new Tag(tagData), assigned); - System.err.println("Filter: " + filter.sqlQuery); - TextView filterByAssigned = (TextView) findViewById(R.id.filter_assigned); + filter = TagFilterExposer.filterFromTag(getActivity(), new Tag(tagData), assigned); + System.err.println("Filter: " + filter.sqlQuery); //$NON-NLS-1$ + TextView filterByAssigned = (TextView) getView().findViewById(R.id.filter_assigned); filterByAssigned.setVisibility(View.VISIBLE); filterByAssigned.setText(getString(R.string.actfm_TVA_filtered_by_assign, displayName)); setUpTaskList(); @@ -443,7 +444,7 @@ public class TagViewActivity extends TaskListActivity { private void resetAssignedFilter() { currentId = -1; filter = originalFilter; - findViewById(R.id.filter_assigned).setVisibility(View.GONE); + getView().findViewById(R.id.filter_assigned).setVisibility(View.GONE); setUpTaskList(); } @@ -481,7 +482,7 @@ public class TagViewActivity extends TaskListActivity { if(!Long.toString(tagData.getValue(TagData.REMOTE_ID)).equals(intent.getStringExtra("tag_id"))) return; - runOnUiThread(new Runnable() { + getActivity().runOnUiThread(new Runnable() { @Override public void run() { //refreshUpdatesList(); @@ -495,35 +496,35 @@ public class TagViewActivity extends TaskListActivity { }; @Override - protected void onResume() { + public void onResume() { super.onResume(); IntentFilter intentFilter = new IntentFilter(BROADCAST_TAG_ACTIVITY); - registerReceiver(notifyReceiver, intentFilter); + getActivity().registerReceiver(notifyReceiver, intentFilter); } @Override - protected void onPause() { + public void onPause() { super.onPause(); - unregisterReceiver(notifyReceiver); + getActivity().unregisterReceiver(notifyReceiver); } @Override protected Task quickAddTask(String title, boolean selectNewTask) { if(!tagData.containsNonNullValue(TagData.NAME) || tagData.getValue(TagData.NAME).length() == 0) { - DialogUtilities.okDialog(this, getString(R.string.tag_no_title_error), null); + DialogUtilities.okDialog(getActivity(), getString(R.string.tag_no_title_error), null); return null; } return super.quickAddTask(title, selectNewTask); } @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - if (requestCode == REQUEST_CODE_SETTINGS && resultCode == RESULT_OK) { + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == REQUEST_CODE_SETTINGS && resultCode == Activity.RESULT_OK) { tagData = tagDataService.fetchById(tagData.getId(), TagData.PROPERTIES); - filter = TagFilterExposer.filterFromTagData(this, tagData); + filter = TagFilterExposer.filterFromTagData(getActivity(), tagData); taskAdapter = null; loadTaskListContent(true); } else { @@ -532,7 +533,7 @@ public class TagViewActivity extends TaskListActivity { } @Override - public boolean onMenuItemSelected(int featureId, final MenuItem item) { + public boolean onOptionsItemSelected(MenuItem item) { // handle my own menus switch (item.getItemId()) { case MENU_REFRESH_ID: @@ -540,7 +541,7 @@ public class TagViewActivity extends TaskListActivity { return true; } - return super.onMenuItemSelected(featureId, item); + return super.onOptionsItemSelected(item); } } diff --git a/astrid/plugin-src/com/todoroo/astrid/core/CustomFilterActivity.java b/astrid/plugin-src/com/todoroo/astrid/core/CustomFilterActivity.java index 0f9e48230..4a9655b7a 100644 --- a/astrid/plugin-src/com/todoroo/astrid/core/CustomFilterActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/core/CustomFilterActivity.java @@ -39,6 +39,7 @@ import com.todoroo.andlib.sql.Field; import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.sql.UnaryCriterion; import com.todoroo.astrid.activity.TaskListActivity; +import com.todoroo.astrid.activity.TaskListWrapperActivity; import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.CustomFilterCriterion; import com.todoroo.astrid.api.Filter; @@ -412,7 +413,7 @@ public class CustomFilterActivity extends ListActivity { // view Filter filter = new Filter(title, title, sql.toString(), values); - Intent taskListActivity = new Intent(this, TaskListActivity.class); + Intent taskListActivity = new Intent(this, TaskListWrapperActivity.class); taskListActivity.putExtra(TaskListActivity.TOKEN_FILTER, filter); startActivity(taskListActivity); } diff --git a/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksListActivity.java b/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksListActivity.java index 4a0bf130f..3cca8dd5f 100644 --- a/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksListActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksListActivity.java @@ -2,8 +2,9 @@ package com.todoroo.astrid.gtasks; import android.app.ProgressDialog; import android.os.Bundle; -import android.view.Menu; -import android.view.MenuItem; +import android.support.v4.view.Menu; +import android.support.v4.view.MenuItem; +import android.view.MenuInflater; import com.commonsware.cwac.tlv.TouchListView; import com.commonsware.cwac.tlv.TouchListView.DropListener; @@ -44,7 +45,7 @@ public class GtasksListActivity extends DraggableTaskListActivity { if(!Preferences.getBoolean(GtasksPreferenceService.PREF_SHOWN_LIST_HELP, false)) { Preferences.setBoolean(GtasksPreferenceService.PREF_SHOWN_LIST_HELP, true); - DialogUtilities.okDialog(this, + DialogUtilities.okDialog(getActivity(), getString(R.string.gtasks_help_title), android.R.drawable.ic_dialog_info, getString(R.string.gtasks_help_body), null); @@ -92,26 +93,25 @@ public class GtasksListActivity extends DraggableTaskListActivity { }; @Override - public boolean onPrepareOptionsMenu(Menu menu) { - super.onPrepareOptionsMenu(menu); + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + super.onCreateOptionsMenu(menu, inflater); MenuItem item = menu.add(Menu.NONE, MENU_CLEAR_COMPLETED_ID, Menu.FIRST, this.getString(R.string.gtasks_GTA_clear_completed)); item.setIcon(android.R.drawable.ic_input_delete); // Needs new icon - return true; } @Override - public boolean onMenuItemSelected(int featureId, final MenuItem item) { + public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == MENU_CLEAR_COMPLETED_ID) { clearCompletedTasks(); return true; } else { - return super.onMenuItemSelected(featureId, item); + return super.onOptionsItemSelected(item); } } private void clearCompletedTasks() { - final ProgressDialog pd = new ProgressDialog(this); + final ProgressDialog pd = new ProgressDialog(getActivity()); final TodorooCursor tasks = taskService.fetchFiltered(filter.sqlQuery, null, Task.ID, Task.COMPLETION_DATE); pd.setMessage(this.getString(R.string.gtasks_GTA_clearing)); pd.show(); @@ -133,12 +133,12 @@ public class GtasksListActivity extends DraggableTaskListActivity { } } finally { tasks.close(); - DialogUtilities.dismissDialog(GtasksListActivity.this, pd); + DialogUtilities.dismissDialog(getActivity(), pd); } if (listId != null) { gtasksTaskListUpdater.correctMetadataForList(listId); } - GtasksListActivity.this.runOnUiThread(new Runnable() { + getActivity().runOnUiThread(new Runnable() { public void run() { loadTaskListContent(true); } @@ -180,7 +180,7 @@ public class GtasksListActivity extends DraggableTaskListActivity { } finally { tasks.close(); } - GtasksListActivity.this.runOnUiThread(new Runnable() { + getActivity().runOnUiThread(new Runnable() { public void run() { loadTaskListContent(true); } diff --git a/astrid/plugin-src/com/todoroo/astrid/reminders/NotificationActivity.java b/astrid/plugin-src/com/todoroo/astrid/reminders/NotificationActivity.java index f76fd5143..2cfc14698 100644 --- a/astrid/plugin-src/com/todoroo/astrid/reminders/NotificationActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/reminders/NotificationActivity.java @@ -108,43 +108,43 @@ public class NotificationActivity extends TaskListActivity implements OnTimeSetL */ private void displayNotificationPopup() { // hide quick add - findViewById(R.id.taskListFooter).setVisibility(View.GONE); + getView().findViewById(R.id.taskListFooter).setVisibility(View.GONE); // instantiate reminder window - ViewGroup parent = (ViewGroup) findViewById(R.id.taskListParent); - getLayoutInflater().inflate(R.layout.notification_control, parent, true); + ViewGroup parent = (ViewGroup) getView().findViewById(R.id.taskListParent); + getActivity().getLayoutInflater().inflate(R.layout.notification_control, parent, true); String reminder = Notifications.getRandomReminder(getResources().getStringArray(R.array.reminder_responses)); if(Preferences.getBoolean(R.string.p_rmd_nagging, true)) - ((TextView)findViewById(R.id.reminderLabel)).setText(reminder); + ((TextView)getView().findViewById(R.id.reminderLabel)).setText(reminder); else { - findViewById(R.id.reminderLabel).setVisibility(View.GONE); - findViewById(R.id.astridIcon).setVisibility(View.GONE); + getView().findViewById(R.id.reminderLabel).setVisibility(View.GONE); + getView().findViewById(R.id.astridIcon).setVisibility(View.GONE); } // set up listeners - ((Button)findViewById(R.id.goAway)).setOnClickListener(new OnClickListener() { + ((Button)getView().findViewById(R.id.goAway)).setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { - finish(); + getActivity().finish(); } }); - ((Button)findViewById(R.id.snooze)).setOnClickListener(new OnClickListener() { + ((Button)getView().findViewById(R.id.snooze)).setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { snooze(); } }); - ((Button)findViewById(R.id.done)).setOnClickListener(new OnClickListener() { + ((Button)getView().findViewById(R.id.done)).setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { Task task = new Task(); task.setId(taskId); PluginServices.getTaskService().setComplete(task, true); - finish(); + getActivity().finish(); } }); } @@ -157,10 +157,10 @@ public class NotificationActivity extends TaskListActivity implements OnTimeSetL NotificationActivity parent; public SnoozeDialog(NotificationActivity parent) { - super(parent); + super(parent.getActivity()); this.parent = parent; - LayoutInflater mInflater = (LayoutInflater) parent.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + LayoutInflater mInflater = (LayoutInflater) parent.getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); mInflater.inflate(R.layout.snooze_dialog, this, true); snoozePicker = (LinearLayout) findViewById(R.id.snoozePicker); @@ -211,18 +211,18 @@ public class NotificationActivity extends TaskListActivity implements OnTimeSetL now.setHours(now.getHours() + 1); int hour = now.getHours(); int minute = now.getMinutes(); - TimePickerDialog tpd = new TimePickerDialog(this, this, hour, minute, - DateUtilities.is24HourFormat(this)); + TimePickerDialog tpd = new TimePickerDialog(getActivity(), this, hour, minute, + DateUtilities.is24HourFormat(getActivity())); tpd.show(); - tpd.setOwnerActivity(this); + tpd.setOwnerActivity(getActivity()); } else { SnoozeDialog sd = new SnoozeDialog(this); - new AlertDialog.Builder(this) + new AlertDialog.Builder(getActivity()) .setTitle(R.string.rmd_NoA_snooze) .setView(sd) .setPositiveButton(android.R.string.ok, sd) .setNegativeButton(android.R.string.cancel, null) - .show().setOwnerActivity(this); + .show().setOwnerActivity(getActivity()); } } @@ -242,7 +242,7 @@ public class NotificationActivity extends TaskListActivity implements OnTimeSetL task.setId(taskId); task.setValue(Task.REMINDER_SNOOZE, time); PluginServices.getTaskService().save(task); - finish(); + getActivity().finish(); StatisticsService.reportEvent(StatisticsConstants.TASK_SNOOZE); } diff --git a/astrid/project.properties b/astrid/project.properties index a2116be0d..d7ae8bbc2 100644 --- a/astrid/project.properties +++ b/astrid/project.properties @@ -9,9 +9,10 @@ # Indicates whether an apk should be generated for each density. split.density=false -android.library.reference.3=../facebook/facebook/ -android.library.reference.1=../api/ -android.library.reference.2=../greendroid/GreenDroid/ +android.library.reference.3=../facebook/facebook +android.library.reference.1=../api +android.library.reference.2=../actionbarsherlock/library # Project target. target=android-14 apk-configurations= +android.library.reference.4=../greendroid/GreenDroid diff --git a/astrid/src/com/todoroo/astrid/activity/DraggableTaskListActivity.java b/astrid/src/com/todoroo/astrid/activity/DraggableTaskListActivity.java index a1f4f57fd..d66ec92ff 100644 --- a/astrid/src/com/todoroo/astrid/activity/DraggableTaskListActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/DraggableTaskListActivity.java @@ -4,9 +4,9 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.concurrent.atomic.AtomicReference; -import android.app.ListActivity; import android.database.Cursor; import android.os.Bundle; +import android.support.v4.app.ListFragment; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; @@ -52,7 +52,7 @@ public class DraggableTaskListActivity extends TaskListActivity { @Override protected View getListBody(ViewGroup root) { - return getLayoutInflater().inflate(R.layout.task_list_body_draggable, root, false); + return getActivity().getLayoutInflater().inflate(R.layout.task_list_body_draggable, root, false); } // --- task adapter @@ -66,12 +66,12 @@ public class DraggableTaskListActivity extends TaskListActivity { sqlQueryTemplate.set(SortHelper.adjustQueryForFlagsAndSort(filter.sqlQuery, sortFlags, sortSort)); - ((TextView)findViewById(R.id.listLabel)).setText(filter.title); + ((TextView)getView().findViewById(R.id.listLabel)).setText(filter.title); // perform query TodorooCursor currentCursor = taskService.fetchFiltered( sqlQueryTemplate.get(), null, getProperties()); - startManagingCursor(currentCursor); + getActivity().startManagingCursor(currentCursor); // set up list adapters taskAdapter = new DraggableTaskAdapter(this, R.layout.task_adapter_draggable_row, @@ -100,7 +100,7 @@ public class DraggableTaskListActivity extends TaskListActivity { private final class DraggableTaskAdapter extends TaskAdapter { - private DraggableTaskAdapter(ListActivity activity, int resource, + private DraggableTaskAdapter(ListFragment activity, int resource, Cursor c, AtomicReference query, boolean autoRequery, OnCompletedTaskListener onCompletedTaskListener) { super(activity, resource, c, query, autoRequery, diff --git a/astrid/src/com/todoroo/astrid/activity/FilterListActivity.java b/astrid/src/com/todoroo/astrid/activity/FilterListActivity.java index ef66662ef..91a80670c 100644 --- a/astrid/src/com/todoroo/astrid/activity/FilterListActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/FilterListActivity.java @@ -12,8 +12,8 @@ import org.json.JSONException; import org.weloveastrid.rmilk.MilkPreferences; import org.weloveastrid.rmilk.MilkUtilities; +import android.app.Activity; import android.app.AlertDialog; -import android.app.ExpandableListActivity; import android.app.Notification; import android.app.PendingIntent; import android.app.PendingIntent.CanceledException; @@ -35,11 +35,12 @@ import android.util.DisplayMetrics; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.KeyEvent; +import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; -import android.view.Window; +import android.view.ViewGroup; import android.view.inputmethod.EditorInfo; import android.widget.ArrayAdapter; import android.widget.EditText; @@ -47,6 +48,7 @@ import android.widget.ExpandableListView; import android.widget.ExpandableListView.ExpandableListContextMenuInfo; import android.widget.FrameLayout; import android.widget.ImageView; +import android.widget.ListView; import android.widget.TextView; import android.widget.TextView.OnEditorActionListener; import android.widget.Toast; @@ -91,22 +93,22 @@ import com.todoroo.astrid.utility.Constants; * @author Tim Su * */ -public class FilterListActivity extends ExpandableListActivity { +public class FilterListActivity extends ExpandableListFragment { // -- extra codes public static final String SHOW_BACK_BUTTON = "show_back"; //$NON-NLS-1$ // --- menu codes - private static final int MENU_SEARCH_ID = Menu.FIRST + 0; - private static final int MENU_HELP_ID = Menu.FIRST + 1; - private static final int MENU_REFRESH_ID = Menu.FIRST + 2; - private static final int MENU_NEW_FILTER_ID = Menu.FIRST + 3; + private static final int MENU_SEARCH_ID = R.string.FLA_menu_search; + private static final int MENU_HELP_ID = R.string.FLA_menu_help; + private static final int MENU_REFRESH_ID = R.string.actfm_FLA_menu_refresh; + private static final int MENU_NEW_FILTER_ID = R.string.FLA_new_filter; private static final String LAST_TAG_REFRESH_KEY = "last_tag_refresh"; //$NON-NLS-1$ - private static final int CONTEXT_MENU_SHORTCUT = Menu.FIRST + 4; - private static final int CONTEXT_MENU_INTENT = Menu.FIRST + 5; + private static final int CONTEXT_MENU_SHORTCUT = R.string.FLA_context_shortcut; + private static final int CONTEXT_MENU_INTENT = Menu.FIRST + 4; private static final int REQUEST_CUSTOM_INTENT = 1; private static final int REQUEST_VIEW_TASKS = 2; @@ -121,6 +123,7 @@ public class FilterListActivity extends ExpandableListActivity { protected SyncActionReceiver syncActionReceiver = new SyncActionReceiver(); private final LinkedHashSet syncActions = new LinkedHashSet(); protected FilterAdapter adapter = null; + private boolean mDualFragments; /* ====================================================================== * ======================================================= initialization @@ -132,13 +135,34 @@ public class FilterListActivity extends ExpandableListActivity { /** Called when loading up the activity */ @Override - protected void onCreate(Bundle savedInstanceState) { - requestWindowFeature(Window.FEATURE_NO_TITLE); + public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - new StartupService().onStartupApplication(this); - ThemeService.applyTheme(this); - setContentView(R.layout.filter_list_activity); + // Tell the framework to try to keep this fragment around + // during a configuration change. + setRetainInstance(true); + + new StartupService().onStartupApplication(getActivity()); + } + + /* (non-Javadoc) + * @see com.todoroo.astrid.fragment.ExpandableListFragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle) + */ + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + ViewGroup parent = (ViewGroup) getActivity().getLayoutInflater().inflate(R.layout.filter_list_activity, container, false); + ThemeService.applyTheme(parent); + return parent; + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + getActivity().setDefaultKeyMode(Activity.DEFAULT_KEYS_SEARCH_LOCAL); + // We have a menu item to show in action bar. + setHasOptionsMenu(true); + ImageView backButton = (ImageView) findViewById(R.id.back); if (!getIntent().getBooleanExtra(SHOW_BACK_BUTTON, true)) { backButton.setVisibility(View.GONE); @@ -153,7 +177,17 @@ public class FilterListActivity extends ExpandableListActivity { } }); - onNewIntent(getIntent()); + onContentChanged(); + + onNewIntent(getActivity().getIntent()); + + Fragment tasklistFrame = getFragmentManager().findFragmentById(R.id.tasklist_fragment); + mDualPane = (tasklistFrame != null) && tasklistFrame.isInLayout(); + + if (mDualPane) { + // In dual-pane mode, the list view highlights the selected item. + getExpandableListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); + } } @Override diff --git a/astrid/src/com/todoroo/astrid/activity/ShareLinkActivity.java b/astrid/src/com/todoroo/astrid/activity/ShareLinkActivity.java index ea475b252..a6df26e2a 100644 --- a/astrid/src/com/todoroo/astrid/activity/ShareLinkActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/ShareLinkActivity.java @@ -19,10 +19,10 @@ public final class ShareLinkActivity extends TaskListActivity { } @Override - protected void onCreate(Bundle savedInstanceState) { + public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - Intent callerIntent = getIntent(); + Intent callerIntent = getActivity().getIntent(); String subject = callerIntent.getStringExtra(Intent.EXTRA_SUBJECT); if(subject == null) @@ -30,7 +30,7 @@ public final class ShareLinkActivity extends TaskListActivity { Task task = quickAddTask(subject, false); task.setValue(Task.NOTES, callerIntent.getStringExtra(Intent.EXTRA_TEXT)); taskService.save(task); - Intent intent = new Intent(this, TaskEditActivity.class); + Intent intent = new Intent(getActivity(), TaskEditActivity.class); intent.putExtra(TaskEditActivity.TOKEN_ID, task.getId()); startActivityForResult(intent, ACTIVITY_EDIT_TASK); } diff --git a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java index 567b3186e..3441d38a4 100644 --- a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java @@ -11,8 +11,8 @@ import java.util.concurrent.atomic.AtomicReference; import org.weloveastrid.rmilk.MilkPreferences; import org.weloveastrid.rmilk.MilkUtilities; +import android.app.Activity; import android.app.AlertDialog; -import android.app.ListActivity; import android.app.PendingIntent.CanceledException; import android.app.SearchManager; import android.content.BroadcastReceiver; @@ -26,22 +26,23 @@ import android.content.SharedPreferences.Editor; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.database.Cursor; -import android.graphics.PixelFormat; import android.net.Uri; import android.os.Bundle; +import android.support.v4.app.ListFragment; +import android.support.v4.app.SupportActivity; +import android.support.v4.view.Menu; +import android.support.v4.view.MenuItem; import android.text.TextUtils; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.KeyEvent; -import android.view.Menu; -import android.view.MenuItem; +import android.view.LayoutInflater; +import android.view.MenuInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnKeyListener; import android.view.View.OnLongClickListener; import android.view.ViewGroup; -import android.view.Window; -import android.view.WindowManager; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; import android.widget.AbsListView; @@ -118,7 +119,7 @@ import com.todoroo.astrid.widget.TasksWidget; * @author Tim Su * */ -public class TaskListActivity extends ListActivity implements OnScrollListener, +public class TaskListActivity extends ListFragment implements OnScrollListener, GestureInterface, OnSortSelectedListener { // --- activities @@ -132,19 +133,19 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, // --- menu codes - protected static final int MENU_LISTS_ID = Menu.FIRST + 1; - protected static final int MENU_ADDONS_ID = Menu.FIRST + 2; - protected static final int MENU_SETTINGS_ID = Menu.FIRST + 3; - protected static final int MENU_SORT_ID = Menu.FIRST + 4; - protected static final int MENU_SYNC_ID = Menu.FIRST + 5; - protected static final int MENU_SUPPORT_ID = Menu.FIRST + 6; - protected static final int MENU_ADDON_INTENT_ID = Menu.FIRST + 7; - - protected static final int CONTEXT_MENU_EDIT_TASK_ID = Menu.FIRST + 20; - protected static final int CONTEXT_MENU_COPY_TASK_ID = Menu.FIRST + 21; - protected static final int CONTEXT_MENU_DELETE_TASK_ID = Menu.FIRST + 22; - protected static final int CONTEXT_MENU_UNDELETE_TASK_ID = Menu.FIRST + 23; - protected static final int CONTEXT_MENU_PURGE_TASK_ID = Menu.FIRST + 24; + protected static final int MENU_LISTS_ID = R.string.tag_TLA_menu; + protected static final int MENU_ADDONS_ID = R.string.TLA_menu_addons; + protected static final int MENU_SETTINGS_ID = R.string.TLA_menu_settings; + protected static final int MENU_SORT_ID = R.string.TLA_menu_sort; + protected static final int MENU_SYNC_ID = R.string.TLA_menu_sync; + protected static final int MENU_SUPPORT_ID = R.string.TLA_menu_support; + protected static final int MENU_ADDON_INTENT_ID = Menu.FIRST + 199; + + protected static final int CONTEXT_MENU_EDIT_TASK_ID = R.string.TAd_contextEditTask; + protected static final int CONTEXT_MENU_COPY_TASK_ID = R.string.TAd_contextCopyTask; + protected static final int CONTEXT_MENU_DELETE_TASK_ID = R.string.TAd_contextDeleteTask; + protected static final int CONTEXT_MENU_UNDELETE_TASK_ID = R.string.TAd_contextUndeleteTask; + protected static final int CONTEXT_MENU_PURGE_TASK_ID = R.string.TAd_contextPurgeTask; protected static final int CONTEXT_MENU_BROADCAST_INTENT_ID = Menu.FIRST + 25; protected static final int CONTEXT_MENU_PLUGIN_ID_FIRST = Menu.FIRST + 26; @@ -201,6 +202,10 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, private final TaskListContextMenuExtensionLoader contextMenuExtensionLoader = new TaskListContextMenuExtensionLoader(); private VoiceInputAssistant voiceInputAssistant; + // --- fragment handling variables + OnItemSelectedListener mListener; + private final boolean mDualFragments = false; + /* ====================================================================== * ======================================================= initialization * ====================================================================== */ @@ -209,6 +214,25 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, AstridDependencyInjector.initialize(); } + /** Container Activity must implement this interface and we ensure + * that it does during the onAttach() callback + */ + public interface OnItemSelectedListener { + public void onItemSelected(int category, int position); + } + + @Override + public void onAttach(SupportActivity activity) { + super.onAttach(activity); + // Check that the container activity has implemented the callback interface + try { + mListener = (OnItemSelectedListener) activity; + } catch (ClassCastException e) { + throw new ClassCastException(activity.toString() + + " must implement OnItemSelectedListener"); //$NON-NLS-1$ + } + } + /** * @return view to attach to the body of the task list. must contain two * elements, a view with id android:id/empty and a list view with id @@ -216,42 +240,72 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, */ protected View getListBody(ViewGroup root) { if(AndroidUtilities.getSdkVersion() > 3) - return getLayoutInflater().inflate(R.layout.task_list_body_standard, root, false); + return getActivity().getLayoutInflater().inflate(R.layout.task_list_body_standard, root, false); else - return getLayoutInflater().inflate(R.layout.task_list_body_api3, root, false); + return getActivity().getLayoutInflater().inflate(R.layout.task_list_body_api3, root, false); } /** Called when loading up the activity */ @Override - protected void onCreate(Bundle savedInstanceState) { - ContextManager.setContext(this); - requestWindowFeature(Window.FEATURE_NO_TITLE); + public void onCreate(Bundle savedInstanceState) { DependencyInjectionService.getInstance().inject(this); super.onCreate(savedInstanceState); + // Tell the framework to try to keep this fragment around + // during a configuration change. + setRetainInstance(true); - new StartupService().onStartupApplication(this); - ThemeService.applyTheme(this); - ViewGroup parent = (ViewGroup) getLayoutInflater().inflate(R.layout.task_list_activity, null); - parent.addView(getListBody(parent), 1); - setContentView(parent); + new StartupService().onStartupApplication(getActivity()); if(database == null) return; database.openForWriting(); + } + + + /* (non-Javadoc) + * @see android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle) + */ + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + ViewGroup parent = (ViewGroup) getActivity().getLayoutInflater().inflate( + R.layout.task_list_activity, container, false); + parent.addView(getListBody(parent), 1); + ThemeService.applyTheme(getActivity()); + + return parent; + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + // We have a menu item to show in action bar. + setHasOptionsMenu(true); + setUpUiComponents(); - onNewIntent(getIntent()); + onNewIntent(getActivity().getIntent()); + + // FIXME move this code into the TaskListWrapperActivity +// Fragment filterFrame = getFragmentManager().findFragmentById(R.id.filterlist_fragment); +// mDualPane = (filterFrame != null) && filterFrame.isInLayout(); +// +// if (mDualPane) { +// // In dual-pane mode, the list view highlights the selected item. +// getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); +// } + // end of FIXME if(Preferences.getInt(AstridPreferences.P_UPGRADE_FROM, -1) > -1) - upgradeService.showChangeLog(this, Preferences.getInt(AstridPreferences.P_UPGRADE_FROM, -1)); + upgradeService.showChangeLog(getActivity(), Preferences.getInt(AstridPreferences.P_UPGRADE_FROM, -1)); if (!Preferences.getBoolean(R.string.p_showed_add_task_help, false)) { - HelpInfoPopover.showPopover(TaskListActivity.this, quickAddBox, R.string.help_popover_add_task); + HelpInfoPopover.showPopover(getActivity(), quickAddBox, R.string.help_popover_add_task); Preferences.setBoolean(R.string.p_showed_add_task_help, true); } - if(getIntent().hasExtra(TOKEN_SOURCE)) { - switch(getIntent().getIntExtra(TOKEN_SOURCE, Constants.SOURCE_DEFAULT)) { + if(getActivity().getIntent().hasExtra(TOKEN_SOURCE)) { + switch(getActivity().getIntent().getIntExtra(TOKEN_SOURCE, Constants.SOURCE_DEFAULT)) { case Constants.SOURCE_NOTIFICATION: StatisticsService.reportEvent(StatisticsConstants.LAUNCH_FROM_NOTIFICATION); break; @@ -271,10 +325,7 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, } } - @Override protected void onNewIntent(Intent intent) { - super.onNewIntent(intent); - Bundle extras = intent.getExtras(); if (extras != null) { overrideFinishAnim = extras.getBoolean(TOKEN_OVERRIDE_ANIM); @@ -282,32 +333,34 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, overrideFinishAnim = false; } String intentAction = intent.getAction(); + // FIXME maybe SEARCH has to go into the Wrapper-activity and forward to the filterFragment if (Intent.ACTION_SEARCH.equals(intentAction)) { String query = intent.getStringExtra(SearchManager.QUERY).trim(); Filter searchFilter = new Filter(null, getString(R.string.FLA_search_filter, query), new QueryTemplate().where(Functions.upper(Task.TITLE).like("%" + //$NON-NLS-1$ query.toUpperCase() + "%")), //$NON-NLS-1$ null); - intent = new Intent(this, TaskListActivity.class); + intent = new Intent(getActivity(), TaskListActivity.class); intent.putExtra(TaskListActivity.TOKEN_FILTER, searchFilter); startActivity(intent); - finish(); +// finish(); return; } else if(extras != null && extras.containsKey(TOKEN_FILTER)) { filter = extras.getParcelable(TOKEN_FILTER); isFilter = true; } else { filter = CoreFilterExposer.buildInboxFilter(getResources()); - findViewById(R.id.headerLogo).setVisibility(View.VISIBLE); - findViewById(R.id.listLabel).setVisibility(View.GONE); + getView().findViewById(R.id.headerLogo).setVisibility(View.VISIBLE); + getView().findViewById(R.id.listLabel).setVisibility(View.GONE); isFilter = false; } setUpTaskList(); - if(Constants.DEBUG) - setTitle("[D] " + filter.title); //$NON-NLS-1$ + // FIXME put this into the wrapper activity +// if(Constants.DEBUG) +// setTitle("[D] " + filter.title); //$NON-NLS-1$ - contextMenuExtensionLoader.loadInNewThread(this); + contextMenuExtensionLoader.loadInNewThread(getActivity()); } protected void addSyncRefreshMenuItem(Menu menu) { @@ -322,10 +375,7 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, * @return true if menu should be displayed */ @Override - public boolean onPrepareOptionsMenu(Menu menu) { - if(menu.size() > 0) - menu.clear(); - + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { MenuItem item; if(!(this instanceof DraggableTaskListActivity)) { @@ -339,6 +389,7 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, item = menu.add(Menu.NONE, MENU_LISTS_ID, Menu.NONE, R.string.tag_TLA_menu); item.setIcon(R.drawable.ic_menu_lists); + item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); if(!Constants.MARKET_DISABLED) { item = menu.add(Menu.NONE, MENU_ADDONS_ID, Menu.NONE, @@ -356,7 +407,7 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, // ask about plug-ins Intent queryIntent = new Intent(AstridApiConstants.ACTION_TASK_LIST_MENU); - PackageManager pm = getPackageManager(); + PackageManager pm = getActivity().getPackageManager(); List resolveInfoList = pm.queryIntentActivities(queryIntent, 0); int length = resolveInfoList.size(); for(int i = 0; i < length; i++) { @@ -370,16 +421,17 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, resolveInfo.activityInfo.name); item.setIntent(intent); } - - return true; } private void setUpUiComponents() { - ((ImageView)findViewById(R.id.back)).setOnClickListener(new OnClickListener() { - public void onClick(View v) { - showFilterListActivity(); - } - }); + ImageView backButton = (ImageView)getView().findViewById(R.id.back); + if (backButton != null) { + backButton.setOnClickListener(new OnClickListener() { + public void onClick(View v) { + showFilterListActivity(); + } + }); + } // set listener for quick-changing task priority getListView().setOnKeyListener(new OnKeyListener() { @@ -414,7 +466,7 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, }); // set listener for pressing enter in quick-add box - quickAddBox = (EditText) findViewById(R.id.quickAddText); + quickAddBox = (EditText) getView().findViewById(R.id.quickAddText); quickAddBox.setOnEditorActionListener(new OnEditorActionListener() { /** * When user presses enter, quick-add the task @@ -430,7 +482,7 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, }); - quickAddButton = ((ImageButton)findViewById(R.id.quickAddButton)); + quickAddButton = ((ImageButton)getView().findViewById(R.id.quickAddButton)); // set listener for quick add button quickAddButton.setOnClickListener(new OnClickListener() { @@ -445,11 +497,11 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, }); // prepare and set listener for voice add button - voiceAddButton = (ImageButton) findViewById(R.id.voiceAddButton); + voiceAddButton = (ImageButton) getView().findViewById(R.id.voiceAddButton); int prompt = R.string.voice_edit_title_prompt; if (Preferences.getBoolean(R.string.p_voiceInputCreatesTask, false)) prompt = R.string.voice_create_prompt; - voiceInputAssistant = new VoiceInputAssistant(this,voiceAddButton,quickAddBox); + voiceInputAssistant = new VoiceInputAssistant(getActivity(),voiceAddButton,quickAddBox); voiceInputAssistant.configureMicrophoneButton(prompt); // set listener for extended addbutton @@ -468,18 +520,14 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, // gestures / animation try { - GestureService.registerGestureDetector(this, R.id.gestures, R.raw.gestures, this); + GestureService.registerGestureDetector(getActivity(), R.id.gestures, R.raw.gestures, this); } catch (VerifyError e) { // failed check, no gestures :P } - SharedPreferences publicPrefs = AstridPreferences.getPublicPrefs(this); + SharedPreferences publicPrefs = AstridPreferences.getPublicPrefs(getActivity()); sortFlags = publicPrefs.getInt(SortHelper.PREF_SORT_FLAGS, 0); sortSort = publicPrefs.getInt(SortHelper.PREF_SORT_SORT, 0); - - // dithering - getWindow().setFormat(PixelFormat.RGBA_8888); - getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER); } private void initiateAutomaticSync() { @@ -494,20 +542,20 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, @Override public void run() { Preferences.setLong(LAST_AUTOSYNC_ATTEMPT, DateUtilities.now()); - new ActFmSyncProvider().synchronize(TaskListActivity.this); + new ActFmSyncProvider().synchronize(getActivity()); } }.start(); } // Subclasses can override these to customize extras in quickadd intent protected Intent getOnClickQuickAddIntent(Task t) { - Intent intent = new Intent(TaskListActivity.this, TaskEditActivity.class); + Intent intent = new Intent(getActivity(), TaskEditActivity.class); intent.putExtra(TaskEditActivity.TOKEN_ID, t.getId()); return intent; } protected Intent getOnLongClickQuickAddIntent(Task t) { - Intent intent = new Intent(TaskListActivity.this, TaskEditActivity.class); + Intent intent = new Intent(getActivity(), TaskEditActivity.class); intent.putExtra(TaskEditActivity.TOKEN_ID, t.getId()); return intent; } @@ -527,7 +575,7 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, public void run() { // refresh if conditions match Flags.checkAndClear(Flags.REFRESH); - runOnUiThread(new Runnable() { + getActivity().runOnUiThread(new Runnable() { @Override public void run() { loadTaskListContent(true); @@ -542,20 +590,20 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, * ====================================================================== */ @Override - protected void onStart() { + public void onStart() { super.onStart(); } @Override - protected void onStop() { - StatisticsService.sessionStop(this); + public void onStop() { + StatisticsService.sessionStop(getActivity()); super.onStop(); } @Override - protected void onResume() { + public void onResume() { super.onResume(); - StatisticsService.sessionStart(this); + StatisticsService.sessionStart(getActivity()); if (addOnService.hasPowerPack() && Preferences.getBoolean(R.string.p_voiceInputEnabled, true) && voiceInputAssistant.isVoiceInputAvailable()) { @@ -564,15 +612,15 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, voiceAddButton.setVisibility(View.GONE); } - registerReceiver(detailReceiver, + getActivity().registerReceiver(detailReceiver, new IntentFilter(AstridApiConstants.BROADCAST_SEND_DETAILS)); - registerReceiver(detailReceiver, + getActivity().registerReceiver(detailReceiver, new IntentFilter(AstridApiConstants.BROADCAST_SEND_DECORATIONS)); - registerReceiver(detailReceiver, + getActivity().registerReceiver(detailReceiver, new IntentFilter(AstridApiConstants.BROADCAST_SEND_ACTIONS)); - registerReceiver(refreshReceiver, + getActivity().registerReceiver(refreshReceiver, new IntentFilter(AstridApiConstants.BROADCAST_EVENT_REFRESH)); - registerReceiver(syncActionReceiver, + getActivity().registerReceiver(syncActionReceiver, new IntentFilter(AstridApiConstants.BROADCAST_SEND_SYNC_ACTIONS)); setUpBackgroundJobs(); @@ -582,13 +630,13 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, } @Override - protected void onPause() { + public void onPause() { super.onPause(); StatisticsService.sessionPause(); try { - unregisterReceiver(detailReceiver); - unregisterReceiver(refreshReceiver); - unregisterReceiver(syncActionReceiver); + getActivity().unregisterReceiver(detailReceiver); + getActivity().unregisterReceiver(refreshReceiver); + getActivity().unregisterReceiver(syncActionReceiver); } catch (IllegalArgumentException e) { // might not have fully initialized } @@ -617,7 +665,7 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, if(intent == null || !AstridApiConstants.BROADCAST_EVENT_REFRESH.equals(intent.getAction())) return; - runOnUiThread(new Runnable() { + getActivity().runOnUiThread(new Runnable() { @Override public void run() { taskAdapter.flushCaches(); @@ -681,9 +729,9 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, } } - @Override public void onWindowFocusChanged(boolean hasFocus) { - super.onWindowFocusChanged(hasFocus); + // FIXME: move to parent Activity +// super.onWindowFocusChanged(hasFocus); if(hasFocus && Flags.checkAndClear(Flags.REFRESH)) { taskAdapter.flushCaches(); loadTaskListContent(true); @@ -691,7 +739,7 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, } @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { + public void onActivityResult(int requestCode, int resultCode, Intent data) { // handle the result of voice recognition, put it into the textfield if (voiceInputAssistant.handleActivityResult(requestCode, resultCode, data)) { // if user wants, create the task directly (with defaultvalues) after saying it @@ -704,13 +752,13 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, } if(requestCode == ACTIVITY_SETTINGS && resultCode == EditPreferences.RESULT_CODE_THEME_CHANGED) { - finish(); - startActivity(getIntent()); + getActivity().finish(); + getActivity().startActivity(getActivity().getIntent()); } super.onActivityResult(requestCode, resultCode, data); - if(resultCode != RESULT_CANCELED) { + if(resultCode != Activity.RESULT_CANCELED) { taskAdapter.flushCaches(); loadTaskListContent(true); taskService.cleanup(); @@ -766,7 +814,7 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, taskAdapter.flushCaches(); taskAdapter.notifyDataSetChanged(); } - startManagingCursor(taskCursor); + getActivity().startManagingCursor(taskCursor); if(oldListItemSelected != ListView.INVALID_POSITION && oldListItemSelected < taskCursor.getCount()) @@ -775,13 +823,14 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, // also load sync actions syncActions.clear(); Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_REQUEST_SYNC_ACTIONS); - sendOrderedBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ); + getActivity().sendOrderedBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ); } - @Override - public void setTitle(CharSequence title) { - ((TextView)findViewById(R.id.listLabel)).setText(title); - } + // FIXME: put this into the wrapper-activity eventually +// @Override +// public void setTitle(CharSequence title) { +// ((TextView)findViewById(R.id.listLabel)).setText(title); +// } /** * Fill in the Task List with current items @@ -793,12 +842,13 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, sqlQueryTemplate.set(SortHelper.adjustQueryForFlagsAndSort(filter.sqlQuery, sortFlags, sortSort)); - setTitle(filter.title); + // FIXME: put this into the wrapper-activity eventually +// setTitle(filter.title); // perform query TodorooCursor currentCursor = taskService.fetchFiltered( sqlQueryTemplate.get(), null, TaskAdapter.PROPERTIES); - startManagingCursor(currentCursor); + getActivity().startManagingCursor(currentCursor); // set up list adapters taskAdapter = new TaskAdapter(this, R.layout.task_adapter_row, @@ -843,13 +893,13 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, currentCursor = taskService.fetchFiltered(sqlQueryTemplate.get(), null, TaskAdapter.PROPERTIES); getListView().setFilterText(""); - startManagingCursor(currentCursor); + getActivity().startManagingCursor(currentCursor); taskAdapter.changeCursor(currentCursor); // update title filter.title = getString(R.string.TLA_custom); - ((TextView)findViewById(R.id.listLabel)).setText(filter.title); + ((TextView)getView().findViewById(R.id.listLabel)).setText(filter.title); // try selecting again for(int i = 0; i < currentCursor.getCount(); i++) { @@ -865,13 +915,13 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, private void showHelpPopover() { if (!Preferences.getBoolean(R.string.p_showed_tap_task_help, false)) { Preferences.setBoolean(R.string.p_showed_tap_task_help, true); - InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(quickAddBox.getWindowToken(), 0); getListView().postDelayed(new Runnable() { public void run() { final View view = getListView().getChildAt(getListView().getChildCount() - 1); if (view != null) { - HelpInfoPopover.showPopover(TaskListActivity.this, view, R.string.help_popover_tap_task); + HelpInfoPopover.showPopover(getActivity(), view, R.string.help_popover_tap_task); } } }, 1000L); @@ -910,12 +960,12 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, boolean gcalCreateEventEnabled = Preferences.getStringValue(R.string.gcal_p_default) != null && !Preferences.getStringValue(R.string.gcal_p_default).equals("-1"); if (title.length()>0 && gcalCreateEventEnabled) { - Uri calendarUri = GCalHelper.createTaskEvent(task, getContentResolver(), new ContentValues()); + Uri calendarUri = GCalHelper.createTaskEvent(task, getActivity().getContentResolver(), new ContentValues()); task.setValue(Task.CALENDAR_URI, calendarUri.toString()); taskService.save(task); } - TextView quickAdd = (TextView)findViewById(R.id.quickAddText); + TextView quickAdd = (TextView)getView().findViewById(R.id.quickAddText); quickAdd.setText(""); //$NON-NLS-1$ if(selectNewTask) { @@ -926,7 +976,7 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, StatisticsService.reportEvent(StatisticsConstants.TASK_CREATED_TASKLIST); return task; } catch (Exception e) { - exceptionService.displayAndReportError(this, "quick-add-task", e); + exceptionService.displayAndReportError(getActivity(), "quick-add-task", e); return new Task(); } } @@ -1010,7 +1060,7 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, long taskId = task.getId(); for(ContextMenuItem item : contextMenuExtensionLoader.getList()) { - MenuItem menuItem = menu.add(id, CONTEXT_MENU_BROADCAST_INTENT_ID, Menu.NONE, + android.view.MenuItem menuItem = menu.add(id, CONTEXT_MENU_BROADCAST_INTENT_ID, Menu.NONE, item.title); item.intent.putExtra(AstridApiConstants.EXTRAS_TASK_ID, taskId); menuItem.setIntent(item.intent); @@ -1024,7 +1074,7 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, /** Show a dialog box and delete the task specified */ private void deleteTask(final Task task) { - new AlertDialog.Builder(this).setTitle(R.string.DLG_confirm_title) + new AlertDialog.Builder(getActivity()).setTitle(R.string.DLG_confirm_title) .setMessage(R.string.DLG_delete_this_task_question).setIcon( android.R.drawable.ic_dialog_alert).setPositiveButton( android.R.string.ok, @@ -1061,7 +1111,7 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, // Get a list of all sync plugins and bring user to the prefs pane // for one of them Intent queryIntent = new Intent(AstridApiConstants.ACTION_SETTINGS); - PackageManager pm = getPackageManager(); + PackageManager pm = getActivity().getPackageManager(); List resolveInfoList = pm.queryIntentActivities( queryIntent, PackageManager.GET_META_DATA); int length = resolveInfoList.size(); @@ -1100,7 +1150,7 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, SyncAction syncAction = syncActions.iterator().next(); try { syncAction.intent.send(); - Toast.makeText(this, R.string.SyP_progress_toast, + Toast.makeText(getActivity(), R.string.SyP_progress_toast, Toast.LENGTH_LONG).show(); } catch (CanceledException e) { // @@ -1114,7 +1164,7 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, public void onClick(DialogInterface click, int which) { try { actions[which].intent.send(); - Toast.makeText(TaskListActivity.this, R.string.SyP_progress_toast, + Toast.makeText(getActivity(), R.string.SyP_progress_toast, Toast.LENGTH_LONG).show(); } catch (CanceledException e) { // @@ -1133,18 +1183,24 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, * @param listener */ private void showSyncOptionMenu(TYPE[] items, DialogInterface.OnClickListener listener) { - ArrayAdapter adapter = new ArrayAdapter(this, + ArrayAdapter adapter = new ArrayAdapter(getActivity(), android.R.layout.simple_spinner_dropdown_item, items); // show a menu of available options - new AlertDialog.Builder(this) + new AlertDialog.Builder(getActivity()) .setTitle(R.string.SyP_label) .setAdapter(adapter, listener) - .show().setOwnerActivity(this); + .show().setOwnerActivity(getActivity()); + } + + @Override + public boolean onContextItemSelected(MenuItem item) { + // called when context menu appears + return onOptionsItemSelected(item); } @Override - public boolean onMenuItemSelected(int featureId, final MenuItem item) { + public boolean onOptionsItemSelected(final MenuItem item) { Intent intent; long itemId; @@ -1156,17 +1212,17 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, return true; case MENU_ADDONS_ID: StatisticsService.reportEvent(StatisticsConstants.TLA_MENU_ADDONS); - intent = new Intent(this, AddOnActivity.class); + intent = new Intent(getActivity(), AddOnActivity.class); startActivityForResult(intent, ACTIVITY_ADDONS); return true; case MENU_SETTINGS_ID: StatisticsService.reportEvent(StatisticsConstants.TLA_MENU_SETTINGS); - intent = new Intent(this, EditPreferences.class); + intent = new Intent(getActivity(), EditPreferences.class); startActivityForResult(intent, ACTIVITY_SETTINGS); return true; case MENU_SORT_ID: StatisticsService.reportEvent(StatisticsConstants.TLA_MENU_SORT); - AlertDialog dialog = SortSelectionActivity.createDialog(this, + AlertDialog dialog = SortSelectionActivity.createDialog(getActivity(), this, sortFlags, sortSort); dialog.show(); return true; @@ -1176,25 +1232,25 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, return true; case MENU_SUPPORT_ID: StatisticsService.reportEvent(StatisticsConstants.TLA_MENU_HELP); - intent = new Intent(this, FeedbackActivity.class); + intent = new Intent(getActivity(), FeedbackActivity.class); startActivity(intent); return true; case MENU_ADDON_INTENT_ID: intent = item.getIntent(); - AndroidUtilities.startExternalIntent(this, intent, ACTIVITY_MENU_EXTERNAL); + AndroidUtilities.startExternalIntent(getActivity(), intent, ACTIVITY_MENU_EXTERNAL); return true; // --- context menu items case CONTEXT_MENU_BROADCAST_INTENT_ID: { intent = item.getIntent(); - sendBroadcast(intent); + getActivity().sendBroadcast(intent); return true; } case CONTEXT_MENU_EDIT_TASK_ID: { itemId = item.getGroupId(); - intent = new Intent(TaskListActivity.this, TaskEditActivity.class); + intent = new Intent(getActivity(), TaskEditActivity.class); intent.putExtra(TaskEditActivity.TOKEN_ID, itemId); startActivityForResult(intent, ACTIVITY_EDIT_TASK); transitionForTaskEdit(); @@ -1217,7 +1273,7 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, GCalHelper.createTaskEventIfEnabled(clone); taskService.save(clone); - intent = new Intent(TaskListActivity.this, TaskEditActivity.class); + intent = new Intent(getActivity(), TaskEditActivity.class); intent.putExtra(TaskEditActivity.TOKEN_ID, clone.getId()); startActivityForResult(intent, ACTIVITY_EDIT_TASK); transitionForTaskEdit(); @@ -1276,9 +1332,10 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, @SuppressWarnings("nls") private void showFilterListActivity() { - Intent intent = new Intent(TaskListActivity.this, + Intent intent = new Intent(getActivity(), FilterListActivity.class); startActivity(intent); + // FIXME animations AndroidUtilities.callApiMethod(5, this, "overridePendingTransition", new Class[] { Integer.TYPE, Integer.TYPE }, R.anim.slide_right_in, R.anim.slide_right_out); @@ -1290,7 +1347,7 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, sortSort = sort; if(always) { - SharedPreferences publicPrefs = AstridPreferences.getPublicPrefs(this); + SharedPreferences publicPrefs = AstridPreferences.getPublicPrefs(getActivity()); Editor editor = publicPrefs.edit(); editor.putInt(SortHelper.PREF_SORT_FLAGS, flags); editor.putInt(SortHelper.PREF_SORT_SORT, sort); diff --git a/astrid/src/com/todoroo/astrid/adapter/TaskAdapter.java b/astrid/src/com/todoroo/astrid/adapter/TaskAdapter.java index 7250ac9a5..e506a8542 100644 --- a/astrid/src/com/todoroo/astrid/adapter/TaskAdapter.java +++ b/astrid/src/com/todoroo/astrid/adapter/TaskAdapter.java @@ -17,7 +17,6 @@ import java.util.concurrent.atomic.AtomicReference; import org.json.JSONException; import org.json.JSONObject; -import android.app.ListActivity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -29,6 +28,7 @@ import android.graphics.Color; import android.graphics.Paint; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; +import android.support.v4.app.ListFragment; import android.text.Html; import android.text.Html.ImageGetter; import android.text.Html.TagHandler; @@ -61,6 +61,7 @@ import com.timsu.astrid.R; import com.todoroo.andlib.data.Property; import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.service.Autowired; +import com.todoroo.andlib.service.ContextManager; import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.service.ExceptionService; import com.todoroo.andlib.utility.AndroidUtilities; @@ -135,7 +136,7 @@ public class TaskAdapter extends CursorAdapter implements Filterable { @Autowired private TaskService taskService; - protected final ListActivity activity; + protected final ListFragment fragment; protected final HashMap completedItems = new HashMap(0); protected OnCompletedTaskListener onCompletedTaskListener = null; public boolean isFling = false; @@ -164,7 +165,7 @@ public class TaskAdapter extends CursorAdapter implements Filterable { /** * Constructor * - * @param activity + * @param fragment * @param resource * layout resource to inflate * @param c @@ -174,24 +175,24 @@ public class TaskAdapter extends CursorAdapter implements Filterable { * @param onCompletedTaskListener * task listener. can be null */ - public TaskAdapter(ListActivity activity, int resource, + public TaskAdapter(ListFragment fragment, int resource, Cursor c, AtomicReference query, boolean autoRequery, OnCompletedTaskListener onCompletedTaskListener) { - super(activity, c, autoRequery); + super(ContextManager.getContext(), c, autoRequery); DependencyInjectionService.getInstance().inject(this); - inflater = (LayoutInflater) activity.getSystemService( + inflater = (LayoutInflater) fragment.getActivity().getSystemService( Context.LAYOUT_INFLATER_SERVICE); this.query = query; this.resource = resource; - this.activity = activity; + this.fragment = fragment; this.onCompletedTaskListener = onCompletedTaskListener; fontSize = Preferences.getIntegerFromString(R.string.p_fontSize, 20); paint = new Paint(); displayMetrics = new DisplayMetrics(); - activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); + fragment.getActivity().getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); detailLoader = new DetailLoaderThread(); detailLoader.start(); @@ -213,7 +214,7 @@ public class TaskAdapter extends CursorAdapter implements Filterable { // perform query TodorooCursor newCursor = taskService.fetchFiltered( query.get(), constraint, TaskAdapter.PROPERTIES); - activity.startManagingCursor(newCursor); + fragment.getActivity().startManagingCursor(newCursor); return newCursor; } @@ -299,7 +300,7 @@ public class TaskAdapter extends CursorAdapter implements Filterable { /** Helper method to set the contents and visibility of each field */ public synchronized void setFieldContentsAndVisibility(View view) { - Resources r = activity.getResources(); + Resources r = fragment.getResources(); ViewHolder viewHolder = (ViewHolder)view.getTag(); Task task = viewHolder.task; @@ -320,17 +321,17 @@ public class TaskAdapter extends CursorAdapter implements Filterable { if(!task.isCompleted() && task.hasDueDate()) { long dueDate = task.getValue(Task.DUE_DATE); if(dueDate > DateUtilities.now()) - dueDateView.setTextAppearance(activity, R.style.TextAppearance_TAd_ItemDueDate); + dueDateView.setTextAppearance(fragment.getActivity(), R.style.TextAppearance_TAd_ItemDueDate); else - dueDateView.setTextAppearance(activity, R.style.TextAppearance_TAd_ItemDueDate_Overdue); + dueDateView.setTextAppearance(fragment.getActivity(), R.style.TextAppearance_TAd_ItemDueDate_Overdue); String dateValue = formatDate(dueDate); dueDateView.setText(dateValue); dueDateTextWidth = paint.measureText(dateValue); setVisibility(dueDateView); } else if(task.isCompleted()) { - String dateValue = DateUtilities.getDateStringWithTime(activity, new Date(task.getValue(Task.COMPLETION_DATE))); + String dateValue = DateUtilities.getDateStringWithTime(fragment.getActivity(), new Date(task.getValue(Task.COMPLETION_DATE))); dueDateView.setText(r.getString(R.string.TAd_completed, dateValue)); - dueDateView.setTextAppearance(activity, R.style.TextAppearance_TAd_ItemDueDate_Completed); + dueDateView.setTextAppearance(fragment.getActivity(), R.style.TextAppearance_TAd_ItemDueDate_Completed); dueDateTextWidth = paint.measureText(dateValue); setVisibility(dueDateView); } else { @@ -499,10 +500,10 @@ public class TaskAdapter extends CursorAdapter implements Filterable { if(dateCache.containsKey(date)) return dateCache.get(date); - String string = DateUtilities.getRelativeDay(activity, date); + String string = DateUtilities.getRelativeDay(fragment.getActivity(), date); if(Task.hasDueTime(date)) string = String.format("%s, %s", string, //$NON-NLS-1$ - DateUtilities.getTimeString(activity, new Date(date))); + DateUtilities.getTimeString(fragment.getActivity(), new Date(date))); dateCache.put(date, string); return string; @@ -555,7 +556,7 @@ public class TaskAdapter extends CursorAdapter implements Filterable { requestNewDetails(task); } if(taskDetailLoader.size() > 0) { - activity.runOnUiThread(new Runnable() { + fragment.getActivity().runOnUiThread(new Runnable() { @Override public void run() { notifyDataSetChanged(); @@ -582,7 +583,7 @@ public class TaskAdapter extends CursorAdapter implements Filterable { private void requestNewDetails(Task task) { Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_REQUEST_DETAILS); broadcastIntent.putExtra(AstridApiConstants.EXTRAS_TASK_ID, task.getId()); - activity.sendOrderedBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ); + fragment.getActivity().sendOrderedBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ); } } @@ -609,7 +610,7 @@ public class TaskAdapter extends CursorAdapter implements Filterable { taskService.save(task); } - activity.runOnUiThread(new Runnable() { + fragment.getActivity().runOnUiThread(new Runnable() { @Override public void run() { notifyDataSetChanged(); @@ -622,7 +623,7 @@ public class TaskAdapter extends CursorAdapter implements Filterable { new HashMap(3); @SuppressWarnings("nls") public Drawable getDrawable(String source) { - Resources r = activity.getResources(); + Resources r = fragment.getResources(); if(source.equals("silk_clock")) source = "details_alarm"; @@ -682,7 +683,7 @@ public class TaskAdapter extends CursorAdapter implements Filterable { public class DecorationManager extends TaskAdapterAddOnManager { public DecorationManager() { - super(activity); + super(fragment); } private final TaskDecorationExposer[] exposers = new TaskDecorationExposer[] { @@ -737,7 +738,7 @@ public class TaskAdapter extends CursorAdapter implements Filterable { viewHolder.view.setBackgroundColor(decoration.color); } if(decoration.decoration != null) { - View view = decoration.decoration.apply(activity, viewHolder.taskRow); + View view = decoration.decoration.apply(fragment.getActivity(), viewHolder.taskRow); viewHolder.decorations[i] = view; switch(decoration.position) { case TaskDecoration.POSITION_LEFT: { @@ -788,7 +789,7 @@ public class TaskAdapter extends CursorAdapter implements Filterable { private final Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_REQUEST_ACTIONS); public TaskActionManager() { - super(activity); + super(fragment); } @Override @@ -801,7 +802,7 @@ public class TaskAdapter extends CursorAdapter implements Filterable { public synchronized void addNew(long taskId, String addOn, final TaskAction item, ViewHolder thisViewHolder) { addIfNotExists(taskId, addOn, item); if(mBar != null) { - ListView listView = activity.getListView(); + ListView listView = fragment.getListView(); ViewHolder myHolder = null; // update view if it is visible @@ -816,7 +817,7 @@ public class TaskAdapter extends CursorAdapter implements Filterable { if(myHolder != null) { final ViewHolder viewHolder = myHolder; - activity.runOnUiThread(new Runnable() { + fragment.getActivity().runOnUiThread(new Runnable() { @Override public void run() { mBarListener.addWithAction(item); @@ -888,16 +889,16 @@ public class TaskAdapter extends CursorAdapter implements Filterable { itemCount = 0; positionActionMap.clear(); mBar.setOnQuickActionClickListener(this); - iconWidth = activity.getResources().getDrawable(R.drawable.ic_qbar_edit).getIntrinsicHeight(); + iconWidth = fragment.getResources().getDrawable(R.drawable.ic_qbar_edit).getIntrinsicHeight(); } public void addWithAction(TaskAction item) { Drawable drawable; if(item.drawable > 0) - drawable = activity.getResources().getDrawable(item.drawable); + drawable = fragment.getResources().getDrawable(item.drawable); else { Bitmap scaledBitmap = Bitmap.createScaledBitmap(item.icon, iconWidth, iconWidth, true); - drawable = new BitmapDrawable(activity.getResources(), scaledBitmap); + drawable = new BitmapDrawable(fragment.getResources(), scaledBitmap); } addWithAction(new QuickAction(drawable, item.text), item); } @@ -913,10 +914,10 @@ public class TaskAdapter extends CursorAdapter implements Filterable { mBar = null; if(position == 0) { - Intent intent = new Intent(activity, TaskEditActivity.class); + Intent intent = new Intent(fragment.getActivity(), TaskEditActivity.class); intent.putExtra(TaskEditActivity.TOKEN_ID, taskId); - activity.startActivityForResult(intent, TaskListActivity.ACTIVITY_EDIT_TASK); - AndroidUtilities.callApiMethod(5, activity, "overridePendingTransition", + fragment.startActivityForResult(intent, TaskListActivity.ACTIVITY_EDIT_TASK); + AndroidUtilities.callApiMethod(5, fragment, "overridePendingTransition", new Class[] { Integer.TYPE, Integer.TYPE }, R.anim.slide_left_in, R.anim.slide_left_out); } else { @@ -927,7 +928,7 @@ public class TaskAdapter extends CursorAdapter implements Filterable { taskAction.intent.send(); } } catch (Exception e) { - exceptionService.displayAndReportError(activity, + exceptionService.displayAndReportError(fragment.getActivity(), "Error launching action", e); //$NON-NLS-1$ } } @@ -940,8 +941,8 @@ public class TaskAdapter extends CursorAdapter implements Filterable { // prepare quick action bar private void prepareQuickActionBar(ViewHolder viewHolder, Collection collection){ mBar = new QuickActionBar(viewHolder.view.getContext()); - QuickAction editAction = new QuickAction(activity, R.drawable.ic_qbar_edit, - activity.getString(R.string.TAd_actionEditTask)); + QuickAction editAction = new QuickAction(fragment.getActivity(), R.drawable.ic_qbar_edit, + fragment.getString(R.string.TAd_actionEditTask)); mBarListener.initialize(viewHolder.task.getId()); mBarListener.addWithAction(editAction, null); @@ -975,18 +976,18 @@ public class TaskAdapter extends CursorAdapter implements Filterable { if (actions.size() > 0) mBar.show(v); else { - Intent intent = new Intent(activity, TaskEditActivity.class); + Intent intent = new Intent(fragment.getActivity(), TaskEditActivity.class); intent.putExtra(TaskEditActivity.TOKEN_ID, taskId); - activity.startActivityForResult(intent, TaskListActivity.ACTIVITY_EDIT_TASK); - AndroidUtilities.callApiMethod(5, activity, "overridePendingTransition", + fragment.getActivity().startActivityForResult(intent, TaskListActivity.ACTIVITY_EDIT_TASK); + AndroidUtilities.callApiMethod(5, fragment, "overridePendingTransition", new Class[] { Integer.TYPE, Integer.TYPE }, R.anim.slide_left_in, R.anim.slide_left_out); } - } else { + } else if (!viewHolder.task.getFlag(Task.FLAGS, Task.FLAG_IS_READONLY)) { // Register a temporary receiver in case we clicked a task with no actions forthcoming and should start IntentFilter filter = new IntentFilter(AstridApiConstants.BROADCAST_REQUEST_ACTIONS); filter.setPriority(-1); - activity.registerReceiver(new TaskActionsFinishedReceiver(), filter); + fragment.getActivity().registerReceiver(new TaskActionsFinishedReceiver(), filter); } taskActionManager.request(viewHolder); @@ -1004,15 +1005,15 @@ public class TaskAdapter extends CursorAdapter implements Filterable { if (taskId != -1) { Collection actions = taskActionManager.get(taskId); if (actions != null && actions.size() == 0) { - Intent editIntent = new Intent(activity, TaskEditActivity.class); + Intent editIntent = new Intent(fragment.getActivity(), TaskEditActivity.class); editIntent.putExtra(TaskEditActivity.TOKEN_ID, taskId); - activity.startActivityForResult(editIntent, TaskListActivity.ACTIVITY_EDIT_TASK); - AndroidUtilities.callApiMethod(5, activity, "overridePendingTransition", + fragment.getActivity().startActivityForResult(editIntent, TaskListActivity.ACTIVITY_EDIT_TASK); + AndroidUtilities.callApiMethod(5, fragment, "overridePendingTransition", new Class[] { Integer.TYPE, Integer.TYPE }, R.anim.slide_left_in, R.anim.slide_left_out); } } - activity.unregisterReceiver(this); + fragment.getActivity().unregisterReceiver(this); } } @@ -1044,10 +1045,10 @@ public class TaskAdapter extends CursorAdapter implements Filterable { TextView name = viewHolder.nameView; if(state) { name.setPaintFlags(name.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); - name.setTextAppearance(activity, R.style.TextAppearance_TAd_ItemTitle_Completed); + name.setTextAppearance(fragment.getActivity(), R.style.TextAppearance_TAd_ItemTitle_Completed); } else { name.setPaintFlags(name.getPaintFlags() & ~Paint.STRIKE_THRU_TEXT_FLAG); - name.setTextAppearance(activity, R.style.TextAppearance_TAd_ItemTitle); + name.setTextAppearance(fragment.getActivity(), R.style.TextAppearance_TAd_ItemTitle); } name.setTextSize(fontSize); float detailTextSize = Math.max(10, fontSize * 12 / 20); diff --git a/astrid/src/com/todoroo/astrid/helper/TaskAdapterAddOnManager.java b/astrid/src/com/todoroo/astrid/helper/TaskAdapterAddOnManager.java index 9c1cde15e..4675cb1ba 100644 --- a/astrid/src/com/todoroo/astrid/helper/TaskAdapterAddOnManager.java +++ b/astrid/src/com/todoroo/astrid/helper/TaskAdapterAddOnManager.java @@ -9,8 +9,8 @@ import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; -import android.app.ListActivity; import android.content.Intent; +import android.support.v4.app.ListFragment; import android.widget.ListView; import com.todoroo.astrid.adapter.TaskAdapter.ViewHolder; @@ -19,13 +19,13 @@ import com.todoroo.astrid.data.Task; abstract public class TaskAdapterAddOnManager { - private final ListActivity activity; + private final ListFragment fragment; /** * @param taskAdapter */ - protected TaskAdapterAddOnManager(ListActivity activity) { - this.activity = activity; + protected TaskAdapterAddOnManager(ListFragment fragment) { + this.fragment = fragment; } private final Map> cache = @@ -50,7 +50,7 @@ abstract public class TaskAdapterAddOnManager { draw(viewHolder, taskId, get(taskId)); Intent broadcastIntent = createBroadcastIntent(viewHolder.task); if(broadcastIntent != null) - activity.sendOrderedBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ); + fragment.getActivity().sendOrderedBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ); return true; } @@ -73,7 +73,7 @@ abstract public class TaskAdapterAddOnManager { if(thisViewHolder != null) draw(thisViewHolder, taskId, cacheList); else { - ListView listView = activity.getListView(); + ListView listView = fragment.getListView(); // update view if it is visible int length = listView.getChildCount(); for(int i = 0; i < length; i++) { diff --git a/astrid/src/com/todoroo/astrid/welcome/SplashScreenLauncher.java b/astrid/src/com/todoroo/astrid/welcome/SplashScreenLauncher.java index 696e39f75..cb3132a74 100644 --- a/astrid/src/com/todoroo/astrid/welcome/SplashScreenLauncher.java +++ b/astrid/src/com/todoroo/astrid/welcome/SplashScreenLauncher.java @@ -9,7 +9,7 @@ import com.timsu.astrid.R; import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.ContextManager; import com.todoroo.andlib.service.DependencyInjectionService; -import com.todoroo.astrid.activity.TaskListActivity; +import com.todoroo.astrid.activity.TaskListWrapperActivity; import com.todoroo.astrid.service.AstridDependencyInjector; import com.todoroo.astrid.service.StartupService; import com.todoroo.astrid.service.StatisticsService; @@ -56,7 +56,7 @@ public class SplashScreenLauncher extends Activity { private void mainActivityPath() { Intent intent = new Intent(); - intent.setClass(this, TaskListActivity.class); // Go to task list activity + intent.setClass(this, TaskListWrapperActivity.class); // Go to task list activity startActivity(intent); finish(); } From 376329c552b24fc0dc2d7c8b10d04a6ce8e58749 Mon Sep 17 00:00:00 2001 From: Arne Jans Date: Wed, 14 Dec 2011 01:55:28 +0100 Subject: [PATCH 02/16] Fixed NPE with producteev-notes id --- astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java b/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java index 352869803..4273d9389 100755 --- a/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java @@ -326,7 +326,7 @@ public final class TaskEditActivity extends Activity { controls.add(producteevControl); basicControls.addView(producteevControl.getDisplayView()); notesEditText.setHint(R.string.producteev_TEA_notes); - //((TextView) notesControlSet.getView().findViewById(R.id.notes_label)).setHint(R.string.producteev_TEA_notes); + //((TextView) notesControlSet.getView().findViewById(R.id.notes)).setHint(R.string.producteev_TEA_notes); } } catch (Exception e) { Log.e("astrid-error", "loading-control-set", e); //$NON-NLS-1$ //$NON-NLS-2$ @@ -338,7 +338,7 @@ public final class TaskEditActivity extends Activity { controls.add(ocrxControl); basicControls.addView(ocrxControl.getDisplayView()); notesEditText.setHint(R.string.opencrx_TEA_notes); - //((TextView) notesControlSet.getView().findViewById(R.id.notes_label)).setHint(R.string.opencrx_TEA_notes); + //((TextView) notesControlSet.getView().findViewById(R.id.notes)).setHint(R.string.opencrx_TEA_notes); } } catch (Exception e) { Log.e("astrid-error", "loading-control-set", e); //$NON-NLS-1$ //$NON-NLS-2$ From e9913eac56fbe246401837681fd5787fab715bdb Mon Sep 17 00:00:00 2001 From: Arne Jans Date: Wed, 14 Dec 2011 02:30:05 +0100 Subject: [PATCH 03/16] 2nd alpha version of tablet/phone ui with actionbar-classes and basic callback-structure through activities as proposed in the 'supporting handsets' article on developer.android.com --- actionbarsherlock/.gitignore | 29 + actionbarsherlock/CHANGELOG.md | 343 +++ actionbarsherlock/LICENSE.txt | 202 ++ actionbarsherlock/README.md | 55 + actionbarsherlock/library/AndroidManifest.xml | 13 + actionbarsherlock/library/README.md | 15 + .../library/bin/actionbarsherlock.jar | Bin 285923 -> 285923 bytes actionbarsherlock/library/checkstyle.xml | 115 + actionbarsherlock/library/pom.xml | 104 + actionbarsherlock/library/project.properties | 12 + .../library/res/color/abs__item_bg.xml | 14 + .../res/color/abs__tab_text_color_dark.xml | 8 + .../res/color/abs__tab_text_color_light.xml | 8 + ...bs__ab_stacked_transparent_dark_holo.9.png | Bin 0 -> 139 bytes ...s__ab_stacked_transparent_light_holo.9.png | Bin 0 -> 133 bytes .../abs__cab_background_holo_dark.9.png | Bin 0 -> 3307 bytes .../abs__cab_background_holo_light.9.png | Bin 0 -> 3494 bytes .../abs__cab_ic_close_focused_holo.png | Bin 0 -> 1292 bytes .../abs__cab_ic_close_normal_holo.png | Bin 0 -> 957 bytes .../abs__cab_ic_close_pressed_holo.png | Bin 0 -> 1749 bytes .../abs__ic_ab_back_holo_dark.png | Bin 0 -> 938 bytes .../abs__ic_ab_back_holo_light.png | Bin 0 -> 975 bytes .../abs__list_focused_holo.9.png | Bin 0 -> 1098 bytes .../abs__list_longpressed_holo.9.png | Bin 0 -> 1060 bytes .../abs__list_pressed_holo_dark.9.png | Bin 0 -> 1061 bytes .../abs__list_pressed_holo_light.9.png | Bin 0 -> 1060 bytes ...bs__list_selector_disabled_holo_dark.9.png | Bin 0 -> 189 bytes ...s__list_selector_disabled_holo_light.9.png | Bin 0 -> 189 bytes .../abs__spinner_default_holo_dark.9.png | Bin 0 -> 378 bytes .../abs__spinner_default_holo_light.9.png | Bin 0 -> 378 bytes .../abs__spinner_disabled_holo_dark.9.png | Bin 0 -> 382 bytes .../abs__spinner_disabled_holo_light.9.png | Bin 0 -> 382 bytes .../abs__spinner_focused_holo_dark.9.png | Bin 0 -> 396 bytes .../abs__spinner_focused_holo_light.9.png | Bin 0 -> 532 bytes .../abs__spinner_pressed_holo_dark.9.png | Bin 0 -> 530 bytes .../abs__spinner_pressed_holo_light.9.png | Bin 0 -> 536 bytes .../abs__tab_selected_focused_holo.9.png | Bin 0 -> 218 bytes .../abs__tab_selected_holo.9.png | Bin 0 -> 159 bytes ...s__tab_selected_pressed_focused_holo.9.png | Bin 0 -> 522 bytes .../abs__tab_selected_pressed_holo.9.png | Bin 0 -> 271 bytes .../abs__tab_unselected_focused_holo.9.png | Bin 0 -> 216 bytes .../abs__tab_unselected_holo.9.png | Bin 0 -> 147 bytes ..._tab_unselected_pressed_focused_holo.9.png | Bin 0 -> 536 bytes .../abs__tab_unselected_pressed_holo.9.png | Bin 0 -> 265 bytes ...bs__ab_stacked_transparent_dark_holo.9.png | Bin 0 -> 127 bytes ...s__ab_stacked_transparent_light_holo.9.png | Bin 0 -> 123 bytes .../abs__cab_background_holo_dark.9.png | Bin 0 -> 1993 bytes .../abs__cab_background_holo_light.9.png | Bin 0 -> 2062 bytes .../abs__cab_ic_close_focused_holo.png | Bin 0 -> 906 bytes .../abs__cab_ic_close_normal_holo.png | Bin 0 -> 705 bytes .../abs__cab_ic_close_pressed_holo.png | Bin 0 -> 1226 bytes .../abs__ic_ab_back_holo_dark.png | Bin 0 -> 709 bytes .../abs__ic_ab_back_holo_light.png | Bin 0 -> 728 bytes .../abs__list_focused_holo.9.png | Bin 0 -> 1092 bytes .../abs__list_longpressed_holo.9.png | Bin 0 -> 1049 bytes .../abs__list_pressed_holo_dark.9.png | Bin 0 -> 1057 bytes .../abs__list_pressed_holo_light.9.png | Bin 0 -> 1053 bytes ...bs__list_selector_disabled_holo_dark.9.png | Bin 0 -> 172 bytes ...s__list_selector_disabled_holo_light.9.png | Bin 0 -> 171 bytes .../abs__spinner_default_holo_dark.9.png | Bin 0 -> 302 bytes .../abs__spinner_default_holo_light.9.png | Bin 0 -> 301 bytes .../abs__spinner_disabled_holo_dark.9.png | Bin 0 -> 331 bytes .../abs__spinner_disabled_holo_light.9.png | Bin 0 -> 331 bytes .../abs__spinner_focused_holo_dark.9.png | Bin 0 -> 352 bytes .../abs__spinner_focused_holo_light.9.png | Bin 0 -> 499 bytes .../abs__spinner_pressed_holo_dark.9.png | Bin 0 -> 420 bytes .../abs__spinner_pressed_holo_light.9.png | Bin 0 -> 457 bytes .../abs__tab_selected_focused_holo.9.png | Bin 0 -> 203 bytes .../abs__tab_selected_holo.9.png | Bin 0 -> 144 bytes ...s__tab_selected_pressed_focused_holo.9.png | Bin 0 -> 454 bytes .../abs__tab_selected_pressed_holo.9.png | Bin 0 -> 231 bytes .../abs__tab_unselected_focused_holo.9.png | Bin 0 -> 196 bytes .../abs__tab_unselected_holo.9.png | Bin 0 -> 128 bytes ..._tab_unselected_pressed_focused_holo.9.png | Bin 0 -> 459 bytes .../abs__tab_unselected_pressed_holo.9.png | Bin 0 -> 223 bytes .../abs__action_item_divider.9.png | Bin 0 -> 80 bytes .../abs__action_item_divider.9.png | Bin 0 -> 134 bytes .../res/drawable/abs__cab_ic_close_holo.xml | 23 + .../abs__item_background_holo_dark.xml | 29 + .../abs__item_background_holo_light.xml | 29 + ...lector_background_transition_holo_dark.xml | 20 + ...ector_background_transition_holo_light.xml | 20 + .../abs__spinner_background_holo_dark.xml | 25 + .../abs__spinner_background_holo_light.xml | 25 + .../res/drawable/abs__tab_indicator_holo.xml | 34 + .../res/layout-land/abs__action_bar.xml | 20 + .../layout-land/abs__screen_action_bar.xml | 24 + .../abs__screen_action_bar_overlay.xml | 25 + .../res/layout-large/abs__action_bar.xml | 20 + .../layout-large/abs__screen_action_bar.xml | 24 + .../abs__screen_action_bar_overlay.xml | 25 + .../library/res/layout/abs__action_bar.xml | 91 + .../res/layout/abs__action_bar_home.xml | 38 + .../res/layout/abs__action_bar_inline.xml | 127 ++ .../layout/abs__action_bar_item_layout.xml | 52 + .../res/layout/abs__action_bar_tab_layout.xml | 53 + .../res/layout/abs__action_bar_title_item.xml | 44 + .../res/layout/abs__screen_action_bar.xml | 47 + .../layout/abs__screen_action_bar_inline.xml | 48 + .../abs__screen_action_bar_inline_overlay.xml | 49 + .../layout/abs__screen_action_bar_overlay.xml | 48 + .../library/res/layout/abs__screen_simple.xml | 43 + .../res/layout/abs__simple_spinner_item.xml | 26 + .../res/values-land/abs__constants.xml | 5 + .../library/res/values-v11/abs__styles.xml | 187 ++ .../library/res/values-v13/abs__styles.xml | 11 + .../library/res/values/abs__attrs.xml | 60 + .../library/res/values/abs__constants.xml | 7 + .../library/res/values/abs__styles.xml | 224 ++ .../AccessibilityServiceInfoCompat.java | 221 ++ .../AccessibilityServiceInfoCompatIcs.java | 48 + .../src/android/support/v4/app/ActionBar.java | 795 +++++++ .../support/v4/app/BackStackRecord.java | 731 +++++++ .../support/v4/app/DialogFragment.java | 396 ++++ .../src/android/support/v4/app/Fragment.java | 1348 ++++++++++++ .../support/v4/app/FragmentActivity.java | 1237 +++++++++++ .../support/v4/app/FragmentManager.java | 1936 +++++++++++++++++ .../support/v4/app/FragmentPagerAdapter.java | 126 ++ .../v4/app/FragmentStatePagerAdapter.java | 185 ++ .../support/v4/app/FragmentTransaction.java | 272 +++ .../android/support/v4/app/HCSparseArray.java | 360 +++ .../android/support/v4/app/ListFragment.java | 375 ++++ .../android/support/v4/app/LoaderManager.java | 803 +++++++ .../v4/app/NoSaveStateFrameLayout.java | 63 + .../v4/app/SuperNotCalledException.java | 27 + .../support/v4/app/SupportActivity.java | 299 +++ .../support/v4/content/AsyncTaskLoader.java | 284 +++ .../support/v4/content/CursorLoader.java | 215 ++ .../android/support/v4/content/Loader.java | 358 +++ .../v4/content/LocalBroadcastManager.java | 302 +++ .../support/v4/content/ModernAsyncTask.java | 491 +++++ .../support/v4/os/ParcelableCompat.java | 48 + .../os/ParcelableCompatCreatorCallbacks.java | 24 + .../v4/os/ParcelableCompatHoneycombMR2.java | 46 + .../android/support/v4/util/DebugUtils.java | 40 + .../android/support/v4/util/LogWriter.java | 72 + .../src/android/support/v4/util/LruCache.java | 323 +++ .../android/support/v4/util/TimeUtils.java | 172 ++ .../v4/view/AccessibilityDelegateCompat.java | 353 +++ .../view/AccessibilityDelegateCompatIcs.java | 120 + .../android/support/v4/view/ActionMode.java | 188 ++ .../support/v4/view/KeyEventCompat.java | 144 ++ .../v4/view/KeyEventCompatHoneycomb.java | 36 + .../src/android/support/v4/view/Menu.java | 33 + .../android/support/v4/view/MenuInflater.java | 463 ++++ .../src/android/support/v4/view/MenuItem.java | 187 ++ .../support/v4/view/MotionEventCompat.java | 194 ++ .../v4/view/MotionEventCompatEclair.java | 37 + .../android/support/v4/view/PagerAdapter.java | 138 ++ .../src/android/support/v4/view/SubMenu.java | 30 + .../v4/view/VelocityTrackerCompat.java | 92 + .../view/VelocityTrackerCompatHoneycomb.java | 31 + .../android/support/v4/view/ViewCompat.java | 163 ++ .../v4/view/ViewCompatGingerbread.java | 29 + .../support/v4/view/ViewCompatICS.java | 53 + .../v4/view/ViewConfigurationCompat.java | 74 + .../v4/view/ViewConfigurationCompatFroyo.java | 28 + .../support/v4/view/ViewGroupCompat.java | 84 + .../support/v4/view/ViewGroupCompatIcs.java | 33 + .../android/support/v4/view/ViewPager.java | 1730 +++++++++++++++ .../src/android/support/v4/view/Window.java | 88 + .../AccessibilityEventCompat.java | 148 ++ .../AccessibilityEventCompatIcs.java | 39 + .../AccessibilityManagerCompat.java | 204 ++ .../AccessibilityManagerCompatIcs.java | 70 + .../AccessibilityNodeInfoCompat.java | 1166 ++++++++++ .../AccessibilityNodeInfoCompatIcs.java | 220 ++ .../AccessibilityRecordCompat.java | 957 ++++++++ .../AccessibilityRecordCompatIcs.java | 212 ++ .../support/v4/widget/CursorAdapter.java | 484 +++++ .../support/v4/widget/CursorFilter.java | 71 + .../support/v4/widget/EdgeEffectCompat.java | 218 ++ .../v4/widget/EdgeEffectCompatIcs.java | 66 + .../v4/widget/ResourceCursorAdapter.java | 131 ++ .../v4/widget/SimpleCursorAdapter.java | 398 ++++ .../internal/app/ActionBarImpl.java | 440 ++++ .../internal/app/ActionBarWrapper.java | 591 +++++ .../internal/app/SherlockActivity.java | 13 + .../internal/view/menu/ActionMenuItem.java | 255 +++ .../view/menu/ActionMenuItemView.java | 149 ++ .../internal/view/menu/MenuBuilder.java | 407 ++++ .../view/menu/MenuInflaterWrapper.java | 21 + .../internal/view/menu/MenuItemImpl.java | 663 ++++++ .../internal/view/menu/MenuItemWrapper.java | 315 +++ .../internal/view/menu/MenuView.java | 143 ++ .../internal/view/menu/MenuWrapper.java | 156 ++ .../internal/view/menu/SubMenuBuilder.java | 119 + .../internal/view/menu/SubMenuWrapper.java | 82 + .../internal/widget/ActionBarContainer.java | 35 + .../internal/widget/ActionBarView.java | 696 ++++++ .../internal/widget/ScrollingTextView.java | 51 + actionbarsherlock/plugins/README.md | 8 + .../plugins/maps/AndroidManifest.xml | 13 + actionbarsherlock/plugins/maps/README.md | 18 + actionbarsherlock/plugins/maps/checkstyle.xml | 115 + actionbarsherlock/plugins/maps/pom.xml | 75 + .../plugins/maps/project.properties | 13 + .../support/v4/app/FragmentMapActivity.java | 1240 +++++++++++ actionbarsherlock/plugins/maps/update.py | 47 + actionbarsherlock/plugins/pom.xml | 22 + .../plugins/preference/AndroidManifest.xml | 13 + .../plugins/preference/README.md | 5 + .../plugins/preference/checkstyle.xml | 115 + actionbarsherlock/plugins/preference/pom.xml | 69 + .../plugins/preference/project.properties | 13 + .../v4/app/SherlockPreferenceActivity.java | 1228 +++++++++++ actionbarsherlock/pom.xml | 213 ++ actionbarsherlock/samples/README.md | 13 + .../samples/demos/AndroidManifest.xml | 364 ++++ actionbarsherlock/samples/demos/README.md | 13 + actionbarsherlock/samples/demos/pom.xml | 121 ++ .../samples/demos/project.properties | 12 + .../demos/res/anim/decelerate_quint.xml | 21 + .../res/anim/fragment_slide_left_enter.xml | 23 + .../res/anim/fragment_slide_left_exit.xml | 23 + .../res/anim/fragment_slide_right_enter.xml | 23 + .../res/anim/fragment_slide_right_exit.xml | 23 + .../res/drawable-hdpi/alert_dialog_icon.png | Bin 0 -> 1321 bytes .../demos/res/drawable-hdpi/ic_compose.png | Bin 0 -> 1390 bytes .../res/drawable-hdpi/ic_magnifying_glass.png | Bin 0 -> 5093 bytes .../demos/res/drawable-hdpi/ic_refresh.png | Bin 0 -> 683 bytes .../demos/res/drawable-hdpi/ic_search.png | Bin 0 -> 641 bytes .../drawable-hdpi/ic_title_share_default.png | Bin 0 -> 641 bytes .../samples/demos/res/drawable-hdpi/icon.png | Bin 0 -> 6996 bytes .../samples/demos/res/drawable-ldpi/icon.png | Bin 0 -> 3003 bytes .../res/drawable-mdpi/alert_dialog_icon.png | Bin 0 -> 3645 bytes .../demos/res/drawable-mdpi/ic_compose.png | Bin 0 -> 1327 bytes .../res/drawable-mdpi/ic_magnifying_glass.png | Bin 0 -> 2631 bytes .../demos/res/drawable-mdpi/ic_refresh.png | Bin 0 -> 1392 bytes .../demos/res/drawable-mdpi/ic_search.png | Bin 0 -> 1330 bytes .../samples/demos/res/drawable-mdpi/icon.png | Bin 0 -> 4248 bytes .../samples/demos/res/drawable-xhdpi/icon.png | Bin 0 -> 10322 bytes .../samples/demos/res/drawable/custom_bg.xml | 5 + .../demos/res/drawable/custom_bg_img.png | Bin 0 -> 848 bytes .../actionbar_feature_toggles_activity.xml | 383 ++++ .../fragment_arguments_support.xml | 57 + .../layout-land/fragment_layout_support.xml | 33 + .../res/layout/actionbar_custom_view.xml | 25 + .../actionbar_feature_toggles_activity.xml | 369 ++++ .../demos/res/layout/actionbar_iprogress.xml | 20 + .../demos/res/layout/actionbar_overlay.xml | 17 + .../layout/actionbar_pagerfragmentmenus.xml | 17 + .../layout/actionbar_preferenceactivity.xml | 8 + .../demos/res/layout/actionbar_styles.xml | 28 + .../res/layout/actionbar_tab_custom_view.xml | 9 + .../demos/res/layout/actionbar_tabs_pager.xml | 7 + .../demos/res/layout/actionbar_text.xml | 12 + .../res/layout/fragment_arguments_support.xml | 54 + .../res/layout/fragment_context_menu.xml | 38 + .../demos/res/layout/fragment_dialog.xml | 40 + .../layout/fragment_dialog_or_activity.xml | 64 + .../res/layout/fragment_hide_show_support.xml | 57 + .../res/layout/fragment_layout_support.xml | 27 + .../demos/res/layout/fragment_menu.xml | 46 + .../demos/res/layout/fragment_pager.xml | 44 + .../demos/res/layout/fragment_pager_list.xml | 52 + .../demos/res/layout/fragment_pagermenus.xml | 17 + .../res/layout/fragment_retain_instance.xml | 46 + .../demos/res/layout/fragment_stack.xml | 38 + .../demos/res/layout/fragment_tabs.xml | 54 + .../demos/res/layout/fragment_tabs_pager.xml | 52 + .../samples/demos/res/layout/hello_world.xml | 26 + .../demos/res/layout/labeled_text_edit.xml | 38 + .../demos/res/layout/list_item_icon_text.xml | 32 + .../res/layout/local_service_broadcaster.xml | 46 + .../demos/res/layout/receive_result.xml | 50 + .../samples/demos/res/layout/send_result.xml | 45 + .../layout/simple_list_item_checkable_1.xml | 29 + .../samples/demos/res/values-v11/styles.xml | 25 + .../samples/demos/res/values/arrays.xml | 10 + .../samples/demos/res/values/attrs.xml | 25 + .../samples/demos/res/values/colors.xml | 23 + .../samples/demos/res/values/strings.xml | 139 ++ .../samples/demos/res/values/styles.xml | 44 + .../sample/demos/Cheeses.java | 154 ++ .../sample/demos/Shakespeare.java | 223 ++ .../sample/demos/Support4Demos.java | 149 ++ .../demos/app/ActionBarActionItemText.java | 47 + .../demos/app/ActionBarCustomNavigation.java | 50 + .../demos/app/ActionBarFeatureToggles.java | 254 +++ .../app/ActionBarIndeterminateProgress.java | 53 + .../demos/app/ActionBarListNavigation.java | 37 + .../demos/app/ActionBarMenuSupport.java | 141 ++ .../sample/demos/app/ActionBarOverlay.java | 45 + .../app/ActionBarPagerFragmentMenus.java | 98 + .../sample/demos/app/ActionBarSimple.java | 30 + .../sample/demos/app/ActionBarStyles.java | 60 + .../sample/demos/app/ActionBarSubMenus.java | 58 + .../demos/app/ActionBarTabNavigation.java | 43 + .../sample/demos/app/ActionBarTabsPager.java | 145 ++ .../demos/app/FragmentAlertDialogSupport.java | 110 + .../demos/app/FragmentArgumentsSupport.java | 111 + .../demos/app/FragmentContextMenuSupport.java | 78 + .../app/FragmentCustomAnimationSupport.java | 128 ++ .../app/FragmentDialogOrActivitySupport.java | 81 + .../demos/app/FragmentDialogSupport.java | 168 ++ .../demos/app/FragmentHideShowSupport.java | 114 + .../demos/app/FragmentLayoutSupport.java | 223 ++ .../demos/app/FragmentListArraySupport.java | 61 + .../sample/demos/app/FragmentMenuSupport.java | 133 ++ .../sample/demos/app/FragmentPagerMenus.java | 96 + .../demos/app/FragmentPagerSupport.java | 139 ++ .../app/FragmentReceiveResultSupport.java | 135 ++ .../app/FragmentRetainInstanceSupport.java | 233 ++ .../demos/app/FragmentStackSupport.java | 125 ++ .../demos/app/FragmentStatePagerSupport.java | 140 ++ .../sample/demos/app/FragmentTabs.java | 171 ++ .../sample/demos/app/FragmentTabsPager.java | 178 ++ .../sample/demos/app/LoaderCursorSupport.java | 170 ++ .../sample/demos/app/LoaderCustomSupport.java | 453 ++++ .../demos/app/LoaderThrottleSupport.java | 525 +++++ .../sample/demos/app/SendResult.java | 81 + .../content/LocalServiceBroadcaster.java | 167 ++ .../demos/view/CheckableFrameLayout.java | 49 + .../samples/plugins/AndroidManifest.xml | 68 + actionbarsherlock/samples/plugins/README.md | 13 + actionbarsherlock/samples/plugins/pom.xml | 121 ++ .../samples/plugins/project.properties | 14 + .../plugins/res/drawable-hdpi/ic_compose.png | Bin 0 -> 1390 bytes .../plugins/res/drawable-hdpi/ic_refresh.png | Bin 0 -> 683 bytes .../plugins/res/drawable-hdpi/ic_search.png | Bin 0 -> 641 bytes .../plugins/res/drawable-hdpi/icon.png | Bin 0 -> 6996 bytes .../plugins/res/drawable-ldpi/icon.png | Bin 0 -> 3003 bytes .../plugins/res/drawable-mdpi/ic_compose.png | Bin 0 -> 1327 bytes .../plugins/res/drawable-mdpi/ic_refresh.png | Bin 0 -> 1392 bytes .../plugins/res/drawable-mdpi/ic_search.png | Bin 0 -> 1330 bytes .../plugins/res/drawable-mdpi/icon.png | Bin 0 -> 4248 bytes .../plugins/res/drawable-xhdpi/icon.png | Bin 0 -> 10322 bytes .../layout/actionbar_preferenceactivity.xml | 8 + .../samples/plugins/res/layout/map_simple.xml | 10 + .../samples/plugins/res/values/arrays.xml | 16 + .../samples/plugins/res/values/strings.xml | 76 + .../samples/plugins/res/xml/preferences.xml | 99 + .../sample/plugins/Support4Demos.java | 149 ++ .../sample/plugins/app/MapActivity.java | 26 + .../plugins/app/MapActivityActionBar.java | 45 + .../sample/plugins/app/MapFragment.java | 43 + .../plugins/app/MapFragmentActionBar.java | 62 + .../sample/plugins/app/PreferenceSimple.java | 49 + actionbarsherlock/samples/pom.xml | 24 + .../samples/shakespeare/AndroidManifest.xml | 33 + .../samples/shakespeare/README.md | 13 + actionbarsherlock/samples/shakespeare/pom.xml | 103 + .../samples/shakespeare/project.properties | 12 + .../shakespeare/res/drawable-hdpi/icon.png | Bin 0 -> 6996 bytes .../shakespeare/res/drawable-ldpi/icon.png | Bin 0 -> 3003 bytes .../shakespeare/res/drawable-mdpi/icon.png | Bin 0 -> 4248 bytes .../shakespeare/res/drawable-xhdpi/icon.png | Bin 0 -> 10322 bytes .../res/layout-land/activity_titles.xml | 40 + .../layout-xlarge-land/activity_titles.xml | 40 + .../res/layout/activity_titles.xml | 33 + .../shakespeare/res/values/strings.xml | 7 + .../sample/shakespeare/Shakespeare.java | 223 ++ .../activities/DetailsActivity.java | 60 + .../activities/TitlesActivity.java | 14 + .../fragments/DetailsFragment.java | 50 + .../shakespeare/fragments/TitlesFragment.java | 96 + .../samples/styled/AndroidManifest.xml | 44 + actionbarsherlock/samples/styled/README.md | 13 + actionbarsherlock/samples/styled/pom.xml | 103 + .../samples/styled/project.properties | 12 + .../res/drawable-hdpi-v9/ic_stat_android.png | Bin 0 -> 919 bytes .../res/drawable-hdpi/ic_stat_android.png | Bin 0 -> 1212 bytes .../samples/styled/res/drawable-hdpi/icon.png | Bin 0 -> 6996 bytes .../res/drawable-ldpi-v9/ic_stat_android.png | Bin 0 -> 428 bytes .../res/drawable-ldpi/ic_stat_android.png | Bin 0 -> 537 bytes .../samples/styled/res/drawable-ldpi/icon.png | Bin 0 -> 3003 bytes .../res/drawable-mdpi-v9/ic_stat_android.png | Bin 0 -> 525 bytes .../ad_btn_check_off_pressed_holo_light.png | Bin 0 -> 3485 bytes .../ad_btn_check_on_pressed_holo_light.png | Bin 0 -> 4339 bytes .../ad_btn_radio_off_pressed_holo_light.png | Bin 0 -> 3900 bytes .../ad_btn_radio_on_pressed_holo_light.png | Bin 0 -> 3713 bytes .../styled/res/drawable-mdpi/ad_logo.png | Bin 0 -> 8978 bytes .../ad_menu_dropdown_panel_holo_light.9.png | Bin 0 -> 3171 bytes .../ad_spinner_focused_holo_light.9.png | Bin 0 -> 499 bytes .../ad_spinner_pressed_holo_light.9.png | Bin 0 -> 3080 bytes .../drawable-mdpi/ad_tab_selected_holo.9.png | Bin 0 -> 2793 bytes .../ad_tab_selected_pressed_holo.9.png | Bin 0 -> 2800 bytes .../ad_tab_unselected_holo.9.png | Bin 0 -> 2791 bytes .../btn_check_off_holo_light.png | Bin 0 -> 344 bytes .../drawable-mdpi/btn_check_on_holo_light.png | Bin 0 -> 927 bytes .../btn_radio_off_holo_light.png | Bin 0 -> 556 bytes .../drawable-mdpi/btn_radio_on_holo_light.png | Bin 0 -> 998 bytes .../ic_menu_refresh_holo_light.png | Bin 0 -> 1324 bytes .../drawable-mdpi/ic_menu_star_holo_light.png | Bin 0 -> 884 bytes .../res/drawable-mdpi/ic_stat_android.png | Bin 0 -> 780 bytes .../samples/styled/res/drawable-mdpi/icon.png | Bin 0 -> 4248 bytes .../spinner_default_holo_light.9.png | Bin 0 -> 301 bytes .../spinner_disabled_holo_light.9.png | Bin 0 -> 331 bytes .../styled/res/drawable-xhdpi/icon.png | Bin 0 -> 10322 bytes .../styled/res/drawable/actionbar_tab_bg.xml | 24 + .../drawable/ad_action_bar_gradient_bak.xml | 23 + .../res/drawable/ad_btn_check_holo_light.xml | 66 + .../res/drawable/ad_btn_radio_holo_light.xml | 66 + .../res/drawable/ad_selectable_background.xml | 21 + .../ad_spinner_background_holo_light.xml | 25 + .../styled/res/drawable/rounded_rect.xml | 19 + .../res/drawable/selected_background.xml | 19 + .../layout/indeterminate_progress_action.xml | 23 + .../samples/styled/res/layout/main.xml | 21 + .../samples/styled/res/menu-v11/main_menu.xml | 71 + .../samples/styled/res/menu/main_menu.xml | 71 + .../samples/styled/res/values-v11/styles.xml | 10 + .../samples/styled/res/values/arrays.xml | 27 + .../samples/styled/res/values/colors.xml | 22 + .../samples/styled/res/values/dimens.xml | 20 + .../samples/styled/res/values/strings.xml | 33 + .../samples/styled/res/values/styles.xml | 61 + .../sample/styledactionbar/MainActivity.java | 240 ++ .../RoundedColourFragment.java | 68 + actionbarsherlock/test/README.md | 11 + .../test/app/AndroidManifest.xml | 31 + actionbarsherlock/test/app/README.md | 9 + actionbarsherlock/test/app/pom.xml | 52 + actionbarsherlock/test/app/project.properties | 12 + .../test/app/res/drawable-hdpi/icon.png | Bin 0 -> 6996 bytes .../test/app/res/drawable-ldpi/icon.png | Bin 0 -> 3003 bytes .../drawable-mdpi/ic_menu_star_holo_light.png | Bin 0 -> 884 bytes .../test/app/res/drawable-mdpi/icon.png | Bin 0 -> 4248 bytes .../test/app/res/drawable-xhdpi/icon.png | Bin 0 -> 10322 bytes .../test/app/res/layout/blank.xml | 5 + .../test/app/res/layout/issue0038.xml | 21 + .../test/app/res/menu/issue0031.xml | 6 + .../test/app/res/menu/issue0033.xml | 17 + .../test/app/res/values/strings.xml | 7 + .../tests/app/FeatureCustomView.java | 45 + .../app/FeatureEnableActionItemText.java | 24 + .../tests/app/Issue0002.java | 54 + .../tests/app/Issue0030.java | 58 + .../tests/app/Issue0031.java | 39 + .../tests/app/Issue0033.java | 78 + .../tests/app/Issue0035.java | 30 + .../tests/app/Issue0036.java | 35 + .../tests/app/Issue0038.java | 31 + .../tests/app/Issue0042.java | 54 + .../tests/app/Issue0045.java | 35 + .../tests/app/Issue0048.java | 75 + actionbarsherlock/test/pom.xml | 22 + .../test/runner/AndroidManifest.xml | 21 + actionbarsherlock/test/runner/README.md | 11 + actionbarsherlock/test/runner/pom.xml | 75 + .../test/runner/project.properties | 11 + .../test/runner/res/drawable-hdpi/icon.png | Bin 0 -> 6996 bytes .../test/runner/res/drawable-ldpi/icon.png | Bin 0 -> 3003 bytes .../test/runner/res/drawable-mdpi/icon.png | Bin 0 -> 4248 bytes .../test/runner/res/drawable-xhdpi/icon.png | Bin 0 -> 10322 bytes .../tests/runner/BaseTestCase.java | 109 + .../tests/runner/TestFeatureCustomView.java | 25 + .../TestFeatureEnableActionItemText.java | 19 + .../tests/runner/TestIssue0002.java | 17 + .../tests/runner/TestIssue0030.java | 21 + .../tests/runner/TestIssue0031.java | 31 + .../tests/runner/TestIssue0033.java | 69 + .../tests/runner/TestIssue0035.java | 15 + .../tests/runner/TestIssue0036.java | 17 + .../tests/runner/TestIssue0038.java | 21 + .../tests/runner/TestIssue0039.java | 39 + .../tests/runner/TestIssue0042.java | 26 + .../tests/runner/TestIssue0045.java | 17 + .../tests/runner/TestIssue0048.java | 18 + actionbarsherlock/update-version.py | 40 + .../website/resources/.gitignore | 5 + actionbarsherlock/website/resources/CNAME | 1 + .../website/resources/_config.yml | 7 + .../website/resources/_layouts/default.html | 78 + .../website/resources/development.html | 33 + .../website/resources/download.html | 160 ++ actionbarsherlock/website/resources/faq.html | 73 + .../website/resources/favicon.ico | Bin 0 -> 1148 bytes .../website/resources/humans.txt | 25 + .../website/resources/index.html | 173 ++ .../resources/merch-and-donations.html | 36 + .../website/resources/robots.txt | 2 + .../website/resources/samples.html | 82 + .../website/resources/sitemap.xml | 60 + .../website/resources/static/1120.css | 63 + .../static/apps/com.abcOrganizer.png | Bin 0 -> 11838 bytes .../apps/com.battlelancer.seriesguide.png | Bin 0 -> 9199 bytes .../com.battlelancer.seriesguide_01_2.3.4.png | Bin 0 -> 197587 bytes ...attlelancer.seriesguide_01_2.3.4.thumb.png | Bin 0 -> 6417 bytes .../com.battlelancer.seriesguide_01_3.0.png | Bin 0 -> 105431 bytes ....battlelancer.seriesguide_01_3.0.thumb.png | Bin 0 -> 3222 bytes .../com.battlelancer.seriesguide_02_2.3.4.png | Bin 0 -> 119124 bytes ...attlelancer.seriesguide_02_2.3.4.thumb.png | Bin 0 -> 4116 bytes .../com.battlelancer.seriesguide_02_3.0.png | Bin 0 -> 120840 bytes ....battlelancer.seriesguide_02_3.0.thumb.png | Bin 0 -> 5236 bytes .../static/apps/com.ratebeer.android.png | Bin 0 -> 10061 bytes .../apps/uk.co.senab.blueNotifyFree.png | Bin 0 -> 6383 bytes .../resources/static/black_linen_v2.png | Bin 0 -> 140673 bytes .../website/resources/static/border.png | Bin 0 -> 112 bytes .../website/resources/static/controls.png | Bin 0 -> 1249 bytes .../resources/static/css3-mediaqueries.js | 779 +++++++ .../website/resources/static/feature.png | Bin 0 -> 103689 bytes .../website/resources/static/feature_01.png | Bin 0 -> 72735 bytes .../website/resources/static/feature_02.png | Bin 0 -> 225996 bytes .../website/resources/static/feature_03.png | Bin 0 -> 78847 bytes .../website/resources/static/icon_tgz.png | Bin 0 -> 1519 bytes .../website/resources/static/icon_web.png | Bin 0 -> 90807 bytes .../website/resources/static/icon_zip.png | Bin 0 -> 1473 bytes .../website/resources/static/ie.css | 43 + .../resources/static/jquery.colorbox-min.js | 4 + .../static/jquery.cross-slide.min.js | 20 + .../website/resources/static/loading.gif | Bin 0 -> 5208 bytes .../resources/static/loading_background.png | Bin 0 -> 157 bytes .../website/resources/static/logo.png | Bin 0 -> 27346 bytes .../website/resources/static/logo.psd | Bin 0 -> 155714 bytes .../website/resources/static/logo_small.png | Bin 0 -> 18576 bytes .../website/resources/static/mascot.png | Bin 0 -> 21550 bytes .../website/resources/static/merch.png | Bin 0 -> 106499 bytes .../website/resources/static/octocat.png | Bin 0 -> 13199 bytes .../website/resources/static/overlay.png | Bin 0 -> 182 bytes .../website/resources/static/ribbon.png | Bin 0 -> 6893 bytes .../static/samples/featuredemo_01_1.6.png | Bin 0 -> 43142 bytes .../samples/featuredemo_01_1.6.thumb.png | Bin 0 -> 6121 bytes .../static/samples/featuredemo_01_2.3.3.png | Bin 0 -> 49323 bytes .../samples/featuredemo_01_2.3.3.thumb.png | Bin 0 -> 6493 bytes .../static/samples/featuredemo_01_3.1.png | Bin 0 -> 26740 bytes .../samples/featuredemo_01_3.1.thumb.png | Bin 0 -> 4101 bytes .../static/samples/featuredemo_02_1.6.png | Bin 0 -> 42748 bytes .../samples/featuredemo_02_1.6.thumb.png | Bin 0 -> 6215 bytes .../static/samples/featuredemo_02_2.3.3.png | Bin 0 -> 65723 bytes .../samples/featuredemo_02_2.3.3.thumb.png | Bin 0 -> 8459 bytes .../static/samples/featuredemo_02_3.1.png | Bin 0 -> 28223 bytes .../samples/featuredemo_02_3.1.thumb.png | Bin 0 -> 4380 bytes .../static/samples/shakespeare_01_1.6.png | Bin 0 -> 94635 bytes .../samples/shakespeare_01_1.6.thumb.png | Bin 0 -> 12165 bytes .../static/samples/shakespeare_01_2.3.3.png | Bin 0 -> 72666 bytes .../samples/shakespeare_01_2.3.3.thumb.png | Bin 0 -> 9959 bytes .../static/samples/shakespeare_01_3.1.png | Bin 0 -> 46810 bytes .../samples/shakespeare_01_3.1.thumb.png | Bin 0 -> 5222 bytes .../static/samples/shakespeare_02_2.3.3.png | Bin 0 -> 22589 bytes .../samples/shakespeare_02_2.3.3.thumb.png | Bin 0 -> 4219 bytes .../static/samples/shakespeare_03_2.3.3.png | Bin 0 -> 100162 bytes .../samples/shakespeare_03_2.3.3.thumb.png | Bin 0 -> 17777 bytes .../static/samples/styled_01_1.6.png | Bin 0 -> 23484 bytes .../static/samples/styled_01_1.6.thumb.png | Bin 0 -> 3064 bytes .../static/samples/styled_01_2.3.3.png | Bin 0 -> 18925 bytes .../static/samples/styled_01_2.3.3.thumb.png | Bin 0 -> 3114 bytes .../static/samples/styled_01_3.1.png | Bin 0 -> 10131 bytes .../static/samples/styled_01_3.1.thumb.png | Bin 0 -> 1607 bytes .../static/samples/styled_02_1.6.png | Bin 0 -> 38050 bytes .../static/samples/styled_02_1.6.thumb.png | Bin 0 -> 7263 bytes .../static/samples/styled_02_2.3.3.png | Bin 0 -> 23959 bytes .../static/samples/styled_02_2.3.3.thumb.png | Bin 0 -> 4151 bytes .../static/samples/styled_02_3.1.png | Bin 0 -> 15248 bytes .../static/samples/styled_02_3.1.thumb.png | Bin 0 -> 1628 bytes .../website/resources/static/showdown.js | 419 ++++ .../website/resources/static/styles.css | 231 ++ .../website/resources/support.html | 45 + .../website/resources/theming.html | 68 + .../website/resources/usage.html | 68 + actionbarsherlock/website/site.xml | 5 + api/.classpath | 1 + .../astrid/api/FilterWithCustomIntent.java | 9 +- .../org.eclipse.core.resources.prefs | 3 + .../todoroo/astrid/actfm/TagViewActivity.java | 4 +- .../astrid/actfm/TagViewWrapperActivity.java | 15 + .../astrid/tags/FilterByTagExposer.java | 3 +- .../todoroo/astrid/tags/TagFilterExposer.java | 3 +- astrid/proguard.cfg | 6 + astrid/project.properties | 6 +- .../filter_list_wrapper_activity.xml | 25 + .../task_list_wrapper_activity.xml | 25 + astrid/res/layout/filter_adapter_row.xml | 2 + astrid/res/layout/filter_list_activity.xml | 1 + .../layout/filter_list_wrapper_activity.xml | 8 + astrid/res/layout/task_list_activity.xml | 3 +- .../res/layout/task_list_wrapper_activity.xml | 8 + astrid/res/values/styles.xml | 8 +- .../com/timsu/astrid/activities/TaskList.java | 3 +- .../activity/AstridWrapperActivity.java | 114 + .../activity/ExpandableListFragment.java | 364 ++++ .../astrid/activity/FilterListActivity.java | 279 ++- .../astrid/activity/FilterListFragment.txt | 460 ++++ .../activity/FilterListWrapperActivity.java | 30 + .../astrid/activity/ShortcutActivity.java | 2 +- .../astrid/activity/TaskListActivity.java | 52 +- .../activity/TaskListWrapperActivity.java | 28 + .../astrid/welcome/WelcomeGraphic.java | 4 +- .../todoroo/astrid/widget/TasksWidget.java | 3 +- .../GreenDroid/res/values/gd_themes.xml | 2 +- 581 files changed, 46078 insertions(+), 191 deletions(-) create mode 100644 actionbarsherlock/.gitignore create mode 100644 actionbarsherlock/CHANGELOG.md create mode 100644 actionbarsherlock/LICENSE.txt create mode 100644 actionbarsherlock/README.md create mode 100644 actionbarsherlock/library/AndroidManifest.xml create mode 100644 actionbarsherlock/library/README.md create mode 100644 actionbarsherlock/library/checkstyle.xml create mode 100644 actionbarsherlock/library/pom.xml create mode 100644 actionbarsherlock/library/project.properties create mode 100644 actionbarsherlock/library/res/color/abs__item_bg.xml create mode 100644 actionbarsherlock/library/res/color/abs__tab_text_color_dark.xml create mode 100644 actionbarsherlock/library/res/color/abs__tab_text_color_light.xml create mode 100644 actionbarsherlock/library/res/drawable-hdpi/abs__ab_stacked_transparent_dark_holo.9.png create mode 100644 actionbarsherlock/library/res/drawable-hdpi/abs__ab_stacked_transparent_light_holo.9.png create mode 100644 actionbarsherlock/library/res/drawable-hdpi/abs__cab_background_holo_dark.9.png create mode 100644 actionbarsherlock/library/res/drawable-hdpi/abs__cab_background_holo_light.9.png create mode 100644 actionbarsherlock/library/res/drawable-hdpi/abs__cab_ic_close_focused_holo.png create mode 100644 actionbarsherlock/library/res/drawable-hdpi/abs__cab_ic_close_normal_holo.png create mode 100644 actionbarsherlock/library/res/drawable-hdpi/abs__cab_ic_close_pressed_holo.png create mode 100644 actionbarsherlock/library/res/drawable-hdpi/abs__ic_ab_back_holo_dark.png create mode 100644 actionbarsherlock/library/res/drawable-hdpi/abs__ic_ab_back_holo_light.png create mode 100644 actionbarsherlock/library/res/drawable-hdpi/abs__list_focused_holo.9.png create mode 100644 actionbarsherlock/library/res/drawable-hdpi/abs__list_longpressed_holo.9.png create mode 100644 actionbarsherlock/library/res/drawable-hdpi/abs__list_pressed_holo_dark.9.png create mode 100644 actionbarsherlock/library/res/drawable-hdpi/abs__list_pressed_holo_light.9.png create mode 100644 actionbarsherlock/library/res/drawable-hdpi/abs__list_selector_disabled_holo_dark.9.png create mode 100644 actionbarsherlock/library/res/drawable-hdpi/abs__list_selector_disabled_holo_light.9.png create mode 100644 actionbarsherlock/library/res/drawable-hdpi/abs__spinner_default_holo_dark.9.png create mode 100644 actionbarsherlock/library/res/drawable-hdpi/abs__spinner_default_holo_light.9.png create mode 100644 actionbarsherlock/library/res/drawable-hdpi/abs__spinner_disabled_holo_dark.9.png create mode 100644 actionbarsherlock/library/res/drawable-hdpi/abs__spinner_disabled_holo_light.9.png create mode 100644 actionbarsherlock/library/res/drawable-hdpi/abs__spinner_focused_holo_dark.9.png create mode 100644 actionbarsherlock/library/res/drawable-hdpi/abs__spinner_focused_holo_light.9.png create mode 100644 actionbarsherlock/library/res/drawable-hdpi/abs__spinner_pressed_holo_dark.9.png create mode 100644 actionbarsherlock/library/res/drawable-hdpi/abs__spinner_pressed_holo_light.9.png create mode 100644 actionbarsherlock/library/res/drawable-hdpi/abs__tab_selected_focused_holo.9.png create mode 100644 actionbarsherlock/library/res/drawable-hdpi/abs__tab_selected_holo.9.png create mode 100644 actionbarsherlock/library/res/drawable-hdpi/abs__tab_selected_pressed_focused_holo.9.png create mode 100644 actionbarsherlock/library/res/drawable-hdpi/abs__tab_selected_pressed_holo.9.png create mode 100644 actionbarsherlock/library/res/drawable-hdpi/abs__tab_unselected_focused_holo.9.png create mode 100644 actionbarsherlock/library/res/drawable-hdpi/abs__tab_unselected_holo.9.png create mode 100644 actionbarsherlock/library/res/drawable-hdpi/abs__tab_unselected_pressed_focused_holo.9.png create mode 100644 actionbarsherlock/library/res/drawable-hdpi/abs__tab_unselected_pressed_holo.9.png create mode 100644 actionbarsherlock/library/res/drawable-mdpi/abs__ab_stacked_transparent_dark_holo.9.png create mode 100644 actionbarsherlock/library/res/drawable-mdpi/abs__ab_stacked_transparent_light_holo.9.png create mode 100644 actionbarsherlock/library/res/drawable-mdpi/abs__cab_background_holo_dark.9.png create mode 100644 actionbarsherlock/library/res/drawable-mdpi/abs__cab_background_holo_light.9.png create mode 100644 actionbarsherlock/library/res/drawable-mdpi/abs__cab_ic_close_focused_holo.png create mode 100644 actionbarsherlock/library/res/drawable-mdpi/abs__cab_ic_close_normal_holo.png create mode 100644 actionbarsherlock/library/res/drawable-mdpi/abs__cab_ic_close_pressed_holo.png create mode 100644 actionbarsherlock/library/res/drawable-mdpi/abs__ic_ab_back_holo_dark.png create mode 100644 actionbarsherlock/library/res/drawable-mdpi/abs__ic_ab_back_holo_light.png create mode 100644 actionbarsherlock/library/res/drawable-mdpi/abs__list_focused_holo.9.png create mode 100644 actionbarsherlock/library/res/drawable-mdpi/abs__list_longpressed_holo.9.png create mode 100644 actionbarsherlock/library/res/drawable-mdpi/abs__list_pressed_holo_dark.9.png create mode 100644 actionbarsherlock/library/res/drawable-mdpi/abs__list_pressed_holo_light.9.png create mode 100644 actionbarsherlock/library/res/drawable-mdpi/abs__list_selector_disabled_holo_dark.9.png create mode 100644 actionbarsherlock/library/res/drawable-mdpi/abs__list_selector_disabled_holo_light.9.png create mode 100644 actionbarsherlock/library/res/drawable-mdpi/abs__spinner_default_holo_dark.9.png create mode 100644 actionbarsherlock/library/res/drawable-mdpi/abs__spinner_default_holo_light.9.png create mode 100644 actionbarsherlock/library/res/drawable-mdpi/abs__spinner_disabled_holo_dark.9.png create mode 100644 actionbarsherlock/library/res/drawable-mdpi/abs__spinner_disabled_holo_light.9.png create mode 100644 actionbarsherlock/library/res/drawable-mdpi/abs__spinner_focused_holo_dark.9.png create mode 100644 actionbarsherlock/library/res/drawable-mdpi/abs__spinner_focused_holo_light.9.png create mode 100644 actionbarsherlock/library/res/drawable-mdpi/abs__spinner_pressed_holo_dark.9.png create mode 100644 actionbarsherlock/library/res/drawable-mdpi/abs__spinner_pressed_holo_light.9.png create mode 100644 actionbarsherlock/library/res/drawable-mdpi/abs__tab_selected_focused_holo.9.png create mode 100644 actionbarsherlock/library/res/drawable-mdpi/abs__tab_selected_holo.9.png create mode 100644 actionbarsherlock/library/res/drawable-mdpi/abs__tab_selected_pressed_focused_holo.9.png create mode 100644 actionbarsherlock/library/res/drawable-mdpi/abs__tab_selected_pressed_holo.9.png create mode 100644 actionbarsherlock/library/res/drawable-mdpi/abs__tab_unselected_focused_holo.9.png create mode 100644 actionbarsherlock/library/res/drawable-mdpi/abs__tab_unselected_holo.9.png create mode 100644 actionbarsherlock/library/res/drawable-mdpi/abs__tab_unselected_pressed_focused_holo.9.png create mode 100644 actionbarsherlock/library/res/drawable-mdpi/abs__tab_unselected_pressed_holo.9.png create mode 100644 actionbarsherlock/library/res/drawable-nodpi-v11/abs__action_item_divider.9.png create mode 100644 actionbarsherlock/library/res/drawable-nodpi/abs__action_item_divider.9.png create mode 100644 actionbarsherlock/library/res/drawable/abs__cab_ic_close_holo.xml create mode 100644 actionbarsherlock/library/res/drawable/abs__item_background_holo_dark.xml create mode 100644 actionbarsherlock/library/res/drawable/abs__item_background_holo_light.xml create mode 100644 actionbarsherlock/library/res/drawable/abs__list_selector_background_transition_holo_dark.xml create mode 100644 actionbarsherlock/library/res/drawable/abs__list_selector_background_transition_holo_light.xml create mode 100644 actionbarsherlock/library/res/drawable/abs__spinner_background_holo_dark.xml create mode 100644 actionbarsherlock/library/res/drawable/abs__spinner_background_holo_light.xml create mode 100644 actionbarsherlock/library/res/drawable/abs__tab_indicator_holo.xml create mode 100644 actionbarsherlock/library/res/layout-land/abs__action_bar.xml create mode 100644 actionbarsherlock/library/res/layout-land/abs__screen_action_bar.xml create mode 100644 actionbarsherlock/library/res/layout-land/abs__screen_action_bar_overlay.xml create mode 100644 actionbarsherlock/library/res/layout-large/abs__action_bar.xml create mode 100644 actionbarsherlock/library/res/layout-large/abs__screen_action_bar.xml create mode 100644 actionbarsherlock/library/res/layout-large/abs__screen_action_bar_overlay.xml create mode 100644 actionbarsherlock/library/res/layout/abs__action_bar.xml create mode 100644 actionbarsherlock/library/res/layout/abs__action_bar_home.xml create mode 100644 actionbarsherlock/library/res/layout/abs__action_bar_inline.xml create mode 100644 actionbarsherlock/library/res/layout/abs__action_bar_item_layout.xml create mode 100644 actionbarsherlock/library/res/layout/abs__action_bar_tab_layout.xml create mode 100644 actionbarsherlock/library/res/layout/abs__action_bar_title_item.xml create mode 100644 actionbarsherlock/library/res/layout/abs__screen_action_bar.xml create mode 100644 actionbarsherlock/library/res/layout/abs__screen_action_bar_inline.xml create mode 100644 actionbarsherlock/library/res/layout/abs__screen_action_bar_inline_overlay.xml create mode 100644 actionbarsherlock/library/res/layout/abs__screen_action_bar_overlay.xml create mode 100644 actionbarsherlock/library/res/layout/abs__screen_simple.xml create mode 100644 actionbarsherlock/library/res/layout/abs__simple_spinner_item.xml create mode 100644 actionbarsherlock/library/res/values-land/abs__constants.xml create mode 100644 actionbarsherlock/library/res/values-v11/abs__styles.xml create mode 100644 actionbarsherlock/library/res/values-v13/abs__styles.xml create mode 100644 actionbarsherlock/library/res/values/abs__attrs.xml create mode 100644 actionbarsherlock/library/res/values/abs__constants.xml create mode 100644 actionbarsherlock/library/res/values/abs__styles.xml create mode 100644 actionbarsherlock/library/src/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat.java create mode 100644 actionbarsherlock/library/src/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompatIcs.java create mode 100644 actionbarsherlock/library/src/android/support/v4/app/ActionBar.java create mode 100644 actionbarsherlock/library/src/android/support/v4/app/BackStackRecord.java create mode 100644 actionbarsherlock/library/src/android/support/v4/app/DialogFragment.java create mode 100644 actionbarsherlock/library/src/android/support/v4/app/Fragment.java create mode 100644 actionbarsherlock/library/src/android/support/v4/app/FragmentActivity.java create mode 100644 actionbarsherlock/library/src/android/support/v4/app/FragmentManager.java create mode 100644 actionbarsherlock/library/src/android/support/v4/app/FragmentPagerAdapter.java create mode 100644 actionbarsherlock/library/src/android/support/v4/app/FragmentStatePagerAdapter.java create mode 100644 actionbarsherlock/library/src/android/support/v4/app/FragmentTransaction.java create mode 100644 actionbarsherlock/library/src/android/support/v4/app/HCSparseArray.java create mode 100644 actionbarsherlock/library/src/android/support/v4/app/ListFragment.java create mode 100644 actionbarsherlock/library/src/android/support/v4/app/LoaderManager.java create mode 100644 actionbarsherlock/library/src/android/support/v4/app/NoSaveStateFrameLayout.java create mode 100644 actionbarsherlock/library/src/android/support/v4/app/SuperNotCalledException.java create mode 100644 actionbarsherlock/library/src/android/support/v4/app/SupportActivity.java create mode 100644 actionbarsherlock/library/src/android/support/v4/content/AsyncTaskLoader.java create mode 100644 actionbarsherlock/library/src/android/support/v4/content/CursorLoader.java create mode 100644 actionbarsherlock/library/src/android/support/v4/content/Loader.java create mode 100644 actionbarsherlock/library/src/android/support/v4/content/LocalBroadcastManager.java create mode 100644 actionbarsherlock/library/src/android/support/v4/content/ModernAsyncTask.java create mode 100644 actionbarsherlock/library/src/android/support/v4/os/ParcelableCompat.java create mode 100644 actionbarsherlock/library/src/android/support/v4/os/ParcelableCompatCreatorCallbacks.java create mode 100644 actionbarsherlock/library/src/android/support/v4/os/ParcelableCompatHoneycombMR2.java create mode 100644 actionbarsherlock/library/src/android/support/v4/util/DebugUtils.java create mode 100644 actionbarsherlock/library/src/android/support/v4/util/LogWriter.java create mode 100644 actionbarsherlock/library/src/android/support/v4/util/LruCache.java create mode 100644 actionbarsherlock/library/src/android/support/v4/util/TimeUtils.java create mode 100644 actionbarsherlock/library/src/android/support/v4/view/AccessibilityDelegateCompat.java create mode 100644 actionbarsherlock/library/src/android/support/v4/view/AccessibilityDelegateCompatIcs.java create mode 100644 actionbarsherlock/library/src/android/support/v4/view/ActionMode.java create mode 100644 actionbarsherlock/library/src/android/support/v4/view/KeyEventCompat.java create mode 100644 actionbarsherlock/library/src/android/support/v4/view/KeyEventCompatHoneycomb.java create mode 100644 actionbarsherlock/library/src/android/support/v4/view/Menu.java create mode 100644 actionbarsherlock/library/src/android/support/v4/view/MenuInflater.java create mode 100644 actionbarsherlock/library/src/android/support/v4/view/MenuItem.java create mode 100644 actionbarsherlock/library/src/android/support/v4/view/MotionEventCompat.java create mode 100644 actionbarsherlock/library/src/android/support/v4/view/MotionEventCompatEclair.java create mode 100644 actionbarsherlock/library/src/android/support/v4/view/PagerAdapter.java create mode 100644 actionbarsherlock/library/src/android/support/v4/view/SubMenu.java create mode 100644 actionbarsherlock/library/src/android/support/v4/view/VelocityTrackerCompat.java create mode 100644 actionbarsherlock/library/src/android/support/v4/view/VelocityTrackerCompatHoneycomb.java create mode 100644 actionbarsherlock/library/src/android/support/v4/view/ViewCompat.java create mode 100644 actionbarsherlock/library/src/android/support/v4/view/ViewCompatGingerbread.java create mode 100644 actionbarsherlock/library/src/android/support/v4/view/ViewCompatICS.java create mode 100644 actionbarsherlock/library/src/android/support/v4/view/ViewConfigurationCompat.java create mode 100644 actionbarsherlock/library/src/android/support/v4/view/ViewConfigurationCompatFroyo.java create mode 100644 actionbarsherlock/library/src/android/support/v4/view/ViewGroupCompat.java create mode 100644 actionbarsherlock/library/src/android/support/v4/view/ViewGroupCompatIcs.java create mode 100644 actionbarsherlock/library/src/android/support/v4/view/ViewPager.java create mode 100644 actionbarsherlock/library/src/android/support/v4/view/Window.java create mode 100644 actionbarsherlock/library/src/android/support/v4/view/accessibility/AccessibilityEventCompat.java create mode 100644 actionbarsherlock/library/src/android/support/v4/view/accessibility/AccessibilityEventCompatIcs.java create mode 100644 actionbarsherlock/library/src/android/support/v4/view/accessibility/AccessibilityManagerCompat.java create mode 100644 actionbarsherlock/library/src/android/support/v4/view/accessibility/AccessibilityManagerCompatIcs.java create mode 100644 actionbarsherlock/library/src/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.java create mode 100644 actionbarsherlock/library/src/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatIcs.java create mode 100644 actionbarsherlock/library/src/android/support/v4/view/accessibility/AccessibilityRecordCompat.java create mode 100644 actionbarsherlock/library/src/android/support/v4/view/accessibility/AccessibilityRecordCompatIcs.java create mode 100644 actionbarsherlock/library/src/android/support/v4/widget/CursorAdapter.java create mode 100644 actionbarsherlock/library/src/android/support/v4/widget/CursorFilter.java create mode 100644 actionbarsherlock/library/src/android/support/v4/widget/EdgeEffectCompat.java create mode 100644 actionbarsherlock/library/src/android/support/v4/widget/EdgeEffectCompatIcs.java create mode 100644 actionbarsherlock/library/src/android/support/v4/widget/ResourceCursorAdapter.java create mode 100644 actionbarsherlock/library/src/android/support/v4/widget/SimpleCursorAdapter.java create mode 100644 actionbarsherlock/library/src/com/actionbarsherlock/internal/app/ActionBarImpl.java create mode 100644 actionbarsherlock/library/src/com/actionbarsherlock/internal/app/ActionBarWrapper.java create mode 100644 actionbarsherlock/library/src/com/actionbarsherlock/internal/app/SherlockActivity.java create mode 100644 actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/ActionMenuItem.java create mode 100644 actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/ActionMenuItemView.java create mode 100644 actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/MenuBuilder.java create mode 100644 actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/MenuInflaterWrapper.java create mode 100644 actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/MenuItemImpl.java create mode 100644 actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/MenuItemWrapper.java create mode 100644 actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/MenuView.java create mode 100644 actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/MenuWrapper.java create mode 100644 actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/SubMenuBuilder.java create mode 100644 actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/SubMenuWrapper.java create mode 100644 actionbarsherlock/library/src/com/actionbarsherlock/internal/widget/ActionBarContainer.java create mode 100644 actionbarsherlock/library/src/com/actionbarsherlock/internal/widget/ActionBarView.java create mode 100644 actionbarsherlock/library/src/com/actionbarsherlock/internal/widget/ScrollingTextView.java create mode 100644 actionbarsherlock/plugins/README.md create mode 100644 actionbarsherlock/plugins/maps/AndroidManifest.xml create mode 100644 actionbarsherlock/plugins/maps/README.md create mode 100644 actionbarsherlock/plugins/maps/checkstyle.xml create mode 100644 actionbarsherlock/plugins/maps/pom.xml create mode 100644 actionbarsherlock/plugins/maps/project.properties create mode 100644 actionbarsherlock/plugins/maps/src/android/support/v4/app/FragmentMapActivity.java create mode 100644 actionbarsherlock/plugins/maps/update.py create mode 100644 actionbarsherlock/plugins/pom.xml create mode 100644 actionbarsherlock/plugins/preference/AndroidManifest.xml create mode 100644 actionbarsherlock/plugins/preference/README.md create mode 100644 actionbarsherlock/plugins/preference/checkstyle.xml create mode 100644 actionbarsherlock/plugins/preference/pom.xml create mode 100644 actionbarsherlock/plugins/preference/project.properties create mode 100644 actionbarsherlock/plugins/preference/src/android/support/v4/app/SherlockPreferenceActivity.java create mode 100644 actionbarsherlock/pom.xml create mode 100644 actionbarsherlock/samples/README.md create mode 100644 actionbarsherlock/samples/demos/AndroidManifest.xml create mode 100644 actionbarsherlock/samples/demos/README.md create mode 100644 actionbarsherlock/samples/demos/pom.xml create mode 100644 actionbarsherlock/samples/demos/project.properties create mode 100644 actionbarsherlock/samples/demos/res/anim/decelerate_quint.xml create mode 100644 actionbarsherlock/samples/demos/res/anim/fragment_slide_left_enter.xml create mode 100644 actionbarsherlock/samples/demos/res/anim/fragment_slide_left_exit.xml create mode 100644 actionbarsherlock/samples/demos/res/anim/fragment_slide_right_enter.xml create mode 100644 actionbarsherlock/samples/demos/res/anim/fragment_slide_right_exit.xml create mode 100644 actionbarsherlock/samples/demos/res/drawable-hdpi/alert_dialog_icon.png create mode 100644 actionbarsherlock/samples/demos/res/drawable-hdpi/ic_compose.png create mode 100644 actionbarsherlock/samples/demos/res/drawable-hdpi/ic_magnifying_glass.png create mode 100644 actionbarsherlock/samples/demos/res/drawable-hdpi/ic_refresh.png create mode 100644 actionbarsherlock/samples/demos/res/drawable-hdpi/ic_search.png create mode 100644 actionbarsherlock/samples/demos/res/drawable-hdpi/ic_title_share_default.png create mode 100644 actionbarsherlock/samples/demos/res/drawable-hdpi/icon.png create mode 100644 actionbarsherlock/samples/demos/res/drawable-ldpi/icon.png create mode 100644 actionbarsherlock/samples/demos/res/drawable-mdpi/alert_dialog_icon.png create mode 100644 actionbarsherlock/samples/demos/res/drawable-mdpi/ic_compose.png create mode 100644 actionbarsherlock/samples/demos/res/drawable-mdpi/ic_magnifying_glass.png create mode 100644 actionbarsherlock/samples/demos/res/drawable-mdpi/ic_refresh.png create mode 100644 actionbarsherlock/samples/demos/res/drawable-mdpi/ic_search.png create mode 100644 actionbarsherlock/samples/demos/res/drawable-mdpi/icon.png create mode 100644 actionbarsherlock/samples/demos/res/drawable-xhdpi/icon.png create mode 100644 actionbarsherlock/samples/demos/res/drawable/custom_bg.xml create mode 100644 actionbarsherlock/samples/demos/res/drawable/custom_bg_img.png create mode 100644 actionbarsherlock/samples/demos/res/layout-land/actionbar_feature_toggles_activity.xml create mode 100644 actionbarsherlock/samples/demos/res/layout-land/fragment_arguments_support.xml create mode 100644 actionbarsherlock/samples/demos/res/layout-land/fragment_layout_support.xml create mode 100644 actionbarsherlock/samples/demos/res/layout/actionbar_custom_view.xml create mode 100644 actionbarsherlock/samples/demos/res/layout/actionbar_feature_toggles_activity.xml create mode 100644 actionbarsherlock/samples/demos/res/layout/actionbar_iprogress.xml create mode 100644 actionbarsherlock/samples/demos/res/layout/actionbar_overlay.xml create mode 100644 actionbarsherlock/samples/demos/res/layout/actionbar_pagerfragmentmenus.xml create mode 100644 actionbarsherlock/samples/demos/res/layout/actionbar_preferenceactivity.xml create mode 100644 actionbarsherlock/samples/demos/res/layout/actionbar_styles.xml create mode 100644 actionbarsherlock/samples/demos/res/layout/actionbar_tab_custom_view.xml create mode 100644 actionbarsherlock/samples/demos/res/layout/actionbar_tabs_pager.xml create mode 100644 actionbarsherlock/samples/demos/res/layout/actionbar_text.xml create mode 100644 actionbarsherlock/samples/demos/res/layout/fragment_arguments_support.xml create mode 100644 actionbarsherlock/samples/demos/res/layout/fragment_context_menu.xml create mode 100644 actionbarsherlock/samples/demos/res/layout/fragment_dialog.xml create mode 100644 actionbarsherlock/samples/demos/res/layout/fragment_dialog_or_activity.xml create mode 100644 actionbarsherlock/samples/demos/res/layout/fragment_hide_show_support.xml create mode 100644 actionbarsherlock/samples/demos/res/layout/fragment_layout_support.xml create mode 100644 actionbarsherlock/samples/demos/res/layout/fragment_menu.xml create mode 100644 actionbarsherlock/samples/demos/res/layout/fragment_pager.xml create mode 100644 actionbarsherlock/samples/demos/res/layout/fragment_pager_list.xml create mode 100644 actionbarsherlock/samples/demos/res/layout/fragment_pagermenus.xml create mode 100644 actionbarsherlock/samples/demos/res/layout/fragment_retain_instance.xml create mode 100644 actionbarsherlock/samples/demos/res/layout/fragment_stack.xml create mode 100644 actionbarsherlock/samples/demos/res/layout/fragment_tabs.xml create mode 100644 actionbarsherlock/samples/demos/res/layout/fragment_tabs_pager.xml create mode 100644 actionbarsherlock/samples/demos/res/layout/hello_world.xml create mode 100644 actionbarsherlock/samples/demos/res/layout/labeled_text_edit.xml create mode 100644 actionbarsherlock/samples/demos/res/layout/list_item_icon_text.xml create mode 100644 actionbarsherlock/samples/demos/res/layout/local_service_broadcaster.xml create mode 100644 actionbarsherlock/samples/demos/res/layout/receive_result.xml create mode 100644 actionbarsherlock/samples/demos/res/layout/send_result.xml create mode 100644 actionbarsherlock/samples/demos/res/layout/simple_list_item_checkable_1.xml create mode 100644 actionbarsherlock/samples/demos/res/values-v11/styles.xml create mode 100644 actionbarsherlock/samples/demos/res/values/arrays.xml create mode 100644 actionbarsherlock/samples/demos/res/values/attrs.xml create mode 100644 actionbarsherlock/samples/demos/res/values/colors.xml create mode 100644 actionbarsherlock/samples/demos/res/values/strings.xml create mode 100644 actionbarsherlock/samples/demos/res/values/styles.xml create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/Cheeses.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/Shakespeare.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/Support4Demos.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarActionItemText.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarCustomNavigation.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarFeatureToggles.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarIndeterminateProgress.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarListNavigation.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarMenuSupport.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarOverlay.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarPagerFragmentMenus.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarSimple.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarStyles.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarSubMenus.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarTabNavigation.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarTabsPager.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentAlertDialogSupport.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentArgumentsSupport.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentContextMenuSupport.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentCustomAnimationSupport.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentDialogOrActivitySupport.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentDialogSupport.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentHideShowSupport.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentLayoutSupport.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentListArraySupport.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentMenuSupport.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentPagerMenus.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentPagerSupport.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentReceiveResultSupport.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentRetainInstanceSupport.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentStackSupport.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentStatePagerSupport.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentTabs.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentTabsPager.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/LoaderCursorSupport.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/LoaderCustomSupport.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/LoaderThrottleSupport.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/SendResult.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/content/LocalServiceBroadcaster.java create mode 100644 actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/view/CheckableFrameLayout.java create mode 100644 actionbarsherlock/samples/plugins/AndroidManifest.xml create mode 100644 actionbarsherlock/samples/plugins/README.md create mode 100644 actionbarsherlock/samples/plugins/pom.xml create mode 100644 actionbarsherlock/samples/plugins/project.properties create mode 100644 actionbarsherlock/samples/plugins/res/drawable-hdpi/ic_compose.png create mode 100644 actionbarsherlock/samples/plugins/res/drawable-hdpi/ic_refresh.png create mode 100644 actionbarsherlock/samples/plugins/res/drawable-hdpi/ic_search.png create mode 100644 actionbarsherlock/samples/plugins/res/drawable-hdpi/icon.png create mode 100644 actionbarsherlock/samples/plugins/res/drawable-ldpi/icon.png create mode 100644 actionbarsherlock/samples/plugins/res/drawable-mdpi/ic_compose.png create mode 100644 actionbarsherlock/samples/plugins/res/drawable-mdpi/ic_refresh.png create mode 100644 actionbarsherlock/samples/plugins/res/drawable-mdpi/ic_search.png create mode 100644 actionbarsherlock/samples/plugins/res/drawable-mdpi/icon.png create mode 100644 actionbarsherlock/samples/plugins/res/drawable-xhdpi/icon.png create mode 100644 actionbarsherlock/samples/plugins/res/layout/actionbar_preferenceactivity.xml create mode 100644 actionbarsherlock/samples/plugins/res/layout/map_simple.xml create mode 100644 actionbarsherlock/samples/plugins/res/values/arrays.xml create mode 100644 actionbarsherlock/samples/plugins/res/values/strings.xml create mode 100644 actionbarsherlock/samples/plugins/res/xml/preferences.xml create mode 100644 actionbarsherlock/samples/plugins/src/com/actionbarsherlock/sample/plugins/Support4Demos.java create mode 100644 actionbarsherlock/samples/plugins/src/com/actionbarsherlock/sample/plugins/app/MapActivity.java create mode 100644 actionbarsherlock/samples/plugins/src/com/actionbarsherlock/sample/plugins/app/MapActivityActionBar.java create mode 100644 actionbarsherlock/samples/plugins/src/com/actionbarsherlock/sample/plugins/app/MapFragment.java create mode 100644 actionbarsherlock/samples/plugins/src/com/actionbarsherlock/sample/plugins/app/MapFragmentActionBar.java create mode 100644 actionbarsherlock/samples/plugins/src/com/actionbarsherlock/sample/plugins/app/PreferenceSimple.java create mode 100644 actionbarsherlock/samples/pom.xml create mode 100644 actionbarsherlock/samples/shakespeare/AndroidManifest.xml create mode 100644 actionbarsherlock/samples/shakespeare/README.md create mode 100644 actionbarsherlock/samples/shakespeare/pom.xml create mode 100644 actionbarsherlock/samples/shakespeare/project.properties create mode 100644 actionbarsherlock/samples/shakespeare/res/drawable-hdpi/icon.png create mode 100644 actionbarsherlock/samples/shakespeare/res/drawable-ldpi/icon.png create mode 100644 actionbarsherlock/samples/shakespeare/res/drawable-mdpi/icon.png create mode 100644 actionbarsherlock/samples/shakespeare/res/drawable-xhdpi/icon.png create mode 100644 actionbarsherlock/samples/shakespeare/res/layout-land/activity_titles.xml create mode 100644 actionbarsherlock/samples/shakespeare/res/layout-xlarge-land/activity_titles.xml create mode 100644 actionbarsherlock/samples/shakespeare/res/layout/activity_titles.xml create mode 100644 actionbarsherlock/samples/shakespeare/res/values/strings.xml create mode 100644 actionbarsherlock/samples/shakespeare/src/com/actionbarsherlock/sample/shakespeare/Shakespeare.java create mode 100644 actionbarsherlock/samples/shakespeare/src/com/actionbarsherlock/sample/shakespeare/activities/DetailsActivity.java create mode 100644 actionbarsherlock/samples/shakespeare/src/com/actionbarsherlock/sample/shakespeare/activities/TitlesActivity.java create mode 100644 actionbarsherlock/samples/shakespeare/src/com/actionbarsherlock/sample/shakespeare/fragments/DetailsFragment.java create mode 100644 actionbarsherlock/samples/shakespeare/src/com/actionbarsherlock/sample/shakespeare/fragments/TitlesFragment.java create mode 100644 actionbarsherlock/samples/styled/AndroidManifest.xml create mode 100644 actionbarsherlock/samples/styled/README.md create mode 100644 actionbarsherlock/samples/styled/pom.xml create mode 100644 actionbarsherlock/samples/styled/project.properties create mode 100644 actionbarsherlock/samples/styled/res/drawable-hdpi-v9/ic_stat_android.png create mode 100644 actionbarsherlock/samples/styled/res/drawable-hdpi/ic_stat_android.png create mode 100644 actionbarsherlock/samples/styled/res/drawable-hdpi/icon.png create mode 100644 actionbarsherlock/samples/styled/res/drawable-ldpi-v9/ic_stat_android.png create mode 100644 actionbarsherlock/samples/styled/res/drawable-ldpi/ic_stat_android.png create mode 100644 actionbarsherlock/samples/styled/res/drawable-ldpi/icon.png create mode 100644 actionbarsherlock/samples/styled/res/drawable-mdpi-v9/ic_stat_android.png create mode 100644 actionbarsherlock/samples/styled/res/drawable-mdpi/ad_btn_check_off_pressed_holo_light.png create mode 100644 actionbarsherlock/samples/styled/res/drawable-mdpi/ad_btn_check_on_pressed_holo_light.png create mode 100644 actionbarsherlock/samples/styled/res/drawable-mdpi/ad_btn_radio_off_pressed_holo_light.png create mode 100644 actionbarsherlock/samples/styled/res/drawable-mdpi/ad_btn_radio_on_pressed_holo_light.png create mode 100644 actionbarsherlock/samples/styled/res/drawable-mdpi/ad_logo.png create mode 100644 actionbarsherlock/samples/styled/res/drawable-mdpi/ad_menu_dropdown_panel_holo_light.9.png create mode 100644 actionbarsherlock/samples/styled/res/drawable-mdpi/ad_spinner_focused_holo_light.9.png create mode 100644 actionbarsherlock/samples/styled/res/drawable-mdpi/ad_spinner_pressed_holo_light.9.png create mode 100644 actionbarsherlock/samples/styled/res/drawable-mdpi/ad_tab_selected_holo.9.png create mode 100644 actionbarsherlock/samples/styled/res/drawable-mdpi/ad_tab_selected_pressed_holo.9.png create mode 100644 actionbarsherlock/samples/styled/res/drawable-mdpi/ad_tab_unselected_holo.9.png create mode 100644 actionbarsherlock/samples/styled/res/drawable-mdpi/btn_check_off_holo_light.png create mode 100644 actionbarsherlock/samples/styled/res/drawable-mdpi/btn_check_on_holo_light.png create mode 100644 actionbarsherlock/samples/styled/res/drawable-mdpi/btn_radio_off_holo_light.png create mode 100644 actionbarsherlock/samples/styled/res/drawable-mdpi/btn_radio_on_holo_light.png create mode 100644 actionbarsherlock/samples/styled/res/drawable-mdpi/ic_menu_refresh_holo_light.png create mode 100644 actionbarsherlock/samples/styled/res/drawable-mdpi/ic_menu_star_holo_light.png create mode 100644 actionbarsherlock/samples/styled/res/drawable-mdpi/ic_stat_android.png create mode 100644 actionbarsherlock/samples/styled/res/drawable-mdpi/icon.png create mode 100644 actionbarsherlock/samples/styled/res/drawable-mdpi/spinner_default_holo_light.9.png create mode 100644 actionbarsherlock/samples/styled/res/drawable-mdpi/spinner_disabled_holo_light.9.png create mode 100644 actionbarsherlock/samples/styled/res/drawable-xhdpi/icon.png create mode 100644 actionbarsherlock/samples/styled/res/drawable/actionbar_tab_bg.xml create mode 100644 actionbarsherlock/samples/styled/res/drawable/ad_action_bar_gradient_bak.xml create mode 100644 actionbarsherlock/samples/styled/res/drawable/ad_btn_check_holo_light.xml create mode 100644 actionbarsherlock/samples/styled/res/drawable/ad_btn_radio_holo_light.xml create mode 100644 actionbarsherlock/samples/styled/res/drawable/ad_selectable_background.xml create mode 100644 actionbarsherlock/samples/styled/res/drawable/ad_spinner_background_holo_light.xml create mode 100644 actionbarsherlock/samples/styled/res/drawable/rounded_rect.xml create mode 100644 actionbarsherlock/samples/styled/res/drawable/selected_background.xml create mode 100644 actionbarsherlock/samples/styled/res/layout/indeterminate_progress_action.xml create mode 100644 actionbarsherlock/samples/styled/res/layout/main.xml create mode 100644 actionbarsherlock/samples/styled/res/menu-v11/main_menu.xml create mode 100644 actionbarsherlock/samples/styled/res/menu/main_menu.xml create mode 100644 actionbarsherlock/samples/styled/res/values-v11/styles.xml create mode 100644 actionbarsherlock/samples/styled/res/values/arrays.xml create mode 100644 actionbarsherlock/samples/styled/res/values/colors.xml create mode 100644 actionbarsherlock/samples/styled/res/values/dimens.xml create mode 100644 actionbarsherlock/samples/styled/res/values/strings.xml create mode 100644 actionbarsherlock/samples/styled/res/values/styles.xml create mode 100644 actionbarsherlock/samples/styled/src/com/actionbarsherlock/sample/styledactionbar/MainActivity.java create mode 100644 actionbarsherlock/samples/styled/src/com/actionbarsherlock/sample/styledactionbar/RoundedColourFragment.java create mode 100644 actionbarsherlock/test/README.md create mode 100644 actionbarsherlock/test/app/AndroidManifest.xml create mode 100644 actionbarsherlock/test/app/README.md create mode 100644 actionbarsherlock/test/app/pom.xml create mode 100644 actionbarsherlock/test/app/project.properties create mode 100644 actionbarsherlock/test/app/res/drawable-hdpi/icon.png create mode 100644 actionbarsherlock/test/app/res/drawable-ldpi/icon.png create mode 100644 actionbarsherlock/test/app/res/drawable-mdpi/ic_menu_star_holo_light.png create mode 100644 actionbarsherlock/test/app/res/drawable-mdpi/icon.png create mode 100644 actionbarsherlock/test/app/res/drawable-xhdpi/icon.png create mode 100644 actionbarsherlock/test/app/res/layout/blank.xml create mode 100644 actionbarsherlock/test/app/res/layout/issue0038.xml create mode 100644 actionbarsherlock/test/app/res/menu/issue0031.xml create mode 100644 actionbarsherlock/test/app/res/menu/issue0033.xml create mode 100644 actionbarsherlock/test/app/res/values/strings.xml create mode 100644 actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/FeatureCustomView.java create mode 100644 actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/FeatureEnableActionItemText.java create mode 100644 actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0002.java create mode 100644 actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0030.java create mode 100644 actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0031.java create mode 100644 actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0033.java create mode 100644 actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0035.java create mode 100644 actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0036.java create mode 100644 actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0038.java create mode 100644 actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0042.java create mode 100644 actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0045.java create mode 100644 actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0048.java create mode 100644 actionbarsherlock/test/pom.xml create mode 100644 actionbarsherlock/test/runner/AndroidManifest.xml create mode 100644 actionbarsherlock/test/runner/README.md create mode 100644 actionbarsherlock/test/runner/pom.xml create mode 100644 actionbarsherlock/test/runner/project.properties create mode 100644 actionbarsherlock/test/runner/res/drawable-hdpi/icon.png create mode 100644 actionbarsherlock/test/runner/res/drawable-ldpi/icon.png create mode 100644 actionbarsherlock/test/runner/res/drawable-mdpi/icon.png create mode 100644 actionbarsherlock/test/runner/res/drawable-xhdpi/icon.png create mode 100644 actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/BaseTestCase.java create mode 100644 actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestFeatureCustomView.java create mode 100644 actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestFeatureEnableActionItemText.java create mode 100644 actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0002.java create mode 100644 actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0030.java create mode 100644 actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0031.java create mode 100644 actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0033.java create mode 100644 actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0035.java create mode 100644 actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0036.java create mode 100644 actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0038.java create mode 100644 actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0039.java create mode 100644 actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0042.java create mode 100644 actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0045.java create mode 100644 actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0048.java create mode 100644 actionbarsherlock/update-version.py create mode 100644 actionbarsherlock/website/resources/.gitignore create mode 100644 actionbarsherlock/website/resources/CNAME create mode 100644 actionbarsherlock/website/resources/_config.yml create mode 100644 actionbarsherlock/website/resources/_layouts/default.html create mode 100644 actionbarsherlock/website/resources/development.html create mode 100644 actionbarsherlock/website/resources/download.html create mode 100644 actionbarsherlock/website/resources/faq.html create mode 100644 actionbarsherlock/website/resources/favicon.ico create mode 100644 actionbarsherlock/website/resources/humans.txt create mode 100644 actionbarsherlock/website/resources/index.html create mode 100644 actionbarsherlock/website/resources/merch-and-donations.html create mode 100644 actionbarsherlock/website/resources/robots.txt create mode 100644 actionbarsherlock/website/resources/samples.html create mode 100644 actionbarsherlock/website/resources/sitemap.xml create mode 100644 actionbarsherlock/website/resources/static/1120.css create mode 100644 actionbarsherlock/website/resources/static/apps/com.abcOrganizer.png create mode 100644 actionbarsherlock/website/resources/static/apps/com.battlelancer.seriesguide.png create mode 100644 actionbarsherlock/website/resources/static/apps/com.battlelancer.seriesguide_01_2.3.4.png create mode 100644 actionbarsherlock/website/resources/static/apps/com.battlelancer.seriesguide_01_2.3.4.thumb.png create mode 100644 actionbarsherlock/website/resources/static/apps/com.battlelancer.seriesguide_01_3.0.png create mode 100644 actionbarsherlock/website/resources/static/apps/com.battlelancer.seriesguide_01_3.0.thumb.png create mode 100644 actionbarsherlock/website/resources/static/apps/com.battlelancer.seriesguide_02_2.3.4.png create mode 100644 actionbarsherlock/website/resources/static/apps/com.battlelancer.seriesguide_02_2.3.4.thumb.png create mode 100644 actionbarsherlock/website/resources/static/apps/com.battlelancer.seriesguide_02_3.0.png create mode 100644 actionbarsherlock/website/resources/static/apps/com.battlelancer.seriesguide_02_3.0.thumb.png create mode 100644 actionbarsherlock/website/resources/static/apps/com.ratebeer.android.png create mode 100644 actionbarsherlock/website/resources/static/apps/uk.co.senab.blueNotifyFree.png create mode 100644 actionbarsherlock/website/resources/static/black_linen_v2.png create mode 100644 actionbarsherlock/website/resources/static/border.png create mode 100644 actionbarsherlock/website/resources/static/controls.png create mode 100644 actionbarsherlock/website/resources/static/css3-mediaqueries.js create mode 100644 actionbarsherlock/website/resources/static/feature.png create mode 100644 actionbarsherlock/website/resources/static/feature_01.png create mode 100644 actionbarsherlock/website/resources/static/feature_02.png create mode 100644 actionbarsherlock/website/resources/static/feature_03.png create mode 100644 actionbarsherlock/website/resources/static/icon_tgz.png create mode 100644 actionbarsherlock/website/resources/static/icon_web.png create mode 100644 actionbarsherlock/website/resources/static/icon_zip.png create mode 100644 actionbarsherlock/website/resources/static/ie.css create mode 100644 actionbarsherlock/website/resources/static/jquery.colorbox-min.js create mode 100644 actionbarsherlock/website/resources/static/jquery.cross-slide.min.js create mode 100644 actionbarsherlock/website/resources/static/loading.gif create mode 100644 actionbarsherlock/website/resources/static/loading_background.png create mode 100644 actionbarsherlock/website/resources/static/logo.png create mode 100644 actionbarsherlock/website/resources/static/logo.psd create mode 100644 actionbarsherlock/website/resources/static/logo_small.png create mode 100644 actionbarsherlock/website/resources/static/mascot.png create mode 100644 actionbarsherlock/website/resources/static/merch.png create mode 100644 actionbarsherlock/website/resources/static/octocat.png create mode 100644 actionbarsherlock/website/resources/static/overlay.png create mode 100644 actionbarsherlock/website/resources/static/ribbon.png create mode 100644 actionbarsherlock/website/resources/static/samples/featuredemo_01_1.6.png create mode 100644 actionbarsherlock/website/resources/static/samples/featuredemo_01_1.6.thumb.png create mode 100644 actionbarsherlock/website/resources/static/samples/featuredemo_01_2.3.3.png create mode 100644 actionbarsherlock/website/resources/static/samples/featuredemo_01_2.3.3.thumb.png create mode 100644 actionbarsherlock/website/resources/static/samples/featuredemo_01_3.1.png create mode 100644 actionbarsherlock/website/resources/static/samples/featuredemo_01_3.1.thumb.png create mode 100644 actionbarsherlock/website/resources/static/samples/featuredemo_02_1.6.png create mode 100644 actionbarsherlock/website/resources/static/samples/featuredemo_02_1.6.thumb.png create mode 100644 actionbarsherlock/website/resources/static/samples/featuredemo_02_2.3.3.png create mode 100644 actionbarsherlock/website/resources/static/samples/featuredemo_02_2.3.3.thumb.png create mode 100644 actionbarsherlock/website/resources/static/samples/featuredemo_02_3.1.png create mode 100644 actionbarsherlock/website/resources/static/samples/featuredemo_02_3.1.thumb.png create mode 100644 actionbarsherlock/website/resources/static/samples/shakespeare_01_1.6.png create mode 100644 actionbarsherlock/website/resources/static/samples/shakespeare_01_1.6.thumb.png create mode 100644 actionbarsherlock/website/resources/static/samples/shakespeare_01_2.3.3.png create mode 100644 actionbarsherlock/website/resources/static/samples/shakespeare_01_2.3.3.thumb.png create mode 100644 actionbarsherlock/website/resources/static/samples/shakespeare_01_3.1.png create mode 100644 actionbarsherlock/website/resources/static/samples/shakespeare_01_3.1.thumb.png create mode 100644 actionbarsherlock/website/resources/static/samples/shakespeare_02_2.3.3.png create mode 100644 actionbarsherlock/website/resources/static/samples/shakespeare_02_2.3.3.thumb.png create mode 100644 actionbarsherlock/website/resources/static/samples/shakespeare_03_2.3.3.png create mode 100644 actionbarsherlock/website/resources/static/samples/shakespeare_03_2.3.3.thumb.png create mode 100644 actionbarsherlock/website/resources/static/samples/styled_01_1.6.png create mode 100644 actionbarsherlock/website/resources/static/samples/styled_01_1.6.thumb.png create mode 100644 actionbarsherlock/website/resources/static/samples/styled_01_2.3.3.png create mode 100644 actionbarsherlock/website/resources/static/samples/styled_01_2.3.3.thumb.png create mode 100644 actionbarsherlock/website/resources/static/samples/styled_01_3.1.png create mode 100644 actionbarsherlock/website/resources/static/samples/styled_01_3.1.thumb.png create mode 100644 actionbarsherlock/website/resources/static/samples/styled_02_1.6.png create mode 100644 actionbarsherlock/website/resources/static/samples/styled_02_1.6.thumb.png create mode 100644 actionbarsherlock/website/resources/static/samples/styled_02_2.3.3.png create mode 100644 actionbarsherlock/website/resources/static/samples/styled_02_2.3.3.thumb.png create mode 100644 actionbarsherlock/website/resources/static/samples/styled_02_3.1.png create mode 100644 actionbarsherlock/website/resources/static/samples/styled_02_3.1.thumb.png create mode 100644 actionbarsherlock/website/resources/static/showdown.js create mode 100644 actionbarsherlock/website/resources/static/styles.css create mode 100644 actionbarsherlock/website/resources/support.html create mode 100644 actionbarsherlock/website/resources/theming.html create mode 100644 actionbarsherlock/website/resources/usage.html create mode 100644 actionbarsherlock/website/site.xml create mode 100644 astrid/.settings/org.eclipse.core.resources.prefs create mode 100644 astrid/plugin-src/com/todoroo/astrid/actfm/TagViewWrapperActivity.java create mode 100644 astrid/res/layout-land/filter_list_wrapper_activity.xml create mode 100644 astrid/res/layout-land/task_list_wrapper_activity.xml create mode 100644 astrid/res/layout/filter_list_wrapper_activity.xml create mode 100644 astrid/res/layout/task_list_wrapper_activity.xml create mode 100644 astrid/src/com/todoroo/astrid/activity/AstridWrapperActivity.java create mode 100644 astrid/src/com/todoroo/astrid/activity/ExpandableListFragment.java create mode 100644 astrid/src/com/todoroo/astrid/activity/FilterListFragment.txt create mode 100644 astrid/src/com/todoroo/astrid/activity/FilterListWrapperActivity.java create mode 100644 astrid/src/com/todoroo/astrid/activity/TaskListWrapperActivity.java diff --git a/actionbarsherlock/.gitignore b/actionbarsherlock/.gitignore new file mode 100644 index 000000000..e2c834f53 --- /dev/null +++ b/actionbarsherlock/.gitignore @@ -0,0 +1,29 @@ +#Android generated +bin +gen + +#Eclipse +.project +.classpath +.settings + +#IntelliJ IDEA +.idea +*.iml +*.ipr +*.iws + +#Maven +target +release.properties +pom.xml.* + +website/_site + +#Ant +build.xml +local.properties +proguard.cfg + +#OSX +.DS_Store diff --git a/actionbarsherlock/CHANGELOG.md b/actionbarsherlock/CHANGELOG.md new file mode 100644 index 000000000..6496e4719 --- /dev/null +++ b/actionbarsherlock/CHANGELOG.md @@ -0,0 +1,343 @@ +Change Log +=============================================================================== + +Version 3.4.2 *(2001-11-10)* +---------------------------- + + * Fix: Stacked action bar now properly sets the tab bar background based on + the theme. + + +Version 3.4.1 *(2011-11-09)* +---------------------------- + + * The `makeFragmentName` method in `FragmentPagerAdapter` has been changed to + `public` scope to allow for easier access to your fragments that it is + managing. + * Action bar will now animate when calling `show()` or `hide()`. + * `SherlockPreferenceActivity` now provides full fragment and loader support. + * Examples for the plugins are now in their own sample application. + * Fix: Home icon no longer erroneously clipped when it exceeds the size of the + action bar. + * Fix: Tabs will now scroll horizontally to mimic the native action bar + behavior. + * Fix: Plugins now properly DO NOT inline their `R.java` integer constants. + * Fix: Tabs below the action bar are now styled with a default background so + that they do not incorrectly inherit an applied background unless explicity + declared. + + +Version 3.4.0 *(2011-10-30)* +---------------------------- + + * Library now uses the `r4` version of the compatibility library for its base. + Ice Cream Sandwich-specific implementations are currently disabled, however, + but will be added in a future version of the library. + * Context menu callbacks now use the support version of `MenuItem` to maintain + consistency. + * Added preference plugin which provides an action bar enhanced preference + screen. + * Fix: `abHomeLayout` theme attribute is now honored. + * Fix: `onPrepareOptionsMenu` is now properly dispatched upon menu + invalidation. + + +Version 3.3.1 *(2011-10-20)* +---------------------------- + +ADT 14 is now required. Maven 3 is required if building from the command line. + + * XML-defined `onClick` attributes will now check for an `onClick` method that + takes an `android.support.v4.view.MenuItem` instance. + * Tabs on medium screens in landscape now display inline rather than below the + action bar to mirror how Android 4.0 behaves with the same configuration. + * Fix: Menu inflater properly checks activity context for `onClick` method + declared in the XML. + * Fix: Dialog fragment properly saves its `showDialog` state when not being + used as a popup. + * Fix: Return `-1` when in tab navigation but no tab is selected. This brings + the library in line with the post-3.0 behavior. + * Fix: Removing a menu group no longer throws an `IndexOutOfBoundsException`. + * Fix: `getSelectedTab` and `getTabAt` no longer throw `NullPointerException`s + on post-3.0 when no tab was selected or no tab existed at the specified + position, respectively. + * Fix: `findFragmentById` now properly returns fragments attached to + `android.R.id.content` when run on pre-3.0 devices. + + +Version 3.3.0 *(2011-10-11)* +---------------------------- + + * Tabs are now displayed below the action bar on all medium-screen devices and + portrait large-screen devices. + * Fix: Dialog fragments no longer throw an `IllegalStateException` when being + used as a regular fragment (i.e., not as a popup). See + [StackOverflow](http://stackoverflow.com/questions/5637894/dialogfragments-with-devices-api-level-11/7560686#7560686) + for more information. + * Fix: Popping a fragment off of the back stack now properly assigns its parent + activity. + * Fix: An activity result no longer causes a `NullPointerException` when the + target fragment no longer exists. + * Fix: Action item dividers are now properly initially hidden when their + associated action items are as well. + + +Version 3.2.3 *(2011-09-16)* +---------------------------- + + * Fix: Fragments in a `ViewPager` that contributed items to the options menu + were caught in a race condition causing inconsistent results when a new page + was selected. This regression was introduced in version 3.2.2. + + +Version 3.2.2 *(2011-09-15)* +---------------------------- + + * Fix: Side-effects related to using `FragmentMapActivity` due to how it was + referencing resources from the main library. + * Fix: Fragments adjacent to the currently selected fragment in a `ViewPager` + no longer receive context menu events. + * Fix: Eliminate exception when inflating context menus on 3.0+ when using + `getMenuInflater()`. + * Fix: `ViewPager` now determines whether or not an activity menu invalidation + is required independently of whether or not fragments were created or + destroyed. This should fix an edge case where an activity with a `ViewPager` + containing only two fragments would not get its menu properly invalidated. + + +Version 3.2.1 *(2011-09-12)* +---------------------------- + + * Fix: Action mode API incorrectly using the native `Menu` and `MenuItem` + classes causing an easy pitfall for `ClassCastExceptions`. + * Fix: Large action bar backgrounds increasing the size beyond that alloted in + the theme. + + +Version 3.2.0 *(2011-09-05)* +---------------------------- + + * Added support for `MapView` and the Google APIs through the use of + `FragmentMapActivity`. If you are using a map within a fragment you must + ensure it is always attached to an activity which extends from this new base + class. + + Since supporting maps requires compiling against the Google APIs, this + functionality is implemented in the form of a plugin which is to be used + alongside the normal library. You can choose to add it as an additional + library project or by including it as a `.jar`. Maven users may simply + include the additional dependency (artifactId: `plugin-maps`). + * Fix: Fragments adjacent to the currently selected fragment in a `ViewPager` + no longer contribute to the activity menu. + * `ActionBar.Tab` has been changed from an interface to an abstract class to + mirror its native counterpart. + + +Version 3.1.3 *(2011-08-14)* +---------------------------- + + * Renamed all resources to be prefixed with `abs__` to avoid conflicts when + including in your project. + * Fix: Action bar background being set on two views causing artifacts to remain + on screen when the action bar was hidden. + * Fix: Incorrect sub-menu item being selected by default when the sub-menu was + triggered from the native options menu on pre-3.0. + * Fix: `MenuItem.setVisible` now properly updates the associated action item and + native menu item visible state. + * Fix: Adding items to a menu now honors its ordering and category. + * Fix: Fragment options item selected callback now uses the proper version of + `MenuItem`. + + +Version 3.1.2 *(2011-08-07)* +---------------------------- + + * Fix: `MenuItem.getMenuInfo()` was throwing runtime exception. Will now just + return `null`. + * Fix: Dragging over a `WebView` contained in a `ViewPager` would not register. + * Fix: Inflation of context menu incorrectly being handled by the custom menu + inflater for the library. + + +Version 3.1.1 *(2011-07-31)* +---------------------------- + + * Fix: `MenuItem.getSubMenu` now returns a support instance rather than a + native instance. + * Fix: Fragment methods `onAttach` and `onInflate` incorrectly regressed to use + `Activity` instead of a `FragmentActivity` in their method signatures. + * Fix: Retained fragments not being re-attached on pre-3.0 when attached to + `android.R.id.content` upon activity recreation. + * Fix: `onPrepareOptionsMenu` not dispatched to fragments. This still will only + occur if the activity method returns true (which is the default). + * Fix: `Menu.findItem` not returning `null` when the item was not found on + Android 3.0+. + + +Version 3.1.0 *(2011-07-22)* +---------------------------- + +Due to shortcomings in the Android theming system, a small change must be made +in how this library handles themes. If you were using a custom style for +`actionBarStyle` you must now specify its attributes in the root of the theme +and prefix them with 'ab'. + +You can see an example of this in the `SherlockCustom` theme in +`samples/demos/res/values/styles.xml`. + + * Library now uses the `r3` version of the compatibility library for its base. + * `actionBarStyle` is no longer a valid theme attribute (see note above). + * Added the demo project included with the new compatibility library under + `samples/demos/` and merged in the old 'featuredemo'. + * Dividers are now shown on pre-3.0 devices between all action items. + * `Window.FEATURE_ACTION_BAR_OVERLAY` is now honored on pre-3.0 devices. + * Inflation of XML menu resources will now honor `android:actionLayout` and + `android:actionViewClass` attributes. + * Buttons for displaying the determinate and indeterminate progress bars have + been added to the feature toggle demo. + * Added support for indeterminate progress bar. Due to the `final` modifier on + the native type, you must use `setIndeterminateProgressBarVisibility(Boolean)` + and pass `Boolean.TRUE` or `Boolean.FALSE`. + * Fix: `MenuBuilder#removeItem(int)` and `MenuBuilder#findItem(int)` throwing + `IndexOutOfBoundsException`s when the item was not found. + * Fix: Theme attributes for home item data (e.g., icon, logo) will not be + overwritten by the special `MenuItem` instance for home. + * Fix: Native strings can now be specified for an XML menu `` in + `android:title` and `android:titleCondensed`. + * `Window.FEATURE_ENABLE_ACTION_BAR_WATSON_TEXT` is now + `Window.FEATURE_ACTION_BAR_ITEM_TEXT`. + * `Widget.Sherlock.Spinner.DropDown.ActionBar` and + `Widget.Sherlock.Light.Spinner.DropDown.ActionBar` styles are now + `Widget.Sherlock.Spinner` and `Widget.Sherlock.Light.Spinner`, respectively. + * `Widget.Sherlock.ActionBarView_TabXXX` styles are now + `Widget.Sherlock.ActionBar.TabXXX`. + + +Version 3.0.3 *(2011-07-17)* +---------------------------- + +This version is a hotfix for incompatibilities introduced with the SDKs for +3.1 r2 and 3.2 r1. Due to unavoidable changes in the underlying SDK, the library +must now be compiled against API level 13. + + * `actionModeStyle` and `actionModePopupWindowStyle` are no longer valid theme + attributes. + + +Version 3.0.2 *(2011-06-23)* +---------------------------- + + * Sub-menus for action items are now shown in a list dialog. + * Moved certain classes to the `com.actionbarsherlock.internal` package which + were not meant for public consumption. Despite being given `public` scope in + this new package, these classes should **NOT** be used under any circumstances + as their API can be considered highly volatile and is subject to change often + and without warning. + + +Version 3.0.1 *(2011-06-08)* +---------------------------- + + * Fix: `onOptionsItemSelected()` not being called in fragments if the activity + version returns `false`. + * Fix: `onCreateOptionsMenu()` not being called in fragments on Android 3.0+. + * New: Enable action item text display on pre-Android 3.0 by calling + `requestWindowFeature` with `Window.FEATURE_ENABLE_ACTION_BAR_WATSON_TEXT`. + * Fix: `setCustomView()` no longer automatically enables the custom view on + pre-3.0. You must call `setDisplayShowCustomEnabled()` in order to display + the view. + + +Version 3.0.0 *(2011-06-05)* +---------------------------- + +The API has been rewritten to mimic that of the native action bar. As a result, +usage now only requires changing a few imports to use the support versions +of classes and calling `getSupportActionBar()`. See the README for more info. + +The rewrite necessitated tight interaction with the +[compatibility library](http://android-developers.blogspot.com/2011/03/fragments-for-all.html) +to the point where its sources are now included. You are no longer required to +have the standalone `.jar` file. + +Also included is a default custom action bar for use by default on pre-3.0 +devices. This custom implementation is based off of Johan Nilsson's +[Android-ActionBar](https://github.com/johannilsson/android-actionbar) and the +[work that I have done](https://github.com/johannilsson/android-actionbar/pull/25) +on it. + +More details are available at http://actionbarsherlock.com + + +Version 2.1.1 *(2011-03-21)* +---------------------------- + +**No changes to library code.** + + * Moved library to the root of the repository. + * Added `samples/dependencies.py` script to automatically download the needed + dependencies for the sample projects. + + +Version 2.1.0 *(2011-03-21)* +---------------------------- + +**WARNING**: The +[Android Compatibility Library (v4)](http://android-developers.blogspot.com/2011/03/fragments-for-all.html) +is now required. + + * Added `ActionBarSherlock.Activity`, `ActionBarSherlock.FragmentActivity`, + and `ActionBarSherlock.ListActivity` for extension by implementing + activities, the latter of which is deprecated. This affords a much tighter + integration and allows for the use of other new features listed below. + * New API method: `layout(Fragment)` will use the fragment argument as the + content to the activity. + * New API method: `menu(int)` allows for the inflation of menu XMLs from a + resource. For the non-native implementation, the XML can be inflated to a + custom Menu which can then be applied appropriately to the third-party + action bar. Sub-menus are also supported. Third-party action bar handlers + should implement `ActionBarSherlock.HasMenu` for this functionality. *This + feature requires that activities extend from one of the provided activity + base classes.* + * New API method: `homeAsUp(boolean)`. This mimics the native method + `setDisplayHomeAsUpEnalbed` on the native action bar. Third-party action bar + handlers should implement `ActionBarSherlock.HasHomeAsUp` for this + functionality. + * New API method: `useLogo(boolean)` will trigger the action bar to hide the + application icon/home button and title and show a larger logo representing + the application. Third-party action bar handlers should implement + `ActionBarSherlock.HasLogo` for this functionality. + * New API method: `listNavigation(SpinnerAdapter, OnNavigationListener)`. Tells + the action bar to use drop-down style navigation with the specified list of + items and callback listener. Third-party action bar handlers should + implement `ActionBarSherlock.HasListNavigation` for this functionality. + * Javadocs are now available at + [jakewharton.github.com/ActionBarSherlock](http://jakewharton.github.com/ActionBarSherlock/). + * A standalone JAR is now available via the + [GitHub downloads page](https://github.com/JakeWharton/ActionBarSherlock/downloads) + or in my + [personal maven repository](http://r.jakewharton.com/maven/) + as `com.jakewharton:android-actionbarsherlock:2.1.0`. + + +Version 2.0.1 *(2011-03-11)* +---------------------------- + + * Use `Class.forName()` for detection of native action bar. This provides + compatability all the way back to Android 1.5. + + +Version 2.0.0 *(2011-03-09)* +---------------------------- +Complete rewrite! + + * New and better API. + * More sane logic and attachment to activity. + * Extensible via generics. Implement any ActionBar or roll your own with + minimal effort. + * Now a library project for easy inclusion in applications. + + +Version 1.0.0 *(2011-03-07)* +---------------------------- +Initial release. diff --git a/actionbarsherlock/LICENSE.txt b/actionbarsherlock/LICENSE.txt new file mode 100644 index 000000000..d64569567 --- /dev/null +++ b/actionbarsherlock/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/actionbarsherlock/README.md b/actionbarsherlock/README.md new file mode 100644 index 000000000..cb13e9ebe --- /dev/null +++ b/actionbarsherlock/README.md @@ -0,0 +1,55 @@ +Action Bar Sherlock +=================== + +ActionBarSherlock is an extension of the [compatibility library][1] designed +to facilitate the use of the action bar design pattern across all versions of +Android through a single API. + +The library will automatically use the [native ActionBar][2] implementation on +Android 3.0 or later. For previous versions which do not include ActionBar, a +custom action bar implementation will automatically be wrapped around the +layout. Support for this goes all the way back to Android 1.6. + +Try out the sample applications on the Android Market: [Feature Demos][4], +[Shakespeare][5], and [Styled Action Bar][6]. + +**See http://actionbarsherlock.com for more information.** + +![Example Image][3] + + + +Developed By +============ + +* Jake Wharton - + + + +License +======= + + Copyright 2011 Jake Wharton + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + + + [1]: http://android-developers.blogspot.com/2011/03/fragments-for-all.html + [2]: http://developer.android.com/guide/topics/ui/actionbar.html + [3]: http://actionbarsherlock.com/static/feature.png + [4]: https://market.android.com/details?id=com.actionbarsherlock.sample.demos + [5]: https://market.android.com/details?id=com.actionbarsherlock.sample.shakespeare + [6]: https://market.android.com/details?id=com.actionbarsherlock.sample.styledactionbar diff --git a/actionbarsherlock/library/AndroidManifest.xml b/actionbarsherlock/library/AndroidManifest.xml new file mode 100644 index 000000000..976015dd4 --- /dev/null +++ b/actionbarsherlock/library/AndroidManifest.xml @@ -0,0 +1,13 @@ + + + + + + + diff --git a/actionbarsherlock/library/README.md b/actionbarsherlock/library/README.md new file mode 100644 index 000000000..4b22e6fe2 --- /dev/null +++ b/actionbarsherlock/library/README.md @@ -0,0 +1,15 @@ +ActionBarSherlock Library +========================= + +This folder contains the main library which should be linked against as an +Android library project in your application. + +For more information see the "Including In Your Project" section of the +[download page][1]. + + + + + + + [1]: http://actionbarsherlock.com/download.html diff --git a/actionbarsherlock/library/bin/actionbarsherlock.jar b/actionbarsherlock/library/bin/actionbarsherlock.jar index 3dd76be0e13d55b7faada68095ad489ad1fd2ead..a13f9867db9f4a8b9cb72cd39faab2cb54deb948 100644 GIT binary patch delta 5234 zcmZWrd3cRy7Vr0dhpczYO(L?nxMU%O5Lt*IL=qwh39+_~T1Sd%Bbs2^KI##o32%2y zr$f~ez4R4YOIy`;w6sG}46PX*T`Uiy)%I!U{mwa;KGXb@-#zbHe&=`2``&x0#dWF0 zWh*H%A^g6;z`*m>@r7Z5#^Obt)`db(UtFuVO*}atI2%u7 zbByWrRRw>A0W#HYdK;^P?eg1Dh;RJd?rhv``wTO_5>2Kn5z?Aw(?d@PI4qvX9$jaJ0%mPh{2vgNI{ zWI=5_s*UgQ1Dgk+tk#NXS>0-~VHA*4-vA?3Hb+2!)V5aYYttBooRmJ8(i)>IzVdim zXsgcIj4TSXcBXO3$Uu3_rlX3TMg#h)FC&ec!5HPAj0)&rT*e@!gPz7g`F3F^e7p3)X;epZzNyu1zXNrl$T@y=^3%i0-J=scpOt$KGwaw`ecC|7IM<(LLYR1+>IR34LPBK`ViJvceQ%L0 zU+k`%ad#9;iL<^@$hnm|m>{BQW37F(`e-FRX(CYBdx*=J3Wc-mO4}DBN2PO~L8QN% zC}>@_2vcunhJ6Vo74mJbyFz#Dg$ zr__gGYQ`WDjp2(kVfmam{74MN0dYZk6)zD$0n4GOw zLSF0*9(8`Wm`+S^klGe4E7JA-URxp-Qwy%G+P4olep5z?XD9$y!a7iiW5j7n z{MQ8{MWvRBm#DTL{{WJlDq7C@6GbB>cH~mxP0q=J{M}Q8o04nR$?~^MXrpG{FFvJH z-C`*siNi0MF50M*m0|=%ppw@!^sD#KbTNe@KAIthQ-ppKlBA9R*}X4>$ntD(%2U~3 zS5>pbK60_%EUVEV%f+Q;&k-S%*?QOS9)zej=89GnaebahlUMsffVx#B?odf>+et`k z5&63WB{{nJ>kIuYpxoM)B%2-+xAAe*Z*&UmRfv3%)kWdKZnFBVxe!_dvwS2*Eq}a$_JvW`G==z_>E;WL ziuW;oO_^72I3PUo+#twO4WEc(XqI}zljQL{NL0S#!bVq8Ut+ZNP;n#ZSo~#|Lze!dOfl%eRAhyzjr0yLsBYFrZ)DfbsalzQ21(xYts3hg2rhUph?b);EC z$#8+RUmGZwI#nKX44x|eF0r4E=%SW%Gwsy`g1#OtbfL4XOLPcWP6&-!f<6;z+Fx z9@u3On4Axm2lRBjnWzt-gVtp<~!2~SYzb%88+j8a~+pc^@G@0 zC`IS_u~3QNY%Dvc#c|8e$H6!}x*f+f%Hm-%T3X^^27*rQm_}VYj=J2AtLJ(AL-D{Y zbhfqUsOt7G3N4?shX)Y!>HrTT*xUiC5X5xkcIrB^P#655zn3lRz5dLd7}Ruv`!W1t zC*G*xote+;ow-wY0&|{|z`JoOft~Xb;ZGR8I}t`B2uWh9Q<8Z7cKIzq$xw?vE0SRu z0!J4XVPO}}e6fpva9ug!+O9AcodZ%}0fO2TCjVUu6C2VErr^@&LuFYVL?bviHqSLrN5K_8yQ_CDM@WN=hv1~26P3|NW@2WE1KBbi(@ zKZ_Y|$zq0K*)SWOmuB;l+{)%18_}1iysa-UHuPgq(T`~y?8iRwIm~%^4)60fIlNJY z{b3H4*xR4y?#P7^XqlP|D-c}Gg?a?F19+6z2k?Eb90;rM==MNZgJ8uVeg-?`@d%#F zlVu_~Vv}5av*=1@m-_FCuyu4{67;N+d zM+wwmbbSf8Zj9troimbmNAn_7l=77RUdqntV;F4o zgV3?Os>{dnV%`|beCC!hjk9IUxuD#?s^wfFavUdI>IdJAh($ delta 5234 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 LSZ?squ`v68o&C-# diff --git a/actionbarsherlock/library/checkstyle.xml b/actionbarsherlock/library/checkstyle.xml new file mode 100644 index 000000000..91bcb9a52 --- /dev/null +++ b/actionbarsherlock/library/checkstyle.xml @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/actionbarsherlock/library/pom.xml b/actionbarsherlock/library/pom.xml new file mode 100644 index 000000000..79e1b29eb --- /dev/null +++ b/actionbarsherlock/library/pom.xml @@ -0,0 +1,104 @@ + + + + 4.0.0 + + com.actionbarsherlock + library + ActionBarSherlock + apklib + + + com.actionbarsherlock + parent + 3.4.2 + ../pom.xml + + + + + android + android + provided + + + + + src + + + + com.jayway.maven.plugins.android.generation2 + maven-android-plugin + true + + + + org.apache.maven.plugins + maven-javadoc-plugin + + true + + + + + com.google.code.maven-replacer-plugin + maven-replacer-plugin + + + process-sources + + replace + + + + + false + target/generated-sources/r/com/actionbarsherlock/R.java + target/generated-sources/r/com/actionbarsherlock/R.java + false + static final int + static int + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + + ${project.basedir}/checkstyle.xml + + + + verify + + checkstyle + + + + + + + org.codehaus.mojo + build-helper-maven-plugin + 1.7 + + + package + + attach-artifact + + + + + jar + ${project.build.directory}/${project.build.finalName}.jar + + + + + + + + + diff --git a/actionbarsherlock/library/project.properties b/actionbarsherlock/library/project.properties new file mode 100644 index 000000000..05e464d69 --- /dev/null +++ b/actionbarsherlock/library/project.properties @@ -0,0 +1,12 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system use, +# "ant.properties", and override values to adapt the script to your +# project structure. + +android.library=true +# Project target. +target=android-13 diff --git a/actionbarsherlock/library/res/color/abs__item_bg.xml b/actionbarsherlock/library/res/color/abs__item_bg.xml new file mode 100644 index 000000000..1a5e2ed25 --- /dev/null +++ b/actionbarsherlock/library/res/color/abs__item_bg.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/actionbarsherlock/library/res/color/abs__tab_text_color_dark.xml b/actionbarsherlock/library/res/color/abs__tab_text_color_dark.xml new file mode 100644 index 000000000..ef120df86 --- /dev/null +++ b/actionbarsherlock/library/res/color/abs__tab_text_color_dark.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/actionbarsherlock/library/res/color/abs__tab_text_color_light.xml b/actionbarsherlock/library/res/color/abs__tab_text_color_light.xml new file mode 100644 index 000000000..4174d1844 --- /dev/null +++ b/actionbarsherlock/library/res/color/abs__tab_text_color_light.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/actionbarsherlock/library/res/drawable-hdpi/abs__ab_stacked_transparent_dark_holo.9.png b/actionbarsherlock/library/res/drawable-hdpi/abs__ab_stacked_transparent_dark_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..1e39572224b24a81ed4d73923280ba2724dbaf6e GIT binary patch literal 139 zcmeAS@N?(olHy`uVBq!ia0vp^Y9P$P1|(P5zFY^Sf;?RuLn02py|Iy(L4oIp!})_Q zZ}wlfoYKNk`|wbZR*CB+2cd0Do4#G+S+1#YsD)El&1Z%|BAjt`!_S2)TNKYc{m-!5 f_v_(jT(cfAPEEXE)c4^Y$T|j3S3j3^P6 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-hdpi/abs__ab_stacked_transparent_light_holo.9.png b/actionbarsherlock/library/res/drawable-hdpi/abs__ab_stacked_transparent_light_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..a16db853e94af78c0739d9b89b578e2a8021c856 GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^Y9P$P1|(P5zFY^Sd^}woLn02py|j?`fP(zopr08IHUH2?qr literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-hdpi/abs__cab_background_holo_dark.9.png b/actionbarsherlock/library/res/drawable-hdpi/abs__cab_background_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..1a916b3fa658aefb8e1c0b5364a96d1ca4e0ff70 GIT binary patch literal 3307 zcmV

5Q;P)ht&%0ssJDJ#Yj70C02Q2mk=!=D-mE0Kmo0swH+>`Is zQL9(0E7h^~MSH$`=U=1OqTgFjv)yZN)mPKWuc@>Y%Z}&P&mVXzvcvKDT=}3^M{qpL z$|V)`4`E$YQYZ6_Ct-OR;Q=lY{%k}Gg^MH zuGW}ZjI`BgTeF0gJk5EI)aliW8stdCE|qD3s zM?fUspfy8LJ{&H~B_~imIIiij_D@ruC1;fb%8LG5^≥sIk_JB}>^^o^5z%WdNSw z$D3Jropp8}BXvPCJx8ETD>XMlEo;!q)sSIiS2==}vZ6P6mNU?{ZOPMKr)abpHU6!7 z-s`%H1Muqeo>LG+lMzUf7SZdCCoQ@0*JKF2zF4tFm07IH6uh!DZM?=ak^!{v7>kT+ zoMEUluWPifr+$>Ep@(Bgq~-{?!6vrNjr;j|uw_~P5bD*OL=B69n`J<)vOMy#&WTlz zCyFl1JkhUKp0-ck2wGdu5;0q^qs6h!jOH`508O3RF-o=xIN*+;bz-Fx-5c1gHnk{m zR5Yt0(|EVqtd8<6dOXg+Vw|kTH{wvV^&}dFxw^M(x^o4Qfk|<(#iF{MNA=HQJemSUaAqefG5XIl7tZ_K0h!sh<(dz|bdi zIs)l6LCMIU>kn35%Le#5v2tSNB&^ri#n4{esP|-gBI90Pyiv3^YP6mUOW!qRt^HZ` zt@lVIqK-!6-eYK8Pw%k-fz~qusjQa))XF7?LiBo}Es@wR#(6~4I4WB6L}L-dnblx)j(p1nFD{DP0CX#Q=nFf8f%vEwD zH+ZjY?OVvTwiemi=rCgVGoo;>p-*bJw3olypI z)UmC;CvQnDBd}xxR!2}e18qi7Bje_eFk?_==!o{iYKS9FJ;OO^+Gj?{yNp@Sb=F4T zqXMqTHG3(?^8p{VX9T68=iAy36>Uk_uGP(m%CvQMh}dT7810lS#v?oOw(R%F%#>xV zg$rAVRhi7*!uU;m-&p z<1g(mKbol_UXQ3fJ=9|dBR;DiS~(+ic^&esxqVChR=ph@i1qwu%Nb#Oqy5i1C!oUV z2)>@np7H19eBQt11X^D(BkEsxEjvZwS&l7JUzSlh%d?HIrcOj>#HeID{;cRcB4<=x zPkn7W(N^I3fFEgUsO1c#vWyQEvWb;h$TYlHbOtL8K-5S^G6SoVi5yS1BaO<)+8=E@ zLOx9UBx`_t$a)uj7A#SJOU9@+mI!}#hBiy~>i&*)GMct< z8UZv@L*;tyqkTTW*Qv3zvZL|N);U6NRz1)D5ysvk*CSgiXVo|!nOV-be_Z1T(?T(7 zQ$w|N$pN(X*JKbY<9+b3t0P#Y*Qzt){EgfnHMCjAEyDoto>#}Bza2g8uGXnm<1g)QomiG5P zr7jZ6MhvbiIRbC}(Q>WVW#{NQ`y7lkL?ay22sz6#FiZ>OAWaRmw$F9zzmG|dK*|cF zb@b+KiI@QvW!H1tqto_cPQrZAR-@aULRaXBfP!bC`K;dWdOZJ7CY4FkM72zywk(-(BU~jy zT6L3;ipqA3UN!92r=9vUyf4;=!f*mM%Bi7NHqdekwO=5uWdzdn&{Z;lXxj)oO%-K2 z-jU~X^%TPuBYUFF#v0xX8jt0#DtSHYN0KWo`T7X%=m@f9jm*Nbj&--|e5I+uE$%_5 z6M*Y5()$@|US^#ds(pz}(o^c|aaCiy!vM{40;7&)hbgqXJAvU0jPmhpzyW_)Ow^9x zTSmS1Z)DO`60!DLc8l<=>=5aWkh8O_Y?-@GD{ZS|;?xeDfRoxYf^%tc3fvh;nE{u> z^^IcHRLDp<*<2;t**Rm>klnW-PV-{(@^An_THh=tp-kfpTA4#@$=5U4*@*9S%k6xg z-bMcQW9Vv5V08!Hf!42&61^I7k0anyL0m2g`!(ejb{#CcJH8pZcfB@NrXPpl8@BHX zGJzz@X9Sw5Ari`@DIm>%5419a(Oe-tAI+7c>J@sX>4SlP<>wEalaW}bhNQCIbda>o z<&m&Hl2wChr@_2KU#^(#?Qq_%0?yS%uuct0W!C2cSs4HZ*(+B%Czif0JuXD(E--C# zAzFV-!?(4Lp!G8oTu!+h#nt7n;u2XCjP$=82W36zJ%0U}A_rWA(-HjrT=opVv|alT z+NbPzK zVVbGI6v%oo1p>exNIyDPVtHOr+joVjp%>mc`lU_IF#uo>YCl7Lu3M*x&Wxbk?qwSP zZXDm2%Q%Ku%GF2p8%%=$07^cKb?sY1ynb1y^(N3uSvG9k*CB5k&u`ZtuLKXl30DB`nBPf>=;=|K*_909Xqg0RR910000t22(=-0C0EU2mk=!=D-mE0KmwP|-=lPy7Md(o>hC-{-*teW zw@@hH)}+DV9b42IZU6o*5CFIarWx$B+3D08KViPZ8%2l!01$svD2cC3bO2#|hzK$R z^WmEO_&jTY8&?teto*|ZKc!w?$uL#&8$rFd`4*)=Ic`MS=wy?ILs)k275_X1cf{r~ zML$|N@9-;|)uMFRcEeKXdj}k8BWlWdoANeCD*#vh*0|*}b!HS-w3X6$liEDfV`*Y4x$lyg<$}560+?EG47xQ*BS|7TU37@{1m3Pf$`Hi z=b~S0(MP!}ULW;8uiXpt<#8JOpQ}`u7}vU*vO6RrIVF@SGzSu4VFu@}t`;-;&7(zN zDWk6IF(sZ$YU77KbdmZc|G9wU8EdQD%-4%tK=&B0m-w%IUwu~BMFC20G3$^h>U|A7 zz|`3xUmfJ~W30V6u`PU^GoR00Wv*ta-L9#DYR_#qOk(9ntJ@+xB0VCObh;kJ&(h&! zHg#d&Kv`5V;z9i1=(%X~t8!AmNPp393$3trWZfVGE0ofjUY7OxNn+muZkrim;mm1W zTfPs5S_*#kWi?g2Ei_;5_?pxf)o67{5h}|2sSN`SLa6%5xowTAZ2zK}fG59n3vRD) zvaNo@H?jpF>s2%9@^ZzHOh`n4;YASI#3**!L;9U^)t);s?t#|Dt){yggfinWr_r-Y zI)1He{FC%&SUW^XyEAtT9>$D91fM)${tS72J;lH(%0!&bDy|dhG}5ya9JbuM{M$vr zbTU;k*HY63K`6IOYByxKRD-$L-_qQv;{mJ2n`SxDRZE(<3R{BY`#~1)U0?zMTz#NN zxPW!j;(X)OTaieUtn?>}use0MPth6_oD5@=DFhdgtnX=OY#lgtPzmadY!fcnoHm97 z{4W>d%~M+-tV0F)JfqUOnJA2@oORW>H8#6z#WNPSnq0`L|h%TXB_=%j!>B! zdrTytS11i9U~e^qvCTI~ex&EnkLACd-DbCWP?|AHSQlqmncGw#Wm&29{OIFYpe@W> zsoz(e{O~h{631>%-kK`$EbS(``v*U~s?*b|I^1&OWRarW$<7qRh->u zgMZg_hygwK2=aawfLC+{i z5xrZ9WYli+jPkaK^2sBsk`T4k4SX@v5jo&^-l%u9;^&2gJZM1s#%-AQrtaM?2`atW z>Gk$vQ;+ZXD!ZPr)w?AR`|5@=`y^*fjR%1>&FPd^atly@BKX1fj`K(2r-NHP|wseE7hdBr}y*0t5q347*USuZy}I4*f!kd9{)zjrn~k!Qfj#*urqs;^jwX z7RCfK6ocEfcUoc)cWw4)fYk4xLmz(Aog{!40bg2kCSEbBbGy->T0@<3Ig|hFNZI?0 zzwfr}8gjhTQFN&ctK~2l%qEOP?OIH2EO;(E&gc1zi$5_1`=n3&P+SWg>6DdOL$$B^ zjJEa5BOudlNZHX#Z*hrEt~bVfIoQSH19THZk8UqYK8n3W;taQ`qER^h2{c6pH|USTj#dh zi$S&ozhLb(_b1t;s@0BYNF-vrqA95@^3_Lmjl3lL9;M zT?S%6$iv{l1f4#hBk&as>epImAapJrOlkry9)}gqa?87?hSKfB|4NkMwNiMWhzU-0?;qB^*tv=& z-AM9=2c4nb>TF)P;c1_=!M$WhaC-WW*D9uQZ(1ly5KO(G>k_yxOF5 zF5&9KX0wH=_W^$q;OU4{Ed6}T65%WcwSjoc3h?$+0myUU1BMZcM2E?Si z!tWln5XVAi6c#cD2oUCyVw`$1{gh+am9kgwb?Pe{XPSf(+*8US-ta^wnN>8miXV3a zhe6Xd78%R$ZUyXWEH$7)Ez)fEEGeNPc7t)Z8~fh62E*be=icl&+QLrNn>xdQcu97EnAP-WJWc=1+@83(9mK^b3v84% z)^*YF-hFJEw6Wg5(|e*NBf~rgR=cd&b(b!}XVWLpQI7G66Ku!E?4;`~xu2)P8vQIW zqrUFu4lPhO-LTt?2C_Ft)C}a2LbX>XBHZCAyBad}XLTbLf8brQhnuR{8V|x}zjsSH zio*NRCF{4gaWOTaF+V%%T_Og+)hpgqOK{kcgiF7#kadW?mp zUCNrJom3S*k28e}R7DveAlr9hOINSX^cR>;1}7IO)Hao+a3k8$u8;)z2Bb1xVE?!< z$24<2#WT0y_OX?*Z`hk06WOv8%Ny+x2{dPuy$@5X`;d5Z%)WhRS^P*eFNC;}WFL}V zJa*Rzj_05zu28)SX_tx+7i*RRjcz9{b6fTiq@NoT`}_|H@kF&*m_3z!-w0V+@+G_1 zF`i>KFH~#*Cr;Ikr^*Wc5GaG}o{xo2L{dyExVF$B z*T}`1*52@vys;7ZB%KgN(z#EIjbm~SE(y=~dc0()*0Bk-QlwaH>W2lnfY9ipdXcVy zM+&!Ffbqf{SzvvL6QsO8tFMnII`P_WVlO6CWESWMYty)22Zd}4nvV>|CO-uggjs*$ z+5A9?o)#1UwE1BOghCu=u1)7qO0~G=v4;eUrWtl#$}Qd<{#^epicoCHYb{(mQon)L zCL%Fate1rQbKJSX)b}Sh^FXi70RZn0gJ2TrdlrY^EqC0Ee!8Ajq#poW$9eBtnw4fz zpU^EqirTQ36~PnA?)*7i=$_+wrcn)D>ruS65UqEOKeo436+f3XY=$G1FN#AO)l>|V z=9Sha_|yH7csns-!;DC)i^3uvW|+Ych^Gtj?E~j=nj3d?VanGY?p+i4!$7V}UiAf` z^tM-Hf>Z-*h0el(HbB0kAILX7o@I@@W;ep>=hq5oLwDJTtuI7NNT&S>+eju|wV9R# z)-XRPig(=m0%d%H zX;5Ib5Z~tqXe1@RtatC|*02|!fRuGKt3Q`W2v#Db@cGD(qjTMS`qFwTBVf<)&l@@i zkbL-WX^Gm1@e6G=RQ^+s)?qMTX-oa@{?}wYgl}s#V49F4Dn$8&MleX8K1v&g?hckX R<#YeUTUpqmYLV9y{|}w)s%roM literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-hdpi/abs__cab_ic_close_focused_holo.png b/actionbarsherlock/library/res/drawable-hdpi/abs__cab_ic_close_focused_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..9d7f9320824e805a66428fb71ee8c464a1c9c0ad GIT binary patch literal 1292 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCwj^(N7l!{JxM1({$v_d#0*}aI zAngIhZYQ(tK!Rljj_E)ete@fByPj|c1{MKN7srr{dv9ml&KGwTId1sq2<)l zOJ+Bew%MG~v6W4$v)+9B)0XF%-`~8M`93{8{n?zxOJ3S*w_KXHT-8)+l2q?wfz6ud zck?#N?qxZ{sC9thf~@-;T_u?r>}SLbcR%WAPv)C&rNXs5uyhyDrP!r9(827p>)Gh&)${EOcSnT7$2!;n8P+rNP6lr8;JO^llJ)_>bkr8v7uoEu0;#tqciQ z4A!xf85rfOF~&2l|Lve+s+RTf?4i4iIYQs{GdjMMXPt|hyNN-r^Y!NgzK<)pKDya* z=>y?3*6)RnftpLzHoHpJ#c=o>*6w3=RKJYXG%Nr8OoTXb^gv}`j+*O z;r|gq=dUbjdW)-+wlWKE$u|4IY;ZrriXn%&PIzDRiu(se_Fubn)&GE<^1Y`PkM=t; z@O4D4sK44GaYbOi)vsH;Yc|?gbJoad-IG4RXc+9QV=&9^lE8kBc-QXuT+UjiABP0$ zHTz!u|9y}_YLTn+lAQtCugarR8ecg0p5WTRUU6OMlf;LmJN}D*eY*DuJM)#sA958} znKlYXFs|9uV#QRW`|fw+YQ;yzj1~%M4EGmaVwSh&snLG-JK*Q}3D18YWsniLZ0b^d zY;}8ywdOwKzIl3c&$Bx?n=CH7E|N4$Z2OUqryQ@$@mvcuzPOY9e9o4>zvo}f-6Z~^ zWJ@hij7d$c>k)CLf;Ss>Z(MJ-z%A2$L(C5&;R8CStvhocl{3Dt++){q%He5Wt#RLu zx$fQ{I9R&uIb%#~La!YAy6wYLxlRR!_8;eE9`!G{)ZBke_>lAhzp$VCmi`QMGg~?D zW6KBMXEBd*BcBF_ROQ~{33->YOtyK&q)&4`RG#OYKg(im;?f_o^B(<{h)laYaYx#o z$$dwn4?VXPiZm@es#rI7=}*J%AAS!uHSBobka0~QEilFU*hhAUw`(>r{J*03&tmcB zQ_EjE%BKemhQ zmk*U*er@hl?VloFeOJ6OvYnslIJM2bt;0NN*2*6~4`d&#$tY9rn`g<$$$mjLth9Zb z^D>2xr3y>#_A3AT(kUEtB|K0xJamWrBCZb)yu2KA%$iaOr$RMTRdP`(kYX@0 zFf`CLu+%j+2r)FaGBB|+vD7s%w=ytjxukLvMMG|WN@iLmiUuPq6LTw5sD}Nqz5jt4 wBtbR==ckpFCl;kLIHu$$r7C#lCZ?wbr6#6S7M@JC0V-nfboFyt=akR{02O#C=>Px# literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-hdpi/abs__cab_ic_close_normal_holo.png b/actionbarsherlock/library/res/drawable-hdpi/abs__cab_ic_close_normal_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..641507dfd263e0be919b5c3d33f43662c3492018 GIT binary patch literal 957 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 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-hdpi/abs__ic_ab_back_holo_dark.png b/actionbarsherlock/library/res/drawable-hdpi/abs__ic_ab_back_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..7855cda9a8ac11383c8cba9e511cef47da34d7cb GIT binary patch literal 938 zcmeAS@N?(olHy`uVBq!ia0vp^DnJ~5v|}#;DW)WEcNd2L?fqx=19_YU9+AZi z4BSE>%y{W;-5-!(S%G6ZkOu2z2)9V81ZwN`ba4!cIQ;h7`ED6kiDMuAuf9?F?JO8l z)Zyjl_CZ0TxudIV*P%u0PR`e?2-vJP!L);G-2<7HioigDl&K9Y&1u%VXKV4_z5Hdz zUE{s%`j^h9&U(3hf9(0-{7}95$2O7=N)Vt@CEQ zsC+H7X(Ds{>CX?Q#x0v99$O}#lD=1;d(*xJQlDFV%T*jVy=${|ocCvS&c}+Tl(VVI zJuKPZ-p=#MXIv4u?dcw8M={x-0fDz(*($l*ELP)lNlB0SzS?5`Ij4Z!*K>4_D?}Dw z4nK5K?iEYuwoMtg+map4zP0&f7_!f=;O z@3`-GFV(GeD7E6R+|Feh`E{{>rvGx$D>J@qw|(R>VeOC8$Afmx*>x>C=b+0??|CcL z=8A^jedV`Yd$B_0on_TcMVIz}e4BIWE3+@hrpn7F zeJazUlkePEddbK;_FBU6_vcP{n8g_B-A=eAZ=yT>=>2t94vOnlIB%Wo_q$2U_@Mv3 zEozEZA2xM=npC^!YSb}a`{=cwD~~s)I{W=@%nB*UaZgm?=9|0u>W2I0Z!M7t-jct) z%VyW>$jL{)?aEUE&J=hTfIHjbk!>^ z@x5l%Nw@f~Z1_HR?=C^E^}7_d+FxeOx^a7JeCxd4z3E$RSDq8R`i)C|r@q3D=X=gZ zx}Im=v`zf)qtB}>o0;`1cC8f@Yfv*5ng8=3o14-$TOH2j7MZW@&X?UOdg1V}FLb@~ z`RLdG7n-h%pVcd}{FmLV>W6{JJ!@ILukL-Mep+4*lt>)^r~hTP7Cn)1$Gxo(m`cS; zTq8=Hi&7IyGV}8kLNaqx84L~e4bAlp4bHAP!vs{J3R01hSdwa$3{sZLU}RuusB2)X zYhWH?Xkuk#Vr2qkTUZ$w%xvJ0MbVI(pOTqYiK)Q|szGnlPBowg8ITRZ`DrEPiAAXl njw$&`sS0kHMXBZaMcKs)&cUXITOXSN)iHRw`njxgN@xNANkNij literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-hdpi/abs__ic_ab_back_holo_light.png b/actionbarsherlock/library/res/drawable-hdpi/abs__ic_ab_back_holo_light.png new file mode 100644 index 0000000000000000000000000000000000000000..c06277341b79ba8c24133b40787307da8cdc2a02 GIT binary patch literal 975 zcmeAS@N?(olHy`uVBq!ia0vp^DnJ~5v|}#;DW)WEcNd2L?fqx=19_YU9+AZi z4BSE>%y{W;-5-!(S%G6ZkOu2z2)9V81Zvyl>Eaj?aro`E)7>(m62~4spEJwvO`rLd zikB&8SRXrxeKdOHbZ}}UOW>LLnmYtsS$n0$wLF}gq&_nBSuJyRQV}*W{O*4O)*GB&Bk|2w#wHF@5#Zi%dtTQfsk zDrwR5uS-s-l+~(6v#d8Ynp$<#HF$#M8`+r(mqkpDud#mL7c$}1&ok4TayI1OdR5gF za^00v$nm=Ae7)t{nL=ijIo|h}(0T0M=IOVyVgwhR>5ki^tyFwMecREaC1Fj^w#k(r zWLdIn-^bPsd)l%bTi5!0nWn7P48&j zeVDadDadyIZ^tvanM|{mf1Y689T5Ee=SkI7mshe(o%OHHy_a>SX?{)%ZE z1U?IW-nDG=GiCEvmsg(F@Q^LPXWz8vW&CcN>|JRK7#*K&*j~Ei=;sT^m%g9fXqNs` zM*CIgw>{B&Rr$8LEids}${smOQ*%GhSLSUw6$e5lynMBL(tMZN!^;+&-E(Z>?6?VB zO&b?4n*UiUe4&^_?Fp9pR~E@33;b@DY3J8FUodb#xZbboOoT(y-R+fszM86buV>Zr z;GH}91dA~L?)&Ad->Uv*=L#t~ej+m2(O^^F@vWiXCOutP8MMFp(8fb?&syI9jm=-r zWU~GEw#~bO4u+f$oc{Uq0$lty6Dx7i&4HR-1pBqbGLgi0A$t zv2#OsSERf*KVP*W;(5DFxvGC|y|3wlNqaZGo;N*NUGCz?&w#-!%A z>t|s|^4E literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-hdpi/abs__list_focused_holo.9.png b/actionbarsherlock/library/res/drawable-hdpi/abs__list_focused_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..e354629abcb251566c9ac0a611406da603b01937 GIT binary patch literal 1098 zcmbVLO=#0#7>?W6uY-vbHoe45hKIHJlC(_|T1VP6uCUJ8RqSwwrODSeZ22+yX1kum zgWv=idXODNMe#OehzAi-P!SIbiXaN!ysGS=UWECjU8je!gMsAx$@@Id`+H$>;%IO8 z{%(RGdedWa7Oy?{WjovPcj@E7BwhwlDvze@BC4n^BqZG~Kr(HrC76Y(zIgf-j1fd@ z(a7adJ~J+Awi#4?n_$&+Fq$A@qg6-M<{%;quw+ieT76lv&j>SQ9tv06#IyHKPj8#QUU_zvlRde3*#A=+X^NM)yU(*y>H$ii8s^L^VGf5_G7n0#1 z2xuSz$Osc;xDe0tBP0tLKm(R$*Z{+e94i7qZax%NbM>N_m6c5`e2PBm*K_D~l7bz@s=FSqDGItx8}!PRg*ibG8>&fU&Jz9IHTJmwm> zDC)dyYYQf{P+E>t_)kzbbTJ_-DUK0XDZzqBlwqPugq0(qa3ah`gpd+#a%_iXl7LT! zc%T4IVHjBv1c{dwhEtN^RD$E#CN^z(NVPQB)HSef0~=9x#EMB5s>pV8wmskMfXT9r zY_DuPWO6D@W>n3v{Ig%4Mzk_?jWbYJT-zk;`4x?A^pz-&eda@eZ^SL}2`MTuKmZ(< z;yHoZ#OnW(Ga5TX`_1uBvox=82m0Hs*2jmf;ei&O7#EMm^y`*YJXW=|Eaj@73coit zMq9;MU2p5&C_V3cd1v4NG5EBlF!FG<V*mgE literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-hdpi/abs__list_longpressed_holo.9.png b/actionbarsherlock/library/res/drawable-hdpi/abs__list_longpressed_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..367c7d9ee09d5279c5230bcbe12bdde2c548a973 GIT binary patch literal 1060 zcmbVL&ui0A9FOY|oem}ZC2iA$)tV-aE39*Lg%wXrlh-zE$&1OG&2|y= zAnu}P&mx}u2Rx`S9D^MMJ?Ql0LGUErh56DS)5F-oK=OX%`}usnKOZeF+#DafIL0u{ zcxBG0(e(^{#ZxEgckA;Noi0jq7|p>=#8y13jcUkpHty`AS%yiq+E)e_}B|5nqg*(abVf2h_Fr6cKrhP^VMsPb)5pYoUMXtprejEw;7_P&4s$X zxoRs8SG>;7#wsQ75V6?UTk|6|E^s|wmF|;kfn$3nWVOKcooZAUSsjOn&GH~^gB)OU zkcU!6mgQ@#2p|xEC_pg{WmOVY0NBC9QMJ%%sWrnKXwg%F>ktyCg3#@D`L4v{uq{AE zQ4$VOOjC<=wBZvgPW#dHkikHa9l8N=vCk%qRuiw20!KaVhu{U(>LIZo4H89DCd5`C zKpqI5m&Dbxjz|stb>m3usJ;;(p@t&79@?}Xt?40{=I(f*#E^QU-U?k>6l=}E_PU3B zQZWh~{lh!1qm~S_EI~!oN+QVRA0raTFHnK-M$4ya^-|Lc>%P zO*Tv@nR>Qdl4Nm+t@shKd>ajQU8+04%Ew|=Jwz74VIAYOVFxUBFu_p=2duu7WviC$ z`pG#dPd{1%h3;MCm?8GqUVc^g2z@gzQ=jDwko$3Ka!Jc;5GX*B%Ce+z1FZ8uITNTe zLed=nG|TXcc3`qSY<+q-93JG;i3#aw?0h;mL&vIKF|>NT-~4@WP)w;Sjx#!T(B7Wd zc|LiGnR+wQdM547n5pxr(<}8~FTR~vJUjpK!P}|r@7n&uclT;v_wrAlm=_*jz5HWq gw^N!}eh)@QCz%g7CeiKjFU4eTE9C{_WohO9AL!>whyVZp literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-hdpi/abs__list_pressed_holo_dark.9.png b/actionbarsherlock/library/res/drawable-hdpi/abs__list_pressed_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..9eae8f41c82bd6ed7d765660bd2f897999863b02 GIT binary patch literal 1061 zcmbVL&ui0A91m{JF&T=WYzp$0!49$}FG<@pp>?!P;|g}puEU;WY4X~JEqPh;X0sig z2Nef`7sbmCBJ-jk9t02Wpoj-Syy-zf5Rd)?LVf9v>0#_(AbCIX{d_*(pSR}cE{u+x z9$^?}v^cAk>3WpD;_wjt-u^t1r^`4gRLKIala}ElCTrmu0!7DYpfWP7_0{(%%`gLX zyHX|9(nZz84rfF*TO2i?GF=`PD)?H$RF*lg(GiWFlsw)SRXlBta3gIT0pPf{@aaqLz#&atSf1#Pw94V?V5rhf*??(sd~5 zf}rV&l9e@Gko0__kdtJwk1e_ZFSfJ@lUh#uV@EG+r8GOhrQuJE}a;kj>h31KcCUDS}bbWO8BMryWO4{P?s!g zaHQRMbNt=ou`|s0?xEWBx3_m^?+i^1o!H&^e);Xd_SpTMBb(CA51TKJZM7f0e6Sjy p*gAK1G5zV}y{|XG^KD~r7&6mO#-~m_{CG7Q++tx)dzxFi{s*n^Od0?H literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-hdpi/abs__list_pressed_holo_light.9.png b/actionbarsherlock/library/res/drawable-hdpi/abs__list_pressed_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..a9131fcbc5b5236c0f5f6e0a1315027f607925e1 GIT binary patch literal 1060 zcmbVL&ui0A9FN-=GB+54u&IZ)3`B8FUXr$H!fI)gW-FLEx_~_{O61)vW#ES=EzVyfRFm^DIydU{~KA-Q;z15Yasfnu-48u&- zmi0PaFVR=LI8ML&pXM~W%#vz@tl<{v+7V*PE^Z=F^X)dOBir46@Bu9{%xKHA8l+*~ zRUPbec51^Ven`;_vsg+(+u1+_G*R0NitP7SM=bE%B6~k)LNnA*$6MZs(Av(54A5Xf;bu?BHJM(RC&JJ?Q&g-!%>?T6h%on zL@`4xGVyjm>?9M!^Fsz5#ZKgf#KQqd8SN(CB1M*Z+7H1GP4kpEhzE(HDdQ76)6^35no3!-ijPrkJkJUOmla>P-;lMQSU__EsDLVV`s}p0jcRl zmj2;f&s8hBQI!NmELTLBF9<@x$cuVDo2%r+yplBvLyohsf(E60L6Hn78G@i2ic*$! zLy!zDSFK30IKm+`%Ex)^fnK9WO}F zX?gn5>L~IaBG-tp4|@4ky)*QUf=qpuvrz8GU6w25LRo+cl%%RGDeM62{!h+$>I|PY z$3M+7yrLbLZckgE9!`e`1$1H}IvU3d(?@iyteRf7lF!ZGCnu#*b=`HxCQjOKr{6!D zxyH=C9%((5eqBD;-P;|5FB0nqb94O0@tZG`&7a_#_O)~?Xk9m#5B8U?JR$Gg?A+tq cotX9s(?cuyC{kcif|*A4j^95`Gq9-KV8B6o6ra`I!Z80pW;7d5zZGhRBg zm{FnhT6Xzih3ZMUGkfBc^kAT_eS7{3zPQ8d#DAm9s(?cuyC{kcif|*Eb3_81S$-+V)J@yPBVWyvqG&GeYz~KYxJdw0eeyIoHJnOEfn# R{sUUY;OXk;vd$@?2>|r{LWckV literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-hdpi/abs__spinner_default_holo_dark.9.png b/actionbarsherlock/library/res/drawable-hdpi/abs__spinner_default_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..ac36c068c3da9b9c824794671975d92c8cb4812f GIT binary patch literal 378 zcmeAS@N?(olHy`uVBq!ia0vp^`9N&X!3HGXc~6@Tq*#ibJVQ8upoSx*1IXtr@Q5sC zVBqcqVMg_WfJqdrAMK_h9#8?~%|J;E`*ao0NlWUVRlS_&a9mP<#>XaXMC=ERCX>1H%O=Am z#mtUX+>AEAwT6+syww^g zdi~YJf`mP0{cS+Lg|du9{;thHRm-f5fy`N(4+EJiIM|PAhl}#{m>bk7Vi>B zGy418$@X@hl`NMNhi}5V(@$P|Pg3y=nsGYw8(&G!LnleSDOiXroc;VBhks18oC=f7 z3k?0b%{*@h>tC1Ow`M2rIQpmS+b;9-1>8GLr6lqszq>FW)_r&{BVotOJ|NS#)C4Fx z%Y9Mf!(|m9<_@uo2MV0GcCocdFH1EsxFfK3apS{XuLXG@EPa~vYxSyojm97DROKEn z4GK+vu=x5fJ1y%Mvc5ZQ=1o6Uu#iU_8}TYLf5R#}_gt6%xwpUBR`UbBWqz}EwakL= f@x5vH8KY literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-hdpi/abs__spinner_disabled_holo_light.9.png b/actionbarsherlock/library/res/drawable-hdpi/abs__spinner_disabled_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..fdb4bdff00a2313fef46347ffb4ea0530fbc1879 GIT binary patch literal 382 zcmeAS@N?(olHy`uVBq!ia0vp^c|dH(!3HExUDe|OQY^(zo*^7SP{WbZ0pxQQctjR6 zFmQK*Fr)d&(`y+R7!^ES978JRyuIV=b;Ln}?O{7E#4)N zX7u;FlkM$1D_Jfl4&Q`zr=Ps`o}}U#G~;yUH@=ddhfb1uQ?L+MIQ#iM4*!^FITa?E z7a00=n|a<2*1s;lZ_Q5Lar95uw_WDv3%GZhN=f8Nes^I$to!g@M#7GleL$vfsR>YY zmiwZ{hs!EJ%pGDE4-`0W?P6<_UY2TNa7SS6;>L%&UJLR*So$>S*XmXG8jU~PsmeWE z8WfuTVDa@|c3RdiWPNwq%$t6yU?Gny=M%lu~TYMBM! f<9pNY$D4<%SxdC6eR$dl7=R3(u6{1-oD!M(ZL?81}u3HK)&izSJm2<8Uh)ajQ0b=bC?Oqh9`3dN4vJ2T|1r%BJ|t@#fvJLahJksbsna<*xm~MowW5+ z>1Mlm1;z;xTV`Lsy!q6GM!y#AoRBT|Ub_QjFL}pbBq2SCh^H&!t^zf_gKjTvR!vI?)QK_(hS+iEHQt7Sy%)(V)Py*=6 zjq0h-%VYGXlx(v8Wi?wA7-BV#`otL+X6P>cKX=JKKb^n7C;enjYrLDpmhi_66xg1w KelF{r5}E)&kKX?P literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-hdpi/abs__spinner_pressed_holo_dark.9.png b/actionbarsherlock/library/res/drawable-hdpi/abs__spinner_pressed_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..3b260170c683924ecc009fe9680e3d98ec4de664 GIT binary patch literal 530 zcmeAS@N?(olHy`uVBq!ia0vp^`9N&X!3HGXc~6@Tq*#ibJVQ8upoSx*1IXtr@Q5sC zVBqcqVMgE9%yGx5+JPCOm;4IF&?CeQP`MUFAlho=fUusU7;1HAg#jWc*h~oFa2#9m-J7HPexzU_fX?w)y0_>1$$I-gnhGqqU3t5`EVu2fb##3!*89aFY)93H!w2`& znV#f2J~PbjrJ84$g@nQ!%|kPlun?=d_VY)q>Y9CO+K!M}a0OFC_FrFlR!TjF^K13o zTZi8sJ-DWnBitzdV%y>GUn5@&u5k|o_PlR3n%F1o04$aS-i zNoPTz4oLXnrw%p2bpe&GlR3g?*ev#J(RR59RKhB*G)raevz>;2zSPujy;)nCRoBy& zU70_-pz%)Ze6#y;yKgVtc7CZ*!-b0~=XNNRefN)=6s7q6pk#Vi!7>i4gx2f0)I}#B zA6+~9^V}qU_RF)X-TNnRfBF22cH~1gDSvhAzm7*tJ@ij-U7xqdXl7Z>{mGff?F1MM lM1Gs=d|BhRaeutQ{7)haG^%BtUjd_*!PC{xWt~$(695c<>f8VT literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-hdpi/abs__tab_selected_focused_holo.9.png b/actionbarsherlock/library/res/drawable-hdpi/abs__tab_selected_focused_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..1ba35d554811207106066427813fcb04219ceca0 GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^Ahs6=8<1?uI(iXEu@pObhHwBu4M$1`kk47*5n0T@ zz}*SLjOHg#uLTO$c)B=-cyzwKX3N!Jz|;27Jm`Z{+)9fIj;{i;N3<&!`V|J|{B5-A z;!Me$|7>w|K&ao+XnFQk7J`XUo4O4v85%kQ<{q~VH7tofBIkbFfWgQ6*{|@6L0sMH zQYIM}7C1Ju@&04vYT*C4$z_>o`B!zj&#WE%f_zopr0H#GqV*mgE literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-hdpi/abs__tab_selected_holo.9.png b/actionbarsherlock/library/res/drawable-hdpi/abs__tab_selected_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..ef913cc8e5934d06c04d90547972f2c5ef4179ba GIT binary patch literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^EI=&4!3HD^x83^;5-4`^4B-HR8jh3>AfL0qBeIx* zfx8og8O=|gUJDd-^mK6yk(iqNU! w14Yi9OG`fx&=|@MQYSb^i_N2f@$PSi2|ERZALZLD1scZS>FVdQ&MBb@0Gc5ykpKVy literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-hdpi/abs__tab_selected_pressed_focused_holo.9.png b/actionbarsherlock/library/res/drawable-hdpi/abs__tab_selected_pressed_focused_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..d7e968806aed3d191fae9f7b4adacd19697ec317 GIT binary patch literal 522 zcmV+l0`>igP)Y1NsF{aOK#K&;wFc$Z$xU^={HaR;mz@qPDK%u{~pFAqmB${!Ru73zB$v zOMmS5*G~YjT)qxAl30}CAaY~_U{l7aYXLy}_nWO7cDv^-0IXKG!R_Vl*AWc>0YD&y zlwbVr(3w%fr1LE3KXMGr42d)SPC~dCH0k=0Lkpd3GDn5xDltV>3XMdo%uz7^ogn>V@560bfA5((B0S2iz-E2Wt04z_4dP<YpSBT8lrJKTrMg2EfG8n8-eoq$FOo$>0! zRWLIb+6;Zq1UiaIR#Yw8kfWw^tdJRsVhZ)d1(3A|qKRy0Lsz|LbmFrjV#Cj4Yi$bv zjp+jb%#KH6`{j-Vfc54uIz-0n@&4*x9FYElBi5S(kPhjS_j+@{H`$fQ!T=IjPXGV_ M07*qoM6N<$g0^_tDgXcg literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-hdpi/abs__tab_selected_pressed_holo.9.png b/actionbarsherlock/library/res/drawable-hdpi/abs__tab_selected_pressed_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..b8b1fcfe26558d8465c82a517b81f59ed9e15673 GIT binary patch literal 271 zcmeAS@N?(olHy`uVBq!ia0vp^EI{nV!3HGfEdH7V5-4`^4B-HR8jh3>AfL0qBeIx* zfx8og8O=|gUJDf5=;`7ZV$r*IiZ$P11p$})OhKon?2O=>a4a`(g11Z2`(U?4Czl=Y zs7cveCa5y&>b{wg4hvQ>?8m-wJO{FI~6V#8L--CZMAo{j@=)i P;~6|%{an^LB{Ts5hF@xd literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-hdpi/abs__tab_unselected_focused_holo.9.png b/actionbarsherlock/library/res/drawable-hdpi/abs__tab_unselected_focused_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..256e8e7302e490535b52dfe719dae0c40c4434ce GIT binary patch literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^Ahs6=8<1?uI(iXEu@pObhHwBu4M$1`kk47*5n0T@ zz}*SLjOHg#uLTNLdAc};cyzwKX3N*)Akp%$oTpR#k=L<9&I{TXD8zMgNA~i%)Hy|P zNgKs)I{R+({VmP8VvisG(aX{DEcyH9q3KVC1{J;2rP0AWs}+-a9>;xVdGTvzHlOQi z5wUz87_iY6Ik5KcnpK}m?)AU6KeZuu$=z?O^q=n)|J67l-~`YW44$rjF6*2UngCq( BO<@24 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-hdpi/abs__tab_unselected_holo.9.png b/actionbarsherlock/library/res/drawable-hdpi/abs__tab_unselected_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..eaa306aee14b3074962b9eb69f7d66f40b3bbc7b GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^EI`c8!3HGtQ{P+w2^2edhHwBu4M$1`kk47*5n0T@ zz}*SLjOHg#uLTO4db&7DJBbQD0#AUB zH}C^0-a~%p}r-FEkk`qbJ!z4GNE43s#KK zNDRs@3KsWHgcd0#zy)_t5P&p3Jj$#!qre@_`~aORytx@CS|N~E-DYX7!3q)ywwf#R zi~LF{d_BSz^f=YGK|9ZM0fn=bk}vu+>y{m!nweA@)C183mI|l2t~*ywL~IbQ%zQ@4 zjBbYqbD2|k7rF+l5n4N-Q9@^P4dyB)b11YKCe8!~6qBszTC`ZB>NPgV3`H}Adi(;& z=z(Y=hl8P;erL4fy&+@A?PjoH0D#W)0RU#3jdA!27YP8@x1Y1W&i>rr94*ncBrxA_ awZm^n)5h{@F-;->0000AfL0qBeIx* zfx8og8O=|gUJDdl?djqeV$r*HiZ>UNAy3=>Ev(b^_D(ndz;y3`cLig<=9yzVUhr(= zy=>Op8o=>W-qR~Elp(fRMX9Pys*<=;4p% z$vbwLGM|#MO=eHa>XFT;pUnH0>(<^9#og7CE2b>DEIj#wikm>Z{_L+2#b+FPHd-`X zSTSYOWC67{ot1t(p#@(z{r1}$FW9_q^^vE4D$lIGP?r|boFyt I=akR{08mR~WB>pF literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-mdpi/abs__ab_stacked_transparent_dark_holo.9.png b/actionbarsherlock/library/res/drawable-mdpi/abs__ab_stacked_transparent_dark_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..0ad6c888b4c7e436e7d7c78432dbfdaecc95a7ac GIT binary patch literal 127 zcmeAS@N?(olHy`uVBq!ia0vp^QXtI11|(N{`J4k%Zk{fVAs)w*fBgS%&%9ECxB?U?=uVx Y$^4u51wHGE0Gi0)>FVdQ&MBb@0N@ZURR910 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-mdpi/abs__ab_stacked_transparent_light_holo.9.png b/actionbarsherlock/library/res/drawable-mdpi/abs__ab_stacked_transparent_light_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..19b50abcb536602cf2cd36d5a19805464988bd20 GIT binary patch literal 123 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 HP6@Izc ztfq{xOI)Ec1&|=b^Bq*e2j?aGI!^4pDg*W zdWdV; z9sc!<_r}D3uO7vmuGYH|y!9z(u7^PlKF&LpHDtN{I1z6 zF>|Hsk5{u!>?_{3^~j}JVTJ_)Rqk1l{%ami?dz~9Vz_ch=w`{q%GmC6H#jsmoj4N2 z@FU~so_V|W@hf^V8n`9N+ONG~e&NG8zk6YshqhhuaEk8-btu}R#1_50nfko&3eHM9R6kW9$Y{^opCbpI5SJr{&cyRCY1m);24z9QH0 zYWBqyhwuL}_1ZPr@Td6yr94JPD>4MqXT9A2%3MvNXWB&>hq=Hw6)SO#C~+=IO)SaG z&r=A=%uQu5G}JdV*EcjcyXFiNP=zW;MM`2xs#P*bSt^5(fuW(Ufw8WEd5EEjm63^+ z36O1JWneI~fkPHWLvDUbW?Cht1|z5jy-hpSfEr{#HU#IVm6RtIr7}3C@sOG%WxC literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-mdpi/abs__list_focused_holo.9.png b/actionbarsherlock/library/res/drawable-mdpi/abs__list_focused_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..e2449ddd5d21777baf6aee837281b21f41994353 GIT binary patch literal 1092 zcmbVLO=#0#7|xuGIT;8WX!Q~^*lA7jCFxJXYDt^M71vq1f;)IvntWZunx7@#Y*s~P z=RrLxs6!DC9z~`@5EQ1U;I1AN^y1xvcMKr(M>3$O$=V`XU@P7*|a)hy4U zxx%!hI~J{lHgsUQ7)=n9>A=Trlkv_2cChMVdy6Iu|Rj1vd+8=2X*zv(1^Z z-dxm0gG!$wCj$u+SP*GsVAXA33Q|;uSHk=7nxV*!30h21J5J3Nie%RDAQ_|CsLsY& zG7f0K3yDNxg5+4hGAzdcE(#J7&q*vxb{`6>c}7(#DQZ^>pHfr}Ay;CUMx#MDc-rw6 z7$Ayb$iZ<@Y!UTWY@`KI+aK#ODA3nE(?zCZlOdy4ah6ev!k+GgV7Z0DF0t)*6NOX8 z1e(hLnq@32jH_eqqZ0h<#-7%GdBufH3Hr{mr{j85$9iC#yZwbiL+p)o)-!QYw7TNx z%NDdzUP)2-4{ex+lu^_i4@6GRaBMsYKvIo!N?eF#Vq9Dl)MSriFRaXS8Bs|BmF05) zD5@yR2}K3GnvLZ$e1hv?^R|yPTZcVe6YF-d?7mnj>p=}UUfFT#y$&eW9OU>l$0f6~ zF|wfPrX8Nc^6W&bK+n7Y4b^ijvXfuQ+(Tc;CB?X`%3L>YQ53SWEQ)MW1!6(~R2OUf zPtF+Z3==lTKh4s+!W|fHcUvDHc83Srcw#&}8WSMehsO$6N-hUqDnHxpbU!!HYJa#i zJ|GaI#?_~hNTj{FdhCq-{mS#p7svZ(#Bp^pkTbYrEU~2uu?~!M%rGxL@Zxmm*?jO~}8;@RXUt@A_Hq#H3w}VIKi47{D3on@S O;aul)Gs=_9eCrR$d|CVe literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-mdpi/abs__list_longpressed_holo.9.png b/actionbarsherlock/library/res/drawable-mdpi/abs__list_longpressed_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..3483891c57f8d3c34c194b89f4e370e96795896b GIT binary patch literal 1049 zcmbVL&rj1(9IwF;LPFv}65;eLi6qF{zIJQZhKk+V%8WxYmbfEb`?ghRUuhq%a3V$z zMh<#XPa3`Z4|wpx#UmayCdPk26OT&pb*$)taIi`He)RkKe7-*)tt{V|7@ramO0z(T4~f&dW*q`^j*XsON)cs07uu6Y&=Ovt*<9y`^luYf9!5h!s&!4+fy$dH3l zQBjn6APP|61(Anh0V8(s;h#?{j^L!*Q2~s;Xuj zqFA67g=9M!i6IA-;hUycN5&9-WySOmla(P-aNI(Qd~+EsC>YVs|S*A*q=< zOaE}5?`aj&wj`*EMnx3lGK6JY7EQTWs+2@oE!yRr<20-xiDji|Rc%4CAT(`NH5Ai^ zl3guX6-g0uY%NTP6S^qZ^{MU-jLts1^7Zlj>n}fEKAGHm^R(2sc;Ut2=Ipe+%ZxDovrE>m RvCDU}VXaxq=G)5J{Xg>eYW#qt8Qe+F^yE0HVu%mj(usY);`z1Hg1Ik zsu*DD%*5OY33X(ks0#?OGQh$=Kr9R_;hZLgq3VDo`#$_W&+~r1SYEm}Gks&4VVIf5 zg4v|&6n)vL9Q}4GFTc?xPwH*5io2xm#E8*7+(DobIP0j19B+5)BbsBF$*$jOleWF6 zx;WsR%!W&Yh@u&0u9`-UyMYMkpmjgg*dK4-vB38<_EFIm?5Ku%{=#02R`-@#?%sy0 zcx-hZ%%v(N2oP~V8f=D%nriHjSEc*xnrFe#gluT+sZ(ux8Psr$K#>y)u22#{335=9 z%jNQ2APP|61(Anh0hU!sR0RQy9+s-bURQ0J)<}zt^%F*+T*O*EEzdKy9y+4dQ6n2ZudQ^u!G#6wQt zgCL7*Xq}KI`s>EI)=6tOLVOb?csq7!J-V}FFwNb?LYX1;M!g^Vv?$J|iQVl0g`{C> zEd9fIzNZ?dRhOV5>V_zkDiBtzl4zFXqEQq}ifmQJ9Oq$mNt6vkF)cx=LuguxqL)nz zN>;5{H>9#S#x}x)IH8Nix<1t%VQUv+)mn@kg5ws(o8t~x?qPzH9*#h5wFqp-^~3C( zmFF~C6UF`x@~jvKV3=RkKSy7#SCo=&>EbAEMUiW|t|&sqf=XG2>Xr z`FwtG^z{0tKD;S@XBMwqIzF5@oLGyRy$LyYCpmdyJQNPBFAFQj&-wcMqv|X3Wa{b~ X^LhUEudSVfpV`nh>PzNpV{QKrp!-O1 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-mdpi/abs__list_pressed_holo_light.9.png b/actionbarsherlock/library/res/drawable-mdpi/abs__list_pressed_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..236597868257bde1d4aecbe1ff474630a05d9089 GIT binary patch literal 1053 zcmbVLJ!sTW98axEE$yU2>-0$7^pcn4?(#v;n!8-Q15@kuu-8SJOWxguHhD35?WG;G zh>K91MG$oD;NU9i;2@47IOy)`AQS|pzFaTWp>!~iypQ~Uzu*7!;llj2$?*&048u&; zYes{vWAtUmPSbB&dHj_w)1=xWi?~Djc7zz+#cc%YzTHI)WV@SpKA>5K8SQw@7HL`6 zH3$2go!W4TA5t{K%+4jD?W`gK+NkRVCHDKPw=D4761!BepcPh7&#P@kXmM-4>1?e! zs>{w@0kerl34BCskoapstR*FOz^l=Hdd;(7U_w?)?157)YXMYngg}9VIR_RYC<>e) ze1 zLlkq=A{TE4#7=TSJd-gPD0U(*Bpwbx%4oOoIw`T#(}NKF(6SDRgLs%Inle7ILtfw@ z@B3+71M8SH&|f!>w2qsbA>tb-#_N$o>(QCXz%+Nq3#EqC8|_Bq(W2OE26onc6p*@6 zV(A~w^<1rNm{mzoMZGM-q9O>2Srm<8zECcRMKy0K8OKprT@n>JUsX&fRRzH?RaKV_ zQ;^I`p<0$?F~in_nAm}XGF^}A4zcpFSgjHvo8YL4@mkga3q4G5+`}QLEEa%eJ6@2U z)AAfdYoN&6K&}~K9}M!Vc}M6|x7DI<>f$hNRn1p)T~(oC3aXqJ*df;apPcd389r@} zf0`w`q8*rS4_lue4u=N?bYdbp8h39meWPP#)eXIwd};sM-=7;5S6uhx`0wt6A0N+e zpZfHCXL)CT`Pqp#6AE*7bOi1)yUf(yxhLDXm$i*|_sX~6BlC0Z=2ds^{nOsm$cYJN X`{MM^Gt;jxr2|{9&KobvEBF5Z1$0Mr literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-mdpi/abs__list_selector_disabled_holo_dark.9.png b/actionbarsherlock/library/res/drawable-mdpi/abs__list_selector_disabled_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..92da2f0dd3711a2ceb843768cafd6b91a2807b43 GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^{6MVD!3HFkzrK_Oq*#ibJVQ8upoSx*1IXtr@Q5sC zVBqcqVMg#;uvX%d>fBtxy+SfFGJhTv9Z9>9n%%Tr7{oI+Q@DMao9hQt@O?p#8;eZd15IY| MboFyt=akR{068-?^#A|> literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-mdpi/abs__list_selector_disabled_holo_light.9.png b/actionbarsherlock/library/res/drawable-mdpi/abs__list_selector_disabled_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..42cb6463e4c28c6aeffa315c4fc869867dbb6b7c GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^{6MVD!3HFkzrK_Oq*#ibJVQ8upoSx*1IXtr@Q5sC zVBqcqVMg@oJyIHz9Y|%SiynA|kd)58s-{92FmHki*;@KxND!%;H%=F4ZU(n;yg$GVRgBd(s L{an^LB{Ts54)-;@ literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-mdpi/abs__spinner_default_holo_dark.9.png b/actionbarsherlock/library/res/drawable-mdpi/abs__spinner_default_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..99b16056b13960eb95ff81b97f4084763404f1ac GIT binary patch literal 302 zcmeAS@N?(olHy`uVBq!ia0vp^-axF)!3HD^c9m`bQY^(zo*^7SP{WbZ0pxQQctjR6 zFmQK*Fr)d&(`$i(7d%}YLoyoQ-g4w?G7xaMs2~0Qf$9^UV|&FvE_gh%;BZrhu;hY8 zFY8a6WvbOXE?|5mp*2_A^U|}ny!V{{IyVaSOiftBlB_DBeK3Mkw(iR+rg$%7kXTcP z#k6a^Uz2!B_1{WnCked@xn+LsMX-i}n1Q~CM0S}*hE157h>480G?!HGRuvHwiR?^` z44rGU0xm@8JUDeI;6lKfjvb8C_dd^P{T?ZK%*!CG32d9r)j|zjwMW7E=e~$M2n70#!PC{xWt~$(69Bh6a`ylL literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-mdpi/abs__spinner_default_holo_light.9.png b/actionbarsherlock/library/res/drawable-mdpi/abs__spinner_default_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..c820e40a1fa53a02e063689af1b0b22cbb71d822 GIT binary patch literal 301 zcmeAS@N?(olHy`uVBq!ia0vp^-axF)!3HD^c9m`bQY^(zo*^7SP{WbZ0pxQQctjR6 zFmQK*Fr)d&(`$i(=RI8=S(s69?(!#l@=~!ntl!6G)o`&MW17~=l&s6gI`{agmZrYsRA{(5`9EcQX+C`+ osj_#a-R80lU(+Xt73Y3pk(w;wRWoZtAkb?Jp00i_>zopr08EN*F8}}l literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-mdpi/abs__spinner_disabled_holo_dark.9.png b/actionbarsherlock/library/res/drawable-mdpi/abs__spinner_disabled_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..95d7c86e5b4f6bc9e5bb4351ec954efa8165e71b GIT binary patch literal 331 zcmeAS@N?(olHy`uVBq!ia0vp^UO=qH!3HEnRL*JxDVAa<&kznEsNqQI0P;BtJR*x3 z7`Qt@n9=;?>9s(?x1KJJAsLNtZ#i-`IY_iUT(7~j&^5ecSL1j4gY^^2WDlBco*?mB z`m)aR+G$otzD)Y0?fLmd+OHS}2DjJSyx%{F7dYjjA-vG1#YhmyxEyA4Ajyemj-Jy@ zj;|_8Wji0Yyz-p5Zf9|eSJlK>cYeM(zs5}PqKB2Y70=q0b|Ee@stK+Nq8B}=hELQvQ^1tM>Th}xA YnG-a>&UD)?3-maHr>mdKI;Vst0M@RAKmY&$ literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-mdpi/abs__spinner_disabled_holo_light.9.png b/actionbarsherlock/library/res/drawable-mdpi/abs__spinner_disabled_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..2dba2704f493419c5b3171a3f03a194900fcb497 GIT binary patch literal 331 zcmeAS@N?(olHy`uVBq!ia0vp^UO=qH!3HEnRL*JxDVAa<&kznEsNqQI0P;BtJR*x3 z7`Qt@n9=;?>9s(?x1KJJAsLNtZ#i-`IY_iUT(7~j&^5fn>R|nU<%<3?*@I@ACrG@O zzO3`ScAC|ZFOxoLdwzbA_A7>g!R_@n@AnVl1x~qW2ru+$F%kqaE{EA1NOIztqvte} z7`L0ct=SQi8;t1{K~ri`727{4e?J*7Xej YZZ(m@*Zsx7P+(y2boFyt=akR{08E~Q00000 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-mdpi/abs__spinner_focused_holo_dark.9.png b/actionbarsherlock/library/res/drawable-mdpi/abs__spinner_focused_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..2e2fadd83cf9209b1f6902b9fceaa9e08650af94 GIT binary patch literal 352 zcmeAS@N?(olHy`uVBq!ia0vp^UO=qH!3HEnRL*JxDVAa<&kznEsNqQI0P;BtJR*x3 z7`Qt@n9=;?>9q_Dj7**`jv*P1Z*Lh29dr0>e#5X;Yl_m^QtFL3~ z7p<9ipm2rR!~>ZtwoN>cxZ=^VyIMjP+@U=T?on<`?hCz&FKs&gQ_pFyw3_aoGlAUm zn3t+7`@eXN$SIG7JtC(xeytTZ`c|8t;=vc4cXjKsj}K;5=sTOQ(sOY>d-H17ucGyO pR}OW0=m*7C&$l~ou%r4AbI&E!#ml;*Ujl=O!PC{xWt~$(697(_i@yK> literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-mdpi/abs__spinner_focused_holo_light.9.png b/actionbarsherlock/library/res/drawable-mdpi/abs__spinner_focused_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..5bbbf63953db1f406e16fbff34505f1bc5def9b0 GIT binary patch literal 499 zcmV2V*7i{gUsf_UxO!xyUN`FCXOKTH@g`u<4L=uRJg~WvDWhgw8<2Z0nJvndZb?nZP z$qPF>3?zdj^u3CrD2noJBscF2{tGI~5*1~Min2sSS)!sWQBjuU&_A%sFCv9`XOJdD zBnOm%cVo;;aL>#qrSu^p1z;Ok^_T9AF%O^HTFe=j^z?eO>@U}XG0uw$OS-t*J@U8m z!8oTyMM)ZZ&$XynXN$RrtN?YO*y*>b?QXO2<_*@S#XBiVM9RPxkiULB-n{Ld9Ef;} zv(7ko_55E_EJ@&)D8DAvi75#j5)~-i#ki8d5mCX{tD8mok*HE+~GXDHmyB4OE{ObGx5kx6E$Jf paWdZ>C`w96>hArtlTBSs7y($Dq5N)-%j5t6002ovPDHLkV1j6N)%5@X literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-mdpi/abs__spinner_pressed_holo_dark.9.png b/actionbarsherlock/library/res/drawable-mdpi/abs__spinner_pressed_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..083194a6fa111f065ef61e9ad9246a70ec53618d GIT binary patch literal 420 zcmeAS@N?(olHy`uVBq!ia0vp^-axF)!3HD^c9m`bQY^(zo*^7SP{WbZ0pxQQctjR6 zFmQK*Fr)d&(`y+R7~MQw978f1-`?8qbvQtx?W6j}D-SL?3U0c&(&Bfz$dT+1Vqa!` ziHq4~?Y(?gYSGjntwIm4C2}u+3MD6<|J|ehu;9l;2PXL~!S^ohn=8h6$M#A40ZoG! z-z@g#uJiZfC;qvfd%tG0$?QL0J%3#*o_5ac`kaV$(xG3a^sH@N y|3^Eunl7I4J?wsT;Eye4&o7kRSTg;y`236Eu6ccNCTD=b%;4$j=d#Wzp$Pz=7`crA literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-mdpi/abs__spinner_pressed_holo_light.9.png b/actionbarsherlock/library/res/drawable-mdpi/abs__spinner_pressed_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..29cbc4621542f2e2d058f0440980872d510c2849 GIT binary patch literal 457 zcmeAS@N?(olHy`uVBq!ia0vp^UO=qH!3HEnRL*JxDVAa<&kznEsNqQI0P;BtJR*x3 z7`Qt@n9=;?>9q_DjM<(pjv*P1Z*T4OIvgNz?BjC92}chu^z({sY7XG`yXPp#@=$97vck(#_ELt$lCQjmCO_={>z;flP*?Ea3A4tsOvleg z-~3mp@cW&AXU=ei@y6+$b1#`NUa+^jRoCSoag0I9^=608KI4TQUxF_sWjSrM6!el< z*n%J;A26@c;69ejdaUoY&Adw(}hrX_L51*flGgf)f9~6BN;g^-)UN@?1%s!npUXO@geCw<2)@$* literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-mdpi/abs__tab_selected_focused_holo.9.png b/actionbarsherlock/library/res/drawable-mdpi/abs__tab_selected_focused_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..9a33cd2d92874dd09f4eb5d3f924eebe97b25c40 GIT binary patch literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^>_BY9!3HEJJUw_8NJ*BsMwA5Sr8n0M1DW`tbSwb=FK+^Rf3lPOJU(KVDPR|J0bAe<1Nr)22WQ%mvv4FO#pfqOKt!F literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-mdpi/abs__tab_selected_holo.9.png b/actionbarsherlock/library/res/drawable-mdpi/abs__tab_selected_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..e029e577a711e01450d8924bb7cd8bcb6867db82 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y|!3HFERhwS|Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>Jii|v6978H@CH?sS-=0~ZfivY;J=+AIS6Aj=Q{WS37HTN$ qQz(|;D3Fkp+<4kRVK;-q0S2o8fp2Rs`~3szX7F_Nb6Mw<&;$SgLM&YX literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-mdpi/abs__tab_selected_pressed_focused_holo.9.png b/actionbarsherlock/library/res/drawable-mdpi/abs__tab_selected_pressed_focused_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..285116e31e1c3fb26567af209b73718f07bc1355 GIT binary patch literal 454 zcmV;%0XhDOP)DF0XHC5fCg&1oFoM^V6d>XlD+HCBt>?{(e6rmdU}?_B0{m4Sq~g{wt4!r zOWN(uURJA*E8X9o5`pq1%=xiasQb6`jUKk!*Ufr;;jZ^fbg&jJ#D&#`!qIK=b6In= z4s{w7)41lI%r07#2$`jVkT}Ec$L&ljwAe}zSti7@ggO;j6%rHwP=!Q#LdChy6oR*c z@mo=c%?Ogk{+e}+hZtjm#F&LMNtVI#OlD|XWTvJq05qMU)SFOJNG9*oVf%flkP~v9 z=Y+3jgm<=-`V42?!wN%1FiVM3j0wDEHMGV=kqm5;4Rvd0k?m~ w8U}fi7AzZCsS>JiaI@A978H@^#nQcH7M}hZY%G%JHuabG5!aqaP2Bixj6GbE&Os5bkw9sMq-sUhLgvwDil6_u$Ij+-sD=}ZmKxYhgcu#~pn0rP!P zlW+2eN-A94>Tv7U%K#(ixsEr27ML73#$j6gN!I7~MEh2azKZipvd`~)x3!+5XZ7?s c9n*oXua>h?X*ygK2XqvJr>mdKI;Vst06dpdnE(I) literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-mdpi/abs__tab_unselected_focused_holo.9.png b/actionbarsherlock/library/res/drawable-mdpi/abs__tab_unselected_focused_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..032a9921c54ebd6d8bb71aea1552758efb1efd19 GIT binary patch literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^>_BY9!3HEJJUw_8NJ*BsMwA5Sr?ic(Aw2{Hn)z4*}Q$iB};WR^U literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-mdpi/abs__tab_unselected_holo.9.png b/actionbarsherlock/library/res/drawable-mdpi/abs__tab_unselected_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..848f3f13363cb940353382afd94e8fdcbb13bf34 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y_!3HE73d0rwDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MM|D7jv*Ddl79UEZ_g~yz?s6<;y3q~@R1+qk2LU1_{zW{ a!SH4(?<>94hd6<%89ZJ6T-G@yGywo*Iw!3F literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-mdpi/abs__tab_unselected_pressed_focused_holo.9.png b/actionbarsherlock/library/res/drawable-mdpi/abs__tab_unselected_pressed_focused_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..3845135847312f61d9874eb4e4e9c703dcc168d6 GIT binary patch literal 459 zcmV;+0W|)JP)>s>b==;?%5h#oym!sb@v)nwLuGD#ddt4nJoq6c_90P317A`GSu=PO9R)W#5 zDoaABnMTGa0uGz~EeLH68Wa=l)Td^P5+Sox5E5soyX1+}R%o%6Ok|l5&k`DTj?>9t zrmYnc83`4B*cEsysCPvJ%vNa@o7Zgfu@GZSP|Fg6NwNUTGnHA}qB1pY383j2O1-J@ zZma!t*zvto$O*a5bHX<>!aG|^edb_0!U{u0FiVM3J|^%rn{`X!mWcowRGV*^%Lll& zO`wIX7002ovPDHLkV1hC_ Bz{LOn literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-mdpi/abs__tab_unselected_pressed_holo.9.png b/actionbarsherlock/library/res/drawable-mdpi/abs__tab_unselected_pressed_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..23fd8c9b351c7dc4ca7d61bdf8b0fa0b3357afc0 GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^%s_0!!3HE}@+EEuQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JiW)s#978H@^#nQcH7M}h?kex!cUt|2fc?W{-#r$B;+r&$ zCmhJwwN<*&rR9^B`%azPhW7=3CfsE?TiI|eAXVmsigepfZQY<^*$T$v9;+|bZ{5Ls z@x~N43;ta!61B<)ywtP1E|{=7D7Ecj;BU-)@wqN;rGn!(u4Nx%>`hbb@2ehQSYT@5 Uszopr0E4hlYXATM literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-nodpi-v11/abs__action_item_divider.9.png b/actionbarsherlock/library/res/drawable-nodpi-v11/abs__action_item_divider.9.png new file mode 100644 index 0000000000000000000000000000000000000000..c30f607d0aa66ce47fe22159249f7925512dd28a GIT binary patch literal 80 zcmeAS@N?(olHy`uVBq!ia0vp^%plCc1|-8Yw(bW~;+`&!Ar-fh6B-)+^B5f4SNpps cki~(8q5LmfmduLwJwPQ4p00i_>zopr0KdZ(YXATM literal 0 HcmV?d00001 diff --git a/actionbarsherlock/library/res/drawable-nodpi/abs__action_item_divider.9.png b/actionbarsherlock/library/res/drawable-nodpi/abs__action_item_divider.9.png new file mode 100644 index 0000000000000000000000000000000000000000..62332880b099b84b08d0d320452ae55f252599bd GIT binary patch literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^%plCc1|-8Yw(bW~jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-progZV+hCf + + + + + + + diff --git a/actionbarsherlock/library/res/drawable/abs__item_background_holo_dark.xml b/actionbarsherlock/library/res/drawable/abs__item_background_holo_dark.xml new file mode 100644 index 000000000..b7b97b5ae --- /dev/null +++ b/actionbarsherlock/library/res/drawable/abs__item_background_holo_dark.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + diff --git a/actionbarsherlock/library/res/drawable/abs__item_background_holo_light.xml b/actionbarsherlock/library/res/drawable/abs__item_background_holo_light.xml new file mode 100644 index 000000000..fdcac1d8a --- /dev/null +++ b/actionbarsherlock/library/res/drawable/abs__item_background_holo_light.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + diff --git a/actionbarsherlock/library/res/drawable/abs__list_selector_background_transition_holo_dark.xml b/actionbarsherlock/library/res/drawable/abs__list_selector_background_transition_holo_dark.xml new file mode 100644 index 000000000..b2ce4f0f7 --- /dev/null +++ b/actionbarsherlock/library/res/drawable/abs__list_selector_background_transition_holo_dark.xml @@ -0,0 +1,20 @@ + + + + + + + diff --git a/actionbarsherlock/library/res/drawable/abs__list_selector_background_transition_holo_light.xml b/actionbarsherlock/library/res/drawable/abs__list_selector_background_transition_holo_light.xml new file mode 100644 index 000000000..d7e31b1d1 --- /dev/null +++ b/actionbarsherlock/library/res/drawable/abs__list_selector_background_transition_holo_light.xml @@ -0,0 +1,20 @@ + + + + + + + diff --git a/actionbarsherlock/library/res/drawable/abs__spinner_background_holo_dark.xml b/actionbarsherlock/library/res/drawable/abs__spinner_background_holo_dark.xml new file mode 100644 index 000000000..8d3500404 --- /dev/null +++ b/actionbarsherlock/library/res/drawable/abs__spinner_background_holo_dark.xml @@ -0,0 +1,25 @@ + + + + + + + + + diff --git a/actionbarsherlock/library/res/drawable/abs__spinner_background_holo_light.xml b/actionbarsherlock/library/res/drawable/abs__spinner_background_holo_light.xml new file mode 100644 index 000000000..0770f1093 --- /dev/null +++ b/actionbarsherlock/library/res/drawable/abs__spinner_background_holo_light.xml @@ -0,0 +1,25 @@ + + + + + + + + + diff --git a/actionbarsherlock/library/res/drawable/abs__tab_indicator_holo.xml b/actionbarsherlock/library/res/drawable/abs__tab_indicator_holo.xml new file mode 100644 index 000000000..542a5cee3 --- /dev/null +++ b/actionbarsherlock/library/res/drawable/abs__tab_indicator_holo.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/actionbarsherlock/library/res/layout-land/abs__action_bar.xml b/actionbarsherlock/library/res/layout-land/abs__action_bar.xml new file mode 100644 index 000000000..a9641546e --- /dev/null +++ b/actionbarsherlock/library/res/layout-land/abs__action_bar.xml @@ -0,0 +1,20 @@ + + + + + diff --git a/actionbarsherlock/library/res/layout-land/abs__screen_action_bar.xml b/actionbarsherlock/library/res/layout-land/abs__screen_action_bar.xml new file mode 100644 index 000000000..794f52831 --- /dev/null +++ b/actionbarsherlock/library/res/layout-land/abs__screen_action_bar.xml @@ -0,0 +1,24 @@ + + + + + + + + diff --git a/actionbarsherlock/library/res/layout-land/abs__screen_action_bar_overlay.xml b/actionbarsherlock/library/res/layout-land/abs__screen_action_bar_overlay.xml new file mode 100644 index 000000000..66a63f9dd --- /dev/null +++ b/actionbarsherlock/library/res/layout-land/abs__screen_action_bar_overlay.xml @@ -0,0 +1,25 @@ + + + + + + + + diff --git a/actionbarsherlock/library/res/layout-large/abs__action_bar.xml b/actionbarsherlock/library/res/layout-large/abs__action_bar.xml new file mode 100644 index 000000000..a9641546e --- /dev/null +++ b/actionbarsherlock/library/res/layout-large/abs__action_bar.xml @@ -0,0 +1,20 @@ + + + + + diff --git a/actionbarsherlock/library/res/layout-large/abs__screen_action_bar.xml b/actionbarsherlock/library/res/layout-large/abs__screen_action_bar.xml new file mode 100644 index 000000000..794f52831 --- /dev/null +++ b/actionbarsherlock/library/res/layout-large/abs__screen_action_bar.xml @@ -0,0 +1,24 @@ + + + + + + + + diff --git a/actionbarsherlock/library/res/layout-large/abs__screen_action_bar_overlay.xml b/actionbarsherlock/library/res/layout-large/abs__screen_action_bar_overlay.xml new file mode 100644 index 000000000..66a63f9dd --- /dev/null +++ b/actionbarsherlock/library/res/layout-large/abs__screen_action_bar_overlay.xml @@ -0,0 +1,25 @@ + + + + + + + + diff --git a/actionbarsherlock/library/res/layout/abs__action_bar.xml b/actionbarsherlock/library/res/layout/abs__action_bar.xml new file mode 100644 index 000000000..4e3827f33 --- /dev/null +++ b/actionbarsherlock/library/res/layout/abs__action_bar.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/actionbarsherlock/library/res/layout/abs__action_bar_home.xml b/actionbarsherlock/library/res/layout/abs__action_bar_home.xml new file mode 100644 index 000000000..5bff71ddc --- /dev/null +++ b/actionbarsherlock/library/res/layout/abs__action_bar_home.xml @@ -0,0 +1,38 @@ + + + + + + \ No newline at end of file diff --git a/actionbarsherlock/library/res/layout/abs__action_bar_inline.xml b/actionbarsherlock/library/res/layout/abs__action_bar_inline.xml new file mode 100644 index 000000000..9aa245b29 --- /dev/null +++ b/actionbarsherlock/library/res/layout/abs__action_bar_inline.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/actionbarsherlock/library/res/layout/abs__action_bar_item_layout.xml b/actionbarsherlock/library/res/layout/abs__action_bar_item_layout.xml new file mode 100644 index 000000000..85d866175 --- /dev/null +++ b/actionbarsherlock/library/res/layout/abs__action_bar_item_layout.xml @@ -0,0 +1,52 @@ + + + + + + + \ No newline at end of file diff --git a/actionbarsherlock/library/res/layout/abs__action_bar_tab_layout.xml b/actionbarsherlock/library/res/layout/abs__action_bar_tab_layout.xml new file mode 100644 index 000000000..8af6662eb --- /dev/null +++ b/actionbarsherlock/library/res/layout/abs__action_bar_tab_layout.xml @@ -0,0 +1,53 @@ + + + + + + + diff --git a/actionbarsherlock/library/res/layout/abs__action_bar_title_item.xml b/actionbarsherlock/library/res/layout/abs__action_bar_title_item.xml new file mode 100644 index 000000000..1d37ef58c --- /dev/null +++ b/actionbarsherlock/library/res/layout/abs__action_bar_title_item.xml @@ -0,0 +1,44 @@ + + + + + + + diff --git a/actionbarsherlock/library/res/layout/abs__screen_action_bar.xml b/actionbarsherlock/library/res/layout/abs__screen_action_bar.xml new file mode 100644 index 000000000..d3a5fb796 --- /dev/null +++ b/actionbarsherlock/library/res/layout/abs__screen_action_bar.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/actionbarsherlock/library/res/layout/abs__screen_action_bar_inline.xml b/actionbarsherlock/library/res/layout/abs__screen_action_bar_inline.xml new file mode 100644 index 000000000..16c05d11b --- /dev/null +++ b/actionbarsherlock/library/res/layout/abs__screen_action_bar_inline.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/actionbarsherlock/library/res/layout/abs__screen_action_bar_inline_overlay.xml b/actionbarsherlock/library/res/layout/abs__screen_action_bar_inline_overlay.xml new file mode 100644 index 000000000..a8243dd47 --- /dev/null +++ b/actionbarsherlock/library/res/layout/abs__screen_action_bar_inline_overlay.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/actionbarsherlock/library/res/layout/abs__screen_action_bar_overlay.xml b/actionbarsherlock/library/res/layout/abs__screen_action_bar_overlay.xml new file mode 100644 index 000000000..a9c3cc7a0 --- /dev/null +++ b/actionbarsherlock/library/res/layout/abs__screen_action_bar_overlay.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/actionbarsherlock/library/res/layout/abs__screen_simple.xml b/actionbarsherlock/library/res/layout/abs__screen_simple.xml new file mode 100644 index 000000000..0687578fb --- /dev/null +++ b/actionbarsherlock/library/res/layout/abs__screen_simple.xml @@ -0,0 +1,43 @@ + + + + + + + diff --git a/actionbarsherlock/library/res/layout/abs__simple_spinner_item.xml b/actionbarsherlock/library/res/layout/abs__simple_spinner_item.xml new file mode 100644 index 000000000..9be5ea8d1 --- /dev/null +++ b/actionbarsherlock/library/res/layout/abs__simple_spinner_item.xml @@ -0,0 +1,26 @@ + + + diff --git a/actionbarsherlock/library/res/values-land/abs__constants.xml b/actionbarsherlock/library/res/values-land/abs__constants.xml new file mode 100644 index 000000000..c9028db7c --- /dev/null +++ b/actionbarsherlock/library/res/values-land/abs__constants.xml @@ -0,0 +1,5 @@ + + + + 4 + \ No newline at end of file diff --git a/actionbarsherlock/library/res/values-v11/abs__styles.xml b/actionbarsherlock/library/res/values-v11/abs__styles.xml new file mode 100644 index 000000000..5c0dd1036 --- /dev/null +++ b/actionbarsherlock/library/res/values-v11/abs__styles.xml @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/actionbarsherlock/library/res/values-v13/abs__styles.xml b/actionbarsherlock/library/res/values-v13/abs__styles.xml new file mode 100644 index 000000000..4112a4aad --- /dev/null +++ b/actionbarsherlock/library/res/values-v13/abs__styles.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/actionbarsherlock/library/res/values/abs__attrs.xml b/actionbarsherlock/library/res/values/abs__attrs.xml new file mode 100644 index 000000000..1279c78e5 --- /dev/null +++ b/actionbarsherlock/library/res/values/abs__attrs.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/actionbarsherlock/library/res/values/abs__constants.xml b/actionbarsherlock/library/res/values/abs__constants.xml new file mode 100644 index 000000000..ddcb58b97 --- /dev/null +++ b/actionbarsherlock/library/res/values/abs__constants.xml @@ -0,0 +1,7 @@ + + + + #FF6899FF + 3 + tabUnderAb + \ No newline at end of file diff --git a/actionbarsherlock/library/res/values/abs__styles.xml b/actionbarsherlock/library/res/values/abs__styles.xml new file mode 100644 index 000000000..1b01d5093 --- /dev/null +++ b/actionbarsherlock/library/res/values/abs__styles.xml @@ -0,0 +1,224 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/actionbarsherlock/library/src/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat.java b/actionbarsherlock/library/src/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat.java new file mode 100644 index 000000000..4be290999 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat.java @@ -0,0 +1,221 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.accessibilityservice; + +//import android.accessibilityservice.AccessibilityService; +import android.accessibilityservice.AccessibilityServiceInfo; +import android.content.pm.ResolveInfo; + +/** + * Helper for accessing newer features in AccessibilityServiceInfo. + */ +public class AccessibilityServiceInfoCompat { + + static interface AccessibilityServiceInfoVersionImpl { + public String getId(AccessibilityServiceInfo info); + public ResolveInfo getResolveInfo(AccessibilityServiceInfo info); + public boolean getCanRetrieveWindowContent(AccessibilityServiceInfo info); + public String getDescription(AccessibilityServiceInfo info); + public String getSettingsActivityName(AccessibilityServiceInfo info); + } + + static class AccessibilityServiceInfoStubImpl implements AccessibilityServiceInfoVersionImpl { + + public boolean getCanRetrieveWindowContent(AccessibilityServiceInfo info) { + return false; + } + + public String getDescription(AccessibilityServiceInfo info) { + return null; + } + + public String getId(AccessibilityServiceInfo info) { + return null; + } + + public ResolveInfo getResolveInfo(AccessibilityServiceInfo info) { + return null; + } + + public String getSettingsActivityName(AccessibilityServiceInfo info) { + return null; + } + } +/* + static class AccessibilityServiceInfoIcsImpl extends AccessibilityServiceInfoStubImpl { + + @Override + public boolean getCanRetrieveWindowContent(AccessibilityServiceInfo info) { + return AccessibilityServiceInfoCompatIcs.getCanRetrieveWindowContent(info); + } + + @Override + public String getDescription(AccessibilityServiceInfo info) { + return AccessibilityServiceInfoCompatIcs.getDescription(info); + } + + @Override + public String getId(AccessibilityServiceInfo info) { + return AccessibilityServiceInfoCompatIcs.getId(info); + } + + @Override + public ResolveInfo getResolveInfo(AccessibilityServiceInfo info) { + return AccessibilityServiceInfoCompatIcs.getResolveInfo(info); + } + + @Override + public String getSettingsActivityName(AccessibilityServiceInfo info) { + return AccessibilityServiceInfoCompatIcs.getSettingsActivityName(info); + } + } +*/ + static { + //if (Build.VERSION.SDK_INT >= 14) { // ICS + // IMPL = new AccessibilityServiceInfoIcsImpl(); + //} else { + IMPL = new AccessibilityServiceInfoStubImpl(); + //} + } + + private static final AccessibilityServiceInfoVersionImpl IMPL; + + /** + * Mask for all feedback types. + * + * @see AccessibilityServiceInfo#FEEDBACK_SPOKEN + * @see AccessibilityServiceInfo#FEEDBACK_HAPTIC + * @see AccessibilityServiceInfo#FEEDBACK_AUDIBLE + * @see AccessibilityServiceInfo#FEEDBACK_VISUAL + * @see AccessibilityServiceInfo#FEEDBACK_GENERIC + */ + public static final int FEEDBACK_ALL_MASK = 0xFFFFFFFF; + + /* + * Hide constructor + */ + private AccessibilityServiceInfoCompat() { + + } + + /** + * The accessibility service id. + *

+ * Generated by the system. + *

+ * + * @return The id. + */ + public static String getId(AccessibilityServiceInfo info) { + return IMPL.getId(info); + } + + /** + * The service {@link ResolveInfo}. + *

+ * Generated by the system. + *

+ * + * @return The info. + */ + public static ResolveInfo getResolveInfo(AccessibilityServiceInfo info) { + return IMPL.getResolveInfo(info); + } + + /** + * The settings activity name. + *

+ * Statically set from {@link AccessibilityService#SERVICE_META_DATA + * meta-data}. + *

+ * + * @return The settings activity name. + */ + public static String getSettingsActivityName(AccessibilityServiceInfo info) { + return IMPL.getSettingsActivityName(info); + } + + /** + * Whether this service can retrieve the current window's content. + *

+ * Statically set from {@link AccessibilityService#SERVICE_META_DATA + * meta-data}. + *

+ * + * @return True window content can be retrieved. + */ + public static boolean getCanRetrieveWindowContent(AccessibilityServiceInfo info) { + return IMPL.getCanRetrieveWindowContent(info); + } + + /** + * Description of the accessibility service. + *

+ * Statically set from {@link AccessibilityService#SERVICE_META_DATA + * meta-data}. + *

+ * + * @return The description. + */ + public static String getDescription(AccessibilityServiceInfo info) { + return IMPL.getDescription(info); + } + + /** + * Returns the string representation of a feedback type. For example, + * {@link AccessibilityServiceInfo#FEEDBACK_SPOKEN} is represented by the + * string FEEDBACK_SPOKEN. + * + * @param feedbackType The feedback type. + * @return The string representation. + */ + public static String feedbackTypeToString(int feedbackType) { + switch (feedbackType) { + case AccessibilityServiceInfo.FEEDBACK_AUDIBLE: + return "FEEDBACK_AUDIBLE"; + case AccessibilityServiceInfo.FEEDBACK_HAPTIC: + return "FEEDBACK_HAPTIC"; + case AccessibilityServiceInfo.FEEDBACK_GENERIC: + return "FEEDBACK_GENERIC"; + case AccessibilityServiceInfo.FEEDBACK_SPOKEN: + return "FEEDBACK_SPOKEN"; + case AccessibilityServiceInfo.FEEDBACK_VISUAL: + return "FEEDBACK_VISUAL"; + case AccessibilityServiceInfoCompat.FEEDBACK_ALL_MASK: + return "FEEDBACK_ALL"; + default: + return null; + } + } + + /** + * Returns the string representation of a flag. For example, + * {@link AccessibilityServiceInfo#DEFAULT} is represented by the + * string DEFAULT. + * + * @param flag The flag. + * @return The string representation. + */ + public static String flagToString(int flag) { + switch (flag) { + case AccessibilityServiceInfo.DEFAULT: + return "DEFAULT"; + default: + return null; + } + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompatIcs.java b/actionbarsherlock/library/src/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompatIcs.java new file mode 100644 index 000000000..c5be82b0e --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompatIcs.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +package android.support.v4.accessibilityservice; + +//import android.accessibilityservice.AccessibilityServiceInfo; +//import android.content.pm.ResolveInfo; + +/** + * ICS implementation of the new APIs in AccessibilityServiceInfo. + */ +class AccessibilityServiceInfoCompatIcs { +/* + public static boolean getCanRetrieveWindowContent(AccessibilityServiceInfo info) { + return info.getCanRetrieveWindowContent(); + } + + public static String getDescription(AccessibilityServiceInfo info) { + return info.getDescription(); + } + + public static String getId(AccessibilityServiceInfo info) { + return info.getId(); + } + + public static ResolveInfo getResolveInfo(AccessibilityServiceInfo info) { + return info.getResolveInfo(); + } + + public static String getSettingsActivityName(AccessibilityServiceInfo info) { + return info.getSettingsActivityName(); + } +*/ +} diff --git a/actionbarsherlock/library/src/android/support/v4/app/ActionBar.java b/actionbarsherlock/library/src/android/support/v4/app/ActionBar.java new file mode 100644 index 000000000..1d7d9b376 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/app/ActionBar.java @@ -0,0 +1,795 @@ +/* + * Copyright 2011 Jake Wharton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.app; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.support.v4.view.ActionMode; +import android.util.AttributeSet; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewGroup.MarginLayoutParams; +import android.widget.SpinnerAdapter; + +/** + * This is the public interface to the contextual ActionBar. The ActionBar acts + * as a replacement for the title bar in Activities. It provides facilities for + * creating toolbar actions as well as methods of navigating around an + * application. + */ +public abstract class ActionBar { + /** + * Return the actual public action bar instance. This will either return + * itself or null depending on the state of the underlying action bar. + * + * @return Action bar instance. + */ + protected abstract ActionBar getPublicInstance(); + + // ------------------------------------------------------------------------ + // ACTION MODE SUPPORT + // ------------------------------------------------------------------------ + + protected abstract ActionMode startActionMode(ActionMode.Callback callback); + + // ------------------------------------------------------------------------ + // ACTION BAR SUPPORT + // ------------------------------------------------------------------------ + + /** + * Per-child layout information associated with action bar custom views. + */ + public static class LayoutParams extends MarginLayoutParams { + /** + * Gravity for the view associated with these LayoutParams. + * + * @see android.view.Gravity + */ + public int gravity = -1; + + public LayoutParams() { + this(-1); + } + public LayoutParams(Context c, AttributeSet attrs) { + super(c, attrs); + } + public LayoutParams(int width, int height) { + super(width, height); + } + public LayoutParams(int width, int height, int gravity) { + this(width, height); + this.gravity = gravity; + } + public LayoutParams(int gravity) { + this(0, 0, gravity); + } + public LayoutParams(LayoutParams source) { + super(source); + this.gravity = source.gravity; + } + public LayoutParams(ViewGroup.LayoutParams source) { + super(source); + } + } + + /** + * Listener for receiving events when action bar menus are shown or hidden. + */ + public interface OnMenuVisibilityListener { + /** + * Called when an action bar menu is shown or hidden. Applications may + * want to use this to tune auto-hiding behavior for the action bar or + * pause/resume video playback, gameplay, or other activity within the + * main content area. + * + * @param isVisible True if an action bar menu is now visible, false if + * no action bar menus are visible. + */ + void onMenuVisibilityChanged(boolean isVisible); + } + + /** + * Listener interface for ActionBar navigation events. + */ + public interface OnNavigationListener { + /** + * This method is called whenever a navigation item in your action bar + * is selected. + * + * @param itemPosition Position of the item clicked. + * @param itemId ID of the item clicked. + * @return True if the event was handled, false otherwise. + */ + boolean onNavigationItemSelected(int itemPosition, long itemId); + } + + /** + *

A tab in the action bar.

+ * + *

Tabs manage the hiding and showing of + * {@link android.support.v4.app.Fragment}.

+ */ + public static abstract class Tab { + /** + * An invalid position for a tab. + * + * @see #getPosition() + */ + public static int INVALID_POSITION = android.app.ActionBar.Tab.INVALID_POSITION; + + + /** + * Retrieve a previously set custom view for this tab. + * + * @return The custom view set by {@link #setCustomView(View)}. + */ + public abstract View getCustomView(); + + /** + * Return the icon associated with this tab. + * + * @return The tab's icon + */ + public abstract Drawable getIcon(); + + /** + * Return the current position of this tab in the action bar. + * + * @return Current position, or {@link #INVALID_POSITION} if this tab is + * not currently in the action bar. + */ + public abstract int getPosition(); + + /** + * Return the current tab listener. + * + * @return Tab listener. + */ + public abstract ActionBar.TabListener getTabListener(); + + /** + * @return This Tab's tag object. + */ + public abstract Object getTag(); + + /** + * Return the text of this tab. + * + * @return The tab's text + */ + public abstract CharSequence getText(); + + /** + * Select this tab. Only valid if the tab has been added to the action + * bar. + */ + public abstract void select(); + + /** + * Set a custom view to be used for this tab. This overrides values set + * by {@link #setText(CharSequence)} and {@link #setIcon(Drawable)}. + * + * @param layoutResId A layout resource to inflate and use as a custom + * tab view + * @return The current instance for call chaining + */ + public abstract ActionBar.Tab setCustomView(int layoutResId); + + /** + * Set a custom view to be used for this tab. This overrides values set + * by {@link #setText(CharSequence)} and {@link #setIcon(Drawable)}. + * + * @param view Custom view to be used as a tab. + * @return The current instance for call chaining + */ + public abstract ActionBar.Tab setCustomView(View view); + + /** + * Set the icon displayed on this tab. + * + * @param icon The drawable to use as an icon + * @return The current instance for call chaining + */ + public abstract ActionBar.Tab setIcon(Drawable icon); + + /** + * Set the icon displayed on this tab. + * + * @param resId Resource ID referring to the drawable to use as an icon + * @return The current instance for call chaining + */ + public abstract ActionBar.Tab setIcon(int resId); + + /** + * Set the {@link ActionBar.TabListener} that will handle switching to + * and from this tab. All tabs must have a TabListener set before being + * added to the ActionBar. + * + * @param listener Listener to handle tab selection events + * @return The current instance for call chaining + */ + public abstract ActionBar.Tab setTabListener(ActionBar.TabListener listener); + + /** + * Give this Tab an arbitrary object to hold for later use. + * + * @param obj Object to store + * @return The current instance for call chaining + */ + public abstract ActionBar.Tab setTag(Object obj); + + /** + * Set the text displayed on this tab. Text may be truncated if there is + * not room to display the entire string. + * + * @param resId A resource ID referring to the text that should be displayed + * @return The current instance for call chaining + */ + public abstract ActionBar.Tab setText(int resId); + + /** + * Set the text displayed on this tab. Text may be truncated if there is + * not room to display the entire string. + * + * @param text The text to display + * @return The current instance for call chaining + */ + public abstract ActionBar.Tab setText(CharSequence text); + } + + /** + * Callback interface invoked when a tab is focused, unfocused, added, or + * removed. + */ + public interface TabListener { + /** + * Called when a tab that is already selected is chosen again by the + * user. Some applications may use this action to return to the top + * level of a category. + * + * @param tab The tab that was reselected. + * @param ft Unused, always {@code null}. Begin your own transaction by + * calling {@link FragmentActivity#getSupportFragmentManager()}. + */ + void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft); + + /** + * Called when a tab enters the selected state. + * + * @param tab The tab that was selected + * @param ft Unused, always {@code null}. Begin your own transaction by + * calling {@link FragmentActivity#getSupportFragmentManager()}. + */ + void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft); + + /** + * Called when a tab exits the selected state. + * + * @param tab The tab that was unselected + * @param ft Unused, always {@code null}. Begin your own transaction by + * calling {@link FragmentActivity#getSupportFragmentManager()}. + */ + void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft); + } + + + + /** + * Display the 'home' element such that it appears as an 'up' affordance. + * e.g. show an arrow to the left indicating the action that will be taken. + * Set this flag if selecting the 'home' button in the action bar to return + * up by a single level in your UI rather than back to the top level or + * front page. + * + * @see #setDisplayOptions(int) + * @see #setDisplayOptions(int, int) + */ + public static final int DISPLAY_HOME_AS_UP = android.app.ActionBar.DISPLAY_HOME_AS_UP; + + /** + * Show the custom view if one has been set. + * + * @see #setCustomView(int) + * @see #setCustomView(View) + * @see #setCustomView(View, LayoutParams) + * @see #setDisplayOptions(int) + * @see #setDisplayOptions(int, int) + */ + public static final int DISPLAY_SHOW_CUSTOM = android.app.ActionBar.DISPLAY_SHOW_CUSTOM; + + /** + * Show 'home' elements in this action bar, leaving more space for other + * navigation elements. This includes logo and icon. + * + * @see #setDisplayOptions(int) + * @see #setDisplayOptions(int, int) + */ + public static final int DISPLAY_SHOW_HOME = android.app.ActionBar.DISPLAY_SHOW_HOME; + + /** + * Show the activity title and subtitle, if present. + * + * @see #setTitle(CharSequence) + * @see #setTitle(int) + * @see #setSubtitle(CharSequence) + * @see #setSubtitle(int) + * @see #setDisplayOptions(int) + * @see #setDisplayOptions(int, int) + */ + public static final int DISPLAY_SHOW_TITLE = android.app.ActionBar.DISPLAY_SHOW_TITLE; + + /** + * Use logo instead of icon if available. This flag will cause appropriate + * navigation modes to use a wider logo in place of the standard icon. + * + * @see #setDisplayOptions(int) + * @see #setDisplayOptions(int, int) + */ + public static final int DISPLAY_USE_LOGO = android.app.ActionBar.DISPLAY_USE_LOGO; + + /** + * List navigation mode. Instead of static title text this mode presents a + * list menu for navigation within the activity. e.g. this might be + * presented to the user as a dropdown list. + */ + public static final int NAVIGATION_MODE_LIST = android.app.ActionBar.NAVIGATION_MODE_LIST; + + /** + * Standard navigation mode. Consists of either a logo or icon and title + * text with an optional subtitle. Clicking any of these elements will + * dispatch onOptionsItemSelected to the host Activity with a MenuItem with + * item ID android.R.id.home. + */ + public static final int NAVIGATION_MODE_STANDARD = android.app.ActionBar.NAVIGATION_MODE_STANDARD; + + /** + * Tab navigation mode. Instead of static title text this mode presents a + * series of tabs for navigation within the activity. + */ + public static final int NAVIGATION_MODE_TABS = android.app.ActionBar.NAVIGATION_MODE_TABS; + + + + /** + * Add a listener that will respond to menu visibility change events. + * + * @param listener The new listener to add + */ + public abstract void addOnMenuVisibilityListener(ActionBar.OnMenuVisibilityListener listener); + + /** + * Add a tab for use in tabbed navigation mode. The tab will be added at the + * end of the list. If this is the first tab to be added it will become the + * selected tab. + * + * @param tab Tab to add + */ + public abstract void addTab(ActionBar.Tab tab); + + /** + * Add a tab for use in tabbed navigation mode. The tab will be added at the + * end of the list. + * + * @param tab Tab to add + * @param setSelected True if the added tab should become the selected tab. + */ + public abstract void addTab(ActionBar.Tab tab, boolean setSelected); + + /** + * Add a tab for use in tabbed navigation mode. The tab will be inserted at + * {@code position}. If this is the first tab to be added it will become the + * selected tab. + * + * @param tab The tab to add + * @param position The new position of the tab + */ + public abstract void addTab(ActionBar.Tab tab, int position); + + /** + * Add a tab for use in tabbed navigation mode. The tab will be insterted at + * {@code position}. + * + * @param tab The tab to add + * @param position The new position of the tab + * @param setSelected True if the added tab should become the selected tab. + */ + public abstract void addTab(ActionBar.Tab tab, int position, boolean setSelected); + + /** + * @return The current custom view. + */ + public abstract View getCustomView(); + + /** + * @return The current set of display options. + */ + public abstract int getDisplayOptions(); + + /** + * Retrieve the current height of the ActionBar. + * + * @return The ActionBar's height + */ + public abstract int getHeight(); + + /** + * Get the number of navigation items present in the current navigation + * mode. + * + * @return Number of navigation items. + */ + public abstract int getNavigationItemCount(); + + /** + * Returns the current navigation mode. The result will be one of: + *
    + *
  • {@link #NAVIGATION_MODE_STANDARD}
  • + *
  • {@link #NAVIGATION_MODE_LIST}
  • + *
  • {@link #NAVIGATION_MODE_TABS}
  • + *
+ * + * @return The current navigation mode. + * @see #setNavigationMode(int) + */ + public abstract int getNavigationMode(); + + /** + * Get the position of the selected navigation item in list or tabbed + * navigation modes. + * + * @return Position of the selected item. + */ + public abstract int getSelectedNavigationIndex(); + + /** + * Returns the currently selected tab if in tabbed navigation mode and there + * is at least one tab present. + * + * @return The currently selected tab or null. + */ + public abstract ActionBar.Tab getSelectedTab(); + + /** + * Returns the current ActionBar subtitle in standard mode. Returns null if + * {@link #getNavigationMode()} would not return + * {@link #NAVIGATION_MODE_STANDARD}. + * + * @return The current ActionBar subtitle or null. + */ + public abstract CharSequence getSubtitle(); + + /** + * Returns the tab at the specified index. + * + * @param index Index value in the range 0-get + * @return Tab at specified index + */ + public abstract ActionBar.Tab getTabAt(int index); + + /** + * Returns the number of tabs currently registered with the action bar. + * + * @return Tab count + */ + public abstract int getTabCount(); + + /** + * Returns the current ActionBar title in standard mode. Returns null if + * {@link #getNavigationMode()} would not return + * {@link #NAVIGATION_MODE_STANDARD}. + * + * @return The current ActionBar title or null. + */ + public abstract CharSequence getTitle(); + + /** + * Hide the ActionBar if it is not currently showing. If the window hosting + * the ActionBar does not have the feature + * {@link android.support.v4.view.Window#FEATURE_ACTION_BAR_OVERLAY} + * it will resize application content to fit the new space available. + */ + public abstract void hide(); + + /** + * @return {@code true} if the ActionBar is showing, {@code false} + * otherwise. + */ + public abstract boolean isShowing(); + + /** + * Create and return a new ActionBar.Tab. This tab will not be included in + * the action bar until it is added. + * + * @return A new Tab + * @see #addTab(Tab) + * @see #addTab(Tab, boolean) + * @see #addTab(Tab, int) + * @see #addTab(Tab, int, boolean) + */ + public abstract ActionBar.Tab newTab(); + + /** + * Remove all tabs from the action bar and deselect the current tab. + */ + public abstract void removeAllTabs(); + + /** + * Remove a menu visibility listener. This listener will no longer receive + * menu visibility change events. + * + * @param listener A listener to remove that was previously added + */ + public abstract void removeOnMenuVisibilityListener(ActionBar.OnMenuVisibilityListener listener); + + /** + * Remove a tab from the action bar. If the removed tab was selected it will + * be deselected and another tab will be selected if present. + * + * @param tab The tab to remove + */ + public abstract void removeTab(ActionBar.Tab tab); + + /** + * Remove a tab from the action bar. If the removed tab was selected it will + * be deselected and another tab will be selected if present. + * + * @param position Position of the tab to remove + */ + public abstract void removeTabAt(int position); + + /** + *

Select the specified tab. If it is not a child of this action bar it + * will be added.

+ * + *

Note: If you want to select by index, use + * {@link #setSelectedNavigationItem(int)}.

+ * + * @param tab Tab to select + */ + public abstract void selectTab(ActionBar.Tab tab); + + /** + * Set the ActionBar's background. + * + * @param d Background drawable + */ + public abstract void setBackgroundDrawable(Drawable d); + + /** + *

Set the action bar into custom navigation mode, supplying a view for + * custom navigation.

+ * + *

Custom navigation views appear between the application icon and any + * action buttons and may use any space available there. Common use cases + * for custom navigation views might include an auto-suggesting address bar + * for a browser or other navigation mechanisms that do not translate well + * to provided navigation modes.

+ * + *

The display option {@link #DISPLAY_SHOW_CUSTOM} must be set for the + * custom view to be displayed.

+ * + * @param resId Resource ID of a layout to inflate into the ActionBar. + * @see #setDisplayOptions(int, int) + */ + public abstract void setCustomView(int resId); + + /** + * Set the action bar into custom navigation mode, supplying a view for + * custom navigation. Custom navigation views appear between the application + * icon and any action buttons and may use any space available there. Common + * use cases for custom navigation views might include an auto-suggesting + * address bar for a browser or other navigation mechanisms that do not + * translate well to provided navigation modes. + * + * @param view Custom navigation view to place in the ActionBar. + */ + public abstract void setCustomView(View view); + + /** + *

Set the action bar into custom navigation mode, supplying a view for + * custom navigation.

+ * + *

Custom navigation views appear between the application icon and any + * action buttons and may use any space available there. Common use cases + * for custom navigation views might include an auto-suggesting address bar + * for a browser or other navigation mechanisms that do not translate well + * to provided navigation modes.

+ * + *

The display option {@link #DISPLAY_SHOW_CUSTOM} must be set for the + * custom view to be displayed.

+ * + * @param view Custom navigation view to place in the ActionBar. + * @param layoutParams How this custom view should layout in the bar. + * @see #setDisplayOptions(int, int) + */ + public abstract void setCustomView(View view, ActionBar.LayoutParams layoutParams); + + /** + *

Set whether home should be displayed as an "up" affordance. Set this + * to true if selecting "home" returns up by a single level in your UI + * rather than back to the top level or front page.

+ * + *

To set several display options at once, see the setDisplayOptions + * methods.

+ * + * @param showHomeAsUp {@code true} to show the user that selecting home + * will return one level up rather than to the top level of the app. + * @see #setDisplayOptions(int) + * @see #setDisplayOptions(int, int) + */ + public abstract void setDisplayHomeAsUpEnabled(boolean showHomeAsUp); + + /** + *

Set selected display options. Only the options specified by mask will + * be changed. To change all display option bits at once, see + * {@link #setDisplayOptions(int)}. + * + *

Example: {@code setDisplayOptions(0, DISPLAY_SHOW_HOME)} will disable + * the {@link #DISPLAY_SHOW_HOME} option. + * {@code setDisplayOptions(DISPLAY_SHOW_HOME, DISPLAY_SHOW_HOME | DISPLAY_USE_LOGO)} + * will enable {@link #DISPLAY_SHOW_HOME} and disable + * {@link #DISPLAY_USE_LOGO}.

+ * + * @param options A combination of the bits defined by the DISPLAY_ + * constants defined in ActionBar. + * @param mask A bit mask declaring which display options should be changed. + */ + public abstract void setDisplayOptions(int options, int mask); + + /** + * Set display options. This changes all display option bits at once. To + * change a limited subset of display options, see + * {@link #setDisplayOptions(int, int)}. + * + * @param options A combination of the bits defined by the DISPLAY_ + * constants defined in ActionBar. + */ + public abstract void setDisplayOptions(int options); + + /** + *

Set whether a custom view should be displayed, if set.

+ * + *

To set several display options at once, see the setDisplayOptions + * methods.

+ * + * @param showCustom {@code true} if the currently set custom view should be + * displayed, {@code false} otherwise. + * @see #setDisplayOptions(int) + * @see #setDisplayOptions(int, int) + */ + public abstract void setDisplayShowCustomEnabled(boolean showCustom); + + /** + *

Set whether to include the application home affordance in the action + * bar. Home is presented as either an activity icon or logo.

+ * + *

To set several display options at once, see the setDisplayOptions + * methods.

+ * + * @param showHome {@code true} to show home, {@code false} otherwise. + * @see #setDisplayOptions(int) + * @see #setDisplayOptions(int, int) + */ + public abstract void setDisplayShowHomeEnabled(boolean showHome); + + /** + *

Set whether an activity title/subtitle should be displayed.

+ * + *

To set several display options at once, see the setDisplayOptions + * methods.

+ * + * @param showTitle {@code true} to display a title/subtitle if present. + * @see #setDisplayOptions(int) + * @see #setDisplayOptions(int, int) + */ + public abstract void setDisplayShowTitleEnabled(boolean showTitle); + + /** + *

Set whether to display the activity logo rather than the activity + * icon. A logo is often a wider, more detailed image.

+ * + *

To set several display options at once, see the setDisplayOptions + * methods.

+ * + * @param useLogo {@code true} to use the activity logo, {@code false} to + * use the activity icon. + * @see #setDisplayOptions(int) + * @see #setDisplayOptions(int, int) + */ + public abstract void setDisplayUseLogoEnabled(boolean useLogo); + + /** + * Set the adapter and navigation callback for list navigation mode. The + * supplied adapter will provide views for the expanded list as well as the + * currently selected item. (These may be displayed differently.) The + * supplied OnNavigationListener will alert the application when the user + * changes the current list selection. + * + * @param adapter An adapter that will provide views both to display the + * current navigation selection and populate views within the dropdown + * navigation menu. + * @param callback An OnNavigationListener that will receive events when the + * user selects a navigation item. + */ + public abstract void setListNavigationCallbacks(SpinnerAdapter adapter, ActionBar.OnNavigationListener callback); + + /** + * Set the current navigation mode. + * + * @param mode The new mode to set. + * @see #NAVIGATION_MODE_STANDARD + * @see #NAVIGATION_MODE_LIST + * @see #NAVIGATION_MODE_TABS + */ + public abstract void setNavigationMode(int mode); + + /** + * Set the selected navigation item in list or tabbed navigation modes. + * + * @param position Position of the item to select. + */ + public abstract void setSelectedNavigationItem(int position); + + /** + * Set the action bar's subtitle. This will only be displayed if + * @link #DISPLAY_SHOW_TITLE} is set. + * + * @param resId Resource ID of subtitle string to set + * @see #setSubtitle(CharSequence) + * @see #setDisplayOptions(int, int) + */ + public abstract void setSubtitle(int resId); + + /** + * Set the action bar's subtitle. This will only be displayed if + * @{link #DISPLAY_SHOW_TITLE} is set. Set to null to disable the subtitle + * entirely. + * + * @param subtitle Subtitle to set + * @see #setSubtitle(int) + * @see #setDisplayOptions(int, int) + */ + public abstract void setSubtitle(CharSequence subtitle); + + /** + * Set the action bar's title. This will only be displayed if + * @{link #DISPLAY_SHOW_TITLE} is set. + * + * @param title Title to set + * @see #setTitle(int) + * @see #setDisplayOptions(int, int) + */ + public abstract void setTitle(CharSequence title); + + /** + * Set the action bar's title. This will only be displayed if + * {@link #DISPLAY_SHOW_TITLE} is set. + * + * @param resId Resource ID of title string to set + * @see #setTitle(CharSequence) + * @see #setDisplayOptions(int, int) + */ + public abstract void setTitle(int resId); + + /** + * Show the ActionBar if it is not currently showing. If the window hosting + * the ActionBar does not have the feature + * {@link android.support.v4.view.Window#FEATURE_ACTION_BAR_OVERLAY} + * it will resize application content to fit the new space available. + */ + public abstract void show(); +} \ No newline at end of file diff --git a/actionbarsherlock/library/src/android/support/v4/app/BackStackRecord.java b/actionbarsherlock/library/src/android/support/v4/app/BackStackRecord.java new file mode 100644 index 000000000..bebd010cb --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/app/BackStackRecord.java @@ -0,0 +1,731 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.app; + +import android.os.Build; +import android.os.Parcel; +import android.os.Parcelable; +import android.text.TextUtils; +import android.util.Log; +import java.io.FileDescriptor; +import java.io.PrintWriter; +import java.util.ArrayList; +import com.actionbarsherlock.R; + +final class BackStackState implements Parcelable { + final int[] mOps; + final int mTransition; + final int mTransitionStyle; + final String mName; + final int mIndex; + final int mBreadCrumbTitleRes; + final CharSequence mBreadCrumbTitleText; + final int mBreadCrumbShortTitleRes; + final CharSequence mBreadCrumbShortTitleText; + + public BackStackState(FragmentManagerImpl fm, BackStackRecord bse) { + int numRemoved = 0; + BackStackRecord.Op op = bse.mHead; + while (op != null) { + if (op.removed != null) numRemoved += op.removed.size(); + op = op.next; + } + mOps = new int[bse.mNumOp*7 + numRemoved]; + + if (!bse.mAddToBackStack) { + throw new IllegalStateException("Not on back stack"); + } + + op = bse.mHead; + int pos = 0; + while (op != null) { + mOps[pos++] = op.cmd; + mOps[pos++] = op.fragment.mIndex; + mOps[pos++] = op.enterAnim; + mOps[pos++] = op.exitAnim; + mOps[pos++] = op.popEnterAnim; + mOps[pos++] = op.popExitAnim; + if (op.removed != null) { + final int N = op.removed.size(); + mOps[pos++] = N; + for (int i=0; i 0) { + op.removed = new ArrayList(N); + for (int i=0; i CREATOR + = new Parcelable.Creator() { + public BackStackState createFromParcel(Parcel in) { + return new BackStackState(in); + } + + public BackStackState[] newArray(int size) { + return new BackStackState[size]; + } + }; +} + +/** + * @hide Entry of an operation on the fragment back stack. + */ +final class BackStackRecord extends FragmentTransaction implements + FragmentManager.BackStackEntry, Runnable { + static final String TAG = "BackStackEntry"; + + private static final boolean IS_HONEYCOMB = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB; + + final FragmentManagerImpl mManager; + + static final int OP_NULL = 0; + static final int OP_ADD = 1; + static final int OP_REPLACE = 2; + static final int OP_REMOVE = 3; + static final int OP_HIDE = 4; + static final int OP_SHOW = 5; + static final int OP_DETACH = 6; + static final int OP_ATTACH = 7; + + static final class Op { + Op next; + Op prev; + int cmd; + Fragment fragment; + int enterAnim; + int exitAnim; + int popEnterAnim; + int popExitAnim; + ArrayList removed; + } + + Op mHead; + Op mTail; + int mNumOp; + int mEnterAnim; + int mExitAnim; + int mPopEnterAnim; + int mPopExitAnim; + int mTransition; + int mTransitionStyle; + boolean mAddToBackStack; + boolean mAllowAddToBackStack = true; + String mName; + boolean mCommitted; + int mIndex; + + int mBreadCrumbTitleRes; + CharSequence mBreadCrumbTitleText; + int mBreadCrumbShortTitleRes; + CharSequence mBreadCrumbShortTitleText; + + public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) { + writer.print(prefix); writer.print("mName="); writer.print(mName); + writer.print(" mIndex="); writer.print(mIndex); + writer.print(" mCommitted="); writer.println(mCommitted); + if (mTransition != FragmentTransaction.TRANSIT_NONE) { + writer.print(prefix); writer.print("mTransition=#"); + writer.print(Integer.toHexString(mTransition)); + writer.print(" mTransitionStyle=#"); + writer.println(Integer.toHexString(mTransitionStyle)); + } + if (mEnterAnim != 0 || mExitAnim !=0) { + writer.print(prefix); writer.print("mEnterAnim=#"); + writer.print(Integer.toHexString(mEnterAnim)); + writer.print(" mExitAnim=#"); + writer.println(Integer.toHexString(mExitAnim)); + } + if (mPopEnterAnim != 0 || mPopExitAnim !=0) { + writer.print(prefix); writer.print("mPopEnterAnim=#"); + writer.print(Integer.toHexString(mPopEnterAnim)); + writer.print(" mPopExitAnim=#"); + writer.println(Integer.toHexString(mPopExitAnim)); + } + if (mBreadCrumbTitleRes != 0 || mBreadCrumbTitleText != null) { + writer.print(prefix); writer.print("mBreadCrumbTitleRes=#"); + writer.print(Integer.toHexString(mBreadCrumbTitleRes)); + writer.print(" mBreadCrumbTitleText="); + writer.println(mBreadCrumbTitleText); + } + if (mBreadCrumbShortTitleRes != 0 || mBreadCrumbShortTitleText != null) { + writer.print(prefix); writer.print("mBreadCrumbShortTitleRes=#"); + writer.print(Integer.toHexString(mBreadCrumbShortTitleRes)); + writer.print(" mBreadCrumbShortTitleText="); + writer.println(mBreadCrumbShortTitleText); + } + + if (mHead != null) { + writer.print(prefix); writer.println("Operations:"); + String innerPrefix = prefix + " "; + Op op = mHead; + int num = 0; + while (op != null) { + writer.print(prefix); writer.print(" Op #"); writer.print(num); + writer.println(":"); + writer.print(innerPrefix); writer.print("cmd="); writer.print(op.cmd); + writer.print(" fragment="); writer.println(op.fragment); + if (op.enterAnim != 0 || op.exitAnim != 0) { + writer.print(prefix); writer.print("enterAnim=#"); + writer.print(Integer.toHexString(op.enterAnim)); + writer.print(" exitAnim=#"); + writer.println(Integer.toHexString(op.exitAnim)); + } + if (op.popEnterAnim != 0 || op.popExitAnim != 0) { + writer.print(prefix); writer.print("popEnterAnim=#"); + writer.print(Integer.toHexString(op.popEnterAnim)); + writer.print(" popExitAnim=#"); + writer.println(Integer.toHexString(op.popExitAnim)); + } + if (op.removed != null && op.removed.size() > 0) { + for (int i=0; i=0; i--) { + Fragment r = op.removed.get(i); + r.mBackStackNesting += amt; + if (FragmentManagerImpl.DEBUG) Log.v(TAG, "Bump nesting of " + + r + " to " + r.mBackStackNesting); + } + } + op = op.next; + } + } + + public int commit() { + return commitInternal(false); + } + + public int commitAllowingStateLoss() { + return commitInternal(true); + } + + int commitInternal(boolean allowStateLoss) { + if (mCommitted) throw new IllegalStateException("commit already called"); + if (FragmentManagerImpl.DEBUG) Log.v(TAG, "Commit: " + this); + mCommitted = true; + if (mAddToBackStack) { + mIndex = mManager.allocBackStackIndex(this); + } else { + mIndex = -1; + } + mManager.enqueueAction(this, allowStateLoss); + return mIndex; + } + + public void run() { + if (FragmentManagerImpl.DEBUG) Log.v(TAG, "Run: " + this); + + if (mAddToBackStack) { + if (mIndex < 0) { + throw new IllegalStateException("addToBackStack() called after commit()"); + } + } + + bumpBackStackNesting(1); + + Op op = mHead; + while (op != null) { + switch (op.cmd) { + case OP_ADD: { + Fragment f = op.fragment; + f.mNextAnim = op.enterAnim; + mManager.addFragment(f, false); + } break; + case OP_REPLACE: { + Fragment f = op.fragment; + if (mManager.mAdded != null) { + for (int i=0; i= 0) { + mManager.freeBackStackIndex(mIndex); + mIndex = -1; + } + } + + public String getName() { + return mName; + } + + public int getTransition() { + return mTransition; + } + + public int getTransitionStyle() { + return mTransitionStyle; + } + + public boolean isEmpty() { + return mNumOp == 0; + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/app/DialogFragment.java b/actionbarsherlock/library/src/android/support/v4/app/DialogFragment.java new file mode 100644 index 000000000..952659d11 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/app/DialogFragment.java @@ -0,0 +1,396 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.app; + +import android.app.Dialog; +import android.content.Context; +import android.content.DialogInterface; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; + +/** + * Static library support version of the framework's {@link android.app.DialogFragment}. + * Used to write apps that run on platforms prior to Android 3.0. When running + * on Android 3.0 or above, this implementation is still used; it does not try + * to switch to the framework's implementation. See the framework SDK + * documentation for a class overview. + */ +public class DialogFragment extends Fragment + implements DialogInterface.OnCancelListener, DialogInterface.OnDismissListener { + + /** + * Style for {@link #setStyle(int, int)}: a basic, + * normal dialog. + */ + public static final int STYLE_NORMAL = 0; + + /** + * Style for {@link #setStyle(int, int)}: don't include + * a title area. + */ + public static final int STYLE_NO_TITLE = 1; + + /** + * Style for {@link #setStyle(int, int)}: don't draw + * any frame at all; the view hierarchy returned by {@link #onCreateView} + * is entirely responsible for drawing the dialog. + */ + public static final int STYLE_NO_FRAME = 2; + + /** + * Style for {@link #setStyle(int, int)}: like + * {@link #STYLE_NO_FRAME}, but also disables all input to the dialog. + * The user can not touch it, and its window will not receive input focus. + */ + public static final int STYLE_NO_INPUT = 3; + + private static final String SAVED_DIALOG_STATE_TAG = "android:savedDialogState"; + private static final String SAVED_STYLE = "android:style"; + private static final String SAVED_THEME = "android:theme"; + private static final String SAVED_CANCELABLE = "android:cancelable"; + private static final String SAVED_SHOWS_DIALOG = "android:showsDialog"; + private static final String SAVED_BACK_STACK_ID = "android:backStackId"; + + int mStyle = STYLE_NORMAL; + int mTheme = 0; + boolean mCancelable = true; + boolean mShowsDialog = false; + int mBackStackId = -1; + + Dialog mDialog; + boolean mDestroyed; + boolean mRemoved; + + public DialogFragment() { + } + + /** + * Call to customize the basic appearance and behavior of the + * fragment's dialog. This can be used for some common dialog behaviors, + * taking care of selecting flags, theme, and other options for you. The + * same effect can be achieve by manually setting Dialog and Window + * attributes yourself. Calling this after the fragment's Dialog is + * created will have no effect. + * + * @param style Selects a standard style: may be {@link #STYLE_NORMAL}, + * {@link #STYLE_NO_TITLE}, {@link #STYLE_NO_FRAME}, or + * {@link #STYLE_NO_INPUT}. + * @param theme Optional custom theme. If 0, an appropriate theme (based + * on the style) will be selected for you. + */ + public void setStyle(int style, int theme) { + mStyle = style; + if (mStyle == STYLE_NO_FRAME || mStyle == STYLE_NO_INPUT) { + mTheme = android.R.style.Theme_Panel; + } + if (theme != 0) { + mTheme = theme; + } + } + + /** + * Display the dialog, adding the fragment to the given FragmentManager. This + * is a convenience for explicitly creating a transaction, adding the + * fragment to it with the given tag, and committing it. This does + * not add the transaction to the back stack. When the fragment + * is dismissed, a new transaction will be executed to remove it from + * the activity. + * @param manager The FragmentManager this fragment will be added to. + * @param tag The tag for this fragment, as per + * {@link FragmentTransaction#add(Fragment, String) FragmentTransaction.add}. + */ + public void show(FragmentManager manager, String tag) { + setShowsDialog(true); + FragmentTransaction ft = manager.beginTransaction(); + ft.add(this, tag); + ft.commit(); + } + + /** + * Display the dialog, adding the fragment using an existing transaction + * and then committing the transaction. + * @param transaction An existing transaction in which to add the fragment. + * @param tag The tag for this fragment, as per + * {@link FragmentTransaction#add(Fragment, String) FragmentTransaction.add}. + * @return Returns the identifier of the committed transaction, as per + * {@link FragmentTransaction#commit() FragmentTransaction.commit()}. + */ + public int show(FragmentTransaction transaction, String tag) { + setShowsDialog(true); + transaction.add(this, tag); + mRemoved = false; + mBackStackId = transaction.commit(); + return mBackStackId; + } + + /** + * Dismiss the fragment and its dialog. If the fragment was added to the + * back stack, all back stack state up to and including this entry will + * be popped. Otherwise, a new transaction will be committed to remove + * the fragment. + */ + public void dismiss() { + dismissInternal(false); + } + + void dismissInternal(boolean allowStateLoss) { + if (mDialog != null) { + mDialog.dismiss(); + mDialog = null; + } + mRemoved = true; + if (mBackStackId >= 0) { + getFragmentManager().popBackStack(mBackStackId, + FragmentManager.POP_BACK_STACK_INCLUSIVE); + mBackStackId = -1; + } else { + FragmentTransaction ft = getFragmentManager().beginTransaction(); + ft.remove(this); + if (allowStateLoss) { + ft.commitAllowingStateLoss(); + } else { + ft.commit(); + } + } + } + + public Dialog getDialog() { + return mDialog; + } + + public int getTheme() { + return mTheme; + } + + /** + * Control whether the shown Dialog is cancelable. Use this instead of + * directly calling {@link Dialog#setCancelable(boolean) + * Dialog.setCancelable(boolean)}, because DialogFragment needs to change + * its behavior based on this. + * + * @param cancelable If true, the dialog is cancelable. The default + * is true. + */ + public void setCancelable(boolean cancelable) { + mCancelable = cancelable; + if (mDialog != null) mDialog.setCancelable(cancelable); + } + + /** + * Return the current value of {@link #setCancelable(boolean)}. + */ + public boolean isCancelable() { + return mCancelable; + } + + /** + * Controls whether this fragment should be shown in a dialog. If not + * set, no Dialog will be created in {@link #onActivityCreated(Bundle)}, + * and the fragment's view hierarchy will thus not be added to it. This + * allows you to instead use it as a normal fragment (embedded inside of + * its activity). + * + *

This is normally set for you based on whether the fragment is + * associated with a container view ID passed to + * {@link FragmentTransaction#add(int, Fragment) FragmentTransaction.add(int, Fragment)}. + * If the fragment was added with a container, setShowsDialog will be + * initialized to false; otherwise, it will be true. + * + * @param showsDialog If true, the fragment will be displayed in a Dialog. + * If false, no Dialog will be created and the fragment's view hierarchly + * left undisturbed. + */ + public void setShowsDialog(boolean showsDialog) { + mShowsDialog = showsDialog; + } + + /** + * Return the current value of {@link #setShowsDialog(boolean)}. + */ + public boolean getShowsDialog() { + return mShowsDialog; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + //SEE: http://stackoverflow.com/questions/5637894/dialogfragments-with-devices-api-level-11/7560686#7560686 + //mShowsDialog = mContainerId == 0; + + if (savedInstanceState != null) { + mStyle = savedInstanceState.getInt(SAVED_STYLE, STYLE_NORMAL); + mTheme = savedInstanceState.getInt(SAVED_THEME, 0); + mCancelable = savedInstanceState.getBoolean(SAVED_CANCELABLE, true); + mShowsDialog = savedInstanceState.getBoolean(SAVED_SHOWS_DIALOG, mShowsDialog); + mBackStackId = savedInstanceState.getInt(SAVED_BACK_STACK_ID, -1); + } + + } + + /** @hide */ + @Override + public LayoutInflater getLayoutInflater(Bundle savedInstanceState) { + if (!mShowsDialog) { + return super.getLayoutInflater(savedInstanceState); + } + + mDialog = onCreateDialog(savedInstanceState); + mDestroyed = false; + switch (mStyle) { + case STYLE_NO_INPUT: + mDialog.getWindow().addFlags( + WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | + WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE); + // fall through... + case STYLE_NO_FRAME: + case STYLE_NO_TITLE: + mDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + } + return (LayoutInflater)mDialog.getContext().getSystemService( + Context.LAYOUT_INFLATER_SERVICE); + } + + /** + * Override to build your own custom Dialog container. This is typically + * used to show an AlertDialog instead of a generic Dialog; when doing so, + * {@link #onCreateView(LayoutInflater, ViewGroup, Bundle)} does not need + * to be implemented since the AlertDialog takes care of its own content. + * + *

This method will be called after {@link #onCreate(Bundle)} and + * before {@link #onCreateView(LayoutInflater, ViewGroup, Bundle)}. The + * default implementation simply instantiates and returns a {@link Dialog} + * class. + * + *

Note: DialogFragment own the {@link Dialog#setOnCancelListener + * Dialog.setOnCancelListener} and {@link Dialog#setOnDismissListener + * Dialog.setOnDismissListener} callbacks. You must not set them yourself. + * To find out about these events, override {@link #onCancel(DialogInterface)} + * and {@link #onDismiss(DialogInterface)}.

+ * + * @param savedInstanceState The last saved instance state of the Fragment, + * or null if this is a freshly created Fragment. + * + * @return Return a new Dialog instance to be displayed by the Fragment. + */ + public Dialog onCreateDialog(Bundle savedInstanceState) { + return new Dialog(getActivity(), getTheme()); + } + + public void onCancel(DialogInterface dialog) { + } + + public void onDismiss(DialogInterface dialog) { + if (!mRemoved) { + // Note: we need to use allowStateLoss, because the dialog + // dispatches this asynchronously so we can receive the call + // after the activity is paused. Worst case, when the user comes + // back to the activity they see the dialog again. + dismissInternal(true); + } + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + if (!mShowsDialog) { + return; + } + + View view = getView(); + if (view != null) { + if (view.getParent() != null) { + throw new IllegalStateException("DialogFragment can not be attached to a container view"); + } + mDialog.setContentView(view); + } + mDialog.setOwnerActivity(getActivity()); + mDialog.setCancelable(mCancelable); + mDialog.setOnCancelListener(this); + mDialog.setOnDismissListener(this); + if (savedInstanceState != null) { + Bundle dialogState = savedInstanceState.getBundle(SAVED_DIALOG_STATE_TAG); + if (dialogState != null) { + mDialog.onRestoreInstanceState(dialogState); + } + } + } + + @Override + public void onStart() { + super.onStart(); + if (mDialog != null) { + mRemoved = false; + mDialog.show(); + } + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + if (mDialog != null) { + Bundle dialogState = mDialog.onSaveInstanceState(); + if (dialogState != null) { + outState.putBundle(SAVED_DIALOG_STATE_TAG, dialogState); + } + } + if (mStyle != STYLE_NORMAL) { + outState.putInt(SAVED_STYLE, mStyle); + } + if (mTheme != 0) { + outState.putInt(SAVED_THEME, mTheme); + } + if (!mCancelable) { + outState.putBoolean(SAVED_CANCELABLE, mCancelable); + } + if (mShowsDialog) { + outState.putBoolean(SAVED_SHOWS_DIALOG, mShowsDialog); + } + if (mBackStackId != -1) { + outState.putInt(SAVED_BACK_STACK_ID, mBackStackId); + } + } + + @Override + public void onStop() { + super.onStop(); + if (mDialog != null) { + mDialog.hide(); + } + } + + /** + * Remove dialog. + */ + @Override + public void onDestroyView() { + super.onDestroyView(); + mDestroyed = true; + if (mDialog != null) { + // Set removed here because this dismissal is just to hide + // the dialog -- we don't want this to cause the fragment to + // actually be removed. + mRemoved = true; + mDialog.dismiss(); + mDialog = null; + } + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/app/Fragment.java b/actionbarsherlock/library/src/android/support/v4/app/Fragment.java new file mode 100644 index 000000000..4199a0915 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/app/Fragment.java @@ -0,0 +1,1348 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.app; + +import android.app.Activity; +import android.content.ComponentCallbacks; +import android.content.Context; +import android.content.Intent; +import android.content.res.Configuration; +import android.content.res.Resources; +import android.os.Bundle; +import android.os.Parcel; +import android.os.Parcelable; +import android.support.v4.util.DebugUtils; +import android.support.v4.view.Menu; +import android.support.v4.view.MenuItem; +import android.util.AttributeSet; +import android.util.SparseArray; +import android.view.ContextMenu; +import android.view.LayoutInflater; +import android.view.MenuInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.ContextMenu.ContextMenuInfo; +import android.view.View.OnCreateContextMenuListener; +import android.view.animation.Animation; +import java.io.FileDescriptor; +import java.io.PrintWriter; +import java.util.HashMap; + +final class FragmentState implements Parcelable { + final String mClassName; + final int mIndex; + final boolean mFromLayout; + final int mFragmentId; + final int mContainerId; + final String mTag; + final boolean mRetainInstance; + final boolean mDetached; + final Bundle mArguments; + + Bundle mSavedFragmentState; + + Fragment mInstance; + + public FragmentState(Fragment frag) { + mClassName = frag.getClass().getName(); + mIndex = frag.mIndex; + mFromLayout = frag.mFromLayout; + mFragmentId = frag.mFragmentId; + mContainerId = frag.mContainerId; + mTag = frag.mTag; + mRetainInstance = frag.mRetainInstance; + mDetached = frag.mDetached; + mArguments = frag.mArguments; + } + + public FragmentState(Parcel in) { + mClassName = in.readString(); + mIndex = in.readInt(); + mFromLayout = in.readInt() != 0; + mFragmentId = in.readInt(); + mContainerId = in.readInt(); + mTag = in.readString(); + mRetainInstance = in.readInt() != 0; + mDetached = in.readInt() != 0; + mArguments = in.readBundle(); + mSavedFragmentState = in.readBundle(); + } + + public Fragment instantiate(SupportActivity activity) { + if (mInstance != null) { + return mInstance; + } + + if (mArguments != null) { + mArguments.setClassLoader(activity.getClassLoader()); + } + + mInstance = Fragment.instantiate(activity.asActivity(), mClassName, mArguments); + + if (mSavedFragmentState != null) { + mSavedFragmentState.setClassLoader(activity.getClassLoader()); + mInstance.mSavedFragmentState = mSavedFragmentState; + } + mInstance.setIndex(mIndex); + mInstance.mFromLayout = mFromLayout; + mInstance.mRestored = true; + mInstance.mFragmentId = mFragmentId; + mInstance.mContainerId = mContainerId; + mInstance.mTag = mTag; + mInstance.mRetainInstance = mRetainInstance; + mInstance.mDetached = mDetached; + mInstance.mFragmentManager = activity.getInternalCallbacks().getFragments(); + + return mInstance; + } + + public int describeContents() { + return 0; + } + + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(mClassName); + dest.writeInt(mIndex); + dest.writeInt(mFromLayout ? 1 : 0); + dest.writeInt(mFragmentId); + dest.writeInt(mContainerId); + dest.writeString(mTag); + dest.writeInt(mRetainInstance ? 1 : 0); + dest.writeInt(mDetached ? 1 : 0); + dest.writeBundle(mArguments); + dest.writeBundle(mSavedFragmentState); + } + + public static final Parcelable.Creator CREATOR + = new Parcelable.Creator() { + public FragmentState createFromParcel(Parcel in) { + return new FragmentState(in); + } + + public FragmentState[] newArray(int size) { + return new FragmentState[size]; + } + }; +} + +/** + * Static library support version of the framework's {@link android.app.Fragment}. + * Used to write apps that run on platforms prior to Android 3.0. When running + * on Android 3.0 or above, this implementation is still used; it does not try + * to switch to the framework's implementation. See the framework SDK + * documentation for a class overview. + */ +public class Fragment implements ComponentCallbacks, OnCreateContextMenuListener { + private static final HashMap> sClassMap = + new HashMap>(); + + static final int INITIALIZING = 0; // Not yet created. + static final int CREATED = 1; // Created. + static final int ACTIVITY_CREATED = 2; // The activity has finished its creation. + static final int STOPPED = 3; // Fully created, not started. + static final int STARTED = 4; // Created and started, not resumed. + static final int RESUMED = 5; // Created started and resumed. + + int mState = INITIALIZING; + + // Non-null if the fragment's view hierarchy is currently animating away, + // meaning we need to wait a bit on completely destroying it. This is the + // view that is animating. + View mAnimatingAway; + + // If mAnimatingAway != null, this is the state we should move to once the + // animation is done. + int mStateAfterAnimating; + + // When instantiated from saved state, this is the saved state. + Bundle mSavedFragmentState; + SparseArray mSavedViewState; + + // Index into active fragment array. + int mIndex = -1; + + // Internal unique name for this fragment; + String mWho; + + // Construction arguments; + Bundle mArguments; + + // Target fragment. + Fragment mTarget; + + // For use when retaining a fragment: this is the index of the last mTarget. + int mTargetIndex = -1; + + // Target request code. + int mTargetRequestCode; + + // True if the fragment is in the list of added fragments. + boolean mAdded; + + // If set this fragment is being removed from its activity. + boolean mRemoving; + + // True if the fragment is in the resumed state. + boolean mResumed; + + // Set to true if this fragment was instantiated from a layout file. + boolean mFromLayout; + + // Set to true when the view has actually been inflated in its layout. + boolean mInLayout; + + // True if this fragment has been restored from previously saved state. + boolean mRestored; + + // Number of active back stack entries this fragment is in. + int mBackStackNesting; + + // The fragment manager we are associated with. Set as soon as the + // fragment is used in a transaction; cleared after it has been removed + // from all transactions. + FragmentManager mFragmentManager; + + // Activity this fragment is attached to. + SupportActivity mActivity; + + // The optional identifier for this fragment -- either the container ID if it + // was dynamically added to the view hierarchy, or the ID supplied in + // layout. + int mFragmentId; + + // When a fragment is being dynamically added to the view hierarchy, this + // is the identifier of the parent container it is being added to. + int mContainerId; + + // The optional named tag for this fragment -- usually used to find + // fragments that are not part of the layout. + String mTag; + + // Set to true when the app has requested that this fragment be hidden + // from the user. + boolean mHidden; + + // Set to true when the app has requested that this fragment be deactivated. + boolean mDetached; + + // If set this fragment would like its instance retained across + // configuration changes. + boolean mRetainInstance; + + // If set this fragment is being retained across the current config change. + boolean mRetaining; + + // If set this fragment has menu items to contribute. + boolean mHasMenu; + + // Set to true to allow the fragment's menu to be shown. + boolean mMenuVisible = true; + + // Used to verify that subclasses call through to super class. + boolean mCalled; + + // If app has requested a specific animation, this is the one to use. + int mNextAnim; + + // The parent container of the fragment after dynamically added to UI. + ViewGroup mContainer; + + // The View generated for this fragment. + View mView; + + // The real inner view that will save/restore state. + View mInnerView; + + LoaderManagerImpl mLoaderManager; + boolean mLoadersStarted; + boolean mCheckedForLoaderManager; + + /** + * State information that has been retrieved from a fragment instance + * through {@link FragmentManager#saveFragmentInstanceState(Fragment) + * FragmentManager.saveFragmentInstanceState}. + */ + public static class SavedState implements Parcelable { + final Bundle mState; + + SavedState(Bundle state) { + mState = state; + } + + SavedState(Parcel in, ClassLoader loader) { + mState = in.readBundle(); + if (loader != null && mState != null) { + mState.setClassLoader(loader); + } + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeBundle(mState); + } + + public static final Parcelable.Creator CREATOR + = new Parcelable.Creator() { + public SavedState createFromParcel(Parcel in) { + return new SavedState(in, null); + } + + public SavedState[] newArray(int size) { + return new SavedState[size]; + } + }; + } + + /** + * Thrown by {@link Fragment#instantiate(Context, String, Bundle)} when + * there is an instantiation failure. + */ + static public class InstantiationException extends RuntimeException { + private static final long serialVersionUID = 8423238441973733190L; + + public InstantiationException(String msg, Exception cause) { + super(msg, cause); + } + } + + /** + * Default constructor. Every fragment must have an + * empty constructor, so it can be instantiated when restoring its + * activity's state. It is strongly recommended that subclasses do not + * have other constructors with parameters, since these constructors + * will not be called when the fragment is re-instantiated; instead, + * arguments can be supplied by the caller with {@link #setArguments} + * and later retrieved by the Fragment with {@link #getArguments}. + * + *

Applications should generally not implement a constructor. The + * first place application code an run where the fragment is ready to + * be used is in {@link #onAttach(Activity)}, the point where the fragment + * is actually associated with its activity. Some applications may also + * want to implement {@link #onInflate} to retrieve attributes from a + * layout resource, though should take care here because this happens for + * the fragment is attached to its activity. + */ + public Fragment() { + } + + /** + * Like {@link #instantiate(Context, String, Bundle)} but with a null + * argument Bundle. + */ + public static Fragment instantiate(Context context, String fname) { + return instantiate(context, fname, null); + } + + /** + * Create a new instance of a Fragment with the given class name. This is + * the same as calling its empty constructor. + * + * @param context The calling context being used to instantiate the fragment. + * This is currently just used to get its ClassLoader. + * @param fname The class name of the fragment to instantiate. + * @param args Bundle of arguments to supply to the fragment, which it + * can retrieve with {@link #getArguments()}. May be null. + * @return Returns a new fragment instance. + * @throws InstantiationException If there is a failure in instantiating + * the given fragment class. This is a runtime exception; it is not + * normally expected to happen. + */ + public static Fragment instantiate(Context context, String fname, Bundle args) { + try { + Class clazz = sClassMap.get(fname); + if (clazz == null) { + // Class not found in the cache, see if it's real, and try to add it + clazz = context.getClassLoader().loadClass(fname); + sClassMap.put(fname, clazz); + } + Fragment f = (Fragment)clazz.newInstance(); + if (args != null) { + args.setClassLoader(f.getClass().getClassLoader()); + f.mArguments = args; + } + return f; + } catch (ClassNotFoundException e) { + throw new InstantiationException("Unable to instantiate fragment " + fname + + ": make sure class name exists, is public, and has an" + + " empty constructor that is public", e); + } catch (java.lang.InstantiationException e) { + throw new InstantiationException("Unable to instantiate fragment " + fname + + ": make sure class name exists, is public, and has an" + + " empty constructor that is public", e); + } catch (IllegalAccessException e) { + throw new InstantiationException("Unable to instantiate fragment " + fname + + ": make sure class name exists, is public, and has an" + + " empty constructor that is public", e); + } + } + + final void restoreViewState() { + if (mSavedViewState != null) { + mInnerView.restoreHierarchyState(mSavedViewState); + mSavedViewState = null; + } + } + + final void setIndex(int index) { + mIndex = index; + mWho = "android:fragment:" + mIndex; + } + + final boolean isInBackStack() { + return mBackStackNesting > 0; + } + + /** + * Subclasses can not override equals(). + */ + @Override final public boolean equals(Object o) { + return super.equals(o); + } + + /** + * Subclasses can not override hashCode(). + */ + @Override final public int hashCode() { + return super.hashCode(); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(128); + DebugUtils.buildShortClassTag(this, sb); + if (mIndex >= 0) { + sb.append(" #"); + sb.append(mIndex); + } + if (mFragmentId != 0) { + sb.append(" id=0x"); + sb.append(Integer.toHexString(mFragmentId)); + } + if (mTag != null) { + sb.append(" "); + sb.append(mTag); + } + sb.append('}'); + return sb.toString(); + } + + /** + * Return the identifier this fragment is known by. This is either + * the android:id value supplied in a layout or the container view ID + * supplied when adding the fragment. + */ + final public int getId() { + return mFragmentId; + } + + /** + * Get the tag name of the fragment, if specified. + */ + final public String getTag() { + return mTag; + } + + /** + * Supply the construction arguments for this fragment. This can only + * be called before the fragment has been attached to its activity; that + * is, you should call it immediately after constructing the fragment. The + * arguments supplied here will be retained across fragment destroy and + * creation. + */ + public void setArguments(Bundle args) { + if (mIndex >= 0) { + throw new IllegalStateException("Fragment already active"); + } + mArguments = args; + } + + /** + * Return the arguments supplied when the fragment was instantiated, + * if any. + */ + final public Bundle getArguments() { + return mArguments; + } + + /** + * Set the initial saved state that this Fragment should restore itself + * from when first being constructed, as returned by + * {@link FragmentManager#saveFragmentInstanceState(Fragment) + * FragmentManager.saveFragmentInstanceState}. + * + * @param state The state the fragment should be restored from. + */ + public void setInitialSavedState(SavedState state) { + if (mIndex >= 0) { + throw new IllegalStateException("Fragment already active"); + } + mSavedFragmentState = state != null && state.mState != null + ? state.mState : null; + } + + /** + * Optional target for this fragment. This may be used, for example, + * if this fragment is being started by another, and when done wants to + * give a result back to the first. The target set here is retained + * across instances via {@link FragmentManager#putFragment + * FragmentManager.putFragment()}. + * + * @param fragment The fragment that is the target of this one. + * @param requestCode Optional request code, for convenience if you + * are going to call back with {@link #onActivityResult(int, int, Intent)}. + */ + public void setTargetFragment(Fragment fragment, int requestCode) { + mTarget = fragment; + mTargetRequestCode = requestCode; + } + + /** + * Return the target fragment set by {@link #setTargetFragment}. + */ + final public Fragment getTargetFragment() { + return mTarget; + } + + /** + * Return the target request code set by {@link #setTargetFragment}. + */ + final public int getTargetRequestCode() { + return mTargetRequestCode; + } + + /** + * Return the Activity this fragment is currently associated with. + * + * @see #getSupportActivity() + */ + final public Activity getActivity() { + return (mActivity != null) ? mActivity.asActivity() : null; + } + + /** + * Return the SupportActivity interface for the activity in which this + * fragment is currently associated. + * + * @see #getActivity() + */ + final public SupportActivity getSupportActivity() { + return mActivity; + } + + /** + * Return getActivity().getResources(). + */ + final public Resources getResources() { + if (mActivity == null) { + throw new IllegalStateException("Fragment " + this + " not attached to Activity"); + } + return mActivity.getResources(); + } + + /** + * Return a localized, styled CharSequence from the application's package's + * default string table. + * + * @param resId Resource id for the CharSequence text + */ + public final CharSequence getText(int resId) { + return getResources().getText(resId); + } + + /** + * Return a localized string from the application's package's + * default string table. + * + * @param resId Resource id for the string + */ + public final String getString(int resId) { + return getResources().getString(resId); + } + + /** + * Return a localized formatted string from the application's package's + * default string table, substituting the format arguments as defined in + * {@link java.util.Formatter} and {@link java.lang.String#format}. + * + * @param resId Resource id for the format string + * @param formatArgs The format arguments that will be used for substitution. + */ + + public final String getString(int resId, Object... formatArgs) { + return getResources().getString(resId, formatArgs); + } + + /** + * Return the FragmentManager for interacting with fragments associated + * with this fragment's activity. Note that this will be non-null slightly + * before {@link #getActivity()}, during the time from when the fragment is + * placed in a {@link FragmentTransaction} until it is committed and + * attached to its activity. + */ + final public FragmentManager getFragmentManager() { + return mFragmentManager; + } + + /** + * A clone of {@link #getFragmentManager()} to maintain naming conventions + * throughout the compatibility library. + */ + final public FragmentManager getSupportFragmentManager() { + return mFragmentManager; + } + + /** + * Return true if the fragment is currently added to its activity. + */ + final public boolean isAdded() { + return mActivity != null && mAdded; + } + + /** + * Return true if the fragment has been explicitly detached from the UI. + * That is, {@link FragmentTransaction#detach(Fragment) + * FragmentTransaction.detach(Fragment)} has been used on it. + */ + final public boolean isDetached() { + return mDetached; + } + + /** + * Return true if this fragment is currently being removed from its + * activity. This is not whether its activity is finishing, but + * rather whether it is in the process of being removed from its activity. + */ + final public boolean isRemoving() { + return mRemoving; + } + + /** + * Return true if the layout is included as part of an activity view + * hierarchy via the <fragment> tag. This will always be true when + * fragments are created through the <fragment> tag, except + * in the case where an old fragment is restored from a previous state and + * it does not appear in the layout of the current state. + */ + final public boolean isInLayout() { + return mInLayout; + } + + /** + * Return true if the fragment is in the resumed state. This is true + * for the duration of {@link #onResume()} and {@link #onPause()} as well. + */ + final public boolean isResumed() { + return mResumed; + } + + /** + * Return true if the fragment is currently visible to the user. This means + * it: (1) has been added, (2) has its view attached to the window, and + * (3) is not hidden. + */ + final public boolean isVisible() { + return isAdded() && !isHidden() && mView != null + && mView.getWindowToken() != null && mView.getVisibility() == View.VISIBLE; + } + + /** + * Return true if the fragment has been hidden. By default fragments + * are shown. You can find out about changes to this state with + * {@link #onHiddenChanged}. Note that the hidden state is orthogonal + * to other states -- that is, to be visible to the user, a fragment + * must be both started and not hidden. + */ + final public boolean isHidden() { + return mHidden; + } + + /** + * Called when the hidden state (as returned by {@link #isHidden()} of + * the fragment has changed. Fragments start out not hidden; this will + * be called whenever the fragment changes state from that. + * @param hidden True if the fragment is now hidden, false if it is not + * visible. + */ + public void onHiddenChanged(boolean hidden) { + } + + /** + * Control whether a fragment instance is retained across Activity + * re-creation (such as from a configuration change). This can only + * be used with fragments not in the back stack. If set, the fragment + * lifecycle will be slightly different when an activity is recreated: + *

    + *
  • {@link #onDestroy()} will not be called (but {@link #onDetach()} still + * will be, because the fragment is being detached from its current activity). + *
  • {@link #onCreate(Bundle)} will not be called since the fragment + * is not being re-created. + *
  • {@link #onAttach(Activity)} and {@link #onActivityCreated(Bundle)} will + * still be called. + *
+ */ + public void setRetainInstance(boolean retain) { + mRetainInstance = retain; + } + + final public boolean getRetainInstance() { + return mRetainInstance; + } + + /** + * Report that this fragment would like to participate in populating + * the options menu by receiving a call to {@link #onCreateOptionsMenu} + * and related methods. + * + * @param hasMenu If true, the fragment has menu items to contribute. + */ + public void setHasOptionsMenu(boolean hasMenu) { + if (mHasMenu != hasMenu) { + mHasMenu = hasMenu; + if (isAdded() && !isHidden()) { + mActivity.invalidateOptionsMenu(); + } + } + } + + /** + * Set a hint for whether this fragment's menu should be visible. This + * is useful if you know that a fragment has been placed in your view + * hierarchy so that the user can not currently seen it, so any menu items + * it has should also not be shown. + * + * @param menuVisible The default is true, meaning the fragment's menu will + * be shown as usual. If false, the user will not see the menu. + */ + public void setMenuVisibility(boolean menuVisible) { + if (mMenuVisible != menuVisible) { + mMenuVisible = menuVisible; + if (mHasMenu && isAdded() && !isHidden()) { + mActivity.invalidateOptionsMenu(); + } + } + } + + /** + * Return the LoaderManager for this fragment, creating it if needed. + */ + public LoaderManager getLoaderManager() { + if (mLoaderManager != null) { + return mLoaderManager; + } + if (mActivity == null) { + throw new IllegalStateException("Fragment " + this + " not attached to Activity"); + } + mCheckedForLoaderManager = true; + mLoaderManager = mActivity.getInternalCallbacks().getLoaderManager(mIndex, mLoadersStarted, true); + return mLoaderManager; + } + + /** + * Call {@link Activity#startActivity(Intent)} on the fragment's + * containing Activity. + */ + public void startActivity(Intent intent) { + if (mActivity == null) { + throw new IllegalStateException("Fragment " + this + " not attached to Activity"); + } + mActivity.startActivityFromFragment(this, intent, -1); + } + + /** + * Call {@link Activity#startActivityForResult(Intent, int)} on the fragment's + * containing Activity. + */ + public void startActivityForResult(Intent intent, int requestCode) { + if (mActivity == null) { + throw new IllegalStateException("Fragment " + this + " not attached to Activity"); + } + mActivity.startActivityFromFragment(this, intent, requestCode); + } + + /** + * Receive the result from a previous call to + * {@link #startActivityForResult(Intent, int)}. This follows the + * related Activity API as described there in + * {@link Activity#onActivityResult(int, int, Intent)}. + * + * @param requestCode The integer request code originally supplied to + * startActivityForResult(), allowing you to identify who this + * result came from. + * @param resultCode The integer result code returned by the child activity + * through its setResult(). + * @param data An Intent, which can return result data to the caller + * (various data can be attached to Intent "extras"). + */ + public void onActivityResult(int requestCode, int resultCode, Intent data) { + } + + /** + * @hide Hack so that DialogFragment can make its Dialog before creating + * its views, and the view construction can use the dialog's context for + * inflation. Maybe this should become a public API. Note sure. + */ + public LayoutInflater getLayoutInflater(Bundle savedInstanceState) { + return mActivity.getLayoutInflater(); + } + + /** + * Called when a fragment is being created as part of a view layout + * inflation, typically from setting the content view of an activity. This + * may be called immediately after the fragment is created from a + * tag in a layout file. Note this is before the fragment's + * {@link #onAttach(Activity)} has been called; all you should do here is + * parse the attributes and save them away. + * + *

This is called every time the fragment is inflated, even if it is + * being inflated into a new instance with saved state. It typically makes + * sense to re-parse the parameters each time, to allow them to change with + * different configurations.

+ * + *

Here is a typical implementation of a fragment that can take parameters + * both through attributes supplied here as well from {@link #getArguments()}:

+ * + * {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentArguments.java + * fragment} + * + *

Note that parsing the XML attributes uses a "styleable" resource. The + * declaration for the styleable used here is:

+ * + * {@sample development/samples/ApiDemos/res/values/attrs.xml fragment_arguments} + * + *

The fragment can then be declared within its activity's content layout + * through a tag like this:

+ * + * {@sample development/samples/ApiDemos/res/layout/fragment_arguments.xml from_attributes} + * + *

This fragment can also be created dynamically from arguments given + * at runtime in the arguments Bundle; here is an example of doing so at + * creation of the containing activity:

+ * + * {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentArguments.java + * create} + * + * @param activity The Activity that is inflating this fragment. + * @param attrs The attributes at the tag where the fragment is + * being created. + * @param savedInstanceState If the fragment is being re-created from + * a previous saved state, this is the state. + */ + public void onInflate(SupportActivity activity, AttributeSet attrs, Bundle savedInstanceState) { + mCalled = true; + } + + /** + * Called when a fragment is first attached to its activity. + * {@link #onCreate(Bundle)} will be called after this. + */ + public void onAttach(SupportActivity activity) { + mCalled = true; + } + + /** + * Called when a fragment loads an animation. + */ + public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) { + return null; + } + + /** + * Called to do initial creation of a fragment. This is called after + * {@link #onAttach(Activity)} and before + * {@link #onCreateView(LayoutInflater, ViewGroup, Bundle)}. + * + *

Note that this can be called while the fragment's activity is + * still in the process of being created. As such, you can not rely + * on things like the activity's content view hierarchy being initialized + * at this point. If you want to do work once the activity itself is + * created, see {@link #onActivityCreated(Bundle)}. + * + * @param savedInstanceState If the fragment is being re-created from + * a previous saved state, this is the state. + */ + public void onCreate(Bundle savedInstanceState) { + mCalled = true; + } + + /** + * Called to have the fragment instantiate its user interface view. + * This is optional, and non-graphical fragments can return null (which + * is the default implementation). This will be called between + * {@link #onCreate(Bundle)} and {@link #onActivityCreated(Bundle)}. + * + *

If you return a View from here, you will later be called in + * {@link #onDestroyView} when the view is being released. + * + * @param inflater The LayoutInflater object that can be used to inflate + * any views in the fragment, + * @param container If non-null, this is the parent view that the fragment's + * UI should be attached to. The fragment should not add the view itself, + * but this can be used to generate the LayoutParams of the view. + * @param savedInstanceState If non-null, this fragment is being re-constructed + * from a previous saved state as given here. + * + * @return Return the View for the fragment's UI, or null. + */ + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + return null; + } + + /** + * Called immediately after {@link #onCreateView(LayoutInflater, ViewGroup, Bundle)} + * has returned, but before any saved state has been restored in to the view. + * This gives subclasses a chance to initialize themselves once + * they know their view hierarchy has been completely created. The fragment's + * view hierarchy is not however attached to its parent at this point. + * @param view The View returned by {@link #onCreateView(LayoutInflater, ViewGroup, Bundle)}. + * @param savedInstanceState If non-null, this fragment is being re-constructed + * from a previous saved state as given here. + */ + public void onViewCreated(View view, Bundle savedInstanceState) { + } + + /** + * Get the root view for the fragment's layout (the one returned by {@link #onCreateView}), + * if provided. + * + * @return The fragment's root view, or null if it has no layout. + */ + public View getView() { + return mView; + } + + /** + * Called when the fragment's activity has been created and this + * fragment's view hierarchy instantiated. It can be used to do final + * initialization once these pieces are in place, such as retrieving + * views or restoring state. It is also useful for fragments that use + * {@link #setRetainInstance(boolean)} to retain their instance, + * as this callback tells the fragment when it is fully associated with + * the new activity instance. This is called after {@link #onCreateView} + * and before {@link #onStart()}. + * + * @param savedInstanceState If the fragment is being re-created from + * a previous saved state, this is the state. + */ + public void onActivityCreated(Bundle savedInstanceState) { + mCalled = true; + } + + /** + * Called when the Fragment is visible to the user. This is generally + * tied to {@link Activity#onStart() Activity.onStart} of the containing + * Activity's lifecycle. + */ + public void onStart() { + mCalled = true; + + if (!mLoadersStarted) { + mLoadersStarted = true; + if (!mCheckedForLoaderManager) { + mCheckedForLoaderManager = true; + mLoaderManager = mActivity.getInternalCallbacks().getLoaderManager(mIndex, mLoadersStarted, false); + } + if (mLoaderManager != null) { + mLoaderManager.doStart(); + } + } + } + + /** + * Called when the fragment is visible to the user and actively running. + * This is generally + * tied to {@link Activity#onResume() Activity.onResume} of the containing + * Activity's lifecycle. + */ + public void onResume() { + mCalled = true; + } + + /** + * Called to ask the fragment to save its current dynamic state, so it + * can later be reconstructed in a new instance of its process is + * restarted. If a new instance of the fragment later needs to be + * created, the data you place in the Bundle here will be available + * in the Bundle given to {@link #onCreate(Bundle)}, + * {@link #onCreateView(LayoutInflater, ViewGroup, Bundle)}, and + * {@link #onActivityCreated(Bundle)}. + * + *

This corresponds to {@link Activity#onSaveInstanceState(Bundle) + * Activity.onSaveInstanceState(Bundle)} and most of the discussion there + * applies here as well. Note however: this method may be called + * at any time before {@link #onDestroy()}. There are many situations + * where a fragment may be mostly torn down (such as when placed on the + * back stack with no UI showing), but its state will not be saved until + * its owning activity actually needs to save its state. + * + * @param outState Bundle in which to place your saved state. + */ + public void onSaveInstanceState(Bundle outState) { + } + + public void onConfigurationChanged(Configuration newConfig) { + mCalled = true; + } + + /** + * Called when the Fragment is no longer resumed. This is generally + * tied to {@link Activity#onPause() Activity.onPause} of the containing + * Activity's lifecycle. + */ + public void onPause() { + mCalled = true; + } + + /** + * Called when the Fragment is no longer started. This is generally + * tied to {@link Activity#onStop() Activity.onStop} of the containing + * Activity's lifecycle. + */ + public void onStop() { + mCalled = true; + } + + public void onLowMemory() { + mCalled = true; + } + + /** + * Called when the view previously created by {@link #onCreateView} has + * been detached from the fragment. The next time the fragment needs + * to be displayed, a new view will be created. This is called + * after {@link #onStop()} and before {@link #onDestroy()}. It is called + * regardless of whether {@link #onCreateView} returned a + * non-null view. Internally it is called after the view's state has + * been saved but before it has been removed from its parent. + */ + public void onDestroyView() { + mCalled = true; + } + + /** + * Called when the fragment is no longer in use. This is called + * after {@link #onStop()} and before {@link #onDetach()}. + */ + public void onDestroy() { + mCalled = true; + //Log.v("foo", "onDestroy: mCheckedForLoaderManager=" + mCheckedForLoaderManager + // + " mLoaderManager=" + mLoaderManager); + if (!mCheckedForLoaderManager) { + mCheckedForLoaderManager = true; + mLoaderManager = mActivity.getInternalCallbacks().getLoaderManager(mIndex, mLoadersStarted, false); + } + if (mLoaderManager != null) { + mLoaderManager.doDestroy(); + } + } + + /** + * Called by the fragment manager once this fragment has been removed, + * so that we don't have any left-over state if the application decides + * to re-use the instance. This only clears state that the framework + * internally manages, not things the application sets. + */ + void initState() { + mIndex = -1; + mWho = null; + mAdded = false; + mRemoving = false; + mResumed = false; + mFromLayout = false; + mInLayout = false; + mRestored = false; + mBackStackNesting = 0; + mFragmentManager = null; + mActivity = null; + mFragmentId = 0; + mContainerId = 0; + mTag = null; + mHidden = false; + mDetached = false; + mRetaining = false; + mLoaderManager = null; + mLoadersStarted = false; + mCheckedForLoaderManager = false; + } + + /** + * Called when the fragment is no longer attached to its activity. This + * is called after {@link #onDestroy()}. + */ + public void onDetach() { + mCalled = true; + } + + /** + * Initialize the contents of the Activity's standard options menu. You + * should place your menu items in to menu. For this method + * to be called, you must have first called {@link #setHasOptionsMenu}. See + * {@link Activity#onCreateOptionsMenu(Menu) Activity.onCreateOptionsMenu} + * for more information. + * + * @param menu The options menu in which you place your items. + * + * @see #setHasOptionsMenu + * @see #onPrepareOptionsMenu + * @see #onOptionsItemSelected + */ + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + } + + /** + * Prepare the Screen's standard options menu to be displayed. This is + * called right before the menu is shown, every time it is shown. You can + * use this method to efficiently enable/disable items or otherwise + * dynamically modify the contents. See + * {@link Activity#onPrepareOptionsMenu(Menu) Activity.onPrepareOptionsMenu} + * for more information. + * + * @param menu The options menu as last shown or first initialized by + * onCreateOptionsMenu(). + * + * @see #setHasOptionsMenu + * @see #onCreateOptionsMenu + */ + public void onPrepareOptionsMenu(Menu menu) { + } + + /** + * Called when this fragment's option menu items are no longer being + * included in the overall options menu. Receiving this call means that + * the menu needed to be rebuilt, but this fragment's items were not + * included in the newly built menu (its {@link #onCreateOptionsMenu(Menu, MenuInflater)} + * was not called). + */ + public void onDestroyOptionsMenu() { + } + + /** + * This hook is called whenever an item in your options menu is selected. + * The default implementation simply returns false to have the normal + * processing happen (calling the item's Runnable or sending a message to + * its Handler as appropriate). You can use this method for any items + * for which you would like to do processing without those other + * facilities. + * + *

Derived classes should call through to the base class for it to + * perform the default menu handling. + * + * @param item The menu item that was selected. + * + * @return boolean Return false to allow normal menu processing to + * proceed, true to consume it here. + * + * @see #onCreateOptionsMenu + */ + public boolean onOptionsItemSelected(MenuItem item) { + return false; + } + + /** + * This hook is called whenever the options menu is being closed (either by the user canceling + * the menu with the back/menu button, or when an item is selected). + * + * @param menu The options menu as last shown or first initialized by + * onCreateOptionsMenu(). + */ + public void onOptionsMenuClosed(Menu menu) { + } + + /** + * Called when a context menu for the {@code view} is about to be shown. + * Unlike {@link #onCreateOptionsMenu}, this will be called every + * time the context menu is about to be shown and should be populated for + * the view (or item inside the view for {@link AdapterView} subclasses, + * this can be found in the {@code menuInfo})). + *

+ * Use {@link #onContextItemSelected(android.view.MenuItem)} to know when an + * item has been selected. + *

+ * The default implementation calls up to + * {@link Activity#onCreateContextMenu Activity.onCreateContextMenu}, though + * you can not call this implementation if you don't want that behavior. + *

+ * It is not safe to hold onto the context menu after this method returns. + * {@inheritDoc} + */ + public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { + getActivity().onCreateContextMenu(menu, v, menuInfo); + } + + /** + * Registers a context menu to be shown for the given view (multiple views + * can show the context menu). This method will set the + * {@link OnCreateContextMenuListener} on the view to this fragment, so + * {@link #onCreateContextMenu(ContextMenu, View, ContextMenuInfo)} will be + * called when it is time to show the context menu. + * + * @see #unregisterForContextMenu(View) + * @param view The view that should show a context menu. + */ + public void registerForContextMenu(View view) { + view.setOnCreateContextMenuListener(this); + } + + /** + * Prevents a context menu to be shown for the given view. This method will + * remove the {@link OnCreateContextMenuListener} on the view. + * + * @see #registerForContextMenu(View) + * @param view The view that should stop showing a context menu. + */ + public void unregisterForContextMenu(View view) { + view.setOnCreateContextMenuListener(null); + } + + /** + * This hook is called whenever an item in a context menu is selected. The + * default implementation simply returns false to have the normal processing + * happen (calling the item's Runnable or sending a message to its Handler + * as appropriate). You can use this method for any items for which you + * would like to do processing without those other facilities. + *

+ * Use {@link MenuItem#getMenuInfo()} to get extra information set by the + * View that added this menu item. + *

+ * Derived classes should call through to the base class for it to perform + * the default menu handling. + * + * @param item The context menu item that was selected. + * @return boolean Return false to allow normal context menu processing to + * proceed, true to consume it here. + */ + public boolean onContextItemSelected(MenuItem item) { + return false; + } + + /** + * Print the Fragments's state into the given stream. + * + * @param prefix Text to print at the front of each line. + * @param fd The raw file descriptor that the dump is being sent to. + * @param writer The PrintWriter to which you should dump your state. This will be + * closed for you after you return. + * @param args additional arguments to the dump request. + */ + public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) { + writer.print(prefix); writer.print("mFragmentId=#"); + writer.print(Integer.toHexString(mFragmentId)); + writer.print(" mContainerId#="); + writer.print(Integer.toHexString(mContainerId)); + writer.print(" mTag="); writer.println(mTag); + writer.print(prefix); writer.print("mState="); writer.print(mState); + writer.print(" mIndex="); writer.print(mIndex); + writer.print(" mWho="); writer.print(mWho); + writer.print(" mBackStackNesting="); writer.println(mBackStackNesting); + writer.print(prefix); writer.print("mAdded="); writer.print(mAdded); + writer.print(" mRemoving="); writer.print(mRemoving); + writer.print(" mResumed="); writer.print(mResumed); + writer.print(" mFromLayout="); writer.print(mFromLayout); + writer.print(" mInLayout="); writer.println(mInLayout); + writer.print(prefix); writer.print("mHidden="); writer.print(mHidden); + writer.print(" mDetached="); writer.print(mDetached); + writer.print(" mMenuVisible="); writer.print(mMenuVisible); + writer.print(" mHasMenu="); writer.println(mHasMenu); + writer.print(prefix); writer.print("mRetainInstance="); writer.print(mRetainInstance); + writer.print(" mRetaining="); writer.println(mRetaining); + if (mFragmentManager != null) { + writer.print(prefix); writer.print("mFragmentManager="); + writer.println(mFragmentManager); + } + if (mActivity != null) { + writer.print(prefix); writer.print("mActivity="); + writer.println(mActivity); + } + if (mArguments != null) { + writer.print(prefix); writer.print("mArguments="); writer.println(mArguments); + } + if (mSavedFragmentState != null) { + writer.print(prefix); writer.print("mSavedFragmentState="); + writer.println(mSavedFragmentState); + } + if (mSavedViewState != null) { + writer.print(prefix); writer.print("mSavedViewState="); + writer.println(mSavedViewState); + } + if (mTarget != null) { + writer.print(prefix); writer.print("mTarget="); writer.print(mTarget); + writer.print(" mTargetRequestCode="); + writer.println(mTargetRequestCode); + } + if (mNextAnim != 0) { + writer.print(prefix); writer.print("mNextAnim="); writer.println(mNextAnim); + } + if (mContainer != null) { + writer.print(prefix); writer.print("mContainer="); writer.println(mContainer); + } + if (mView != null) { + writer.print(prefix); writer.print("mView="); writer.println(mView); + } + if (mInnerView != null) { + writer.print(prefix); writer.print("mInnerView="); writer.println(mView); + } + if (mAnimatingAway != null) { + writer.print(prefix); writer.print("mAnimatingAway="); writer.println(mAnimatingAway); + writer.print(prefix); writer.print("mStateAfterAnimating="); + writer.println(mStateAfterAnimating); + } + if (mLoaderManager != null) { + writer.print(prefix); writer.println("Loader Manager:"); + mLoaderManager.dump(prefix + " ", fd, writer, args); + } + } + + void performStart() { + onStart(); + if (mLoaderManager != null) { + mLoaderManager.doReportStart(); + } + } + + void performStop() { + onStop(); + } + + void performReallyStop() { + if (mLoadersStarted) { + mLoadersStarted = false; + if (!mCheckedForLoaderManager) { + mCheckedForLoaderManager = true; + mLoaderManager = mActivity.getInternalCallbacks().getLoaderManager(mIndex, mLoadersStarted, false); + } + if (mLoaderManager != null) { + if (!mActivity.getInternalCallbacks().getRetaining()) { + mLoaderManager.doStop(); + } else { + mLoaderManager.doRetain(); + } + } + } + } + + void performDestroyView() { + onDestroyView(); + if (mLoaderManager != null) { + mLoaderManager.doReportNextStart(); + } + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/app/FragmentActivity.java b/actionbarsherlock/library/src/android/support/v4/app/FragmentActivity.java new file mode 100644 index 000000000..816d74cf1 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/app/FragmentActivity.java @@ -0,0 +1,1237 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * Copyright (C) 2011 Jake Wharton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.app; + +import java.io.FileDescriptor; +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.HashMap; +import com.actionbarsherlock.R; +import com.actionbarsherlock.internal.app.ActionBarWrapper; +import com.actionbarsherlock.internal.app.ActionBarImpl; +import com.actionbarsherlock.internal.view.menu.MenuBuilder; +import com.actionbarsherlock.internal.view.menu.MenuInflaterWrapper; +import com.actionbarsherlock.internal.view.menu.MenuItemImpl; +import com.actionbarsherlock.internal.view.menu.MenuItemWrapper; +import com.actionbarsherlock.internal.view.menu.MenuWrapper; +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.content.res.Configuration; +import android.content.res.TypedArray; +import android.content.res.Resources.Theme; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.os.Parcelable; +import android.support.v4.view.ActionMode; +import android.support.v4.view.Menu; +import android.support.v4.view.MenuInflater; +import android.support.v4.view.MenuItem; +import android.support.v4.view.Window; +import android.util.AttributeSet; +import android.util.Log; +import android.view.KeyEvent; +import android.view.View; +import android.view.ViewGroup.LayoutParams; +import android.widget.FrameLayout; + +/** + * Base class for activities that want to use the support-based ActionBar, + * Fragment, and Loader APIs. + * + *

Known limitations:

+ *
    + *
  • When using the <fragment> tag, this implementation can not + * use the parent view's ID as the new fragment's ID. You must explicitly + * specify an ID (or tag) in the <fragment>.

    + *
  • Prior to Honeycomb (3.0), an activity's state was saved before pausing. + * Fragments are a significant amount of new state, and dynamic enough that one + * often wants them to change between pausing and stopping. These classes + * throw an exception if you try to change the fragment state after it has been + * saved, to avoid accidental loss of UI state. However this is too restrictive + * prior to Honeycomb, where the state is saved before pausing. To address this, + * when running on platforms prior to Honeycomb an exception will not be thrown + * if you change fragments between the state save and the activity being stopped. + * This means that is some cases if the activity is restored from its last saved + * state, this may be a snapshot slightly before what the user last saw.

    + *
+ */ +public class FragmentActivity extends Activity implements SupportActivity { + private static final String TAG = "FragmentActivity"; + private static final boolean DEBUG = false; + + private static final String FRAGMENTS_TAG = "android:support:fragments"; + + static final boolean IS_HONEYCOMB = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB; + + static final int MSG_REALLY_STOPPED = 1; + static final int MSG_RESUME_PENDING = 2; + + private static final int WINDOW_FLAG_ACTION_BAR = 1 << Window.FEATURE_ACTION_BAR; + private static final int WINDOW_FLAG_ACTION_BAR_ITEM_TEXT = 1 << Window.FEATURE_ACTION_BAR_ITEM_TEXT; + private static final int WINDOW_FLAG_ACTION_BAR_OVERLAY = 1 << Window.FEATURE_ACTION_BAR_OVERLAY; + private static final int WINDOW_FLAG_ACTION_MODE_OVERLAY = 1 << Window.FEATURE_ACTION_MODE_OVERLAY; + private static final int WINDOW_FLAG_INDETERMINANTE_PROGRESS = 1 << Window.FEATURE_INDETERMINATE_PROGRESS; + + final SupportActivity.InternalCallbacks mInternalCallbacks = new SupportActivity.InternalCallbacks() { + @Override + void invalidateSupportFragmentIndex(int index) { + FragmentActivity.this.invalidateSupportFragmentIndex(index); + } + + @Override + LoaderManagerImpl getLoaderManager(int index, boolean started, boolean create) { + return FragmentActivity.this.getLoaderManager(index, started, create); + } + + @Override + Handler getHandler() { + return mHandler; + } + + @Override + FragmentManagerImpl getFragments() { + return mFragments; + } + + @Override + void ensureSupportActionBarAttached() { + FragmentActivity.this.ensureSupportActionBarAttached(); + } + + @Override + boolean getRetaining() { + return mRetaining; + } + }; + + final Handler mHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case MSG_REALLY_STOPPED: + if (mStopped) { + doReallyStop(false); + } + break; + case MSG_RESUME_PENDING: + mFragments.dispatchResume(); + mFragments.execPendingActions(); + break; + default: + super.handleMessage(msg); + } + } + }; + final FragmentManagerImpl mFragments = new FragmentManagerImpl(); + + ActionBar mActionBar; + boolean mIsActionBarImplAttached; + long mWindowFlags = 0; + + final MenuBuilder mSupportMenu; + final MenuBuilder.Callback mSupportMenuCallback = new MenuBuilder.Callback() { + @Override + public boolean onMenuItemSelected(MenuBuilder menu, MenuItem item) { + return FragmentActivity.this.onMenuItemSelected(Window.FEATURE_OPTIONS_PANEL, item); + } + }; + + boolean mCreated; + boolean mResumed; + boolean mStopped; + boolean mReallyStopped; + boolean mRetaining; + + boolean mOptionsMenuInvalidated; + boolean mOptionsMenuCreateResult; + + boolean mCheckedForLoaderManager; + boolean mLoadersStarted; + HCSparseArray mAllLoaderManagers; + LoaderManagerImpl mLoaderManager; + + static final class NonConfigurationInstances { + Object activity; + Object custom; + HashMap children; + ArrayList fragments; + HCSparseArray loaders; + } + + static class FragmentTag { + public static final int[] Fragment = { + 0x01010003, 0x010100d0, 0x010100d1 + }; + public static final int Fragment_id = 1; + public static final int Fragment_name = 0; + public static final int Fragment_tag = 2; + } + + + + public FragmentActivity() { + if (IS_HONEYCOMB) { + mActionBar = ActionBarWrapper.createFor(this); + mSupportMenu = null; //Everything should be done natively + } else { + mSupportMenu = new MenuBuilder(this); + mSupportMenu.setCallback(mSupportMenuCallback); + } + } + + @Override + public SupportActivity.InternalCallbacks getInternalCallbacks() { + return mInternalCallbacks; + } + + @Override + public Activity asActivity() { + return this; + } + + protected void ensureSupportActionBarAttached() { + if (IS_HONEYCOMB || mIsActionBarImplAttached) { + return; + } + if (!isChild()) { + if ((mWindowFlags & WINDOW_FLAG_ACTION_BAR) == WINDOW_FLAG_ACTION_BAR) { + if ((mWindowFlags & WINDOW_FLAG_ACTION_BAR_OVERLAY) == WINDOW_FLAG_ACTION_BAR_OVERLAY) { + super.setContentView(R.layout.abs__screen_action_bar_overlay); + } else { + super.setContentView(R.layout.abs__screen_action_bar); + } + + mActionBar = new ActionBarImpl(this); + ((ActionBarImpl)mActionBar).init(); + + final boolean textEnabled = ((mWindowFlags & WINDOW_FLAG_ACTION_BAR_ITEM_TEXT) == WINDOW_FLAG_ACTION_BAR_ITEM_TEXT); + mSupportMenu.setShowsActionItemText(textEnabled); + + if ((mWindowFlags & WINDOW_FLAG_INDETERMINANTE_PROGRESS) == WINDOW_FLAG_INDETERMINANTE_PROGRESS) { + ((ActionBarImpl)mActionBar).setProgressBarIndeterminateVisibility(false); + } + + //TODO set other flags + } else { + if ((mWindowFlags & WINDOW_FLAG_INDETERMINANTE_PROGRESS) == WINDOW_FLAG_INDETERMINANTE_PROGRESS) { + super.requestWindowFeature((int)Window.FEATURE_INDETERMINATE_PROGRESS); + } + super.setContentView(R.layout.abs__screen_simple); + } + } + + invalidateOptionsMenu(); + mIsActionBarImplAttached = true; + } + + // ------------------------------------------------------------------------ + // HOOKS INTO ACTIVITY + // ------------------------------------------------------------------------ + + /** + * Enable extended window features. + * + * @param featureId The desired feature as defined in + * {@link android.support.v4.view.Window}. + * @return Returns {@code true} if the requested feature is supported and + * now enabled. + */ + @Override + public boolean requestWindowFeature(long featureId) { + if (!IS_HONEYCOMB) { + switch ((int)featureId) { + case (int)Window.FEATURE_ACTION_BAR: + case (int)Window.FEATURE_ACTION_BAR_ITEM_TEXT: + case (int)Window.FEATURE_ACTION_BAR_OVERLAY: + case (int)Window.FEATURE_ACTION_MODE_OVERLAY: + case (int)Window.FEATURE_INDETERMINATE_PROGRESS: + mWindowFlags |= (1 << featureId); + return true; + } + } + return super.requestWindowFeature((int)featureId); + } + + @Override + public android.view.MenuInflater getMenuInflater() { + if (IS_HONEYCOMB) { + if (DEBUG) Log.d(TAG, "getMenuInflater(): Wrapping native inflater."); + + //Wrap the native inflater so it can unwrap the native menu first + return new MenuInflaterWrapper(this, super.getMenuInflater()); + } + + if (DEBUG) Log.d(TAG, "getMenuInflater(): Returning support inflater."); + + //Use our custom menu inflater + return new MenuInflater(this, super.getMenuInflater()); + } + + @Override + public void setContentView(int layoutResId) { + ensureSupportActionBarAttached(); + if (IS_HONEYCOMB || isChild()) { + super.setContentView(layoutResId); + } else { + FrameLayout contentView = (FrameLayout)findViewById(R.id.abs__content); + contentView.removeAllViews(); + getLayoutInflater().inflate(layoutResId, contentView, true); + } + } + + @Override + public void setContentView(View view, LayoutParams params) { + ensureSupportActionBarAttached(); + if (IS_HONEYCOMB || isChild()) { + super.setContentView(view, params); + } else { + FrameLayout contentView = (FrameLayout)findViewById(R.id.abs__content); + contentView.removeAllViews(); + contentView.addView(view, params); + } + } + + @Override + public void setContentView(View view) { + ensureSupportActionBarAttached(); + if (IS_HONEYCOMB || isChild()) { + super.setContentView(view); + } else { + FrameLayout contentView = (FrameLayout)findViewById(R.id.abs__content); + contentView.removeAllViews(); + contentView.addView(view); + } + } + + @Override + public void setTitle(CharSequence title) { + if (IS_HONEYCOMB || (getSupportActionBar() == null)) { + super.setTitle(title); + } else { + getSupportActionBar().setTitle(title); + } + } + + @Override + public void setTitle(int titleId) { + if (IS_HONEYCOMB || (getSupportActionBar() == null)) { + super.setTitle(titleId); + } else { + getSupportActionBar().setTitle(titleId); + } + } + + /** + * Dispatch incoming result to the correct fragment. + */ + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + int index = requestCode>>16; + if (index != 0) { + index--; + if (mFragments.mActive == null || index < 0 || index >= mFragments.mActive.size()) { + Log.w(TAG, "Activity result fragment index out of range: 0x" + + Integer.toHexString(requestCode)); + return; + } + Fragment frag = mFragments.mActive.get(index); + if (frag == null) { + Log.w(TAG, "Activity result no fragment exists for index: 0x" + + Integer.toHexString(requestCode)); + } else { + frag.onActivityResult(requestCode&0xffff, resultCode, data); + } + return; + } + + super.onActivityResult(requestCode, resultCode, data); + } + + @Override + protected void onApplyThemeResource(Theme theme, int resid, boolean first) { + TypedArray attrs = theme.obtainStyledAttributes(resid, R.styleable.SherlockTheme); + + final boolean actionBar = attrs.getBoolean(R.styleable.SherlockTheme_windowActionBar, false); + mWindowFlags |= actionBar ? WINDOW_FLAG_ACTION_BAR : 0; + + final boolean actionModeOverlay = attrs.getBoolean(R.styleable.SherlockTheme_windowActionModeOverlay, false); + mWindowFlags |= actionModeOverlay ? WINDOW_FLAG_ACTION_MODE_OVERLAY : 0; + + attrs.recycle(); + super.onApplyThemeResource(theme, resid, first); + } + + /** + * Take care of popping the fragment back stack or finishing the activity + * as appropriate. + */ + @Override + public void onBackPressed() { + if (!mFragments.popBackStackImmediate()) { + finish(); + } + } + + /** + * Dispatch configuration change to all fragments. + */ + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + mFragments.dispatchConfigurationChanged(newConfig); + } + + /** + * Perform initialization of all fragments and loaders. + */ + @Override + protected void onCreate(Bundle savedInstanceState) { + mFragments.attachActivity(this); + // Old versions of the platform didn't do this! + if (getLayoutInflater().getFactory() == null) { + getLayoutInflater().setFactory(this); + } + + super.onCreate(savedInstanceState); + + NonConfigurationInstances nc = (NonConfigurationInstances) + getLastNonConfigurationInstance(); + if (nc != null) { + mAllLoaderManagers = nc.loaders; + } + if (savedInstanceState != null) { + Parcelable p = savedInstanceState.getParcelable(FRAGMENTS_TAG); + mFragments.restoreAllState(p, nc != null ? nc.fragments : null); + } + mFragments.dispatchCreate(); + } + + /** + *

Initialize the contents of the Activity's standard options menu. You + * should place your menu items in to menu.

+ * + *

The default implementation populates the menu with standard system + * menu items. These are placed in the {@link Menu.CATEGORY_SYSTEM} group + * so that they will be correctly ordered with application-defined menu + * items. Deriving classes should always call through to the base + * implementation.

+ * + *

You can safely hold on to menu (and any items created from it), + * making modifications to it as desired, until the next time + * {@code onCreateOptionsMenu()} is called.

+ * + *

When you add items to the menu, you can implement the Activity's + * {@link #onOptionsItemSelected(MenuItem)} method to handle them + * there.

+ * + * @param menu The options menu in which you place your items. + * @return You must return true for the menu to be displayed; if you return + * false it will not be shown. + */ + @Override + public boolean onCreateOptionsMenu(Menu menu) { + if (DEBUG) Log.d(TAG, "onCreateOptionsMenu(Menu): Returning " + menu.hasVisibleItems()); + return menu.hasVisibleItems(); + } + + @Override + public final boolean onCreateOptionsMenu(android.view.Menu menu) { + // Prior to Honeycomb, the framework can't invalidate the options + // menu, so we must always say we have one in case the app later + // invalidates it and needs to have it shown. + boolean result = true; + + if (IS_HONEYCOMB) { + if (DEBUG) Log.d(TAG, "onCreateOptionsMenu(android.view.Menu): Calling support method with wrapped native menu."); + MenuWrapper wrapped = new MenuWrapper(menu); + result = onCreateOptionsMenu(wrapped); + result |= mFragments.dispatchCreateOptionsMenu(wrapped, getMenuInflater()); + } + + if (DEBUG) Log.d(TAG, "onCreateOptionsMenu(android.view.Menu): Returning " + result); + return result; + } + + /** + * Add support for inflating the <fragment> tag. + */ + @Override + public View onCreateView(String name, Context context, AttributeSet attrs) { + if (!"fragment".equals(name)) { + return super.onCreateView(name, context, attrs); + } + + String fname = attrs.getAttributeValue(null, "class"); + TypedArray a = context.obtainStyledAttributes(attrs, FragmentTag.Fragment); + if (fname == null) { + fname = a.getString(FragmentTag.Fragment_name); + } + int id = a.getResourceId(FragmentTag.Fragment_id, View.NO_ID); + String tag = a.getString(FragmentTag.Fragment_tag); + a.recycle(); + + View parent = null; // NOTE: no way to get parent pre-Honeycomb. + int containerId = parent != null ? parent.getId() : 0; + if (containerId == View.NO_ID && id == View.NO_ID && tag == null) { + throw new IllegalArgumentException(attrs.getPositionDescription() + + ": Must specify unique android:id, android:tag, or have a parent with an id for " + fname); + } + + // If we restored from a previous state, we may already have + // instantiated this fragment from the state and should use + // that instance instead of making a new one. + Fragment fragment = id != View.NO_ID ? mFragments.findFragmentById(id) : null; + if (fragment == null && tag != null) { + fragment = mFragments.findFragmentByTag(tag); + } + if (fragment == null && containerId != View.NO_ID) { + fragment = mFragments.findFragmentById(containerId); + } + + if (FragmentManagerImpl.DEBUG) Log.v(TAG, "onCreateView: id=0x" + + Integer.toHexString(id) + " fname=" + fname + + " existing=" + fragment); + if (fragment == null) { + fragment = Fragment.instantiate(this, fname); + fragment.mFromLayout = true; + fragment.mFragmentId = id != 0 ? id : containerId; + fragment.mContainerId = containerId; + fragment.mTag = tag; + fragment.mInLayout = true; + fragment.mFragmentManager = mFragments; + fragment.onInflate(this, attrs, fragment.mSavedFragmentState); + mFragments.addFragment(fragment, true); + + } else if (fragment.mInLayout) { + // A fragment already exists and it is not one we restored from + // previous state. + throw new IllegalArgumentException(attrs.getPositionDescription() + + ": Duplicate id 0x" + Integer.toHexString(id) + + ", tag " + tag + ", or parent id 0x" + Integer.toHexString(containerId) + + " with another fragment for " + fname); + } else { + // This fragment was retained from a previous instance; get it + // going now. + fragment.mInLayout = true; + // If this fragment is newly instantiated (either right now, or + // from last saved state), then give it the attributes to + // initialize itself. + if (!fragment.mRetaining) { + fragment.onInflate(this, attrs, fragment.mSavedFragmentState); + } + mFragments.moveToState(fragment); + } + + if (fragment.mView == null) { + throw new IllegalStateException("Fragment " + fname + + " did not create a view."); + } + if (id != 0) { + fragment.mView.setId(id); + } + if (fragment.mView.getTag() == null) { + fragment.mView.setTag(tag); + } + return fragment.mView; + } + + @Override + public void invalidateOptionsMenu() { + if (DEBUG) Log.d(TAG, "supportInvalidateOptionsMenu(): Invalidating menu."); + + if (IS_HONEYCOMB) { + HoneycombInvalidateOptionsMenu.invoke(this); + } else { + mSupportMenu.clear(); + + mOptionsMenuCreateResult = onCreateOptionsMenu(mSupportMenu); + mOptionsMenuCreateResult |= mFragments.dispatchCreateOptionsMenu(mSupportMenu, getMenuInflater()); + + if (getSupportActionBar() != null) { + if (onPrepareOptionsMenu(mSupportMenu)) { + mFragments.dispatchPrepareOptionsMenu(mSupportMenu); + } + + //Since we now know we are using a custom action bar, perform the + //inflation callback to allow it to display any items it wants. + ((ActionBarImpl)mActionBar).onMenuInflated(mSupportMenu); + } + + // Whoops, older platform... we'll use a hack, to manually rebuild + // the options menu the next time it is prepared. + mOptionsMenuInvalidated = true; + } + } + + private static final class HoneycombInvalidateOptionsMenu { + static void invoke(Activity activity) { + activity.getWindow().invalidatePanelMenu(Window.FEATURE_OPTIONS_PANEL); + } + } + + /** + * Destroy all fragments and loaders. + */ + @Override + protected void onDestroy() { + super.onDestroy(); + + doReallyStop(false); + + mFragments.dispatchDestroy(); + if (mLoaderManager != null) { + mLoaderManager.doDestroy(); + } + } + + /** + * Take care of calling onBackPressed() for pre-Eclair platforms. + */ + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (android.os.Build.VERSION.SDK_INT < 5 /* ECLAIR */ + && keyCode == KeyEvent.KEYCODE_BACK + && event.getRepeatCount() == 0) { + // Take care of calling this method on earlier versions of + // the platform where it doesn't exist. + onBackPressed(); + return true; + } + + return super.onKeyDown(keyCode, event); + } + + /** + * Dispatch onLowMemory() to all fragments. + */ + @Override + public void onLowMemory() { + super.onLowMemory(); + mFragments.dispatchLowMemory(); + } + + /** + * Dispatch context and options menu to fragments. + */ + @Override + public final boolean onMenuItemSelected(int featureId, android.view.MenuItem item) { + if (super.onMenuItemSelected(featureId, item)) { + return true; + } + + switch (featureId) { + case Window.FEATURE_OPTIONS_PANEL: + return mFragments.dispatchOptionsItemSelected(new MenuItemWrapper(item)); + + case Window.FEATURE_CONTEXT_MENU: + return mFragments.dispatchContextItemSelected(new MenuItemWrapper(item)); + + default: + return false; + } + } + + @Override + public boolean onMenuItemSelected(int featureId, MenuItem item) { + if (onOptionsItemSelected(item)) { + return true; + } + + switch (featureId) { + case Window.FEATURE_OPTIONS_PANEL: + return mFragments.dispatchOptionsItemSelected(item); + + case Window.FEATURE_CONTEXT_MENU: + return mFragments.dispatchContextItemSelected(item); + + default: + return false; + } + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + return super.onOptionsItemSelected(item); + } + + @Override + public final boolean onOptionsItemSelected(android.view.MenuItem item) { + return onOptionsItemSelected(new MenuItemWrapper(item)); + } + + /** + * Call onOptionsMenuClosed() on fragments. + */ + @Override + public void onPanelClosed(int featureId, android.view.Menu menu) { + switch (featureId) { + case Window.FEATURE_OPTIONS_PANEL: + mFragments.dispatchOptionsMenuClosed(new MenuWrapper(menu)); + + if (!IS_HONEYCOMB && (getSupportActionBar() != null)) { + if (DEBUG) Log.d(TAG, "onPanelClosed(int, android.view.Menu): Dispatch menu visibility false to custom action bar."); + ((ActionBarImpl)mActionBar).onMenuVisibilityChanged(false); + } + break; + } + super.onPanelClosed(featureId, menu); + } + + /** + * Dispatch onPause() to fragments. + */ + @Override + protected void onPause() { + super.onPause(); + mResumed = false; + if (mHandler.hasMessages(MSG_RESUME_PENDING)) { + mHandler.removeMessages(MSG_RESUME_PENDING); + mFragments.dispatchResume(); + } + mFragments.dispatchPause(); + } + + /** + * Dispatch onResume() to fragments. + */ + @Override + protected void onResume() { + super.onResume(); + mHandler.sendEmptyMessage(MSG_RESUME_PENDING); + mResumed = true; + mFragments.execPendingActions(); + } + + /** + * Dispatch onResume() to fragments. + */ + @Override + protected void onPostResume() { + super.onPostResume(); + mHandler.removeMessages(MSG_RESUME_PENDING); + mFragments.dispatchResume(); + mFragments.execPendingActions(); + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + boolean result = menu.hasVisibleItems(); + if (DEBUG) Log.d(TAG, "onPrepareOptionsMenu(Menu): Returning " + result); + return result; + } + + @Override + public final boolean onPrepareOptionsMenu(android.view.Menu menu) { + boolean result = super.onPrepareOptionsMenu(menu); + + if (!IS_HONEYCOMB) { + if (DEBUG) { + Log.d(TAG, "onPrepareOptionsMenu(android.view.Menu): mOptionsMenuCreateResult = " + mOptionsMenuCreateResult); + Log.d(TAG, "onPrepareOptionsMenu(android.view.Menu): mOptionsMenuInvalidated = " + mOptionsMenuInvalidated); + } + + boolean prepareResult = true; + if (mOptionsMenuCreateResult) { + if (DEBUG) Log.d(TAG, "onPrepareOptionsMenu(android.view.Menu): Calling support method with custom menu."); + prepareResult = onPrepareOptionsMenu(mSupportMenu); + if (DEBUG) Log.d(TAG, "onPrepareOptionsMenu(android.view.Menu): Support method result returned " + prepareResult); + if (prepareResult) { + if (DEBUG) Log.d(TAG, "onPrepareOptionsMenu(android.view.Menu): Dispatching fragment method with custom menu."); + mFragments.dispatchPrepareOptionsMenu(mSupportMenu); + } + } + + if (mOptionsMenuInvalidated) { + if (DEBUG) Log.d(TAG, "onPrepareOptionsMenu(android.view.Menu): Clearing existing options menu."); + menu.clear(); + mOptionsMenuInvalidated = false; + + if (mOptionsMenuCreateResult && prepareResult) { + if (DEBUG) Log.d(TAG, "onPrepareOptionsMenu(android.view.Menu): Adding any action items that are not displayed on the action bar."); + //Only add items that have not already been added to our custom + //action bar implementation + for (MenuItemImpl item : mSupportMenu.getItems()) { + if (!item.isShownOnActionBar()) { + item.addTo(menu); + } + } + } + } + + if (mOptionsMenuCreateResult && prepareResult && menu.hasVisibleItems()) { + if (getSupportActionBar() != null) { + if (DEBUG) Log.d(TAG, "onPrepareOptionsMenu(android.view.Menu): Dispatch menu visibility true to custom action bar."); + ((ActionBarImpl)mActionBar).onMenuVisibilityChanged(true); + } + result = true; + } + } else { + if (DEBUG) Log.d(TAG, "onPrepareOptionsMenu(android.view.Menu): Calling support method with wrapped native menu."); + final MenuWrapper wrappedMenu = new MenuWrapper(menu); + result = onPrepareOptionsMenu(wrappedMenu); + if (result) { + if (DEBUG) Log.d(TAG, "onPrepareOptionsMenu(android.view.Menu): Dispatching fragment method with wrapped native menu."); + mFragments.dispatchPrepareOptionsMenu(wrappedMenu); + } + } + + if (DEBUG) Log.d(TAG, "onPrepareOptionsMenu(android.view.Menu): Returning " + result); + return result; + } + + /** + * Cause this Activity to be recreated with a new instance. This results in + * essentially the same flow as when the Activity is created due to a + * configuration change -- the current instance will go through its + * lifecycle to onDestroy() and a new instance then created after it. + */ + @Override + public void recreate() { + //This SUCKS! Figure out a way to call the super method and support Android 1.6 + /* + if (IS_HONEYCOMB) { + super.recreate(); + } else { + */ + final Intent intent = getIntent(); + intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); + + startActivity(intent); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR) { + OverridePendingTransition.invoke(this); + } + + finish(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR) { + OverridePendingTransition.invoke(this); + } + /* + } + */ + } + + private static final class OverridePendingTransition { + static void invoke(Activity activity) { + activity.overridePendingTransition(0, 0); + } + } + + /** + * Retain all appropriate fragment and loader state. You can NOT + * override this yourself! Use {@link #onRetainCustomNonConfigurationInstance()} + * if you want to retain your own state. + */ + @Override + public final Object onRetainNonConfigurationInstance() { + if (mStopped) { + doReallyStop(true); + } + + Object custom = onRetainCustomNonConfigurationInstance(); + + ArrayList fragments = mFragments.retainNonConfig(); + boolean retainLoaders = false; + if (mAllLoaderManagers != null) { + // prune out any loader managers that were already stopped and so + // have nothing useful to retain. + for (int i=mAllLoaderManagers.size()-1; i>=0; i--) { + LoaderManagerImpl lm = mAllLoaderManagers.valueAt(i); + if (lm.mRetaining) { + retainLoaders = true; + } else { + lm.doDestroy(); + mAllLoaderManagers.removeAt(i); + } + } + } + if (fragments == null && !retainLoaders && custom == null) { + return null; + } + + NonConfigurationInstances nci = new NonConfigurationInstances(); + nci.activity = null; + nci.custom = custom; + nci.children = null; + nci.fragments = fragments; + nci.loaders = mAllLoaderManagers; + return nci; + } + + /** + * Save all appropriate fragment state. + */ + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + Parcelable p = mFragments.saveAllState(); + if (p != null) { + outState.putParcelable(FRAGMENTS_TAG, p); + } + } + + /** + * Dispatch onStart() to all fragments. Ensure any created loaders are + * now started. + */ + @Override + protected void onStart() { + super.onStart(); + + mStopped = false; + mReallyStopped = false; + mHandler.removeMessages(MSG_REALLY_STOPPED); + + if (!mCreated) { + mCreated = true; + ensureSupportActionBarAttached(); //Needed for retained fragments + mFragments.dispatchActivityCreated(); + } + + mFragments.noteStateNotSaved(); + mFragments.execPendingActions(); + + if (!mLoadersStarted) { + mLoadersStarted = true; + if (mLoaderManager != null) { + mLoaderManager.doStart(); + } else if (!mCheckedForLoaderManager) { + mLoaderManager = getLoaderManager(-1, mLoadersStarted, false); + } + mCheckedForLoaderManager = true; + } + // NOTE: HC onStart goes here. + + mFragments.dispatchStart(); + if (mAllLoaderManagers != null) { + for (int i=mAllLoaderManagers.size()-1; i>=0; i--) { + LoaderManagerImpl lm = mAllLoaderManagers.valueAt(i); + lm.finishRetain(); + lm.doReportStart(); + } + } + } + + /** + * Dispatch onStop() to all fragments. Ensure all loaders are stopped. + */ + @Override + protected void onStop() { + super.onStop(); + + mStopped = true; + mHandler.sendEmptyMessage(MSG_REALLY_STOPPED); + + mFragments.dispatchStop(); + } + + /** + *

Sets the visibility of the indeterminate progress bar in the + * title.

+ * + *

In order for the progress bar to be shown, the feature must be + * requested via {@link #requestWindowFeature(long)}.

+ * + *

This method must be used instead of + * {@link #setProgressBarIndeterminateVisibility(boolean)} for + * ActionBarSherlock. Pass {@link Boolean.TRUE} or + * {@link Boolean.FALSE} to ensure the appropriate one is called.

+ * + * @param visible Whether to show the progress bars in the title. + */ + @Override + public void setProgressBarIndeterminateVisibility(Boolean visible) { + if (IS_HONEYCOMB || (getSupportActionBar() == null)) { + super.setProgressBarIndeterminateVisibility(visible); + } else if ((mWindowFlags & WINDOW_FLAG_INDETERMINANTE_PROGRESS) == WINDOW_FLAG_INDETERMINANTE_PROGRESS) { + ((ActionBarImpl)mActionBar).setProgressBarIndeterminateVisibility(visible); + } + } + + // ------------------------------------------------------------------------ + // NEW METHODS + // ------------------------------------------------------------------------ + + /** + * Use this instead of {@link #onRetainNonConfigurationInstance()}. + * Retrieve later with {@link #getLastCustomNonConfigurationInstance()}. + */ + public Object onRetainCustomNonConfigurationInstance() { + return null; + } + + /** + * Return the value previously returned from + * {@link #onRetainCustomNonConfigurationInstance()}. + */ + public Object getLastCustomNonConfigurationInstance() { + NonConfigurationInstances nc = (NonConfigurationInstances) + getLastNonConfigurationInstance(); + return nc != null ? nc.custom : null; + } + + /** + * @deprecated Use {@link invalidateOptionsMenu}. + */ + @Deprecated + void supportInvalidateOptionsMenu() { + invalidateOptionsMenu(); + } + + /** + * Print the Activity's state into the given stream. This gets invoked if + * you run "adb shell dumpsys activity ". + * + * @param prefix Desired prefix to prepend at each line of output. + * @param fd The raw file descriptor that the dump is being sent to. + * @param writer The PrintWriter to which you should dump your state. This will be + * closed for you after you return. + * @param args additional arguments to the dump request. + */ + @Override + public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) { + if (IS_HONEYCOMB) { + //This can only work if we can call the super-class impl. :/ + //ActivityCompatHoneycomb.dump(this, prefix, fd, writer, args); + } + writer.print(prefix); writer.print("Local FragmentActivity "); + writer.print(Integer.toHexString(System.identityHashCode(this))); + writer.println(" State:"); + String innerPrefix = prefix + " "; + writer.print(innerPrefix); writer.print("mCreated="); + writer.print(mCreated); writer.print("mResumed="); + writer.print(mResumed); writer.print(" mStopped="); + writer.print(mStopped); writer.print(" mReallyStopped="); + writer.println(mReallyStopped); + writer.print(innerPrefix); writer.print("mLoadersStarted="); + writer.println(mLoadersStarted); + if (mLoaderManager != null) { + writer.print(prefix); writer.print("Loader Manager "); + writer.print(Integer.toHexString(System.identityHashCode(mLoaderManager))); + writer.println(":"); + mLoaderManager.dump(prefix + " ", fd, writer, args); + } + mFragments.dump(prefix, fd, writer, args); + } + + void doReallyStop(boolean retaining) { + if (!mReallyStopped) { + mReallyStopped = true; + mRetaining = retaining; + mHandler.removeMessages(MSG_REALLY_STOPPED); + onReallyStop(); + } + } + + /** + * Pre-HC, we didn't have a way to determine whether an activity was + * being stopped for a config change or not until we saw + * onRetainNonConfigurationInstance() called after onStop(). However + * we need to know this, to know whether to retain fragments. This will + * tell us what we need to know. + */ + void onReallyStop() { + if (mLoadersStarted) { + mLoadersStarted = false; + if (mLoaderManager != null) { + if (!mRetaining) { + mLoaderManager.doStop(); + } else { + mLoaderManager.doRetain(); + } + } + } + + mFragments.dispatchReallyStop(); + } + + // ------------------------------------------------------------------------ + // ACTION BAR AND ACTION MODE SUPPORT + // ------------------------------------------------------------------------ + + /** + * Retrieve a reference to this activity's action bar handler. + * + * @return The handler for the appropriate action bar, or null. + */ + @Override + public ActionBar getSupportActionBar() { + return (mActionBar != null) ? mActionBar.getPublicInstance() : null; + } + + /** + * Notifies the activity that an action mode has finished. Activity + * subclasses overriding this method should call the superclass + * implementation. + * + * @param mode The action mode that just finished. + */ + @Override + public void onActionModeFinished(ActionMode mode) { + } + + /** + * Notifies the Activity that an action mode has been started. Activity + * subclasses overriding this method should call the superclass + * implementation. + * + * @param mode The new action mode. + */ + @Override + public void onActionModeStarted(ActionMode mode) { + } + + /** + *

Give the Activity a chance to control the UI for an action mode + * requested by the system.

+ * + *

Note: If you are looking for a notification callback that an action + * mode has been started for this activity, see + * {@link #onActionModeStarted(ActionMode)}.

+ * + * @param callback The callback that should control the new action mode + * @return The new action mode, or null if the activity does not want to + * provide special handling for this action mode. (It will be handled by the + * system.) + */ + @Override + public ActionMode onWindowStartingActionMode(ActionMode.Callback callback) { + return null; + } + + /** + * Start an action mode. + * + * @param callback Callback that will manage lifecycle events for this + * context mode + * @return The ContextMode that was started, or null if it was cancelled + * @see android.support.v4.view.ActionMode + */ + @Override + public final ActionMode startActionMode(final ActionMode.Callback callback) { + //Give the activity override a chance to handle the action mode + ActionMode actionMode = onWindowStartingActionMode(callback); + + if (actionMode == null) { + //If the activity did not handle, send to action bar for platform- + //specific implementation + actionMode = mActionBar.startActionMode(callback); + } + if (actionMode != null) { + //Send the activity callback that our action mode was started + onActionModeStarted(actionMode); + } + + //Return to the caller + return actionMode; + } + + // ------------------------------------------------------------------------ + // FRAGMENT SUPPORT + // ------------------------------------------------------------------------ + + /** + * Called when a fragment is attached to the activity. + */ + @Override + public void onAttachFragment(Fragment fragment) { + } + + /** + * Return the FragmentManager for interacting with fragments associated + * with this activity. + */ + @Override + public FragmentManager getSupportFragmentManager() { + return mFragments; + } + + /** + * Modifies the standard behavior to allow results to be delivered to fragments. + * This imposes a restriction that requestCode be <= 0xffff. + */ + @Override + public void startActivityForResult(Intent intent, int requestCode) { + if (requestCode != -1 && (requestCode&0xffff0000) != 0) { + throw new IllegalArgumentException("Can only use lower 16 bits for requestCode"); + } + super.startActivityForResult(intent, requestCode); + } + + /** + * Called by Fragment.startActivityForResult() to implement its behavior. + */ + @Override + public void startActivityFromFragment(Fragment fragment, Intent intent, + int requestCode) { + if (requestCode == -1) { + super.startActivityForResult(intent, -1); + return; + } + if ((requestCode&0xffff0000) != 0) { + throw new IllegalArgumentException("Can only use lower 16 bits for requestCode"); + } + super.startActivityForResult(intent, ((fragment.mIndex+1)<<16) + (requestCode&0xffff)); + } + + void invalidateSupportFragmentIndex(int index) { + //Log.v(TAG, "invalidateFragmentIndex: index=" + index); + if (mAllLoaderManagers != null) { + LoaderManagerImpl lm = mAllLoaderManagers.get(index); + if (lm != null && !lm.mRetaining) { + lm.doDestroy(); + mAllLoaderManagers.remove(index); + } + } + } + + // ------------------------------------------------------------------------ + // LOADER SUPPORT + // ------------------------------------------------------------------------ + + /** + * Return the LoaderManager for this fragment, creating it if needed. + */ + @Override + public LoaderManager getSupportLoaderManager() { + if (mLoaderManager != null) { + return mLoaderManager; + } + mCheckedForLoaderManager = true; + mLoaderManager = getLoaderManager(-1, mLoadersStarted, true); + return mLoaderManager; + } + + LoaderManagerImpl getLoaderManager(int index, boolean started, boolean create) { + if (mAllLoaderManagers == null) { + mAllLoaderManagers = new HCSparseArray(); + } + LoaderManagerImpl lm = mAllLoaderManagers.get(index); + if (lm == null) { + if (create) { + lm = new LoaderManagerImpl(this, started); + mAllLoaderManagers.put(index, lm); + } + } else { + lm.updateActivity(this); + } + return lm; + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/app/FragmentManager.java b/actionbarsherlock/library/src/android/support/v4/app/FragmentManager.java new file mode 100644 index 000000000..3d35d9eb8 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/app/FragmentManager.java @@ -0,0 +1,1936 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.app; + +import android.content.Context; +import android.content.res.Configuration; +import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; +import android.os.Parcel; +import android.os.Parcelable; +import android.support.v4.util.DebugUtils; +import android.support.v4.util.LogWriter; +import android.support.v4.view.Menu; +import android.support.v4.view.MenuItem; +import android.util.Log; +import android.util.SparseArray; +import android.view.animation.AccelerateInterpolator; +import android.view.animation.AlphaAnimation; +import android.view.animation.Animation; +import android.view.animation.AnimationSet; +import android.view.animation.AnimationUtils; +import android.view.animation.DecelerateInterpolator; +import android.view.animation.Interpolator; +import android.view.animation.ScaleAnimation; +import android.view.animation.Animation.AnimationListener; +import android.view.MenuInflater; +import android.view.View; +import android.view.ViewGroup; +import com.actionbarsherlock.R; + +import java.io.FileDescriptor; +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.Arrays; + +/** + * Static library support version of the framework's {@link android.app.FragmentManager}. + * Used to write apps that run on platforms prior to Android 3.0. When running + * on Android 3.0 or above, this implementation is still used; it does not try + * to switch to the framework's implementation. See the framework SDK + * documentation for a class overview. + * + *

Your activity must derive from {@link FragmentActivity} to use this. + */ +public abstract class FragmentManager { + /** + * Representation of an entry on the fragment back stack, as created + * with {@link FragmentTransaction#addToBackStack(String) + * FragmentTransaction.addToBackStack()}. Entries can later be + * retrieved with {@link FragmentManager#getBackStackEntryAt(int) + * FragmentManager.getBackStackEntry()}. + * + *

Note that you should never hold on to a BackStackEntry object; + * the identifier as returned by {@link #getId} is the only thing that + * will be persisted across activity instances. + */ + public interface BackStackEntry { + /** + * Return the unique identifier for the entry. This is the only + * representation of the entry that will persist across activity + * instances. + */ + public int getId(); + + /** + * Get the name that was supplied to + * {@link FragmentTransaction#addToBackStack(String) + * FragmentTransaction.addToBackStack(String)} when creating this entry. + */ + public String getName(); + + /** + * Return the full bread crumb title resource identifier for the entry, + * or 0 if it does not have one. + */ + public int getBreadCrumbTitleRes(); + + /** + * Return the short bread crumb title resource identifier for the entry, + * or 0 if it does not have one. + */ + public int getBreadCrumbShortTitleRes(); + + /** + * Return the full bread crumb title for the entry, or null if it + * does not have one. + */ + public CharSequence getBreadCrumbTitle(); + + /** + * Return the short bread crumb title for the entry, or null if it + * does not have one. + */ + public CharSequence getBreadCrumbShortTitle(); + } + + /** + * Interface to watch for changes to the back stack. + */ + public interface OnBackStackChangedListener { + /** + * Called whenever the contents of the back stack change. + */ + public void onBackStackChanged(); + } + + /** + * Start a series of edit operations on the Fragments associated with + * this FragmentManager. + * + *

Note: A fragment transaction can only be created/committed prior + * to an activity saving its state. If you try to commit a transaction + * after {@link FragmentActivity#onSaveInstanceState FragmentActivity.onSaveInstanceState()} + * (and prior to a following {@link FragmentActivity#onStart FragmentActivity.onStart} + * or {@link FragmentActivity#onResume FragmentActivity.onResume()}, you will get an error. + * This is because the framework takes care of saving your current fragments + * in the state, and if changes are made after the state is saved then they + * will be lost.

+ */ + public abstract FragmentTransaction beginTransaction(); + + /** @hide -- remove once prebuilts are in. */ + @Deprecated + public FragmentTransaction openTransaction() { + return beginTransaction(); + } + + /** + * After a {@link FragmentTransaction} is committed with + * {@link FragmentTransaction#commit FragmentTransaction.commit()}, it + * is scheduled to be executed asynchronously on the process's main thread. + * If you want to immediately executing any such pending operations, you + * can call this function (only from the main thread) to do so. Note that + * all callbacks and other related behavior will be done from within this + * call, so be careful about where this is called from. + * + * @return Returns true if there were any pending transactions to be + * executed. + */ + public abstract boolean executePendingTransactions(); + + /** + * Finds a fragment that was identified by the given id either when inflated + * from XML or as the container ID when added in a transaction. This first + * searches through fragments that are currently added to the manager's + * activity; if no such fragment is found, then all fragments currently + * on the back stack associated with this ID are searched. + * @return The fragment if found or null otherwise. + */ + public abstract Fragment findFragmentById(int id); + + /** + * Finds a fragment that was identified by the given tag either when inflated + * from XML or as supplied when added in a transaction. This first + * searches through fragments that are currently added to the manager's + * activity; if no such fragment is found, then all fragments currently + * on the back stack are searched. + * @return The fragment if found or null otherwise. + */ + public abstract Fragment findFragmentByTag(String tag); + + /** + * Flag for {@link #popBackStack(String, int)} + * and {@link #popBackStack(int, int)}: If set, and the name or ID of + * a back stack entry has been supplied, then all matching entries will + * be consumed until one that doesn't match is found or the bottom of + * the stack is reached. Otherwise, all entries up to but not including that entry + * will be removed. + */ + public static final int POP_BACK_STACK_INCLUSIVE = 1<<0; + + /** + * Pop the top state off the back stack. Returns true if there was one + * to pop, else false. This function is asynchronous -- it enqueues the + * request to pop, but the action will not be performed until the application + * returns to its event loop. + */ + public abstract void popBackStack(); + + /** + * Like {@link #popBackStack()}, but performs the operation immediately + * inside of the call. This is like calling {@link #executePendingTransactions()} + * afterwards. + * @return Returns true if there was something popped, else false. + */ + public abstract boolean popBackStackImmediate(); + + /** + * Pop the last fragment transition from the manager's fragment + * back stack. If there is nothing to pop, false is returned. + * This function is asynchronous -- it enqueues the + * request to pop, but the action will not be performed until the application + * returns to its event loop. + * + * @param name If non-null, this is the name of a previous back state + * to look for; if found, all states up to that state will be popped. The + * {@link #POP_BACK_STACK_INCLUSIVE} flag can be used to control whether + * the named state itself is popped. If null, only the top state is popped. + * @param flags Either 0 or {@link #POP_BACK_STACK_INCLUSIVE}. + */ + public abstract void popBackStack(String name, int flags); + + /** + * Like {@link #popBackStack(String, int)}, but performs the operation immediately + * inside of the call. This is like calling {@link #executePendingTransactions()} + * afterwards. + * @return Returns true if there was something popped, else false. + */ + public abstract boolean popBackStackImmediate(String name, int flags); + + /** + * Pop all back stack states up to the one with the given identifier. + * This function is asynchronous -- it enqueues the + * request to pop, but the action will not be performed until the application + * returns to its event loop. + * + * @param id Identifier of the stated to be popped. If no identifier exists, + * false is returned. + * The identifier is the number returned by + * {@link FragmentTransaction#commit() FragmentTransaction.commit()}. The + * {@link #POP_BACK_STACK_INCLUSIVE} flag can be used to control whether + * the named state itself is popped. + * @param flags Either 0 or {@link #POP_BACK_STACK_INCLUSIVE}. + */ + public abstract void popBackStack(int id, int flags); + + /** + * Like {@link #popBackStack(int, int)}, but performs the operation immediately + * inside of the call. This is like calling {@link #executePendingTransactions()} + * afterwards. + * @return Returns true if there was something popped, else false. + */ + public abstract boolean popBackStackImmediate(int id, int flags); + + /** + * Return the number of entries currently in the back stack. + */ + public abstract int getBackStackEntryCount(); + + /** + * Return the BackStackEntry at index index in the back stack; + * entries start index 0 being the bottom of the stack. + */ + public abstract BackStackEntry getBackStackEntryAt(int index); + + /** + * Add a new listener for changes to the fragment back stack. + */ + public abstract void addOnBackStackChangedListener(OnBackStackChangedListener listener); + + /** + * Remove a listener that was previously added with + * {@link #addOnBackStackChangedListener(OnBackStackChangedListener)}. + */ + public abstract void removeOnBackStackChangedListener(OnBackStackChangedListener listener); + + /** + * Put a reference to a fragment in a Bundle. This Bundle can be + * persisted as saved state, and when later restoring + * {@link #getFragment(Bundle, String)} will return the current + * instance of the same fragment. + * + * @param bundle The bundle in which to put the fragment reference. + * @param key The name of the entry in the bundle. + * @param fragment The Fragment whose reference is to be stored. + */ + public abstract void putFragment(Bundle bundle, String key, Fragment fragment); + + /** + * Retrieve the current Fragment instance for a reference previously + * placed with {@link #putFragment(Bundle, String, Fragment)}. + * + * @param bundle The bundle from which to retrieve the fragment reference. + * @param key The name of the entry in the bundle. + * @return Returns the current Fragment instance that is associated with + * the given reference. + */ + public abstract Fragment getFragment(Bundle bundle, String key); + + /** + * Save the current instance state of the given Fragment. This can be + * used later when creating a new instance of the Fragment and adding + * it to the fragment manager, to have it create itself to match the + * current state returned here. Note that there are limits on how + * this can be used: + * + *
    + *
  • The Fragment must currently be attached to the FragmentManager. + *
  • A new Fragment created using this saved state must be the same class + * type as the Fragment it was created from. + *
  • The saved state can not contain dependencies on other fragments -- + * that is it can't use {@link #putFragment(Bundle, String, Fragment)} to + * store a fragment reference because that reference may not be valid when + * this saved state is later used. Likewise the Fragment's target and + * result code are not included in this state. + *
+ * + * @param f The Fragment whose state is to be saved. + * @return The generated state. This will be null if there was no + * interesting state created by the fragment. + */ + public abstract Fragment.SavedState saveFragmentInstanceState(Fragment f); + + /** + * Print the FragmentManager's state into the given stream. + * + * @param prefix Text to print at the front of each line. + * @param fd The raw file descriptor that the dump is being sent to. + * @param writer A PrintWriter to which the dump is to be set. + * @param args Additional arguments to the dump request. + */ + public abstract void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args); + + /** + * Control whether the framework's internal fragment manager debugging + * logs are turned on. If enabled, you will see output in logcat as + * the framework performs fragment operations. + */ + public static void enableDebugLogging(boolean enabled) { + FragmentManagerImpl.DEBUG = enabled; + } +} + +final class FragmentManagerState implements Parcelable { + FragmentState[] mActive; + int[] mAdded; + BackStackState[] mBackStack; + + public FragmentManagerState() { + } + + public FragmentManagerState(Parcel in) { + mActive = in.createTypedArray(FragmentState.CREATOR); + mAdded = in.createIntArray(); + mBackStack = in.createTypedArray(BackStackState.CREATOR); + } + + public int describeContents() { + return 0; + } + + public void writeToParcel(Parcel dest, int flags) { + dest.writeTypedArray(mActive, flags); + dest.writeIntArray(mAdded); + dest.writeTypedArray(mBackStack, flags); + } + + public static final Parcelable.Creator CREATOR + = new Parcelable.Creator() { + public FragmentManagerState createFromParcel(Parcel in) { + return new FragmentManagerState(in); + } + + public FragmentManagerState[] newArray(int size) { + return new FragmentManagerState[size]; + } + }; +} + +/** + * Container for fragments associated with an activity. + */ +final class FragmentManagerImpl extends FragmentManager { + static boolean DEBUG = false; + static final String TAG = "FragmentManager"; + + static final boolean HONEYCOMB = android.os.Build.VERSION.SDK_INT >= 11; + + static final String TARGET_REQUEST_CODE_STATE_TAG = "android:target_req_state"; + static final String TARGET_STATE_TAG = "android:target_state"; + static final String VIEW_STATE_TAG = "android:view_state"; + + ArrayList mPendingActions; + Runnable[] mTmpActions; + boolean mExecutingActions; + + ArrayList mActive; + ArrayList mAdded; + ArrayList mAvailIndices; + ArrayList mBackStack; + ArrayList mCreatedMenus; + + // Must be accessed while locked. + ArrayList mBackStackIndices; + ArrayList mAvailBackStackIndices; + + ArrayList mBackStackChangeListeners; + + int mCurState = Fragment.INITIALIZING; + SupportActivity mActivity; + + boolean mNeedMenuInvalidate; + boolean mStateSaved; + boolean mDestroyed; + String mNoTransactionsBecause; + + // Temporary vars for state save and restore. + Bundle mStateBundle = null; + SparseArray mStateArray = null; + + Runnable mExecCommit = new Runnable() { + @Override + public void run() { + execPendingActions(); + } + }; + + @Override + public FragmentTransaction beginTransaction() { + return new BackStackRecord(this); + } + + @Override + public boolean executePendingTransactions() { + return execPendingActions(); + } + + @Override + public void popBackStack() { + enqueueAction(new Runnable() { + @Override public void run() { + popBackStackState(mActivity.getInternalCallbacks().getHandler(), null, -1, 0); + } + }, false); + } + + @Override + public boolean popBackStackImmediate() { + checkStateLoss(); + executePendingTransactions(); + return popBackStackState(mActivity.getInternalCallbacks().getHandler(), null, -1, 0); + } + + @Override + public void popBackStack(final String name, final int flags) { + enqueueAction(new Runnable() { + @Override public void run() { + popBackStackState(mActivity.getInternalCallbacks().getHandler(), name, -1, flags); + } + }, false); + } + + @Override + public boolean popBackStackImmediate(String name, int flags) { + checkStateLoss(); + executePendingTransactions(); + return popBackStackState(mActivity.getInternalCallbacks().getHandler(), name, -1, flags); + } + + @Override + public void popBackStack(final int id, final int flags) { + if (id < 0) { + throw new IllegalArgumentException("Bad id: " + id); + } + enqueueAction(new Runnable() { + @Override public void run() { + popBackStackState(mActivity.getInternalCallbacks().getHandler(), null, id, flags); + } + }, false); + } + + @Override + public boolean popBackStackImmediate(int id, int flags) { + checkStateLoss(); + executePendingTransactions(); + if (id < 0) { + throw new IllegalArgumentException("Bad id: " + id); + } + return popBackStackState(mActivity.getInternalCallbacks().getHandler(), null, id, flags); + } + + @Override + public int getBackStackEntryCount() { + return mBackStack != null ? mBackStack.size() : 0; + } + + @Override + public BackStackEntry getBackStackEntryAt(int index) { + return mBackStack.get(index); + } + + @Override + public void addOnBackStackChangedListener(OnBackStackChangedListener listener) { + if (mBackStackChangeListeners == null) { + mBackStackChangeListeners = new ArrayList(); + } + mBackStackChangeListeners.add(listener); + } + + @Override + public void removeOnBackStackChangedListener(OnBackStackChangedListener listener) { + if (mBackStackChangeListeners != null) { + mBackStackChangeListeners.remove(listener); + } + } + + @Override + public void putFragment(Bundle bundle, String key, Fragment fragment) { + if (fragment.mIndex < 0) { + throw new IllegalStateException("Fragment " + fragment + + " is not currently in the FragmentManager"); + } + bundle.putInt(key, fragment.mIndex); + } + + @Override + public Fragment getFragment(Bundle bundle, String key) { + int index = bundle.getInt(key, -1); + if (index == -1) { + return null; + } + if (index >= mActive.size()) { + throw new IllegalStateException("Fragement no longer exists for key " + + key + ": index " + index); + } + Fragment f = mActive.get(index); + if (f == null) { + throw new IllegalStateException("Fragement no longer exists for key " + + key + ": index " + index); + } + return f; + } + + @Override + public Fragment.SavedState saveFragmentInstanceState(Fragment fragment) { + if (fragment.mIndex < 0) { + throw new IllegalStateException("Fragment " + fragment + + " is not currently in the FragmentManager"); + } + if (fragment.mState > Fragment.INITIALIZING) { + Bundle result = saveFragmentBasicState(fragment); + return result != null ? new Fragment.SavedState(result) : null; + } + return null; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(128); + sb.append("FragmentManager{"); + sb.append(Integer.toHexString(System.identityHashCode(this))); + sb.append(" in "); + DebugUtils.buildShortClassTag(mActivity, sb); + sb.append("}}"); + return sb.toString(); + } + + @Override + public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) { + String innerPrefix = prefix + " "; + + int N; + if (mActive != null) { + N = mActive.size(); + if (N > 0) { + writer.print(prefix); writer.print("Active Fragments in "); + writer.print(Integer.toHexString(System.identityHashCode(this))); + writer.println(":"); + for (int i=0; i 0) { + writer.print(prefix); writer.println("Added Fragments:"); + for (int i=0; i 0) { + writer.print(prefix); writer.println("Fragments Created Menus:"); + for (int i=0; i 0) { + writer.print(prefix); writer.println("Back Stack:"); + for (int i=0; i 0) { + writer.print(prefix); writer.println("Back Stack Indices:"); + for (int i=0; i 0) { + writer.print(prefix); writer.print("mAvailBackStackIndices: "); + writer.println(Arrays.toString(mAvailBackStackIndices.toArray())); + } + } + + if (mPendingActions != null) { + N = mPendingActions.size(); + if (N > 0) { + writer.print(prefix); writer.println("Pending Actions:"); + for (int i=0; i Fragment.CREATED) { + newState = Fragment.CREATED; + } + if (f.mRemoving && newState > f.mState) { + // While removing a fragment, we can't change it to a higher state. + newState = f.mState; + } + + if (f.mState < newState) { + // For fragments that are created from a layout, when restoring from + // state we don't want to allow them to be created until they are + // being reloaded from the layout. + if (f.mFromLayout && !f.mInLayout) { + return; + } + if (f.mAnimatingAway != null) { + // The fragment is currently being animated... but! Now we + // want to move our state back up. Give up on waiting for the + // animation, move to whatever the final state should be once + // the animation is done, and then we can proceed from there. + f.mAnimatingAway = null; + moveToState(f, f.mStateAfterAnimating, 0, 0); + } + switch (f.mState) { + case Fragment.INITIALIZING: + if (DEBUG) Log.v(TAG, "moveto CREATED: " + f); + if (f.mSavedFragmentState != null) { + f.mSavedViewState = f.mSavedFragmentState.getSparseParcelableArray( + FragmentManagerImpl.VIEW_STATE_TAG); + f.mTarget = getFragment(f.mSavedFragmentState, + FragmentManagerImpl.TARGET_STATE_TAG); + if (f.mTarget != null) { + f.mTargetRequestCode = f.mSavedFragmentState.getInt( + FragmentManagerImpl.TARGET_REQUEST_CODE_STATE_TAG, 0); + } + } + f.mActivity = mActivity; + f.mFragmentManager = mActivity.getInternalCallbacks().getFragments(); + f.mCalled = false; + f.onAttach(mActivity); + if (!f.mCalled) { + throw new SuperNotCalledException("Fragment " + f + + " did not call through to super.onAttach()"); + } + mActivity.onAttachFragment(f); + + if (!f.mRetaining) { + f.mCalled = false; + f.onCreate(f.mSavedFragmentState); + if (!f.mCalled) { + throw new SuperNotCalledException("Fragment " + f + + " did not call through to super.onCreate()"); + } + } + f.mRetaining = false; + if (f.mFromLayout) { + // For fragments that are part of the content view + // layout, we need to instantiate the view immediately + // and the inflater will take care of adding it. + f.mView = f.onCreateView(f.getLayoutInflater(f.mSavedFragmentState), + null, f.mSavedFragmentState); + if (f.mView != null) { + f.mInnerView = f.mView; + f.mView = NoSaveStateFrameLayout.wrap(f.mView); + if (f.mHidden) f.mView.setVisibility(View.GONE); + f.onViewCreated(f.mView, f.mSavedFragmentState); + } else { + f.mInnerView = null; + } + } + case Fragment.CREATED: + if (newState > Fragment.CREATED) { + if (DEBUG) Log.v(TAG, "moveto ACTIVITY_CREATED: " + f); + if (!f.mFromLayout) { + ViewGroup container = null; + if (f.mContainerId != 0) { + container = (ViewGroup)mActivity.findViewById(f.mContainerId); + if (container == null && !f.mRestored) { + throw new IllegalArgumentException("No view found for id 0x" + + Integer.toHexString(f.mContainerId) + + " for fragment " + f); + } + } + f.mContainer = container; + f.mView = f.onCreateView(f.getLayoutInflater(f.mSavedFragmentState), + container, f.mSavedFragmentState); + if (f.mView != null) { + f.mInnerView = f.mView; + f.mView = NoSaveStateFrameLayout.wrap(f.mView); + if (container != null) { + Animation anim = loadAnimation(f, transit, true, + transitionStyle); + if (anim != null) { + f.mView.startAnimation(anim); + } + container.addView(f.mView); + } + if (f.mHidden) f.mView.setVisibility(View.GONE); + f.onViewCreated(f.mView, f.mSavedFragmentState); + } else { + f.mInnerView = null; + } + } + + f.mCalled = false; + f.onActivityCreated(f.mSavedFragmentState); + if (!f.mCalled) { + throw new SuperNotCalledException("Fragment " + f + + " did not call through to super.onActivityCreated()"); + } + if (f.mView != null) { + f.restoreViewState(); + } + f.mSavedFragmentState = null; + } + case Fragment.ACTIVITY_CREATED: + case Fragment.STOPPED: + if (newState > Fragment.STOPPED) { + if (DEBUG) Log.v(TAG, "moveto STARTED: " + f); + f.mCalled = false; + f.performStart(); + if (!f.mCalled) { + throw new SuperNotCalledException("Fragment " + f + + " did not call through to super.onStart()"); + } + } + case Fragment.STARTED: + if (newState > Fragment.STARTED) { + if (DEBUG) Log.v(TAG, "moveto RESUMED: " + f); + f.mCalled = false; + f.mResumed = true; + f.onResume(); + if (!f.mCalled) { + throw new SuperNotCalledException("Fragment " + f + + " did not call through to super.onResume()"); + } + f.mSavedFragmentState = null; + f.mSavedViewState = null; + } + } + } else if (f.mState > newState) { + switch (f.mState) { + case Fragment.RESUMED: + if (newState < Fragment.RESUMED) { + if (DEBUG) Log.v(TAG, "movefrom RESUMED: " + f); + f.mCalled = false; + f.onPause(); + if (!f.mCalled) { + throw new SuperNotCalledException("Fragment " + f + + " did not call through to super.onPause()"); + } + f.mResumed = false; + } + case Fragment.STARTED: + if (newState < Fragment.STARTED) { + if (DEBUG) Log.v(TAG, "movefrom STARTED: " + f); + f.mCalled = false; + f.performStop(); + if (!f.mCalled) { + throw new SuperNotCalledException("Fragment " + f + + " did not call through to super.onStop()"); + } + } + case Fragment.STOPPED: + if (newState < Fragment.STOPPED) { + if (DEBUG) Log.v(TAG, "movefrom STOPPED: " + f); + f.performReallyStop(); + } + case Fragment.ACTIVITY_CREATED: + if (newState < Fragment.ACTIVITY_CREATED) { + if (DEBUG) Log.v(TAG, "movefrom ACTIVITY_CREATED: " + f); + if (f.mView != null) { + // Need to save the current view state if not + // done already. + if (!mActivity.isFinishing() && f.mSavedViewState == null) { + saveFragmentViewState(f); + } + } + f.mCalled = false; + f.performDestroyView(); + if (!f.mCalled) { + throw new SuperNotCalledException("Fragment " + f + + " did not call through to super.onDestroyView()"); + } + if (f.mView != null && f.mContainer != null) { + Animation anim = null; + if (mCurState > Fragment.INITIALIZING && !mDestroyed) { + anim = loadAnimation(f, transit, false, + transitionStyle); + } + if (anim != null) { + final Fragment fragment = f; + f.mAnimatingAway = f.mView; + f.mStateAfterAnimating = newState; + anim.setAnimationListener(new AnimationListener() { + @Override + public void onAnimationEnd(Animation animation) { + if (fragment.mAnimatingAway != null) { + fragment.mAnimatingAway = null; + moveToState(fragment, fragment.mStateAfterAnimating, + 0, 0); + } + } + @Override + public void onAnimationRepeat(Animation animation) { + } + @Override + public void onAnimationStart(Animation animation) { + } + }); + f.mView.startAnimation(anim); + } + f.mContainer.removeView(f.mView); + } + f.mContainer = null; + f.mView = null; + f.mInnerView = null; + } + case Fragment.CREATED: + if (newState < Fragment.CREATED) { + if (mDestroyed) { + if (f.mAnimatingAway != null) { + // The fragment's containing activity is + // being destroyed, but this fragment is + // currently animating away. Stop the + // animation right now -- it is not needed, + // and we can't wait any more on destroying + // the fragment. + View v = f.mAnimatingAway; + f.mAnimatingAway = null; + v.clearAnimation(); + } + } + if (f.mAnimatingAway != null) { + // We are waiting for the fragment's view to finish + // animating away. Just make a note of the state + // the fragment now should move to once the animation + // is done. + f.mStateAfterAnimating = newState; + newState = Fragment.CREATED; + } else { + if (DEBUG) Log.v(TAG, "movefrom CREATED: " + f); + if (!f.mRetaining) { + f.mCalled = false; + f.onDestroy(); + if (!f.mCalled) { + throw new SuperNotCalledException("Fragment " + f + + " did not call through to super.onDestroy()"); + } + } + + f.mCalled = false; + f.onDetach(); + if (!f.mCalled) { + throw new SuperNotCalledException("Fragment " + f + + " did not call through to super.onDetach()"); + } + if (!f.mRetaining) { + makeInactive(f); + } else { + f.mActivity = null; + f.mFragmentManager = null; + } + } + } + } + } + + f.mState = newState; + } + + void moveToState(Fragment f) { + moveToState(f, mCurState, 0, 0); + } + + void moveToState(int newState, boolean always) { + moveToState(newState, 0, 0, always); + } + + void moveToState(int newState, int transit, int transitStyle, boolean always) { + if (mActivity == null && newState != Fragment.INITIALIZING) { + throw new IllegalStateException("No activity"); + } + + if (!always && mCurState == newState) { + return; + } + + mCurState = newState; + if (mActive != null) { + for (int i=0; i= 0) { + return; + } + + if (mAvailIndices == null || mAvailIndices.size() <= 0) { + if (mActive == null) { + mActive = new ArrayList(); + } + f.setIndex(mActive.size()); + mActive.add(f); + + } else { + f.setIndex(mAvailIndices.remove(mAvailIndices.size()-1)); + mActive.set(f.mIndex, f); + } + } + + void makeInactive(Fragment f) { + if (f.mIndex < 0) { + return; + } + + if (DEBUG) Log.v(TAG, "Freeing fragment index " + f.mIndex); + mActive.set(f.mIndex, null); + if (mAvailIndices == null) { + mAvailIndices = new ArrayList(); + } + mAvailIndices.add(f.mIndex); + mActivity.getInternalCallbacks().invalidateSupportFragmentIndex(f.mIndex); + f.initState(); + } + + public void addFragment(Fragment fragment, boolean moveToStateNow) { + if (mAdded == null) { + mAdded = new ArrayList(); + } + if (DEBUG) Log.v(TAG, "add: " + fragment); + makeActive(fragment); + if (!fragment.mDetached) { + mAdded.add(fragment); + fragment.mAdded = true; + fragment.mRemoving = false; + if (fragment.mHasMenu && fragment.mMenuVisible) { + mNeedMenuInvalidate = true; + } + if (moveToStateNow) { + moveToState(fragment); + } + } + } + + public void removeFragment(Fragment fragment, int transition, int transitionStyle) { + if (DEBUG) Log.v(TAG, "remove: " + fragment + " nesting=" + fragment.mBackStackNesting); + final boolean inactive = !fragment.isInBackStack(); + if (!fragment.mDetached || inactive) { + mAdded.remove(fragment); + if (fragment.mHasMenu && fragment.mMenuVisible) { + mNeedMenuInvalidate = true; + } + fragment.mAdded = false; + fragment.mRemoving = true; + moveToState(fragment, inactive ? Fragment.INITIALIZING : Fragment.CREATED, + transition, transitionStyle); + } + } + + public void hideFragment(Fragment fragment, int transition, int transitionStyle) { + if (DEBUG) Log.v(TAG, "hide: " + fragment); + if (!fragment.mHidden) { + fragment.mHidden = true; + if (fragment.mView != null) { + Animation anim = loadAnimation(fragment, transition, true, + transitionStyle); + if (anim != null) { + fragment.mView.startAnimation(anim); + } + fragment.mView.setVisibility(View.GONE); + } + if (fragment.mAdded && fragment.mHasMenu && fragment.mMenuVisible) { + mNeedMenuInvalidate = true; + } + fragment.onHiddenChanged(true); + } + } + + public void showFragment(Fragment fragment, int transition, int transitionStyle) { + if (DEBUG) Log.v(TAG, "show: " + fragment); + if (fragment.mHidden) { + fragment.mHidden = false; + if (fragment.mView != null) { + Animation anim = loadAnimation(fragment, transition, true, + transitionStyle); + if (anim != null) { + fragment.mView.startAnimation(anim); + } + fragment.mView.setVisibility(View.VISIBLE); + } + if (fragment.mAdded && fragment.mHasMenu && fragment.mMenuVisible) { + mNeedMenuInvalidate = true; + } + fragment.onHiddenChanged(false); + } + } + + public void detachFragment(Fragment fragment, int transition, int transitionStyle) { + if (DEBUG) Log.v(TAG, "detach: " + fragment); + if (!fragment.mDetached) { + fragment.mDetached = true; + if (fragment.mAdded) { + // We are not already in back stack, so need to remove the fragment. + mAdded.remove(fragment); + if (fragment.mHasMenu && fragment.mMenuVisible) { + mNeedMenuInvalidate = true; + } + fragment.mAdded = false; + moveToState(fragment, Fragment.CREATED, transition, transitionStyle); + } + } + } + + public void attachFragment(Fragment fragment, int transition, int transitionStyle) { + if (DEBUG) Log.v(TAG, "attach: " + fragment); + if (fragment.mDetached) { + fragment.mDetached = false; + if (!fragment.mAdded) { + mAdded.add(fragment); + fragment.mAdded = true; + if (fragment.mHasMenu && fragment.mMenuVisible) { + mNeedMenuInvalidate = true; + } + moveToState(fragment, mCurState, transition, transitionStyle); + } + } + } + + public Fragment findFragmentById(int id) { + if (!HONEYCOMB && (id == android.R.id.content)) { + // android.R.id.content would point to the entire content area, + // including the custom action bar + id = R.id.abs__content; + } + + if (mActive != null) { + // First look through added fragments. + for (int i=mAdded.size()-1; i>=0; i--) { + Fragment f = mAdded.get(i); + if (f != null && f.mFragmentId == id) { + return f; + } + } + // Now for any known fragment. + for (int i=mActive.size()-1; i>=0; i--) { + Fragment f = mActive.get(i); + if (f != null && f.mFragmentId == id) { + return f; + } + } + } + return null; + } + + public Fragment findFragmentByTag(String tag) { + if (mActive != null && tag != null) { + // First look through added fragments. + for (int i=mAdded.size()-1; i>=0; i--) { + Fragment f = mAdded.get(i); + if (f != null && tag.equals(f.mTag)) { + return f; + } + } + // Now for any known fragment. + for (int i=mActive.size()-1; i>=0; i--) { + Fragment f = mActive.get(i); + if (f != null && tag.equals(f.mTag)) { + return f; + } + } + } + return null; + } + + public Fragment findFragmentByWho(String who) { + if (mActive != null && who != null) { + for (int i=mActive.size()-1; i>=0; i--) { + Fragment f = mActive.get(i); + if (f != null && who.equals(f.mWho)) { + return f; + } + } + } + return null; + } + + private void checkStateLoss() { + if (mStateSaved) { + throw new IllegalStateException( + "Can not perform this action after onSaveInstanceState"); + } + if (mNoTransactionsBecause != null) { + throw new IllegalStateException( + "Can not perform this action inside of " + mNoTransactionsBecause); + } + } + + public void enqueueAction(Runnable action, boolean allowStateLoss) { + if (!allowStateLoss) { + checkStateLoss(); + } + synchronized (this) { + if (mActivity == null) { + throw new IllegalStateException("Activity has been destroyed"); + } + mActivity.getInternalCallbacks().ensureSupportActionBarAttached(); + if (mPendingActions == null) { + mPendingActions = new ArrayList(); + } + mPendingActions.add(action); + if (mPendingActions.size() == 1) { + mActivity.getInternalCallbacks().getHandler().removeCallbacks(mExecCommit); + mActivity.getInternalCallbacks().getHandler().post(mExecCommit); + } + } + } + + public int allocBackStackIndex(BackStackRecord bse) { + synchronized (this) { + if (mAvailBackStackIndices == null || mAvailBackStackIndices.size() <= 0) { + if (mBackStackIndices == null) { + mBackStackIndices = new ArrayList(); + } + int index = mBackStackIndices.size(); + if (DEBUG) Log.v(TAG, "Setting back stack index " + index + " to " + bse); + mBackStackIndices.add(bse); + return index; + + } else { + int index = mAvailBackStackIndices.remove(mAvailBackStackIndices.size()-1); + if (DEBUG) Log.v(TAG, "Adding back stack index " + index + " with " + bse); + mBackStackIndices.set(index, bse); + return index; + } + } + } + + public void setBackStackIndex(int index, BackStackRecord bse) { + synchronized (this) { + if (mBackStackIndices == null) { + mBackStackIndices = new ArrayList(); + } + int N = mBackStackIndices.size(); + if (index < N) { + if (DEBUG) Log.v(TAG, "Setting back stack index " + index + " to " + bse); + mBackStackIndices.set(index, bse); + } else { + while (N < index) { + mBackStackIndices.add(null); + if (mAvailBackStackIndices == null) { + mAvailBackStackIndices = new ArrayList(); + } + if (DEBUG) Log.v(TAG, "Adding available back stack index " + N); + mAvailBackStackIndices.add(N); + N++; + } + if (DEBUG) Log.v(TAG, "Adding back stack index " + index + " with " + bse); + mBackStackIndices.add(bse); + } + } + } + + public void freeBackStackIndex(int index) { + synchronized (this) { + mBackStackIndices.set(index, null); + if (mAvailBackStackIndices == null) { + mAvailBackStackIndices = new ArrayList(); + } + if (DEBUG) Log.v(TAG, "Freeing back stack index " + index); + mAvailBackStackIndices.add(index); + } + } + + /** + * Only call from main thread! + */ + public boolean execPendingActions() { + if (mExecutingActions) { + throw new IllegalStateException("Recursive entry to executePendingTransactions"); + } + + if (Looper.myLooper() != mActivity.getInternalCallbacks().getHandler().getLooper()) { + throw new IllegalStateException("Must be called from main thread of process"); + } + + boolean didSomething = false; + + while (true) { + int numActions; + + synchronized (this) { + if (mPendingActions == null || mPendingActions.size() == 0) { + return didSomething; + } + + numActions = mPendingActions.size(); + if (mTmpActions == null || mTmpActions.length < numActions) { + mTmpActions = new Runnable[numActions]; + } + mPendingActions.toArray(mTmpActions); + mPendingActions.clear(); + mActivity.getInternalCallbacks().getHandler().removeCallbacks(mExecCommit); + } + + mExecutingActions = true; + for (int i=0; i(); + } + mBackStack.add(state); + reportBackStackChanged(); + } + + boolean popBackStackState(Handler handler, String name, int id, int flags) { + if (mBackStack == null) { + return false; + } + if (name == null && id < 0 && (flags&POP_BACK_STACK_INCLUSIVE) == 0) { + int last = mBackStack.size()-1; + if (last < 0) { + return false; + } + final BackStackRecord bss = mBackStack.remove(last); + bss.popFromBackStack(true); + reportBackStackChanged(); + } else { + int index = -1; + if (name != null || id >= 0) { + // If a name or ID is specified, look for that place in + // the stack. + index = mBackStack.size()-1; + while (index >= 0) { + BackStackRecord bss = mBackStack.get(index); + if (name != null && name.equals(bss.getName())) { + break; + } + if (id >= 0 && id == bss.mIndex) { + break; + } + index--; + } + if (index < 0) { + return false; + } + if ((flags&POP_BACK_STACK_INCLUSIVE) != 0) { + index--; + // Consume all following entries that match. + while (index >= 0) { + BackStackRecord bss = mBackStack.get(index); + if ((name != null && name.equals(bss.getName())) + || (id >= 0 && id == bss.mIndex)) { + index--; + continue; + } + break; + } + } + } + if (index == mBackStack.size()-1) { + return false; + } + final ArrayList states + = new ArrayList(); + for (int i=mBackStack.size()-1; i>index; i--) { + states.add(mBackStack.remove(i)); + } + final int LAST = states.size()-1; + for (int i=0; i<=LAST; i++) { + if (DEBUG) Log.v(TAG, "Popping back stack state: " + states.get(i)); + states.get(i).popFromBackStack(i == LAST); + } + reportBackStackChanged(); + } + return true; + } + + ArrayList retainNonConfig() { + ArrayList fragments = null; + if (mActive != null) { + for (int i=0; i(); + } + fragments.add(f); + f.mRetaining = true; + f.mTargetIndex = f.mTarget != null ? f.mTarget.mIndex : -1; + } + } + } + return fragments; + } + + void saveFragmentViewState(Fragment f) { + if (f.mInnerView == null) { + return; + } + if (mStateArray == null) { + mStateArray = new SparseArray(); + } else { + mStateArray.clear(); + } + f.mInnerView.saveHierarchyState(mStateArray); + if (mStateArray.size() > 0) { + f.mSavedViewState = mStateArray; + mStateArray = null; + } + } + + Bundle saveFragmentBasicState(Fragment f) { + Bundle result = null; + + if (mStateBundle == null) { + mStateBundle = new Bundle(); + } + f.onSaveInstanceState(mStateBundle); + if (!mStateBundle.isEmpty()) { + result = mStateBundle; + mStateBundle = null; + } + + if (f.mView != null) { + saveFragmentViewState(f); + } + if (f.mSavedViewState != null) { + if (result == null) { + result = new Bundle(); + } + result.putSparseParcelableArray( + FragmentManagerImpl.VIEW_STATE_TAG, f.mSavedViewState); + } + + return result; + } + + Parcelable saveAllState() { + // Make sure all pending operations have now been executed to get + // our state update-to-date. + execPendingActions(); + + if (HONEYCOMB) { + // As of Honeycomb, we save state after pausing. Prior to that + // it is before pausing. With fragments this is an issue, since + // there are many things you may do after pausing but before + // stopping that change the fragment state. For those older + // devices, we will not at this point say that we have saved + // the state, so we will allow them to continue doing fragment + // transactions. This retains the same semantics as Honeycomb, + // though you do have the risk of losing the very most recent state + // if the process is killed... we'll live with that. + mStateSaved = true; + } + + if (mActive == null || mActive.size() <= 0) { + return null; + } + + // First collect all active fragments. + int N = mActive.size(); + FragmentState[] active = new FragmentState[N]; + boolean haveFragments = false; + for (int i=0; i Fragment.INITIALIZING && fs.mSavedFragmentState == null) { + fs.mSavedFragmentState = saveFragmentBasicState(f); + + if (f.mTarget != null) { + if (f.mTarget.mIndex < 0) { + String msg = "Failure saving state: " + f + + " has target not in fragment manager: " + f.mTarget; + Log.e(TAG, msg); + dump(" ", null, new PrintWriter(new LogWriter(TAG)), new String[] { }); + throw new IllegalStateException(msg); + } + if (fs.mSavedFragmentState == null) { + fs.mSavedFragmentState = new Bundle(); + } + putFragment(fs.mSavedFragmentState, + FragmentManagerImpl.TARGET_STATE_TAG, f.mTarget); + if (f.mTargetRequestCode != 0) { + fs.mSavedFragmentState.putInt( + FragmentManagerImpl.TARGET_REQUEST_CODE_STATE_TAG, + f.mTargetRequestCode); + } + } + + } else { + fs.mSavedFragmentState = f.mSavedFragmentState; + } + + if (DEBUG) Log.v(TAG, "Saved state of " + f + ": " + + fs.mSavedFragmentState); + } + } + + if (!haveFragments) { + if (DEBUG) Log.v(TAG, "saveAllState: no fragments!"); + return null; + } + + int[] added = null; + BackStackState[] backStack = null; + + // Build list of currently added fragments. + if (mAdded != null) { + N = mAdded.size(); + if (N > 0) { + added = new int[N]; + for (int i=0; i 0) { + backStack = new BackStackState[N]; + for (int i=0; i nonConfig) { + // If there is no saved state at all, then there can not be + // any nonConfig fragments either, so that is that. + if (state == null) return; + FragmentManagerState fms = (FragmentManagerState)state; + if (fms.mActive == null) return; + + // First re-attach any non-config instances we are retaining back + // to their saved state, so we don't try to instantiate them again. + if (nonConfig != null) { + for (int i=0; i(fms.mActive.length); + if (mAvailIndices != null) { + mAvailIndices.clear(); + } + for (int i=0; i(); + } + if (DEBUG) Log.v(TAG, "restoreAllState: adding avail #" + i); + mAvailIndices.add(i); + } + } + + // Update the target of all retained fragments. + if (nonConfig != null) { + for (int i=0; i= 0) { + if (f.mTargetIndex < mActive.size()) { + f.mTarget = mActive.get(f.mTargetIndex); + } else { + Log.w(TAG, "Re-attaching retained fragment " + f + + " target no longer exists: " + f.mTargetIndex); + f.mTarget = null; + } + } + } + } + + // Build the list of currently added fragments. + if (fms.mAdded != null) { + mAdded = new ArrayList(fms.mAdded.length); + for (int i=0; i(fms.mBackStack.length); + for (int i=0; i= 0) { + setBackStackIndex(bse.mIndex, bse); + } + } + } else { + mBackStack = null; + } + } + + public void attachActivity(SupportActivity activity) { + if (mActivity != null) throw new IllegalStateException(); + mActivity = activity; + } + + public void noteStateNotSaved() { + mStateSaved = false; + } + + public void dispatchCreate() { + mStateSaved = false; + moveToState(Fragment.CREATED, false); + } + + public void dispatchActivityCreated() { + mStateSaved = false; + moveToState(Fragment.ACTIVITY_CREATED, false); + } + + public void dispatchStart() { + mStateSaved = false; + moveToState(Fragment.STARTED, false); + } + + public void dispatchResume() { + mStateSaved = false; + moveToState(Fragment.RESUMED, false); + } + + public void dispatchPause() { + moveToState(Fragment.STARTED, false); + } + + public void dispatchStop() { + // See saveAllState() for the explanation of this. We do this for + // all platform versions, to keep our behavior more consistent between + // them. + mStateSaved = true; + + moveToState(Fragment.STOPPED, false); + } + + public void dispatchReallyStop() { + moveToState(Fragment.ACTIVITY_CREATED, false); + } + + public void dispatchDestroy() { + mDestroyed = true; + execPendingActions(); + moveToState(Fragment.INITIALIZING, false); + mActivity = null; + } + + public void dispatchConfigurationChanged(Configuration newConfig) { + if (mActive != null) { + for (int i=0; i newMenus = null; + if (mActive != null) { + for (int i=0; i(); + } + newMenus.add(f); + } + } + } + + if (mCreatedMenus != null) { + for (int i=0; i mSavedState = new ArrayList(); + private ArrayList mFragments = new ArrayList(); + private Fragment mCurrentPrimaryItem = null; + + public FragmentStatePagerAdapter(FragmentManager fm) { + mFragmentManager = fm; + } + + /** + * Return the Fragment associated with a specified position. + */ + public abstract Fragment getItem(int position); + + @Override + public void startUpdate(View container) { + } + + @Override + public Object instantiateItem(View container, int position) { + // If we already have this item instantiated, there is nothing + // to do. This can happen when we are restoring the entire pager + // from its saved state, where the fragment manager has already + // taken care of restoring the fragments we previously had instantiated. + if (mFragments.size() > position) { + Fragment f = mFragments.get(position); + if (f != null) { + return f; + } + } + + if (mCurTransaction == null) { + mCurTransaction = mFragmentManager.beginTransaction(); + } + + Fragment fragment = getItem(position); + if (DEBUG) Log.v(TAG, "Adding item #" + position + ": f=" + fragment); + if (mSavedState.size() > position) { + Fragment.SavedState fss = mSavedState.get(position); + if (fss != null) { + fragment.setInitialSavedState(fss); + } + } + while (mFragments.size() <= position) { + mFragments.add(null); + } + fragment.setMenuVisibility(false); + mFragments.set(position, fragment); + mCurTransaction.add(container.getId(), fragment); + + return fragment; + } + + @Override + public void destroyItem(View container, int position, Object object) { + Fragment fragment = (Fragment)object; + + if (mCurTransaction == null) { + mCurTransaction = mFragmentManager.beginTransaction(); + } + if (DEBUG) Log.v(TAG, "Removing item #" + position + ": f=" + object + + " v=" + ((Fragment)object).getView()); + while (mSavedState.size() <= position) { + mSavedState.add(null); + } + mSavedState.set(position, mFragmentManager.saveFragmentInstanceState(fragment)); + mFragments.set(position, null); + + mCurTransaction.remove(fragment); + } + + @Override + public void setPrimaryItem(View container, int position, Object object) { + Fragment fragment = (Fragment)object; + if (fragment != mCurrentPrimaryItem) { + if (mCurrentPrimaryItem != null) { + mCurrentPrimaryItem.setMenuVisibility(false); + } + if (fragment != null) { + fragment.setMenuVisibility(true); + } + mCurrentPrimaryItem = fragment; + } + } + + @Override + public void finishUpdate(View container) { + if (mCurTransaction != null) { + mCurTransaction.commitAllowingStateLoss(); + mCurTransaction = null; + mFragmentManager.executePendingTransactions(); + } + } + + @Override + public boolean isViewFromObject(View view, Object object) { + return ((Fragment)object).getView() == view; + } + + @Override + public Parcelable saveState() { + Bundle state = null; + if (mSavedState.size() > 0) { + state = new Bundle(); + Fragment.SavedState[] fss = new Fragment.SavedState[mSavedState.size()]; + mSavedState.toArray(fss); + state.putParcelableArray("states", fss); + } + for (int i=0; i keys = bundle.keySet(); + for (String key: keys) { + if (key.startsWith("f")) { + int index = Integer.parseInt(key.substring(1)); + Fragment f = mFragmentManager.getFragment(bundle, key); + if (f != null) { + while (mFragments.size() <= index) { + mFragments.add(null); + } + f.setMenuVisibility(false); + mFragments.set(index, f); + } else { + Log.w(TAG, "Bad fragment at key " + key); + } + } + } + } + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/app/FragmentTransaction.java b/actionbarsherlock/library/src/android/support/v4/app/FragmentTransaction.java new file mode 100644 index 000000000..252873ae1 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/app/FragmentTransaction.java @@ -0,0 +1,272 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.app; + +/** + * Static library support version of the framework's {@link android.app.FragmentTransaction}. + * Used to write apps that run on platforms prior to Android 3.0. When running + * on Android 3.0 or above, this implementation is still used; it does not try + * to switch to the framework's implementation. See the framework SDK + * documentation for a class overview. + */ +public abstract class FragmentTransaction { + /** + * Calls {@link #add(int, Fragment, String)} with a 0 containerViewId. + */ + public abstract FragmentTransaction add(Fragment fragment, String tag); + + /** + * Calls {@link #add(int, Fragment, String)} with a null tag. + */ + public abstract FragmentTransaction add(int containerViewId, Fragment fragment); + + /** + * Add a fragment to the activity state. This fragment may optionally + * also have its view (if {@link Fragment#onCreateView Fragment.onCreateView} + * returns non-null) into a container view of the activity. + * + * @param containerViewId Optional identifier of the container this fragment is + * to be placed in. If 0, it will not be placed in a container. + * @param fragment The fragment to be added. This fragment must not already + * be added to the activity. + * @param tag Optional tag name for the fragment, to later retrieve the + * fragment with {@link FragmentManager#findFragmentByTag(String) + * FragmentManager.findFragmentByTag(String)}. + * + * @return Returns the same FragmentTransaction instance. + */ + public abstract FragmentTransaction add(int containerViewId, Fragment fragment, String tag); + + /** + * Calls {@link #replace(int, Fragment, String)} with a null tag. + */ + public abstract FragmentTransaction replace(int containerViewId, Fragment fragment); + + /** + * Replace an existing fragment that was added to a container. This is + * essentially the same as calling {@link #remove(Fragment)} for all + * currently added fragments that were added with the same containerViewId + * and then {@link #add(int, Fragment, String)} with the same arguments + * given here. + * + * @param containerViewId Identifier of the container whose fragment(s) are + * to be replaced. + * @param fragment The new fragment to place in the container. + * @param tag Optional tag name for the fragment, to later retrieve the + * fragment with {@link FragmentManager#findFragmentByTag(String) + * FragmentManager.findFragmentByTag(String)}. + * + * @return Returns the same FragmentTransaction instance. + */ + public abstract FragmentTransaction replace(int containerViewId, Fragment fragment, String tag); + + /** + * Remove an existing fragment. If it was added to a container, its view + * is also removed from that container. + * + * @param fragment The fragment to be removed. + * + * @return Returns the same FragmentTransaction instance. + */ + public abstract FragmentTransaction remove(Fragment fragment); + + /** + * Hides an existing fragment. This is only relevant for fragments whose + * views have been added to a container, as this will cause the view to + * be hidden. + * + * @param fragment The fragment to be hidden. + * + * @return Returns the same FragmentTransaction instance. + */ + public abstract FragmentTransaction hide(Fragment fragment); + + /** + * Shows a previously hidden fragment. This is only relevant for fragments whose + * views have been added to a container, as this will cause the view to + * be shown. + * + * @param fragment The fragment to be shown. + * + * @return Returns the same FragmentTransaction instance. + */ + public abstract FragmentTransaction show(Fragment fragment); + + /** + * Detach the given fragment from the UI. This is the same state as + * when it is put on the back stack: the fragment is removed from + * the UI, however its state is still being actively managed by the + * fragment manager. When going into this state its view hierarchy + * is destroyed. + * + * @param fragment The fragment to be detached. + * + * @return Returns the same FragmentTransaction instance. + */ + public abstract FragmentTransaction detach(Fragment fragment); + + /** + * Re-attach a fragment after it had previously been deatched from + * the UI with {@link #detach(Fragment)}. This + * causes its view hierarchy to be re-created, attached to the UI, + * and displayed. + * + * @param fragment The fragment to be attached. + * + * @return Returns the same FragmentTransaction instance. + */ + public abstract FragmentTransaction attach(Fragment fragment); + + /** + * @return true if this transaction contains no operations, + * false otherwise. + */ + public abstract boolean isEmpty(); + + /** + * Bit mask that is set for all enter transitions. + */ + public static final int TRANSIT_ENTER_MASK = 0x1000; + + /** + * Bit mask that is set for all exit transitions. + */ + public static final int TRANSIT_EXIT_MASK = 0x2000; + + /** Not set up for a transition. */ + public static final int TRANSIT_UNSET = -1; + /** No animation for transition. */ + public static final int TRANSIT_NONE = 0; + /** Fragment is being added onto the stack */ + public static final int TRANSIT_FRAGMENT_OPEN = 1 | TRANSIT_ENTER_MASK; + /** Fragment is being removed from the stack */ + public static final int TRANSIT_FRAGMENT_CLOSE = 2 | TRANSIT_EXIT_MASK; + /** Fragment should simply fade in or out; that is, no strong navigation associated + * with it except that it is appearing or disappearing for some reason. */ + public static final int TRANSIT_FRAGMENT_FADE = 3 | TRANSIT_ENTER_MASK; + + /** + * Set specific animation resources to run for the fragments that are + * entering and exiting in this transaction. These animations will not be + * played when popping the back stack. + */ + public abstract FragmentTransaction setCustomAnimations(int enter, int exit); + + /** + * Set specific animation resources to run for the fragments that are + * entering and exiting in this transaction. The popEnter + * and popExit animations will be played for enter/exit + * operations specifically when popping the back stack. + */ + public abstract FragmentTransaction setCustomAnimations(int enter, int exit, + int popEnter, int popExit); + + /** + * Select a standard transition animation for this transaction. May be + * one of {@link #TRANSIT_NONE}, {@link #TRANSIT_FRAGMENT_OPEN}, + * or {@link #TRANSIT_FRAGMENT_CLOSE} + */ + public abstract FragmentTransaction setTransition(int transit); + + /** + * Set a custom style resource that will be used for resolving transit + * animations. + */ + public abstract FragmentTransaction setTransitionStyle(int styleRes); + + /** + * Add this transaction to the back stack. This means that the transaction + * will be remembered after it is committed, and will reverse its operation + * when later popped off the stack. + * + * @param name An optional name for this back stack state, or null. + */ + public abstract FragmentTransaction addToBackStack(String name); + + /** + * Returns true if this FragmentTransaction is allowed to be added to the back + * stack. If this method would return false, {@link #addToBackStack(String)} + * will throw {@link IllegalStateException}. + * + * @return True if {@link #addToBackStack(String)} is permitted on this transaction. + */ + public abstract boolean isAddToBackStackAllowed(); + + /** + * Disallow calls to {@link #addToBackStack(String)}. Any future calls to + * addToBackStack will throw {@link IllegalStateException}. If addToBackStack + * has already been called, this method will throw IllegalStateException. + */ + public abstract FragmentTransaction disallowAddToBackStack(); + + /** + * Set the full title to show as a bread crumb when this transaction + * is on the back stack, as used by {@link FragmentBreadCrumbs}. + * + * @param res A string resource containing the title. + */ + public abstract FragmentTransaction setBreadCrumbTitle(int res); + + /** + * Like {@link #setBreadCrumbTitle(int)} but taking a raw string; this + * method is not recommended, as the string can not be changed + * later if the locale changes. + */ + public abstract FragmentTransaction setBreadCrumbTitle(CharSequence text); + + /** + * Set the short title to show as a bread crumb when this transaction + * is on the back stack, as used by {@link FragmentBreadCrumbs}. + * + * @param res A string resource containing the title. + */ + public abstract FragmentTransaction setBreadCrumbShortTitle(int res); + + /** + * Like {@link #setBreadCrumbShortTitle(int)} but taking a raw string; this + * method is not recommended, as the string can not be changed + * later if the locale changes. + */ + public abstract FragmentTransaction setBreadCrumbShortTitle(CharSequence text); + + /** + * Schedules a commit of this transaction. The commit does + * not happen immediately; it will be scheduled as work on the main thread + * to be done the next time that thread is ready. + * + *

A transaction can only be committed with this method + * prior to its containing activity saving its state. If the commit is + * attempted after that point, an exception will be thrown. This is + * because the state after the commit can be lost if the activity needs to + * be restored from its state. See {@link #commitAllowingStateLoss()} for + * situations where it may be okay to lose the commit.

+ * + * @return Returns the identifier of this transaction's back stack entry, + * if {@link #addToBackStack(String)} had been called. Otherwise, returns + * a negative number. + */ + public abstract int commit(); + + /** + * Like {@link #commit} but allows the commit to be executed after an + * activity's state is saved. This is dangerous because the commit can + * be lost if the activity needs to later be restored from its state, so + * this should only be used for cases where it is okay for the UI state + * to change unexpectedly on the user. + */ + public abstract int commitAllowingStateLoss(); +} diff --git a/actionbarsherlock/library/src/android/support/v4/app/HCSparseArray.java b/actionbarsherlock/library/src/android/support/v4/app/HCSparseArray.java new file mode 100644 index 000000000..f6cf9fe26 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/app/HCSparseArray.java @@ -0,0 +1,360 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.app; + +/** + * A copy of Honeycomb's SparseArray, only so we can have the removeAt() method. + */ +public class HCSparseArray { + private static final Object DELETED = new Object(); + private boolean mGarbage = false; + + /** + * Creates a new SparseArray containing no mappings. + */ + public HCSparseArray() { + this(10); + } + + /** + * Creates a new SparseArray containing no mappings that will not + * require any additional memory allocation to store the specified + * number of mappings. + */ + public HCSparseArray(int initialCapacity) { + initialCapacity = idealIntArraySize(initialCapacity); + + mKeys = new int[initialCapacity]; + mValues = new Object[initialCapacity]; + mSize = 0; + } + + /** + * Gets the Object mapped from the specified key, or null + * if no such mapping has been made. + */ + public E get(int key) { + return get(key, null); + } + + /** + * Gets the Object mapped from the specified key, or the specified Object + * if no such mapping has been made. + */ + @SuppressWarnings("unchecked") + public E get(int key, E valueIfKeyNotFound) { + int i = binarySearch(mKeys, 0, mSize, key); + + if (i < 0 || mValues[i] == DELETED) { + return valueIfKeyNotFound; + } else { + return (E) mValues[i]; + } + } + + /** + * Removes the mapping from the specified key, if there was any. + */ + public void delete(int key) { + int i = binarySearch(mKeys, 0, mSize, key); + + if (i >= 0) { + if (mValues[i] != DELETED) { + mValues[i] = DELETED; + mGarbage = true; + } + } + } + + /** + * Alias for {@link #delete(int)}. + */ + public void remove(int key) { + delete(key); + } + + /** + * Removes the mapping at the specified index. + */ + public void removeAt(int index) { + if (mValues[index] != DELETED) { + mValues[index] = DELETED; + mGarbage = true; + } + } + + private void gc() { + // Log.e("SparseArray", "gc start with " + mSize); + + int n = mSize; + int o = 0; + int[] keys = mKeys; + Object[] values = mValues; + + for (int i = 0; i < n; i++) { + Object val = values[i]; + + if (val != DELETED) { + if (i != o) { + keys[o] = keys[i]; + values[o] = val; + } + + o++; + } + } + + mGarbage = false; + mSize = o; + + // Log.e("SparseArray", "gc end with " + mSize); + } + + /** + * Adds a mapping from the specified key to the specified value, + * replacing the previous mapping from the specified key if there + * was one. + */ + public void put(int key, E value) { + int i = binarySearch(mKeys, 0, mSize, key); + + if (i >= 0) { + mValues[i] = value; + } else { + i = ~i; + + if (i < mSize && mValues[i] == DELETED) { + mKeys[i] = key; + mValues[i] = value; + return; + } + + if (mGarbage && mSize >= mKeys.length) { + gc(); + + // Search again because indices may have changed. + i = ~binarySearch(mKeys, 0, mSize, key); + } + + if (mSize >= mKeys.length) { + int n = idealIntArraySize(mSize + 1); + + int[] nkeys = new int[n]; + Object[] nvalues = new Object[n]; + + // Log.e("SparseArray", "grow " + mKeys.length + " to " + n); + System.arraycopy(mKeys, 0, nkeys, 0, mKeys.length); + System.arraycopy(mValues, 0, nvalues, 0, mValues.length); + + mKeys = nkeys; + mValues = nvalues; + } + + if (mSize - i != 0) { + // Log.e("SparseArray", "move " + (mSize - i)); + System.arraycopy(mKeys, i, mKeys, i + 1, mSize - i); + System.arraycopy(mValues, i, mValues, i + 1, mSize - i); + } + + mKeys[i] = key; + mValues[i] = value; + mSize++; + } + } + + /** + * Returns the number of key-value mappings that this SparseArray + * currently stores. + */ + public int size() { + if (mGarbage) { + gc(); + } + + return mSize; + } + + /** + * Given an index in the range 0...size()-1, returns + * the key from the indexth key-value mapping that this + * SparseArray stores. + */ + public int keyAt(int index) { + if (mGarbage) { + gc(); + } + + return mKeys[index]; + } + + /** + * Given an index in the range 0...size()-1, returns + * the value from the indexth key-value mapping that this + * SparseArray stores. + */ + @SuppressWarnings("unchecked") + public E valueAt(int index) { + if (mGarbage) { + gc(); + } + + return (E) mValues[index]; + } + + /** + * Given an index in the range 0...size()-1, sets a new + * value for the indexth key-value mapping that this + * SparseArray stores. + */ + public void setValueAt(int index, E value) { + if (mGarbage) { + gc(); + } + + mValues[index] = value; + } + + /** + * Returns the index for which {@link #keyAt} would return the + * specified key, or a negative number if the specified + * key is not mapped. + */ + public int indexOfKey(int key) { + if (mGarbage) { + gc(); + } + + return binarySearch(mKeys, 0, mSize, key); + } + + /** + * Returns an index for which {@link #valueAt} would return the + * specified key, or a negative number if no keys map to the + * specified value. + * Beware that this is a linear search, unlike lookups by key, + * and that multiple keys can map to the same value and this will + * find only one of them. + */ + public int indexOfValue(E value) { + if (mGarbage) { + gc(); + } + + for (int i = 0; i < mSize; i++) + if (mValues[i] == value) + return i; + + return -1; + } + + /** + * Removes all key-value mappings from this SparseArray. + */ + public void clear() { + int n = mSize; + Object[] values = mValues; + + for (int i = 0; i < n; i++) { + values[i] = null; + } + + mSize = 0; + mGarbage = false; + } + + /** + * Puts a key/value pair into the array, optimizing for the case where + * the key is greater than all existing keys in the array. + */ + public void append(int key, E value) { + if (mSize != 0 && key <= mKeys[mSize - 1]) { + put(key, value); + return; + } + + if (mGarbage && mSize >= mKeys.length) { + gc(); + } + + int pos = mSize; + if (pos >= mKeys.length) { + int n = idealIntArraySize(pos + 1); + + int[] nkeys = new int[n]; + Object[] nvalues = new Object[n]; + + // Log.e("SparseArray", "grow " + mKeys.length + " to " + n); + System.arraycopy(mKeys, 0, nkeys, 0, mKeys.length); + System.arraycopy(mValues, 0, nvalues, 0, mValues.length); + + mKeys = nkeys; + mValues = nvalues; + } + + mKeys[pos] = key; + mValues[pos] = value; + mSize = pos + 1; + } + + private static int binarySearch(int[] a, int start, int len, int key) { + int high = start + len, low = start - 1, guess; + + while (high - low > 1) { + guess = (high + low) / 2; + + if (a[guess] < key) + low = guess; + else + high = guess; + } + + if (high == start + len) + return ~(start + len); + else if (a[high] == key) + return high; + else + return ~high; + } + + /*private void checkIntegrity() { + for (int i = 1; i < mSize; i++) { + if (mKeys[i] <= mKeys[i - 1]) { + for (int j = 0; j < mSize; j++) { + Log.e("FAIL", j + ": " + mKeys[j] + " -> " + mValues[j]); + } + + throw new RuntimeException(); + } + } + }*/ + + static int idealByteArraySize(int need) { + for (int i = 4; i < 32; i++) + if (need <= (1 << i) - 12) + return (1 << i) - 12; + + return need; + } + + static int idealIntArraySize(int need) { + return idealByteArraySize(need * 4) / 4; + } + + private int[] mKeys; + private Object[] mValues; + private int mSize; +} diff --git a/actionbarsherlock/library/src/android/support/v4/app/ListFragment.java b/actionbarsherlock/library/src/android/support/v4/app/ListFragment.java new file mode 100644 index 000000000..7f8666fff --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/app/ListFragment.java @@ -0,0 +1,375 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.app; + +import android.content.Context; +import android.os.Bundle; +import android.os.Handler; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.animation.AnimationUtils; +import android.widget.AdapterView; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.ListAdapter; +import android.widget.ListView; +import android.widget.ProgressBar; +import android.widget.TextView; + +/** + * Static library support version of the framework's {@link android.app.ListFragment}. + * Used to write apps that run on platforms prior to Android 3.0. When running + * on Android 3.0 or above, this implementation is still used; it does not try + * to switch to the framework's implementation. See the framework SDK + * documentation for a class overview. + */ +public class ListFragment extends Fragment { + static final int INTERNAL_EMPTY_ID = 0x00ff0001; + static final int INTERNAL_PROGRESS_CONTAINER_ID = 0x00ff0002; + static final int INTERNAL_LIST_CONTAINER_ID = 0x00ff0003; + + final private Handler mHandler = new Handler(); + + final private Runnable mRequestFocus = new Runnable() { + public void run() { + mList.focusableViewAvailable(mList); + } + }; + + final private AdapterView.OnItemClickListener mOnClickListener + = new AdapterView.OnItemClickListener() { + public void onItemClick(AdapterView parent, View v, int position, long id) { + onListItemClick((ListView)parent, v, position, id); + } + }; + + ListAdapter mAdapter; + ListView mList; + View mEmptyView; + TextView mStandardEmptyView; + View mProgressContainer; + View mListContainer; + CharSequence mEmptyText; + boolean mListShown; + + public ListFragment() { + } + + /** + * Provide default implementation to return a simple list view. Subclasses + * can override to replace with their own layout. If doing so, the + * returned view hierarchy must have a ListView whose id + * is {@link android.R.id#list android.R.id.list} and can optionally + * have a sibling view id {@link android.R.id#empty android.R.id.empty} + * that is to be shown when the list is empty. + * + *

If you are overriding this method with your own custom content, + * consider including the standard layout {@link android.R.layout#list_content} + * in your layout file, so that you continue to retain all of the standard + * behavior of ListFragment. In particular, this is currently the only + * way to have the built-in indeterminant progress state be shown. + */ + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + final Context context = getActivity(); + + FrameLayout root = new FrameLayout(context); + + // ------------------------------------------------------------------ + + LinearLayout pframe = new LinearLayout(context); + pframe.setId(INTERNAL_PROGRESS_CONTAINER_ID); + pframe.setOrientation(LinearLayout.VERTICAL); + pframe.setVisibility(View.GONE); + pframe.setGravity(Gravity.CENTER); + + ProgressBar progress = new ProgressBar(context, null, + android.R.attr.progressBarStyleLarge); + pframe.addView(progress, new FrameLayout.LayoutParams( + ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); + + root.addView(pframe, new FrameLayout.LayoutParams( + ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT)); + + // ------------------------------------------------------------------ + + FrameLayout lframe = new FrameLayout(context); + lframe.setId(INTERNAL_LIST_CONTAINER_ID); + + TextView tv = new TextView(context); + tv.setId(INTERNAL_EMPTY_ID); + tv.setGravity(Gravity.CENTER); + lframe.addView(tv, new FrameLayout.LayoutParams( + ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT)); + + ListView lv = new ListView(context); + lv.setId(android.R.id.list); + lv.setDrawSelectorOnTop(false); + lframe.addView(lv, new FrameLayout.LayoutParams( + ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT)); + + root.addView(lframe, new FrameLayout.LayoutParams( + ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT)); + + // ------------------------------------------------------------------ + + root.setLayoutParams(new FrameLayout.LayoutParams( + ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT)); + + return root; + } + + /** + * Attach to list view once the view hierarchy has been created. + */ + @Override + public void onViewCreated(View view, Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + ensureList(); + } + + /** + * Detach from list view. + */ + @Override + public void onDestroyView() { + mHandler.removeCallbacks(mRequestFocus); + mList = null; + mListShown = false; + mEmptyView = mProgressContainer = mListContainer = null; + mStandardEmptyView = null; + super.onDestroyView(); + } + + /** + * This method will be called when an item in the list is selected. + * Subclasses should override. Subclasses can call + * getListView().getItemAtPosition(position) if they need to access the + * data associated with the selected item. + * + * @param l The ListView where the click happened + * @param v The view that was clicked within the ListView + * @param position The position of the view in the list + * @param id The row id of the item that was clicked + */ + public void onListItemClick(ListView l, View v, int position, long id) { + } + + /** + * Provide the cursor for the list view. + */ + public void setListAdapter(ListAdapter adapter) { + boolean hadAdapter = mAdapter != null; + mAdapter = adapter; + if (mList != null) { + mList.setAdapter(adapter); + if (!mListShown && !hadAdapter) { + // The list was hidden, and previously didn't have an + // adapter. It is now time to show it. + setListShown(true, getView().getWindowToken() != null); + } + } + } + + /** + * Set the currently selected list item to the specified + * position with the adapter's data + * + * @param position + */ + public void setSelection(int position) { + ensureList(); + mList.setSelection(position); + } + + /** + * Get the position of the currently selected list item. + */ + public int getSelectedItemPosition() { + ensureList(); + return mList.getSelectedItemPosition(); + } + + /** + * Get the cursor row ID of the currently selected list item. + */ + public long getSelectedItemId() { + ensureList(); + return mList.getSelectedItemId(); + } + + /** + * Get the activity's list view widget. + */ + public ListView getListView() { + ensureList(); + return mList; + } + + /** + * The default content for a ListFragment has a TextView that can + * be shown when the list is empty. If you would like to have it + * shown, call this method to supply the text it should use. + */ + public void setEmptyText(CharSequence text) { + ensureList(); + if (mStandardEmptyView == null) { + throw new IllegalStateException("Can't be used with a custom content view"); + } + mStandardEmptyView.setText(text); + if (mEmptyText == null) { + mList.setEmptyView(mStandardEmptyView); + } + mEmptyText = text; + } + + /** + * Control whether the list is being displayed. You can make it not + * displayed if you are waiting for the initial data to show in it. During + * this time an indeterminant progress indicator will be shown instead. + * + *

Applications do not normally need to use this themselves. The default + * behavior of ListFragment is to start with the list not being shown, only + * showing it once an adapter is given with {@link #setListAdapter(ListAdapter)}. + * If the list at that point had not been shown, when it does get shown + * it will be do without the user ever seeing the hidden state. + * + * @param shown If true, the list view is shown; if false, the progress + * indicator. The initial value is true. + */ + public void setListShown(boolean shown) { + setListShown(shown, true); + } + + /** + * Like {@link #setListShown(boolean)}, but no animation is used when + * transitioning from the previous state. + */ + public void setListShownNoAnimation(boolean shown) { + setListShown(shown, false); + } + + /** + * Control whether the list is being displayed. You can make it not + * displayed if you are waiting for the initial data to show in it. During + * this time an indeterminant progress indicator will be shown instead. + * + * @param shown If true, the list view is shown; if false, the progress + * indicator. The initial value is true. + * @param animate If true, an animation will be used to transition to the + * new state. + */ + private void setListShown(boolean shown, boolean animate) { + ensureList(); + if (mProgressContainer == null) { + throw new IllegalStateException("Can't be used with a custom content view"); + } + if (mListShown == shown) { + return; + } + mListShown = shown; + if (shown) { + if (animate) { + mProgressContainer.startAnimation(AnimationUtils.loadAnimation( + getActivity(), android.R.anim.fade_out)); + mListContainer.startAnimation(AnimationUtils.loadAnimation( + getActivity(), android.R.anim.fade_in)); + } else { + mProgressContainer.clearAnimation(); + mListContainer.clearAnimation(); + } + mProgressContainer.setVisibility(View.GONE); + mListContainer.setVisibility(View.VISIBLE); + } else { + if (animate) { + mProgressContainer.startAnimation(AnimationUtils.loadAnimation( + getActivity(), android.R.anim.fade_in)); + mListContainer.startAnimation(AnimationUtils.loadAnimation( + getActivity(), android.R.anim.fade_out)); + } else { + mProgressContainer.clearAnimation(); + mListContainer.clearAnimation(); + } + mProgressContainer.setVisibility(View.VISIBLE); + mListContainer.setVisibility(View.GONE); + } + } + + /** + * Get the ListAdapter associated with this activity's ListView. + */ + public ListAdapter getListAdapter() { + return mAdapter; + } + + private void ensureList() { + if (mList != null) { + return; + } + View root = getView(); + if (root == null) { + throw new IllegalStateException("Content view not yet created"); + } + if (root instanceof ListView) { + mList = (ListView)root; + } else { + mStandardEmptyView = (TextView)root.findViewById(INTERNAL_EMPTY_ID); + if (mStandardEmptyView == null) { + mEmptyView = root.findViewById(android.R.id.empty); + } else { + mStandardEmptyView.setVisibility(View.GONE); + } + mProgressContainer = root.findViewById(INTERNAL_PROGRESS_CONTAINER_ID); + mListContainer = root.findViewById(INTERNAL_LIST_CONTAINER_ID); + View rawListView = root.findViewById(android.R.id.list); + if (!(rawListView instanceof ListView)) { + if (rawListView == null) { + throw new RuntimeException( + "Your content must have a ListView whose id attribute is " + + "'android.R.id.list'"); + } + throw new RuntimeException( + "Content has view with id attribute 'android.R.id.list' " + + "that is not a ListView class"); + } + mList = (ListView)rawListView; + if (mEmptyView != null) { + mList.setEmptyView(mEmptyView); + } else if (mEmptyText != null) { + mStandardEmptyView.setText(mEmptyText); + mList.setEmptyView(mStandardEmptyView); + } + } + mListShown = true; + mList.setOnItemClickListener(mOnClickListener); + if (mAdapter != null) { + ListAdapter adapter = mAdapter; + mAdapter = null; + setListAdapter(adapter); + } else { + // We are starting without an adapter, so assume we won't + // have our data right away and start with the progress indicator. + if (mProgressContainer != null) { + setListShown(false, false); + } + } + mHandler.post(mRequestFocus); + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/app/LoaderManager.java b/actionbarsherlock/library/src/android/support/v4/app/LoaderManager.java new file mode 100644 index 000000000..69258ce8c --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/app/LoaderManager.java @@ -0,0 +1,803 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.app; + +import android.os.Bundle; +import android.support.v4.content.Loader; +import android.support.v4.util.DebugUtils; +import android.util.Log; + +import java.io.FileDescriptor; +import java.io.PrintWriter; +import java.lang.reflect.Modifier; + +/** + * Static library support version of the framework's {@link android.app.LoaderManager}. + * Used to write apps that run on platforms prior to Android 3.0. When running + * on Android 3.0 or above, this implementation is still used; it does not try + * to switch to the framework's implementation. See the framework SDK + * documentation for a class overview. + * + *

Your activity must derive from {@link FragmentActivity} to use this. + */ +public abstract class LoaderManager { + /** + * Callback interface for a client to interact with the manager. + */ + public interface LoaderCallbacks { + /** + * Instantiate and return a new Loader for the given ID. + * + * @param id The ID whose loader is to be created. + * @param args Any arguments supplied by the caller. + * @return Return a new Loader instance that is ready to start loading. + */ + public Loader onCreateLoader(int id, Bundle args); + + /** + * Called when a previously created loader has finished its load. Note + * that normally an application is not allowed to commit fragment + * transactions while in this call, since it can happen after an + * activity's state is saved. See {@link FragmentManager#beginTransaction() + * FragmentManager.openTransaction()} for further discussion on this. + * + *

This function is guaranteed to be called prior to the release of + * the last data that was supplied for this Loader. At this point + * you should remove all use of the old data (since it will be released + * soon), but should not do your own release of the data since its Loader + * owns it and will take care of that. The Loader will take care of + * management of its data so you don't have to. In particular: + * + *

    + *
  • The Loader will monitor for changes to the data, and report + * them to you through new calls here. You should not monitor the + * data yourself. For example, if the data is a {@link android.database.Cursor} + * and you place it in a {@link android.widget.CursorAdapter}, use + * the {@link android.widget.CursorAdapter#CursorAdapter(android.content.Context, + * android.database.Cursor, int)} constructor without passing + * in either {@link android.widget.CursorAdapter#FLAG_AUTO_REQUERY} + * or {@link android.widget.CursorAdapter#FLAG_REGISTER_CONTENT_OBSERVER} + * (that is, use 0 for the flags argument). This prevents the CursorAdapter + * from doing its own observing of the Cursor, which is not needed since + * when a change happens you will get a new Cursor throw another call + * here. + *

  • The Loader will release the data once it knows the application + * is no longer using it. For example, if the data is + * a {@link android.database.Cursor} from a {@link android.content.CursorLoader}, + * you should not call close() on it yourself. If the Cursor is being placed in a + * {@link android.widget.CursorAdapter}, you should use the + * {@link android.widget.CursorAdapter#swapCursor(android.database.Cursor)} + * method so that the old Cursor is not closed. + *
+ * + * @param loader The Loader that has finished. + * @param data The data generated by the Loader. + */ + public void onLoadFinished(Loader loader, D data); + + /** + * Called when a previously created loader is being reset, and thus + * making its data unavailable. The application should at this point + * remove any references it has to the Loader's data. + * + * @param loader The Loader that is being reset. + */ + public void onLoaderReset(Loader loader); + } + + /** + * Ensures a loader is initialized and active. If the loader doesn't + * already exist, one is created and (if the activity/fragment is currently + * started) starts the loader. Otherwise the last created + * loader is re-used. + * + *

In either case, the given callback is associated with the loader, and + * will be called as the loader state changes. If at the point of call + * the caller is in its started state, and the requested loader + * already exists and has generated its data, then + * callback {@link LoaderCallbacks#onLoadFinished} will + * be called immediately (inside of this function), so you must be prepared + * for this to happen. + * + * @param id A unique identifier for this loader. Can be whatever you want. + * Identifiers are scoped to a particular LoaderManager instance. + * @param args Optional arguments to supply to the loader at construction. + * If a loader already exists (a new one does not need to be created), this + * parameter will be ignored and the last arguments continue to be used. + * @param callback Interface the LoaderManager will call to report about + * changes in the state of the loader. Required. + */ + public abstract Loader initLoader(int id, Bundle args, + LoaderManager.LoaderCallbacks callback); + + /** + * Starts a new or restarts an existing {@link android.content.Loader} in + * this manager, registers the callbacks to it, + * and (if the activity/fragment is currently started) starts loading it. + * If a loader with the same id has previously been + * started it will automatically be destroyed when the new loader completes + * its work. The callback will be delivered before the old loader + * is destroyed. + * + * @param id A unique identifier for this loader. Can be whatever you want. + * Identifiers are scoped to a particular LoaderManager instance. + * @param args Optional arguments to supply to the loader at construction. + * @param callback Interface the LoaderManager will call to report about + * changes in the state of the loader. Required. + */ + public abstract Loader restartLoader(int id, Bundle args, + LoaderManager.LoaderCallbacks callback); + + /** + * Stops and removes the loader with the given ID. If this loader + * had previously reported data to the client through + * {@link LoaderCallbacks#onLoadFinished(Loader, Object)}, a call + * will be made to {@link LoaderCallbacks#onLoaderReset(Loader)}. + */ + public abstract void destroyLoader(int id); + + /** + * Return the Loader with the given id or null if no matching Loader + * is found. + */ + public abstract Loader getLoader(int id); + + /** + * Print the LoaderManager's state into the given stream. + * + * @param prefix Text to print at the front of each line. + * @param fd The raw file descriptor that the dump is being sent to. + * @param writer A PrintWriter to which the dump is to be set. + * @param args Additional arguments to the dump request. + */ + public abstract void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args); + + /** + * Control whether the framework's internal loader manager debugging + * logs are turned on. If enabled, you will see output in logcat as + * the framework performs loader operations. + */ + public static void enableDebugLogging(boolean enabled) { + LoaderManagerImpl.DEBUG = enabled; + } +} + +class LoaderManagerImpl extends LoaderManager { + static final String TAG = "LoaderManager"; + static boolean DEBUG = false; + + // These are the currently active loaders. A loader is here + // from the time its load is started until it has been explicitly + // stopped or restarted by the application. + final HCSparseArray mLoaders = new HCSparseArray(); + + // These are previously run loaders. This list is maintained internally + // to avoid destroying a loader while an application is still using it. + // It allows an application to restart a loader, but continue using its + // previously run loader until the new loader's data is available. + final HCSparseArray mInactiveLoaders = new HCSparseArray(); + + SupportActivity mActivity; + boolean mStarted; + boolean mRetaining; + boolean mRetainingStarted; + + boolean mCreatingLoader; + + final class LoaderInfo implements Loader.OnLoadCompleteListener { + final int mId; + final Bundle mArgs; + LoaderManager.LoaderCallbacks mCallbacks; + Loader mLoader; + boolean mHaveData; + boolean mDeliveredData; + Object mData; + boolean mStarted; + boolean mRetaining; + boolean mRetainingStarted; + boolean mReportNextStart; + boolean mDestroyed; + boolean mListenerRegistered; + + LoaderInfo mPendingLoader; + + public LoaderInfo(int id, Bundle args, LoaderManager.LoaderCallbacks callbacks) { + mId = id; + mArgs = args; + mCallbacks = callbacks; + } + + void start() { + if (mRetaining && mRetainingStarted) { + // Our owner is started, but we were being retained from a + // previous instance in the started state... so there is really + // nothing to do here, since the loaders are still started. + mStarted = true; + return; + } + + if (mStarted) { + // If loader already started, don't restart. + return; + } + + mStarted = true; + + if (DEBUG) Log.v(TAG, " Starting: " + this); + if (mLoader == null && mCallbacks != null) { + mLoader = mCallbacks.onCreateLoader(mId, mArgs); + } + if (mLoader != null) { + if (mLoader.getClass().isMemberClass() + && !Modifier.isStatic(mLoader.getClass().getModifiers())) { + throw new IllegalArgumentException( + "Object returned from onCreateLoader must not be a non-static inner member class: " + + mLoader); + } + if (!mListenerRegistered) { + mLoader.registerListener(mId, this); + mListenerRegistered = true; + } + mLoader.startLoading(); + } + } + + void retain() { + if (DEBUG) Log.v(TAG, " Retaining: " + this); + mRetaining = true; + mRetainingStarted = mStarted; + mStarted = false; + mCallbacks = null; + } + + void finishRetain() { + if (mRetaining) { + if (DEBUG) Log.v(TAG, " Finished Retaining: " + this); + mRetaining = false; + if (mStarted != mRetainingStarted) { + if (!mStarted) { + // This loader was retained in a started state, but + // at the end of retaining everything our owner is + // no longer started... so make it stop. + stop(); + } + } + } + + if (mStarted && mHaveData && !mReportNextStart) { + // This loader has retained its data, either completely across + // a configuration change or just whatever the last data set + // was after being restarted from a stop, and now at the point of + // finishing the retain we find we remain started, have + // our data, and the owner has a new callback... so + // let's deliver the data now. + callOnLoadFinished(mLoader, mData); + } + } + + void reportStart() { + if (mStarted) { + if (mReportNextStart) { + mReportNextStart = false; + if (mHaveData) { + callOnLoadFinished(mLoader, mData); + } + } + } + } + + void stop() { + if (DEBUG) Log.v(TAG, " Stopping: " + this); + mStarted = false; + if (!mRetaining) { + if (mLoader != null && mListenerRegistered) { + // Let the loader know we're done with it + mListenerRegistered = false; + mLoader.unregisterListener(this); + mLoader.stopLoading(); + } + } + } + + void destroy() { + if (DEBUG) Log.v(TAG, " Destroying: " + this); + mDestroyed = true; + boolean needReset = mDeliveredData; + mDeliveredData = false; + if (mCallbacks != null && mLoader != null && mHaveData && needReset) { + if (DEBUG) Log.v(TAG, " Reseting: " + this); + String lastBecause = null; + if (mActivity != null) { + lastBecause = mActivity.getInternalCallbacks().getFragments().mNoTransactionsBecause; + mActivity.getInternalCallbacks().getFragments().mNoTransactionsBecause = "onLoaderReset"; + } + try { + mCallbacks.onLoaderReset(mLoader); + } finally { + if (mActivity != null) { + mActivity.getInternalCallbacks().getFragments().mNoTransactionsBecause = lastBecause; + } + } + } + mCallbacks = null; + mData = null; + mHaveData = false; + if (mLoader != null) { + if (mListenerRegistered) { + mListenerRegistered = false; + mLoader.unregisterListener(this); + } + mLoader.reset(); + } + if (mPendingLoader != null) { + mPendingLoader.destroy(); + } + } + + @Override public void onLoadComplete(Loader loader, Object data) { + if (DEBUG) Log.v(TAG, "onLoadComplete: " + this); + + if (mDestroyed) { + if (DEBUG) Log.v(TAG, " Ignoring load complete -- destroyed"); + return; + } + + if (mLoaders.get(mId) != this) { + // This data is not coming from the current active loader. + // We don't care about it. + if (DEBUG) Log.v(TAG, " Ignoring load complete -- not active"); + return; + } + + LoaderInfo pending = mPendingLoader; + if (pending != null) { + // There is a new request pending and we were just + // waiting for the old one to complete before starting + // it. So now it is time, switch over to the new loader. + if (DEBUG) Log.v(TAG, " Switching to pending loader: " + pending); + mPendingLoader = null; + mLoaders.put(mId, null); + destroy(); + installLoader(pending); + return; + } + + // Notify of the new data so the app can switch out the old data before + // we try to destroy it. + if (mData != data || !mHaveData) { + mData = data; + mHaveData = true; + if (mStarted) { + callOnLoadFinished(loader, data); + } + } + + //if (DEBUG) Log.v(TAG, " onLoadFinished returned: " + this); + + // We have now given the application the new loader with its + // loaded data, so it should have stopped using the previous + // loader. If there is a previous loader on the inactive list, + // clean it up. + LoaderInfo info = mInactiveLoaders.get(mId); + if (info != null && info != this) { + info.mDeliveredData = false; + info.destroy(); + mInactiveLoaders.remove(mId); + } + } + + void callOnLoadFinished(Loader loader, Object data) { + if (mCallbacks != null) { + String lastBecause = null; + if (mActivity != null) { + lastBecause = mActivity.getInternalCallbacks().getFragments().mNoTransactionsBecause; + mActivity.getInternalCallbacks().getFragments().mNoTransactionsBecause = "onLoadFinished"; + } + try { + if (DEBUG) Log.v(TAG, " onLoadFinished in " + loader + ": " + + loader.dataToString(data)); + mCallbacks.onLoadFinished(loader, data); + } finally { + if (mActivity != null) { + mActivity.getInternalCallbacks().getFragments().mNoTransactionsBecause = lastBecause; + } + } + mDeliveredData = true; + } + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(64); + sb.append("LoaderInfo{"); + sb.append(Integer.toHexString(System.identityHashCode(this))); + sb.append(" #"); + sb.append(mId); + sb.append(" : "); + DebugUtils.buildShortClassTag(mLoader, sb); + sb.append("}}"); + return sb.toString(); + } + + public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) { + writer.print(prefix); writer.print("mId="); writer.print(mId); + writer.print(" mArgs="); writer.println(mArgs); + writer.print(prefix); writer.print("mCallbacks="); writer.println(mCallbacks); + writer.print(prefix); writer.print("mLoader="); writer.println(mLoader); + if (mLoader != null) { + mLoader.dump(prefix + " ", fd, writer, args); + } + if (mHaveData || mDeliveredData) { + writer.print(prefix); writer.print("mHaveData="); writer.print(mHaveData); + writer.print(" mDeliveredData="); writer.println(mDeliveredData); + writer.print(prefix); writer.print("mData="); writer.println(mData); + } + writer.print(prefix); writer.print("mStarted="); writer.print(mStarted); + writer.print(" mReportNextStart="); writer.print(mReportNextStart); + writer.print(" mDestroyed="); writer.println(mDestroyed); + writer.print(prefix); writer.print("mRetaining="); writer.print(mRetaining); + writer.print(" mRetainingStarted="); writer.print(mRetainingStarted); + writer.print(" mListenerRegistered="); writer.println(mListenerRegistered); + if (mPendingLoader != null) { + writer.print(prefix); writer.println("Pending Loader "); + writer.print(mPendingLoader); writer.println(":"); + mPendingLoader.dump(prefix + " ", fd, writer, args); + } + } + } + + LoaderManagerImpl(SupportActivity activity, boolean started) { + mActivity = activity; + mStarted = started; + } + + void updateActivity(SupportActivity activity) { + mActivity = activity; + } + + private LoaderInfo createLoader(int id, Bundle args, + LoaderManager.LoaderCallbacks callback) { + LoaderInfo info = new LoaderInfo(id, args, (LoaderManager.LoaderCallbacks)callback); + Loader loader = callback.onCreateLoader(id, args); + info.mLoader = (Loader)loader; + return info; + } + + private LoaderInfo createAndInstallLoader(int id, Bundle args, + LoaderManager.LoaderCallbacks callback) { + try { + mCreatingLoader = true; + LoaderInfo info = createLoader(id, args, callback); + installLoader(info); + return info; + } finally { + mCreatingLoader = false; + } + } + + void installLoader(LoaderInfo info) { + mLoaders.put(info.mId, info); + if (mStarted) { + // The activity will start all existing loaders in it's onStart(), + // so only start them here if we're past that point of the activitiy's + // life cycle + info.start(); + } + } + + /** + * Call to initialize a particular ID with a Loader. If this ID already + * has a Loader associated with it, it is left unchanged and any previous + * callbacks replaced with the newly provided ones. If there is not currently + * a Loader for the ID, a new one is created and started. + * + *

This function should generally be used when a component is initializing, + * to ensure that a Loader it relies on is created. This allows it to re-use + * an existing Loader's data if there already is one, so that for example + * when an {@link Activity} is re-created after a configuration change it + * does not need to re-create its loaders. + * + *

Note that in the case where an existing Loader is re-used, the + * args given here will be ignored because you will + * continue using the previous Loader. + * + * @param id A unique (to this LoaderManager instance) identifier under + * which to manage the new Loader. + * @param args Optional arguments that will be propagated to + * {@link LoaderCallbacks#onCreateLoader(int, Bundle) LoaderCallbacks.onCreateLoader()}. + * @param callback Interface implementing management of this Loader. Required. + * Its onCreateLoader() method will be called while inside of the function to + * instantiate the Loader object. + */ + @SuppressWarnings("unchecked") + public Loader initLoader(int id, Bundle args, LoaderManager.LoaderCallbacks callback) { + if (mCreatingLoader) { + throw new IllegalStateException("Called while creating a loader"); + } + + LoaderInfo info = mLoaders.get(id); + + if (DEBUG) Log.v(TAG, "initLoader in " + this + ": args=" + args); + + if (info == null) { + // Loader doesn't already exist; create. + info = createAndInstallLoader(id, args, (LoaderManager.LoaderCallbacks)callback); + if (DEBUG) Log.v(TAG, " Created new loader " + info); + } else { + if (DEBUG) Log.v(TAG, " Re-using existing loader " + info); + info.mCallbacks = (LoaderManager.LoaderCallbacks)callback; + } + + if (info.mHaveData && mStarted) { + // If the loader has already generated its data, report it now. + info.callOnLoadFinished(info.mLoader, info.mData); + } + + return (Loader)info.mLoader; + } + + /** + * Call to re-create the Loader associated with a particular ID. If there + * is currently a Loader associated with this ID, it will be + * canceled/stopped/destroyed as appropriate. A new Loader with the given + * arguments will be created and its data delivered to you once available. + * + *

This function does some throttling of Loaders. If too many Loaders + * have been created for the given ID but not yet generated their data, + * new calls to this function will create and return a new Loader but not + * actually start it until some previous loaders have completed. + * + *

After calling this function, any previous Loaders associated with + * this ID will be considered invalid, and you will receive no further + * data updates from them. + * + * @param id A unique (to this LoaderManager instance) identifier under + * which to manage the new Loader. + * @param args Optional arguments that will be propagated to + * {@link LoaderCallbacks#onCreateLoader(int, Bundle) LoaderCallbacks.onCreateLoader()}. + * @param callback Interface implementing management of this Loader. Required. + * Its onCreateLoader() method will be called while inside of the function to + * instantiate the Loader object. + */ + @SuppressWarnings("unchecked") + public Loader restartLoader(int id, Bundle args, LoaderManager.LoaderCallbacks callback) { + if (mCreatingLoader) { + throw new IllegalStateException("Called while creating a loader"); + } + + LoaderInfo info = mLoaders.get(id); + if (DEBUG) Log.v(TAG, "restartLoader in " + this + ": args=" + args); + if (info != null) { + LoaderInfo inactive = mInactiveLoaders.get(id); + if (inactive != null) { + if (info.mHaveData) { + // This loader now has data... we are probably being + // called from within onLoadComplete, where we haven't + // yet destroyed the last inactive loader. So just do + // that now. + if (DEBUG) Log.v(TAG, " Removing last inactive loader: " + info); + inactive.mDeliveredData = false; + inactive.destroy(); + info.mLoader.abandon(); + mInactiveLoaders.put(id, info); + } else { + // We already have an inactive loader for this ID that we are + // waiting for! What to do, what to do... + if (!info.mStarted) { + // The current Loader has not been started... we thus + // have no reason to keep it around, so bam, slam, + // thank-you-ma'am. + if (DEBUG) Log.v(TAG, " Current loader is stopped; replacing"); + mLoaders.put(id, null); + info.destroy(); + } else { + // Now we have three active loaders... we'll queue + // up this request to be processed once one of the other loaders + // finishes. + if (info.mPendingLoader != null) { + if (DEBUG) Log.v(TAG, " Removing pending loader: " + info.mPendingLoader); + info.mPendingLoader.destroy(); + info.mPendingLoader = null; + } + if (DEBUG) Log.v(TAG, " Enqueuing as new pending loader"); + info.mPendingLoader = createLoader(id, args, + (LoaderManager.LoaderCallbacks)callback); + return (Loader)info.mPendingLoader.mLoader; + } + } + } else { + // Keep track of the previous instance of this loader so we can destroy + // it when the new one completes. + if (DEBUG) Log.v(TAG, " Making last loader inactive: " + info); + info.mLoader.abandon(); + mInactiveLoaders.put(id, info); + } + } + + info = createAndInstallLoader(id, args, (LoaderManager.LoaderCallbacks)callback); + return (Loader)info.mLoader; + } + + /** + * Rip down, tear apart, shred to pieces a current Loader ID. After returning + * from this function, any Loader objects associated with this ID are + * destroyed. Any data associated with them is destroyed. You better not + * be using it when you do this. + * @param id Identifier of the Loader to be destroyed. + */ + public void destroyLoader(int id) { + if (mCreatingLoader) { + throw new IllegalStateException("Called while creating a loader"); + } + + if (DEBUG) Log.v(TAG, "destroyLoader in " + this + " of " + id); + int idx = mLoaders.indexOfKey(id); + if (idx >= 0) { + LoaderInfo info = mLoaders.valueAt(idx); + mLoaders.removeAt(idx); + info.destroy(); + } + idx = mInactiveLoaders.indexOfKey(id); + if (idx >= 0) { + LoaderInfo info = mInactiveLoaders.valueAt(idx); + mInactiveLoaders.removeAt(idx); + info.destroy(); + } + } + + /** + * Return the most recent Loader object associated with the + * given ID. + */ + @SuppressWarnings("unchecked") + public Loader getLoader(int id) { + if (mCreatingLoader) { + throw new IllegalStateException("Called while creating a loader"); + } + + LoaderInfo loaderInfo = mLoaders.get(id); + if (loaderInfo != null) { + if (loaderInfo.mPendingLoader != null) { + return (Loader)loaderInfo.mPendingLoader.mLoader; + } + return (Loader)loaderInfo.mLoader; + } + return null; + } + + void doStart() { + if (DEBUG) Log.v(TAG, "Starting in " + this); + if (mStarted) { + RuntimeException e = new RuntimeException("here"); + e.fillInStackTrace(); + Log.w(TAG, "Called doStart when already started: " + this, e); + return; + } + + mStarted = true; + + // Call out to sub classes so they can start their loaders + // Let the existing loaders know that we want to be notified when a load is complete + for (int i = mLoaders.size()-1; i >= 0; i--) { + mLoaders.valueAt(i).start(); + } + } + + void doStop() { + if (DEBUG) Log.v(TAG, "Stopping in " + this); + if (!mStarted) { + RuntimeException e = new RuntimeException("here"); + e.fillInStackTrace(); + Log.w(TAG, "Called doStop when not started: " + this, e); + return; + } + + for (int i = mLoaders.size()-1; i >= 0; i--) { + mLoaders.valueAt(i).stop(); + } + mStarted = false; + } + + void doRetain() { + if (DEBUG) Log.v(TAG, "Retaining in " + this); + if (!mStarted) { + RuntimeException e = new RuntimeException("here"); + e.fillInStackTrace(); + Log.w(TAG, "Called doRetain when not started: " + this, e); + return; + } + + mRetaining = true; + mStarted = false; + for (int i = mLoaders.size()-1; i >= 0; i--) { + mLoaders.valueAt(i).retain(); + } + } + + void finishRetain() { + if (mRetaining) { + if (DEBUG) Log.v(TAG, "Finished Retaining in " + this); + + mRetaining = false; + for (int i = mLoaders.size()-1; i >= 0; i--) { + mLoaders.valueAt(i).finishRetain(); + } + } + } + + void doReportNextStart() { + for (int i = mLoaders.size()-1; i >= 0; i--) { + mLoaders.valueAt(i).mReportNextStart = true; + } + } + + void doReportStart() { + for (int i = mLoaders.size()-1; i >= 0; i--) { + mLoaders.valueAt(i).reportStart(); + } + } + + void doDestroy() { + if (!mRetaining) { + if (DEBUG) Log.v(TAG, "Destroying Active in " + this); + for (int i = mLoaders.size()-1; i >= 0; i--) { + mLoaders.valueAt(i).destroy(); + } + } + + if (DEBUG) Log.v(TAG, "Destroying Inactive in " + this); + for (int i = mInactiveLoaders.size()-1; i >= 0; i--) { + mInactiveLoaders.valueAt(i).destroy(); + } + mInactiveLoaders.clear(); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(128); + sb.append("LoaderManager{"); + sb.append(Integer.toHexString(System.identityHashCode(this))); + sb.append(" in "); + DebugUtils.buildShortClassTag(mActivity, sb); + sb.append("}}"); + return sb.toString(); + } + + @Override + public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) { + if (mLoaders.size() > 0) { + writer.print(prefix); writer.println("Active Loaders:"); + String innerPrefix = prefix + " "; + for (int i=0; i < mLoaders.size(); i++) { + LoaderInfo li = mLoaders.valueAt(i); + writer.print(prefix); writer.print(" #"); writer.print(mLoaders.keyAt(i)); + writer.print(": "); writer.println(li.toString()); + li.dump(innerPrefix, fd, writer, args); + } + } + if (mInactiveLoaders.size() > 0) { + writer.print(prefix); writer.println("Inactive Loaders:"); + String innerPrefix = prefix + " "; + for (int i=0; i < mInactiveLoaders.size(); i++) { + LoaderInfo li = mInactiveLoaders.valueAt(i); + writer.print(prefix); writer.print(" #"); writer.print(mInactiveLoaders.keyAt(i)); + writer.print(": "); writer.println(li.toString()); + li.dump(innerPrefix, fd, writer, args); + } + } + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/app/NoSaveStateFrameLayout.java b/actionbarsherlock/library/src/android/support/v4/app/NoSaveStateFrameLayout.java new file mode 100644 index 000000000..a2177e32b --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/app/NoSaveStateFrameLayout.java @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.app; + +import android.content.Context; +import android.os.Parcelable; +import android.util.SparseArray; +import android.view.View; +import android.view.ViewGroup; +import android.widget.FrameLayout; + +/** + * Pre-Honeycomb versions of the platform don't have View.setSaveFromParentEnabled(), + * so instead we insert this between the view and its parent. + */ +public class NoSaveStateFrameLayout extends FrameLayout { + static ViewGroup wrap(View child) { + NoSaveStateFrameLayout wrapper = new NoSaveStateFrameLayout(child.getContext()); + ViewGroup.LayoutParams childParams = child.getLayoutParams(); + if (childParams != null) { + wrapper.setLayoutParams(childParams); + } + NoSaveStateFrameLayout.LayoutParams lp = new NoSaveStateFrameLayout.LayoutParams( + ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT); + child.setLayoutParams(lp); + wrapper.addView(child); + return wrapper; + } + + public NoSaveStateFrameLayout(Context context) { + super(context); + } + + /** + * Override to prevent freezing of any child views. + */ + @Override + protected void dispatchSaveInstanceState(SparseArray container) { + dispatchFreezeSelfOnly(container); + } + + /** + * Override to prevent thawing of any child views. + */ + @Override + protected void dispatchRestoreInstanceState(SparseArray container) { + dispatchThawSelfOnly(container); + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/app/SuperNotCalledException.java b/actionbarsherlock/library/src/android/support/v4/app/SuperNotCalledException.java new file mode 100644 index 000000000..d306b9651 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/app/SuperNotCalledException.java @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.app; + +import android.util.AndroidRuntimeException; + +final class SuperNotCalledException extends AndroidRuntimeException { + private static final long serialVersionUID = -5247191382770859874L; + + public SuperNotCalledException(String msg) { + super(msg); + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/app/SupportActivity.java b/actionbarsherlock/library/src/android/support/v4/app/SupportActivity.java new file mode 100644 index 000000000..7bc29ff2d --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/app/SupportActivity.java @@ -0,0 +1,299 @@ +package android.support.v4.app; + +import java.io.File; +import java.io.FileDescriptor; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.PrintWriter; + +import com.actionbarsherlock.internal.app.SherlockActivity; + +import android.app.Activity; +import android.app.Application; +import android.app.PendingIntent; +import android.content.BroadcastReceiver; +import android.content.ComponentName; +import android.content.ContentResolver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.ServiceConnection; +import android.content.SharedPreferences; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.content.pm.PackageManager.NameNotFoundException; +import android.content.res.AssetManager; +import android.content.res.Configuration; +import android.content.res.Resources; +import android.content.res.TypedArray; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; +import android.support.v4.view.ActionMode; +import android.support.v4.view.Menu; +import android.support.v4.view.MenuItem; +import android.util.AttributeSet; +import android.view.ContextMenu; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.MenuInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.view.accessibility.AccessibilityEvent; + +/** + *

Instances of this interface represent an activity provided by the support + * library (e.g., {@link FragmentActivity}).

+ * + *

Provided are all of the methods which would be available if you were + * accessing the underlying activity directly and you can safely assume that + * any instances of this interface can be cast to an {@link Activity}. It is + * preferred, however, that you call {@link #asActivity()} instead.

+ */ +public interface SupportActivity extends SherlockActivity { + public static abstract class InternalCallbacks { + abstract void ensureSupportActionBarAttached(); + abstract Handler getHandler(); + abstract FragmentManagerImpl getFragments(); + abstract LoaderManagerImpl getLoaderManager(int index, boolean started, boolean create); + abstract void invalidateSupportFragmentIndex(int index); + abstract boolean getRetaining(); + } + + InternalCallbacks getInternalCallbacks(); + Activity asActivity(); + + /*** Activity methods ***/ + void addContentView(View view, ViewGroup.LayoutParams params); + void closeContextMenu(); + void closeOptionsMenu(); + PendingIntent createPendingResult(int requestCode, Intent data, int flags); + void dismissDialog(int id); + boolean dispatchKeyEvent(KeyEvent event); + boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event); + boolean dispatchTouchEvent(MotionEvent ev); + boolean dispatchTrackballEvent(MotionEvent ev); + View findViewById(int id); + void finish(); + void finishActivity(int requestCode); + void finishActivityFromChild(Activity child, int requestCode); + void finishFromChild(Activity child); + Application getApplication(); + ComponentName getCallingActivity(); + String getCallingPackage(); + int getChangingConfigurations(); + ComponentName getComponentName(); + View getCurrentFocus(); + Intent getIntent(); + Object getLastNonConfigurationInstance(); + LayoutInflater getLayoutInflater(); + String getLocalClassName(); + MenuInflater getMenuInflater(); + Activity getParent(); + SharedPreferences getPreferences(int mode); + int getRequestedOrientation(); + Object getSystemService(String name); + int getTaskId(); + CharSequence getTitle(); + int getTitleColor(); + int getVolumeControlStream(); + Window getWindow(); + WindowManager getWindowManager(); + boolean hasWindowFocus(); + boolean isChild(); + boolean isFinishing(); + boolean isTaskRoot(); + Cursor managedQuery(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder); + boolean moveTaskToBack(boolean nonRoot); + void onConfigurationChanged(Configuration newConfig); + void onContentChanged(); + boolean onContextItemSelected(android.view.MenuItem item); + void onContextMenuClosed(android.view.Menu menu); + void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo); + CharSequence onCreateDescription(); + boolean onCreateOptionsMenu(android.view.Menu menu); + boolean onCreatePanelMenu(int featureId, android.view.Menu menu); + View onCreatePanelView(int featureId); + boolean onCreateThumbnail(Bitmap outBitmap, Canvas canvas); + View onCreateView(String name, Context context, AttributeSet attrs); + boolean onKeyDown(int keyCode, KeyEvent event); + boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event); + boolean onKeyUp(int keyCode, KeyEvent event); + void onLowMemory(); + boolean onMenuItemSelected(int featureId, android.view.MenuItem item); + boolean onMenuOpened(int featureId, android.view.Menu menu); + boolean onOptionsItemSelected(android.view.MenuItem item); + void onOptionsMenuClosed(android.view.Menu menu); + void onPanelClosed(int featureId, android.view.Menu menu); + boolean onPrepareOptionsMenu(android.view.Menu menu); + boolean onPreparePanel(int featureId, View view, android.view.Menu menu); + Object onRetainNonConfigurationInstance(); + boolean onSearchRequested(); + boolean onTouchEvent(MotionEvent event); + boolean onTrackballEvent(MotionEvent event); + void onUserInteraction(); + void onWindowAttributesChanged(WindowManager.LayoutParams params); + void onWindowFocusChanged(boolean hasFocus); + void openContextMenu(View view); + void openOptionsMenu(); + void registerForContextMenu(View view); + void removeDialog(int id); + boolean requestWindowFeature(int featureId); + void runOnUiThread(Runnable action); + void setContentView(int layoutResId); + void setContentView(View view); + void setContentView(View view, ViewGroup.LayoutParams params); + void setDefaultKeyMode(int mode); + void setFeatureDrawable(int featureId, Drawable drawable); + void setFeatureDrawableAlpha(int featureId, int alpha); + void setFeatureDrawableResource(int featureId, int resId); + void setFeatureDrawableUri(int featureId, Uri uri); + void setIntent(Intent newIntent); + void setProgress(int progress); + void setProgressBarIndeterminate(boolean indeterminate); + void setProgressBarIndeterminateVisibility(boolean visible); + void setProgressBarVisibility(boolean visible); + void setRequestedOrientation(int requestedOrientation); + void setResult(int resultCode); + void setResult(int resultCode, Intent data); + void setSecondaryProgress(int secondaryProgress); + void setTitle(int titleId); + void setTitle(CharSequence title); + void setTitleColor(int textColor); + void setVisible(boolean visible); + void setVolumeControlStream(int streamType); + void showDialog(int id); + void startActivity(Intent intent); + void startActivityForResult(Intent intent, int requestCode); + void startActivityFromChild(Activity child, Intent intent, int requestCode); + boolean startActivityIfNeeded(Intent intent, int requestCode); + void startManagingCursor(Cursor c); + boolean startNextMatchingActivity(Intent intent); + void startSearch(String initialQuery, boolean selectInitialQuery, Bundle appSearchDate, boolean globalSearch); + void stopManagingCursor(Cursor c); + void takeKeyEvents(boolean get); + void unregisterForContextMenu(View view); + + /*** ContextThemeWrapper methods ***/ + //Object getSystemService(String name); + Resources.Theme getTheme(); + void setTheme(int resId); + + /*** ContextWrapper methods ***/ + //void attachBaseContext(Context base); + boolean bindService(Intent service, ServiceConnection conn, int flags); + int checkCallingOrSelfPermission(String permission); + int checkCallingOrSelfUriPermission(Uri uri, int modeFlags); + int checkCallingPermission(String permission); + int checkCallingUriPermission(Uri uri, int modeFlags); + int checkPermission(String permission, int pid, int uid); + int checkUriPermission(Uri uri, int pid, int uid, int modeFlags); + int checkUriPermission(Uri uri, String readPermission, String writePermission, int pid, int uid, int modeFlags); + @Deprecated void clearWallpaper() throws IOException; + Context createPackageContext(String packageName, int flags) throws NameNotFoundException; + String[] databaseList(); + boolean deleteDatabase(String name); + boolean deleteFile(String name); + void enforceCallingOrSelfPermission(String permission, String message); + void enforceCallingOrSelfUriPermission(Uri uri, int modeFlags, String message); + void enforceCallingPermission(String permission, String message); + void enforceCallingUriPermission(Uri uri, int modeFlags, String message); + void enforcePermission(String permission, int pid, int uid, String message); + void enforceUriPermission(Uri uri, int pid, int uid, int modeFlags, String message); + void enforceUriPermission(Uri uri, String readPermission, String writePermission, int pid, int uid, int modeFlags, String message); + String[] fileList(); + Context getApplicationContext(); + ApplicationInfo getApplicationInfo(); + AssetManager getAssets(); + Context getBaseContext(); + File getCacheDir(); + ClassLoader getClassLoader(); + ContentResolver getContentResolver(); + File getDatabasePath(String name); + File getDir(String name, int mode); + File getFileStreamPath(String name); + File getFilesDir(); + Looper getMainLooper(); + String getPackageCodePath(); + PackageManager getPackageManager(); + String getPackageName(); + String getPackageResourcePath(); + Resources getResources(); + SharedPreferences getSharedPreferences(String name, int mode); + //Object getSystemService(String name); + //Resources.Theme getTheme(); + Drawable getWallpaper(); + int getWallpaperDesiredMinimumHeight(); + int getWallpaperDesiredMinimumWidth(); + void grantUriPermission(String toPackage, Uri uri, int modeFlags); + boolean isRestricted(); + FileInputStream openFileInput(String name) throws FileNotFoundException; + FileOutputStream openFileOutput(String name, int mode) throws FileNotFoundException; + SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory); + @Deprecated Drawable peekWallpaper(); + Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter); + Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter, String broadcastPermission, Handler scheduler); + void removeStickyBroadcast(Intent intent); + void revokeUriPermission(Uri uri, int modeFlags); + void sendBroadcast(Intent intent); + void sendBroadcast(Intent intent, String receiverPermission); + void sendOrderedBroadcast(Intent intent, String receiverPermission, BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, Bundle initialExtras); + void sendOrderedBroadcast(Intent intent, String receiverPermission); + void sendStickyBroadcast(Intent intent); + //void setTheme(int resid); + void setWallpaper(Bitmap bitmap) throws IOException; + void setWallpaper(InputStream data) throws IOException; + //void startActivity(Intent intent); + boolean startInstrumentation(ComponentName className, String profileFile, Bundle arguments); + ComponentName startService(Intent service); + boolean stopService(Intent name); + void unbindService(ServiceConnection conn); + void unregisterReceiver(BroadcastReceiver receiver); + + /*** Context methods ***/ + String getString(int resId); + String getString(int resId, Object... formatArgs); + CharSequence getText(int resId); + //boolean isRestricted(); + TypedArray obtainStyledAttributes(int[] attrs); + TypedArray obtainStyledAttributes(AttributeSet set, int[] attrs); + TypedArray obtainStyledAttributes(int resId, int[] attrs); + TypedArray obtainStyledAttributes(AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes); + + /*** Activity methods (emulated API 5+) ***/ + void onBackPressed(); + + /*** Activity methods (emulated API 11+) ***/ + void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args); + ActionBar getSupportActionBar(); //getActionBar() + FragmentManager getSupportFragmentManager(); //getFragmentManager() + LoaderManager getSupportLoaderManager(); //getLoaderManager() + void invalidateOptionsMenu(); + void onActionModeFinished(ActionMode mode); + void onActionModeStarted(ActionMode mode); + void onAttachFragment(Fragment fragment); + boolean onCreateOptionsMenu(Menu menu); + boolean onMenuItemSelected(int featureId, MenuItem item); + boolean onOptionsItemSelected(MenuItem item); + boolean onPrepareOptionsMenu(Menu menu); + ActionMode onWindowStartingActionMode(ActionMode.Callback callback); + void recreate(); + ActionMode startActionMode(ActionMode.Callback callback); + void startActivityFromFragment(Fragment fragment, Intent intent, int requestCode); + + /*** Parallel helper methods ***/ + boolean requestWindowFeature(long featureId); + void setProgressBarIndeterminateVisibility(Boolean visible); +} diff --git a/actionbarsherlock/library/src/android/support/v4/content/AsyncTaskLoader.java b/actionbarsherlock/library/src/android/support/v4/content/AsyncTaskLoader.java new file mode 100644 index 000000000..e52d0893b --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/content/AsyncTaskLoader.java @@ -0,0 +1,284 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.content; + +import android.content.Context; +import android.os.Handler; +import android.os.SystemClock; +import android.support.v4.util.TimeUtils; +import android.util.Log; + +import java.io.FileDescriptor; +import java.io.PrintWriter; +import java.util.concurrent.CountDownLatch; + +/** + * Static library support version of the framework's {@link android.content.AsyncTaskLoader}. + * Used to write apps that run on platforms prior to Android 3.0. When running + * on Android 3.0 or above, this implementation is still used; it does not try + * to switch to the framework's implementation. See the framework SDK + * documentation for a class overview. + */ +public abstract class AsyncTaskLoader extends Loader { + static final String TAG = "AsyncTaskLoader"; + static final boolean DEBUG = false; + + final class LoadTask extends ModernAsyncTask implements Runnable { + + D result; + boolean waiting; + + private CountDownLatch done = new CountDownLatch(1); + + /* Runs on a worker thread */ + @Override + protected D doInBackground(Void... params) { + if (DEBUG) Log.v(TAG, this + " >>> doInBackground"); + result = AsyncTaskLoader.this.onLoadInBackground(); + if (DEBUG) Log.v(TAG, this + " <<< doInBackground"); + return result; + } + + /* Runs on the UI thread */ + @Override + protected void onPostExecute(D data) { + if (DEBUG) Log.v(TAG, this + " onPostExecute"); + try { + AsyncTaskLoader.this.dispatchOnLoadComplete(this, data); + } finally { + done.countDown(); + } + } + + @Override + protected void onCancelled() { + if (DEBUG) Log.v(TAG, this + " onCancelled"); + try { + AsyncTaskLoader.this.dispatchOnCancelled(this, result); + } finally { + done.countDown(); + } + } + + @Override + public void run() { + waiting = false; + AsyncTaskLoader.this.executePendingTask(); + } + } + + volatile LoadTask mTask; + volatile LoadTask mCancellingTask; + + long mUpdateThrottle; + long mLastLoadCompleteTime = -10000; + Handler mHandler; + + public AsyncTaskLoader(Context context) { + super(context); + } + + /** + * Set amount to throttle updates by. This is the minimum time from + * when the last {@link #onLoadInBackground()} call has completed until + * a new load is scheduled. + * + * @param delayMS Amount of delay, in milliseconds. + */ + public void setUpdateThrottle(long delayMS) { + mUpdateThrottle = delayMS; + if (delayMS != 0) { + mHandler = new Handler(); + } + } + + @Override + protected void onForceLoad() { + super.onForceLoad(); + cancelLoad(); + mTask = new LoadTask(); + if (DEBUG) Log.v(TAG, "Preparing load: mTask=" + mTask); + executePendingTask(); + } + + /** + * Attempt to cancel the current load task. See {@link AsyncTask#cancel(boolean)} + * for more info. Must be called on the main thread of the process. + * + *

Cancelling is not an immediate operation, since the load is performed + * in a background thread. If there is currently a load in progress, this + * method requests that the load be cancelled, and notes this is the case; + * once the background thread has completed its work its remaining state + * will be cleared. If another load request comes in during this time, + * it will be held until the cancelled load is complete. + * + * @return Returns false if the task could not be cancelled, + * typically because it has already completed normally, or + * because {@link #startLoading()} hasn't been called; returns + * true otherwise. + */ + public boolean cancelLoad() { + if (DEBUG) Log.v(TAG, "cancelLoad: mTask=" + mTask); + if (mTask != null) { + if (mCancellingTask != null) { + // There was a pending task already waiting for a previous + // one being canceled; just drop it. + if (DEBUG) Log.v(TAG, + "cancelLoad: still waiting for cancelled task; dropping next"); + if (mTask.waiting) { + mTask.waiting = false; + mHandler.removeCallbacks(mTask); + } + mTask = null; + return false; + } else if (mTask.waiting) { + // There is a task, but it is waiting for the time it should + // execute. We can just toss it. + if (DEBUG) Log.v(TAG, "cancelLoad: task is waiting, dropping it"); + mTask.waiting = false; + mHandler.removeCallbacks(mTask); + mTask = null; + return false; + } else { + boolean cancelled = mTask.cancel(false); + if (DEBUG) Log.v(TAG, "cancelLoad: cancelled=" + cancelled); + if (cancelled) { + mCancellingTask = mTask; + } + mTask = null; + return cancelled; + } + } + return false; + } + + /** + * Called if the task was canceled before it was completed. Gives the class a chance + * to properly dispose of the result. + */ + public void onCanceled(D data) { + } + + void executePendingTask() { + if (mCancellingTask == null && mTask != null) { + if (mTask.waiting) { + mTask.waiting = false; + mHandler.removeCallbacks(mTask); + } + if (mUpdateThrottle > 0) { + long now = SystemClock.uptimeMillis(); + if (now < (mLastLoadCompleteTime+mUpdateThrottle)) { + // Not yet time to do another load. + if (DEBUG) Log.v(TAG, "Waiting until " + + (mLastLoadCompleteTime+mUpdateThrottle) + + " to execute: " + mTask); + mTask.waiting = true; + mHandler.postAtTime(mTask, mLastLoadCompleteTime+mUpdateThrottle); + return; + } + } + if (DEBUG) Log.v(TAG, "Executing: " + mTask); + mTask.executeOnExecutor(ModernAsyncTask.THREAD_POOL_EXECUTOR, (Void[]) null); + } + } + + void dispatchOnCancelled(LoadTask task, D data) { + onCanceled(data); + if (mCancellingTask == task) { + if (DEBUG) Log.v(TAG, "Cancelled task is now canceled!"); + mLastLoadCompleteTime = SystemClock.uptimeMillis(); + mCancellingTask = null; + executePendingTask(); + } + } + + void dispatchOnLoadComplete(LoadTask task, D data) { + if (mTask != task) { + if (DEBUG) Log.v(TAG, "Load complete of old task, trying to cancel"); + dispatchOnCancelled(task, data); + } else { + if (isAbandoned()) { + // This cursor has been abandoned; just cancel the new data. + onCanceled(data); + } else { + mLastLoadCompleteTime = SystemClock.uptimeMillis(); + mTask = null; + if (DEBUG) Log.v(TAG, "Delivering result"); + deliverResult(data); + } + } + } + + /** + */ + public abstract D loadInBackground(); + + /** + * Called on a worker thread to perform the actual load. Implementations should not deliver the + * result directly, but should return them from this method, which will eventually end up + * calling {@link #deliverResult} on the UI thread. If implementations need to process + * the results on the UI thread they may override {@link #deliverResult} and do so + * there. + * + * @return Implementations must return the result of their load operation. + */ + protected D onLoadInBackground() { + return loadInBackground(); + } + + /** + * Locks the current thread until the loader completes the current load + * operation. Returns immediately if there is no load operation running. + * Should not be called from the UI thread: calling it from the UI + * thread would cause a deadlock. + *

+ * Use for testing only. Never call this from a UI thread. + * + * @hide + */ + public void waitForLoader() { + LoadTask task = mTask; + if (task != null) { + try { + task.done.await(); + } catch (InterruptedException e) { + // Ignore + } + } + } + + @Override + public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) { + super.dump(prefix, fd, writer, args); + if (mTask != null) { + writer.print(prefix); writer.print("mTask="); writer.print(mTask); + writer.print(" waiting="); writer.println(mTask.waiting); + } + if (mCancellingTask != null) { + writer.print(prefix); writer.print("mCancellingTask="); writer.print(mCancellingTask); + writer.print(" waiting="); writer.println(mCancellingTask.waiting); + } + if (mUpdateThrottle != 0) { + writer.print(prefix); writer.print("mUpdateThrottle="); + TimeUtils.formatDuration(mUpdateThrottle, writer); + writer.print(" mLastLoadCompleteTime="); + TimeUtils.formatDuration(mLastLoadCompleteTime, + SystemClock.uptimeMillis(), writer); + writer.println(); + } + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/content/CursorLoader.java b/actionbarsherlock/library/src/android/support/v4/content/CursorLoader.java new file mode 100644 index 000000000..51ad8b54e --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/content/CursorLoader.java @@ -0,0 +1,215 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.content; + +import android.content.Context; +import android.database.ContentObserver; +import android.database.Cursor; +import android.net.Uri; + +import java.io.FileDescriptor; +import java.io.PrintWriter; +import java.util.Arrays; + +/** + * Static library support version of the framework's {@link android.content.CursorLoader}. + * Used to write apps that run on platforms prior to Android 3.0. When running + * on Android 3.0 or above, this implementation is still used; it does not try + * to switch to the framework's implementation. See the framework SDK + * documentation for a class overview. + */ +public class CursorLoader extends AsyncTaskLoader { + final ForceLoadContentObserver mObserver; + + Uri mUri; + String[] mProjection; + String mSelection; + String[] mSelectionArgs; + String mSortOrder; + + Cursor mCursor; + + /* Runs on a worker thread */ + @Override + public Cursor loadInBackground() { + Cursor cursor = getContext().getContentResolver().query(mUri, mProjection, mSelection, + mSelectionArgs, mSortOrder); + if (cursor != null) { + // Ensure the cursor window is filled + cursor.getCount(); + registerContentObserver(cursor, mObserver); + } + return cursor; + } + + /** + * Registers an observer to get notifications from the content provider + * when the cursor needs to be refreshed. + */ + void registerContentObserver(Cursor cursor, ContentObserver observer) { + cursor.registerContentObserver(mObserver); + } + + /* Runs on the UI thread */ + @Override + public void deliverResult(Cursor cursor) { + if (isReset()) { + // An async query came in while the loader is stopped + if (cursor != null) { + cursor.close(); + } + return; + } + Cursor oldCursor = mCursor; + mCursor = cursor; + + if (isStarted()) { + super.deliverResult(cursor); + } + + if (oldCursor != null && oldCursor != cursor && !oldCursor.isClosed()) { + oldCursor.close(); + } + } + + /** + * Creates an empty unspecified CursorLoader. You must follow this with + * calls to {@link #setUri(Uri)}, {@link #setSelection(String)}, etc + * to specify the query to perform. + */ + public CursorLoader(Context context) { + super(context); + mObserver = new ForceLoadContentObserver(); + } + + /** + * Creates a fully-specified CursorLoader. See + * {@link ContentResolver#query(Uri, String[], String, String[], String) + * ContentResolver.query()} for documentation on the meaning of the + * parameters. These will be passed as-is to that call. + */ + public CursorLoader(Context context, Uri uri, String[] projection, String selection, + String[] selectionArgs, String sortOrder) { + super(context); + mObserver = new ForceLoadContentObserver(); + mUri = uri; + mProjection = projection; + mSelection = selection; + mSelectionArgs = selectionArgs; + mSortOrder = sortOrder; + } + + /** + * Starts an asynchronous load of the contacts list data. When the result is ready the callbacks + * will be called on the UI thread. If a previous load has been completed and is still valid + * the result may be passed to the callbacks immediately. + * + * Must be called from the UI thread + */ + @Override + protected void onStartLoading() { + if (mCursor != null) { + deliverResult(mCursor); + } + if (takeContentChanged() || mCursor == null) { + forceLoad(); + } + } + + /** + * Must be called from the UI thread + */ + @Override + protected void onStopLoading() { + // Attempt to cancel the current load task if possible. + cancelLoad(); + } + + @Override + public void onCanceled(Cursor cursor) { + if (cursor != null && !cursor.isClosed()) { + cursor.close(); + } + } + + @Override + protected void onReset() { + super.onReset(); + + // Ensure the loader is stopped + onStopLoading(); + + if (mCursor != null && !mCursor.isClosed()) { + mCursor.close(); + } + mCursor = null; + } + + public Uri getUri() { + return mUri; + } + + public void setUri(Uri uri) { + mUri = uri; + } + + public String[] getProjection() { + return mProjection; + } + + public void setProjection(String[] projection) { + mProjection = projection; + } + + public String getSelection() { + return mSelection; + } + + public void setSelection(String selection) { + mSelection = selection; + } + + public String[] getSelectionArgs() { + return mSelectionArgs; + } + + public void setSelectionArgs(String[] selectionArgs) { + mSelectionArgs = selectionArgs; + } + + public String getSortOrder() { + return mSortOrder; + } + + public void setSortOrder(String sortOrder) { + mSortOrder = sortOrder; + } + + @Override + public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) { + super.dump(prefix, fd, writer, args); + writer.print(prefix); writer.print("mUri="); writer.println(mUri); + writer.print(prefix); writer.print("mProjection="); + writer.println(Arrays.toString(mProjection)); + writer.print(prefix); writer.print("mSelection="); writer.println(mSelection); + writer.print(prefix); writer.print("mSelectionArgs="); + writer.println(Arrays.toString(mSelectionArgs)); + writer.print(prefix); writer.print("mSortOrder="); writer.println(mSortOrder); + writer.print(prefix); writer.print("mCursor="); writer.println(mCursor); + writer.print(prefix); writer.print("mContentChanged="); writer.println(mContentChanged); + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/content/Loader.java b/actionbarsherlock/library/src/android/support/v4/content/Loader.java new file mode 100644 index 000000000..b9f2c6a87 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/content/Loader.java @@ -0,0 +1,358 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.content; + +import android.content.Context; +import android.database.ContentObserver; +import android.os.Handler; +import android.support.v4.util.DebugUtils; + +import java.io.FileDescriptor; +import java.io.PrintWriter; + +/** + * Static library support version of the framework's {@link android.content.Loader}. + * Used to write apps that run on platforms prior to Android 3.0. When running + * on Android 3.0 or above, this implementation is still used; it does not try + * to switch to the framework's implementation. See the framework SDK + * documentation for a class overview. + */ +public class Loader { + int mId; + OnLoadCompleteListener mListener; + Context mContext; + boolean mStarted = false; + boolean mAbandoned = false; + boolean mReset = true; + boolean mContentChanged = false; + + public final class ForceLoadContentObserver extends ContentObserver { + public ForceLoadContentObserver() { + super(new Handler()); + } + + @Override + public boolean deliverSelfNotifications() { + return true; + } + + @Override + public void onChange(boolean selfChange) { + onContentChanged(); + } + } + + public interface OnLoadCompleteListener { + /** + * Called on the thread that created the Loader when the load is complete. + * + * @param loader the loader that completed the load + * @param data the result of the load + */ + public void onLoadComplete(Loader loader, D data); + } + + /** + * Stores away the application context associated with context. Since Loaders can be used + * across multiple activities it's dangerous to store the context directly. + * + * @param context used to retrieve the application context. + */ + public Loader(Context context) { + mContext = context.getApplicationContext(); + } + + /** + * Sends the result of the load to the registered listener. Should only be called by subclasses. + * + * Must be called from the process's main thread. + * + * @param data the result of the load + */ + public void deliverResult(D data) { + if (mListener != null) { + mListener.onLoadComplete(this, data); + } + } + + /** + * @return an application context retrieved from the Context passed to the constructor. + */ + public Context getContext() { + return mContext; + } + + /** + * @return the ID of this loader + */ + public int getId() { + return mId; + } + + /** + * Registers a class that will receive callbacks when a load is complete. + * The callback will be called on the process's main thread so it's safe to + * pass the results to widgets. + * + *

Must be called from the process's main thread. + */ + public void registerListener(int id, OnLoadCompleteListener listener) { + if (mListener != null) { + throw new IllegalStateException("There is already a listener registered"); + } + mListener = listener; + mId = id; + } + + /** + * Remove a listener that was previously added with {@link #registerListener}. + * + * Must be called from the process's main thread. + */ + public void unregisterListener(OnLoadCompleteListener listener) { + if (mListener == null) { + throw new IllegalStateException("No listener register"); + } + if (mListener != listener) { + throw new IllegalArgumentException("Attempting to unregister the wrong listener"); + } + mListener = null; + } + + /** + * Return whether this load has been started. That is, its {@link #startLoading()} + * has been called and no calls to {@link #stopLoading()} or + * {@link #reset()} have yet been made. + */ + public boolean isStarted() { + return mStarted; + } + + /** + * Return whether this loader has been abandoned. In this state, the + * loader must not report any new data, and must keep + * its last reported data valid until it is finally reset. + */ + public boolean isAbandoned() { + return mAbandoned; + } + + /** + * Return whether this load has been reset. That is, either the loader + * has not yet been started for the first time, or its {@link #reset()} + * has been called. + */ + public boolean isReset() { + return mReset; + } + + /** + * Starts an asynchronous load of the Loader's data. When the result + * is ready the callbacks will be called on the process's main thread. + * If a previous load has been completed and is still valid + * the result may be passed to the callbacks immediately. + * The loader will monitor the source of + * the data set and may deliver future callbacks if the source changes. + * Calling {@link #stopLoading} will stop the delivery of callbacks. + * + *

This updates the Loader's internal state so that + * {@link #isStarted()} and {@link #isReset()} will return the correct + * values, and then calls the implementation's {@link #onStartLoading()}. + * + *

Must be called from the process's main thread. + */ + public final void startLoading() { + mStarted = true; + mReset = false; + mAbandoned = false; + onStartLoading(); + } + + /** + * Subclasses must implement this to take care of loading their data, + * as per {@link #startLoading()}. This is not called by clients directly, + * but as a result of a call to {@link #startLoading()}. + */ + protected void onStartLoading() { + } + + /** + * Force an asynchronous load. Unlike {@link #startLoading()} this will ignore a previously + * loaded data set and load a new one. This simply calls through to the + * implementation's {@link #onForceLoad()}. You generally should only call this + * when the loader is started -- that is, {@link #isStarted()} returns true. + * + *

Must be called from the process's main thread. + */ + public void forceLoad() { + onForceLoad(); + } + + /** + * Subclasses must implement this to take care of requests to {@link #forceLoad()}. + * This will always be called from the process's main thread. + */ + protected void onForceLoad() { + } + + /** + * Stops delivery of updates until the next time {@link #startLoading()} is called. + * Implementations should not invalidate their data at this point -- + * clients are still free to use the last data the loader reported. They will, + * however, typically stop reporting new data if the data changes; they can + * still monitor for changes, but must not report them to the client until and + * if {@link #startLoading()} is later called. + * + *

This updates the Loader's internal state so that + * {@link #isStarted()} will return the correct + * value, and then calls the implementation's {@link #onStopLoading()}. + * + *

Must be called from the process's main thread. + */ + public void stopLoading() { + mStarted = false; + onStopLoading(); + } + + /** + * Subclasses must implement this to take care of stopping their loader, + * as per {@link #stopLoading()}. This is not called by clients directly, + * but as a result of a call to {@link #stopLoading()}. + * This will always be called from the process's main thread. + */ + protected void onStopLoading() { + } + + /** + * Tell the Loader that it is being abandoned. This is called prior + * to {@link #reset} to have it retain its current data but not report + * any new data. + */ + public void abandon() { + mAbandoned = true; + onAbandon(); + } + + /** + * Subclasses implement this to take care of being abandoned. This is + * an optional intermediate state prior to {@link #onReset()} -- it means that + * the client is no longer interested in any new data from the loader, + * so the loader must not report any further updates. However, the + * loader must keep its last reported data valid until the final + * {@link #onReset()} happens. You can retrieve the current abandoned + * state with {@link #isAbandoned}. + */ + protected void onAbandon() { + } + + /** + * Resets the state of the Loader. The Loader should at this point free + * all of its resources, since it may never be called again; however, its + * {@link #startLoading()} may later be called at which point it must be + * able to start running again. + * + *

This updates the Loader's internal state so that + * {@link #isStarted()} and {@link #isReset()} will return the correct + * values, and then calls the implementation's {@link #onReset()}. + * + *

Must be called from the process's main thread. + */ + public void reset() { + onReset(); + mReset = true; + mStarted = false; + mAbandoned = false; + mContentChanged = false; + } + + /** + * Subclasses must implement this to take care of resetting their loader, + * as per {@link #reset()}. This is not called by clients directly, + * but as a result of a call to {@link #reset()}. + * This will always be called from the process's main thread. + */ + protected void onReset() { + } + + /** + * Take the current flag indicating whether the loader's content had + * changed while it was stopped. If it had, true is returned and the + * flag is cleared. + */ + public boolean takeContentChanged() { + boolean res = mContentChanged; + mContentChanged = false; + return res; + } + + /** + * Called when {@link ForceLoadContentObserver} detects a change. The + * default implementation checks to see if the loader is currently started; + * if so, it simply calls {@link #forceLoad()}; otherwise, it sets a flag + * so that {@link #takeContentChanged()} returns true. + * + *

Must be called from the process's main thread. + */ + public void onContentChanged() { + if (mStarted) { + forceLoad(); + } else { + // This loader has been stopped, so we don't want to load + // new data right now... but keep track of it changing to + // refresh later if we start again. + mContentChanged = true; + } + } + + /** + * For debugging, converts an instance of the Loader's data class to + * a string that can be printed. Must handle a null data. + */ + public String dataToString(D data) { + StringBuilder sb = new StringBuilder(64); + DebugUtils.buildShortClassTag(data, sb); + sb.append("}"); + return sb.toString(); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(64); + DebugUtils.buildShortClassTag(this, sb); + sb.append(" id="); + sb.append(mId); + sb.append("}"); + return sb.toString(); + } + + /** + * Print the Loader's state into the given stream. + * + * @param prefix Text to print at the front of each line. + * @param fd The raw file descriptor that the dump is being sent to. + * @param writer A PrintWriter to which the dump is to be set. + * @param args Additional arguments to the dump request. + */ + public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) { + writer.print(prefix); writer.print("mId="); writer.print(mId); + writer.print(" mListener="); writer.println(mListener); + writer.print(prefix); writer.print("mStarted="); writer.print(mStarted); + writer.print(" mContentChanged="); writer.print(mContentChanged); + writer.print(" mAbandoned="); writer.print(mAbandoned); + writer.print(" mReset="); writer.println(mReset); + } +} \ No newline at end of file diff --git a/actionbarsherlock/library/src/android/support/v4/content/LocalBroadcastManager.java b/actionbarsherlock/library/src/android/support/v4/content/LocalBroadcastManager.java new file mode 100644 index 000000000..7a7c50f4e --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/content/LocalBroadcastManager.java @@ -0,0 +1,302 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.content; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Set; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.net.Uri; +import android.os.Handler; +import android.os.Message; +import android.util.Log; + +/** + * Helper to register for and send broadcasts of Intents to local objects + * within your process. This is has a number of advantages over sending + * global broadcasts with {@link android.content.Context#sendBroadcast}: + *

    + *
  • You know that the data you are broadcasting won't leave your app, so + * don't need to worry about leaking private data. + *
  • It is not possible for other applications to send these broadcasts to + * your app, so you don't need to worry about having security holes they can + * exploit. + *
  • It is more efficient than sending a global broadcast through the + * system. + *
+ */ +public class LocalBroadcastManager { + private static class ReceiverRecord { + final IntentFilter filter; + final BroadcastReceiver receiver; + boolean broadcasting; + + ReceiverRecord(IntentFilter _filter, BroadcastReceiver _receiver) { + filter = _filter; + receiver = _receiver; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(128); + builder.append("Receiver{"); + builder.append(receiver); + builder.append(" filter="); + builder.append(filter); + builder.append("}"); + return builder.toString(); + } + } + + private static class BroadcastRecord { + final Intent intent; + final ArrayList receivers; + + BroadcastRecord(Intent _intent, ArrayList _receivers) { + intent = _intent; + receivers = _receivers; + } + } + + private static final String TAG = "LocalBroadcastManager"; + private static final boolean DEBUG = false; + + private final Context mAppContext; + + private final HashMap> mReceivers + = new HashMap>(); + private final HashMap> mActions + = new HashMap>(); + + private final ArrayList mPendingBroadcasts + = new ArrayList(); + + static final int MSG_EXEC_PENDING_BROADCASTS = 1; + + private final Handler mHandler; + + private static final Object mLock = new Object(); + private static LocalBroadcastManager mInstance; + + public static LocalBroadcastManager getInstance(Context context) { + synchronized (mLock) { + if (mInstance == null) { + mInstance = new LocalBroadcastManager(context.getApplicationContext()); + } + return mInstance; + } + } + + private LocalBroadcastManager(Context context) { + mAppContext = context; + mHandler = new Handler(context.getMainLooper()) { + + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case MSG_EXEC_PENDING_BROADCASTS: + executePendingBroadcasts(); + break; + default: + super.handleMessage(msg); + } + } + }; + } + + /** + * Register a receive for any local broadcasts that match the given IntentFilter. + * + * @param receiver The BroadcastReceiver to handle the broadcast. + * @param filter Selects the Intent broadcasts to be received. + * + * @see #unregisterReceiver + */ + public void registerReceiver(BroadcastReceiver receiver, IntentFilter filter) { + synchronized (mReceivers) { + ReceiverRecord entry = new ReceiverRecord(filter, receiver); + ArrayList filters = mReceivers.get(receiver); + if (filters == null) { + filters = new ArrayList(1); + mReceivers.put(receiver, filters); + } + filters.add(filter); + for (int i=0; i entries = mActions.get(action); + if (entries == null) { + entries = new ArrayList(1); + mActions.put(action, entries); + } + entries.add(entry); + } + } + } + + /** + * Unregister a previously registered BroadcastReceiver. All + * filters that have been registered for this BroadcastReceiver will be + * removed. + * + * @param receiver The BroadcastReceiver to unregister. + * + * @see #registerReceiver + */ + public void unregisterReceiver(BroadcastReceiver receiver) { + synchronized (mReceivers) { + ArrayList filters = mReceivers.remove(receiver); + if (filters == null) { + return; + } + for (int i=0; i receivers = mActions.get(action); + if (receivers != null) { + for (int k=0; k categories = intent.getCategories(); + + final boolean debug = DEBUG || + ((intent.getFlags() & Intent.FLAG_DEBUG_LOG_RESOLUTION) != 0); + if (debug) Log.v( + TAG, "Resolving type " + type + " scheme " + scheme + + " of intent " + intent); + + ArrayList entries = mActions.get(intent.getAction()); + if (entries != null) { + if (debug) Log.v(TAG, "Action list: " + entries); + + ArrayList receivers = null; + for (int i=0; i= 0) { + if (debug) Log.v(TAG, " Filter matched! match=0x" + + Integer.toHexString(match)); + if (receivers == null) { + receivers = new ArrayList(); + } + receivers.add(receiver); + receiver.broadcasting = true; + } else { + if (debug) { + String reason; + switch (match) { + case IntentFilter.NO_MATCH_ACTION: reason = "action"; break; + case IntentFilter.NO_MATCH_CATEGORY: reason = "category"; break; + case IntentFilter.NO_MATCH_DATA: reason = "data"; break; + case IntentFilter.NO_MATCH_TYPE: reason = "type"; break; + default: reason = "unknown reason"; break; + } + Log.v(TAG, " Filter did not match: " + reason); + } + } + } + + if (receivers != null) { + for (int i=0; i { + private static final String LOG_TAG = "AsyncTask"; + + private static final int CORE_POOL_SIZE = 5; + private static final int MAXIMUM_POOL_SIZE = 128; + private static final int KEEP_ALIVE = 1; + + private static final ThreadFactory sThreadFactory = new ThreadFactory() { + private final AtomicInteger mCount = new AtomicInteger(1); + + public Thread newThread(Runnable r) { + return new Thread(r, "ModernAsyncTask #" + mCount.getAndIncrement()); + } + }; + + private static final BlockingQueue sPoolWorkQueue = + new LinkedBlockingQueue(10); + + /** + * An {@link Executor} that can be used to execute tasks in parallel. + */ + public static final Executor THREAD_POOL_EXECUTOR + = new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE, + TimeUnit.SECONDS, sPoolWorkQueue, sThreadFactory); + + private static final int MESSAGE_POST_RESULT = 0x1; + private static final int MESSAGE_POST_PROGRESS = 0x2; + + private static final InternalHandler sHandler = new InternalHandler(); + + private static volatile Executor sDefaultExecutor = THREAD_POOL_EXECUTOR; + private final WorkerRunnable mWorker; + private final FutureTask mFuture; + + private volatile Status mStatus = Status.PENDING; + + private final AtomicBoolean mTaskInvoked = new AtomicBoolean(); + + /** + * Indicates the current status of the task. Each status will be set only once + * during the lifetime of a task. + */ + public enum Status { + /** + * Indicates that the task has not been executed yet. + */ + PENDING, + /** + * Indicates that the task is running. + */ + RUNNING, + /** + * Indicates that {@link AsyncTask#onPostExecute} has finished. + */ + FINISHED, + } + + /** @hide Used to force static handler to be created. */ + public static void init() { + sHandler.getLooper(); + } + + /** @hide */ + public static void setDefaultExecutor(Executor exec) { + sDefaultExecutor = exec; + } + + /** + * Creates a new asynchronous task. This constructor must be invoked on the UI thread. + */ + public ModernAsyncTask() { + mWorker = new WorkerRunnable() { + public Result call() throws Exception { + mTaskInvoked.set(true); + + Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND); + return postResult(doInBackground(mParams)); + } + }; + + mFuture = new FutureTask(mWorker) { + @Override + protected void done() { + try { + final Result result = get(); + + postResultIfNotInvoked(result); + } catch (InterruptedException e) { + android.util.Log.w(LOG_TAG, e); + } catch (ExecutionException e) { + throw new RuntimeException("An error occured while executing doInBackground()", + e.getCause()); + } catch (CancellationException e) { + postResultIfNotInvoked(null); + } catch (Throwable t) { + throw new RuntimeException("An error occured while executing " + + "doInBackground()", t); + } + } + }; + } + + private void postResultIfNotInvoked(Result result) { + final boolean wasTaskInvoked = mTaskInvoked.get(); + if (!wasTaskInvoked) { + postResult(result); + } + } + + private Result postResult(Result result) { + @SuppressWarnings("unchecked") + Message message = sHandler.obtainMessage(MESSAGE_POST_RESULT, + new AsyncTaskResult(this, result)); + message.sendToTarget(); + return result; + } + + /** + * Returns the current status of this task. + * + * @return The current status. + */ + public final Status getStatus() { + return mStatus; + } + + /** + * Override this method to perform a computation on a background thread. The + * specified parameters are the parameters passed to {@link #execute} + * by the caller of this task. + * + * This method can call {@link #publishProgress} to publish updates + * on the UI thread. + * + * @param params The parameters of the task. + * + * @return A result, defined by the subclass of this task. + * + * @see #onPreExecute() + * @see #onPostExecute + * @see #publishProgress + */ + protected abstract Result doInBackground(Params... params); + + /** + * Runs on the UI thread before {@link #doInBackground}. + * + * @see #onPostExecute + * @see #doInBackground + */ + protected void onPreExecute() { + } + + /** + *

Runs on the UI thread after {@link #doInBackground}. The + * specified result is the value returned by {@link #doInBackground}.

+ * + *

This method won't be invoked if the task was cancelled.

+ * + * @param result The result of the operation computed by {@link #doInBackground}. + * + * @see #onPreExecute + * @see #doInBackground + * @see #onCancelled(Object) + */ + protected void onPostExecute(Result result) { + } + + /** + * Runs on the UI thread after {@link #publishProgress} is invoked. + * The specified values are the values passed to {@link #publishProgress}. + * + * @param values The values indicating progress. + * + * @see #publishProgress + * @see #doInBackground + */ + protected void onProgressUpdate(Progress... values) { + } + + /** + *

Runs on the UI thread after {@link #cancel(boolean)} is invoked and + * {@link #doInBackground(Object[])} has finished.

+ * + *

The default implementation simply invokes {@link #onCancelled()} and + * ignores the result. If you write your own implementation, do not call + * super.onCancelled(result).

+ * + * @param result The result, if any, computed in + * {@link #doInBackground(Object[])}, can be null + * + * @see #cancel(boolean) + * @see #isCancelled() + */ + protected void onCancelled(Result result) { + onCancelled(); + } + + /** + *

Applications should preferably override {@link #onCancelled(Object)}. + * This method is invoked by the default implementation of + * {@link #onCancelled(Object)}.

+ * + *

Runs on the UI thread after {@link #cancel(boolean)} is invoked and + * {@link #doInBackground(Object[])} has finished.

+ * + * @see #onCancelled(Object) + * @see #cancel(boolean) + * @see #isCancelled() + */ + protected void onCancelled() { + } + + /** + * Returns true if this task was cancelled before it completed + * normally. If you are calling {@link #cancel(boolean)} on the task, + * the value returned by this method should be checked periodically from + * {@link #doInBackground(Object[])} to end the task as soon as possible. + * + * @return true if task was cancelled before it completed + * + * @see #cancel(boolean) + */ + public final boolean isCancelled() { + return mFuture.isCancelled(); + } + + /** + *

Attempts to cancel execution of this task. This attempt will + * fail if the task has already completed, already been cancelled, + * or could not be cancelled for some other reason. If successful, + * and this task has not started when cancel is called, + * this task should never run. If the task has already started, + * then the mayInterruptIfRunning parameter determines + * whether the thread executing this task should be interrupted in + * an attempt to stop the task.

+ * + *

Calling this method will result in {@link #onCancelled(Object)} being + * invoked on the UI thread after {@link #doInBackground(Object[])} + * returns. Calling this method guarantees that {@link #onPostExecute(Object)} + * is never invoked. After invoking this method, you should check the + * value returned by {@link #isCancelled()} periodically from + * {@link #doInBackground(Object[])} to finish the task as early as + * possible.

+ * + * @param mayInterruptIfRunning true if the thread executing this + * task should be interrupted; otherwise, in-progress tasks are allowed + * to complete. + * + * @return false if the task could not be cancelled, + * typically because it has already completed normally; + * true otherwise + * + * @see #isCancelled() + * @see #onCancelled(Object) + */ + public final boolean cancel(boolean mayInterruptIfRunning) { + return mFuture.cancel(mayInterruptIfRunning); + } + + /** + * Waits if necessary for the computation to complete, and then + * retrieves its result. + * + * @return The computed result. + * + * @throws CancellationException If the computation was cancelled. + * @throws ExecutionException If the computation threw an exception. + * @throws InterruptedException If the current thread was interrupted + * while waiting. + */ + public final Result get() throws InterruptedException, ExecutionException { + return mFuture.get(); + } + + /** + * Waits if necessary for at most the given time for the computation + * to complete, and then retrieves its result. + * + * @param timeout Time to wait before cancelling the operation. + * @param unit The time unit for the timeout. + * + * @return The computed result. + * + * @throws CancellationException If the computation was cancelled. + * @throws ExecutionException If the computation threw an exception. + * @throws InterruptedException If the current thread was interrupted + * while waiting. + * @throws TimeoutException If the wait timed out. + */ + public final Result get(long timeout, TimeUnit unit) throws InterruptedException, + ExecutionException, TimeoutException { + return mFuture.get(timeout, unit); + } + + /** + * Executes the task with the specified parameters. The task returns + * itself (this) so that the caller can keep a reference to it. + * + *

Note: this function schedules the task on a queue for a single background + * thread or pool of threads depending on the platform version. When first + * introduced, AsyncTasks were executed serially on a single background thread. + * Starting with {@link android.os.Build.VERSION_CODES#DONUT}, this was changed + * to a pool of threads allowing multiple tasks to operate in parallel. After + * {@link android.os.Build.VERSION_CODES#HONEYCOMB}, it is planned to change this + * back to a single thread to avoid common application errors caused + * by parallel execution. If you truly want parallel execution, you can use + * the {@link #executeOnExecutor} version of this method + * with {@link #THREAD_POOL_EXECUTOR}; however, see commentary there for warnings on + * its use. + * + *

This method must be invoked on the UI thread. + * + * @param params The parameters of the task. + * + * @return This instance of AsyncTask. + * + * @throws IllegalStateException If {@link #getStatus()} returns either + * {@link AsyncTask.Status#RUNNING} or {@link AsyncTask.Status#FINISHED}. + */ + public final ModernAsyncTask execute(Params... params) { + return executeOnExecutor(sDefaultExecutor, params); + } + + /** + * Executes the task with the specified parameters. The task returns + * itself (this) so that the caller can keep a reference to it. + * + *

This method is typically used with {@link #THREAD_POOL_EXECUTOR} to + * allow multiple tasks to run in parallel on a pool of threads managed by + * AsyncTask, however you can also use your own {@link Executor} for custom + * behavior. + * + *

Warning: Allowing multiple tasks to run in parallel from + * a thread pool is generally not what one wants, because the order + * of their operation is not defined. For example, if these tasks are used + * to modify any state in common (such as writing a file due to a button click), + * there are no guarantees on the order of the modifications. + * Without careful work it is possible in rare cases for the newer version + * of the data to be over-written by an older one, leading to obscure data + * loss and stability issues. Such changes are best + * executed in serial; to guarantee such work is serialized regardless of + * platform version you can use this function with {@link #SERIAL_EXECUTOR}. + * + *

This method must be invoked on the UI thread. + * + * @param exec The executor to use. {@link #THREAD_POOL_EXECUTOR} is available as a + * convenient process-wide thread pool for tasks that are loosely coupled. + * @param params The parameters of the task. + * + * @return This instance of AsyncTask. + * + * @throws IllegalStateException If {@link #getStatus()} returns either + * {@link AsyncTask.Status#RUNNING} or {@link AsyncTask.Status#FINISHED}. + */ + public final ModernAsyncTask executeOnExecutor(Executor exec, + Params... params) { + if (mStatus != Status.PENDING) { + switch (mStatus) { + case RUNNING: + throw new IllegalStateException("Cannot execute task:" + + " the task is already running."); + case FINISHED: + throw new IllegalStateException("Cannot execute task:" + + " the task has already been executed " + + "(a task can be executed only once)"); + } + } + + mStatus = Status.RUNNING; + + onPreExecute(); + + mWorker.mParams = params; + exec.execute(mFuture); + + return this; + } + + /** + * Convenience version of {@link #execute(Object...)} for use with + * a simple Runnable object. + */ + public static void execute(Runnable runnable) { + sDefaultExecutor.execute(runnable); + } + + /** + * This method can be invoked from {@link #doInBackground} to + * publish updates on the UI thread while the background computation is + * still running. Each call to this method will trigger the execution of + * {@link #onProgressUpdate} on the UI thread. + * + * {@link #onProgressUpdate} will note be called if the task has been + * canceled. + * + * @param values The progress values to update the UI with. + * + * @see #onProgressUpdate + * @see #doInBackground + */ + protected final void publishProgress(Progress... values) { + if (!isCancelled()) { + sHandler.obtainMessage(MESSAGE_POST_PROGRESS, + new AsyncTaskResult(this, values)).sendToTarget(); + } + } + + private void finish(Result result) { + if (isCancelled()) { + onCancelled(result); + } else { + onPostExecute(result); + } + mStatus = Status.FINISHED; + } + + private static class InternalHandler extends Handler { + @SuppressWarnings({"unchecked", "rawtypes"}) + @Override + public void handleMessage(Message msg) { + AsyncTaskResult result = (AsyncTaskResult) msg.obj; + switch (msg.what) { + case MESSAGE_POST_RESULT: + // There is only one result + result.mTask.finish(result.mData[0]); + break; + case MESSAGE_POST_PROGRESS: + result.mTask.onProgressUpdate(result.mData); + break; + } + } + } + + private static abstract class WorkerRunnable implements Callable { + Params[] mParams; + } + + @SuppressWarnings({"rawtypes"}) + private static class AsyncTaskResult { + final ModernAsyncTask mTask; + final Data[] mData; + + AsyncTaskResult(ModernAsyncTask task, Data... data) { + mTask = task; + mData = data; + } + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/os/ParcelableCompat.java b/actionbarsherlock/library/src/android/support/v4/os/ParcelableCompat.java new file mode 100644 index 000000000..714af3374 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/os/ParcelableCompat.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.os; + +import android.os.Parcel; +import android.os.Parcelable; + +public class ParcelableCompat { + public static Parcelable.Creator newCreator( + ParcelableCompatCreatorCallbacks callbacks) { + if (android.os.Build.VERSION.SDK_INT >= 13) { + ParcelableCompatCreatorHoneycombMR2Stub.instantiate(callbacks); + } + return new CompatCreator(callbacks); + } + + static class CompatCreator implements Parcelable.Creator { + final ParcelableCompatCreatorCallbacks mCallbacks; + + public CompatCreator(ParcelableCompatCreatorCallbacks callbacks) { + mCallbacks = callbacks; + } + + @Override + public T createFromParcel(Parcel source) { + return mCallbacks.createFromParcel(source, null); + } + + @Override + public T[] newArray(int size) { + return mCallbacks.newArray(size); + } + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/os/ParcelableCompatCreatorCallbacks.java b/actionbarsherlock/library/src/android/support/v4/os/ParcelableCompatCreatorCallbacks.java new file mode 100644 index 000000000..8678cfb75 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/os/ParcelableCompatCreatorCallbacks.java @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.os; + +import android.os.Parcel; + +public interface ParcelableCompatCreatorCallbacks { + public T createFromParcel(Parcel in, ClassLoader loader); + public T[] newArray(int size); +} diff --git a/actionbarsherlock/library/src/android/support/v4/os/ParcelableCompatHoneycombMR2.java b/actionbarsherlock/library/src/android/support/v4/os/ParcelableCompatHoneycombMR2.java new file mode 100644 index 000000000..08acb5507 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/os/ParcelableCompatHoneycombMR2.java @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.os; + +import android.os.Parcel; +import android.os.Parcelable; + +class ParcelableCompatCreatorHoneycombMR2Stub { + static Parcelable.Creator instantiate(ParcelableCompatCreatorCallbacks callbacks) { + return new ParcelableCompatCreatorHoneycombMR2(callbacks); + } +} + +class ParcelableCompatCreatorHoneycombMR2 implements Parcelable.ClassLoaderCreator { + private final ParcelableCompatCreatorCallbacks mCallbacks; + + public ParcelableCompatCreatorHoneycombMR2(ParcelableCompatCreatorCallbacks callbacks) { + mCallbacks = callbacks; + } + + public T createFromParcel(Parcel in) { + return mCallbacks.createFromParcel(in, null); + } + + public T createFromParcel(Parcel in, ClassLoader loader) { + return mCallbacks.createFromParcel(in, loader); + } + + public T[] newArray(int size) { + return mCallbacks.newArray(size); + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/util/DebugUtils.java b/actionbarsherlock/library/src/android/support/v4/util/DebugUtils.java new file mode 100644 index 000000000..16c63a9f0 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/util/DebugUtils.java @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.util; + +/** + * Useful debugging utilities that are not available on all versions of Android. + */ +public class DebugUtils { + public static void buildShortClassTag(Object cls, StringBuilder out) { + if (cls == null) { + out.append("null"); + } else { + String simpleName = cls.getClass().getSimpleName(); + if (simpleName == null || simpleName.length() <= 0) { + simpleName = cls.getClass().getName(); + int end = simpleName.lastIndexOf('.'); + if (end > 0) { + simpleName = simpleName.substring(end+1); + } + } + out.append(simpleName); + out.append('{'); + out.append(Integer.toHexString(System.identityHashCode(cls))); + } + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/util/LogWriter.java b/actionbarsherlock/library/src/android/support/v4/util/LogWriter.java new file mode 100644 index 000000000..3b9d12b04 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/util/LogWriter.java @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.util; + +import android.util.Log; + +import java.io.Writer; + +/** + * Useful logging utility that is not available on all versions of Android. + */ +public class LogWriter extends Writer { + private final String mTag; + private StringBuilder mBuilder = new StringBuilder(128); + + /** + * Create a new Writer that sends to the log with the given priority + * and tag. + * + * @param priority The desired log priority: + * {@link android.util.Log#VERBOSE Log.VERBOSE}, + * {@link android.util.Log#DEBUG Log.DEBUG}, + * {@link android.util.Log#INFO Log.INFO}, + * {@link android.util.Log#WARN Log.WARN}, or + * {@link android.util.Log#ERROR Log.ERROR}. + * @param tag A string tag to associate with each printed log statement. + */ + public LogWriter(String tag) { + mTag = tag; + } + + @Override public void close() { + flushBuilder(); + } + + @Override public void flush() { + flushBuilder(); + } + + @Override public void write(char[] buf, int offset, int count) { + for(int i = 0; i < count; i++) { + char c = buf[offset + i]; + if ( c == '\n') { + flushBuilder(); + } + else { + mBuilder.append(c); + } + } + } + + private void flushBuilder() { + if (mBuilder.length() > 0) { + Log.d(mTag, mBuilder.toString()); + mBuilder.delete(0, mBuilder.length()); + } + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/util/LruCache.java b/actionbarsherlock/library/src/android/support/v4/util/LruCache.java new file mode 100644 index 000000000..a7a2ee276 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/util/LruCache.java @@ -0,0 +1,323 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.util; + +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * Static library version of {@code android.util.LruCache}. Used to write apps + * that run on API levels prior to 12. When running on API level 12 or above, + * this implementation is still used; it does not try to switch to the + * framework's implementation. See the framework SDK documentation for a class + * overview. + */ +public class LruCache { + private final LinkedHashMap map; + + /** Size of this cache in units. Not necessarily the number of elements. */ + private int size; + private int maxSize; + + private int putCount; + private int createCount; + private int evictionCount; + private int hitCount; + private int missCount; + + /** + * @param maxSize for caches that do not override {@link #sizeOf}, this is + * the maximum number of entries in the cache. For all other caches, + * this is the maximum sum of the sizes of the entries in this cache. + */ + public LruCache(int maxSize) { + if (maxSize <= 0) { + throw new IllegalArgumentException("maxSize <= 0"); + } + this.maxSize = maxSize; + this.map = new LinkedHashMap(0, 0.75f, true); + } + + /** + * Returns the value for {@code key} if it exists in the cache or can be + * created by {@code #create}. If a value was returned, it is moved to the + * head of the queue. This returns null if a value is not cached and cannot + * be created. + */ + public final V get(K key) { + if (key == null) { + throw new NullPointerException("key == null"); + } + + V mapValue; + synchronized (this) { + mapValue = map.get(key); + if (mapValue != null) { + hitCount++; + return mapValue; + } + missCount++; + } + + /* + * Attempt to create a value. This may take a long time, and the map + * may be different when create() returns. If a conflicting value was + * added to the map while create() was working, we leave that value in + * the map and release the created value. + */ + + V createdValue = create(key); + if (createdValue == null) { + return null; + } + + synchronized (this) { + createCount++; + mapValue = map.put(key, createdValue); + + if (mapValue != null) { + // There was a conflict so undo that last put + map.put(key, mapValue); + } else { + size += safeSizeOf(key, createdValue); + } + } + + if (mapValue != null) { + entryRemoved(false, key, createdValue, mapValue); + return mapValue; + } else { + trimToSize(maxSize); + return createdValue; + } + } + + /** + * Caches {@code value} for {@code key}. The value is moved to the head of + * the queue. + * + * @return the previous value mapped by {@code key}. + */ + public final V put(K key, V value) { + if (key == null || value == null) { + throw new NullPointerException("key == null || value == null"); + } + + V previous; + synchronized (this) { + putCount++; + size += safeSizeOf(key, value); + previous = map.put(key, value); + if (previous != null) { + size -= safeSizeOf(key, previous); + } + } + + if (previous != null) { + entryRemoved(false, key, previous, value); + } + + trimToSize(maxSize); + return previous; + } + + /** + * @param maxSize the maximum size of the cache before returning. May be -1 + * to evict even 0-sized elements. + */ + private void trimToSize(int maxSize) { + while (true) { + K key; + V value; + synchronized (this) { + if (size < 0 || (map.isEmpty() && size != 0)) { + throw new IllegalStateException(getClass().getName() + + ".sizeOf() is reporting inconsistent results!"); + } + + if (size <= maxSize || map.isEmpty()) { + break; + } + + Map.Entry toEvict = map.entrySet().iterator().next(); + key = toEvict.getKey(); + value = toEvict.getValue(); + map.remove(key); + size -= safeSizeOf(key, value); + evictionCount++; + } + + entryRemoved(true, key, value, null); + } + } + + /** + * Removes the entry for {@code key} if it exists. + * + * @return the previous value mapped by {@code key}. + */ + public final V remove(K key) { + if (key == null) { + throw new NullPointerException("key == null"); + } + + V previous; + synchronized (this) { + previous = map.remove(key); + if (previous != null) { + size -= safeSizeOf(key, previous); + } + } + + if (previous != null) { + entryRemoved(false, key, previous, null); + } + + return previous; + } + + /** + * Called for entries that have been evicted or removed. This method is + * invoked when a value is evicted to make space, removed by a call to + * {@link #remove}, or replaced by a call to {@link #put}. The default + * implementation does nothing. + * + *

The method is called without synchronization: other threads may + * access the cache while this method is executing. + * + * @param evicted true if the entry is being removed to make space, false + * if the removal was caused by a {@link #put} or {@link #remove}. + * @param newValue the new value for {@code key}, if it exists. If non-null, + * this removal was caused by a {@link #put}. Otherwise it was caused by + * an eviction or a {@link #remove}. + */ + protected void entryRemoved(boolean evicted, K key, V oldValue, V newValue) {} + + /** + * Called after a cache miss to compute a value for the corresponding key. + * Returns the computed value or null if no value can be computed. The + * default implementation returns null. + * + *

The method is called without synchronization: other threads may + * access the cache while this method is executing. + * + *

If a value for {@code key} exists in the cache when this method + * returns, the created value will be released with {@link #entryRemoved} + * and discarded. This can occur when multiple threads request the same key + * at the same time (causing multiple values to be created), or when one + * thread calls {@link #put} while another is creating a value for the same + * key. + */ + protected V create(K key) { + return null; + } + + private int safeSizeOf(K key, V value) { + int result = sizeOf(key, value); + if (result < 0) { + throw new IllegalStateException("Negative size: " + key + "=" + value); + } + return result; + } + + /** + * Returns the size of the entry for {@code key} and {@code value} in + * user-defined units. The default implementation returns 1 so that size + * is the number of entries and max size is the maximum number of entries. + * + *

An entry's size must not change while it is in the cache. + */ + protected int sizeOf(K key, V value) { + return 1; + } + + /** + * Clear the cache, calling {@link #entryRemoved} on each removed entry. + */ + public final void evictAll() { + trimToSize(-1); // -1 will evict 0-sized elements + } + + /** + * For caches that do not override {@link #sizeOf}, this returns the number + * of entries in the cache. For all other caches, this returns the sum of + * the sizes of the entries in this cache. + */ + public synchronized final int size() { + return size; + } + + /** + * For caches that do not override {@link #sizeOf}, this returns the maximum + * number of entries in the cache. For all other caches, this returns the + * maximum sum of the sizes of the entries in this cache. + */ + public synchronized final int maxSize() { + return maxSize; + } + + /** + * Returns the number of times {@link #get} returned a value. + */ + public synchronized final int hitCount() { + return hitCount; + } + + /** + * Returns the number of times {@link #get} returned null or required a new + * value to be created. + */ + public synchronized final int missCount() { + return missCount; + } + + /** + * Returns the number of times {@link #create(Object)} returned a value. + */ + public synchronized final int createCount() { + return createCount; + } + + /** + * Returns the number of times {@link #put} was called. + */ + public synchronized final int putCount() { + return putCount; + } + + /** + * Returns the number of values that have been evicted. + */ + public synchronized final int evictionCount() { + return evictionCount; + } + + /** + * Returns a copy of the current contents of the cache, ordered from least + * recently accessed to most recently accessed. + */ + public synchronized final Map snapshot() { + return new LinkedHashMap(map); + } + + @Override public synchronized final String toString() { + int accesses = hitCount + missCount; + int hitPercent = accesses != 0 ? (100 * hitCount / accesses) : 0; + return String.format("LruCache[maxSize=%d,hits=%d,misses=%d,hitRate=%d%%]", + maxSize, hitCount, missCount, hitPercent); + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/util/TimeUtils.java b/actionbarsherlock/library/src/android/support/v4/util/TimeUtils.java new file mode 100644 index 000000000..65ac8544e --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/util/TimeUtils.java @@ -0,0 +1,172 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.util; + +import java.io.PrintWriter; + +/** + * Useful time utilities that are not available on all versions of Android. + */ +public class TimeUtils { + /** @hide Field length that can hold 999 days of time */ + public static final int HUNDRED_DAY_FIELD_LEN = 19; + + private static final int SECONDS_PER_MINUTE = 60; + private static final int SECONDS_PER_HOUR = 60 * 60; + private static final int SECONDS_PER_DAY = 24 * 60 * 60; + + private static final Object sFormatSync = new Object(); + private static char[] sFormatStr = new char[HUNDRED_DAY_FIELD_LEN+5]; + + static private int accumField(int amt, int suffix, boolean always, int zeropad) { + if (amt > 99 || (always && zeropad >= 3)) { + return 3+suffix; + } + if (amt > 9 || (always && zeropad >= 2)) { + return 2+suffix; + } + if (always || amt > 0) { + return 1+suffix; + } + return 0; + } + + static private int printField(char[] formatStr, int amt, char suffix, int pos, + boolean always, int zeropad) { + if (always || amt > 0) { + final int startPos = pos; + if ((always && zeropad >= 3) || amt > 99) { + int dig = amt/100; + formatStr[pos] = (char)(dig + '0'); + pos++; + amt -= (dig*100); + } + if ((always && zeropad >= 2) || amt > 9 || startPos != pos) { + int dig = amt/10; + formatStr[pos] = (char)(dig + '0'); + pos++; + amt -= (dig*10); + } + formatStr[pos] = (char)(amt + '0'); + pos++; + formatStr[pos] = suffix; + pos++; + } + return pos; + } + + private static int formatDurationLocked(long duration, int fieldLen) { + if (sFormatStr.length < fieldLen) { + sFormatStr = new char[fieldLen]; + } + + char[] formatStr = sFormatStr; + + if (duration == 0) { + int pos = 0; + fieldLen -= 1; + while (pos < fieldLen) { + formatStr[pos] = ' '; + } + formatStr[pos] = '0'; + return pos+1; + } + + char prefix; + if (duration > 0) { + prefix = '+'; + } else { + prefix = '-'; + duration = -duration; + } + + int millis = (int)(duration%1000); + int seconds = (int) Math.floor(duration / 1000); + int days = 0, hours = 0, minutes = 0; + + if (seconds > SECONDS_PER_DAY) { + days = seconds / SECONDS_PER_DAY; + seconds -= days * SECONDS_PER_DAY; + } + if (seconds > SECONDS_PER_HOUR) { + hours = seconds / SECONDS_PER_HOUR; + seconds -= hours * SECONDS_PER_HOUR; + } + if (seconds > SECONDS_PER_MINUTE) { + minutes = seconds / SECONDS_PER_MINUTE; + seconds -= minutes * SECONDS_PER_MINUTE; + } + + int pos = 0; + + if (fieldLen != 0) { + int myLen = accumField(days, 1, false, 0); + myLen += accumField(hours, 1, myLen > 0, 2); + myLen += accumField(minutes, 1, myLen > 0, 2); + myLen += accumField(seconds, 1, myLen > 0, 2); + myLen += accumField(millis, 2, true, myLen > 0 ? 3 : 0) + 1; + while (myLen < fieldLen) { + formatStr[pos] = ' '; + pos++; + myLen++; + } + } + + formatStr[pos] = prefix; + pos++; + + int start = pos; + boolean zeropad = fieldLen != 0; + pos = printField(formatStr, days, 'd', pos, false, 0); + pos = printField(formatStr, hours, 'h', pos, pos != start, zeropad ? 2 : 0); + pos = printField(formatStr, minutes, 'm', pos, pos != start, zeropad ? 2 : 0); + pos = printField(formatStr, seconds, 's', pos, pos != start, zeropad ? 2 : 0); + pos = printField(formatStr, millis, 'm', pos, true, (zeropad && pos != start) ? 3 : 0); + formatStr[pos] = 's'; + return pos + 1; + } + + /** @hide Just for debugging; not internationalized. */ + public static void formatDuration(long duration, StringBuilder builder) { + synchronized (sFormatSync) { + int len = formatDurationLocked(duration, 0); + builder.append(sFormatStr, 0, len); + } + } + + /** @hide Just for debugging; not internationalized. */ + public static void formatDuration(long duration, PrintWriter pw, int fieldLen) { + synchronized (sFormatSync) { + int len = formatDurationLocked(duration, fieldLen); + pw.print(new String(sFormatStr, 0, len)); + } + } + + /** @hide Just for debugging; not internationalized. */ + public static void formatDuration(long duration, PrintWriter pw) { + formatDuration(duration, pw, 0); + } + + /** @hide Just for debugging; not internationalized. */ + public static void formatDuration(long time, long now, PrintWriter pw) { + if (time == 0) { + pw.print("--"); + return; + } + formatDuration(time-now, pw, 0); + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/view/AccessibilityDelegateCompat.java b/actionbarsherlock/library/src/android/support/v4/view/AccessibilityDelegateCompat.java new file mode 100644 index 000000000..c70b94f8c --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/view/AccessibilityDelegateCompat.java @@ -0,0 +1,353 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.view; + +import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat; +import android.view.View; +import android.view.ViewGroup; +import android.view.accessibility.AccessibilityEvent; + +/** + * Helper for accessing AccessibilityDelegate from newer platform versions. + */ +public class AccessibilityDelegateCompat { + + static interface AccessibilityDelegateImpl { + public Object newAccessiblityDelegateDefaultImpl(); + public Object newAccessiblityDelegateBridge(AccessibilityDelegateCompat listener); + public boolean dispatchPopulateAccessibilityEvent(Object delegate, View host, + AccessibilityEvent event); + public void onInitializeAccessibilityEvent(Object delegate, View host, + AccessibilityEvent event); + public void onInitializeAccessibilityNodeInfo(Object delegate, View host, Object info); + public void onPopulateAccessibilityEvent(Object delegate, View host, + AccessibilityEvent event); + public boolean onRequestSendAccessibilityEvent(Object delegate, ViewGroup host, View child, + AccessibilityEvent event); + public void sendAccessibilityEvent(Object delegate, View host, int eventType); + public void sendAccessibilityEventUnchecked(Object delegate, View host, + AccessibilityEvent event); + } + + static class AccessibilityDelegateStubImpl implements AccessibilityDelegateImpl { + public Object newAccessiblityDelegateDefaultImpl() { + return null; + } + + public Object newAccessiblityDelegateBridge(AccessibilityDelegateCompat listener) { + return null; + } + + public boolean dispatchPopulateAccessibilityEvent(Object delegate, View host, + AccessibilityEvent event) { + return false; + } + + public void onInitializeAccessibilityEvent(Object delegate, View host, + AccessibilityEvent event) { + + } + + public void onInitializeAccessibilityNodeInfo(Object delegate, View host, Object info) { + + } + + public void onPopulateAccessibilityEvent(Object delegate, View host, + AccessibilityEvent event) { + + } + + public boolean onRequestSendAccessibilityEvent(Object delegate, ViewGroup host, View child, + AccessibilityEvent event) { + return true; + } + + public void sendAccessibilityEvent(Object delegate, View host, int eventType) { + + } + + public void sendAccessibilityEventUnchecked(Object delegate, View host, + AccessibilityEvent event) { + + } + } +/* + static class AccessibilityDelegateIcsImpl extends AccessibilityDelegateStubImpl { + @Override + public Object newAccessiblityDelegateDefaultImpl() { + return AccessibilityDelegateCompatIcs.newAccessibilityDelegateDefaultImpl(); + } + + @Override + public Object newAccessiblityDelegateBridge(final AccessibilityDelegateCompat compat) { + return AccessibilityDelegateCompatIcs.newAccessibilityDelegateBridge( + new AccessibilityDelegateCompatIcs.AccessibilityDelegateBridge() { + @Override + public boolean dispatchPopulateAccessibilityEvent(View host, + AccessibilityEvent event) { + return compat.dispatchPopulateAccessibilityEvent(host, event); + } + + @Override + public void onInitializeAccessibilityEvent(View host, AccessibilityEvent event) { + compat.onInitializeAccessibilityEvent(host, event); + } + + @Override + public void onInitializeAccessibilityNodeInfo(View host, Object info) { + compat.onInitializeAccessibilityNodeInfo(host, + new AccessibilityNodeInfoCompat(info)); + } + + @Override + public void onPopulateAccessibilityEvent(View host, AccessibilityEvent event) { + compat.onPopulateAccessibilityEvent(host, event); + } + + @Override + public boolean onRequestSendAccessibilityEvent(ViewGroup host, View child, + AccessibilityEvent event) { + return compat.onRequestSendAccessibilityEvent(host, child, event); + } + + @Override + public void sendAccessibilityEvent(View host, int eventType) { + compat.sendAccessibilityEvent(host, eventType); + } + + @Override + public void sendAccessibilityEventUnchecked(View host, AccessibilityEvent event) { + compat.sendAccessibilityEventUnchecked(host, event); + } + }); + } + + @Override + public boolean dispatchPopulateAccessibilityEvent(Object delegate, View host, + AccessibilityEvent event) { + return AccessibilityDelegateCompatIcs.dispatchPopulateAccessibilityEvent(delegate, + host, event); + } + + @Override + public void onInitializeAccessibilityEvent(Object delegate, View host, + AccessibilityEvent event) { + AccessibilityDelegateCompatIcs.onInitializeAccessibilityEvent(delegate, host, event); + } + + @Override + public void onInitializeAccessibilityNodeInfo(Object delegate, View host, Object info) { + AccessibilityDelegateCompatIcs.onInitializeAccessibilityNodeInfo(delegate, host, info); + } + + @Override + public void onPopulateAccessibilityEvent(Object delegate, View host, + AccessibilityEvent event) { + AccessibilityDelegateCompatIcs.onPopulateAccessibilityEvent(delegate, host, event); + } + + @Override + public boolean onRequestSendAccessibilityEvent(Object delegate, ViewGroup host, View child, + AccessibilityEvent event) { + return AccessibilityDelegateCompatIcs.onRequestSendAccessibilityEvent(delegate, host, + child, event); + } + + @Override + public void sendAccessibilityEvent(Object delegate, View host, int eventType) { + AccessibilityDelegateCompatIcs.sendAccessibilityEvent(delegate, host, eventType); + } + + @Override + public void sendAccessibilityEventUnchecked(Object delegate, View host, + AccessibilityEvent event) { + AccessibilityDelegateCompatIcs.sendAccessibilityEventUnchecked(delegate, host, event); + } + } +*/ + private static final AccessibilityDelegateImpl IMPL; + private static final Object DEFAULT_DELEGATE; + + static { + //if (Build.VERSION.SDK_INT >= 14) { // ICS + // IMPL = new AccessibilityDelegateIcsImpl(); + //} else { + IMPL = new AccessibilityDelegateStubImpl(); + //} + DEFAULT_DELEGATE = IMPL.newAccessiblityDelegateDefaultImpl(); + } + + final Object mBridge; + + /** + * Creates a new instance. + */ + public AccessibilityDelegateCompat() { + mBridge = IMPL.newAccessiblityDelegateBridge(this); + } + + /** + * @return The wrapped bridge implementation. + */ + Object getBridge() { + return mBridge; + } + + /** + * Sends an accessibility event of the given type. If accessibility is not + * enabled this method has no effect. + *

+ * The default implementation behaves as {@link View#sendAccessibilityEvent(int) + * View#sendAccessibilityEvent(int)} for the case of no accessibility delegate + * been set. + *

+ * + * @param host The View hosting the delegate. + * @param eventType The type of the event to send. + * + * @see View#sendAccessibilityEvent(int) View#sendAccessibilityEvent(int) + */ + public void sendAccessibilityEvent(View host, int eventType) { + IMPL.sendAccessibilityEvent(DEFAULT_DELEGATE, host, eventType); + } + + /** + * Sends an accessibility event. This method behaves exactly as + * {@link #sendAccessibilityEvent(View, int)} but takes as an argument an + * empty {@link AccessibilityEvent} and does not perform a check whether + * accessibility is enabled. + *

+ * The default implementation behaves as + * {@link View#sendAccessibilityEventUnchecked(AccessibilityEvent) + * View#sendAccessibilityEventUnchecked(AccessibilityEvent)} for + * the case of no accessibility delegate been set. + *

+ * + * @param host The View hosting the delegate. + * @param event The event to send. + * + * @see View#sendAccessibilityEventUnchecked(AccessibilityEvent) + * View#sendAccessibilityEventUnchecked(AccessibilityEvent) + */ + public void sendAccessibilityEventUnchecked(View host, AccessibilityEvent event) { + IMPL.sendAccessibilityEventUnchecked(DEFAULT_DELEGATE, host, event); + } + + /** + * Dispatches an {@link AccessibilityEvent} to the host {@link View} first and then + * to its children for adding their text content to the event. + *

+ * The default implementation behaves as + * {@link View#dispatchPopulateAccessibilityEvent(AccessibilityEvent) + * View#dispatchPopulateAccessibilityEvent(AccessibilityEvent)} for + * the case of no accessibility delegate been set. + *

+ * + * @param host The View hosting the delegate. + * @param event The event. + * @return True if the event population was completed. + * + * @see View#dispatchPopulateAccessibilityEvent(AccessibilityEvent) + * View#dispatchPopulateAccessibilityEvent(AccessibilityEvent) + */ + public boolean dispatchPopulateAccessibilityEvent(View host, AccessibilityEvent event) { + return IMPL.dispatchPopulateAccessibilityEvent(DEFAULT_DELEGATE, host, event); + } + + /** + * Gives a chance to the host View to populate the accessibility event with its + * text content. + *

+ * The default implementation behaves as + * {@link ViewCompat#onPopulateAccessibilityEvent(View, AccessibilityEvent) + * ViewCompat#onPopulateAccessibilityEvent(AccessibilityEvent)} for + * the case of no accessibility delegate been set. + *

+ * + * @param host The View hosting the delegate. + * @param event The accessibility event which to populate. + * + * @see ViewCompat#onPopulateAccessibilityEvent(View ,AccessibilityEvent) + * ViewCompat#onPopulateAccessibilityEvent(View, AccessibilityEvent) + */ + public void onPopulateAccessibilityEvent(View host, AccessibilityEvent event) { + IMPL.onPopulateAccessibilityEvent(DEFAULT_DELEGATE, host, event); + } + + /** + * Initializes an {@link AccessibilityEvent} with information about the + * the host View which is the event source. + *

+ * The default implementation behaves as + * {@link ViewCompat#onInitializeAccessibilityEvent(View v, AccessibilityEvent event) + * ViewCompat#onInitalizeAccessibilityEvent(View v, AccessibilityEvent event)} for + * the case of no accessibility delegate been set. + *

+ * + * @param host The View hosting the delegate. + * @param event The event to initialize. + * + * @see ViewCompat#onInitializeAccessibilityEvent(View, AccessibilityEvent) + * ViewCompat#onInitializeAccessibilityEvent(View, AccessibilityEvent) + */ + public void onInitializeAccessibilityEvent(View host, AccessibilityEvent event) { + IMPL.onInitializeAccessibilityEvent(DEFAULT_DELEGATE, host, event); + } + + /** + * Initializes an {@link AccessibilityNodeInfoCompat} with information about the host view. + *

+ * The default implementation behaves as + * {@link ViewCompat#onInitializeAccessibilityNodeInfo(View, AccessibilityNodeInfoCompat) + * ViewCompat#onInitializeAccessibilityNodeInfo(View, AccessibilityNodeInfoCompat)} for + * the case of no accessibility delegate been set. + *

+ * + * @param host The View hosting the delegate. + * @param info The instance to initialize. + * + * @see ViewCompat#onInitializeAccessibilityNodeInfo(View, AccessibilityNodeInfoCompat) + * ViewCompat#onInitializeAccessibilityNodeInfo(View, AccessibilityNodeInfoCompat) + */ + public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) { + IMPL.onInitializeAccessibilityNodeInfo(DEFAULT_DELEGATE, host, info); + } + + /** + * Called when a child of the host View has requested sending an + * {@link AccessibilityEvent} and gives an opportunity to the parent (the host) + * to augment the event. + *

+ * The default implementation behaves as + * {@link ViewGroupCompat#onRequestSendAccessibilityEvent(ViewGroup, View, AccessibilityEvent) + * ViewGroupCompat#onRequestSendAccessibilityEvent(ViewGroup, View, AccessibilityEvent)} for + * the case of no accessibility delegate been set. + *

+ * + * @param host The View hosting the delegate. + * @param child The child which requests sending the event. + * @param event The event to be sent. + * @return True if the event should be sent + * + * @see ViewGroupCompat#onRequestSendAccessibilityEvent(ViewGroup, View, AccessibilityEvent) + * ViewGroupCompat#onRequestSendAccessibilityEvent(ViewGroup, View, AccessibilityEvent) + */ + public boolean onRequestSendAccessibilityEvent(ViewGroup host, View child, + AccessibilityEvent event) { + return IMPL.onRequestSendAccessibilityEvent(DEFAULT_DELEGATE, host, child, event); + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/view/AccessibilityDelegateCompatIcs.java b/actionbarsherlock/library/src/android/support/v4/view/AccessibilityDelegateCompatIcs.java new file mode 100644 index 000000000..ed0c7e84d --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/view/AccessibilityDelegateCompatIcs.java @@ -0,0 +1,120 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.view; + +//import android.view.View; +//import android.view.View.AccessibilityDelegate; +//import android.view.ViewGroup; +//import android.view.accessibility.AccessibilityEvent; +//import android.view.accessibility.AccessibilityNodeInfo; + +/** + * ICS specific AccessibilityDelegate API implementation. + */ +class AccessibilityDelegateCompatIcs { +/* + public interface AccessibilityDelegateBridge { + public boolean dispatchPopulateAccessibilityEvent(View host, AccessibilityEvent event); + public void onInitializeAccessibilityEvent(View host, AccessibilityEvent event); + public void onInitializeAccessibilityNodeInfo(View host, Object info); + public void onPopulateAccessibilityEvent(View host, AccessibilityEvent event); + public boolean onRequestSendAccessibilityEvent(ViewGroup host, View child, + AccessibilityEvent event); + public void sendAccessibilityEvent(View host, int eventType); + public void sendAccessibilityEventUnchecked(View host, AccessibilityEvent event); + } + + public static Object newAccessibilityDelegateDefaultImpl() { + return new AccessibilityDelegate(); + } + + public static Object newAccessibilityDelegateBridge(final AccessibilityDelegateBridge bridge) { + return new AccessibilityDelegate() { + @Override + public boolean dispatchPopulateAccessibilityEvent(View host, AccessibilityEvent event) { + return bridge.dispatchPopulateAccessibilityEvent(host, event); + } + + @Override + public void onInitializeAccessibilityEvent(View host, AccessibilityEvent event) { + bridge.onInitializeAccessibilityEvent(host, event); + } + + @Override + public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) { + bridge.onInitializeAccessibilityNodeInfo(host, info); + } + + @Override + public void onPopulateAccessibilityEvent(View host, AccessibilityEvent event) { + bridge.onPopulateAccessibilityEvent(host, event); + } + + @Override + public boolean onRequestSendAccessibilityEvent(ViewGroup host, View child, + AccessibilityEvent event) { + return bridge.onRequestSendAccessibilityEvent(host, child, event); + } + + @Override + public void sendAccessibilityEvent(View host, int eventType) { + bridge.sendAccessibilityEvent(host, eventType); + } + + @Override + public void sendAccessibilityEventUnchecked(View host, AccessibilityEvent event) { + bridge.sendAccessibilityEventUnchecked(host, event); + } + }; + } + + public static boolean dispatchPopulateAccessibilityEvent(Object delegate, View host, + AccessibilityEvent event) { + return ((AccessibilityDelegate) delegate).dispatchPopulateAccessibilityEvent(host, event); + } + + public static void onInitializeAccessibilityEvent(Object delegate, View host, + AccessibilityEvent event) { + ((AccessibilityDelegate) delegate).onInitializeAccessibilityEvent(host, event); + } + + public static void onInitializeAccessibilityNodeInfo(Object delegate, View host, Object info) { + ((AccessibilityDelegate) delegate).onInitializeAccessibilityNodeInfo(host, + (AccessibilityNodeInfo) info); + } + + public static void onPopulateAccessibilityEvent(Object delegate, View host, + AccessibilityEvent event) { + ((AccessibilityDelegate) delegate).onPopulateAccessibilityEvent(host, event); + } + + public static boolean onRequestSendAccessibilityEvent(Object delegate, ViewGroup host, + View child, AccessibilityEvent event) { + return ((AccessibilityDelegate) delegate).onRequestSendAccessibilityEvent(host, child, + event); + } + + public static void sendAccessibilityEvent(Object delegate, View host, int eventType) { + ((AccessibilityDelegate) delegate).sendAccessibilityEvent(host, eventType); + } + + public static void sendAccessibilityEventUnchecked(Object delegate, View host, + AccessibilityEvent event) { + ((AccessibilityDelegate) delegate).sendAccessibilityEventUnchecked(host, event); + } +*/ +} diff --git a/actionbarsherlock/library/src/android/support/v4/view/ActionMode.java b/actionbarsherlock/library/src/android/support/v4/view/ActionMode.java new file mode 100644 index 000000000..c84dedb19 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/view/ActionMode.java @@ -0,0 +1,188 @@ +/* + * Copyright 2011 Jake Wharton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.view; + +import android.view.View; + +/** + * Represents a contextual mode of the user interface. Action modes can be used + * for modal interactions with content and replace parts of the normal UI until + * finished. Examples of good action modes include selection modes, search, + * content editing, etc. + */ +public abstract class ActionMode { + /** + *

Callback interface for action modes. Supplied to + * {@link android.support.v4.app.FragmentActivity#startActionMode(Callback)}, + * a Callback configures and handles events raised by a user's interaction + * with an action mode.

+ * + *

An action mode's lifecycle is as follows: + *

    + *
  • {@link #onCreateActionMode(ActionMode, Menu)} once on initial + * creation
  • + *
  • {@link #onPrepareActionMode(ActionMode, Menu)} after creation and + * any time the ActionMode is invalidated
  • + *
  • {@link #onActionItemClicked(ActionMode, MenuItem)} any time a + * contextual action button is clicked
  • + *
  • {@link #onDestroyActionMode(ActionMode)} when the action mode is + * closed
  • + *
+ *

+ */ + public interface Callback { + /** + * Called to report a user click on an action button. + * + * @param mode The current ActionMode + * @param item The item that was clicked + * @return true if this callback handled the event, false if the + * standard MenuItem invocation should continue. + */ + boolean onActionItemClicked(ActionMode mode, MenuItem item); + + /** + * Called when action mode is first created. The menu supplied will be + * used to generate action buttons for the action mode. + * + * @param mode ActionMode being created + * @param menu Menu used to populate action buttons + * @return true if the action mode should be created, false if entering + * this mode should be aborted. + */ + boolean onCreateActionMode(ActionMode mode, Menu menu); + + /** + * Called when an action mode is about to be exited and destroyed. + * + * @param mode The current ActionMode being destroyed + */ + void onDestroyActionMode(ActionMode mode); + + /** + * Called to refresh an action mode's action menu whenever it is + * invalidated. + * + * @param mode ActionMode being prepared + * @param menu Menu used to populate action buttons + * @return true if the menu or action mode was updated, false otherwise. + */ + boolean onPrepareActionMode(ActionMode mode, Menu menu); + } + + /** + * Finish and close this action mode. The action mode's + * {@link ActionMode.Callback} will have its + * {@link ActionMode.Callback#onDestroyActionMode(ActionMode)} method + * called. + */ + public abstract void finish(); + + /** + * Returns the current custom view for this action mode. + * + * @return The current custom view + */ + public abstract View getCustomView(); + + /** + * Returns the menu of actions that this action mode presents. + * + * @return The action mode's menu. + */ + public abstract Menu getMenu(); + + /** + * Returns a {@link MenuInflater} with the ActionMode's context. + * + * @return Menu inflater. + */ + public abstract MenuInflater getMenuInflater(); + + /** + * Returns the current subtitle of this action mode. + * + * @return Subtitle text + */ + public abstract CharSequence getSubtitle(); + + /** + * Returns the current title of this action mode. + * + * @return Title text + */ + public abstract CharSequence getTitle(); + + /** + * Invalidate the action mode and refresh menu content. The mode's + * {@link ActionMode.Callback} will have its + * {@link ActionMode.Callback#onPrepareActionMode(ActionMode, Menu)} method + * called. If it returns true the menu will be scanned for updated content + * and any relevant changes will be reflected to the user. + */ + public abstract void invalidate(); + + /** + * Set a custom view for this action mode. The custom view will take the + * place of the title and subtitle. Useful for things like search boxes. + * + * @param view Custom view to use in place of the title/subtitle. + * @see #setTitle(CharSequence) + * @see #setSubtitle(CharSequence) + */ + public abstract void setCustomView(View view); + + /** + * Set the subtitle of the action mode. This method will have no visible + * effect if a custom view has been set. + * + * @param resId Resource ID of a string to set as the subtitle + * @see #setSubtitle(CharSequence) + * @see #setCustomView(View) + */ + public abstract void setSubtitle(int resId); + + /** + * Set the subtitle of the action mode. This method will have no visible + * effect if a custom view has been set. + * + * @param subtitle Subtitle string to set + * @see #setSubtitle(int) + * @see #setCustomView(View) + */ + public abstract void setSubtitle(CharSequence subtitle); + + /** + * Set the title of the action mode. This method will have no visible effect + * if a custom view has been set. + * + * @param resId Resource ID of a string to set as the title + * @see #setTitle(CharSequence) + * @see #setCustomView(View) + */ + public abstract void setTitle(int resId); + + /** + * Set the title of the action mode. This method will have no visible effect + * if a custom view has been set. + * + * @param title Title string to set + * @see #setTitle(int) + * @see #setCustomView(View) + */ + public abstract void setTitle(CharSequence title); +} diff --git a/actionbarsherlock/library/src/android/support/v4/view/KeyEventCompat.java b/actionbarsherlock/library/src/android/support/v4/view/KeyEventCompat.java new file mode 100644 index 000000000..0967592d6 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/view/KeyEventCompat.java @@ -0,0 +1,144 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.view; + +import android.view.KeyEvent; + +/** + * Helper for accessing newer features in KeyEvent. + */ +public class KeyEventCompat { + /** + * Interface for the full API. + */ + interface KeyEventVersionImpl { + public int normalizeMetaState(int metaState); + public boolean metaStateHasModifiers(int metaState, int modifiers); + public boolean metaStateHasNoModifiers(int metaState); + } + + /** + * Interface implementation that doesn't use anything about v4 APIs. + */ + static class BaseKeyEventVersionImpl implements KeyEventVersionImpl { + private static final int META_MODIFIER_MASK = + KeyEvent.META_SHIFT_ON | KeyEvent.META_SHIFT_LEFT_ON | KeyEvent.META_SHIFT_RIGHT_ON + | KeyEvent.META_ALT_ON | KeyEvent.META_ALT_LEFT_ON | KeyEvent.META_ALT_RIGHT_ON + | KeyEvent.META_SYM_ON; + + // Mask of all lock key meta states. + private static final int META_ALL_MASK = META_MODIFIER_MASK; + + private static int metaStateFilterDirectionalModifiers(int metaState, + int modifiers, int basic, int left, int right) { + final boolean wantBasic = (modifiers & basic) != 0; + final int directional = left | right; + final boolean wantLeftOrRight = (modifiers & directional) != 0; + + if (wantBasic) { + if (wantLeftOrRight) { + throw new IllegalArgumentException("bad arguments"); + } + return metaState & ~directional; + } else if (wantLeftOrRight) { + return metaState & ~basic; + } else { + return metaState; + } + } + + @Override + public int normalizeMetaState(int metaState) { + if ((metaState & (KeyEvent.META_SHIFT_LEFT_ON | KeyEvent.META_SHIFT_RIGHT_ON)) != 0) { + metaState |= KeyEvent.META_SHIFT_ON; + } + if ((metaState & (KeyEvent.META_ALT_LEFT_ON | KeyEvent.META_ALT_RIGHT_ON)) != 0) { + metaState |= KeyEvent.META_ALT_ON; + } + return metaState & META_ALL_MASK; + } + + @Override + public boolean metaStateHasModifiers(int metaState, int modifiers) { + metaState = normalizeMetaState(metaState) & META_MODIFIER_MASK; + metaState = metaStateFilterDirectionalModifiers(metaState, modifiers, + KeyEvent.META_SHIFT_ON, KeyEvent.META_SHIFT_LEFT_ON, KeyEvent.META_SHIFT_RIGHT_ON); + metaState = metaStateFilterDirectionalModifiers(metaState, modifiers, + KeyEvent.META_ALT_ON, KeyEvent.META_ALT_LEFT_ON, KeyEvent.META_ALT_RIGHT_ON); + return metaState == modifiers; + } + + @Override + public boolean metaStateHasNoModifiers(int metaState) { + return (normalizeMetaState(metaState) & META_MODIFIER_MASK) == 0; + } + } + + /** + * Interface implementation for devices with at least v11 APIs. + */ + static class HoneycombKeyEventVersionImpl implements KeyEventVersionImpl { + @Override + public int normalizeMetaState(int metaState) { + return KeyEventCompatHoneycomb.normalizeMetaState(metaState); + } + + @Override + public boolean metaStateHasModifiers(int metaState, int modifiers) { + return KeyEventCompatHoneycomb.metaStateHasModifiers(metaState, modifiers); + } + + @Override + public boolean metaStateHasNoModifiers(int metaState) { + return KeyEventCompatHoneycomb.metaStateHasNoModifiers(metaState); + } + } + + /** + * Select the correct implementation to use for the current platform. + */ + static final KeyEventVersionImpl IMPL; + static { + if (android.os.Build.VERSION.SDK_INT >= 11) { + IMPL = new HoneycombKeyEventVersionImpl(); + } else { + IMPL = new BaseKeyEventVersionImpl(); + } + } + + // ------------------------------------------------------------------- + + public static int normalizeMetaState(int metaState) { + return IMPL.normalizeMetaState(metaState); + } + + public static boolean metaStateHasModifiers(int metaState, int modifiers) { + return IMPL.metaStateHasModifiers(metaState, modifiers); + } + + public static boolean metaStateHasNoModifiers(int metaState) { + return IMPL.metaStateHasNoModifiers(metaState); + } + + public static boolean hasModifiers(KeyEvent event, int modifiers) { + return IMPL.metaStateHasModifiers(event.getMetaState(), modifiers); + } + + public static boolean hasNoModifiers(KeyEvent event) { + return IMPL.metaStateHasNoModifiers(event.getMetaState()); + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/view/KeyEventCompatHoneycomb.java b/actionbarsherlock/library/src/android/support/v4/view/KeyEventCompatHoneycomb.java new file mode 100644 index 000000000..8819357ff --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/view/KeyEventCompatHoneycomb.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.view; + +import android.view.KeyEvent; + +/** + * Implementation of key event compatibility that can call Honeycomb APIs. + */ +class KeyEventCompatHoneycomb { + public static int normalizeMetaState(int metaState) { + return KeyEvent.normalizeMetaState(metaState); + } + + public static boolean metaStateHasModifiers(int metaState, int modifiers) { + return KeyEvent.metaStateHasModifiers(metaState, modifiers); + } + + public static boolean metaStateHasNoModifiers(int metaState) { + return KeyEvent.metaStateHasNoModifiers(metaState); + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/view/Menu.java b/actionbarsherlock/library/src/android/support/v4/view/Menu.java new file mode 100644 index 000000000..39a697181 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/view/Menu.java @@ -0,0 +1,33 @@ +package android.support.v4.view; + +public interface Menu extends android.view.Menu { + @Override + MenuItem add(CharSequence title); + + @Override + MenuItem add(int groupId, int itemId, int order, int titleRes); + + @Override + MenuItem add(int titleRes); + + @Override + MenuItem add(int groupId, int itemId, int order, CharSequence title); + + @Override + SubMenu addSubMenu(int groupId, int itemId, int order, CharSequence title); + + @Override + SubMenu addSubMenu(int groupId, int itemId, int order, int titleRes); + + @Override + SubMenu addSubMenu(CharSequence title); + + @Override + SubMenu addSubMenu(int titleRes); + + @Override + MenuItem findItem(int id); + + @Override + MenuItem getItem(int index); +} diff --git a/actionbarsherlock/library/src/android/support/v4/view/MenuInflater.java b/actionbarsherlock/library/src/android/support/v4/view/MenuInflater.java new file mode 100644 index 000000000..4d2a0a2b0 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/view/MenuInflater.java @@ -0,0 +1,463 @@ +/* + * Copyright (C) 2006 The Android Open Source Project + * 2011 Jake Wharton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.view; + +import java.io.IOException; +import java.lang.reflect.Constructor; +import java.lang.reflect.Method; +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; +import android.content.Context; +import android.content.res.XmlResourceParser; +import android.util.AttributeSet; +import android.util.Xml; +import android.view.InflateException; +import android.view.View; +import com.actionbarsherlock.internal.view.menu.MenuBuilder; +import com.actionbarsherlock.internal.view.menu.MenuItemImpl; +import com.actionbarsherlock.internal.view.menu.SubMenuBuilder; + +/** + * This class is used to instantiate menu XML files into Menu objects. + *

+ * For performance reasons, menu inflation relies heavily on pre-processing of + * XML files that is done at build time. Therefore, it is not currently possible + * to use MenuInflater with an XmlPullParser over a plain XML file at runtime; + * it only works with an XmlPullParser returned from a compiled resource (R. + * something file.) + */ +public final class MenuInflater extends android.view.MenuInflater { + private static final Class[] ACTION_VIEW_CONSTRUCTOR_SIGNATURE = new Class[] { Context.class }; + private static final Class[] PARAM_TYPES = new Class[] { android.support.v4.view.MenuItem.class }; + + /** Android XML namespace. */ + private static final String XML_NS = "http://schemas.android.com/apk/res/android"; + + /** Menu tag name in XML. */ + private static final String XML_MENU = "menu"; + + /** Group tag name in XML. */ + private static final String XML_GROUP = "group"; + + /** Item tag name in XML. */ + private static final String XML_ITEM = "item"; + + + /** Context from which to inflate resources. */ + private final Context mContext; + + /** Native inflater for context menu fallback. */ + private final android.view.MenuInflater mNativeMenuInflater; + + + /** + * Constructs a menu inflater. + * + * @see Activity#getMenuInflater() + */ + public MenuInflater(Context context, android.view.MenuInflater nativeMenuInflater) { + super(context); + mContext = context; + mNativeMenuInflater = nativeMenuInflater; + } + + + /** + * Inflate a menu hierarchy from the specified XML resource. Throws + * {@link InflateException} if there is an error. + * + * @param menuRes Resource ID for an XML layout resource to load (e.g., + * R.menu.main_activity) + * @param menu The Menu to inflate into. The items and submenus will be + * added to this Menu. + */ + @Override + public void inflate(int menuRes, android.view.Menu menu) { + if (!(menu instanceof MenuBuilder)) { + mNativeMenuInflater.inflate(menuRes, menu); + return; + } + + MenuBuilder actionBarMenu = (MenuBuilder)menu; + XmlResourceParser parser = null; + try { + parser = mContext.getResources().getLayout(menuRes); + AttributeSet attrs = Xml.asAttributeSet(parser); + + parseMenu(parser, attrs, actionBarMenu); + } catch (XmlPullParserException e) { + throw new InflateException("Error inflating menu XML", e); + } catch (IOException e) { + throw new InflateException("Error inflating menu XML", e); + } finally { + if (parser != null) parser.close(); + } + } + + /** + * Called internally to fill the given menu. If a sub menu is seen, it will + * call this recursively. + */ + private void parseMenu(XmlPullParser parser, AttributeSet attrs, MenuBuilder menu) + throws XmlPullParserException, IOException { + ActionBarMenuState menuState = new ActionBarMenuState(menu); + + int eventType = parser.getEventType(); + String tagName; + boolean lookingForEndOfUnknownTag = false; + String unknownTagName = null; + + // This loop will skip to the menu start tag + do { + if (eventType == XmlPullParser.START_TAG) { + tagName = parser.getName(); + if (tagName.equals(XML_MENU)) { + // Go to next tag + eventType = parser.next(); + break; + } + + throw new RuntimeException("Expecting menu, got " + tagName); + } + eventType = parser.next(); + } while (eventType != XmlPullParser.END_DOCUMENT); + + boolean reachedEndOfMenu = false; + while (!reachedEndOfMenu) { + switch (eventType) { + case XmlPullParser.START_TAG: + if (lookingForEndOfUnknownTag) { + break; + } + + tagName = parser.getName(); + if (tagName.equals(XML_GROUP)) { + menuState.readGroup(attrs); + } else if (tagName.equals(XML_ITEM)) { + menuState.readItem(attrs); + } else if (tagName.equals(XML_MENU)) { + // A menu start tag denotes a submenu for an item + SubMenuBuilder subMenu = menuState.addSubMenuItem(); + + // Parse the submenu into returned SubMenu + parseMenu(parser, attrs, subMenu); + } else { + lookingForEndOfUnknownTag = true; + unknownTagName = tagName; + } + break; + + case XmlPullParser.END_TAG: + tagName = parser.getName(); + if (lookingForEndOfUnknownTag && tagName.equals(unknownTagName)) { + lookingForEndOfUnknownTag = false; + unknownTagName = null; + } else if (tagName.equals(XML_GROUP)) { + menuState.resetGroup(); + } else if (tagName.equals(XML_ITEM)) { + // Add the item if it hasn't been added (if the item was + // a submenu, it would have been added already) + if (!menuState.hasAddedItem()) { + menuState.addItem(); + } + } else if (tagName.equals(XML_MENU)) { + reachedEndOfMenu = true; + } + break; + + case XmlPullParser.END_DOCUMENT: + throw new RuntimeException("Unexpected end of document"); + } + + eventType = parser.next(); + } + } + + + + /** + * State for the current menu. + *

+ * Groups can not be nested unless there is another menu (which will have + * its state class). + */ + private final class ActionBarMenuState { + private final MenuBuilder menu; + + /* + * Group state is set on items as they are added, allowing an item to + * override its group state. (As opposed to set on items at the group end tag.) + */ + private int groupId; + private int groupCategory; + private int groupOrder; + private int groupCheckable; + private boolean groupVisible; + private boolean groupEnabled; + + private boolean itemAdded; + private int itemId; + private int itemCategoryOrder; + private String itemTitle; + private String itemTitleCondensed; + private int itemIconResId; + private char itemAlphabeticShortcut; + private char itemNumericShortcut; + /** + * Sync to attrs.xml enum: + * - 0: none + * - 1: all + * - 2: exclusive + */ + private int itemCheckable; + private boolean itemChecked; + private boolean itemVisible; + private boolean itemEnabled; + private String itemListenerMethodName; + private int itemShowAsAction; + private int itemActionLayout; + private String itemActionViewClassName; + + private static final int defaultGroupId = View.NO_ID; + private static final int defaultItemId = View.NO_ID; + private static final int defaultItemCategory = 0; + private static final int defaultItemOrder = 0; + private static final int defaultItemCheckable = 0; + private static final boolean defaultItemChecked = false; + private static final boolean defaultItemVisible = true; + private static final boolean defaultItemEnabled = true; + private static final int defaultItemShowAsAction = 0; + private static final int defaultIconResId = View.NO_ID; + + /** Mirror of package-scoped Menu.CATEGORY_MASK. */ + private static final int Menu__CATEGORY_MASK = 0xffff0000; + /** Mirror of package-scoped Menu.USER_MASK. */ + private static final int Menu__USER_MASK = 0x0000ffff; + + public ActionBarMenuState(MenuBuilder menu) { + this.menu = menu; + + resetGroup(); + } + + public void resetGroup() { + groupId = defaultGroupId; + groupCategory = defaultItemCategory; + groupOrder = defaultItemOrder; + groupCheckable = defaultItemCheckable; + groupVisible = defaultItemVisible; + groupEnabled = defaultItemEnabled; + } + + /** + * Called when the parser is pointing to a group tag. + */ + public void readGroup(AttributeSet attrs) { + //TypedArray a = mContext.obtainStyledAttributes(attrs, com.android.internal.R.styleable.MenuGroup); + + //groupId = a.getResourceId(com.android.internal.R.styleable.MenuGroup_id, defaultGroupId); + groupId = attrs.getAttributeResourceValue(XML_NS, "id", defaultGroupId); + + //groupCategory = a.getInt(com.android.internal.R.styleable.MenuGroup_menuCategory, defaultItemCategory); + groupCategory = attrs.getAttributeIntValue(XML_NS, "menuCategory", defaultItemCategory); + + //groupOrder = a.getInt(com.android.internal.R.styleable.MenuGroup_orderInCategory, defaultItemOrder); + groupOrder = attrs.getAttributeIntValue(XML_NS, "orderInCategory", defaultItemOrder); + + //groupCheckable = a.getInt(com.android.internal.R.styleable.MenuGroup_checkableBehavior, defaultItemCheckable); + groupCheckable = attrs.getAttributeIntValue(XML_NS, "checkableBehavior", defaultItemCheckable); + + //groupVisible = a.getBoolean(com.android.internal.R.styleable.MenuGroup_visible, defaultItemVisible); + groupVisible = attrs.getAttributeBooleanValue(XML_NS, "visible", defaultItemVisible); + + //groupEnabled = a.getBoolean(com.android.internal.R.styleable.MenuGroup_enabled, defaultItemEnabled); + groupEnabled = attrs.getAttributeBooleanValue(XML_NS, "enabled", defaultItemEnabled); + + //a.recycle(); + } + + /** + * Called when the parser is pointing to an item tag. + */ + public void readItem(AttributeSet attrs) { + //TypedArray a = mContext.obtainStyledAttributes(attrs, com.android.internal.R.styleable.MenuItem); + + // Inherit attributes from the group as default value + + //itemId = a.getResourceId(com.android.internal.R.styleable.MenuItem_id, defaultItemId); + itemId = attrs.getAttributeResourceValue(XML_NS, "id", defaultItemId); + + //final int category = a.getInt(com.android.internal.R.styleable.MenuItem_menuCategory, groupCategory); + final int category = attrs.getAttributeIntValue(XML_NS, "menuCategory", groupCategory); + + //final int order = a.getInt(com.android.internal.R.styleable.MenuItem_orderInCategory, groupOrder); + final int order = attrs.getAttributeIntValue(XML_NS, "orderInCategory", groupOrder); + + //itemCategoryOrder = (category & Menu.CATEGORY_MASK) | (order & Menu.USER_MASK); + itemCategoryOrder = (category & Menu__CATEGORY_MASK) | (order & Menu__USER_MASK); + + //itemTitle = a.getString(com.android.internal.R.styleable.MenuItem_title); + final int itemTitleId = attrs.getAttributeResourceValue(XML_NS, "title", 0); + if (itemTitleId != 0) { + itemTitle = mContext.getString(itemTitleId); + } else { + itemTitle = attrs.getAttributeValue(XML_NS, "title"); + } + + //itemTitleCondensed = a.getString(com.android.internal.R.styleable.MenuItem_titleCondensed); + final int itemTitleCondensedId = attrs.getAttributeResourceValue(XML_NS, "titleCondensed", 0); + if (itemTitleCondensedId != 0) { + itemTitleCondensed = mContext.getString(itemTitleCondensedId); + } else { + itemTitleCondensed = attrs.getAttributeValue(XML_NS, "titleCondensed"); + } + + //itemIconResId = a.getResourceId(com.android.internal.R.styleable.MenuItem_icon, 0); + itemIconResId = attrs.getAttributeResourceValue(XML_NS, "icon", defaultIconResId); + + //itemAlphabeticShortcut = getShortcut(a.getString(com.android.internal.R.styleable.MenuItem_alphabeticShortcut)); + itemAlphabeticShortcut = getShortcut(attrs.getAttributeValue(XML_NS, "alphabeticShortcut")); + + //itemNumericShortcut = getShortcut(a.getString(com.android.internal.R.styleable.MenuItem_numericShortcut)); + itemNumericShortcut = getShortcut(attrs.getAttributeValue(XML_NS, "numericShortcut")); + + //if (a.hasValue(com.android.internal.R.styleable.MenuItem_checkable)) { + if (attrs.getAttributeValue(XML_NS, "checkable") != null) { + // Item has attribute checkable, use it + //itemCheckable = a.getBoolean(com.android.internal.R.styleable.MenuItem_checkable, false) ? 1 : 0; + itemCheckable = attrs.getAttributeBooleanValue(XML_NS, "checkable", false) ? 1 : 0; + } else { + // Item does not have attribute, use the group's (group can have one more state + // for checkable that represents the exclusive checkable) + itemCheckable = groupCheckable; + } + + //itemChecked = a.getBoolean(com.android.internal.R.styleable.MenuItem_checked, defaultItemChecked); + itemChecked = attrs.getAttributeBooleanValue(XML_NS, "checked", defaultItemChecked); + + //itemVisible = a.getBoolean(com.android.internal.R.styleable.MenuItem_visible, groupVisible); + itemVisible = attrs.getAttributeBooleanValue(XML_NS, "visible", groupVisible); + + //itemEnabled = a.getBoolean(com.android.internal.R.styleable.MenuItem_enabled, groupEnabled); + itemEnabled = attrs.getAttributeBooleanValue(XML_NS, "enabled", groupEnabled); + + //presumed emulation of 3.0+'s MenuInflator: + itemListenerMethodName = attrs.getAttributeValue(XML_NS, "onClick"); + itemShowAsAction = attrs.getAttributeIntValue(XML_NS, "showAsAction", defaultItemShowAsAction); + itemActionLayout = attrs.getAttributeResourceValue(XML_NS, "actionLayout", 0); + itemActionViewClassName = attrs.getAttributeValue(XML_NS, "actionViewClass"); + + //a.recycle(); + + itemAdded = false; + } + + private char getShortcut(String shortcutString) { + if (shortcutString == null) { + return 0; + } else { + return shortcutString.charAt(0); + } + } + + private void setItem(MenuItemImpl item) { + item.setChecked(itemChecked) + .setVisible(itemVisible) + .setEnabled(itemEnabled) + .setCheckable(itemCheckable >= 1) + .setTitleCondensed(itemTitleCondensed) + .setIcon(itemIconResId) + .setAlphabeticShortcut(itemAlphabeticShortcut) + .setNumericShortcut(itemNumericShortcut); + + if (itemShowAsAction > 0) { + item.setShowAsAction(itemShowAsAction); + } + if (itemListenerMethodName != null) { + if (MenuInflater.this.mContext.isRestricted()) { + throw new IllegalStateException("The android:onClick attribute cannot be used within a restricted context"); + } + item.setOnMenuItemClickListener(new InflatedOnMenuItemClickListener(itemListenerMethodName)); + } + if (itemCheckable >= 2) { + item.setExclusiveCheckable(true); + } + if (itemActionViewClassName != null) { + try { + Context context = MenuInflater.this.mContext; + ClassLoader loader = context.getClassLoader(); + Class actionViewClass = Class.forName(itemActionViewClassName, true, loader); + Constructor constructor = actionViewClass.getConstructor(ACTION_VIEW_CONSTRUCTOR_SIGNATURE); + View actionView = (View)constructor.newInstance(new Object[] { context }); + item.setActionView(actionView); + } catch (Exception e) { + throw new InflateException(e); + } + } else if (itemActionLayout > 0) { + item.setActionView(itemActionLayout); + } + } + + public void addItem() { + itemAdded = true; + setItem((MenuItemImpl)menu.add(groupId, itemId, itemCategoryOrder, itemTitle)); + } + + public SubMenuBuilder addSubMenuItem() { + itemAdded = true; + SubMenuBuilder subMenu = menu.addSubMenu(groupId, itemId, itemCategoryOrder, itemTitle); + setItem(subMenu.getItem()); + return subMenu; + } + + public boolean hasAddedItem() { + return itemAdded; + } + } + + class InflatedOnMenuItemClickListener extends android.support.v4.view.MenuItem.OnMenuItemClickListener { + private Method mMethod; + + public InflatedOnMenuItemClickListener(String methodName) { + final Class localClass = mContext.getClass(); + try { + mMethod = localClass.getMethod(methodName, PARAM_TYPES); + } catch (Exception e) { + StringBuilder b = new StringBuilder(); + b.append("Couldn't resolve menu item onClick handler "); + b.append(methodName); + b.append(" in class "); + b.append(localClass.getName()); + throw new InflateException(b.toString(), e); + } + } + + @Override + public boolean onMenuItemClick(MenuItem item) { + final Object[] params = new Object[] { item }; + try { + if (mMethod.getReturnType() == Boolean.TYPE) { + return (Boolean)mMethod.invoke(mContext, params); + } + return false; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + } +} \ No newline at end of file diff --git a/actionbarsherlock/library/src/android/support/v4/view/MenuItem.java b/actionbarsherlock/library/src/android/support/v4/view/MenuItem.java new file mode 100644 index 000000000..26ddd7973 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/view/MenuItem.java @@ -0,0 +1,187 @@ +/* + * Copyright (C) 2006 The Android Open Source Project + * 2011 Jake Wharton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.view; + +import com.actionbarsherlock.internal.view.menu.MenuItemWrapper; +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.view.View; + +/** + *

Interface for direct access to a previously created menu item.

+ * + *

An Item is returned by calling one of the {@link Menu#add(int)} + * methods.

+ * + *

For a feature set of specific menu types, see {@link Menu}.

+ */ +public interface MenuItem extends android.view.MenuItem { + /** + * Interface definition for a callback to be invoked when a menu item is + * clicked. + */ + public static abstract class OnMenuItemClickListener implements android.view.MenuItem.OnMenuItemClickListener { + /** + * Called when a menu item has been invoked. This is the first code + * that is executed; if it returns true, no other callbacks will be + * executed. + * + * @param item The menu item that was invoked. + * @return Return true to consume this click and prevent others from + * executing. + */ + public abstract boolean onMenuItemClick(MenuItem item); + + @Override + public final boolean onMenuItemClick(android.view.MenuItem item) { + return this.onMenuItemClick(new MenuItemWrapper(item)); + } + } + + + + /** + * Always show this item as a button in an Action Bar. Use sparingly! If too + * many items are set to always show in the Action Bar it can crowd the + * Action Bar and degrade the user experience on devices with smaller + * screens. A good rule of thumb is to have no more than 2 items set to + * always show at a time. + */ + public static final int SHOW_AS_ACTION_ALWAYS = android.view.MenuItem.SHOW_AS_ACTION_ALWAYS; + + /** + * Show this item as a button in an Action Bar if the system decides there + * is room for it. + */ + public static final int SHOW_AS_ACTION_IF_ROOM = android.view.MenuItem.SHOW_AS_ACTION_IF_ROOM; + + /** + * Never show this item as a button in an Action Bar. + */ + public static final int SHOW_AS_ACTION_NEVER = android.view.MenuItem.SHOW_AS_ACTION_NEVER; + + /** + * When this item is in the action bar, always show it with a text label + * even if it also has an icon specified. + */ + public static final int SHOW_AS_ACTION_WITH_TEXT = android.view.MenuItem.SHOW_AS_ACTION_WITH_TEXT; + + + + /** + * Returns the currently set action view for this menu item. + * + * @return The item's action view + * @see #setActionView(int) + * @see #setActionView(View) + * @see #setShowAsAction(int) + */ + View getActionView(); + + /** + * Set an action view for this menu item. An action view will be displayed + * in place of an automatically generated menu item element in the UI when + * this item is shown as an action within a parent. + * + * @param resId Layout resource to use for presenting this item to the user. + * @return This Item so additional setters can be called. + * @see #setActionView(View) + */ + MenuItem setActionView(int resId); + + /** + * Set an action view for this menu item. An action view will be displayed + * in place of an automatically generated menu item element in the UI when + * this item is shown as an action within a parent. + * + * @param view View to use for presenting this item to the user. + * @return This Item so additional setters can be called. + * @see #setActionView(int) + */ + MenuItem setActionView(View view); + + /** + * Sets how this item should display in the presence of an Action Bar. The + * parameter actionEnum is a flag set. One of + * {@link #SHOW_AS_ACTION_ALWAYS}, {@link #SHOW_AS_ACTION_IF_ROOM}, or + * {@link #SHOW_AS_ACTION_NEVER} should be used, and you may optionally OR + * the value with {@link #SHOW_AS_ACTION_WITH_TEXT}. + * {@link #SHOW_AS_ACTION_WITH_TEXT} requests that when the item is shown as + * an action, it should be shown with a text label. + * + * @param actionEnum How the item should display. One of + * {@link #SHOW_AS_ACTION_ALWAYS}, {@link #SHOW_AS_ACTION_IF_ROOM}, or + * {@link #SHOW_AS_ACTION_NEVER}. {@link #SHOW_AS_ACTION_NEVER} is the + * default. + */ + void setShowAsAction(int actionEnum); + + // --------------------------------------------------------------------- + // MENU ITEM SUPPORT + // --------------------------------------------------------------------- + + @Override + SubMenu getSubMenu(); + + @Override + MenuItem setAlphabeticShortcut(char alphaChar); + + @Override + MenuItem setCheckable(boolean checkable); + + @Override + MenuItem setChecked(boolean checked); + + @Override + MenuItem setEnabled(boolean enabled); + + @Override + MenuItem setIcon(Drawable icon); + + @Override + MenuItem setIcon(int iconRes); + + @Override + MenuItem setIntent(Intent intent); + + @Override + MenuItem setNumericShortcut(char numericChar); + + /** + * Set a custom listener for invocation of this menu item. + * + * @param menuItemClickListener The object to receive invokations. + * @return This Item so additional setters can be called. + */ + MenuItem setOnMenuItemClickListener(OnMenuItemClickListener menuItemClickListener); + + @Override + MenuItem setShortcut(char numericChar, char alphaChar); + + @Override + MenuItem setTitle(CharSequence title); + + @Override + MenuItem setTitle(int title); + + @Override + MenuItem setTitleCondensed(CharSequence title); + + @Override + MenuItem setVisible(boolean visible); +} diff --git a/actionbarsherlock/library/src/android/support/v4/view/MotionEventCompat.java b/actionbarsherlock/library/src/android/support/v4/view/MotionEventCompat.java new file mode 100644 index 000000000..e88ab63c7 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/view/MotionEventCompat.java @@ -0,0 +1,194 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.view; + +import android.view.MotionEvent; + +/** + * Helper for accessing newer features in MotionEvent. + */ +public class MotionEventCompat { + /** + * Interface for the full API. + */ + interface MotionEventVersionImpl { + public int findPointerIndex(MotionEvent event, int pointerId); + public int getPointerId(MotionEvent event, int pointerIndex); + public float getX(MotionEvent event, int pointerIndex); + public float getY(MotionEvent event, int pointerIndex); + } + + /** + * Interface implementation that doesn't use anything about v4 APIs. + */ + static class BaseMotionEventVersionImpl implements MotionEventVersionImpl { + @Override + public int findPointerIndex(MotionEvent event, int pointerId) { + if (pointerId == 0) { + // id 0 == index 0 and vice versa. + return 0; + } + return -1; + } + @Override + public int getPointerId(MotionEvent event, int pointerIndex) { + if (pointerIndex == 0) { + // index 0 == id 0 and vice versa. + return 0; + } + throw new IndexOutOfBoundsException("Pre-Eclair does not support multiple pointers"); + } + @Override + public float getX(MotionEvent event, int pointerIndex) { + if (pointerIndex == 0) { + return event.getX(); + } + throw new IndexOutOfBoundsException("Pre-Eclair does not support multiple pointers"); + } + @Override + public float getY(MotionEvent event, int pointerIndex) { + if (pointerIndex == 0) { + return event.getY(); + } + throw new IndexOutOfBoundsException("Pre-Eclair does not support multiple pointers"); + } + } + + /** + * Interface implementation for devices with at least v11 APIs. + */ + static class EclairMotionEventVersionImpl implements MotionEventVersionImpl { + @Override + public int findPointerIndex(MotionEvent event, int pointerId) { + return MotionEventCompatEclair.findPointerIndex(event, pointerId); + } + @Override + public int getPointerId(MotionEvent event, int pointerIndex) { + return MotionEventCompatEclair.getPointerId(event, pointerIndex); + } + @Override + public float getX(MotionEvent event, int pointerIndex) { + return MotionEventCompatEclair.getX(event, pointerIndex); + } + @Override + public float getY(MotionEvent event, int pointerIndex) { + return MotionEventCompatEclair.getY(event, pointerIndex); + } + } + + /** + * Select the correct implementation to use for the current platform. + */ + static final MotionEventVersionImpl IMPL; + static { + if (android.os.Build.VERSION.SDK_INT >= 5) { + IMPL = new EclairMotionEventVersionImpl(); + } else { + IMPL = new BaseMotionEventVersionImpl(); + } + } + + // ------------------------------------------------------------------- + + /** + * Synonym for {@link MotionEvent#ACTION_MASK}. + */ + public static final int ACTION_MASK = 0xff; + + /** + * Synonym for {@link MotionEvent#ACTION_POINTER_DOWN}. + */ + public static final int ACTION_POINTER_DOWN = 5; + + /** + * Synonym for {@link MotionEvent#ACTION_POINTER_UP}. + */ + public static final int ACTION_POINTER_UP = 6; + + /** + * Synonym for {@link MotionEvent#ACTION_HOVER_MOVE}. + */ + public static final int ACTION_HOVER_MOVE = 7; + + /** + * Synonym for {@link MotionEvent#ACTION_SCROLL}. + */ + public static final int ACTION_SCROLL = 8; + + /** + * Synonym for {@link MotionEvent#ACTION_POINTER_INDEX_MASK}. + */ + public static final int ACTION_POINTER_INDEX_MASK = 0xff00; + + /** + * Synonym for {@link MotionEvent#ACTION_POINTER_INDEX_SHIFT}. + */ + public static final int ACTION_POINTER_INDEX_SHIFT = 8; + + /** + * Call {@link MotionEvent#getAction}, returning only the {@link #ACTION_MASK} + * portion. + */ + public static int getActionMasked(MotionEvent event) { + return event.getAction() & ACTION_MASK; + } + + /** + * Call {@link MotionEvent#getAction}, returning only the pointer index + * portion + */ + public static int getActionIndex(MotionEvent event) { + return (event.getAction() & ACTION_POINTER_INDEX_MASK) + >> ACTION_POINTER_INDEX_SHIFT; + } + + /** + * Call {@link MotionEvent#findPointerIndex(int)}. + * If running on a pre-{@android.os.Build.VERSION_CODES#HONEYCOMB} device, + * does nothing and returns -1. + */ + public static int findPointerIndex(MotionEvent event, int pointerId) { + return IMPL.findPointerIndex(event, pointerId); + } + + /** + * Call {@link MotionEvent#getPointerId(int)}. + * If running on a pre-{@android.os.Build.VERSION_CODES#HONEYCOMB} device, + * {@link IndexOutOfBoundsException} is thrown. + */ + public static int getPointerId(MotionEvent event, int pointerIndex) { + return IMPL.getPointerId(event, pointerIndex); + } + + /** + * Call {@link MotionEvent#getX(int)}. + * If running on a pre-{@android.os.Build.VERSION_CODES#HONEYCOMB} device, + * {@link IndexOutOfBoundsException} is thrown. + */ + public static float getX(MotionEvent event, int pointerIndex) { + return IMPL.getX(event, pointerIndex); + } + + /** + * Call {@link MotionEvent#getY(int)}. + * If running on a pre-{@android.os.Build.VERSION_CODES#HONEYCOMB} device, + * {@link IndexOutOfBoundsException} is thrown. + */ + public static float getY(MotionEvent event, int pointerIndex) { + return IMPL.getY(event, pointerIndex); + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/view/MotionEventCompatEclair.java b/actionbarsherlock/library/src/android/support/v4/view/MotionEventCompatEclair.java new file mode 100644 index 000000000..dedb1d1d0 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/view/MotionEventCompatEclair.java @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.view; + +import android.view.MotionEvent; + +/** + * Implementation of motion event compatibility that can call Eclair APIs. + */ +class MotionEventCompatEclair { + public static int findPointerIndex(MotionEvent event, int pointerId) { + return event.findPointerIndex(pointerId); + } + public static int getPointerId(MotionEvent event, int pointerIndex) { + return event.getPointerId(pointerIndex); + } + public static float getX(MotionEvent event, int pointerIndex) { + return event.getX(pointerIndex); + } + public static float getY(MotionEvent event, int pointerIndex) { + return event.getY(pointerIndex); + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/view/PagerAdapter.java b/actionbarsherlock/library/src/android/support/v4/view/PagerAdapter.java new file mode 100644 index 000000000..0be93a0d5 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/view/PagerAdapter.java @@ -0,0 +1,138 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.view; + +import android.os.Parcelable; +import android.view.View; + +/** + * Base class providing the adapter to populate pages inside of + * a {@link ViewPager}. You will most likely want to use a more + * specific implementation of this, such as + * {@link android.support.v4.app.FragmentPagerAdapter} or + * {@link android.support.v4.app.FragmentStatePagerAdapter}. + */ +public abstract class PagerAdapter { + private DataSetObserver mObserver; + + public static final int POSITION_UNCHANGED = -1; + public static final int POSITION_NONE = -2; + + /** + * Used to watch for changes within the adapter. + */ + interface DataSetObserver { + public void onDataSetChanged(); + } + + /** + * Return the number of views available. + */ + public abstract int getCount(); + + /** + * Called when a change in the shown pages is going to start being made. + * @param container The containing View which is displaying this adapter's + * page views. + */ + public abstract void startUpdate(View container); + + /** + * Create the page for the given position. The adapter is responsible + * for adding the view to the container given here, although it only + * must ensure this is done by the time it returns from + * {@link #finishUpdate()}. + * + * @param container The containing View in which the page will be shown. + * @param position The page position to be instantiated. + * @return Returns an Object representing the new page. This does not + * need to be a View, but can be some other container of the page. + */ + public abstract Object instantiateItem(View container, int position); + + /** + * Remove a page for the given position. The adapter is responsible + * for removing the view from its container, although it only must ensure + * this is done by the time it returns from {@link #finishUpdate()}. + * + * @param container The containing View from which the page will be removed. + * @param position The page position to be removed. + * @param object The same object that was returned by + * {@link #instantiateItem(View, int)}. + */ + public abstract void destroyItem(View container, int position, Object object); + + /** + * Called to inform the adapter of which item is currently considered to + * be the "primary", that is the one show to the user as the current page. + * + * @param container The containing View from which the page will be removed. + * @param position The page position that is now the primary. + * @param object The same object that was returned by + * {@link #instantiateItem(View, int)}. + */ + public void setPrimaryItem(View container, int position, Object object) { + } + + /** + * Called when the a change in the shown pages has been completed. At this + * point you must ensure that all of the pages have actually been added or + * removed from the container as appropriate. + * @param container The containing View which is displaying this adapter's + * page views. + */ + public abstract void finishUpdate(View container); + + public abstract boolean isViewFromObject(View view, Object object); + + public abstract Parcelable saveState(); + + public abstract void restoreState(Parcelable state, ClassLoader loader); + + /** + * Called when the host view is attempting to determine if an item's position + * has changed. Returns {@link #POSITION_UNCHANGED} if the position of the given + * item has not changed or {@link #POSITION_NONE} if the item is no longer present + * in the adapter. + * + *

The default implementation assumes that items will never + * change position and always returns {@link #POSITION_UNCHANGED}. + * + * @param object Object representing an item, previously returned by a call to + * {@link #instantiateItem(View, int)}. + * @return object's new position index from [0, {@link #getCount()}), + * {@link #POSITION_UNCHANGED} if the object's position has not changed, + * or {@link #POSITION_NONE} if the item is no longer present. + */ + public int getItemPosition(Object object) { + return POSITION_UNCHANGED; + } + + /** + * This method should be called by the application if the data backing this adapter has changed + * and associated views should update. + */ + public void notifyDataSetChanged() { + if (mObserver != null) { + mObserver.onDataSetChanged(); + } + } + + void setDataSetObserver(DataSetObserver observer) { + mObserver = observer; + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/view/SubMenu.java b/actionbarsherlock/library/src/android/support/v4/view/SubMenu.java new file mode 100644 index 000000000..953e193f7 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/view/SubMenu.java @@ -0,0 +1,30 @@ +package android.support.v4.view; + +import android.graphics.drawable.Drawable; +import android.view.View; + +public interface SubMenu extends android.view.SubMenu { + @Override + MenuItem getItem(); + + @Override + SubMenu setHeaderIcon(Drawable icon); + + @Override + SubMenu setHeaderIcon(int iconRes); + + @Override + SubMenu setHeaderTitle(CharSequence title); + + @Override + SubMenu setHeaderTitle(int titleRes); + + @Override + SubMenu setHeaderView(View view); + + @Override + SubMenu setIcon(Drawable icon); + + @Override + SubMenu setIcon(int iconRes); +} diff --git a/actionbarsherlock/library/src/android/support/v4/view/VelocityTrackerCompat.java b/actionbarsherlock/library/src/android/support/v4/view/VelocityTrackerCompat.java new file mode 100644 index 000000000..8c8749061 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/view/VelocityTrackerCompat.java @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.view; + +import android.view.VelocityTracker; + +/** + * Helper for accessing newer features in VelocityTracker. + */ +public class VelocityTrackerCompat { + /** + * Interface for the full API. + */ + interface VelocityTrackerVersionImpl { + public float getXVelocity(VelocityTracker tracker, int pointerId); + public float getYVelocity(VelocityTracker tracker, int pointerId); + } + + /** + * Interface implementation that doesn't use anything about v4 APIs. + */ + static class BaseVelocityTrackerVersionImpl implements VelocityTrackerVersionImpl { + @Override + public float getXVelocity(VelocityTracker tracker, int pointerId) { + return tracker.getXVelocity(); + } + @Override + public float getYVelocity(VelocityTracker tracker, int pointerId) { + return tracker.getYVelocity(); + } + } + + /** + * Interface implementation for devices with at least v11 APIs. + */ + static class HoneycombVelocityTrackerVersionImpl implements VelocityTrackerVersionImpl { + @Override + public float getXVelocity(VelocityTracker tracker, int pointerId) { + return VelocityTrackerCompatHoneycomb.getXVelocity(tracker, pointerId); + } + @Override + public float getYVelocity(VelocityTracker tracker, int pointerId) { + return VelocityTrackerCompatHoneycomb.getYVelocity(tracker, pointerId); + } + } + + /** + * Select the correct implementation to use for the current platform. + */ + static final VelocityTrackerVersionImpl IMPL; + static { + if (android.os.Build.VERSION.SDK_INT >= 11) { + IMPL = new HoneycombVelocityTrackerVersionImpl(); + } else { + IMPL = new BaseVelocityTrackerVersionImpl(); + } + } + + // ------------------------------------------------------------------- + + /** + * Call {@link VelocityTracker#getXVelocity(int)}. + * If running on a pre-{@android.os.Build.VERSION_CODES#HONEYCOMB} device, + * returns {@link VelocityTracker#getXVelocity()}. + */ + public static float getXVelocity(VelocityTracker tracker, int pointerId) { + return IMPL.getXVelocity(tracker, pointerId); + } + + /** + * Call {@link VelocityTracker#getYVelocity(int)}. + * If running on a pre-{@android.os.Build.VERSION_CODES#HONEYCOMB} device, + * returns {@link VelocityTracker#getYVelocity()}. + */ + public static float getYVelocity(VelocityTracker tracker, int pointerId) { + return IMPL.getYVelocity(tracker, pointerId); + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/view/VelocityTrackerCompatHoneycomb.java b/actionbarsherlock/library/src/android/support/v4/view/VelocityTrackerCompatHoneycomb.java new file mode 100644 index 000000000..4f9d326c9 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/view/VelocityTrackerCompatHoneycomb.java @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.view; + +import android.view.VelocityTracker; + +/** + * Implementation of velocity tracker compatibility that can call Honeycomb APIs. + */ +class VelocityTrackerCompatHoneycomb { + public static float getXVelocity(VelocityTracker tracker, int pointerId) { + return tracker.getXVelocity(pointerId); + } + public static float getYVelocity(VelocityTracker tracker, int pointerId) { + return tracker.getYVelocity(pointerId); + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/view/ViewCompat.java b/actionbarsherlock/library/src/android/support/v4/view/ViewCompat.java new file mode 100644 index 000000000..33d0cd2b7 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/view/ViewCompat.java @@ -0,0 +1,163 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.view; + +import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat; +import android.view.View; +import android.view.accessibility.AccessibilityEvent; + +/** + * Helper for accessing newer features in View. + */ +public class ViewCompat { + /** + * Always allow a user to over-scroll this view, provided it is a + * view that can scroll. + */ + public static final int OVER_SCROLL_ALWAYS = 0; + + /** + * Allow a user to over-scroll this view only if the content is large + * enough to meaningfully scroll, provided it is a view that can scroll. + */ + public static final int OVER_SCROLL_IF_CONTENT_SCROLLS = 1; + + /** + * Never allow a user to over-scroll this view. + */ + public static final int OVER_SCROLL_NEVER = 2; + + interface ViewCompatImpl { + public boolean canScrollHorizontally(View v, int direction); + public boolean canScrollVertically(View v, int direction); + public int getOverScrollMode(View v); + public void setOverScrollMode(View v, int mode); + public void onInitializeAccessibilityEvent(View v, AccessibilityEvent event); + public void onPopulateAccessibilityEvent(View v, AccessibilityEvent event); + public void onInitializeAccessibilityNodeInfo(View v, AccessibilityNodeInfoCompat info); + public void setAccessibilityDelegate(View v, AccessibilityDelegateCompat delegate); + } + + static class BaseViewCompatImpl implements ViewCompatImpl { + public boolean canScrollHorizontally(View v, int direction) { + return false; + } + public boolean canScrollVertically(View v, int direction) { + return false; + } + public int getOverScrollMode(View v) { + return OVER_SCROLL_NEVER; + } + public void setOverScrollMode(View v, int mode) { + // Do nothing; API doesn't exist + } + public void setAccessibilityDelegate(View v, AccessibilityDelegateCompat delegate) { + // Do nothing; API doesn't exist + } + public void onPopulateAccessibilityEvent(View v, AccessibilityEvent event) { + // Do nothing; API doesn't exist + } + public void onInitializeAccessibilityEvent(View v, AccessibilityEvent event) { + // Do nothing; API doesn't exist + } + public void onInitializeAccessibilityNodeInfo(View v, AccessibilityNodeInfoCompat info) { + // Do nothing; API doesn't exist + } + } + + static class GBViewCompatImpl extends BaseViewCompatImpl { + @Override + public int getOverScrollMode(View v) { + return ViewCompatGingerbread.getOverScrollMode(v); + } + @Override + public void setOverScrollMode(View v, int mode) { + ViewCompatGingerbread.setOverScrollMode(v, mode); + } + } +/* + static class ICSViewCompatImpl extends GBViewCompatImpl { + @Override + public boolean canScrollHorizontally(View v, int direction) { + return ViewCompatICS.canScrollHorizontally(v, direction); + } + @Override + public boolean canScrollVertically(View v, int direction) { + return ViewCompatICS.canScrollVertically(v, direction); + } + @Override + public void onPopulateAccessibilityEvent(View v, AccessibilityEvent event) { + ViewCompatICS.onPopulateAccessibilityEvent(v, event); + } + @Override + public void onInitializeAccessibilityEvent(View v, AccessibilityEvent event) { + ViewCompatICS.onInitializeAccessibilityEvent(v, event); + } + @Override + public void onInitializeAccessibilityNodeInfo(View v, AccessibilityNodeInfoCompat info) { + ViewCompatICS.onInitializeAccessibilityNodeInfo(v, info.getImpl()); + } + @Override + public void setAccessibilityDelegate(View v, AccessibilityDelegateCompat delegate) { + ViewCompatICS.setAccessibilityDelegate(v, delegate.getBridge()); + } + } +*/ + static final ViewCompatImpl IMPL; + static { + final int version = android.os.Build.VERSION.SDK_INT; + /*if (version >= 14) { + IMPL = new ICSViewCompatImpl(); + } else*/ if (version >= 9) { + IMPL = new GBViewCompatImpl(); + } else { + IMPL = new BaseViewCompatImpl(); + } + } + + public static boolean canScrollHorizontally(View v, int direction) { + return IMPL.canScrollHorizontally(v, direction); + } + + public static boolean canScrollVertically(View v, int direction) { + return IMPL.canScrollVertically(v, direction); + } + + public static int getOverScrollMode(View v) { + return IMPL.getOverScrollMode(v); + } + + public static void setOverScrollMode(View v, int mode) { + IMPL.setOverScrollMode(v, mode); + } + + public static void onPopulateAccessibilityEvent(View v, AccessibilityEvent event) { + IMPL.onPopulateAccessibilityEvent(v, event); + } + + public static void onInitializeAccessibilityEvent(View v, AccessibilityEvent event) { + IMPL.onInitializeAccessibilityEvent(v, event); + } + + public static void onInitializeAccessibilityNodeInfo(View v, AccessibilityNodeInfoCompat info) { + IMPL.onInitializeAccessibilityNodeInfo(v, info); + } + + public static void setAccessibilityDelegate(View v, AccessibilityDelegateCompat delegate) { + IMPL.setAccessibilityDelegate(v, delegate); + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/view/ViewCompatGingerbread.java b/actionbarsherlock/library/src/android/support/v4/view/ViewCompatGingerbread.java new file mode 100644 index 000000000..e063778d3 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/view/ViewCompatGingerbread.java @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.view; + +import android.view.View; + +public class ViewCompatGingerbread { + public static int getOverScrollMode(View v) { + return v.getOverScrollMode(); + } + + public static void setOverScrollMode(View v, int mode) { + v.setOverScrollMode(mode); + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/view/ViewCompatICS.java b/actionbarsherlock/library/src/android/support/v4/view/ViewCompatICS.java new file mode 100644 index 000000000..da80d785b --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/view/ViewCompatICS.java @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.view; + +//import android.view.View; +//import android.view.View.AccessibilityDelegate; +//import android.view.accessibility.AccessibilityEvent; +//import android.view.accessibility.AccessibilityNodeInfo; + +/** + * Helper for accessing newer features in View introduced in ICS. + */ +class ViewCompatICS { +/* + public static boolean canScrollHorizontally(View v, int direction) { + return v.canScrollHorizontally(direction); + } + + public static boolean canScrollVertically(View v, int direction) { + return v.canScrollVertically(direction); + } + + public static void setAccessibilityDelegate(View v, Object delegate) { + v.setAccessibilityDelegate((AccessibilityDelegate) delegate); + } + + public static void onPopulateAccessibilityEvent(View v, AccessibilityEvent event) { + v.onPopulateAccessibilityEvent(event); + } + + public static void onInitializeAccessibilityEvent(View v, AccessibilityEvent event) { + v.onInitializeAccessibilityEvent(event); + } + + public static void onInitializeAccessibilityNodeInfo(View v, Object info) { + v.onInitializeAccessibilityNodeInfo((AccessibilityNodeInfo) info); + } +*/ +} diff --git a/actionbarsherlock/library/src/android/support/v4/view/ViewConfigurationCompat.java b/actionbarsherlock/library/src/android/support/v4/view/ViewConfigurationCompat.java new file mode 100644 index 000000000..144466212 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/view/ViewConfigurationCompat.java @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.view; + +import android.view.ViewConfiguration; + +/** + * Helper for accessing newer features in ViewConfiguration. + */ +public class ViewConfigurationCompat { + /** + * Interface for the full API. + */ + interface ViewConfigurationVersionImpl { + public int getScaledPagingTouchSlop(ViewConfiguration config); + } + + /** + * Interface implementation that doesn't use anything about v4 APIs. + */ + static class BaseViewConfigurationVersionImpl implements ViewConfigurationVersionImpl { + @Override + public int getScaledPagingTouchSlop(ViewConfiguration config) { + return config.getScaledTouchSlop(); + } + } + + /** + * Interface implementation for devices with at least v11 APIs. + */ + static class FroyoViewConfigurationVersionImpl implements ViewConfigurationVersionImpl { + @Override + public int getScaledPagingTouchSlop(ViewConfiguration config) { + return ViewConfigurationCompatFroyo.getScaledPagingTouchSlop(config); + } + } + + /** + * Select the correct implementation to use for the current platform. + */ + static final ViewConfigurationVersionImpl IMPL; + static { + if (android.os.Build.VERSION.SDK_INT >= 11) { + IMPL = new FroyoViewConfigurationVersionImpl(); + } else { + IMPL = new BaseViewConfigurationVersionImpl(); + } + } + + // ------------------------------------------------------------------- + + /** + * Call {@link ViewConfiguration#getScaledPagingTouchSlop()}. + * If running on a pre-{@android.os.Build.VERSION_CODES#FROYO} device, + * returns {@link ViewConfiguration#getScaledTouchSlop()}. + */ + public static int getScaledPagingTouchSlop(ViewConfiguration config) { + return IMPL.getScaledPagingTouchSlop(config); + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/view/ViewConfigurationCompatFroyo.java b/actionbarsherlock/library/src/android/support/v4/view/ViewConfigurationCompatFroyo.java new file mode 100644 index 000000000..e97a2a2ee --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/view/ViewConfigurationCompatFroyo.java @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.view; + +import android.view.ViewConfiguration; + +/** + * Implementation of menu compatibility that can call Honeycomb APIs. + */ +class ViewConfigurationCompatFroyo { + public static int getScaledPagingTouchSlop(ViewConfiguration config) { + return config.getScaledPagingTouchSlop(); + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/view/ViewGroupCompat.java b/actionbarsherlock/library/src/android/support/v4/view/ViewGroupCompat.java new file mode 100644 index 000000000..162554f32 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/view/ViewGroupCompat.java @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.view; + +//import android.os.Build; +import android.view.View; +import android.view.ViewGroup; +import android.view.accessibility.AccessibilityEvent; + +/** + * Helper for accessing newer features in ViewGroup. + */ +public class ViewGroupCompat { + + interface ViewGroupCompatImpl { + public boolean onRequestSendAccessibilityEvent(ViewGroup group, View child, + AccessibilityEvent event); + } + + static class ViewGroupCompatStubImpl implements ViewGroupCompatImpl { + public boolean onRequestSendAccessibilityEvent( + ViewGroup group, View child, AccessibilityEvent event) { + return true; + } + } +/* + static class ViewGroupCompatIcsImpl extends ViewGroupCompatStubImpl { + @Override + public boolean onRequestSendAccessibilityEvent( + ViewGroup group, View child, AccessibilityEvent event) { + return ViewGroupCompatIcs.onRequestSendAccessibilityEvent(group, child, event); + } + } +*/ + static final ViewGroupCompatImpl IMPL; + static { + //if (Build.VERSION.SDK_INT >= 14) { + // IMPL = new ViewGroupCompatIcsImpl(); + //} else { + IMPL = new ViewGroupCompatStubImpl(); + //} + } + + /* + * Hide the constructor. + */ + private ViewGroupCompat() { + + } + + /** + * Called when a child has requested sending an {@link AccessibilityEvent} and + * gives an opportunity to its parent to augment the event. + *

+ * If an {@link AccessibilityDelegateCompat} has been specified via calling + * {@link ViewCompat#setAccessibilityDelegate(View, AccessibilityDelegateCompat)} its + * {@link AccessibilityDelegateCompat#onRequestSendAccessibilityEvent(ViewGroup, View, + * AccessibilityEvent)} is responsible for handling this call. + *

+ * + * @param group The group whose method to invoke. + * @param child The child which requests sending the event. + * @param event The event to be sent. + * @return True if the event should be sent. + */ + public static boolean onRequestSendAccessibilityEvent(ViewGroup group, View child, + AccessibilityEvent event) { + return IMPL.onRequestSendAccessibilityEvent(group, child, event); + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/view/ViewGroupCompatIcs.java b/actionbarsherlock/library/src/android/support/v4/view/ViewGroupCompatIcs.java new file mode 100644 index 000000000..a5d5ff452 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/view/ViewGroupCompatIcs.java @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.view; + +//import android.view.View; +//import android.view.ViewGroup; +//import android.view.accessibility.AccessibilityEvent; + +/** + * ICS specific ViewGroup API implementation. + */ +class ViewGroupCompatIcs { +/* + public static boolean onRequestSendAccessibilityEvent(ViewGroup group, View child, + AccessibilityEvent event) { + return group.onRequestSendAccessibilityEvent(child, event); + } +*/ +} diff --git a/actionbarsherlock/library/src/android/support/v4/view/ViewPager.java b/actionbarsherlock/library/src/android/support/v4/view/ViewPager.java new file mode 100644 index 000000000..9aa7b0eb1 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/view/ViewPager.java @@ -0,0 +1,1730 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.view; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import android.os.Parcel; +import android.os.Parcelable; +import android.os.SystemClock; +import android.support.v4.os.ParcelableCompat; +import android.support.v4.os.ParcelableCompatCreatorCallbacks; +import android.support.v4.widget.EdgeEffectCompat; +import android.util.AttributeSet; +import android.util.Log; +import android.view.FocusFinder; +import android.view.KeyEvent; +import android.view.MotionEvent; +import android.view.SoundEffectConstants; +import android.view.VelocityTracker; +import android.view.View; +import android.view.ViewConfiguration; +import android.view.ViewGroup; +import android.view.ViewParent; +import android.view.accessibility.AccessibilityEvent; +import android.view.animation.Interpolator; +import android.widget.Scroller; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; + +/** + * Layout manager that allows the user to flip left and right + * through pages of data. You supply an implementation of a + * {@link PagerAdapter} to generate the pages that the view shows. + * + *

Note this class is currently under early design and + * development. The API will likely change in later updates of + * the compatibility library, requiring changes to the source code + * of apps when they are compiled against the newer version.

+ */ +public class ViewPager extends ViewGroup { + private static final String TAG = "ViewPager"; + private static final boolean DEBUG = false; + + private static final boolean USE_CACHE = false; + + private static final int DEFAULT_OFFSCREEN_PAGES = 1; + private static final int MAX_SETTLE_DURATION = 600; // ms + + static class ItemInfo { + Object object; + int position; + boolean scrolling; + } + + private static final Comparator COMPARATOR = new Comparator(){ + @Override + public int compare(ItemInfo lhs, ItemInfo rhs) { + return lhs.position - rhs.position; + }}; + + private static final Interpolator sInterpolator = new Interpolator() { + public float getInterpolation(float t) { + // _o(t) = t * t * ((tension + 1) * t + tension) + // o(t) = _o(t - 1) + 1 + t -= 1.0f; + return t * t * t + 1.0f; + } + }; + + private final ArrayList mItems = new ArrayList(); + + private PagerAdapter mAdapter; + private int mCurItem; // Index of currently displayed page. + private int mRestoredCurItem = -1; + private Parcelable mRestoredAdapterState = null; + private ClassLoader mRestoredClassLoader = null; + private Scroller mScroller; + private PagerAdapter.DataSetObserver mObserver; + + private int mPageMargin; + private Drawable mMarginDrawable; + + private int mChildWidthMeasureSpec; + private int mChildHeightMeasureSpec; + private boolean mInLayout; + + private boolean mScrollingCacheEnabled; + + private boolean mPopulatePending; + private boolean mScrolling; + private int mOffscreenPageLimit = DEFAULT_OFFSCREEN_PAGES; + + private boolean mIsBeingDragged; + private boolean mIsUnableToDrag; + private int mTouchSlop; + private float mInitialMotionX; + /** + * Position of the last motion event. + */ + private float mLastMotionX; + private float mLastMotionY; + /** + * ID of the active pointer. This is used to retain consistency during + * drags/flings if multiple pointers are used. + */ + private int mActivePointerId = INVALID_POINTER; + /** + * Sentinel value for no current active pointer. + * Used by {@link #mActivePointerId}. + */ + private static final int INVALID_POINTER = -1; + + /** + * Determines speed during touch scrolling + */ + private VelocityTracker mVelocityTracker; + private int mMinimumVelocity; + private int mMaximumVelocity; + private float mBaseLineFlingVelocity; + private float mFlingVelocityInfluence; + + private boolean mFakeDragging; + private long mFakeDragBeginTime; + + private EdgeEffectCompat mLeftEdge; + private EdgeEffectCompat mRightEdge; + + private boolean mFirstLayout = true; + + private OnPageChangeListener mOnPageChangeListener; + + /** + * Indicates that the pager is in an idle, settled state. The current page + * is fully in view and no animation is in progress. + */ + public static final int SCROLL_STATE_IDLE = 0; + + /** + * Indicates that the pager is currently being dragged by the user. + */ + public static final int SCROLL_STATE_DRAGGING = 1; + + /** + * Indicates that the pager is in the process of settling to a final position. + */ + public static final int SCROLL_STATE_SETTLING = 2; + + private int mScrollState = SCROLL_STATE_IDLE; + + /** + * Callback interface for responding to changing state of the selected page. + */ + public interface OnPageChangeListener { + + /** + * This method will be invoked when the current page is scrolled, either as part + * of a programmatically initiated smooth scroll or a user initiated touch scroll. + * + * @param position Position index of the first page currently being displayed. + * Page position+1 will be visible if positionOffset is nonzero. + * @param positionOffset Value from [0, 1) indicating the offset from the page at position. + * @param positionOffsetPixels Value in pixels indicating the offset from position. + */ + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels); + + /** + * This method will be invoked when a new page becomes selected. Animation is not + * necessarily complete. + * + * @param position Position index of the new selected page. + */ + public void onPageSelected(int position); + + /** + * Called when the scroll state changes. Useful for discovering when the user + * begins dragging, when the pager is automatically settling to the current page, + * or when it is fully stopped/idle. + * + * @param state The new scroll state. + * @see ViewPager#SCROLL_STATE_IDLE + * @see ViewPager#SCROLL_STATE_DRAGGING + * @see ViewPager#SCROLL_STATE_SETTLING + */ + public void onPageScrollStateChanged(int state); + } + + /** + * Simple implementation of the {@link OnPageChangeListener} interface with stub + * implementations of each method. Extend this if you do not intend to override + * every method of {@link OnPageChangeListener}. + */ + public static class SimpleOnPageChangeListener implements OnPageChangeListener { + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + // This space for rent + } + + @Override + public void onPageSelected(int position) { + // This space for rent + } + + @Override + public void onPageScrollStateChanged(int state) { + // This space for rent + } + } + + public ViewPager(Context context) { + super(context); + initViewPager(); + } + + public ViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + initViewPager(); + } + + void initViewPager() { + setWillNotDraw(false); + setDescendantFocusability(FOCUS_AFTER_DESCENDANTS); + setFocusable(true); + final Context context = getContext(); + mScroller = new Scroller(context, sInterpolator); + final ViewConfiguration configuration = ViewConfiguration.get(context); + mTouchSlop = ViewConfigurationCompat.getScaledPagingTouchSlop(configuration); + mMinimumVelocity = configuration.getScaledMinimumFlingVelocity(); + mMaximumVelocity = configuration.getScaledMaximumFlingVelocity(); + mLeftEdge = new EdgeEffectCompat(context); + mRightEdge = new EdgeEffectCompat(context); + + float density = context.getResources().getDisplayMetrics().density; + mBaseLineFlingVelocity = 2500.0f * density; + mFlingVelocityInfluence = 0.4f; + } + + private void setScrollState(int newState) { + if (mScrollState == newState) { + return; + } + + mScrollState = newState; + if (mOnPageChangeListener != null) { + mOnPageChangeListener.onPageScrollStateChanged(newState); + } + } + + public void setAdapter(PagerAdapter adapter) { + if (mAdapter != null) { + mAdapter.setDataSetObserver(null); + mAdapter.startUpdate(this); + for (int i = 0; i < mItems.size(); i++) { + final ItemInfo ii = mItems.get(i); + mAdapter.destroyItem(this, ii.position, ii.object); + } + mAdapter.finishUpdate(this); + mItems.clear(); + removeAllViews(); + mCurItem = 0; + scrollTo(0, 0); + } + + mAdapter = adapter; + + if (mAdapter != null) { + if (mObserver == null) { + mObserver = new DataSetObserver(); + } + mAdapter.setDataSetObserver(mObserver); + mPopulatePending = false; + if (mRestoredCurItem >= 0) { + mAdapter.restoreState(mRestoredAdapterState, mRestoredClassLoader); + setCurrentItemInternal(mRestoredCurItem, false, true); + mRestoredCurItem = -1; + mRestoredAdapterState = null; + mRestoredClassLoader = null; + } else { + populate(); + } + } + } + + public PagerAdapter getAdapter() { + return mAdapter; + } + + /** + * Set the currently selected page. If the ViewPager has already been through its first + * layout there will be a smooth animated transition between the current item and the + * specified item. + * + * @param item Item index to select + */ + public void setCurrentItem(int item) { + mPopulatePending = false; + setCurrentItemInternal(item, !mFirstLayout, false); + } + + /** + * Set the currently selected page. + * + * @param item Item index to select + * @param smoothScroll True to smoothly scroll to the new item, false to transition immediately + */ + public void setCurrentItem(int item, boolean smoothScroll) { + mPopulatePending = false; + setCurrentItemInternal(item, smoothScroll, false); + } + + public int getCurrentItem() { + return mCurItem; + } + + void setCurrentItemInternal(int item, boolean smoothScroll, boolean always) { + setCurrentItemInternal(item, smoothScroll, always, 0); + } + + void setCurrentItemInternal(int item, boolean smoothScroll, boolean always, int velocity) { + if (mAdapter == null || mAdapter.getCount() <= 0) { + setScrollingCacheEnabled(false); + return; + } + if (!always && mCurItem == item && mItems.size() != 0) { + setScrollingCacheEnabled(false); + return; + } + if (item < 0) { + item = 0; + } else if (item >= mAdapter.getCount()) { + item = mAdapter.getCount() - 1; + } + final int pageLimit = mOffscreenPageLimit; + if (item > (mCurItem + pageLimit) || item < (mCurItem - pageLimit)) { + // We are doing a jump by more than one page. To avoid + // glitches, we want to keep all current pages in the view + // until the scroll ends. + for (int i=0; iThis is offered as an optimization. If you know in advance the number + * of pages you will need to support or have lazy-loading mechanisms in place + * on your pages, tweaking this setting can have benefits in perceived smoothness + * of paging animations and interaction. If you have a small number of pages (3-4) + * that you can keep active all at once, less time will be spent in layout for + * newly created view subtrees as the user pages back and forth.

+ * + *

You should keep this limit low, especially if your pages have complex layouts. + * This setting defaults to 1.

+ * + * @param limit How many pages will be kept offscreen in an idle state. + */ + public void setOffscreenPageLimit(int limit) { + if (limit < DEFAULT_OFFSCREEN_PAGES) { + Log.w(TAG, "Requested offscreen page limit " + limit + " too small; defaulting to " + + DEFAULT_OFFSCREEN_PAGES); + limit = DEFAULT_OFFSCREEN_PAGES; + } + if (limit != mOffscreenPageLimit) { + mOffscreenPageLimit = limit; + populate(); + } + } + + /** + * Set the margin between pages. + * + * @param marginPixels Distance between adjacent pages in pixels + * @see #getPageMargin() + * @see #setPageMarginDrawable(Drawable) + * @see #setPageMarginDrawable(int) + */ + public void setPageMargin(int marginPixels) { + final int oldMargin = mPageMargin; + mPageMargin = marginPixels; + + final int width = getWidth(); + recomputeScrollPosition(width, width, marginPixels, oldMargin); + + requestLayout(); + } + + /** + * Return the margin between pages. + * + * @return The size of the margin in pixels + */ + public int getPageMargin() { + return mPageMargin; + } + + /** + * Set a drawable that will be used to fill the margin between pages. + * + * @param d Drawable to display between pages + */ + public void setPageMarginDrawable(Drawable d) { + mMarginDrawable = d; + if (d != null) refreshDrawableState(); + setWillNotDraw(d == null); + invalidate(); + } + + /** + * Set a drawable that will be used to fill the margin between pages. + * + * @param resId Resource ID of a drawable to display between pages + */ + public void setPageMarginDrawable(int resId) { + setPageMarginDrawable(getContext().getResources().getDrawable(resId)); + } + + @Override + protected boolean verifyDrawable(Drawable who) { + return super.verifyDrawable(who) || who == mMarginDrawable; + } + + @Override + protected void drawableStateChanged() { + super.drawableStateChanged(); + final Drawable d = mMarginDrawable; + if (d != null && d.isStateful()) { + d.setState(getDrawableState()); + } + } + + // We want the duration of the page snap animation to be influenced by the distance that + // the screen has to travel, however, we don't want this duration to be effected in a + // purely linear fashion. Instead, we use this method to moderate the effect that the distance + // of travel has on the overall snap duration. + float distanceInfluenceForSnapDuration(float f) { + f -= 0.5f; // center the values about 0. + f *= 0.3f * Math.PI / 2.0f; + return (float) Math.sin(f); + } + + /** + * Like {@link View#scrollBy}, but scroll smoothly instead of immediately. + * + * @param x the number of pixels to scroll by on the X axis + * @param y the number of pixels to scroll by on the Y axis + */ + void smoothScrollTo(int x, int y) { + smoothScrollTo(x, y, 0); + } + + /** + * Like {@link View#scrollBy}, but scroll smoothly instead of immediately. + * + * @param x the number of pixels to scroll by on the X axis + * @param y the number of pixels to scroll by on the Y axis + * @param velocity the velocity associated with a fling, if applicable. (0 otherwise) + */ + void smoothScrollTo(int x, int y, int velocity) { + if (getChildCount() == 0) { + // Nothing to do. + setScrollingCacheEnabled(false); + return; + } + int sx = getScrollX(); + int sy = getScrollY(); + int dx = x - sx; + int dy = y - sy; + if (dx == 0 && dy == 0) { + completeScroll(); + setScrollState(SCROLL_STATE_IDLE); + return; + } + + setScrollingCacheEnabled(true); + mScrolling = true; + setScrollState(SCROLL_STATE_SETTLING); + + final float pageDelta = (float) Math.abs(dx) / (getWidth() + mPageMargin); + int duration = (int) (pageDelta * 100); + + velocity = Math.abs(velocity); + if (velocity > 0) { + duration += (duration / (velocity / mBaseLineFlingVelocity)) * mFlingVelocityInfluence; + } else { + duration += 100; + } + duration = Math.min(duration, MAX_SETTLE_DURATION); + + mScroller.startScroll(sx, sy, dx, dy, duration); + invalidate(); + } + + void addNewItem(int position, int index) { + ItemInfo ii = new ItemInfo(); + ii.position = position; + ii.object = mAdapter.instantiateItem(this, position); + if (index < 0) { + mItems.add(ii); + } else { + mItems.add(index, ii); + } + } + + void dataSetChanged() { + // This method only gets called if our observer is attached, so mAdapter is non-null. + + boolean needPopulate = mItems.size() < 3 && mItems.size() < mAdapter.getCount(); + int newCurrItem = -1; + + for (int i = 0; i < mItems.size(); i++) { + final ItemInfo ii = mItems.get(i); + final int newPos = mAdapter.getItemPosition(ii.object); + + if (newPos == PagerAdapter.POSITION_UNCHANGED) { + continue; + } + + if (newPos == PagerAdapter.POSITION_NONE) { + mItems.remove(i); + i--; + mAdapter.destroyItem(this, ii.position, ii.object); + needPopulate = true; + + if (mCurItem == ii.position) { + // Keep the current item in the valid range + newCurrItem = Math.max(0, Math.min(mCurItem, mAdapter.getCount() - 1)); + } + continue; + } + + if (ii.position != newPos) { + if (ii.position == mCurItem) { + // Our current item changed position. Follow it. + newCurrItem = newPos; + } + + ii.position = newPos; + needPopulate = true; + } + } + + Collections.sort(mItems, COMPARATOR); + + if (newCurrItem >= 0) { + // TODO This currently causes a jump. + setCurrentItemInternal(newCurrItem, false, true); + needPopulate = true; + } + if (needPopulate) { + populate(); + requestLayout(); + } + } + + void populate() { + if (mAdapter == null) { + return; + } + + // Bail now if we are waiting to populate. This is to hold off + // on creating views from the time the user releases their finger to + // fling to a new position until we have finished the scroll to + // that position, avoiding glitches from happening at that point. + if (mPopulatePending) { + if (DEBUG) Log.i(TAG, "populate is pending, skipping for now..."); + return; + } + + // Also, don't populate until we are attached to a window. This is to + // avoid trying to populate before we have restored our view hierarchy + // state and conflicting with what is restored. + if (getWindowToken() == null) { + return; + } + + mAdapter.startUpdate(this); + + final int pageLimit = mOffscreenPageLimit; + final int startPos = Math.max(0, mCurItem - pageLimit); + final int N = mAdapter.getCount(); + final int endPos = Math.min(N-1, mCurItem + pageLimit); + + if (DEBUG) Log.v(TAG, "populating: startPos=" + startPos + " endPos=" + endPos); + + // Add and remove pages in the existing list. + int lastPos = -1; + for (int i=0; i endPos) && !ii.scrolling) { + if (DEBUG) Log.i(TAG, "removing: " + ii.position + " @ " + i); + mItems.remove(i); + i--; + mAdapter.destroyItem(this, ii.position, ii.object); + } else if (lastPos < endPos && ii.position > startPos) { + // The next item is outside of our range, but we have a gap + // between it and the last item where we want to have a page + // shown. Fill in the gap. + lastPos++; + if (lastPos < startPos) { + lastPos = startPos; + } + while (lastPos <= endPos && lastPos < ii.position) { + if (DEBUG) Log.i(TAG, "inserting: " + lastPos + " @ " + i); + addNewItem(lastPos, i); + lastPos++; + i++; + } + } + lastPos = ii.position; + } + + // Add any new pages we need at the end. + lastPos = mItems.size() > 0 ? mItems.get(mItems.size()-1).position : -1; + if (lastPos < endPos) { + lastPos++; + lastPos = lastPos > startPos ? lastPos : startPos; + while (lastPos <= endPos) { + if (DEBUG) Log.i(TAG, "appending: " + lastPos); + addNewItem(lastPos, -1); + lastPos++; + } + } + + if (DEBUG) { + Log.i(TAG, "Current page list:"); + for (int i=0; i CREATOR + = ParcelableCompat.newCreator(new ParcelableCompatCreatorCallbacks() { + @Override + public SavedState createFromParcel(Parcel in, ClassLoader loader) { + return new SavedState(in, loader); + } + @Override + public SavedState[] newArray(int size) { + return new SavedState[size]; + } + }); + + SavedState(Parcel in, ClassLoader loader) { + super(in); + if (loader == null) { + loader = getClass().getClassLoader(); + } + position = in.readInt(); + adapterState = in.readParcelable(loader); + this.loader = loader; + } + } + + @Override + public Parcelable onSaveInstanceState() { + Parcelable superState = super.onSaveInstanceState(); + SavedState ss = new SavedState(superState); + ss.position = mCurItem; + if (mAdapter != null) { + ss.adapterState = mAdapter.saveState(); + } + return ss; + } + + @Override + public void onRestoreInstanceState(Parcelable state) { + if (!(state instanceof SavedState)) { + super.onRestoreInstanceState(state); + return; + } + + SavedState ss = (SavedState)state; + super.onRestoreInstanceState(ss.getSuperState()); + + if (mAdapter != null) { + mAdapter.restoreState(ss.adapterState, ss.loader); + setCurrentItemInternal(ss.position, false, true); + } else { + mRestoredCurItem = ss.position; + mRestoredAdapterState = ss.adapterState; + mRestoredClassLoader = ss.loader; + } + } + + @Override + public void addView(View child, int index, LayoutParams params) { + if (mInLayout) { + addViewInLayout(child, index, params); + child.measure(mChildWidthMeasureSpec, mChildHeightMeasureSpec); + } else { + super.addView(child, index, params); + } + + if (USE_CACHE) { + if (child.getVisibility() != GONE) { + child.setDrawingCacheEnabled(mScrollingCacheEnabled); + } else { + child.setDrawingCacheEnabled(false); + } + } + } + + ItemInfo infoForChild(View child) { + for (int i=0; i 0) { + final int oldScrollPos = getScrollX(); + final int oldwwm = oldWidth + oldMargin; + final int oldScrollItem = oldScrollPos / oldwwm; + final float scrollOffset = (float) (oldScrollPos % oldwwm) / oldwwm; + final int scrollPos = (int) ((oldScrollItem + scrollOffset) * widthWithMargin); + scrollTo(scrollPos, getScrollY()); + if (!mScroller.isFinished()) { + // We now return to your regularly scheduled scroll, already in progress. + final int newDuration = mScroller.getDuration() - mScroller.timePassed(); + mScroller.startScroll(scrollPos, 0, mCurItem * widthWithMargin, 0, newDuration); + } + } else { + int scrollPos = mCurItem * widthWithMargin; + if (scrollPos != getScrollX()) { + completeScroll(); + scrollTo(scrollPos, getScrollY()); + } + } + } + + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + mInLayout = true; + populate(); + mInLayout = false; + + final int count = getChildCount(); + final int width = r-l; + + for (int i = 0; i < count; i++) { + View child = getChildAt(i); + ItemInfo ii; + if (child.getVisibility() != GONE && (ii=infoForChild(child)) != null) { + int loff = (width + mPageMargin) * ii.position; + int childLeft = getPaddingLeft() + loff; + int childTop = getPaddingTop(); + if (DEBUG) Log.v(TAG, "Positioning #" + i + " " + child + " f=" + ii.object + + ":" + childLeft + "," + childTop + " " + child.getMeasuredWidth() + + "x" + child.getMeasuredHeight()); + child.layout(childLeft, childTop, + childLeft + child.getMeasuredWidth(), + childTop + child.getMeasuredHeight()); + } + } + mFirstLayout = false; + } + + @Override + public void computeScroll() { + if (DEBUG) Log.i(TAG, "computeScroll: finished=" + mScroller.isFinished()); + if (!mScroller.isFinished()) { + if (mScroller.computeScrollOffset()) { + if (DEBUG) Log.i(TAG, "computeScroll: still scrolling"); + int oldX = getScrollX(); + int oldY = getScrollY(); + int x = mScroller.getCurrX(); + int y = mScroller.getCurrY(); + + if (oldX != x || oldY != y) { + scrollTo(x, y); + } + + if (mOnPageChangeListener != null) { + final int widthWithMargin = getWidth() + mPageMargin; + final int position = x / widthWithMargin; + final int offsetPixels = x % widthWithMargin; + final float offset = (float) offsetPixels / widthWithMargin; + mOnPageChangeListener.onPageScrolled(position, offset, offsetPixels); + } + + // Keep on drawing until the animation has finished. + invalidate(); + return; + } + } + + // Done with scroll, clean up state. + completeScroll(); + } + + private void completeScroll() { + boolean needPopulate = mScrolling; + if (needPopulate) { + // Done with scroll, no longer want to cache view drawing. + setScrollingCacheEnabled(false); + mScroller.abortAnimation(); + int oldX = getScrollX(); + int oldY = getScrollY(); + int x = mScroller.getCurrX(); + int y = mScroller.getCurrY(); + if (oldX != x || oldY != y) { + scrollTo(x, y); + } + setScrollState(SCROLL_STATE_IDLE); + } + mPopulatePending = false; + mScrolling = false; + for (int i=0; i 0 && scrollX == 0) || (dx < 0 && mAdapter != null && + // scrollX >= (mAdapter.getCount() - 1) * getWidth() - 1); + if (DEBUG) Log.v(TAG, "Moved x to " + x + "," + y + " diff=" + xDiff + "," + yDiff); + + if (canScroll(this, false, (int) dx, (int) x, (int) y)) { + // Nested view has scrollable area under this point. Let it be handled there. + mInitialMotionX = mLastMotionX = x; + mLastMotionY = y; + return false; + } + if (xDiff > mTouchSlop && xDiff > yDiff) { + if (DEBUG) Log.v(TAG, "Starting drag!"); + mIsBeingDragged = true; + setScrollState(SCROLL_STATE_DRAGGING); + mLastMotionX = x; + setScrollingCacheEnabled(true); + } else { + if (yDiff > mTouchSlop) { + // The finger has moved enough in the vertical + // direction to be counted as a drag... abort + // any attempt to drag horizontally, to work correctly + // with children that have scrolling containers. + if (DEBUG) Log.v(TAG, "Starting unable to drag!"); + mIsUnableToDrag = true; + } + } + break; + } + + case MotionEvent.ACTION_DOWN: { + /* + * Remember location of down touch. + * ACTION_DOWN always refers to pointer index 0. + */ + mLastMotionX = mInitialMotionX = ev.getX(); + mLastMotionY = ev.getY(); + mActivePointerId = MotionEventCompat.getPointerId(ev, 0); + + if (mScrollState == SCROLL_STATE_SETTLING) { + // Let the user 'catch' the pager as it animates. + mIsBeingDragged = true; + mIsUnableToDrag = false; + setScrollState(SCROLL_STATE_DRAGGING); + } else { + completeScroll(); + mIsBeingDragged = false; + mIsUnableToDrag = false; + } + + if (DEBUG) Log.v(TAG, "Down at " + mLastMotionX + "," + mLastMotionY + + " mIsBeingDragged=" + mIsBeingDragged + + "mIsUnableToDrag=" + mIsUnableToDrag); + break; + } + + case MotionEventCompat.ACTION_POINTER_UP: + onSecondaryPointerUp(ev); + break; + } + + /* + * The only time we want to intercept motion events is if we are in the + * drag mode. + */ + return mIsBeingDragged; + } + + @Override + public boolean onTouchEvent(MotionEvent ev) { + if (mFakeDragging) { + // A fake drag is in progress already, ignore this real one + // but still eat the touch events. + // (It is likely that the user is multi-touching the screen.) + return true; + } + + if (ev.getAction() == MotionEvent.ACTION_DOWN && ev.getEdgeFlags() != 0) { + // Don't handle edge touches immediately -- they may actually belong to one of our + // descendants. + return false; + } + + if (mAdapter == null || mAdapter.getCount() == 0) { + // Nothing to present or scroll; nothing to touch. + return false; + } + + if (mVelocityTracker == null) { + mVelocityTracker = VelocityTracker.obtain(); + } + mVelocityTracker.addMovement(ev); + + final int action = ev.getAction(); + boolean needsInvalidate = false; + + switch (action & MotionEventCompat.ACTION_MASK) { + case MotionEvent.ACTION_DOWN: { + /* + * If being flinged and user touches, stop the fling. isFinished + * will be false if being flinged. + */ + completeScroll(); + + // Remember where the motion event started + mLastMotionX = mInitialMotionX = ev.getX(); + mActivePointerId = MotionEventCompat.getPointerId(ev, 0); + break; + } + case MotionEvent.ACTION_MOVE: + if (!mIsBeingDragged) { + final int pointerIndex = MotionEventCompat.findPointerIndex(ev, mActivePointerId); + final float x = MotionEventCompat.getX(ev, pointerIndex); + final float xDiff = Math.abs(x - mLastMotionX); + final float y = MotionEventCompat.getY(ev, pointerIndex); + final float yDiff = Math.abs(y - mLastMotionY); + if (DEBUG) Log.v(TAG, "Moved x to " + x + "," + y + " diff=" + xDiff + "," + yDiff); + if (xDiff > mTouchSlop && xDiff > yDiff) { + if (DEBUG) Log.v(TAG, "Starting drag!"); + mIsBeingDragged = true; + mLastMotionX = x; + setScrollState(SCROLL_STATE_DRAGGING); + setScrollingCacheEnabled(true); + } + } + if (mIsBeingDragged) { + // Scroll to follow the motion event + final int activePointerIndex = MotionEventCompat.findPointerIndex( + ev, mActivePointerId); + final float x = MotionEventCompat.getX(ev, activePointerIndex); + final float deltaX = mLastMotionX - x; + mLastMotionX = x; + float oldScrollX = getScrollX(); + float scrollX = oldScrollX + deltaX; + final int width = getWidth(); + final int widthWithMargin = width + mPageMargin; + + final int lastItemIndex = mAdapter.getCount() - 1; + final float leftBound = Math.max(0, (mCurItem - 1) * widthWithMargin); + final float rightBound = + Math.min(mCurItem + 1, lastItemIndex) * widthWithMargin; + if (scrollX < leftBound) { + if (leftBound == 0) { + float over = -scrollX; + needsInvalidate = mLeftEdge.onPull(over / width); + } + scrollX = leftBound; + } else if (scrollX > rightBound) { + if (rightBound == lastItemIndex * widthWithMargin) { + float over = scrollX - rightBound; + needsInvalidate = mRightEdge.onPull(over / width); + } + scrollX = rightBound; + } + // Don't lose the rounded component + mLastMotionX += scrollX - (int) scrollX; + scrollTo((int) scrollX, getScrollY()); + if (mOnPageChangeListener != null) { + final int position = (int) scrollX / widthWithMargin; + final int positionOffsetPixels = (int) scrollX % widthWithMargin; + final float positionOffset = (float) positionOffsetPixels / widthWithMargin; + mOnPageChangeListener.onPageScrolled(position, positionOffset, + positionOffsetPixels); + } + } + break; + case MotionEvent.ACTION_UP: + if (mIsBeingDragged) { + final VelocityTracker velocityTracker = mVelocityTracker; + velocityTracker.computeCurrentVelocity(1000, mMaximumVelocity); + int initialVelocity = (int) VelocityTrackerCompat.getXVelocity( + velocityTracker, mActivePointerId); + mPopulatePending = true; + final int widthWithMargin = getWidth() + mPageMargin; + final int scrollX = getScrollX(); + final int currentPage = scrollX / widthWithMargin; + int nextPage = initialVelocity > 0 ? currentPage : currentPage + 1; + setCurrentItemInternal(nextPage, true, true, initialVelocity); + + mActivePointerId = INVALID_POINTER; + endDrag(); + needsInvalidate = mLeftEdge.onRelease() | mRightEdge.onRelease(); + } + break; + case MotionEvent.ACTION_CANCEL: + if (mIsBeingDragged) { + setCurrentItemInternal(mCurItem, true, true); + mActivePointerId = INVALID_POINTER; + endDrag(); + needsInvalidate = mLeftEdge.onRelease() | mRightEdge.onRelease(); + } + break; + case MotionEventCompat.ACTION_POINTER_DOWN: { + final int index = MotionEventCompat.getActionIndex(ev); + final float x = MotionEventCompat.getX(ev, index); + mLastMotionX = x; + mActivePointerId = MotionEventCompat.getPointerId(ev, index); + break; + } + case MotionEventCompat.ACTION_POINTER_UP: + onSecondaryPointerUp(ev); + mLastMotionX = MotionEventCompat.getX(ev, + MotionEventCompat.findPointerIndex(ev, mActivePointerId)); + break; + } + if (needsInvalidate) { + invalidate(); + } + return true; + } + + @Override + public void draw(Canvas canvas) { + super.draw(canvas); + boolean needsInvalidate = false; + + final int overScrollMode = ViewCompat.getOverScrollMode(this); + if (overScrollMode == ViewCompat.OVER_SCROLL_ALWAYS || + (overScrollMode == ViewCompat.OVER_SCROLL_IF_CONTENT_SCROLLS && + mAdapter != null && mAdapter.getCount() > 1)) { + if (!mLeftEdge.isFinished()) { + final int restoreCount = canvas.save(); + final int height = getHeight() - getPaddingTop() - getPaddingBottom(); + + canvas.rotate(270); + canvas.translate(-height + getPaddingTop(), 0); + mLeftEdge.setSize(height, getWidth()); + needsInvalidate |= mLeftEdge.draw(canvas); + canvas.restoreToCount(restoreCount); + } + if (!mRightEdge.isFinished()) { + final int restoreCount = canvas.save(); + final int width = getWidth(); + final int height = getHeight() - getPaddingTop() - getPaddingBottom(); + final int itemCount = mAdapter != null ? mAdapter.getCount() : 1; + + canvas.rotate(90); + canvas.translate(-getPaddingTop(), + -itemCount * (width + mPageMargin) + mPageMargin); + mRightEdge.setSize(height, width); + needsInvalidate |= mRightEdge.draw(canvas); + canvas.restoreToCount(restoreCount); + } + } else { + mLeftEdge.finish(); + mRightEdge.finish(); + } + + if (needsInvalidate) { + // Keep animating + invalidate(); + } + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + + // Draw the margin drawable if needed. + if (mPageMargin > 0 && mMarginDrawable != null) { + final int scrollX = getScrollX(); + final int width = getWidth(); + final int offset = scrollX % (width + mPageMargin); + if (offset != 0) { + // Pages fit completely when settled; we only need to draw when in between + final int left = scrollX - offset + width; + mMarginDrawable.setBounds(left, 0, left + mPageMargin, getHeight()); + mMarginDrawable.draw(canvas); + } + } + } + + /** + * Start a fake drag of the pager. + * + *

A fake drag can be useful if you want to synchronize the motion of the ViewPager + * with the touch scrolling of another view, while still letting the ViewPager + * control the snapping motion and fling behavior. (e.g. parallax-scrolling tabs.) + * Call {@link #fakeDragBy(float)} to simulate the actual drag motion. Call + * {@link #endFakeDrag()} to complete the fake drag and fling as necessary. + * + *

During a fake drag the ViewPager will ignore all touch events. If a real drag + * is already in progress, this method will return false. + * + * @return true if the fake drag began successfully, false if it could not be started. + * + * @see #fakeDragBy(float) + * @see #endFakeDrag() + */ + public boolean beginFakeDrag() { + if (mIsBeingDragged) { + return false; + } + mFakeDragging = true; + setScrollState(SCROLL_STATE_DRAGGING); + mInitialMotionX = mLastMotionX = 0; + if (mVelocityTracker == null) { + mVelocityTracker = VelocityTracker.obtain(); + } else { + mVelocityTracker.clear(); + } + final long time = SystemClock.uptimeMillis(); + final MotionEvent ev = MotionEvent.obtain(time, time, MotionEvent.ACTION_DOWN, 0, 0, 0); + mVelocityTracker.addMovement(ev); + ev.recycle(); + mFakeDragBeginTime = time; + return true; + } + + /** + * End a fake drag of the pager. + * + * @see #beginFakeDrag() + * @see #fakeDragBy(float) + */ + public void endFakeDrag() { + if (!mFakeDragging) { + throw new IllegalStateException("No fake drag in progress. Call beginFakeDrag first."); + } + + final VelocityTracker velocityTracker = mVelocityTracker; + velocityTracker.computeCurrentVelocity(1000, mMaximumVelocity); + int initialVelocity = (int)VelocityTrackerCompat.getYVelocity( + velocityTracker, mActivePointerId); + mPopulatePending = true; + if ((Math.abs(initialVelocity) > mMinimumVelocity) + || Math.abs(mInitialMotionX-mLastMotionX) >= (getWidth()/3)) { + if (mLastMotionX > mInitialMotionX) { + setCurrentItemInternal(mCurItem-1, true, true); + } else { + setCurrentItemInternal(mCurItem+1, true, true); + } + } else { + setCurrentItemInternal(mCurItem, true, true); + } + endDrag(); + + mFakeDragging = false; + } + + /** + * Fake drag by an offset in pixels. You must have called {@link #beginFakeDrag()} first. + * + * @param xOffset Offset in pixels to drag by. + * @see #beginFakeDrag() + * @see #endFakeDrag() + */ + public void fakeDragBy(float xOffset) { + if (!mFakeDragging) { + throw new IllegalStateException("No fake drag in progress. Call beginFakeDrag first."); + } + + mLastMotionX += xOffset; + float scrollX = getScrollX() - xOffset; + final int width = getWidth(); + final int widthWithMargin = width + mPageMargin; + + final float leftBound = Math.max(0, (mCurItem - 1) * widthWithMargin); + final float rightBound = + Math.min(mCurItem + 1, mAdapter.getCount() - 1) * widthWithMargin; + if (scrollX < leftBound) { + scrollX = leftBound; + } else if (scrollX > rightBound) { + scrollX = rightBound; + } + // Don't lose the rounded component + mLastMotionX += scrollX - (int) scrollX; + scrollTo((int) scrollX, getScrollY()); + if (mOnPageChangeListener != null) { + final int position = (int) scrollX / widthWithMargin; + final int positionOffsetPixels = (int) scrollX % widthWithMargin; + final float positionOffset = (float) positionOffsetPixels / widthWithMargin; + mOnPageChangeListener.onPageScrolled(position, positionOffset, + positionOffsetPixels); + } + + // Synthesize an event for the VelocityTracker. + final long time = SystemClock.uptimeMillis(); + final MotionEvent ev = MotionEvent.obtain(mFakeDragBeginTime, time, MotionEvent.ACTION_MOVE, + mLastMotionX, 0, 0); + mVelocityTracker.addMovement(ev); + ev.recycle(); + } + + /** + * Returns true if a fake drag is in progress. + * + * @return true if currently in a fake drag, false otherwise. + * + * @see #beginFakeDrag() + * @see #fakeDragBy(float) + * @see #endFakeDrag() + */ + public boolean isFakeDragging() { + return mFakeDragging; + } + + private void onSecondaryPointerUp(MotionEvent ev) { + final int pointerIndex = MotionEventCompat.getActionIndex(ev); + final int pointerId = MotionEventCompat.getPointerId(ev, pointerIndex); + if (pointerId == mActivePointerId) { + // This was our active pointer going up. Choose a new + // active pointer and adjust accordingly. + final int newPointerIndex = pointerIndex == 0 ? 1 : 0; + mLastMotionX = MotionEventCompat.getX(ev, newPointerIndex); + mActivePointerId = MotionEventCompat.getPointerId(ev, newPointerIndex); + if (mVelocityTracker != null) { + mVelocityTracker.clear(); + } + } + } + + private void endDrag() { + mIsBeingDragged = false; + mIsUnableToDrag = false; + + if (mVelocityTracker != null) { + mVelocityTracker.recycle(); + mVelocityTracker = null; + } + } + + private void setScrollingCacheEnabled(boolean enabled) { + if (mScrollingCacheEnabled != enabled) { + mScrollingCacheEnabled = enabled; + if (USE_CACHE) { + final int size = getChildCount(); + for (int i = 0; i < size; ++i) { + final View child = getChildAt(i); + if (child.getVisibility() != GONE) { + child.setDrawingCacheEnabled(enabled); + } + } + } + } + } + + /** + * Tests scrollability within child views of v given a delta of dx. + * + * @param v View to test for horizontal scrollability + * @param checkV Whether the view v passed should itself be checked for scrollability (true), + * or just its children (false). + * @param dx Delta scrolled in pixels + * @param x X coordinate of the active touch point + * @param y Y coordinate of the active touch point + * @return true if child views of v can be scrolled by delta of dx. + */ + protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) { + if (v instanceof ViewGroup) { + final ViewGroup group = (ViewGroup) v; + final int scrollX = v.getScrollX(); + final int scrollY = v.getScrollY(); + final int count = group.getChildCount(); + // Count backwards - let topmost views consume scroll distance first. + for (int i = count - 1; i >= 0; i--) { + // TODO: Add versioned support here for transformed views. + // This will not work for transformed views in Honeycomb+ + final View child = group.getChildAt(i); + if (x + scrollX >= child.getLeft() && x + scrollX < child.getRight() && + y + scrollY >= child.getTop() && y + scrollY < child.getBottom() && + canScroll(child, true, dx, x + scrollX - child.getLeft(), + y + scrollY - child.getTop())) { + return true; + } + } + } + + return checkV && ViewCompat.canScrollHorizontally(v, -dx); + } + + @Override + public boolean dispatchKeyEvent(KeyEvent event) { + // Let the focused view and/or our descendants get the key first + return super.dispatchKeyEvent(event) || executeKeyEvent(event); + } + + /** + * You can call this function yourself to have the scroll view perform + * scrolling from a key event, just as if the event had been dispatched to + * it by the view hierarchy. + * + * @param event The key event to execute. + * @return Return true if the event was handled, else false. + */ + public boolean executeKeyEvent(KeyEvent event) { + boolean handled = false; + if (event.getAction() == KeyEvent.ACTION_DOWN) { + switch (event.getKeyCode()) { + case KeyEvent.KEYCODE_DPAD_LEFT: + handled = arrowScroll(FOCUS_LEFT); + break; + case KeyEvent.KEYCODE_DPAD_RIGHT: + handled = arrowScroll(FOCUS_RIGHT); + break; + case KeyEvent.KEYCODE_TAB: + if (KeyEventCompat.hasNoModifiers(event)) { + handled = arrowScroll(FOCUS_FORWARD); + } else if (KeyEventCompat.hasModifiers(event, KeyEvent.META_SHIFT_ON)) { + handled = arrowScroll(FOCUS_BACKWARD); + } + break; + } + } + return handled; + } + + public boolean arrowScroll(int direction) { + View currentFocused = findFocus(); + if (currentFocused == this) currentFocused = null; + + boolean handled = false; + + View nextFocused = FocusFinder.getInstance().findNextFocus(this, currentFocused, + direction); + if (nextFocused != null && nextFocused != currentFocused) { + if (direction == View.FOCUS_LEFT) { + // If there is nothing to the left, or this is causing us to + // jump to the right, then what we really want to do is page left. + if (currentFocused != null && nextFocused.getLeft() >= currentFocused.getLeft()) { + handled = pageLeft(); + } else { + handled = nextFocused.requestFocus(); + } + } else if (direction == View.FOCUS_RIGHT) { + // If there is nothing to the right, or this is causing us to + // jump to the left, then what we really want to do is page right. + if (currentFocused != null && nextFocused.getLeft() <= currentFocused.getLeft()) { + handled = pageRight(); + } else { + handled = nextFocused.requestFocus(); + } + } + } else if (direction == FOCUS_LEFT || direction == FOCUS_BACKWARD) { + // Trying to move left and nothing there; try to page. + handled = pageLeft(); + } else if (direction == FOCUS_RIGHT || direction == FOCUS_FORWARD) { + // Trying to move right and nothing there; try to page. + handled = pageRight(); + } + if (handled) { + playSoundEffect(SoundEffectConstants.getContantForFocusDirection(direction)); + } + return handled; + } + + boolean pageLeft() { + if (mCurItem > 0) { + setCurrentItem(mCurItem-1, true); + return true; + } + return false; + } + + boolean pageRight() { + if (mAdapter != null && mCurItem < (mAdapter.getCount()-1)) { + setCurrentItem(mCurItem+1, true); + return true; + } + return false; + } + + /** + * We only want the current page that is being shown to be focusable. + */ + @Override + public void addFocusables(ArrayList views, int direction, int focusableMode) { + final int focusableCount = views.size(); + + final int descendantFocusability = getDescendantFocusability(); + + if (descendantFocusability != FOCUS_BLOCK_DESCENDANTS) { + for (int i = 0; i < getChildCount(); i++) { + final View child = getChildAt(i); + if (child.getVisibility() == VISIBLE) { + ItemInfo ii = infoForChild(child); + if (ii != null && ii.position == mCurItem) { + child.addFocusables(views, direction, focusableMode); + } + } + } + } + + // we add ourselves (if focusable) in all cases except for when we are + // FOCUS_AFTER_DESCENDANTS and there are some descendants focusable. this is + // to avoid the focus search finding layouts when a more precise search + // among the focusable children would be more interesting. + if ( + descendantFocusability != FOCUS_AFTER_DESCENDANTS || + // No focusable descendants + (focusableCount == views.size())) { + // Note that we can't call the superclass here, because it will + // add all views in. So we need to do the same thing View does. + if (!isFocusable()) { + return; + } + if ((focusableMode & FOCUSABLES_TOUCH_MODE) == FOCUSABLES_TOUCH_MODE && + isInTouchMode() && !isFocusableInTouchMode()) { + return; + } + if (views != null) { + views.add(this); + } + } + } + + /** + * We only want the current page that is being shown to be touchable. + */ + @Override + public void addTouchables(ArrayList views) { + // Note that we don't call super.addTouchables(), which means that + // we don't call View.addTouchables(). This is okay because a ViewPager + // is itself not touchable. + for (int i = 0; i < getChildCount(); i++) { + final View child = getChildAt(i); + if (child.getVisibility() == VISIBLE) { + ItemInfo ii = infoForChild(child); + if (ii != null && ii.position == mCurItem) { + child.addTouchables(views); + } + } + } + } + + /** + * We only want the current page that is being shown to be focusable. + */ + @Override + protected boolean onRequestFocusInDescendants(int direction, + Rect previouslyFocusedRect) { + int index; + int increment; + int end; + int count = getChildCount(); + if ((direction & FOCUS_FORWARD) != 0) { + index = 0; + increment = 1; + end = count; + } else { + index = count - 1; + increment = -1; + end = -1; + } + for (int i = index; i != end; i += increment) { + View child = getChildAt(i); + if (child.getVisibility() == VISIBLE) { + ItemInfo ii = infoForChild(child); + if (ii != null && ii.position == mCurItem) { + if (child.requestFocus(direction, previouslyFocusedRect)) { + return true; + } + } + } + } + return false; + } + + @Override + public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) { + // ViewPagers should only report accessibility info for the current page, + // otherwise things get very confusing. + + // TODO: Should this note something about the paging container? + + final int childCount = getChildCount(); + for (int i = 0; i < childCount; i++) { + final View child = getChildAt(i); + if (child.getVisibility() == VISIBLE) { + final ItemInfo ii = infoForChild(child); + if (ii != null && ii.position == mCurItem && + child.dispatchPopulateAccessibilityEvent(event)) { + return true; + } + } + } + + return false; + } + + private class DataSetObserver implements PagerAdapter.DataSetObserver { + @Override + public void onDataSetChanged() { + dataSetChanged(); + } + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/view/Window.java b/actionbarsherlock/library/src/android/support/v4/view/Window.java new file mode 100644 index 000000000..531189574 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/view/Window.java @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2006 The Android Open Source Project + * 2011 Jake Wharton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.view; + +import android.content.Context; + +/** + *

Abstract base class for a top-level window look and behavior policy. An + * instance of this class should be used as the top-level view added to the + * window manager. It provides standard UI policies such as a background, title + * area, default key processing, etc.

+ * + *

The only existing implementation of this abstract class is + * android.policy.PhoneWindow, which you should instantiate when needing a + * Window. Eventually that class will be refactored and a factory method added + * for creating Window instances without knowing about a particular + * implementation.

+ */ +public abstract class Window extends android.view.Window { + /* + * We use long values so that we can intercept the call to + * requestWindowFeature in our Activity. + */ + + /** + * Flag for enabling the Action Bar. This is enabled by default for some + * devices. The Action Bar replaces the title bar and provides an alternate + * location for an on-screen menu button on some devices. + */ + public static final long FEATURE_ACTION_BAR = android.view.Window.FEATURE_ACTION_BAR; + + /** + * Enable the pre-3.0 action bar implementation to honor the 'withText' + * attribute on menu items regardless of display resolution and/or density. + */ + //Hopefully the native Window.FEATURE_XXX numbering won't get this high anytime soon. + public static final long FEATURE_ACTION_BAR_ITEM_TEXT = 31; + + /** + * Flag for requesting an Action Bar that overlays window content. Normally + * an Action Bar will sit in the space above window content, but if this + * feature is requested along with {@link #FEATURE_ACTION_BAR} it will be + * layered over the window content itself. This is useful if you would like + * your app to have more control over how the Action Bar is displayed, such + * as letting application content scroll beneath an Action Bar with a + * transparent background or otherwise displaying a transparent/translucent + * Action Bar over application content. + */ + public static final long FEATURE_ACTION_BAR_OVERLAY = android.view.Window.FEATURE_ACTION_BAR_OVERLAY; + + /** + * Flag for specifying the behavior of action modes when an Action Bar is + * not present. If overlay is enabled, the action mode UI will be allowed to + * cover existing window content. + */ + public static final long FEATURE_ACTION_MODE_OVERLAY = android.view.Window.FEATURE_ACTION_MODE_OVERLAY; + + /** + * Flag for indeterminate progress . + */ + public static final long FEATURE_INDETERMINATE_PROGRESS = android.view.Window.FEATURE_INDETERMINATE_PROGRESS; + + + + /** + * Create a new instance for a context. + * + * @param context Context. + */ + public Window(Context context) { + super(context); + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/view/accessibility/AccessibilityEventCompat.java b/actionbarsherlock/library/src/android/support/v4/view/accessibility/AccessibilityEventCompat.java new file mode 100644 index 000000000..40c3ff90e --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/view/accessibility/AccessibilityEventCompat.java @@ -0,0 +1,148 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.view.accessibility; + +//import android.os.Build; +import android.view.accessibility.AccessibilityEvent; + +/** + * Helper for accessing newer features in AccessibilityEvent. + */ +public class AccessibilityEventCompat { + + static interface AccessibilityEventVersionImpl { + public int getRecordCount(AccessibilityEvent event); + public void appendRecord(AccessibilityEvent event, Object record); + public Object getRecord(AccessibilityEvent event, int index); + } + + static class AccessibilityEventStubImpl implements AccessibilityEventVersionImpl { + + public void appendRecord(AccessibilityEvent event, Object record) { + + } + + public Object getRecord(AccessibilityEvent event, int index) { + return null; + } + + public int getRecordCount(AccessibilityEvent event) { + return 0; + } + } +/* + static class AccessibilityEventIcsImpl extends AccessibilityEventStubImpl { + + @Override + public void appendRecord(AccessibilityEvent event, Object record) { + AccessibilityEventCompatIcs.appendRecord(event, record); + } + + @Override + public Object getRecord(AccessibilityEvent event, int index) { + return AccessibilityEventCompatIcs.getRecord(event, index); + } + + @Override + public int getRecordCount(AccessibilityEvent event) { + return AccessibilityEventCompatIcs.getRecordCount(event); + } + } +*/ + private final static AccessibilityEventVersionImpl IMPL; + + static { + //if (Build.VERSION.SDK_INT >= 14) { // ICS + // IMPL = new AccessibilityEventIcsImpl(); + //} else { + IMPL = new AccessibilityEventStubImpl(); + //} + } + + /** + * Represents the event of a hover enter over a {@link android.view.View}. + */ + public static final int TYPE_VIEW_HOVER_ENTER = 0x00000080; + + /** + * Represents the event of a hover exit over a {@link android.view.View}. + */ + public static final int TYPE_VIEW_HOVER_EXIT = 0x00000100; + + /** + * Represents the event of starting a touch exploration gesture. + */ + public static final int TYPE_TOUCH_EXPLORATION_GESTURE_START = 0x00000200; + + /** + * Represents the event of ending a touch exploration gesture. + */ + public static final int TYPE_TOUCH_EXPLORATION_GESTURE_END = 0x00000400; + + /** + * Represents the event of changing the content of a window. + */ + public static final int TYPE_WINDOW_CONTENT_CHANGED = 0x00000800; + + /** + * Represents the event of scrolling a view. + */ + public static final int TYPE_VIEW_SCROLLED = 0x00001000; + + /** + * Represents the event of changing the selection in an {@link android.widget.EditText}. + */ + public static final int TYPE_VIEW_TEXT_SELECTION_CHANGED = 0x00002000; + + /* + * Hide constructor from clients. + */ + private AccessibilityEventCompat() { + + } + + /** + * Gets the number of records contained in the event. + * + * @return The number of records. + */ + public static int getRecordCount(AccessibilityEvent event) { + return IMPL.getRecordCount(event); + } + + /** + * Appends an {@link android.view.accessibility.AccessibilityRecord} to the end of + * event records. + * + * @param record The record to append. + * + * @throws IllegalStateException If called from an AccessibilityService. + */ + public static void appendRecord(AccessibilityEvent event, AccessibilityRecordCompat record) { + IMPL.appendRecord(event, record.getImpl()); + } + + /** + * Gets the record at a given index. + * + * @param index The index. + * @return The record at the specified index. + */ + public static AccessibilityRecordCompat getRecord(AccessibilityEvent event, int index) { + return new AccessibilityRecordCompat(IMPL.getRecord(event, index)); + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/view/accessibility/AccessibilityEventCompatIcs.java b/actionbarsherlock/library/src/android/support/v4/view/accessibility/AccessibilityEventCompatIcs.java new file mode 100644 index 000000000..62e06124d --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/view/accessibility/AccessibilityEventCompatIcs.java @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.view.accessibility; + +//import android.view.accessibility.AccessibilityEvent; +//import android.view.accessibility.AccessibilityRecord; + +/** + * ICS specific AccessibilityEvent API implementation. + */ +class AccessibilityEventCompatIcs { +/* + public static int getRecordCount(AccessibilityEvent event) { + return event.getRecordCount(); + } + + public static void appendRecord(AccessibilityEvent event, Object record) { + event.appendRecord((AccessibilityRecord) record); + } + + public static Object getRecord(AccessibilityEvent event, int index) { + return event.getRecord(index); + } +*/ +} diff --git a/actionbarsherlock/library/src/android/support/v4/view/accessibility/AccessibilityManagerCompat.java b/actionbarsherlock/library/src/android/support/v4/view/accessibility/AccessibilityManagerCompat.java new file mode 100644 index 000000000..2ce8c4cfd --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/view/accessibility/AccessibilityManagerCompat.java @@ -0,0 +1,204 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.view.accessibility; + +import android.accessibilityservice.AccessibilityServiceInfo; +//import android.os.Build; +import android.view.accessibility.AccessibilityManager; +//import android.support.v4.view.accessibility.AccessibilityManagerCompatIcs.AccessibilityStateChangeListenerBridge; + +import java.util.List; + +/** + * Helper for accessing newer features in AccessibilityManager. + */ +public class AccessibilityManagerCompat { + + interface AccessibilityManagerVersionImpl { + public Object newAccessiblityStateChangeListener( + AccessibilityStateChangeListenerCompat listener); + public boolean addAccessibilityStateChangeListener(AccessibilityManager manager, + AccessibilityStateChangeListenerCompat listener); + public boolean removeAccessibilityStateChangeListener(AccessibilityManager manager, + AccessibilityStateChangeListenerCompat listener); + public List getEnabledAccessibilityServiceList( + AccessibilityManager manager,int feedbackTypeFlags); + public List getInstalledAccessibilityServiceList( + AccessibilityManager manager); + public boolean isTouchExplorationEnabled(AccessibilityManager manager); + } + + static class AccessibilityManagerStubImpl implements AccessibilityManagerVersionImpl { + public Object newAccessiblityStateChangeListener( + AccessibilityStateChangeListenerCompat listener) { + return null; + } + + public boolean addAccessibilityStateChangeListener(AccessibilityManager manager, + AccessibilityStateChangeListenerCompat listener) { + return false; + } + + public boolean removeAccessibilityStateChangeListener(AccessibilityManager manager, + AccessibilityStateChangeListenerCompat listener) { + return false; + } + + public List getEnabledAccessibilityServiceList( + AccessibilityManager manager, int feedbackTypeFlags) { + return null; + } + + public List getInstalledAccessibilityServiceList( + AccessibilityManager manager) { + return null; + } + + public boolean isTouchExplorationEnabled(AccessibilityManager manager) { + return false; + } + } +/* + static class AccessibilityManagerIcsImpl extends AccessibilityManagerStubImpl { + + @Override + public Object newAccessiblityStateChangeListener( + final AccessibilityStateChangeListenerCompat listener) { + return AccessibilityManagerCompatIcs.newAccessibilityStateChangeListener( + new AccessibilityStateChangeListenerBridge() { + public void onAccessibilityStateChanged(boolean enabled) { + listener.onAccessibilityStateChanged(enabled); + } + }); + } + + @Override + public boolean addAccessibilityStateChangeListener(AccessibilityManager manager, + AccessibilityStateChangeListenerCompat listener) { + return AccessibilityManagerCompatIcs.addAccessibilityStateChangeListener(manager, + listener.mListener); + } + + @Override + public boolean removeAccessibilityStateChangeListener(AccessibilityManager manager, + final AccessibilityStateChangeListenerCompat listener) { + return AccessibilityManagerCompatIcs.removeAccessibilityStateChangeListener(manager, + listener.mListener); + } + + @Override + public List getEnabledAccessibilityServiceList( + AccessibilityManager manager, int feedbackTypeFlags) { + return AccessibilityManagerCompatIcs.getEnabledAccessibilityServiceList(manager, + feedbackTypeFlags); + } + + @Override + public List getInstalledAccessibilityServiceList( + AccessibilityManager manager) { + return AccessibilityManagerCompatIcs.getInstalledAccessibilityServiceList(manager); + } + + @Override + public boolean isTouchExplorationEnabled(AccessibilityManager manager) { + return AccessibilityManagerCompatIcs.isTouchExplorationEnabled(manager); + } + } +*/ + static { + //if (Build.VERSION.SDK_INT >= 14) { // ICS + // IMPL = new AccessibilityManagerIcsImpl(); + //} else { + IMPL = new AccessibilityManagerStubImpl(); + //} + } + + private static final AccessibilityManagerVersionImpl IMPL; + + /** + * Registers an {@link AccessibilityManager.AccessibilityStateChangeListener} for changes in + * the global accessibility state of the system. + * + * @param manager The accessibility manager. + * @param listener The listener. + * @return True if successfully registered. + */ + public static boolean addAccessibilityStateChangeListener(AccessibilityManager manager, + AccessibilityStateChangeListenerCompat listener) { + return IMPL.addAccessibilityStateChangeListener(manager, listener); + } + + /** + * Unregisters an {@link AccessibilityManager.AccessibilityStateChangeListener}. + * + * @param manager The accessibility manager. + * @param listener The listener. + * @return True if successfully unregistered. + */ + public static boolean removeAccessibilityStateChangeListener(AccessibilityManager manager, + AccessibilityStateChangeListenerCompat listener) { + return IMPL.removeAccessibilityStateChangeListener(manager, listener); + } + + /** + * Returns the {@link AccessibilityServiceInfo}s of the installed accessibility services. + * + * @param manager The accessibility manager. + * @return An unmodifiable list with {@link AccessibilityServiceInfo}s. + */ + public static List getInstalledAccessibilityServiceList( + AccessibilityManager manager) { + return IMPL.getInstalledAccessibilityServiceList(manager); + } + + /** + * Returns the {@link AccessibilityServiceInfo}s of the enabled accessibility services + * for a given feedback type. + * + * @param manager The accessibility manager. + * @param feedbackTypeFlags The feedback type flags. + * @return An unmodifiable list with {@link AccessibilityServiceInfo}s. + * + * @see AccessibilityServiceInfo#FEEDBACK_AUDIBLE + * @see AccessibilityServiceInfo#FEEDBACK_GENERIC + * @see AccessibilityServiceInfo#FEEDBACK_HAPTIC + * @see AccessibilityServiceInfo#FEEDBACK_SPOKEN + * @see AccessibilityServiceInfo#FEEDBACK_VISUAL + */ + public static List getEnabledAccessibilityServiceList( + AccessibilityManager manager, int feedbackTypeFlags) { + return IMPL.getEnabledAccessibilityServiceList(manager, feedbackTypeFlags); + } + + /** + * Listener for the accessibility state. + */ + public static abstract class AccessibilityStateChangeListenerCompat { + final Object mListener; + + public AccessibilityStateChangeListenerCompat() { + mListener = IMPL.newAccessiblityStateChangeListener(this); + } + + /** + * Called back on change in the accessibility state. + * + * @param enabled Whether accessibility is enabled. + */ + public abstract void onAccessibilityStateChanged(boolean enabled); + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/view/accessibility/AccessibilityManagerCompatIcs.java b/actionbarsherlock/library/src/android/support/v4/view/accessibility/AccessibilityManagerCompatIcs.java new file mode 100644 index 000000000..e94fc5076 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/view/accessibility/AccessibilityManagerCompatIcs.java @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.view.accessibility; + +//import android.accessibilityservice.AccessibilityServiceInfo; +//import android.view.accessibility.AccessibilityManager; +//import android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener; + +//import java.util.List; + +/** + * ICS specific AccessibilityManager API implementation. + */ +class AccessibilityManagerCompatIcs { +/* + interface AccessibilityStateChangeListenerBridge { + public void onAccessibilityStateChanged(boolean enabled); + } + + public static Object newAccessibilityStateChangeListener( + final AccessibilityStateChangeListenerBridge bridge) { + return new AccessibilityStateChangeListener() { + @Override + public void onAccessibilityStateChanged(boolean enabled) { + bridge.onAccessibilityStateChanged(enabled); + } + }; + } + + public static boolean addAccessibilityStateChangeListener(AccessibilityManager manager, + Object listener) { + return manager.addAccessibilityStateChangeListener( + (AccessibilityStateChangeListener)listener); + } + + public static boolean removeAccessibilityStateChangeListener(AccessibilityManager manager, + Object listener) { + return manager.removeAccessibilityStateChangeListener( + (AccessibilityStateChangeListener)listener); + } + + public static List getEnabledAccessibilityServiceList( + AccessibilityManager manager,int feedbackTypeFlags) { + return manager.getEnabledAccessibilityServiceList(feedbackTypeFlags); + } + + public static List getInstalledAccessibilityServiceList( + AccessibilityManager manager) { + return manager.getInstalledAccessibilityServiceList(); + } + + public static boolean isTouchExplorationEnabled(AccessibilityManager manager) { + return manager.isTouchExplorationEnabled(); + } +*/ +} diff --git a/actionbarsherlock/library/src/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.java b/actionbarsherlock/library/src/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.java new file mode 100644 index 000000000..229c0c5b9 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.java @@ -0,0 +1,1166 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.view.accessibility; + +import android.graphics.Rect; +//import android.os.Build; +import android.view.View; + +import java.util.ArrayList; +import java.util.List; + +/** + * Helper for accessing AccessibilityNodeInfo from newer platform versions. + */ +public class AccessibilityNodeInfoCompat { + + static interface AccessibilityNodeInfoImpl { + public Object obtain(); + public Object obtain(View source); + public Object obtain(Object info); + public void setSource(Object info, View source); + public int getWindowId(Object info); + public int getChildCount(Object info); + public Object getChild(Object info, int index); + public void addChild(Object info, View child); + public int getActions(Object info); + public void addAction(Object info, int action); + public boolean performAction(Object info, int action); + public List findAccessibilityNodeInfosByText(Object info, String text); + public Object getParent(Object info); + public void setParent(Object info, View parent); + public void getBoundsInParent(Object info, Rect outBounds); + public void setBoundsInParent(Object info, Rect bounds); + public void getBoundsInScreen(Object info, Rect outBounds); + public void setBoundsInScreen(Object info, Rect bounds); + public boolean isCheckable(Object info); + public void setCheckable(Object info, boolean checkable); + public boolean isChecked(Object info); + public void setChecked(Object info, boolean checked); + public boolean isFocusable(Object info); + public void setFocusable(Object info, boolean focusable); + public boolean isFocused(Object info); + public void setFocused(Object info, boolean focused); + public boolean isSelected(Object info); + public void setSelected(Object info, boolean selected); + public boolean isClickable(Object info); + public void setClickable(Object info, boolean clickable); + public boolean isLongClickable(Object info); + public void setLongClickable(Object info, boolean longClickable); + public boolean isEnabled(Object info); + public void setEnabled(Object info, boolean enabled); + public boolean isPassword(Object info); + public void setPassword(Object info, boolean password); + public boolean isScrollable(Object info); + public void setScrollable(Object info, boolean scrollable); + public CharSequence getPackageName(Object info); + public void setPackageName(Object info, CharSequence packageName); + public CharSequence getClassName(Object info); + public void setClassName(Object info, CharSequence className); + public CharSequence getText(Object info); + public void setText(Object info, CharSequence text); + public CharSequence getContentDescription(Object info); + public void setContentDescription(Object info, CharSequence contentDescription); + public void recycle(Object info); + } + + static class AccessibilityNodeInfoStubImpl implements AccessibilityNodeInfoImpl { + public Object obtain() { + return null; + } + + public Object obtain(View source) { + return null; + } + + public Object obtain(Object info) { + return null; + } + + public void addAction(Object info, int action) { + + } + + public void addChild(Object info, View child) { + + } + + public List findAccessibilityNodeInfosByText(Object info, String text) { + return null; + } + + public int getActions(Object info) { + return 0; + } + + public void getBoundsInParent(Object info, Rect outBounds) { + + } + + public void getBoundsInScreen(Object info, Rect outBounds) { + + } + + public Object getChild(Object info, int index) { + return null; + } + + public int getChildCount(Object info) { + return 0; + } + + public CharSequence getClassName(Object info) { + return null; + } + + public CharSequence getContentDescription(Object info) { + return null; + } + + public CharSequence getPackageName(Object info) { + return null; + } + + public AccessibilityNodeInfoCompat getParent(Object info) { + return null; + } + + public CharSequence getText(Object info) { + return null; + } + + public int getWindowId(Object info) { + return 0; + } + + public boolean isCheckable(Object info) { + return false; + } + + public boolean isChecked(Object info) { + return false; + } + + public boolean isClickable(Object info) { + return false; + } + + public boolean isEnabled(Object info) { + return false; + } + + public boolean isFocusable(Object info) { + return false; + } + + public boolean isFocused(Object info) { + return false; + } + + public boolean isLongClickable(Object info) { + return false; + } + + public boolean isPassword(Object info) { + return false; + } + + public boolean isScrollable(Object info) { + return false; + } + + public boolean isSelected(Object info) { + return false; + } + + public boolean performAction(Object info, int action) { + return false; + } + + public void setBoundsInParent(Object info, Rect bounds) { + + } + + public void setBoundsInScreen(Object info, Rect bounds) { + + } + + public void setCheckable(Object info, boolean checkable) { + + } + + public void setChecked(Object info, boolean checked) { + + } + + public void setClassName(Object info, CharSequence className) { + + } + + public void setClickable(Object info, boolean clickable) { + + } + + public void setContentDescription(Object info, CharSequence contentDescription) { + + } + + public void setEnabled(Object info, boolean enabled) { + + } + + public void setFocusable(Object info, boolean focusable) { + + } + + public void setFocused(Object info, boolean focused) { + + } + + public void setLongClickable(Object info, boolean longClickable) { + + } + + public void setPackageName(Object info, CharSequence packageName) { + + } + + public void setParent(Object info, View parent) { + + } + + public void setPassword(Object info, boolean password) { + + } + + public void setScrollable(Object info, boolean scrollable) { + + } + + public void setSelected(Object info, boolean selected) { + + } + + public void setSource(Object info, View source) { + + } + + public void setText(Object info, CharSequence text) { + + } + + public void recycle(Object info) { + + } + } +/* + static class AccessibilityNodeInfoIcsImpl extends AccessibilityNodeInfoStubImpl { + @Override + public Object obtain() { + return AccessibilityNodeInfoCompatIcs.obtain(); + } + + @Override + public Object obtain(View source) { + return AccessibilityNodeInfoCompatIcs.obtain(source); + } + + @Override + public Object obtain(Object info) { + return AccessibilityNodeInfoCompatIcs.obtain(info); + } + + @Override + public void addAction(Object info, int action) { + AccessibilityNodeInfoCompatIcs.addAction(info, action); + } + + @Override + public void addChild(Object info, View child) { + AccessibilityNodeInfoCompatIcs.addChild(info, child); + } + + @Override + public List findAccessibilityNodeInfosByText(Object info, String text) { + return AccessibilityNodeInfoCompatIcs.findAccessibilityNodeInfosByText(info, text); + } + + @Override + public int getActions(Object info) { + return AccessibilityNodeInfoCompatIcs.getActions(info); + } + + @Override + public void getBoundsInParent(Object info, Rect outBounds) { + AccessibilityNodeInfoCompatIcs.getBoundsInParent(info, outBounds); + } + + @Override + public void getBoundsInScreen(Object info, Rect outBounds) { + AccessibilityNodeInfoCompatIcs.getBoundsInScreen(info, outBounds); + } + + @Override + public AccessibilityNodeInfoCompat getChild(Object info, int index) { + return new AccessibilityNodeInfoCompat(IMPL.getChild(info, index)); + } + + @Override + public int getChildCount(Object info) { + return AccessibilityNodeInfoCompatIcs.getChildCount(info); + } + + @Override + public CharSequence getClassName(Object info) { + return AccessibilityNodeInfoCompatIcs.getClassName(info); + } + + @Override + public CharSequence getContentDescription(Object info) { + return AccessibilityNodeInfoCompatIcs.getContentDescription(info); + } + + @Override + public CharSequence getPackageName(Object info) { + return AccessibilityNodeInfoCompatIcs.getPackageName(info); + } + + @Override + public AccessibilityNodeInfoCompat getParent(Object info) { + return new AccessibilityNodeInfoCompat(IMPL.getParent(info)); + } + + @Override + public CharSequence getText(Object info) { + return AccessibilityNodeInfoCompatIcs.getText(info); + } + + @Override + public int getWindowId(Object info) { + return AccessibilityNodeInfoCompatIcs.getWindowId(info); + } + + @Override + public boolean isCheckable(Object info) { + return AccessibilityNodeInfoCompatIcs.isCheckable(info); + } + + @Override + public boolean isChecked(Object info) { + return AccessibilityNodeInfoCompatIcs.isChecked(info); + } + + @Override + public boolean isClickable(Object info) { + return AccessibilityNodeInfoCompatIcs.isClickable(info); + } + + @Override + public boolean isEnabled(Object info) { + return AccessibilityNodeInfoCompatIcs.isEnabled(info); + } + + @Override + public boolean isFocusable(Object info) { + return AccessibilityNodeInfoCompatIcs.isFocusable(info); + } + + @Override + public boolean isFocused(Object info) { + return AccessibilityNodeInfoCompatIcs.isFocused(info); + } + + @Override + public boolean isLongClickable(Object info) { + return AccessibilityNodeInfoCompatIcs.isLongClickable(info); + } + + @Override + public boolean isPassword(Object info) { + return AccessibilityNodeInfoCompatIcs.isPassword(info); + } + + @Override + public boolean isScrollable(Object info) { + return AccessibilityNodeInfoCompatIcs.isScrollable(info); + } + + @Override + public boolean isSelected(Object info) { + return AccessibilityNodeInfoCompatIcs.isSelected(info); + } + + @Override + public boolean performAction(Object info, int action) { + return AccessibilityNodeInfoCompatIcs.performAction(info, action); + } + + @Override + public void setBoundsInParent(Object info, Rect bounds) { + AccessibilityNodeInfoCompatIcs.setBoundsInParent(info, bounds); + } + + @Override + public void setBoundsInScreen(Object info, Rect bounds) { + AccessibilityNodeInfoCompatIcs.setBoundsInScreen(info, bounds); + } + + @Override + public void setCheckable(Object info, boolean checkable) { + AccessibilityNodeInfoCompatIcs.setCheckable(info, checkable); + } + + @Override + public void setChecked(Object info, boolean checked) { + AccessibilityNodeInfoCompatIcs.setChecked(info, checked); + } + + @Override + public void setClassName(Object info, CharSequence className) { + AccessibilityNodeInfoCompatIcs.setClassName(info, className); + } + + @Override + public void setClickable(Object info, boolean clickable) { + AccessibilityNodeInfoCompatIcs.setClickable(info, clickable); + } + + @Override + public void setContentDescription(Object info, CharSequence contentDescription) { + AccessibilityNodeInfoCompatIcs.setContentDescription(info, contentDescription); + } + + @Override + public void setEnabled(Object info, boolean enabled) { + AccessibilityNodeInfoCompatIcs.setEnabled(info, enabled); + } + + @Override + public void setFocusable(Object info, boolean focusable) { + AccessibilityNodeInfoCompatIcs.setFocusable(info, focusable); + } + + @Override + public void setFocused(Object info, boolean focused) { + AccessibilityNodeInfoCompatIcs.setFocused(info, focused); + } + + @Override + public void setLongClickable(Object info, boolean longClickable) { + AccessibilityNodeInfoCompatIcs.setLongClickable(info, longClickable); + } + + @Override + public void setPackageName(Object info, CharSequence packageName) { + AccessibilityNodeInfoCompatIcs.setPackageName(info, packageName); + } + + @Override + public void setParent(Object info, View parent) { + AccessibilityNodeInfoCompatIcs.setParent(info, parent); + } + + @Override + public void setPassword(Object info, boolean password) { + AccessibilityNodeInfoCompatIcs.setPassword(info, password); + } + + @Override + public void setScrollable(Object info, boolean scrollable) { + AccessibilityNodeInfoCompatIcs.setScrollable(info, scrollable); + } + + @Override + public void setSelected(Object info, boolean selected) { + AccessibilityNodeInfoCompatIcs.setSelected(info, selected); + } + + @Override + public void setSource(Object info, View source) { + AccessibilityNodeInfoCompatIcs.setSource(info, source); + } + + @Override + public void setText(Object info, CharSequence text) { + AccessibilityNodeInfoCompatIcs.setText(info, text); + } + + @Override + public void recycle(Object info) { + AccessibilityNodeInfoCompatIcs.recycle(info); + } + } +*/ + static { + //if (Build.VERSION.SDK_INT >= 14) { // ICS + // IMPL = new AccessibilityNodeInfoIcsImpl(); + //} else { + IMPL = new AccessibilityNodeInfoStubImpl(); + //} + } + + private static final AccessibilityNodeInfoImpl IMPL; + + private final Object mInfo; + + // Actions. + + /** + * Action that focuses the node. + */ + public static final int ACTION_FOCUS = 0x00000001; + + /** + * Action that unfocuses the node. + */ + public static final int ACTION_CLEAR_FOCUS = 0x00000002; + + /** + * Action that selects the node. + */ + public static final int ACTION_SELECT = 0x00000004; + + /** + * Action that unselects the node. + */ + public static final int ACTION_CLEAR_SELECTION = 0x00000008; + + /* + * Hide constructor from clients. + */ + public AccessibilityNodeInfoCompat(Object info) { + mInfo = info; + } + + /** + * @return The wrapped actual implementation. + * + * @hide + */ + public Object getImpl() { + return mInfo; + } + + /** + * Returns a cached instance if such is available otherwise a new one and + * sets the source. + * + * @return An instance. + * @see #setSource(View) + */ + public static AccessibilityNodeInfoCompat obtain(View source) { + return new AccessibilityNodeInfoCompat(IMPL.obtain(source)); + } + + /** + * Returns a cached instance if such is available otherwise a new one. + * + * @return An instance. + */ + public static AccessibilityNodeInfoCompat obtain() { + return new AccessibilityNodeInfoCompat(IMPL.obtain()); + } + + /** + * Returns a cached instance if such is available or a new one is create. + * The returned instance is initialized from the given info. + * + * @param info The other info. + * @return An instance. + */ + public static AccessibilityNodeInfoCompat obtain(AccessibilityNodeInfoCompat info) { + return new AccessibilityNodeInfoCompat(IMPL.obtain(info.mInfo)); + } + + /** + * Sets the source. + * + * @param source The info source. + */ + public void setSource(View source) { + IMPL.setSource(mInfo, source); + } + + /** + * Gets the id of the window from which the info comes from. + * + * @return The window id. + */ + public int getWindowId() { + return IMPL.getWindowId(mInfo); + } + + /** + * Gets the number of children. + * + * @return The child count. + */ + public int getChildCount() { + return IMPL.getChildCount(mInfo); + } + + /** + * Get the child at given index. + *

+ * Note: It is a client responsibility to recycle the + * received info by calling {@link AccessibilityNodeInfoCompat#recycle()} to + * avoid creating of multiple instances. + *

+ * + * @param index The child index. + * @return The child node. + * @throws IllegalStateException If called outside of an + * AccessibilityService. + */ + public AccessibilityNodeInfoCompat getChild(int index) { + return new AccessibilityNodeInfoCompat(IMPL.getChild(mInfo, index)); + } + + /** + * Adds a child. + *

+ * Note: Cannot be called from an + * {@link android.accessibilityservice.AccessibilityService}. This class is + * made immutable before being delivered to an AccessibilityService. + *

+ * + * @param child The child. + * @throws IllegalStateException If called from an AccessibilityService. + */ + public void addChild(View child) { + IMPL.addChild(mInfo, child); + } + + /** + * Gets the actions that can be performed on the node. + * + * @return The bit mask of with actions. + * @see android.view.accessibility.AccessibilityNodeInfo#ACTION_FOCUS + * @see android.view.accessibility.AccessibilityNodeInfo#ACTION_CLEAR_FOCUS + * @see android.view.accessibility.AccessibilityNodeInfo#ACTION_SELECT + * @see android.view.accessibility.AccessibilityNodeInfo#ACTION_CLEAR_SELECTION + */ + public int getActions() { + return IMPL.getActions(mInfo); + } + + /** + * Adds an action that can be performed on the node. + *

+ * Note: Cannot be called from an + * {@link android.accessibilityservice.AccessibilityService}. This class is + * made immutable before being delivered to an AccessibilityService. + *

+ * + * @param action The action. + * @throws IllegalStateException If called from an AccessibilityService. + */ + public void addAction(int action) { + IMPL.addAction(mInfo, action); + } + + /** + * Performs an action on the node. + *

+ * Note: An action can be performed only if the request is + * made from an {@link android.accessibilityservice.AccessibilityService}. + *

+ * + * @param action The action to perform. + * @return True if the action was performed. + * @throws IllegalStateException If called outside of an + * AccessibilityService. + */ + public boolean performAction(int action) { + return IMPL.performAction(mInfo, action); + } + + /** + * Finds {@link android.view.accessibility.AccessibilityNodeInfo}s by text. The match + * is case insensitive containment. The search is relative to this info i.e. this + * info is the root of the traversed tree. + *

+ * Note: It is a client responsibility to recycle the + * received info by calling {@link android.view.accessibility.AccessibilityNodeInfo#recycle()} + * to avoid creating of multiple instances. + *

+ * + * @param text The searched text. + * @return A list of node info. + */ + public List findAccessibilityNodeInfosByText(String text) { + List result = new ArrayList(); + List infos = IMPL.findAccessibilityNodeInfosByText(mInfo, text); + final int infoCount = infos.size(); + for (int i = 0; i < infoCount; i++) { + Object info = infos.get(i); + result.add(new AccessibilityNodeInfoCompat(info)); + } + return result; + } + + /** + * Gets the parent. + *

+ * Note: It is a client responsibility to recycle the + * received info by calling {@link android.view.accessibility.AccessibilityNodeInfo#recycle()} + * to avoid creating of multiple instances. + *

+ * + * @return The parent. + */ + public AccessibilityNodeInfoCompat getParent() { + return new AccessibilityNodeInfoCompat(IMPL.getParent(mInfo)); + } + + /** + * Sets the parent. + *

+ * Note: Cannot be called from an + * {@link android.accessibilityservice.AccessibilityService}. This class is + * made immutable before being delivered to an AccessibilityService. + *

+ * + * @param parent The parent. + * @throws IllegalStateException If called from an AccessibilityService. + */ + public void setParent(View parent) { + IMPL.setParent(mInfo, parent); + } + + /** + * Gets the node bounds in parent coordinates. + * + * @param outBounds The output node bounds. + */ + public void getBoundsInParent(Rect outBounds) { + IMPL.getBoundsInParent(mInfo, outBounds); + } + + /** + * Sets the node bounds in parent coordinates. + *

+ * Note: Cannot be called from an + * {@link android.accessibilityservice.AccessibilityService}. This class is + * made immutable before being delivered to an AccessibilityService. + *

+ * + * @param bounds The node bounds. + *@throws IllegalStateException If called from an AccessibilityService. + */ + public void setBoundsInParent(Rect bounds) { + IMPL.setBoundsInParent(mInfo, bounds); + } + + /** + * Gets the node bounds in screen coordinates. + * + * @param outBounds The output node bounds. + */ + public void getBoundsInScreen(Rect outBounds) { + IMPL.getBoundsInScreen(mInfo, outBounds); + } + + /** + * Sets the node bounds in screen coordinates. + *

+ * Note: Cannot be called from an + * {@link android.accessibilityservice.AccessibilityService}. This class is + * made immutable before being delivered to an AccessibilityService. + *

+ * + * @param bounds The node bounds. + * @throws IllegalStateException If called from an AccessibilityService. + */ + public void setBoundsInScreen(Rect bounds) { + IMPL.setBoundsInParent(mInfo, bounds); + } + + /** + * Gets whether this node is checkable. + * + * @return True if the node is checkable. + */ + public boolean isCheckable() { + return IMPL.isCheckable(mInfo); + } + + /** + * Sets whether this node is checkable. + *

+ * Note: Cannot be called from an + * {@link android.accessibilityservice.AccessibilityService}. This class is + * made immutable before being delivered to an AccessibilityService. + *

+ * + * @param checkable True if the node is checkable. + * @throws IllegalStateException If called from an AccessibilityService. + */ + public void setCheckable(boolean checkable) { + IMPL.setCheckable(mInfo, checkable); + } + + /** + * Gets whether this node is checked. + * + * @return True if the node is checked. + */ + public boolean isChecked() { + return IMPL.isChecked(mInfo); + } + + /** + * Sets whether this node is checked. + *

+ * Note: Cannot be called from an + * {@link android.accessibilityservice.AccessibilityService}. This class is + * made immutable before being delivered to an AccessibilityService. + *

+ * + * @param checked True if the node is checked. + * @throws IllegalStateException If called from an AccessibilityService. + */ + public void setChecked(boolean checked) { + IMPL.setChecked(mInfo, checked); + } + + /** + * Gets whether this node is focusable. + * + * @return True if the node is focusable. + */ + public boolean isFocusable() { + return IMPL.isFocusable(mInfo); + } + + /** + * Sets whether this node is focusable. + *

+ * Note: Cannot be called from an + * {@link android.accessibilityservice.AccessibilityService}. This class is + * made immutable before being delivered to an AccessibilityService. + *

+ * + * @param focusable True if the node is focusable. + * @throws IllegalStateException If called from an AccessibilityService. + */ + public void setFocusable(boolean focusable) { + IMPL.setFocusable(mInfo, focusable); + } + + /** + * Gets whether this node is focused. + * + * @return True if the node is focused. + */ + public boolean isFocused() { + return IMPL.isFocused(mInfo); + } + + /** + * Sets whether this node is focused. + *

+ * Note: Cannot be called from an + * {@link android.accessibilityservice.AccessibilityService}. This class is + * made immutable before being delivered to an AccessibilityService. + *

+ * + * @param focused True if the node is focused. + * @throws IllegalStateException If called from an AccessibilityService. + */ + public void setFocused(boolean focused) { + IMPL.setFocused(mInfo, focused); + } + + /** + * Gets whether this node is selected. + * + * @return True if the node is selected. + */ + public boolean isSelected() { + return IMPL.isSelected(mInfo); + } + + /** + * Sets whether this node is selected. + *

+ * Note: Cannot be called from an + * {@link android.accessibilityservice.AccessibilityService}. This class is + * made immutable before being delivered to an AccessibilityService. + *

+ * + * @param selected True if the node is selected. + * @throws IllegalStateException If called from an AccessibilityService. + */ + public void setSelected(boolean selected) { + IMPL.setSelected(mInfo, selected); + } + + /** + * Gets whether this node is clickable. + * + * @return True if the node is clickable. + */ + public boolean isClickable() { + return IMPL.isClickable(mInfo); + } + + /** + * Sets whether this node is clickable. + *

+ * Note: Cannot be called from an + * {@link android.accessibilityservice.AccessibilityService}. This class is + * made immutable before being delivered to an AccessibilityService. + *

+ * + * @param clickable True if the node is clickable. + * @throws IllegalStateException If called from an AccessibilityService. + */ + public void setClickable(boolean clickable) { + IMPL.setClickable(mInfo, clickable); + } + + /** + * Gets whether this node is long clickable. + * + * @return True if the node is long clickable. + */ + public boolean isLongClickable() { + return IMPL.isLongClickable(mInfo); + } + + /** + * Sets whether this node is long clickable. + *

+ * Note: Cannot be called from an + * {@link android.accessibilityservice.AccessibilityService}. This class is + * made immutable before being delivered to an AccessibilityService. + *

+ * + * @param longClickable True if the node is long clickable. + * @throws IllegalStateException If called from an AccessibilityService. + */ + public void setLongClickable(boolean longClickable) { + IMPL.setLongClickable(mInfo, longClickable); + } + + /** + * Gets whether this node is enabled. + * + * @return True if the node is enabled. + */ + public boolean isEnabled() { + return IMPL.isEnabled(mInfo); + } + + /** + * Sets whether this node is enabled. + *

+ * Note: Cannot be called from an + * {@link android.accessibilityservice.AccessibilityService}. This class is + * made immutable before being delivered to an AccessibilityService. + *

+ * + * @param enabled True if the node is enabled. + * @throws IllegalStateException If called from an AccessibilityService. + */ + public void setEnabled(boolean enabled) { + IMPL.setEnabled(mInfo, enabled); + } + + /** + * Gets whether this node is a password. + * + * @return True if the node is a password. + */ + public boolean isPassword() { + return IMPL.isPassword(mInfo); + } + + /** + * Sets whether this node is a password. + *

+ * Note: Cannot be called from an + * {@link android.accessibilityservice.AccessibilityService}. This class is + * made immutable before being delivered to an AccessibilityService. + *

+ * + * @param password True if the node is a password. + * @throws IllegalStateException If called from an AccessibilityService. + */ + public void setPassword(boolean password) { + IMPL.setPassword(mInfo, password); + } + + /** + * Gets if the node is scrollable. + * + * @return True if the node is scrollable, false otherwise. + */ + public boolean isScrollable() { + return IMPL.isScrollable(mInfo); + } + + /** + * Sets if the node is scrollable. + *

+ * Note: Cannot be called from an + * {@link android.accessibilityservice.AccessibilityService}. This class is + * made immutable before being delivered to an AccessibilityService. + *

+ * + * @param scrollable True if the node is scrollable, false otherwise. + * @throws IllegalStateException If called from an AccessibilityService. + */ + public void setScrollable(boolean scrollable) { + IMPL.setScrollable(mInfo, scrollable); + } + + /** + * Gets the package this node comes from. + * + * @return The package name. + */ + public CharSequence getPackageName() { + return IMPL.getPackageName(mInfo); + } + + /** + * Sets the package this node comes from. + *

+ * Note: Cannot be called from an + * {@link android.accessibilityservice.AccessibilityService}. This class is + * made immutable before being delivered to an AccessibilityService. + *

+ * + * @param packageName The package name. + * @throws IllegalStateException If called from an AccessibilityService. + */ + public void setPackageName(CharSequence packageName) { + IMPL.setPackageName(mInfo, packageName); + } + + /** + * Gets the class this node comes from. + * + * @return The class name. + */ + public CharSequence getClassName() { + return IMPL.getClassName(mInfo); + } + + /** + * Sets the class this node comes from. + *

+ * Note: Cannot be called from an + * {@link android.accessibilityservice.AccessibilityService}. This class is + * made immutable before being delivered to an AccessibilityService. + *

+ * + * @param className The class name. + * @throws IllegalStateException If called from an AccessibilityService. + */ + public void setClassName(CharSequence className) { + IMPL.setClassName(mInfo, className); + } + + /** + * Gets the text of this node. + * + * @return The text. + */ + public CharSequence getText() { + return IMPL.getText(mInfo); + } + + /** + * Sets the text of this node. + *

+ * Note: Cannot be called from an + * {@link android.accessibilityservice.AccessibilityService}. This class is + * made immutable before being delivered to an AccessibilityService. + *

+ * + * @param text The text. + * @throws IllegalStateException If called from an AccessibilityService. + */ + public void setText(CharSequence text) { + IMPL.setText(mInfo, text); + } + + /** + * Gets the content description of this node. + * + * @return The content description. + */ + public CharSequence getContentDescription() { + return IMPL.getContentDescription(mInfo); + } + + /** + * Sets the content description of this node. + *

+ * Note: Cannot be called from an + * {@link android.accessibilityservice.AccessibilityService}. This class is + * made immutable before being delivered to an AccessibilityService. + *

+ * + * @param contentDescription The content description. + * @throws IllegalStateException If called from an AccessibilityService. + */ + public void setContentDescription(CharSequence contentDescription) { + IMPL.setContentDescription(mInfo, contentDescription); + } + + /** + * Return an instance back to be reused. + *

+ * Note: You must not touch the object after calling this function. + * + * @throws IllegalStateException If the info is already recycled. + */ + public void recycle() { + IMPL.recycle(mInfo); + } + + @Override + public int hashCode() { + return (mInfo == null) ? 0 : mInfo.hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + AccessibilityNodeInfoCompat other = (AccessibilityNodeInfoCompat) obj; + if (mInfo == null) { + if (other.mInfo != null) { + return false; + } + } else if (!mInfo.equals(other.mInfo)) { + return false; + } + return true; + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatIcs.java b/actionbarsherlock/library/src/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatIcs.java new file mode 100644 index 000000000..24a504fa4 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatIcs.java @@ -0,0 +1,220 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.view.accessibility; + +//import android.graphics.Rect; +//import android.view.View; +//import android.view.accessibility.AccessibilityNodeInfo; + +//import java.util.List; + +/** + * ICS specific AccessibilityNodeInfo API implementation. + */ +class AccessibilityNodeInfoCompatIcs { +/* + public static Object obtain() { + return AccessibilityNodeInfo.obtain(); + } + + public static Object obtain(View source) { + return AccessibilityNodeInfo.obtain(source); + } + + public static Object obtain(Object info) { + return AccessibilityNodeInfo.obtain((AccessibilityNodeInfo) info); + } + + public static void addAction(Object info, int action) { + ((AccessibilityNodeInfo) info).addAction(action); + } + + public static void addChild(Object info, View child) { + ((AccessibilityNodeInfo) info).addChild(child); + } + + @SuppressWarnings("unchecked") + public static List findAccessibilityNodeInfosByText(Object info, String text) { + Object result = ((AccessibilityNodeInfo) info).findAccessibilityNodeInfosByText(text); + return (List) result; + } + + public static int getActions(Object info) { + return ((AccessibilityNodeInfo) info).getActions(); + } + + public static void getBoundsInParent(Object info, Rect outBounds) { + ((AccessibilityNodeInfo) info).getBoundsInParent(outBounds); + } + + public static void getBoundsInScreen(Object info, Rect outBounds) { + ((AccessibilityNodeInfo) info).getBoundsInScreen(outBounds); + } + + public static Object getChild(Object info, int index) { + return ((AccessibilityNodeInfo) info).getChild(index); + } + + public static int getChildCount(Object info) { + return ((AccessibilityNodeInfo) info).getChildCount(); + } + + public static CharSequence getClassName(Object info) { + return ((AccessibilityNodeInfo) info).getClassName(); + } + + public static CharSequence getContentDescription(Object info) { + return ((AccessibilityNodeInfo) info).getContentDescription(); + } + + public static CharSequence getPackageName(Object info) { + return ((AccessibilityNodeInfo) info).getPackageName(); + } + + public static Object getParent(Object info) { + return ((AccessibilityNodeInfo) info).getParent(); + } + + public static CharSequence getText(Object info) { + return ((AccessibilityNodeInfo) info).getText(); + } + + public static int getWindowId(Object info) { + return ((AccessibilityNodeInfo) info).getWindowId(); + } + + public static boolean isCheckable(Object info) { + return ((AccessibilityNodeInfo) info).isCheckable(); + } + + public static boolean isChecked(Object info) { + return ((AccessibilityNodeInfo) info).isChecked(); + } + + public static boolean isClickable(Object info) { + return ((AccessibilityNodeInfo) info).isClickable(); + } + + public static boolean isEnabled(Object info) { + return ((AccessibilityNodeInfo) info).isEnabled(); + } + + public static boolean isFocusable(Object info) { + return ((AccessibilityNodeInfo) info).isFocusable(); + } + + public static boolean isFocused(Object info) { + return ((AccessibilityNodeInfo) info).isFocused(); + } + + public static boolean isLongClickable(Object info) { + return ((AccessibilityNodeInfo) info).isLongClickable(); + } + + public static boolean isPassword(Object info) { + return ((AccessibilityNodeInfo) info).isPassword(); + } + + public static boolean isScrollable(Object info) { + return ((AccessibilityNodeInfo) info).isScrollable(); + } + + public static boolean isSelected(Object info) { + return ((AccessibilityNodeInfo) info).isSelected(); + } + + public static boolean performAction(Object info, int action) { + return ((AccessibilityNodeInfo) info).performAction(action); + } + + public static void setBoundsInParent(Object info, Rect bounds) { + ((AccessibilityNodeInfo) info).setBoundsInParent(bounds); + } + + public static void setBoundsInScreen(Object info, Rect bounds) { + ((AccessibilityNodeInfo) info).setBoundsInScreen(bounds); + } + + public static void setCheckable(Object info, boolean checkable) { + ((AccessibilityNodeInfo) info).setCheckable(checkable); + } + + public static void setChecked(Object info, boolean checked) { + ((AccessibilityNodeInfo) info).setChecked(checked); + } + + public static void setClassName(Object info, CharSequence className) { + ((AccessibilityNodeInfo) info).setClassName(className); + } + + public static void setClickable(Object info, boolean clickable) { + ((AccessibilityNodeInfo) info).setClickable(clickable); + } + + public static void setContentDescription(Object info, CharSequence contentDescription) { + ((AccessibilityNodeInfo) info).setContentDescription(contentDescription); + } + + public static void setEnabled(Object info, boolean enabled) { + ((AccessibilityNodeInfo) info).setEnabled(enabled); + } + + public static void setFocusable(Object info, boolean focusable) { + ((AccessibilityNodeInfo) info).setFocusable(focusable); + } + + public static void setFocused(Object info, boolean focused) { + ((AccessibilityNodeInfo) info).setFocused(focused); + } + + public static void setLongClickable(Object info, boolean longClickable) { + ((AccessibilityNodeInfo) info).setLongClickable(longClickable); + } + + public static void setPackageName(Object info, CharSequence packageName) { + ((AccessibilityNodeInfo) info).setPackageName(packageName); + } + + public static void setParent(Object info, View parent) { + ((AccessibilityNodeInfo) info).setParent(parent); + } + + public static void setPassword(Object info, boolean password) { + ((AccessibilityNodeInfo) info).setPassword(password); + } + + public static void setScrollable(Object info, boolean scrollable) { + ((AccessibilityNodeInfo) info).setScrollable(scrollable); + } + + public static void setSelected(Object info, boolean selected) { + ((AccessibilityNodeInfo) info).setSelected(selected); + } + + public static void setSource(Object info, View source) { + ((AccessibilityNodeInfo) info).setSource(source); + } + + public static void setText(Object info, CharSequence text) { + ((AccessibilityNodeInfo) info).setText(text); + } + + public static void recycle(Object info) { + ((AccessibilityNodeInfo) info).recycle(); + } +*/ +} diff --git a/actionbarsherlock/library/src/android/support/v4/view/accessibility/AccessibilityRecordCompat.java b/actionbarsherlock/library/src/android/support/v4/view/accessibility/AccessibilityRecordCompat.java new file mode 100644 index 000000000..5967b8b85 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/view/accessibility/AccessibilityRecordCompat.java @@ -0,0 +1,957 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.view.accessibility; + +//import android.os.Build; +import android.os.Parcelable; +import android.view.View; + +import java.util.List; + +/** + * Helper for accessing AccessibilityRecord from newer platform versions. + */ +public class AccessibilityRecordCompat { + + static interface AccessibilityRecordImpl { + public Object obtain(); + public Object obtain(Object record); + public void setSource(Object record, View source); + public Object getSource(Object record); + public int getWindowId(Object record); + public boolean isChecked(Object record); + public void setChecked(Object record, boolean isChecked); + public boolean isEnabled(Object record); + public void setEnabled(Object record, boolean isEnabled); + public boolean isPassword(Object record); + public void setPassword(Object record, boolean isPassword); + public boolean isFullScreen(Object record); + public void setFullScreen(Object record, boolean isFullScreen); + public boolean isScrollable(Object record); + public void setScrollable(Object record, boolean scrollable); + public int getItemCount(Object record); + public void setItemCount(Object record, int itemCount); + public int getCurrentItemIndex(Object record); + public void setCurrentItemIndex(Object record, int currentItemIndex); + public int getFromIndex(Object record); + public void setFromIndex(Object record, int fromIndex); + public int getToIndex(Object record); + public void setToIndex(Object record, int toIndex); + public int getScrollX(Object record); + public void setScrollX(Object record, int scrollX); + public int getScrollY(Object record); + public void setScrollY(Object record, int scrollY); + public int getMaxScrollX(Object record); + public void setMaxScrollX(Object record, int maxScrollX); + public int getMaxScrollY(Object record); + public void setMaxScrollY(Object record, int maxScrollY); + public int getAddedCount(Object record); + public void setAddedCount(Object record, int addedCount); + public int getRemovedCount(Object record); + public void setRemovedCount(Object record, int removedCount); + public CharSequence getClassName(Object record); + public void setClassName(Object record, CharSequence className); + public List getText(Object record); + public CharSequence getBeforeText(Object record); + public void setBeforeText(Object record, CharSequence beforeText); + public CharSequence getContentDescription(Object record); + public void setContentDescription(Object record, CharSequence contentDescription); + public Parcelable getParcelableData(Object record); + public void setParcelableData(Object record, Parcelable parcelableData); + public void recycle(Object record); + } + + static class AccessibilityRecordStubImpl implements AccessibilityRecordImpl { + public Object obtain() { + return null; + } + + public Object obtain(Object record) { + return null; + } + + public int getAddedCount(Object record) { + return 0; + } + + public CharSequence getBeforeText(Object record) { + return null; + } + + public CharSequence getClassName(Object record) { + return null; + } + + public CharSequence getContentDescription(Object record) { + return null; + } + + public int getCurrentItemIndex(Object record) { + return 0; + } + + public int getFromIndex(Object record) { + return 0; + } + + public int getItemCount(Object record) { + return 0; + } + + public int getMaxScrollX(Object record) { + return 0; + } + + public int getMaxScrollY(Object record) { + return 0; + } + + public Parcelable getParcelableData(Object record) { + return null; + } + + public int getRemovedCount(Object record) { + return 0; + } + + public int getScrollX(Object record) { + return 0; + } + + public int getScrollY(Object record) { + return 0; + } + + public Object getSource(Object record) { + return null; + } + + public List getText(Object record) { + return null; + } + + public int getToIndex(Object record) { + return 0; + } + + public int getWindowId(Object record) { + return 0; + } + + public boolean isChecked(Object record) { + return false; + } + + public boolean isEnabled(Object record) { + return false; + } + + public boolean isFullScreen(Object record) { + return false; + } + + public boolean isPassword(Object record) { + return false; + } + + public boolean isScrollable(Object record) { + return false; + } + + public void recycle(Object record) { + + } + + public void setAddedCount(Object record, int addedCount) { + + } + + public void setBeforeText(Object record, CharSequence beforeText) { + + } + + public void setChecked(Object record, boolean isChecked) { + + } + + public void setClassName(Object record, CharSequence className) { + + } + + public void setContentDescription(Object record, CharSequence contentDescription) { + + } + + public void setCurrentItemIndex(Object record, int currentItemIndex) { + + } + + public void setEnabled(Object record, boolean isEnabled) { + + } + + public void setFromIndex(Object record, int fromIndex) { + + } + + public void setFullScreen(Object record, boolean isFullScreen) { + + } + + public void setItemCount(Object record, int itemCount) { + + } + + public void setMaxScrollX(Object record, int maxScrollX) { + + } + + public void setMaxScrollY(Object record, int maxScrollY) { + + } + + public void setParcelableData(Object record, Parcelable parcelableData) { + + } + + public void setPassword(Object record, boolean isPassword) { + + } + + public void setRemovedCount(Object record, int removedCount) { + + } + + public void setScrollX(Object record, int scrollX) { + + } + + public void setScrollY(Object record, int scrollY) { + + } + + public void setScrollable(Object record, boolean scrollable) { + + } + + public void setSource(Object record, View source) { + + } + + public void setToIndex(Object record, int toIndex) { + + } + } +/* + static class AccessibilityRecordIcsImpl implements AccessibilityRecordImpl { + public Object obtain() { + return AccessibilityRecordCompatIcs.obtain(); + } + + public Object obtain(Object record) { + return AccessibilityRecordCompatIcs.obtain(record); + } + + public int getAddedCount(Object record) { + return AccessibilityRecordCompatIcs.getAddedCount(record); + } + + public CharSequence getBeforeText(Object record) { + return AccessibilityRecordCompatIcs.getBeforeText(record); + } + + public CharSequence getClassName(Object record) { + return AccessibilityRecordCompatIcs.getClassName(record); + } + + public CharSequence getContentDescription(Object record) { + return AccessibilityRecordCompatIcs.getContentDescription(record); + } + + public int getCurrentItemIndex(Object record) { + return AccessibilityRecordCompatIcs.getCurrentItemIndex(record); + } + + public int getFromIndex(Object record) { + return AccessibilityRecordCompatIcs.getFromIndex(record); + } + + public int getItemCount(Object record) { + return AccessibilityRecordCompatIcs.getItemCount(record); + } + + public int getMaxScrollX(Object record) { + // TODO: Uncomment when these APIs become public + return 0;//AccessibilityRecordCompatIcs.getMaxScrollX(record); + } + + public int getMaxScrollY(Object record) { + // TODO: Uncomment when these APIs become public + return 0;//AccessibilityRecordCompatIcs.getMaxScrollY(record); + } + + public Parcelable getParcelableData(Object record) { + return AccessibilityRecordCompatIcs.getParcelableData(record); + } + + public int getRemovedCount(Object record) { + return AccessibilityRecordCompatIcs.getRemovedCount(record); + } + + public int getScrollX(Object record) { + return AccessibilityRecordCompatIcs.getScrollX(record); + } + + public int getScrollY(Object record) { + return AccessibilityRecordCompatIcs.getScrollY(record); + } + + public Object getSource(Object record) { + return AccessibilityRecordCompatIcs.getSource(record); + } + + public List getText(Object record) { + return AccessibilityRecordCompatIcs.getText(record); + } + + public int getToIndex(Object record) { + return AccessibilityRecordCompatIcs.getToIndex(record); + } + + public int getWindowId(Object record) { + return AccessibilityRecordCompatIcs.getWindowId(record); + } + + public boolean isChecked(Object record) { + return AccessibilityRecordCompatIcs.isChecked(record); + } + + public boolean isEnabled(Object record) { + return AccessibilityRecordCompatIcs.isEnabled(record); + } + + public boolean isFullScreen(Object record) { + return AccessibilityRecordCompatIcs.isFullScreen(record); + } + + public boolean isPassword(Object record) { + return AccessibilityRecordCompatIcs.isPassword(record); + } + + public boolean isScrollable(Object record) { + return AccessibilityRecordCompatIcs.isScrollable(record); + } + + public void recycle(Object record) { + AccessibilityRecordCompatIcs.recycle(record); + } + + public void setAddedCount(Object record, int addedCount) { + AccessibilityRecordCompatIcs.setAddedCount(record, addedCount); + } + + public void setBeforeText(Object record, CharSequence beforeText) { + AccessibilityRecordCompatIcs.setBeforeText(record, beforeText); + } + + public void setChecked(Object record, boolean isChecked) { + AccessibilityRecordCompatIcs.setChecked(record, isChecked); + } + + public void setClassName(Object record, CharSequence className) { + AccessibilityRecordCompatIcs.setClassName(record, className); + } + + public void setContentDescription(Object record, CharSequence contentDescription) { + AccessibilityRecordCompatIcs.setContentDescription(record, contentDescription); + } + + public void setCurrentItemIndex(Object record, int currentItemIndex) { + AccessibilityRecordCompatIcs.setCurrentItemIndex(record, currentItemIndex); + } + + public void setEnabled(Object record, boolean isEnabled) { + AccessibilityRecordCompatIcs.setEnabled(record, isEnabled); + } + + public void setFromIndex(Object record, int fromIndex) { + AccessibilityRecordCompatIcs.setFromIndex(record, fromIndex); + } + + public void setFullScreen(Object record, boolean isFullScreen) { + AccessibilityRecordCompatIcs.setFullScreen(record, isFullScreen); + } + + public void setItemCount(Object record, int itemCount) { + AccessibilityRecordCompatIcs.setItemCount(record, itemCount); + } + + public void setMaxScrollX(Object record, int maxScrollX) { +// TODO: Uncomment when these APIs become public +// AccessibilityRecordCompatIcs.setMaxScrollX(record, maxScrollX); + } + + public void setMaxScrollY(Object record, int maxScrollY) { +// TODO: Uncomment when these APIs become public +// AccessibilityRecordCompatIcs.setMaxScrollY(record, maxScrollY); + } + + public void setParcelableData(Object record, Parcelable parcelableData) { + AccessibilityRecordCompatIcs.setParcelableData(record, parcelableData); + } + + public void setPassword(Object record, boolean isPassword) { + AccessibilityRecordCompatIcs.setPassword(record, isPassword); + } + + public void setRemovedCount(Object record, int removedCount) { + AccessibilityRecordCompatIcs.setRemovedCount(record, removedCount); + } + + public void setScrollX(Object record, int scrollX) { + AccessibilityRecordCompatIcs.setScrollX(record, scrollX); + } + + public void setScrollY(Object record, int scrollY) { + AccessibilityRecordCompatIcs.setScrollY(record, scrollY); + } + + public void setScrollable(Object record, boolean scrollable) { + AccessibilityRecordCompatIcs.setScrollable(record, scrollable); + } + + public void setSource(Object record, View source) { + AccessibilityRecordCompatIcs.setSource(record, source); + } + + public void setToIndex(Object record, int toIndex) { + AccessibilityRecordCompatIcs.setToIndex(record, toIndex); + } + } +*/ + static { + //if (Build.VERSION.SDK_INT >= 14) { // ICS + // IMPL = new AccessibilityRecordIcsImpl(); + //} else { + IMPL = new AccessibilityRecordStubImpl(); + //} + } + + private static final AccessibilityRecordImpl IMPL; + + private final Object mRecord; + + /* + * Hide constructor from clients. + */ + public AccessibilityRecordCompat(Object record) { + mRecord = record; + } + + /** + * @return The wrapped implementation. + */ + public Object getImpl() { + return mRecord; + } + + /** + * Returns a cached instance if such is available or a new one is + * instantiated. The instance is initialized with data from the + * given record. + * + * @return An instance. + */ + public static AccessibilityRecordCompat obtain(AccessibilityRecordCompat record) { + return new AccessibilityRecordCompat(IMPL.obtain(record.mRecord)); + } + + /** + * Returns a cached instance if such is available or a new one is + * instantiated. + * + * @return An instance. + */ + public static AccessibilityRecordCompat obtain() { + return new AccessibilityRecordCompat(IMPL.obtain()); + } + + /** + * Sets the event source. + * + * @param source The source. + * + * @throws IllegalStateException If called from an AccessibilityService. + */ + public void setSource(View source) { + IMPL.setSource(mRecord, source); + } + + /** + * Gets the {@link android.view.accessibility.AccessibilityNodeInfo} of + * the event source. + *

+ * Note: It is a client responsibility to recycle the + * received info by calling + * {@link android.view.accessibility.AccessibilityNodeInfo#recycle() + * AccessibilityNodeInfo#recycle()} to avoid creating of multiple instances. + *

+ * + * @return The info of the source. + */ + public AccessibilityNodeInfoCompat getSource() { + return new AccessibilityNodeInfoCompat(IMPL.getSource(mRecord)); + } + + /** + * Gets the id of the window from which the event comes from. + * + * @return The window id. + */ + public int getWindowId() { + return IMPL.getWindowId(mRecord); + } + + /** + * Gets if the source is checked. + * + * @return True if the view is checked, false otherwise. + */ + public boolean isChecked() { + return IMPL.isChecked(mRecord); + } + + /** + * Sets if the source is checked. + * + * @param isChecked True if the view is checked, false otherwise. + * + * @throws IllegalStateException If called from an AccessibilityService. + */ + public void setChecked(boolean isChecked) { + IMPL.setChecked(mRecord, isChecked); + } + + /** + * Gets if the source is enabled. + * + * @return True if the view is enabled, false otherwise. + */ + public boolean isEnabled() { + return IMPL.isEnabled(mRecord); + } + + /** + * Sets if the source is enabled. + * + * @param isEnabled True if the view is enabled, false otherwise. + * + * @throws IllegalStateException If called from an AccessibilityService. + */ + public void setEnabled(boolean isEnabled) { + IMPL.setEnabled(mRecord, isEnabled); + } + + /** + * Gets if the source is a password field. + * + * @return True if the view is a password field, false otherwise. + */ + public boolean isPassword() { + return IMPL.isPassword(mRecord); + } + + /** + * Sets if the source is a password field. + * + * @param isPassword True if the view is a password field, false otherwise. + * + * @throws IllegalStateException If called from an AccessibilityService. + */ + public void setPassword(boolean isPassword) { + IMPL.setPassword(mRecord, isPassword); + } + + /** + * Gets if the source is taking the entire screen. + * + * @return True if the source is full screen, false otherwise. + */ + public boolean isFullScreen() { + return IMPL.isFullScreen(mRecord); + } + + /** + * Sets if the source is taking the entire screen. + * + * @param isFullScreen True if the source is full screen, false otherwise. + * + * @throws IllegalStateException If called from an AccessibilityService. + */ + public void setFullScreen(boolean isFullScreen) { + IMPL.setFullScreen(mRecord, isFullScreen); + } + + /** + * Gets if the source is scrollable. + * + * @return True if the source is scrollable, false otherwise. + */ + public boolean isScrollable() { + return IMPL.isScrollable(mRecord); + } + + /** + * Sets if the source is scrollable. + * + * @param scrollable True if the source is scrollable, false otherwise. + * + * @throws IllegalStateException If called from an AccessibilityService. + */ + public void setScrollable(boolean scrollable) { + IMPL.setScrollable(mRecord, scrollable); + } + + /** + * Gets the number of items that can be visited. + * + * @return The number of items. + */ + public int getItemCount() { + return IMPL.getItemCount(mRecord); + } + + /** + * Sets the number of items that can be visited. + * + * @param itemCount The number of items. + * + * @throws IllegalStateException If called from an AccessibilityService. + */ + public void setItemCount(int itemCount) { + IMPL.setItemCount(mRecord, itemCount); + } + + /** + * Gets the index of the source in the list of items the can be visited. + * + * @return The current item index. + */ + public int getCurrentItemIndex() { + return IMPL.getCurrentItemIndex(mRecord); + } + + /** + * Sets the index of the source in the list of items that can be visited. + * + * @param currentItemIndex The current item index. + * + * @throws IllegalStateException If called from an AccessibilityService. + */ + public void setCurrentItemIndex(int currentItemIndex) { + IMPL.setCurrentItemIndex(mRecord, currentItemIndex); + } + + /** + * Gets the index of the first character of the changed sequence, + * or the beginning of a text selection or the index of the first + * visible item when scrolling. + * + * @return The index of the first character or selection + * start or the first visible item. + */ + public int getFromIndex() { + return IMPL.getFromIndex(mRecord); + } + + /** + * Sets the index of the first character of the changed sequence + * or the beginning of a text selection or the index of the first + * visible item when scrolling. + * + * @param fromIndex The index of the first character or selection + * start or the first visible item. + * + * @throws IllegalStateException If called from an AccessibilityService. + */ + public void setFromIndex(int fromIndex) { + IMPL.setFromIndex(mRecord, fromIndex); + } + + /** + * Gets the index of text selection end or the index of the last + * visible item when scrolling. + * + * @return The index of selection end or last item index. + */ + public int getToIndex() { + return IMPL.getToIndex(mRecord); + } + + /** + * Sets the index of text selection end or the index of the last + * visible item when scrolling. + * + * @param toIndex The index of selection end or last item index. + */ + public void setToIndex(int toIndex) { + IMPL.setToIndex(mRecord, toIndex); + } + + /** + * Gets the scroll offset of the source left edge in pixels. + * + * @return The scroll. + */ + public int getScrollX() { + return IMPL.getScrollX(mRecord); + } + + /** + * Sets the scroll offset of the source left edge in pixels. + * + * @param scrollX The scroll. + */ + public void setScrollX(int scrollX) { + IMPL.setScrollX(mRecord, scrollX); + } + + /** + * Gets the scroll offset of the source top edge in pixels. + * + * @return The scroll. + */ + public int getScrollY() { + return IMPL.getScrollY(mRecord); + } + + /** + * Sets the scroll offset of the source top edge in pixels. + * + * @param scrollY The scroll. + */ + public void setScrollY(int scrollY) { + IMPL.setScrollY(mRecord, scrollY); + } + +// TODO: Uncomment when these APIs become public +// /** +// * Gets the max scroll offset of the source left edge in pixels. +// * +// * @return The max scroll. +// */ +// public int getMaxScrollX() { +// return IMPL.getMaxScrollX(mRecord); +// } +// /** +// * Sets the max scroll offset of the source left edge in pixels. +// * +// * @param maxScrollX The max scroll. +// */ +// public void setMaxScrollX(int maxScrollX) { +// IMPL.setMaxScrollX(mRecord, maxScrollX); +// } +// +// /** +// * Gets the max scroll offset of the source top edge in pixels. +// * +// * @return The max scroll. +// */ +// public int getMaxScrollY() { +// return IMPL.getMaxScrollY(mRecord); +// } +// +// /** +// * Sets the max scroll offset of the source top edge in pixels. +// * +// * @param maxScrollY The max scroll. +// */ +// public void setMaxScrollY(int maxScrollY) { +// IMPL.setMaxScrollY(mRecord, maxScrollY); +// } + + /** + * Gets the number of added characters. + * + * @return The number of added characters. + */ + public int getAddedCount() { + return IMPL.getAddedCount(mRecord); + } + + /** + * Sets the number of added characters. + * + * @param addedCount The number of added characters. + * + * @throws IllegalStateException If called from an AccessibilityService. + */ + public void setAddedCount(int addedCount) { + IMPL.setAddedCount(mRecord, addedCount); + } + + /** + * Gets the number of removed characters. + * + * @return The number of removed characters. + */ + public int getRemovedCount() { + return IMPL.getRemovedCount(mRecord); + } + + /** + * Sets the number of removed characters. + * + * @param removedCount The number of removed characters. + * + * @throws IllegalStateException If called from an AccessibilityService. + */ + public void setRemovedCount(int removedCount) { + IMPL.setRemovedCount(mRecord, removedCount); + } + + /** + * Gets the class name of the source. + * + * @return The class name. + */ + public CharSequence getClassName() { + return IMPL.getClassName(mRecord); + } + + /** + * Sets the class name of the source. + * + * @param className The lass name. + * + * @throws IllegalStateException If called from an AccessibilityService. + */ + public void setClassName(CharSequence className) { + IMPL.setClassName(mRecord, className); + } + + /** + * Gets the text of the event. The index in the list represents the priority + * of the text. Specifically, the lower the index the higher the priority. + * + * @return The text. + */ + public List getText() { + return IMPL.getText(mRecord); + } + + /** + * Sets the text before a change. + * + * @return The text before the change. + */ + public CharSequence getBeforeText() { + return IMPL.getBeforeText(mRecord); + } + + /** + * Sets the text before a change. + * + * @param beforeText The text before the change. + * + * @throws IllegalStateException If called from an AccessibilityService. + */ + public void setBeforeText(CharSequence beforeText) { + IMPL.setBeforeText(mRecord, beforeText); + } + + /** + * Gets the description of the source. + * + * @return The description. + */ + public CharSequence getContentDescription() { + return IMPL.getContentDescription(mRecord); + } + + /** + * Sets the description of the source. + * + * @param contentDescription The description. + * + * @throws IllegalStateException If called from an AccessibilityService. + */ + public void setContentDescription(CharSequence contentDescription) { + IMPL.setContentDescription(mRecord, contentDescription); + } + + /** + * Gets the {@link Parcelable} data. + * + * @return The parcelable data. + */ + public Parcelable getParcelableData() { + return IMPL.getParcelableData(mRecord); + } + + /** + * Sets the {@link Parcelable} data of the event. + * + * @param parcelableData The parcelable data. + * + * @throws IllegalStateException If called from an AccessibilityService. + */ + public void setParcelableData(Parcelable parcelableData) { + IMPL.setParcelableData(mRecord, parcelableData); + } + + /** + * Return an instance back to be reused. + *

+ * Note: You must not touch the object after calling this + * function. + *

+ * + * @throws IllegalStateException If the record is already recycled. + */ + public void recycle() { + IMPL.recycle(mRecord); + } + + @Override + public int hashCode() { + return (mRecord == null) ? 0 : mRecord.hashCode(); + } + + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + AccessibilityRecordCompat other = (AccessibilityRecordCompat) obj; + if (mRecord == null) { + if (other.mRecord != null) { + return false; + } + } else if (!mRecord.equals(other.mRecord)) { + return false; + } + return true; + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/view/accessibility/AccessibilityRecordCompatIcs.java b/actionbarsherlock/library/src/android/support/v4/view/accessibility/AccessibilityRecordCompatIcs.java new file mode 100644 index 000000000..ed7190788 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/view/accessibility/AccessibilityRecordCompatIcs.java @@ -0,0 +1,212 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.view.accessibility; + +//import android.os.Parcelable; +//import android.view.View; +//import android.view.accessibility.AccessibilityRecord; + +//import java.util.List; + +/** + * ICS specific AccessibilityRecord API implementation. + */ +class AccessibilityRecordCompatIcs { +/* + public static Object obtain() { + return AccessibilityRecord.obtain(); + } + + public static Object obtain(Object record) { + return AccessibilityRecord.obtain((AccessibilityRecord) record); + } + + public static int getAddedCount(Object record) { + return ((AccessibilityRecord) record).getAddedCount(); + } + + public static CharSequence getBeforeText(Object record) { + return ((AccessibilityRecord) record).getBeforeText(); + } + + public static CharSequence getClassName(Object record) { + return ((AccessibilityRecord) record).getClassName(); + } + + public static CharSequence getContentDescription(Object record) { + return ((AccessibilityRecord) record).getContentDescription(); + } + + public static int getCurrentItemIndex(Object record) { + return ((AccessibilityRecord) record).getCurrentItemIndex(); + } + + public static int getFromIndex(Object record) { + return ((AccessibilityRecord) record).getFromIndex(); + } + + public static int getItemCount(Object record) { + return ((AccessibilityRecord) record).getItemCount(); + } + +// TODO: Uncomment when these APIs become public +// public static int getMaxScrollX(Object record) { +// return ((AccessibilityRecord) record).getMaxScrollX(); +// } +// +// public static int getMaxScrollY(Object record) { +// return ((AccessibilityRecord) record).getMaxScrollY(); +// } + + public static Parcelable getParcelableData(Object record) { + return ((AccessibilityRecord) record).getParcelableData(); + } + + public static int getRemovedCount(Object record) { + return ((AccessibilityRecord) record).getRemovedCount(); + } + + public static int getScrollX(Object record) { + return ((AccessibilityRecord) record).getScrollX(); + } + + public static int getScrollY(Object record) { + return ((AccessibilityRecord) record).getScrollY(); + } + + public static Object getSource(Object record) { + return ((AccessibilityRecord) record).getSource(); + } + + public static List getText(Object record) { + return ((AccessibilityRecord) record).getText(); + } + + public static int getToIndex(Object record) { + return ((AccessibilityRecord) record).getToIndex(); + } + + public static int getWindowId(Object record) { + return ((AccessibilityRecord) record).getWindowId(); + } + + public static boolean isChecked(Object record) { + return ((AccessibilityRecord) record).isChecked(); + } + + public static boolean isEnabled(Object record) { + return ((AccessibilityRecord) record).isEnabled(); + } + + public static boolean isFullScreen(Object record) { + return ((AccessibilityRecord) record).isFullScreen(); + } + + public static boolean isPassword(Object record) { + return ((AccessibilityRecord) record).isPassword(); + } + + public static boolean isScrollable(Object record) { + return ((AccessibilityRecord) record).isScrollable(); + } + + public static void recycle(Object record) { + ((AccessibilityRecord) record).recycle(); + } + + public static void setAddedCount(Object record, int addedCount) { + ((AccessibilityRecord) record).setAddedCount(addedCount); + } + + public static void setBeforeText(Object record, CharSequence beforeText) { + ((AccessibilityRecord) record).setBeforeText(beforeText); + } + + public static void setChecked(Object record, boolean isChecked) { + ((AccessibilityRecord) record).setChecked(isChecked); + } + + public static void setClassName(Object record, CharSequence className) { + ((AccessibilityRecord) record).setClassName(className); + } + + public static void setContentDescription(Object record, CharSequence contentDescription) { + ((AccessibilityRecord) record).setContentDescription(contentDescription); + } + + public static void setCurrentItemIndex(Object record, int currentItemIndex) { + ((AccessibilityRecord) record).setCurrentItemIndex(currentItemIndex); + } + + public static void setEnabled(Object record, boolean isEnabled) { + ((AccessibilityRecord) record).setEnabled(isEnabled); + } + + public static void setFromIndex(Object record, int fromIndex) { + ((AccessibilityRecord) record).setFromIndex(fromIndex); + } + + public static void setFullScreen(Object record, boolean isFullScreen) { + ((AccessibilityRecord) record).setFullScreen(isFullScreen); + } + + public static void setItemCount(Object record, int itemCount) { + ((AccessibilityRecord) record).setItemCount(itemCount); + } + +// TODO: Uncomment when these APIs become public +// public static void setMaxScrollX(Object record, int maxScrollX) { +// ((AccessibilityRecord) record).setMaxScrollX(maxScrollX); +// } +// +// public static void setMaxScrollY(Object record, int maxScrollY) { +// ((AccessibilityRecord) record).setMaxScrollY(maxScrollY); +// } + + public static void setParcelableData(Object record, Parcelable parcelableData) { + ((AccessibilityRecord) record).setParcelableData(parcelableData); + } + + public static void setPassword(Object record, boolean isPassword) { + ((AccessibilityRecord) record).setPassword(isPassword); + } + + public static void setRemovedCount(Object record, int removedCount) { + ((AccessibilityRecord) record).setRemovedCount(removedCount); + } + + public static void setScrollX(Object record, int scrollX) { + ((AccessibilityRecord) record).setScrollX(scrollX); + } + + public static void setScrollY(Object record, int scrollY) { + ((AccessibilityRecord) record).setScrollY(scrollY); + } + + public static void setScrollable(Object record, boolean scrollable) { + ((AccessibilityRecord) record).setScrollable(scrollable); + } + + public static void setSource(Object record, View source) { + ((AccessibilityRecord) record).setSource(source); + } + + public static void setToIndex(Object record, int toIndex) { + ((AccessibilityRecord) record).setToIndex(toIndex); + } +*/ +} diff --git a/actionbarsherlock/library/src/android/support/v4/widget/CursorAdapter.java b/actionbarsherlock/library/src/android/support/v4/widget/CursorAdapter.java new file mode 100644 index 000000000..cf76fbf49 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/widget/CursorAdapter.java @@ -0,0 +1,484 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.widget; + +import android.content.Context; +import android.database.ContentObserver; +import android.database.Cursor; +import android.database.DataSetObserver; +import android.os.Handler; +import android.util.Log; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.Filter; +import android.widget.FilterQueryProvider; +import android.widget.Filterable; + +/** + * Static library support version of the framework's {@link android.widget.CursorAdapter}. + * Used to write apps that run on platforms prior to Android 3.0. When running + * on Android 3.0 or above, this implementation is still used; it does not try + * to switch to the framework's implementation. See the framework SDK + * documentation for a class overview. + */ +public abstract class CursorAdapter extends BaseAdapter implements Filterable, + CursorFilter.CursorFilterClient { + /** + * This field should be made private, so it is hidden from the SDK. + * {@hide} + */ + protected boolean mDataValid; + /** + * This field should be made private, so it is hidden from the SDK. + * {@hide} + */ + protected boolean mAutoRequery; + /** + * This field should be made private, so it is hidden from the SDK. + * {@hide} + */ + protected Cursor mCursor; + /** + * This field should be made private, so it is hidden from the SDK. + * {@hide} + */ + protected Context mContext; + /** + * This field should be made private, so it is hidden from the SDK. + * {@hide} + */ + protected int mRowIDColumn; + /** + * This field should be made private, so it is hidden from the SDK. + * {@hide} + */ + protected ChangeObserver mChangeObserver; + /** + * This field should be made private, so it is hidden from the SDK. + * {@hide} + */ + protected DataSetObserver mDataSetObserver; + /** + * This field should be made private, so it is hidden from the SDK. + * {@hide} + */ + protected CursorFilter mCursorFilter; + /** + * This field should be made private, so it is hidden from the SDK. + * {@hide} + */ + protected FilterQueryProvider mFilterQueryProvider; + + /** + * If set the adapter will call requery() on the cursor whenever a content change + * notification is delivered. Implies {@link #FLAG_REGISTER_CONTENT_OBSERVER}. + * + * @deprecated This option is discouraged, as it results in Cursor queries + * being performed on the application's UI thread and thus can cause poor + * responsiveness or even Application Not Responding errors. As an alternative, + * use {@link android.app.LoaderManager} with a {@link android.content.CursorLoader}. + */ + @Deprecated + public static final int FLAG_AUTO_REQUERY = 0x01; + + /** + * If set the adapter will register a content observer on the cursor and will call + * {@link #onContentChanged()} when a notification comes in. Be careful when + * using this flag: you will need to unset the current Cursor from the adapter + * to avoid leaks due to its registered observers. This flag is not needed + * when using a CursorAdapter with a + * {@link android.content.CursorLoader}. + */ + public static final int FLAG_REGISTER_CONTENT_OBSERVER = 0x02; + + /** + * Constructor that always enables auto-requery. + * + * @deprecated This option is discouraged, as it results in Cursor queries + * being performed on the application's UI thread and thus can cause poor + * responsiveness or even Application Not Responding errors. As an alternative, + * use {@link android.app.LoaderManager} with a {@link android.content.CursorLoader}. + * + * @param c The cursor from which to get the data. + * @param context The context + */ + @Deprecated + public CursorAdapter(Context context, Cursor c) { + init(context, c, FLAG_AUTO_REQUERY); + } + + /** + * Constructor that allows control over auto-requery. It is recommended + * you not use this, but instead {@link #CursorAdapter(Context, Cursor, int)}. + * When using this constructor, {@link #FLAG_REGISTER_CONTENT_OBSERVER} + * will always be set. + * + * @param c The cursor from which to get the data. + * @param context The context + * @param autoRequery If true the adapter will call requery() on the + * cursor whenever it changes so the most recent + * data is always displayed. Using true here is discouraged. + */ + public CursorAdapter(Context context, Cursor c, boolean autoRequery) { + init(context, c, autoRequery ? FLAG_AUTO_REQUERY : FLAG_REGISTER_CONTENT_OBSERVER); + } + + /** + * Recommended constructor. + * + * @param c The cursor from which to get the data. + * @param context The context + * @param flags Flags used to determine the behavior of the adapter; may + * be any combination of {@link #FLAG_AUTO_REQUERY} and + * {@link #FLAG_REGISTER_CONTENT_OBSERVER}. + */ + public CursorAdapter(Context context, Cursor c, int flags) { + init(context, c, flags); + } + + /** + * @deprecated Don't use this, use the normal constructor. This will + * be removed in the future. + */ + @Deprecated + protected void init(Context context, Cursor c, boolean autoRequery) { + init(context, c, autoRequery ? FLAG_AUTO_REQUERY : FLAG_REGISTER_CONTENT_OBSERVER); + } + + void init(Context context, Cursor c, int flags) { + if ((flags & FLAG_AUTO_REQUERY) == FLAG_AUTO_REQUERY) { + flags |= FLAG_REGISTER_CONTENT_OBSERVER; + mAutoRequery = true; + } else { + mAutoRequery = false; + } + boolean cursorPresent = c != null; + mCursor = c; + mDataValid = cursorPresent; + mContext = context; + mRowIDColumn = cursorPresent ? c.getColumnIndexOrThrow("_id") : -1; + if ((flags & FLAG_REGISTER_CONTENT_OBSERVER) == FLAG_REGISTER_CONTENT_OBSERVER) { + mChangeObserver = new ChangeObserver(); + mDataSetObserver = new MyDataSetObserver(); + } else { + mChangeObserver = null; + mDataSetObserver = null; + } + + if (cursorPresent) { + if (mChangeObserver != null) c.registerContentObserver(mChangeObserver); + if (mDataSetObserver != null) c.registerDataSetObserver(mDataSetObserver); + } + } + + /** + * Returns the cursor. + * @return the cursor. + */ + public Cursor getCursor() { + return mCursor; + } + + /** + * @see android.widget.ListAdapter#getCount() + */ + public int getCount() { + if (mDataValid && mCursor != null) { + return mCursor.getCount(); + } else { + return 0; + } + } + + /** + * @see android.widget.ListAdapter#getItem(int) + */ + public Object getItem(int position) { + if (mDataValid && mCursor != null) { + mCursor.moveToPosition(position); + return mCursor; + } else { + return null; + } + } + + /** + * @see android.widget.ListAdapter#getItemId(int) + */ + public long getItemId(int position) { + if (mDataValid && mCursor != null) { + if (mCursor.moveToPosition(position)) { + return mCursor.getLong(mRowIDColumn); + } else { + return 0; + } + } else { + return 0; + } + } + + @Override + public boolean hasStableIds() { + return true; + } + + /** + * @see android.widget.ListAdapter#getView(int, View, ViewGroup) + */ + public View getView(int position, View convertView, ViewGroup parent) { + if (!mDataValid) { + throw new IllegalStateException("this should only be called when the cursor is valid"); + } + if (!mCursor.moveToPosition(position)) { + throw new IllegalStateException("couldn't move cursor to position " + position); + } + View v; + if (convertView == null) { + v = newView(mContext, mCursor, parent); + } else { + v = convertView; + } + bindView(v, mContext, mCursor); + return v; + } + + @Override + public View getDropDownView(int position, View convertView, ViewGroup parent) { + if (mDataValid) { + mCursor.moveToPosition(position); + View v; + if (convertView == null) { + v = newDropDownView(mContext, mCursor, parent); + } else { + v = convertView; + } + bindView(v, mContext, mCursor); + return v; + } else { + return null; + } + } + + /** + * Makes a new view to hold the data pointed to by cursor. + * @param context Interface to application's global information + * @param cursor The cursor from which to get the data. The cursor is already + * moved to the correct position. + * @param parent The parent to which the new view is attached to + * @return the newly created view. + */ + public abstract View newView(Context context, Cursor cursor, ViewGroup parent); + + /** + * Makes a new drop down view to hold the data pointed to by cursor. + * @param context Interface to application's global information + * @param cursor The cursor from which to get the data. The cursor is already + * moved to the correct position. + * @param parent The parent to which the new view is attached to + * @return the newly created view. + */ + public View newDropDownView(Context context, Cursor cursor, ViewGroup parent) { + return newView(context, cursor, parent); + } + + /** + * Bind an existing view to the data pointed to by cursor + * @param view Existing view, returned earlier by newView + * @param context Interface to application's global information + * @param cursor The cursor from which to get the data. The cursor is already + * moved to the correct position. + */ + public abstract void bindView(View view, Context context, Cursor cursor); + + /** + * Change the underlying cursor to a new cursor. If there is an existing cursor it will be + * closed. + * + * @param cursor The new cursor to be used + */ + public void changeCursor(Cursor cursor) { + Cursor old = swapCursor(cursor); + if (old != null) { + old.close(); + } + } + + /** + * Swap in a new Cursor, returning the old Cursor. Unlike + * {@link #changeCursor(Cursor)}, the returned old Cursor is not + * closed. + * + * @param newCursor The new cursor to be used. + * @return Returns the previously set Cursor, or null if there wasa not one. + * If the given new Cursor is the same instance is the previously set + * Cursor, null is also returned. + */ + public Cursor swapCursor(Cursor newCursor) { + if (newCursor == mCursor) { + return null; + } + Cursor oldCursor = mCursor; + if (oldCursor != null) { + if (mChangeObserver != null) oldCursor.unregisterContentObserver(mChangeObserver); + if (mDataSetObserver != null) oldCursor.unregisterDataSetObserver(mDataSetObserver); + } + mCursor = newCursor; + if (newCursor != null) { + if (mChangeObserver != null) newCursor.registerContentObserver(mChangeObserver); + if (mDataSetObserver != null) newCursor.registerDataSetObserver(mDataSetObserver); + mRowIDColumn = newCursor.getColumnIndexOrThrow("_id"); + mDataValid = true; + // notify the observers about the new cursor + notifyDataSetChanged(); + } else { + mRowIDColumn = -1; + mDataValid = false; + // notify the observers about the lack of a data set + notifyDataSetInvalidated(); + } + return oldCursor; + } + + /** + *

Converts the cursor into a CharSequence. Subclasses should override this + * method to convert their results. The default implementation returns an + * empty String for null values or the default String representation of + * the value.

+ * + * @param cursor the cursor to convert to a CharSequence + * @return a CharSequence representing the value + */ + public CharSequence convertToString(Cursor cursor) { + return cursor == null ? "" : cursor.toString(); + } + + /** + * Runs a query with the specified constraint. This query is requested + * by the filter attached to this adapter. + * + * The query is provided by a + * {@link android.widget.FilterQueryProvider}. + * If no provider is specified, the current cursor is not filtered and returned. + * + * After this method returns the resulting cursor is passed to {@link #changeCursor(Cursor)} + * and the previous cursor is closed. + * + * This method is always executed on a background thread, not on the + * application's main thread (or UI thread.) + * + * Contract: when constraint is null or empty, the original results, + * prior to any filtering, must be returned. + * + * @param constraint the constraint with which the query must be filtered + * + * @return a Cursor representing the results of the new query + * + * @see #getFilter() + * @see #getFilterQueryProvider() + * @see #setFilterQueryProvider(android.widget.FilterQueryProvider) + */ + public Cursor runQueryOnBackgroundThread(CharSequence constraint) { + if (mFilterQueryProvider != null) { + return mFilterQueryProvider.runQuery(constraint); + } + + return mCursor; + } + + public Filter getFilter() { + if (mCursorFilter == null) { + mCursorFilter = new CursorFilter(this); + } + return mCursorFilter; + } + + /** + * Returns the query filter provider used for filtering. When the + * provider is null, no filtering occurs. + * + * @return the current filter query provider or null if it does not exist + * + * @see #setFilterQueryProvider(android.widget.FilterQueryProvider) + * @see #runQueryOnBackgroundThread(CharSequence) + */ + public FilterQueryProvider getFilterQueryProvider() { + return mFilterQueryProvider; + } + + /** + * Sets the query filter provider used to filter the current Cursor. + * The provider's + * {@link android.widget.FilterQueryProvider#runQuery(CharSequence)} + * method is invoked when filtering is requested by a client of + * this adapter. + * + * @param filterQueryProvider the filter query provider or null to remove it + * + * @see #getFilterQueryProvider() + * @see #runQueryOnBackgroundThread(CharSequence) + */ + public void setFilterQueryProvider(FilterQueryProvider filterQueryProvider) { + mFilterQueryProvider = filterQueryProvider; + } + + /** + * Called when the {@link ContentObserver} on the cursor receives a change notification. + * The default implementation provides the auto-requery logic, but may be overridden by + * sub classes. + * + * @see ContentObserver#onChange(boolean) + */ + @SuppressWarnings("unused") + protected void onContentChanged() { + if (mAutoRequery && mCursor != null && !mCursor.isClosed()) { + if (false) Log.v("Cursor", "Auto requerying " + mCursor + " due to update"); + mDataValid = mCursor.requery(); + } + } + + private class ChangeObserver extends ContentObserver { + public ChangeObserver() { + super(new Handler()); + } + + @Override + public boolean deliverSelfNotifications() { + return true; + } + + @Override + public void onChange(boolean selfChange) { + onContentChanged(); + } + } + + private class MyDataSetObserver extends DataSetObserver { + @Override + public void onChanged() { + mDataValid = true; + notifyDataSetChanged(); + } + + @Override + public void onInvalidated() { + mDataValid = false; + notifyDataSetInvalidated(); + } + } + +} diff --git a/actionbarsherlock/library/src/android/support/v4/widget/CursorFilter.java b/actionbarsherlock/library/src/android/support/v4/widget/CursorFilter.java new file mode 100644 index 000000000..69b87be27 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/widget/CursorFilter.java @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.widget; + +import android.database.Cursor; +import android.widget.Filter; + +/** + *

The CursorFilter delegates most of the work to the CursorAdapter. + * Subclasses should override these delegate methods to run the queries + * and convert the results into String that can be used by auto-completion + * widgets.

+ */ +class CursorFilter extends Filter { + + CursorFilterClient mClient; + + interface CursorFilterClient { + CharSequence convertToString(Cursor cursor); + Cursor runQueryOnBackgroundThread(CharSequence constraint); + Cursor getCursor(); + void changeCursor(Cursor cursor); + } + + CursorFilter(CursorFilterClient client) { + mClient = client; + } + + @Override + public CharSequence convertResultToString(Object resultValue) { + return mClient.convertToString((Cursor) resultValue); + } + + @Override + protected FilterResults performFiltering(CharSequence constraint) { + Cursor cursor = mClient.runQueryOnBackgroundThread(constraint); + + FilterResults results = new FilterResults(); + if (cursor != null) { + results.count = cursor.getCount(); + results.values = cursor; + } else { + results.count = 0; + results.values = null; + } + return results; + } + + @Override + protected void publishResults(CharSequence constraint, FilterResults results) { + Cursor oldCursor = mClient.getCursor(); + + if (results.values != null && results.values != oldCursor) { + mClient.changeCursor((Cursor) results.values); + } + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/widget/EdgeEffectCompat.java b/actionbarsherlock/library/src/android/support/v4/widget/EdgeEffectCompat.java new file mode 100644 index 000000000..42eb1c1c7 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/widget/EdgeEffectCompat.java @@ -0,0 +1,218 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.support.v4.widget; + +import android.content.Context; +import android.graphics.Canvas; + +/** + * Helper for accessing EdgeEffects from newer platform versions. + * + * This class is used to access {@link android.widget.EdgeEffect} on platform versions + * that support it. When running on older platforms it will result in no-ops. It should + * be used by views that wish to use the standard Android visual effects at the edges + * of scrolling containers. + */ +public class EdgeEffectCompat { + private Object mEdgeEffect; + + private static final EdgeEffectImpl IMPL; + + static { + //if (Build.VERSION.SDK_INT >= 14) { // ICS + // IMPL = new EdgeEffectIcsImpl(); + //} else { + IMPL = new BaseEdgeEffectImpl(); + //} + } + + interface EdgeEffectImpl { + public Object newEdgeEffect(Context context); + public void setSize(Object edgeEffect, int width, int height); + public boolean isFinished(Object edgeEffect); + public void finish(Object edgeEffect); + public boolean onPull(Object edgeEffect, float deltaDistance); + public boolean onRelease(Object edgeEffect); + public boolean onAbsorb(Object edgeEffect, int velocity); + public boolean draw(Object edgeEffect, Canvas canvas); + } + + /** + * Null implementation to use pre-ICS + */ + static class BaseEdgeEffectImpl implements EdgeEffectImpl { + public Object newEdgeEffect(Context context) { + return null; + } + + public void setSize(Object edgeEffect, int width, int height) { + } + + public boolean isFinished(Object edgeEffect) { + return true; + } + + public void finish(Object edgeEffect) { + } + + public boolean onPull(Object edgeEffect, float deltaDistance) { + return false; + } + + public boolean onRelease(Object edgeEffect) { + return false; + } + + public boolean onAbsorb(Object edgeEffect, int velocity) { + return false; + } + + public boolean draw(Object edgeEffect, Canvas canvas) { + return false; + } + } +/* + static class EdgeEffectIcsImpl implements EdgeEffectImpl { + public Object newEdgeEffect(Context context) { + return EdgeEffectCompatIcs.newEdgeEffect(context); + } + + public void setSize(Object edgeEffect, int width, int height) { + EdgeEffectCompatIcs.setSize(edgeEffect, width, height); + } + + public boolean isFinished(Object edgeEffect) { + return EdgeEffectCompatIcs.isFinished(edgeEffect); + } + + public void finish(Object edgeEffect) { + EdgeEffectCompatIcs.finish(edgeEffect); + } + + public boolean onPull(Object edgeEffect, float deltaDistance) { + return EdgeEffectCompatIcs.onPull(edgeEffect, deltaDistance); + } + + public boolean onRelease(Object edgeEffect) { + return EdgeEffectCompatIcs.onRelease(edgeEffect); + } + + public boolean onAbsorb(Object edgeEffect, int velocity) { + return EdgeEffectCompatIcs.onAbsorb(edgeEffect, velocity); + } + + public boolean draw(Object edgeEffect, Canvas canvas) { + return EdgeEffectCompatIcs.draw(edgeEffect, canvas); + } + } +*/ + /** + * Construct a new EdgeEffect themed using the given context. + * + *

Note: On platform versions that do not support EdgeEffect, all operations + * on the newly constructed object will be mocked/no-ops.

+ * + * @param context Context to use for theming the effect + */ + public EdgeEffectCompat(Context context) { + mEdgeEffect = IMPL.newEdgeEffect(context); + } + + /** + * Set the size of this edge effect in pixels. + * + * @param width Effect width in pixels + * @param height Effect height in pixels + */ + public void setSize(int width, int height) { + IMPL.setSize(mEdgeEffect, width, height); + } + + /** + * Reports if this EdgeEffectCompat's animation is finished. If this method returns false + * after a call to {@link #draw(Canvas)} the host widget should schedule another + * drawing pass to continue the animation. + * + * @return true if animation is finished, false if drawing should continue on the next frame. + */ + public boolean isFinished() { + return IMPL.isFinished(mEdgeEffect); + } + + /** + * Immediately finish the current animation. + * After this call {@link #isFinished()} will return true. + */ + public void finish() { + IMPL.finish(mEdgeEffect); + } + + /** + * A view should call this when content is pulled away from an edge by the user. + * This will update the state of the current visual effect and its associated animation. + * The host view should always {@link android.view.View#invalidate()} if this method + * returns true and draw the results accordingly. + * + * @param deltaDistance Change in distance since the last call. Values may be 0 (no change) to + * 1.f (full length of the view) or negative values to express change + * back toward the edge reached to initiate the effect. + * @return true if the host view should call invalidate, false if it should not. + */ + public boolean onPull(float deltaDistance) { + return IMPL.onPull(mEdgeEffect, deltaDistance); + } + + /** + * Call when the object is released after being pulled. + * This will begin the "decay" phase of the effect. After calling this method + * the host view should {@link android.view.View#invalidate()} if this method + * returns true and thereby draw the results accordingly. + * + * @return true if the host view should invalidate, false if it should not. + */ + public boolean onRelease() { + return IMPL.onRelease(mEdgeEffect); + } + + /** + * Call when the effect absorbs an impact at the given velocity. + * Used when a fling reaches the scroll boundary. + * + *

When using a {@link android.widget.Scroller} or {@link android.widget.OverScroller}, + * the method getCurrVelocity will provide a reasonable approximation + * to use here.

+ * + * @param velocity Velocity at impact in pixels per second. + * @return true if the host view should invalidate, false if it should not. + */ + public boolean onAbsorb(int velocity) { + return IMPL.onAbsorb(mEdgeEffect, velocity); + } + + /** + * Draw into the provided canvas. Assumes that the canvas has been rotated + * accordingly and the size has been set. The effect will be drawn the full + * width of X=0 to X=width, beginning from Y=0 and extending to some factor < + * 1.f of height. + * + * @param canvas Canvas to draw into + * @return true if drawing should continue beyond this frame to continue the + * animation + */ + public boolean draw(Canvas canvas) { + return IMPL.draw(mEdgeEffect, canvas); + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/widget/EdgeEffectCompatIcs.java b/actionbarsherlock/library/src/android/support/v4/widget/EdgeEffectCompatIcs.java new file mode 100644 index 000000000..4e0e56131 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/widget/EdgeEffectCompatIcs.java @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.support.v4.widget; + +//import android.content.Context; +//import android.graphics.Canvas; +//import android.widget.EdgeEffect; + +/** + * Stub implementation that contains a real EdgeEffect on ICS. + * + * This class is an implementation detail for EdgeEffectCompat + * and should not be used directly. + */ +class EdgeEffectCompatIcs { +/* + public static Object newEdgeEffect(Context context) { + return new EdgeEffect(context); + } + + public static void setSize(Object edgeEffect, int width, int height) { + ((EdgeEffect) edgeEffect).setSize(width, height); + } + + public static boolean isFinished(Object edgeEffect) { + return ((EdgeEffect) edgeEffect).isFinished(); + } + + public static void finish(Object edgeEffect) { + ((EdgeEffect) edgeEffect).finish(); + } + + public static boolean onPull(Object edgeEffect, float deltaDistance) { + ((EdgeEffect) edgeEffect).onPull(deltaDistance); + return true; + } + + public static boolean onRelease(Object edgeEffect) { + EdgeEffect eff = (EdgeEffect) edgeEffect; + eff.onRelease(); + return eff.isFinished(); + } + + public static boolean onAbsorb(Object edgeEffect, int velocity) { + ((EdgeEffect) edgeEffect).onAbsorb(velocity); + return true; + } + + public static boolean draw(Object edgeEffect, Canvas canvas) { + return ((EdgeEffect) edgeEffect).draw(canvas); + } +*/ +} diff --git a/actionbarsherlock/library/src/android/support/v4/widget/ResourceCursorAdapter.java b/actionbarsherlock/library/src/android/support/v4/widget/ResourceCursorAdapter.java new file mode 100644 index 000000000..12dce7871 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/widget/ResourceCursorAdapter.java @@ -0,0 +1,131 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.widget; + +import android.content.Context; +import android.database.Cursor; +import android.view.View; +import android.view.ViewGroup; +import android.view.LayoutInflater; + +/** + * Static library support version of the framework's {@link android.widget.ResourceCursorAdapter}. + * Used to write apps that run on platforms prior to Android 3.0. When running + * on Android 3.0 or above, this implementation is still used; it does not try + * to switch to the framework's implementation. See the framework SDK + * documentation for a class overview. + */ +public abstract class ResourceCursorAdapter extends CursorAdapter { + private int mLayout; + + private int mDropDownLayout; + + private LayoutInflater mInflater; + + /** + * Constructor the enables auto-requery. + * + * @deprecated This option is discouraged, as it results in Cursor queries + * being performed on the application's UI thread and thus can cause poor + * responsiveness or even Application Not Responding errors. As an alternative, + * use {@link android.app.LoaderManager} with a {@link android.content.CursorLoader}. + * + * @param context The context where the ListView associated with this adapter is running + * @param layout resource identifier of a layout file that defines the views + * for this list item. Unless you override them later, this will + * define both the item views and the drop down views. + */ + @Deprecated + public ResourceCursorAdapter(Context context, int layout, Cursor c) { + super(context, c); + mLayout = mDropDownLayout = layout; + mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + } + + /** + * Constructor with default behavior as per + * {@link CursorAdapter#CursorAdapter(Context, Cursor, boolean)}; it is recommended + * you not use this, but instead {@link #ResourceCursorAdapter(Context, int, Cursor, int)}. + * When using this constructor, {@link #FLAG_REGISTER_CONTENT_OBSERVER} + * will always be set. + * + * @param context The context where the ListView associated with this adapter is running + * @param layout resource identifier of a layout file that defines the views + * for this list item. Unless you override them later, this will + * define both the item views and the drop down views. + * @param c The cursor from which to get the data. + * @param autoRequery If true the adapter will call requery() on the + * cursor whenever it changes so the most recent + * data is always displayed. Using true here is discouraged. + */ + public ResourceCursorAdapter(Context context, int layout, Cursor c, boolean autoRequery) { + super(context, c, autoRequery); + mLayout = mDropDownLayout = layout; + mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + } + + /** + * Standard constructor. + * + * @param context The context where the ListView associated with this adapter is running + * @param layout Resource identifier of a layout file that defines the views + * for this list item. Unless you override them later, this will + * define both the item views and the drop down views. + * @param c The cursor from which to get the data. + * @param flags Flags used to determine the behavior of the adapter, + * as per {@link CursorAdapter#CursorAdapter(Context, Cursor, int)}. + */ + public ResourceCursorAdapter(Context context, int layout, Cursor c, int flags) { + super(context, c, flags); + mLayout = mDropDownLayout = layout; + mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + } + + /** + * Inflates view(s) from the specified XML file. + * + * @see android.widget.CursorAdapter#newView(android.content.Context, + * android.database.Cursor, ViewGroup) + */ + @Override + public View newView(Context context, Cursor cursor, ViewGroup parent) { + return mInflater.inflate(mLayout, parent, false); + } + + @Override + public View newDropDownView(Context context, Cursor cursor, ViewGroup parent) { + return mInflater.inflate(mDropDownLayout, parent, false); + } + + /** + *

Sets the layout resource of the item views.

+ * + * @param layout the layout resources used to create item views + */ + public void setViewResource(int layout) { + mLayout = layout; + } + + /** + *

Sets the layout resource of the drop down views.

+ * + * @param dropDownLayout the layout resources used to create drop down views + */ + public void setDropDownViewResource(int dropDownLayout) { + mDropDownLayout = dropDownLayout; + } +} diff --git a/actionbarsherlock/library/src/android/support/v4/widget/SimpleCursorAdapter.java b/actionbarsherlock/library/src/android/support/v4/widget/SimpleCursorAdapter.java new file mode 100644 index 000000000..4b81b11f3 --- /dev/null +++ b/actionbarsherlock/library/src/android/support/v4/widget/SimpleCursorAdapter.java @@ -0,0 +1,398 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.widget; + +import android.content.Context; +import android.database.Cursor; +import android.net.Uri; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +/** + * Static library support version of the framework's {@link android.widget.SimpleCursorAdapter}. + * Used to write apps that run on platforms prior to Android 3.0. When running + * on Android 3.0 or above, this implementation is still used; it does not try + * to switch to the framework's implementation. See the framework SDK + * documentation for a class overview. + */ +public class SimpleCursorAdapter extends ResourceCursorAdapter { + /** + * A list of columns containing the data to bind to the UI. + * This field should be made private, so it is hidden from the SDK. + * {@hide} + */ + protected int[] mFrom; + /** + * A list of View ids representing the views to which the data must be bound. + * This field should be made private, so it is hidden from the SDK. + * {@hide} + */ + protected int[] mTo; + + private int mStringConversionColumn = -1; + private CursorToStringConverter mCursorToStringConverter; + private ViewBinder mViewBinder; + + String[] mOriginalFrom; + + /** + * Constructor the enables auto-requery. + * + * @deprecated This option is discouraged, as it results in Cursor queries + * being performed on the application's UI thread and thus can cause poor + * responsiveness or even Application Not Responding errors. As an alternative, + * use {@link android.app.LoaderManager} with a {@link android.content.CursorLoader}. + */ + @Deprecated + public SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to) { + super(context, layout, c); + mTo = to; + mOriginalFrom = from; + findColumns(from); + } + + /** + * Standard constructor. + * + * @param context The context where the ListView associated with this + * SimpleListItemFactory is running + * @param layout resource identifier of a layout file that defines the views + * for this list item. The layout file should include at least + * those named views defined in "to" + * @param c The database cursor. Can be null if the cursor is not available yet. + * @param from A list of column names representing the data to bind to the UI. Can be null + * if the cursor is not available yet. + * @param to The views that should display column in the "from" parameter. + * These should all be TextViews. The first N views in this list + * are given the values of the first N columns in the from + * parameter. Can be null if the cursor is not available yet. + * @param flags Flags used to determine the behavior of the adapter, + * as per {@link CursorAdapter#CursorAdapter(Context, Cursor, int)}. + */ + public SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, + int[] to, int flags) { + super(context, layout, c, flags); + mTo = to; + mOriginalFrom = from; + findColumns(from); + } + + /** + * Binds all of the field names passed into the "to" parameter of the + * constructor with their corresponding cursor columns as specified in the + * "from" parameter. + * + * Binding occurs in two phases. First, if a + * {@link android.widget.SimpleCursorAdapter.ViewBinder} is available, + * {@link ViewBinder#setViewValue(android.view.View, android.database.Cursor, int)} + * is invoked. If the returned value is true, binding has occured. If the + * returned value is false and the view to bind is a TextView, + * {@link #setViewText(TextView, String)} is invoked. If the returned value is + * false and the view to bind is an ImageView, + * {@link #setViewImage(ImageView, String)} is invoked. If no appropriate + * binding can be found, an {@link IllegalStateException} is thrown. + * + * @throws IllegalStateException if binding cannot occur + * + * @see android.widget.CursorAdapter#bindView(android.view.View, + * android.content.Context, android.database.Cursor) + * @see #getViewBinder() + * @see #setViewBinder(android.widget.SimpleCursorAdapter.ViewBinder) + * @see #setViewImage(ImageView, String) + * @see #setViewText(TextView, String) + */ + @Override + public void bindView(View view, Context context, Cursor cursor) { + final ViewBinder binder = mViewBinder; + final int count = mTo.length; + final int[] from = mFrom; + final int[] to = mTo; + + for (int i = 0; i < count; i++) { + final View v = view.findViewById(to[i]); + if (v != null) { + boolean bound = false; + if (binder != null) { + bound = binder.setViewValue(v, cursor, from[i]); + } + + if (!bound) { + String text = cursor.getString(from[i]); + if (text == null) { + text = ""; + } + + if (v instanceof TextView) { + setViewText((TextView) v, text); + } else if (v instanceof ImageView) { + setViewImage((ImageView) v, text); + } else { + throw new IllegalStateException(v.getClass().getName() + " is not a " + + " view that can be bounds by this SimpleCursorAdapter"); + } + } + } + } + } + + /** + * Returns the {@link ViewBinder} used to bind data to views. + * + * @return a ViewBinder or null if the binder does not exist + * + * @see #bindView(android.view.View, android.content.Context, android.database.Cursor) + * @see #setViewBinder(android.widget.SimpleCursorAdapter.ViewBinder) + */ + public ViewBinder getViewBinder() { + return mViewBinder; + } + + /** + * Sets the binder used to bind data to views. + * + * @param viewBinder the binder used to bind data to views, can be null to + * remove the existing binder + * + * @see #bindView(android.view.View, android.content.Context, android.database.Cursor) + * @see #getViewBinder() + */ + public void setViewBinder(ViewBinder viewBinder) { + mViewBinder = viewBinder; + } + + /** + * Called by bindView() to set the image for an ImageView but only if + * there is no existing ViewBinder or if the existing ViewBinder cannot + * handle binding to an ImageView. + * + * By default, the value will be treated as an image resource. If the + * value cannot be used as an image resource, the value is used as an + * image Uri. + * + * Intended to be overridden by Adapters that need to filter strings + * retrieved from the database. + * + * @param v ImageView to receive an image + * @param value the value retrieved from the cursor + */ + public void setViewImage(ImageView v, String value) { + try { + v.setImageResource(Integer.parseInt(value)); + } catch (NumberFormatException nfe) { + v.setImageURI(Uri.parse(value)); + } + } + + /** + * Called by bindView() to set the text for a TextView but only if + * there is no existing ViewBinder or if the existing ViewBinder cannot + * handle binding to an TextView. + * + * Intended to be overridden by Adapters that need to filter strings + * retrieved from the database. + * + * @param v TextView to receive text + * @param text the text to be set for the TextView + */ + public void setViewText(TextView v, String text) { + v.setText(text); + } + + /** + * Return the index of the column used to get a String representation + * of the Cursor. + * + * @return a valid index in the current Cursor or -1 + * + * @see android.widget.CursorAdapter#convertToString(android.database.Cursor) + * @see #setStringConversionColumn(int) + * @see #setCursorToStringConverter(android.widget.SimpleCursorAdapter.CursorToStringConverter) + * @see #getCursorToStringConverter() + */ + public int getStringConversionColumn() { + return mStringConversionColumn; + } + + /** + * Defines the index of the column in the Cursor used to get a String + * representation of that Cursor. The column is used to convert the + * Cursor to a String only when the current CursorToStringConverter + * is null. + * + * @param stringConversionColumn a valid index in the current Cursor or -1 to use the default + * conversion mechanism + * + * @see android.widget.CursorAdapter#convertToString(android.database.Cursor) + * @see #getStringConversionColumn() + * @see #setCursorToStringConverter(android.widget.SimpleCursorAdapter.CursorToStringConverter) + * @see #getCursorToStringConverter() + */ + public void setStringConversionColumn(int stringConversionColumn) { + mStringConversionColumn = stringConversionColumn; + } + + /** + * Returns the converter used to convert the filtering Cursor + * into a String. + * + * @return null if the converter does not exist or an instance of + * {@link android.widget.SimpleCursorAdapter.CursorToStringConverter} + * + * @see #setCursorToStringConverter(android.widget.SimpleCursorAdapter.CursorToStringConverter) + * @see #getStringConversionColumn() + * @see #setStringConversionColumn(int) + * @see android.widget.CursorAdapter#convertToString(android.database.Cursor) + */ + public CursorToStringConverter getCursorToStringConverter() { + return mCursorToStringConverter; + } + + /** + * Sets the converter used to convert the filtering Cursor + * into a String. + * + * @param cursorToStringConverter the Cursor to String converter, or + * null to remove the converter + * + * @see #setCursorToStringConverter(android.widget.SimpleCursorAdapter.CursorToStringConverter) + * @see #getStringConversionColumn() + * @see #setStringConversionColumn(int) + * @see android.widget.CursorAdapter#convertToString(android.database.Cursor) + */ + public void setCursorToStringConverter(CursorToStringConverter cursorToStringConverter) { + mCursorToStringConverter = cursorToStringConverter; + } + + /** + * Returns a CharSequence representation of the specified Cursor as defined + * by the current CursorToStringConverter. If no CursorToStringConverter + * has been set, the String conversion column is used instead. If the + * conversion column is -1, the returned String is empty if the cursor + * is null or Cursor.toString(). + * + * @param cursor the Cursor to convert to a CharSequence + * + * @return a non-null CharSequence representing the cursor + */ + @Override + public CharSequence convertToString(Cursor cursor) { + if (mCursorToStringConverter != null) { + return mCursorToStringConverter.convertToString(cursor); + } else if (mStringConversionColumn > -1) { + return cursor.getString(mStringConversionColumn); + } + + return super.convertToString(cursor); + } + + /** + * Create a map from an array of strings to an array of column-id integers in mCursor. + * If mCursor is null, the array will be discarded. + * + * @param from the Strings naming the columns of interest + */ + private void findColumns(String[] from) { + if (mCursor != null) { + int i; + int count = from.length; + if (mFrom == null || mFrom.length != count) { + mFrom = new int[count]; + } + for (i = 0; i < count; i++) { + mFrom[i] = mCursor.getColumnIndexOrThrow(from[i]); + } + } else { + mFrom = null; + } + } + + @Override + public Cursor swapCursor(Cursor c) { + Cursor res = super.swapCursor(c); + // rescan columns in case cursor layout is different + findColumns(mOriginalFrom); + return res; + } + + /** + * Change the cursor and change the column-to-view mappings at the same time. + * + * @param c The database cursor. Can be null if the cursor is not available yet. + * @param from A list of column names representing the data to bind to the UI. Can be null + * if the cursor is not available yet. + * @param to The views that should display column in the "from" parameter. + * These should all be TextViews. The first N views in this list + * are given the values of the first N columns in the from + * parameter. Can be null if the cursor is not available yet. + */ + public void changeCursorAndColumns(Cursor c, String[] from, int[] to) { + mOriginalFrom = from; + mTo = to; + super.changeCursor(c); + findColumns(mOriginalFrom); + } + + /** + * This class can be used by external clients of SimpleCursorAdapter + * to bind values fom the Cursor to views. + * + * You should use this class to bind values from the Cursor to views + * that are not directly supported by SimpleCursorAdapter or to + * change the way binding occurs for views supported by + * SimpleCursorAdapter. + * + * @see SimpleCursorAdapter#bindView(android.view.View, android.content.Context, android.database.Cursor) + * @see SimpleCursorAdapter#setViewImage(ImageView, String) + * @see SimpleCursorAdapter#setViewText(TextView, String) + */ + public static interface ViewBinder { + /** + * Binds the Cursor column defined by the specified index to the specified view. + * + * When binding is handled by this ViewBinder, this method must return true. + * If this method returns false, SimpleCursorAdapter will attempts to handle + * the binding on its own. + * + * @param view the view to bind the data to + * @param cursor the cursor to get the data from + * @param columnIndex the column at which the data can be found in the cursor + * + * @return true if the data was bound to the view, false otherwise + */ + boolean setViewValue(View view, Cursor cursor, int columnIndex); + } + + /** + * This class can be used by external clients of SimpleCursorAdapter + * to define how the Cursor should be converted to a String. + * + * @see android.widget.CursorAdapter#convertToString(android.database.Cursor) + */ + public static interface CursorToStringConverter { + /** + * Returns a CharSequence representing the specified Cursor. + * + * @param cursor the cursor for which a CharSequence representation + * is requested + * + * @return a non-null CharSequence representing the cursor + */ + CharSequence convertToString(Cursor cursor); + } + +} diff --git a/actionbarsherlock/library/src/com/actionbarsherlock/internal/app/ActionBarImpl.java b/actionbarsherlock/library/src/com/actionbarsherlock/internal/app/ActionBarImpl.java new file mode 100644 index 000000000..70cf23bc5 --- /dev/null +++ b/actionbarsherlock/library/src/com/actionbarsherlock/internal/app/ActionBarImpl.java @@ -0,0 +1,440 @@ +/* + * Copyright (C) 2011 Jake Wharton + * Copyright (C) 2010 Johan Nilsson + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.actionbarsherlock.internal.app; + +import java.util.ArrayList; +import java.util.List; + +import android.app.Activity; +import android.graphics.drawable.Drawable; +import android.support.v4.app.ActionBar; +import android.support.v4.view.ActionMode; +import android.support.v4.view.MenuItem; +import android.view.LayoutInflater; +import android.view.View; +import android.view.animation.Animation; +import android.view.animation.AnimationUtils; +import android.widget.SpinnerAdapter; + +import com.actionbarsherlock.R; +import com.actionbarsherlock.internal.view.menu.ActionMenuItemView; +import com.actionbarsherlock.internal.view.menu.MenuBuilder; +import com.actionbarsherlock.internal.view.menu.MenuItemImpl; +import com.actionbarsherlock.internal.widget.ActionBarContainer; +import com.actionbarsherlock.internal.widget.ActionBarView; + +public final class ActionBarImpl extends ActionBar { + private final Activity mActivity; + + /** Action bar container. */ + private ActionBarContainer mContainerView; + + /** Action bar view. */ + private ActionBarView mActionView; + + /** List of listeners to the menu visibility. */ + private final List mMenuListeners = new ArrayList(); + + private Animation mFadeInAnimation; + private Animation mFadeOutAnimation; + + + + public ActionBarImpl(Activity activity) { + mActivity = activity; + } + + + // ------------------------------------------------------------------------ + // ACTION BAR SHERLOCK SUPPORT + // ------------------------------------------------------------------------ + + @Override + protected ActionBar getPublicInstance() { + return this; + } + + public void init() { + mActionView = (ActionBarView)mActivity.findViewById(R.id.abs__action_bar); + mContainerView = (ActionBarContainer)mActivity.findViewById(R.id.abs__action_bar_container); + + if (mActionView == null) { + throw new IllegalStateException(getClass().getSimpleName() + " can only be used with a screen_*.xml layout"); + } + + mFadeInAnimation = AnimationUtils.loadAnimation(mActivity, android.R.anim.fade_in); + mFadeOutAnimation = AnimationUtils.loadAnimation(mActivity, android.R.anim.fade_out); + + if (mActionView.getTitle() == null) { + mActionView.setTitle(mActivity.getTitle()); + } + } + + public void onMenuInflated(MenuBuilder menu) { + if (mActionView == null) { + return; + } + + final int maxItems = mActivity.getResources().getInteger(R.integer.abs__max_action_buttons); + + //Iterate and grab as many actions as we can up to maxItems honoring + //their showAsAction values + int ifItems = 0; + final int count = menu.size(); + boolean showsActionItemText = menu.getShowsActionItemText(); + List keep = new ArrayList(); + for (int i = 0; i < count; i++) { + MenuItemImpl item = (MenuItemImpl)menu.getItem(i); + + //Items without an icon or custom view are forced into the overflow menu + if (!showsActionItemText && (item.getIcon() == null) && (item.getActionView() == null)) { + continue; + } + if (showsActionItemText && ((item.getTitle() == null) || "".equals(item.getTitle()))) { + continue; + } + + if ((item.getShowAsAction() & MenuItem.SHOW_AS_ACTION_ALWAYS) != 0) { + //Show always therefore add to keep list + keep.add(item); + + if ((keep.size() > maxItems) && (ifItems > 0)) { + //If we have exceeded the max and there are "ifRoom" items + //then iterate backwards to remove one and add it to the + //head of the classic items list. + for (int j = keep.size() - 1; j >= 0; j--) { + if ((keep.get(j).getShowAsAction() & MenuItem.SHOW_AS_ACTION_IF_ROOM) != 0) { + keep.remove(j); + ifItems -= 1; + break; + } + } + } + } else if (((item.getShowAsAction() & MenuItem.SHOW_AS_ACTION_IF_ROOM) != 0) + && (keep.size() < maxItems)) { + //"ifRoom" items are added if we have not exceeded the max. + keep.add(item); + ifItems += 1; + } + } + + //Mark items that will be shown on the action bar as such so they do + //not show up on the activity options menu + mActionView.removeAllItems(); + for (MenuItemImpl item : keep) { + item.setIsShownOnActionBar(true); + + //Get a new item for this menu item + ActionMenuItemView actionItem = mActionView.newItem(); + actionItem.initialize(item, MenuBuilder.TYPE_ACTION_BAR); + + //Associate the itemview with the item so changes will be reflected + item.setItemView(MenuBuilder.TYPE_ACTION_BAR, actionItem); + + //Add to the action bar for display + mActionView.addItem(actionItem); + } + } + + public void onMenuVisibilityChanged(boolean isVisible) { + //Marshal to all listeners + for (OnMenuVisibilityListener listener : mMenuListeners) { + listener.onMenuVisibilityChanged(isVisible); + } + } + + public void setProgressBarIndeterminateVisibility(boolean visible) { + if (mActionView != null) { + mActionView.setProgressBarIndeterminateVisibility(visible); + } + } + + // ------------------------------------------------------------------------ + // ACTION MODE METHODS + // ------------------------------------------------------------------------ + + @Override + protected ActionMode startActionMode(ActionMode.Callback callback) { + throw new RuntimeException("Not implemented."); + } + + // ------------------------------------------------------------------------ + // ACTION BAR METHODS + // ------------------------------------------------------------------------ + + @Override + public void addOnMenuVisibilityListener(OnMenuVisibilityListener listener) { + if (!mMenuListeners.contains(listener)) { + mMenuListeners.add(listener); + } + } + + @Override + public void addTab(Tab tab) { + mActionView.addTab(tab); + } + + @Override + public void addTab(Tab tab, boolean setSelected) { + mActionView.addTab(tab, setSelected); + } + + @Override + public void addTab(Tab tab, int position) { + mActionView.addTab(tab, position); + } + + @Override + public void addTab(ActionBar.Tab tab, int position, boolean setSelected) { + mActionView.addTab(tab, position, setSelected); + } + + @Override + public View getCustomView() { + return mActionView.getCustomView(); + } + + @Override + public int getDisplayOptions() { + return mActionView.getDisplayOptions(); + } + + @Override + public int getHeight() { + return mActionView.getHeight(); + } + + @Override + public int getNavigationItemCount() { + switch (mActionView.getNavigationMode()) { + default: + case ActionBar.NAVIGATION_MODE_STANDARD: + return 0; + + case ActionBar.NAVIGATION_MODE_LIST: + SpinnerAdapter dropdownAdapter = mActionView.getDropdownAdapter(); + return (dropdownAdapter != null) ? dropdownAdapter.getCount() : 0; + + case ActionBar.NAVIGATION_MODE_TABS: + if (mActionView.getSelectedTab() == null) { + return -1; + } + return mActionView.getTabCount(); + } + } + + @Override + public int getNavigationMode() { + return mActionView.getNavigationMode(); + } + + @Override + public int getSelectedNavigationIndex() { + switch (mActionView.getNavigationMode()) { + default: + case ActionBar.NAVIGATION_MODE_STANDARD: + return -1; + + case ActionBar.NAVIGATION_MODE_LIST: + return mActionView.getDropdownSelectedPosition(); + + case ActionBar.NAVIGATION_MODE_TABS: + return mActionView.getSelectedTab().getPosition(); + } + } + + @Override + public ActionBar.Tab getSelectedTab() { + return mActionView.getSelectedTab(); + } + + @Override + public CharSequence getSubtitle() { + return mActionView.getSubtitle(); + } + + @Override + public ActionBar.Tab getTabAt(int index) { + return mActionView.getTabAt(index); + } + + @Override + public int getTabCount() { + return mActionView.getTabCount(); + } + + @Override + public CharSequence getTitle() { + return mActionView.getTitle(); + } + + @Override + public void hide() { + if (mContainerView.getVisibility() != View.GONE) { + mContainerView.startAnimation(mFadeOutAnimation); + mContainerView.setVisibility(View.GONE); + } + } + + @Override + public boolean isShowing() { + return mContainerView.getVisibility() == View.VISIBLE; + } + + @Override + public ActionBar.Tab newTab() { + return mActionView.newTab(); + } + + @Override + public void removeAllTabs() { + mActionView.removeAllTabs(); + } + + @Override + public void removeOnMenuVisibilityListener(OnMenuVisibilityListener listener) { + mMenuListeners.remove(listener); + } + + @Override + public void removeTab(ActionBar.Tab tab) { + removeTabAt(tab.getPosition()); + } + + @Override + public void removeTabAt(int position) { + mActionView.removeTabAt(position); + } + + @Override + public void setBackgroundDrawable(Drawable d) { + mContainerView.setBackgroundDrawable(d); + } + + @Override + public void setCustomView(int resId) { + View view = LayoutInflater.from(mActivity).inflate(resId, mActionView, false); + setCustomView(view); + } + + @Override + public void setCustomView(View view) { + mActionView.setCustomNavigationView(view); + } + + @Override + public void setCustomView(View view, ActionBar.LayoutParams layoutParams) { + view.setLayoutParams(layoutParams); + mActionView.setCustomNavigationView(view); + } + + @Override + public void setDisplayHomeAsUpEnabled(boolean showHomeAsUp) { + setDisplayOptions(showHomeAsUp ? ActionBar.DISPLAY_HOME_AS_UP : 0, ActionBar.DISPLAY_HOME_AS_UP); + } + + @Override + public void setDisplayOptions(int options) { + mActionView.setDisplayOptions(options); + } + + @Override + public void setDisplayOptions(int newOptions, int mask) { + mActionView.setDisplayOptions((mActionView.getDisplayOptions() & ~mask) | newOptions); + } + + @Override + public void setDisplayShowCustomEnabled(boolean showCustom) { + setDisplayOptions(showCustom ? ActionBar.DISPLAY_SHOW_CUSTOM : 0, ActionBar.DISPLAY_SHOW_CUSTOM); + } + + @Override + public void setDisplayShowHomeEnabled(boolean showHome) { + setDisplayOptions(showHome ? ActionBar.DISPLAY_SHOW_HOME : 0, ActionBar.DISPLAY_SHOW_HOME); + } + + @Override + public void setDisplayShowTitleEnabled(boolean showTitle) { + setDisplayOptions(showTitle ? ActionBar.DISPLAY_SHOW_TITLE : 0, ActionBar.DISPLAY_SHOW_TITLE); + } + + @Override + public void setDisplayUseLogoEnabled(boolean useLogo) { + setDisplayOptions(useLogo ? ActionBar.DISPLAY_USE_LOGO : 0, ActionBar.DISPLAY_USE_LOGO); + } + + @Override + public void setListNavigationCallbacks(SpinnerAdapter adapter, ActionBar.OnNavigationListener callback) { + mActionView.setDropdownAdapter(adapter); + mActionView.setCallback(callback); + } + + @Override + public void setNavigationMode(int mode) { + mActionView.setNavigationMode(mode); + } + + @Override + public void setSelectedNavigationItem(int position) { + switch (mActionView.getNavigationMode()) { + default: + case ActionBar.NAVIGATION_MODE_STANDARD: + throw new IllegalStateException(); + + case ActionBar.NAVIGATION_MODE_TABS: + mActionView.getTabAt(position).select(); + break; + + case ActionBar.NAVIGATION_MODE_LIST: + mActionView.setDropdownSelectedPosition(position); + break; + } + } + + @Override + public void selectTab(ActionBar.Tab tab) { + mActionView.selectTab(tab); + } + + @Override + public void setSubtitle(CharSequence subtitle) { + mActionView.setSubtitle(subtitle); + } + + @Override + public void setSubtitle(int resId) { + mActionView.setSubtitle(resId); + } + + @Override + public void setTitle(CharSequence title) { + mActionView.setTitle(title); + } + @Override + public void setTitle(int resId) { + mActionView.setTitle(resId); + } + + @Override + public void show() { + if (mContainerView.getVisibility() != View.VISIBLE) { + mContainerView.startAnimation(mFadeInAnimation); + mContainerView.setVisibility(View.VISIBLE); + } + } +} diff --git a/actionbarsherlock/library/src/com/actionbarsherlock/internal/app/ActionBarWrapper.java b/actionbarsherlock/library/src/com/actionbarsherlock/internal/app/ActionBarWrapper.java new file mode 100644 index 000000000..e35064739 --- /dev/null +++ b/actionbarsherlock/library/src/com/actionbarsherlock/internal/app/ActionBarWrapper.java @@ -0,0 +1,591 @@ +/* + * Copyright 2011 Jake Wharton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.actionbarsherlock.internal.app; + +import java.util.HashMap; +import com.actionbarsherlock.internal.view.menu.MenuItemWrapper; +import com.actionbarsherlock.internal.view.menu.MenuWrapper; +import android.app.Activity; +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.support.v4.app.ActionBar; +import android.support.v4.view.ActionMode; +import android.support.v4.view.Menu; +import android.support.v4.view.MenuInflater; +import android.view.View; +import android.widget.SpinnerAdapter; + +public final class ActionBarWrapper { + //No instances + private ActionBarWrapper() {} + + /** + * Abstraction to get an instance of our implementing class. + * + * @param activity Parent activity. + * @return {@code ActionBar} instance. + */ + public static ActionBar createFor(Activity activity) { + if (!(activity instanceof SherlockActivity)) { + throw new RuntimeException("Activity must implement the SherlockActivity interface"); + } + + return new ActionBarWrapper.Impl(activity); + } + + /** + * Handler for Android's native {@link android.app.ActionBar}. + */ + public static final class Impl extends ActionBar implements android.app.ActionBar.TabListener { + /** Mapping between support listeners and native listeners. */ + private final HashMap mMenuListenerMap = new HashMap(); + + private final Activity mActivity; + + private Impl(Activity activity) { + mActivity = activity; + } + + + /** + * Get the native {@link ActionBar} instance. + * + * @return The action bar. + */ + private android.app.ActionBar getActionBar() { + return mActivity.getActionBar(); + } + + @Override + protected ActionBar getPublicInstance() { + return (getActionBar() != null) ? this : null; + } + + /** + * Converts our Tab wrapper to a native version containing the wrapper + * instance as its tag. + * + * @param tab Tab wrapper instance. + * @return Native tab. + */ + private android.app.ActionBar.Tab convertTabToNative(ActionBar.Tab tab) { + return getActionBar().newTab() + .setCustomView(tab.getCustomView()) + .setIcon(tab.getIcon()) + .setTabListener(this) + .setTag(tab) + .setText(tab.getText()); + } + + @Override + public void onTabReselected(android.app.ActionBar.Tab tab, android.app.FragmentTransaction ft) { + ActionBar.TabListener listener = ((ActionBar.Tab)tab.getTag()).getTabListener(); + if (listener != null) { + listener.onTabReselected((ActionBar.Tab)tab.getTag(), null); + } + } + + @Override + public void onTabSelected(android.app.ActionBar.Tab tab, android.app.FragmentTransaction ft) { + ActionBar.TabListener listener = ((ActionBar.Tab)tab.getTag()).getTabListener(); + if (listener != null) { + listener.onTabSelected((ActionBar.Tab)tab.getTag(), null); + } + } + + @Override + public void onTabUnselected(android.app.ActionBar.Tab tab, android.app.FragmentTransaction ft) { + ActionBar.TabListener listener = ((ActionBar.Tab)tab.getTag()).getTabListener(); + if (listener != null) { + listener.onTabUnselected((ActionBar.Tab)tab.getTag(), null); + } + } + + // --------------------------------------------------------------------- + // ACTION MODE SUPPORT + // --------------------------------------------------------------------- + + @Override + protected ActionMode startActionMode(final ActionMode.Callback callback) { + //We have to re-wrap the instances in every callback since the + //wrapped instance is needed before we could have a change to + //properly store it. + return new ActionModeWrapper(mActivity, + mActivity.startActionMode(new android.view.ActionMode.Callback() { + @Override + public boolean onPrepareActionMode(android.view.ActionMode mode, android.view.Menu menu) { + return callback.onPrepareActionMode(new ActionModeWrapper(mActivity, mode), new MenuWrapper(menu)); + } + + @Override + public void onDestroyActionMode(android.view.ActionMode mode) { + final ActionMode actionMode = new ActionModeWrapper(mActivity, mode); + callback.onDestroyActionMode(actionMode); + + //Send the activity callback once the action mode callback has run. + //This type-check has already occurred in the action bar constructor. + ((SherlockActivity)mActivity).onActionModeFinished(actionMode); + } + + @Override + public boolean onCreateActionMode(android.view.ActionMode mode, android.view.Menu menu) { + return callback.onCreateActionMode(new ActionModeWrapper(mActivity, mode), new MenuWrapper(menu)); + } + + @Override + public boolean onActionItemClicked(android.view.ActionMode mode, android.view.MenuItem item) { + return callback.onActionItemClicked(new ActionModeWrapper(mActivity, mode), new MenuItemWrapper(item)); + } + }) + ); + } + + private static class ActionModeWrapper extends ActionMode { + private final Context mContext; + private final android.view.ActionMode mActionMode; + + ActionModeWrapper(Context context, android.view.ActionMode actionMode) { + mContext = context; + mActionMode = actionMode; + } + + @Override + public void finish() { + mActionMode.finish(); + } + + @Override + public View getCustomView() { + return mActionMode.getCustomView(); + } + + @Override + public Menu getMenu() { + return new MenuWrapper(mActionMode.getMenu()); + } + + @Override + public MenuInflater getMenuInflater() { + return new MenuInflater(mContext, null); + } + + @Override + public CharSequence getSubtitle() { + return mActionMode.getSubtitle(); + } + + @Override + public CharSequence getTitle() { + return mActionMode.getTitle(); + } + + @Override + public void invalidate() { + mActionMode.invalidate(); + } + + @Override + public void setCustomView(View view) { + mActionMode.setCustomView(view); + } + + @Override + public void setSubtitle(int resId) { + mActionMode.setSubtitle(resId); + } + + @Override + public void setSubtitle(CharSequence subtitle) { + mActionMode.setSubtitle(subtitle); + } + + @Override + public void setTitle(int resId) { + mActionMode.setTitle(resId); + } + + @Override + public void setTitle(CharSequence title) { + mActionMode.setTitle(title); + } + } + + // --------------------------------------------------------------------- + // ACTION BAR SUPPORT + // --------------------------------------------------------------------- + + private static class TabImpl extends ActionBar.Tab { + final ActionBarWrapper.Impl mActionBar; + + View mCustomView; + Drawable mIcon; + ActionBar.TabListener mListener; + Object mTag; + CharSequence mText; + + TabImpl(ActionBarWrapper.Impl actionBar) { + mActionBar = actionBar; + } + + @Override + public View getCustomView() { + return mCustomView; + } + + @Override + public Drawable getIcon() { + return mIcon; + } + + @Override + public int getPosition() { + final int tabCount = mActionBar.getTabCount(); + for (int i = 0; i < tabCount; i++) { + if (mActionBar.getTabAt(i).equals(this)) { + return i; + } + } + return ActionBar.Tab.INVALID_POSITION; + } + + @Override + public ActionBar.TabListener getTabListener() { + return mListener; + } + + @Override + public Object getTag() { + return mTag; + } + + @Override + public CharSequence getText() { + return mText; + } + + @Override + public void select() { + mActionBar.selectTab(this); + } + + @Override + public ActionBar.Tab setCustomView(int layoutResId) { + mCustomView = mActionBar.mActivity.getLayoutInflater().inflate(layoutResId, null); + return this; + } + + @Override + public ActionBar.Tab setCustomView(View view) { + mCustomView = view; + return this; + } + + @Override + public ActionBar.Tab setIcon(Drawable icon) { + mIcon = icon; + return this; + } + + @Override + public ActionBar.Tab setIcon(int resId) { + mIcon = mActionBar.mActivity.getResources().getDrawable(resId); + return this; + } + + @Override + public ActionBar.Tab setTabListener(TabListener listener) { + mListener = listener; + return this; + } + + @Override + public ActionBar.Tab setTag(Object obj) { + mTag = obj; + return this; + } + + @Override + public ActionBar.Tab setText(int resId) { + mText = mActionBar.mActivity.getResources().getString(resId); + return this; + } + + @Override + public ActionBar.Tab setText(CharSequence text) { + mText = text; + return this; + } + } + + @Override + public void addOnMenuVisibilityListener(final OnMenuVisibilityListener listener) { + if ((listener != null) && !mMenuListenerMap.containsKey(listener)) { + android.app.ActionBar.OnMenuVisibilityListener nativeListener = new android.app.ActionBar.OnMenuVisibilityListener() { + @Override + public void onMenuVisibilityChanged(boolean isVisible) { + listener.onMenuVisibilityChanged(isVisible); + } + }; + mMenuListenerMap.put(listener, nativeListener); + + getActionBar().addOnMenuVisibilityListener(nativeListener); + } + } + + @Override + public void addTab(Tab tab) { + getActionBar().addTab(convertTabToNative(tab)); + } + + @Override + public void addTab(Tab tab, boolean setSelected) { + getActionBar().addTab(convertTabToNative(tab), setSelected); + } + + @Override + public void addTab(Tab tab, int position) { + getActionBar().addTab(convertTabToNative(tab), position); + } + + @Override + public void addTab(ActionBar.Tab tab, int position, boolean setSelected) { + getActionBar().addTab(convertTabToNative(tab), position, setSelected); + } + + @Override + public View getCustomView() { + return getActionBar().getCustomView(); + } + + @Override + public int getDisplayOptions() { + return getActionBar().getDisplayOptions(); + } + + @Override + public int getHeight() { + return getActionBar().getHeight(); + } + + @Override + public int getNavigationItemCount() { + return getActionBar().getNavigationItemCount(); + } + + @Override + public int getNavigationMode() { + return getActionBar().getNavigationMode(); + } + + @Override + public int getSelectedNavigationIndex() { + return getActionBar().getSelectedNavigationIndex(); + } + + @Override + public Tab getSelectedTab() { + if (getActionBar().getSelectedTab() != null) { + return (ActionBar.Tab)getActionBar().getSelectedTab().getTag(); + } + return null; + } + + @Override + public CharSequence getSubtitle() { + return getActionBar().getSubtitle(); + } + + @Override + public ActionBar.Tab getTabAt(int index) { + if (getActionBar().getTabAt(index) != null) { + return (Tab)getActionBar().getTabAt(index).getTag(); + } + return null; + } + + @Override + public int getTabCount() { + return getActionBar().getTabCount(); + } + + @Override + public CharSequence getTitle() { + return getActionBar().getTitle(); + } + + @Override + public void hide() { + getActionBar().hide(); + } + + @Override + public boolean isShowing() { + return getActionBar().isShowing(); + } + + @Override + public ActionBar.Tab newTab() { + return new TabImpl(this); + } + + @Override + public void removeAllTabs() { + getActionBar().removeAllTabs(); + } + + @Override + public void removeOnMenuVisibilityListener(OnMenuVisibilityListener listener) { + if ((listener != null) && mMenuListenerMap.containsKey(listener)) { + getActionBar().removeOnMenuVisibilityListener( + mMenuListenerMap.remove(listener) + ); + } + } + + @Override + public void removeTab(Tab tab) { + final int tabCount = getActionBar().getTabCount(); + for (int i = 0; i < tabCount; i++) { + if (getActionBar().getTabAt(i).getTag().equals(tab)) { + getActionBar().removeTabAt(i); + break; + } + } + } + + @Override + public void removeTabAt(int position) { + getActionBar().removeTabAt(position); + } + + @Override + public void selectTab(ActionBar.Tab tab) { + final int tabCount = getActionBar().getTabCount(); + for (int i = 0; i < tabCount; i++) { + if (getActionBar().getTabAt(i).getTag().equals(tab)) { + getActionBar().setSelectedNavigationItem(i); + break; + } + } + } + + @Override + public void setBackgroundDrawable(Drawable d) { + getActionBar().setBackgroundDrawable(d); + } + + @Override + public void setCustomView(int resId) { + getActionBar().setCustomView(resId); + } + + @Override + public void setCustomView(View view) { + getActionBar().setCustomView(view); + } + + @Override + public void setCustomView(View view, LayoutParams layoutParams) { + android.app.ActionBar.LayoutParams nativeLayoutParams = new android.app.ActionBar.LayoutParams(layoutParams); + nativeLayoutParams.gravity = layoutParams.gravity; + getActionBar().setCustomView(view, nativeLayoutParams); + } + + @Override + public void setDisplayHomeAsUpEnabled(boolean showHomeAsUp) { + getActionBar().setDisplayHomeAsUpEnabled(showHomeAsUp); + } + + @Override + public void setDisplayOptions(int options, int mask) { + getActionBar().setDisplayOptions(options, mask); + } + + @Override + public void setDisplayOptions(int options) { + getActionBar().setDisplayOptions(options); + } + + @Override + public void setDisplayShowCustomEnabled(boolean showCustom) { + getActionBar().setDisplayShowCustomEnabled(showCustom); + } + + @Override + public void setDisplayShowHomeEnabled(boolean showHome) { + getActionBar().setDisplayShowHomeEnabled(showHome); + } + + @Override + public void setDisplayShowTitleEnabled(boolean showTitle) { + getActionBar().setDisplayShowTitleEnabled(showTitle); + } + + @Override + public void setDisplayUseLogoEnabled(boolean useLogo) { + getActionBar().setDisplayUseLogoEnabled(useLogo); + } + + @Override + public void setListNavigationCallbacks(SpinnerAdapter adapter, final OnNavigationListener callback) { + getActionBar().setListNavigationCallbacks(adapter, new android.app.ActionBar.OnNavigationListener() { + @Override + public boolean onNavigationItemSelected(int itemPosition, long itemId) { + if (callback != null) { + return callback.onNavigationItemSelected(itemPosition, itemId); + } + return false; + } + }); + } + + @Override + public void setNavigationMode(int mode) { + getActionBar().setNavigationMode(mode); + } + + @Override + public void setSelectedNavigationItem(int position) { + getActionBar().setSelectedNavigationItem(position); + } + + @Override + public void setSubtitle(CharSequence subtitle) { + getActionBar().setSubtitle(subtitle); + } + + @Override + public void setSubtitle(int resId) { + getActionBar().setSubtitle(resId); + } + + @Override + public void setTitle(CharSequence title) { + getActionBar().setTitle(title); + } + + @Override + public void setTitle(int resId) { + getActionBar().setTitle(resId); + } + + @Override + public void show() { + getActionBar().show(); + } + } +} diff --git a/actionbarsherlock/library/src/com/actionbarsherlock/internal/app/SherlockActivity.java b/actionbarsherlock/library/src/com/actionbarsherlock/internal/app/SherlockActivity.java new file mode 100644 index 000000000..f4bca6377 --- /dev/null +++ b/actionbarsherlock/library/src/com/actionbarsherlock/internal/app/SherlockActivity.java @@ -0,0 +1,13 @@ +package com.actionbarsherlock.internal.app; + +import android.support.v4.view.ActionMode; +import android.support.v4.view.MenuItem; + +/** + * Required callbacks for an activity to work with ActionBarSherlock. + */ +public interface SherlockActivity { + void onActionModeFinished(ActionMode mode); + void onActionModeStarted(ActionMode mode); + boolean onOptionsItemSelected(MenuItem item); +} diff --git a/actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/ActionMenuItem.java b/actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/ActionMenuItem.java new file mode 100644 index 000000000..6c32fed30 --- /dev/null +++ b/actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/ActionMenuItem.java @@ -0,0 +1,255 @@ +package com.actionbarsherlock.internal.view.menu; + +import android.content.Context; +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.support.v4.view.MenuItem; +import android.support.v4.view.SubMenu; +import android.view.ContextMenu; +import android.view.View; + +public class ActionMenuItem implements MenuItem { + private static final int CHECKABLE = MenuItemImpl.CHECKABLE; + private static final int CHECKED = MenuItemImpl.CHECKED; + private static final int ENABLED = MenuItemImpl.ENABLED; + private static final int EXCLUSIVE = MenuItemImpl.EXCLUSIVE; + private static final int HIDDEN = MenuItemImpl.HIDDEN; + private static final int NO_ICON = 0; + + //XXX UNUSED: private final int mCategoryOrder; + private MenuItem.OnMenuItemClickListener mClickListener; + private Context mContext; + private int mFlags = ENABLED; + private final int mGroup; + private Drawable mIconDrawable; + private int mIconResId = NO_ICON; + private final int mId; + private Intent mIntent; + private final int mOrdering; + private char mShortcutAlphabeticChar; + private char mShortcutNumericChar; + private CharSequence mTitle; + private CharSequence mTitleCondensed; + + public ActionMenuItem(Context context, int group, int id, int categoryOrder, int ordering, CharSequence title) { + mContext = context; + mId = id; + mGroup = group; + //XXX UNUSED mCategoryOrder = categoryOrder; + mOrdering = ordering; + mTitle = title; + } + + @Override + public View getActionView() { + return null; + } + + @Override + public char getAlphabeticShortcut() { + return mShortcutAlphabeticChar; + } + + @Override + public int getGroupId() { + return mGroup; + } + + @Override + public Drawable getIcon() { + return mIconDrawable; + } + + @Override + public Intent getIntent() { + return mIntent; + } + + @Override + public int getItemId() { + return mId; + } + + @Override + public ContextMenu.ContextMenuInfo getMenuInfo() { + return null; + } + + @Override + public char getNumericShortcut() { + return mShortcutNumericChar; + } + + @Override + public int getOrder() { + return mOrdering; + } + + @Override + public SubMenu getSubMenu() { + return null; + } + + @Override + public CharSequence getTitle() { + return mTitle; + } + + @Override + public CharSequence getTitleCondensed() { + return mTitleCondensed; + } + + @Override + public boolean hasSubMenu() { + return false; + } + + public boolean invoke() { + if ((mClickListener != null) && mClickListener.onMenuItemClick(this)) { + return true; + } else if (mIntent != null) { + mContext.startActivity(mIntent); + return true; + } + return false; + } + + @Override + public boolean isCheckable() { + return (mFlags & CHECKABLE) != 0; + } + + @Override + public boolean isChecked() { + return (mFlags & CHECKED) != 0; + } + + @Override + public boolean isEnabled() { + return (mFlags & ENABLED) != 0; + } + + @Override + public boolean isVisible() { + return (mFlags & HIDDEN) == 0; + } + + @Override + public MenuItem setActionView(int layoutResId) { + throw new UnsupportedOperationException(); + } + + @Override + public MenuItem setActionView(View view) { + throw new UnsupportedOperationException(); + } + + @Override + public MenuItem setAlphabeticShortcut(char shortcut) { + mShortcutAlphabeticChar = shortcut; + return this; + } + + @Override + public MenuItem setCheckable(boolean checkable) { + mFlags = (mFlags & ~CHECKABLE) | (checkable ? CHECKABLE : 0); + return this; + } + + @Override + public MenuItem setChecked(boolean checked) { + mFlags = (mFlags & ~CHECKED) | (checked ? CHECKED : 0); + return this; + } + + @Override + public MenuItem setEnabled(boolean enabled) { + mFlags = (mFlags & ~ENABLED) | (enabled ? ENABLED : 0); + return this; + } + + public ActionMenuItem setExclusiveCheckable(boolean exclusive) { + mFlags = (mFlags & ~EXCLUSIVE) | (exclusive ? EXCLUSIVE : 0); + return this; + } + + @Override + public MenuItem setIcon(int resId) { + mIconResId = resId; + mIconDrawable = mContext.getResources().getDrawable(mIconResId); + return this; + } + + @Override + public MenuItem setIcon(Drawable icon) { + mIconDrawable = icon; + mIconResId = NO_ICON; + return this; + } + + @Override + public MenuItem setIntent(Intent intent) { + mIntent = intent; + return this; + } + + @Override + public MenuItem setNumericShortcut(char shortcut) { + mShortcutNumericChar = shortcut; + return this; + } + + @Override + public MenuItem setOnMenuItemClickListener(MenuItem.OnMenuItemClickListener listener) { + mClickListener = listener; + return this; + } + + @Override + public android.view.MenuItem setOnMenuItemClickListener(final android.view.MenuItem.OnMenuItemClickListener listener) { + mClickListener = new MenuItem.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + return listener.onMenuItemClick(item); + } + }; + return null; + } + + @Override + public MenuItem setShortcut(char numericShortcut, char alphabeticShortcut) { + mShortcutNumericChar = numericShortcut; + mShortcutAlphabeticChar = alphabeticShortcut; + return this; + } + + @Override + public void setShowAsAction(int layoutResId) { + //No op + } + + @Override + public MenuItem setTitle(int resId) { + this.mTitle = mContext.getResources().getString(resId); + return this; + } + + @Override + public MenuItem setTitle(CharSequence title) { + mTitle = title; + return this; + } + + @Override + public MenuItem setTitleCondensed(CharSequence title) { + mTitleCondensed = title; + return this; + } + + @Override + public MenuItem setVisible(boolean visible) { + mFlags = (mFlags & HIDDEN) | (visible ? 0 : HIDDEN); + return this; + } +} \ No newline at end of file diff --git a/actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/ActionMenuItemView.java b/actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/ActionMenuItemView.java new file mode 100644 index 000000000..fa6f8bd56 --- /dev/null +++ b/actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/ActionMenuItemView.java @@ -0,0 +1,149 @@ +package com.actionbarsherlock.internal.view.menu; + +import java.lang.ref.WeakReference; +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; +import com.actionbarsherlock.R; + +public class ActionMenuItemView extends RelativeLayout implements MenuView.ItemView, View.OnClickListener { + private ImageView mImageButton; + private TextView mTextButton; + private FrameLayout mCustomView; + private MenuItemImpl mMenuItem; + private WeakReference mDivider; + + public ActionMenuItemView(Context context) { + this(context, null); + } + public ActionMenuItemView(Context context, AttributeSet attrs) { + this(context, attrs, R.attr.actionButtonStyle); + } + public ActionMenuItemView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + setOnClickListener(this); + } + + @Override + protected void onFinishInflate() { + super.onFinishInflate(); + + mImageButton = (ImageView) findViewById(R.id.abs__item_icon); + mImageButton.setOnClickListener(this); + mTextButton = (TextView) findViewById(R.id.abs__item_text); + mTextButton.setOnClickListener(this); + mCustomView = (FrameLayout) findViewById(R.id.abs__item_custom); + mCustomView.setOnClickListener(this); + } + + public void setEnabled(boolean enabled) { + super.setEnabled(enabled); + mImageButton.setEnabled(enabled); + mTextButton.setEnabled(enabled); + mCustomView.setEnabled(enabled); + } + + public void setDivider(ImageView divider) { + mDivider = new WeakReference(divider); + //Ensure we are not displaying the divider when we are not visible + setDividerVisibility(getVisibility()); + } + + public void setVisible(boolean visible) { + final int visibility = visible ? View.VISIBLE : View.GONE; + setDividerVisibility(visibility); + setVisibility(visibility); + } + + private void setDividerVisibility(int visibility) { + if ((mDivider != null) && (mDivider.get() != null)) { + mDivider.get().setVisibility(visibility); + } + } + + public void reloadDisplay() { + final boolean hasCustomView = mCustomView.getChildCount() > 0; + final boolean hasText = mMenuItem.showsActionItemText() && !"".equals(mTextButton.getText()); + + if (hasCustomView) { + mCustomView.setVisibility(View.VISIBLE); + mImageButton.setVisibility(View.GONE); + mTextButton.setVisibility(View.GONE); + } else { + mCustomView.setVisibility(View.GONE); + mImageButton.setVisibility(View.VISIBLE); + mTextButton.setVisibility(hasText ? View.VISIBLE : View.GONE); + } + } + + public void setIcon(Drawable icon) { + mImageButton.setImageDrawable(icon); + } + + public void setTitle(CharSequence title) { + mTextButton.setText(title); + reloadDisplay(); + } + + @Override + public void initialize(MenuItemImpl itemData, int menuType) { + mMenuItem = itemData; + setId(itemData.getItemId()); + setIcon(itemData.getIcon()); + setTitle(itemData.getTitle()); + setEnabled(itemData.isEnabled()); + setActionView(itemData.getActionView()); + setVisible(itemData.isVisible()); + } + + @Override + public MenuItemImpl getItemData() { + return mMenuItem; + } + + @Override + public void setCheckable(boolean checkable) { + // No-op + } + + @Override + public void setChecked(boolean checked) { + // No-op + } + + @Override + public void setShortcut(boolean showShortcut, char shortcutKey) { + // No-op + } + + @Override + public void setActionView(View actionView) { + mCustomView.removeAllViews(); + if (actionView != null) { + mCustomView.addView(actionView); + } + reloadDisplay(); + } + + @Override + public boolean prefersCondensedTitle() { + return true; + } + + @Override + public boolean showsIcon() { + return true; + } + + @Override + public void onClick(View v) { + if (mMenuItem != null) { + mMenuItem.invoke(); + } + } +} diff --git a/actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/MenuBuilder.java b/actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/MenuBuilder.java new file mode 100644 index 000000000..cb0a7556d --- /dev/null +++ b/actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/MenuBuilder.java @@ -0,0 +1,407 @@ +/* + * Copyright (C) 2006 The Android Open Source Project + * Copyright (C) 2011 Jake Wharton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.actionbarsherlock.internal.view.menu; + +import java.util.ArrayList; +import java.util.List; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.support.v4.view.Menu; +import android.support.v4.view.MenuItem; +import android.view.KeyEvent; + +/** + * An implementation of the {@link android.view.Menu} interface for use in + * inflating menu XML resources to be added to a third-party action bar. + * + * @author Jake Wharton + * @see com.android.internal.view.menu.MenuBuilder + */ +public class MenuBuilder implements Menu { + private static final int DEFAULT_ITEM_ID = 0; + private static final int DEFAULT_GROUP_ID = 0; + private static final int DEFAULT_ORDER = 0; + + public static final int NUM_TYPES = 2; + public static final int TYPE_ACTION_BAR = 0; + public static final int TYPE_NATIVE = 1; + + /** + * This is the part of an order integer that the user can provide. + * @hide + */ + static final int USER_MASK = 0x0000ffff; + + /** + * Bit shift of the user portion of the order integer. + * @hide + */ + static final int USER_SHIFT = 0; + + /** + * This is the part of an order integer that supplies the category of the + * item. + * @hide + */ + + static final int CATEGORY_MASK = 0xffff0000; + + /** + * Bit shift of the category portion of the order integer. + * @hide + */ + static final int CATEGORY_SHIFT = 16; + + private static final int[] CATEGORY_TO_ORDER = new int[] { + 1, /* No category */ + 4, /* CONTAINER */ + 5, /* SYSTEM */ + 3, /* SECONDARY */ + 2, /* ALTERNATIVE */ + 0, /* SELECTED_ALTERNATIVE */ + }; + + + + public interface Callback { + public boolean onMenuItemSelected(MenuBuilder menu, MenuItem item); + } + + + + /** Context used for resolving any resources. */ + private final Context mContext; + + /** Child {@link ActionBarMenuItem} items. */ + private final ArrayList mItems; + + /** Menu callback that will receive various events. */ + private Callback mCallback; + + private boolean mShowsActionItemText; + + + + /** + * Create a new action bar menu. + * + * @param context Context used if resource resolution is required. + */ + public MenuBuilder(Context context) { + this.mContext = context; + this.mItems = new ArrayList(); + } + + + /** + * Adds an item to the menu. The other add methods funnel to this. + * + * @param itemId Unique item ID. + * @param groupId Group ID. + * @param order Order. + * @param title Item title. + * @return MenuItem instance. + */ + private MenuItem addInternal(int itemId, int groupId, int order, CharSequence title) { + final int ordering = getOrdering(order); + final MenuItemImpl item = new MenuItemImpl(this, groupId, itemId, order, ordering, title, MenuItem.SHOW_AS_ACTION_NEVER); + + mItems.add(findInsertIndex(mItems, ordering), item); + return item; + } + + private static int findInsertIndex(ArrayList items, int ordering) { + for (int i = items.size() - 1; i >= 0; i--) { + MenuItemImpl item = items.get(i); + if (item.getOrdering() <= ordering) { + return i + 1; + } + } + + return 0; + } + + /** + * Returns the ordering across all items. This will grab the category from + * the upper bits, find out how to order the category with respect to other + * categories, and combine it with the lower bits. + * + * @param categoryOrder The category order for a particular item (if it has + * not been or/add with a category, the default category is + * assumed). + * @return An ordering integer that can be used to order this item across + * all the items (even from other categories). + */ + private static int getOrdering(int categoryOrder) { + final int index = (categoryOrder & CATEGORY_MASK) >> CATEGORY_SHIFT; + + if (index < 0 || index >= CATEGORY_TO_ORDER.length) { + throw new IllegalArgumentException("order does not contain a valid category."); + } + + return (CATEGORY_TO_ORDER[index] << CATEGORY_SHIFT) | (categoryOrder & USER_MASK); + } + + public void setCallback(Callback callback) { + mCallback = callback; + } + + public Callback getCallback() { + return mCallback; + } + + public boolean getShowsActionItemText() { + return mShowsActionItemText; + } + + public void setShowsActionItemText(boolean showsActionItemText) { + mShowsActionItemText = showsActionItemText; + } + + /** + * Gets the root menu (if this is a submenu, find its root menu). + * + * @return The root menu. + */ + public MenuBuilder getRootMenu() { + return this; + } + + /** + * Get a list of the items contained in this menu. + * + * @return List of {@link MenuItemImpl}s. + */ + public final List getItems() { + return this.mItems; + } + + final MenuItemImpl remove(int index) { + return this.mItems.remove(index); + } + + final Context getContext() { + return this.mContext; + } + + void setExclusiveItemChecked(MenuItem item) { + final int group = item.getGroupId(); + + final int N = mItems.size(); + for (int i = 0; i < N; i++) { + MenuItemImpl curItem = mItems.get(i); + if (curItem.getGroupId() == group) { + if (!curItem.isExclusiveCheckable()) continue; + if (!curItem.isCheckable()) continue; + + // Check the item meant to be checked, uncheck the others (that are in the group) + curItem.setCheckedInt(curItem == item); + } + } + } + + // ** Menu Methods ** \\ + + @Override + public MenuItem add(int titleResourceId) { + return addInternal(0, 0, 0, mContext.getResources().getString(titleResourceId)); + } + + @Override + public MenuItem add(int groupId, int itemId, int order, int titleResourceId) { + return addInternal(itemId, groupId, order, mContext.getResources().getString(titleResourceId)); + } + + @Override + public MenuItem add(int groupId, int itemId, int order, CharSequence title) { + return addInternal(itemId, groupId, order, title); + } + + @Override + public MenuItem add(CharSequence title) { + return addInternal(0, 0, 0, title); + } + + @Override + public SubMenuBuilder addSubMenu(CharSequence title) { + return this.addSubMenu(DEFAULT_GROUP_ID, DEFAULT_ITEM_ID, DEFAULT_ORDER, title); + } + + @Override + public SubMenuBuilder addSubMenu(int titleResourceId) { + return this.addSubMenu(DEFAULT_GROUP_ID, DEFAULT_ITEM_ID, DEFAULT_ORDER, titleResourceId); + } + + @Override + public SubMenuBuilder addSubMenu(int groupId, int itemId, int order, int titleResourceId) { + String title = this.mContext.getResources().getString(titleResourceId); + return this.addSubMenu(groupId, itemId, order, title); + } + + @Override + public SubMenuBuilder addSubMenu(int groupId, int itemId, int order, CharSequence title) { + MenuItemImpl item = (MenuItemImpl)this.add(groupId, itemId, order, title); + SubMenuBuilder subMenu = new SubMenuBuilder(this.mContext, this, item); + item.setSubMenu(subMenu); + return subMenu; + } + + @Override + public void clear() { + this.mItems.clear(); + } + + @Override + public void close() {} + + @Override + public MenuItemImpl findItem(int itemId) { + for (MenuItemImpl item : this.mItems) { + if (item.getItemId() == itemId) { + return item; + } + } + return null; + } + + @Override + public MenuItemImpl getItem(int index) { + return this.mItems.get(index); + } + + @Override + public boolean hasVisibleItems() { + for (MenuItem item : this.mItems) { + if (item.isVisible()) { + return true; + } + } + return false; + } + + @Override + public void removeItem(int itemId) { + final int size = this.mItems.size(); + for (int i = 0; i < size; i++) { + if (this.mItems.get(i).getItemId() == itemId) { + this.mItems.remove(i); + return; + } + } + } + + @Override + public int size() { + return this.mItems.size(); + } + + @Override + public int addIntentOptions(int groupId, int itemId, int order, ComponentName caller, Intent[] specifics, Intent intent, int flags, android.view.MenuItem[] outSpecificItems) { + PackageManager pm = mContext.getPackageManager(); + final List lri = + pm.queryIntentActivityOptions(caller, specifics, intent, 0); + final int N = lri != null ? lri.size() : 0; + + if ((flags & FLAG_APPEND_TO_GROUP) == 0) { + removeGroup(groupId); + } + + for (int i=0; i= 0) { + outSpecificItems[ri.specificIndex] = item; + } + } + + return N; + } + + @Override + public boolean isShortcutKey(int keyCode, KeyEvent event) { + return false; + } + + @Override + public boolean performIdentifierAction(int id, int flags) { + throw new RuntimeException("Method not supported."); + } + + @Override + public boolean performShortcut(int keyCode, KeyEvent event, int flags) { + return false; + } + + @Override + public void removeGroup(int groupId) { + for (int i = mItems.size() - 1; i > 0; i--) { + if (mItems.get(i).getGroupId() == groupId) { + mItems.remove(i); + } + } + } + + @Override + public void setGroupCheckable(int groupId, boolean checkable, boolean exclusive) { + final int N = mItems.size(); + for (int i = 0; i < N; i++) { + MenuItemImpl item = mItems.get(i); + if (item.getGroupId() == groupId) { + item.setExclusiveCheckable(exclusive); + item.setCheckable(checkable); + } + } + } + + @Override + public void setGroupEnabled(int groupId, boolean enabled) { + final int size = this.mItems.size(); + for (int i = 0; i < size; i++) { + MenuItemImpl item = mItems.get(i); + if (item.getGroupId() == groupId) { + item.setEnabled(enabled); + } + } + } + + @Override + public void setGroupVisible(int groupId, boolean visible) { + final int size = this.mItems.size(); + for (int i = 0; i < size; i++) { + MenuItemImpl item = mItems.get(i); + if (item.getGroupId() == groupId) { + item.setVisible(visible); + } + } + } + + @Override + public void setQwertyMode(boolean isQwerty) { + throw new RuntimeException("Method not supported."); + } +} diff --git a/actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/MenuInflaterWrapper.java b/actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/MenuInflaterWrapper.java new file mode 100644 index 000000000..29040bab5 --- /dev/null +++ b/actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/MenuInflaterWrapper.java @@ -0,0 +1,21 @@ +package com.actionbarsherlock.internal.view.menu; + +import android.content.Context; + +public final class MenuInflaterWrapper extends android.view.MenuInflater { + private final android.view.MenuInflater mMenuInflater; + + public MenuInflaterWrapper(Context context, android.view.MenuInflater menuInflater) { + super(context); + mMenuInflater = menuInflater; + } + + @Override + public void inflate(int menuRes, android.view.Menu menu) { + if (menu instanceof MenuWrapper) { + mMenuInflater.inflate(menuRes, ((MenuWrapper)menu).unwrap()); + } else { + mMenuInflater.inflate(menuRes, menu); + } + } +} diff --git a/actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/MenuItemImpl.java b/actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/MenuItemImpl.java new file mode 100644 index 000000000..9e2b7c704 --- /dev/null +++ b/actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/MenuItemImpl.java @@ -0,0 +1,663 @@ +/* + * Copyright (C) 2006 The Android Open Source Project + * 2011 Jake Wharton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.actionbarsherlock.internal.view.menu; + +import java.lang.ref.WeakReference; +import android.app.AlertDialog; +import android.content.ActivityNotFoundException; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.support.v4.view.MenuItem; +import android.util.Log; +import android.view.ContextMenu.ContextMenuInfo; +import android.view.LayoutInflater; +import android.view.View; + +/** + * An implementation of the {@link android.view.MenuItem} interface for use in + * inflating menu XML resources to be added to a third-party action bar. + * + * @author Jake Wharton + * @see com.android.internal.view.menu.MenuItemImpl + */ +public final class MenuItemImpl implements MenuItem { + private static final String TAG = "MenuItemImpl"; + + private final MenuBuilder mMenu; + + private final int mItemId; + private final int mGroupId; + private final int mCategoryOrder; + private final int mOrdering; + + private Intent mIntent; + private CharSequence mTitle; + private CharSequence mTitleCondensed; + private char mNumericalShortcut; + private char mAlphabeticalShortcut; + private int mShowAsAction; + private SubMenuBuilder mSubMenu; + private Runnable mItemCallback; + private OnMenuItemClickListener mClickListener; + private Drawable mIcon; + private int mIconRes = View.NO_ID; + private View mActionView; + private int mActionViewRes = View.NO_ID; + + int mFlags = ENABLED; + static final int CHECKABLE = 0x01; + static final int CHECKED = 0x02; + static final int EXCLUSIVE = 0x04; + static final int HIDDEN = 0x08; + static final int ENABLED = 0x10; + static final int IS_ACTION = 0x20; + + private final WeakReference[] mItemViews; + + private final DialogInterface.OnClickListener subMenuClick = new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int index) { + dialog.dismiss(); + mSubMenu.getItem(index).invoke(); + } + }; + private final DialogInterface.OnMultiChoiceClickListener subMenuMultiClick = new DialogInterface.OnMultiChoiceClickListener() { + @Override + public void onClick(DialogInterface dialog, int index, boolean isChecked) { + dialog.dismiss(); + mSubMenu.getItem(index).setChecked(isChecked); + } + }; + + + /** + * Create a new action bar menu item. + * + * @param context Context used if resource resolution is required. + * @param itemId A unique ID. Used in the activity callback. + * @param groupId Group ID. Currently unused. + * @param order Item order. Currently unused. + * @param title Title of the item. + */ + @SuppressWarnings("unchecked") + public MenuItemImpl(MenuBuilder menu, int groupId, int itemId, int order, int ordering, CharSequence title, int showAsAction) { + mMenu = menu; + + mItemId = itemId; + mGroupId = groupId; + mCategoryOrder = order; + mOrdering = ordering; + mTitle = title; + mShowAsAction = showAsAction; + + mItemViews = new WeakReference[MenuBuilder.NUM_TYPES]; + } + + + + public boolean invoke() { + if (hasSubMenu()) { + AlertDialog.Builder builder = new AlertDialog.Builder(mMenu.getContext()); + builder.setTitle(getTitle()); + + final boolean isExclusive = mSubMenu.getItem(0).isExclusiveCheckable(); + final boolean isCheckable = mSubMenu.getItem(0).isCheckable(); + final CharSequence[] titles = getSubMenuTitles(); + if (isExclusive) { + builder.setSingleChoiceItems(titles, getSubMenuSelected(), subMenuClick); + } else if (isCheckable) { + builder.setMultiChoiceItems(titles, getSubMenuChecked(), subMenuMultiClick); + } else { + builder.setItems(titles, subMenuClick); + } + + builder.show(); + return true; + } + + if (mClickListener != null && + mClickListener.onMenuItemClick(this)) { + return true; + } + + MenuBuilder.Callback callback = mMenu.getRootMenu().getCallback(); + if (callback != null && + callback.onMenuItemSelected(mMenu.getRootMenu(), this)) { + return true; + } + + if (mItemCallback != null) { + mItemCallback.run(); + return true; + } + + if (mIntent != null) { + try { + mMenu.getContext().startActivity(mIntent); + return true; + } catch (ActivityNotFoundException e) { + Log.e(TAG, "Can't find activity to handle intent; ignoring", e); + } + } + + return false; + } + + private CharSequence[] getSubMenuTitles() { + final int count = mSubMenu.size(); + CharSequence[] list = new CharSequence[count]; + for (int i = 0; i < count; i++) { + list[i] = mSubMenu.getItem(i).getTitle(); + } + return list; + } + + private int getSubMenuSelected() { + final int count = mSubMenu.size(); + for (int i = 0; i < count; i++) { + if (mSubMenu.getItem(i).isChecked()) { + return i; + } + } + return -1; + } + + private boolean[] getSubMenuChecked() { + final int count = mSubMenu.size(); + boolean[] checked = new boolean[count]; + for (int i = 0; i < count; i++) { + checked[i] = mSubMenu.getItem(i).isChecked(); + } + return checked; + } + + private boolean hasItemView(int menuType) { + return mItemViews[menuType] != null && mItemViews[menuType].get() != null; + } + + public void setItemView(int type, MenuView.ItemView itemView) { + mItemViews[type] = new WeakReference(itemView); + } + + + public void addTo(android.view.Menu menu) { + if (hasSubMenu()) { + android.view.SubMenu subMenu = menu.addSubMenu(mGroupId, mItemId, mCategoryOrder, mTitle); + if (mIconRes != View.NO_ID) { + subMenu.setIcon(mIconRes); + } else { + subMenu.setIcon(mIcon); + } + for (MenuItemImpl item : mSubMenu.getItems()) { + item.addTo(subMenu); + } + + if (mSubMenu.getItem(0).isExclusiveCheckable()) { + int checked = getSubMenuSelected(); + if (checked != -1) { + subMenu.getItem(checked).setChecked(true); + } + } + } else { + android.view.MenuItem item = menu.add(mGroupId, mItemId, mCategoryOrder, mTitle) + .setAlphabeticShortcut(mAlphabeticalShortcut) + .setNumericShortcut(mNumericalShortcut) + .setVisible(isVisible()) + .setIntent(mIntent) + .setCheckable(isCheckable()) + .setChecked(isChecked()) + .setOnMenuItemClickListener(mClickListener); + + if (isExclusiveCheckable()) { + menu.setGroupCheckable(mGroupId, true, true); + } + + //Create and initialize a native itemview wrapper + NativeMenuItemView nativeWrapper = new NativeMenuItemView(item); + nativeWrapper.initialize(this, MenuBuilder.TYPE_NATIVE); + + //Associate the itemview to this so changes will be reflected + setItemView(MenuBuilder.TYPE_NATIVE, nativeWrapper); + } + } + + /** + * Get whether or not this item is being shown on the action bar. + * + * @return {@code true} if shown, {@code false} otherwise. + */ + public boolean isShownOnActionBar() { + return (mFlags & IS_ACTION) == IS_ACTION; + } + + /** + * Denote whether or not this menu item is being shown on the action bar. + * + * @param isShownOnActionBar {@code true} if shown or {@code false}. + */ + public void setIsShownOnActionBar(boolean isShownOnActionBar) { + mFlags = (mFlags & ~IS_ACTION) | (isShownOnActionBar ? IS_ACTION : 0); + } + + @Override + public Intent getIntent() { + return this.mIntent; + } + + @Override + public int getItemId() { + return this.mItemId; + } + + @Override + public CharSequence getTitle() { + return this.mTitle; + } + + @Override + public boolean isEnabled() { + return (mFlags & ENABLED) != 0; + } + + @Override + public boolean isVisible() { + return (mFlags & HIDDEN) == 0; + } + + @Override + public MenuItem setEnabled(boolean enabled) { + final boolean oldValue = isEnabled(); + mFlags = (mFlags & ~ENABLED) | (enabled ? ENABLED : 0); + + if (oldValue != enabled) { + for (int i = MenuBuilder.NUM_TYPES - 1; i >= 0; i--) { + if (hasItemView(i)) { + mItemViews[i].get().setEnabled(enabled); + } + } + } + + return this; + } + + @Override + public MenuItem setIcon(int iconResourceId) { + mIcon = null; + mIconRes = iconResourceId; + + if (mIconRes != View.NO_ID) { + setIconOnViews(mMenu.getContext().getResources().getDrawable(mIconRes)); + } + + return this; + } + + @Override + public MenuItem setIntent(Intent intent) { + mIntent = intent; + return this; + } + + @Override + public MenuItem setTitle(CharSequence title) { + mTitle = title; + return this; + } + + @Override + public MenuItem setTitle(int titleResourceId) { + mTitle = mMenu.getContext().getResources().getString(titleResourceId); + return this; + } + + @Override + public MenuItem setVisible(boolean visible) { + final boolean oldValue = isVisible(); + mFlags = (mFlags & ~HIDDEN) | (visible ? 0 : HIDDEN); + if (oldValue != visible) { + for (int i = MenuBuilder.NUM_TYPES - 1; i >= 0; i--) { + if (hasItemView(i)) { + mItemViews[i].get().setVisible(visible); + } + } + } + return this; + } + + @Override + public boolean isChecked() { + return (mFlags & CHECKED) == CHECKED; + } + + @Override + public MenuItem setChecked(boolean checked) { + if ((mFlags & EXCLUSIVE) == EXCLUSIVE) { + // Call the method on the Menu since it knows about the others in this + // exclusive checkable group + mMenu.setExclusiveItemChecked(this); + } else { + setCheckedInt(checked); + } + + return this; + } + + void setCheckedInt(boolean checked) { + final boolean oldValue = isChecked(); + mFlags = (mFlags & ~CHECKED) | (checked ? CHECKED : 0); + if (oldValue != checked) { + for (int i = MenuBuilder.NUM_TYPES - 1; i >= 0; i--) { + if (hasItemView(i)) { + mItemViews[i].get().setChecked(checked); + } + } + } + } + + @Override + public boolean isCheckable() { + return (mFlags & CHECKABLE) == CHECKABLE; + } + + @Override + public MenuItem setCheckable(boolean checkable) { + final boolean oldValue = isCheckable(); + mFlags = (mFlags & ~CHECKABLE) | (checkable ? CHECKABLE : 0); + if (oldValue != checkable) { + for (int i = MenuBuilder.NUM_TYPES - 1; i >= 0; i--) { + if (hasItemView(i)) { + mItemViews[i].get().setCheckable(checkable); + } + } + } + + return this; + } + + public void setExclusiveCheckable(boolean exclusive) { + mFlags = (mFlags & ~EXCLUSIVE) | (exclusive ? EXCLUSIVE : 0); + } + + public boolean isExclusiveCheckable() { + return (mFlags & EXCLUSIVE) == EXCLUSIVE; + } + + @Override + public CharSequence getTitleCondensed() { + return mTitleCondensed; + } + + @Override + public MenuItem setTitleCondensed(CharSequence title) { + mTitleCondensed = title; + return this; + } + + @Override + public int getGroupId() { + return mGroupId; + } + + @Override + public int getOrder() { + return mCategoryOrder; + } + + public int getOrdering() { + return mOrdering; + } + + @Override + public SubMenuBuilder getSubMenu() { + return mSubMenu; + } + + /** + * Set the sub-menu of this item. + * + * @param subMenu Sub-menu instance. + * @return This Item so additional setters can be called. + */ + MenuItem setSubMenu(SubMenuBuilder subMenu) { + mSubMenu = subMenu; + return this; + } + + @Override + public boolean hasSubMenu() { + return (mSubMenu != null) && (mSubMenu.size() > 0); + } + + @Override + public char getAlphabeticShortcut() { + return mAlphabeticalShortcut; + } + + @Override + public char getNumericShortcut() { + return mNumericalShortcut; + } + + @Override + public MenuItem setAlphabeticShortcut(char alphaChar) { + mAlphabeticalShortcut = Character.toLowerCase(alphaChar); + return this; + } + + @Override + public MenuItem setNumericShortcut(char numericChar) { + mNumericalShortcut = numericChar; + return this; + } + + @Override + public MenuItem setShortcut(char numericChar, char alphaChar) { + setNumericShortcut(numericChar); + setAlphabeticShortcut(alphaChar); + return this; + } + + @Override + public void setShowAsAction(int actionEnum) { + mShowAsAction = actionEnum; + } + + public int getShowAsAction() { + return mShowAsAction; + } + + public boolean showsActionItemText() { + return mMenu.getShowsActionItemText(); + } + + @Override + public View getActionView() { + if (mActionView != null) { + return mActionView; + } + if (mActionViewRes != View.NO_ID) { + return LayoutInflater.from(mMenu.getContext()).inflate(mActionViewRes, null, false); + } + return null; + } + + @Override + public Drawable getIcon() { + if (mIcon != null) { + return mIcon; + } + if (mIconRes != View.NO_ID) { + return mMenu.getContext().getResources().getDrawable(mIconRes); + } + return null; + } + + @Override + public ContextMenuInfo getMenuInfo() { + return null; + } + + @Override + public MenuItem setActionView(View view) { + mActionView = view; + mActionViewRes = View.NO_ID; + setActionViewOnViews(mActionView); + return this; + } + + @Override + public MenuItem setActionView(int resId) { + mActionView = null; + mActionViewRes = resId; + + if (mActionViewRes != View.NO_ID) { + setActionViewOnViews(LayoutInflater.from(mMenu.getContext()).inflate(mActionViewRes, null, false)); + } + + return this; + } + + void setActionViewOnViews(View view) { + for (int i = MenuBuilder.NUM_TYPES - 1; i >= 0; i--) { + if (hasItemView(i)) { + mItemViews[i].get().setActionView(view); + } + } + } + + @Override + public MenuItem setIcon(Drawable icon) { + mIcon = icon; + mIconRes = View.NO_ID; + setIconOnViews(icon); + return this; + } + + void setIconOnViews(Drawable icon) { + for (int i = MenuBuilder.NUM_TYPES - 1; i >= 0; i--) { + if (hasItemView(i)) { + mItemViews[i].get().setIcon(icon); + } + } + } + + @Override + public android.view.MenuItem setOnMenuItemClickListener(final android.view.MenuItem.OnMenuItemClickListener menuItemClickListener) { + return this.setOnMenuItemClickListener(new OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + return menuItemClickListener.onMenuItemClick(new MenuItemWrapper(item)); + } + }); + } + + @Override + public MenuItem setOnMenuItemClickListener(OnMenuItemClickListener menuItemClickListener) { + mClickListener = menuItemClickListener; + return this; + } + + /** + * Returns the currently set menu click listener for this item. + * + * @return Click listener or {@code null}. + */ + public OnMenuItemClickListener getOnMenuItemClickListener() { + return mClickListener; + } + + + + + public static final class NativeMenuItemView implements MenuView.ItemView { + private final android.view.MenuItem mItem; + + + public NativeMenuItemView(android.view.MenuItem item) { + mItem = item; + } + + + @Override + public MenuItemImpl getItemData() { + return null; + } + + @Override + public void initialize(MenuItemImpl itemData, int menuType) { + setIcon(itemData.getIcon()); + setTitle(itemData.getTitle()); + setEnabled(itemData.isEnabled()); + setCheckable(itemData.isCheckable()); + setChecked(itemData.isChecked()); + setActionView(itemData.getActionView()); + setVisible(itemData.isVisible()); + } + + @Override + public boolean prefersCondensedTitle() { + return true; + } + + @Override + public void setCheckable(boolean checkable) { + mItem.setCheckable(checkable); + } + + @Override + public void setChecked(boolean checked) { + mItem.setChecked(checked); + } + + @Override + public void setEnabled(boolean enabled) { + mItem.setEnabled(enabled); + } + + @Override + public void setIcon(Drawable icon) { + mItem.setIcon(icon); + } + + @Override + public void setShortcut(boolean showShortcut, char shortcutKey) { + //Not supported + } + + @Override + public void setTitle(CharSequence title) { + mItem.setTitle(title); + } + + @Override + public boolean showsIcon() { + return true; + } + + @Override + public void setActionView(View actionView) { + //Not supported + } + + @Override + public void setVisible(boolean visible) { + mItem.setVisible(visible); + } + } +} \ No newline at end of file diff --git a/actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/MenuItemWrapper.java b/actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/MenuItemWrapper.java new file mode 100644 index 000000000..2ed1e548e --- /dev/null +++ b/actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/MenuItemWrapper.java @@ -0,0 +1,315 @@ +/* + * Copyright (C) 2006 The Android Open Source Project + * Copyright (C) 2011 Jake Wharton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.actionbarsherlock.internal.view.menu; + +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.support.v4.view.MenuItem; +import android.support.v4.view.SubMenu; +import android.view.View; +import android.view.ContextMenu.ContextMenuInfo; + +/** + *

Interface for direct access to a previously created menu item.

+ * + *

An Item is returned by calling one of the {@link Menu#add(int)} + * methods.

+ * + *

For a feature set of specific menu types, see {@link Menu}.

+ */ +public final class MenuItemWrapper implements MenuItem { + private static final class HoneycombMenuItem { + static View getActionView(android.view.MenuItem item) { + return item.getActionView(); + } + + static void setActionView(android.view.MenuItem item, int resId) { + item.setActionView(resId); + } + + static void setActionView(android.view.MenuItem item, View view) { + item.setActionView(view); + } + + static void setShowAsAction(android.view.MenuItem item, int actionEnum) { + item.setShowAsAction(actionEnum); + } + } + + /** Native {@link android.view.MenuItem} whose methods are wrapped. */ + private final android.view.MenuItem mMenuItem; + + /** + * Constructor used to create a wrapper to a native + * {@link android.view.MenuItem} so we can return the same type for native + * and {@link MenuItemImpl} instances, the latter of which will override + * all the methods defined in this base class. + * + * @param menuItem Native instance. + */ + public MenuItemWrapper(android.view.MenuItem menuItem) { + mMenuItem = menuItem; + } + + + /** + * Returns the currently set action view for this menu item. + * + * @return The item's action view + * @see #setActionView(int) + * @see #setActionView(View) + * @see #setShowAsAction(int) + */ + public View getActionView() { + if (mMenuItem != null) { + return HoneycombMenuItem.getActionView(mMenuItem); + } + return null; + } + + /** + * Set an action view for this menu item. An action view will be displayed + * in place of an automatically generated menu item element in the UI when + * this item is shown as an action within a parent. + * + * @param resId Layout resource to use for presenting this item to the user. + * @return This Item so additional setters can be called. + * @see #setActionView(View) + */ + public MenuItem setActionView(int resId) { + if (mMenuItem != null) { + HoneycombMenuItem.setActionView(mMenuItem, resId); + } + return this; + } + + /** + * Set an action view for this menu item. An action view will be displayed + * in place of an automatically generated menu item element in the UI when + * this item is shown as an action within a parent. + * + * @param view View to use for presenting this item to the user. + * @return This Item so additional setters can be called. + * @see #setActionView(int) + */ + public MenuItem setActionView(View view) { + if (mMenuItem != null) { + HoneycombMenuItem.setActionView(mMenuItem, view); + } + return this; + } + + /** + * Sets how this item should display in the presence of an Action Bar. The + * parameter actionEnum is a flag set. One of + * {@link #SHOW_AS_ACTION_ALWAYS}, {@link #SHOW_AS_ACTION_IF_ROOM}, or + * {@link #SHOW_AS_ACTION_NEVER} should be used, and you may optionally OR + * the value with {@link #SHOW_AS_ACTION_WITH_TEXT}. + * {@link #SHOW_AS_ACTION_WITH_TEXT} requests that when the item is shown as + * an action, it should be shown with a text label. + * + * @param actionEnum How the item should display. One of + * {@link #SHOW_AS_ACTION_ALWAYS}, {@link #SHOW_AS_ACTION_IF_ROOM}, or + * {@link #SHOW_AS_ACTION_NEVER}. {@link #SHOW_AS_ACTION_NEVER} is the + * default. + */ + public void setShowAsAction(int actionEnum) { + if (mMenuItem != null) { + HoneycombMenuItem.setShowAsAction(mMenuItem, actionEnum); + } + } + + // --------------------------------------------------------------------- + // MENU ITEM SUPPORT + // --------------------------------------------------------------------- + + @Override + public char getAlphabeticShortcut() { + return mMenuItem.getAlphabeticShortcut(); + } + + @Override + public int getGroupId() { + return mMenuItem.getGroupId(); + } + + @Override + public Drawable getIcon() { + return mMenuItem.getIcon(); + } + + @Override + public Intent getIntent() { + return mMenuItem.getIntent(); + } + + @Override + public int getItemId() { + return mMenuItem.getItemId(); + } + + @Override + public ContextMenuInfo getMenuInfo() { + return mMenuItem.getMenuInfo(); + } + + @Override + public char getNumericShortcut() { + return mMenuItem.getNumericShortcut(); + } + + @Override + public int getOrder() { + return mMenuItem.getOrder(); + } + + @Override + public SubMenu getSubMenu() { + return new SubMenuWrapper(mMenuItem.getSubMenu()); + } + + @Override + public CharSequence getTitle() { + return mMenuItem.getTitle(); + } + + @Override + public CharSequence getTitleCondensed() { + return mMenuItem.getTitleCondensed(); + } + + @Override + public boolean hasSubMenu() { + return mMenuItem.hasSubMenu(); + } + + @Override + public boolean isCheckable() { + return mMenuItem.isCheckable(); + } + + @Override + public boolean isChecked() { + return mMenuItem.isChecked(); + } + + @Override + public boolean isEnabled() { + return mMenuItem.isEnabled(); + } + + @Override + public boolean isVisible() { + return mMenuItem.isVisible(); + } + + @Override + public MenuItem setAlphabeticShortcut(char alphaChar) { + mMenuItem.setAlphabeticShortcut(alphaChar); + return this; + } + + @Override + public MenuItem setCheckable(boolean checkable) { + mMenuItem.setCheckable(checkable); + return this; + } + + @Override + public MenuItem setChecked(boolean checked) { + mMenuItem.setChecked(checked); + return this; + } + + @Override + public MenuItem setEnabled(boolean enabled) { + mMenuItem.setEnabled(enabled); + return this; + } + + @Override + public MenuItem setIcon(Drawable icon) { + mMenuItem.setIcon(icon); + return this; + } + + @Override + public MenuItem setIcon(int iconRes) { + mMenuItem.setIcon(iconRes); + return this; + } + + @Override + public MenuItem setIntent(Intent intent) { + mMenuItem.setIntent(intent); + return this; + } + + @Override + public MenuItem setNumericShortcut(char numericChar) { + mMenuItem.setNumericShortcut(numericChar); + return this; + } + + @Override + public MenuItem setOnMenuItemClickListener(android.view.MenuItem.OnMenuItemClickListener menuItemClickListener) { + mMenuItem.setOnMenuItemClickListener(menuItemClickListener); + return this; + } + + /** + * Set a custom listener for invocation of this menu item. + * + * @param menuItemClickListener The object to receive invokations. + * @return This Item so additional setters can be called. + */ + public MenuItem setOnMenuItemClickListener(OnMenuItemClickListener menuItemClickListener) { + mMenuItem.setOnMenuItemClickListener(menuItemClickListener); + return this; + } + + @Override + public MenuItem setShortcut(char numericChar, char alphaChar) { + mMenuItem.setShortcut(numericChar, alphaChar); + return this; + } + + @Override + public MenuItem setTitle(CharSequence title) { + mMenuItem.setTitle(title); + return this; + } + + @Override + public MenuItem setTitle(int title) { + mMenuItem.setTitle(title); + return this; + } + + @Override + public MenuItem setTitleCondensed(CharSequence title) { + mMenuItem.setTitleCondensed(title); + return this; + } + + @Override + public MenuItem setVisible(boolean visible) { + mMenuItem.setVisible(visible); + return this; + } +} diff --git a/actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/MenuView.java b/actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/MenuView.java new file mode 100644 index 000000000..daae3fe8c --- /dev/null +++ b/actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/MenuView.java @@ -0,0 +1,143 @@ +/* + * Copyright (C) 2006 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.actionbarsherlock.internal.view.menu; + +import android.graphics.drawable.Drawable; +import android.view.View; + +/** + * Minimal interface for a menu view. {@link #initialize(MenuBuilder, int)} must be called for the + * menu to be functional. + * + * @hide + */ +public interface MenuView { + /** + * Initializes the menu to the given menu. This should be called after the + * view is inflated. + * + * @param menu The menu that this MenuView should display. + * @param menuType The type of this menu, one of + * {@link MenuBuilder#TYPE_ICON}, {@link MenuBuilder#TYPE_EXPANDED}, + * {@link MenuBuilder#TYPE_DIALOG}). + */ + public void initialize(MenuBuilder menu, int menuType); + + /** + * Forces the menu view to update its view to reflect the new state of the menu. + * + * @param cleared Whether the menu was cleared or just modified. + */ + public void updateChildren(boolean cleared); + + /** + * Returns the default animations to be used for this menu when entering/exiting. + * @return A resource ID for the default animations to be used for this menu. + */ + public int getWindowAnimations(); + + /** + * Minimal interface for a menu item view. {@link #initialize(MenuItemImpl, int)} must be called + * for the item to be functional. + */ + public interface ItemView { + /** + * Initializes with the provided MenuItemData. This should be called after the view is + * inflated. + * @param itemData The item that this ItemView should display. + * @param menuType The type of this menu, one of + * {@link MenuBuilder#TYPE_ICON}, {@link MenuBuilder#TYPE_EXPANDED}, + * {@link MenuBuilder#TYPE_DIALOG}). + */ + public void initialize(MenuItemImpl itemData, int menuType); + + /** + * Gets the item data that this view is displaying. + * @return the item data, or null if there is not one + */ + public MenuItemImpl getItemData(); + + /** + * Sets the title of the item view. + * @param title The title to set. + */ + public void setTitle(CharSequence title); + + /** + * Sets the enabled state of the item view. + * @param enabled Whether the item view should be enabled. + */ + public void setEnabled(boolean enabled); + + /** + * Displays the checkbox for the item view. This does not ensure the item view will be + * checked, for that use {@link #setChecked}. + * @param checkable Whether to display the checkbox or to hide it + */ + public void setCheckable(boolean checkable); + + /** + * Checks the checkbox for the item view. If the checkbox is hidden, it will NOT be + * made visible, call {@link #setCheckable(boolean)} for that. + * @param checked Whether the checkbox should be checked + */ + public void setChecked(boolean checked); + + /** + * Sets the visibility for the item view. + * @param visible Whether the item is visible + */ + public void setVisible(boolean visible); + + /** + * Sets the shortcut for the item. + * @param showShortcut Whether a shortcut should be shown(if false, the value of + * shortcutKey should be ignored). + * @param shortcutKey The shortcut key that should be shown on the ItemView. + */ + public void setShortcut(boolean showShortcut, char shortcutKey); + + /** + * Set the icon of this item view. + * @param icon The icon of this item. null to hide the icon. + */ + public void setIcon(Drawable icon); + + /** + * Set the action view of this item view. + * @param actionView Action view. + */ + public void setActionView(View actionView); + + /** + * Whether this item view prefers displaying the condensed title rather + * than the normal title. If a condensed title is not available, the + * normal title will be used. + * + * @return Whether this item view prefers displaying the condensed + * title. + */ + public boolean prefersCondensedTitle(); + + /** + * Whether this item view shows an icon. + * + * @return Whether this item view shows an icon. + */ + public boolean showsIcon(); + } +} \ No newline at end of file diff --git a/actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/MenuWrapper.java b/actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/MenuWrapper.java new file mode 100644 index 000000000..4e499930d --- /dev/null +++ b/actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/MenuWrapper.java @@ -0,0 +1,156 @@ +package com.actionbarsherlock.internal.view.menu; + +import android.content.ComponentName; +import android.content.Intent; +import android.support.v4.view.Menu; +import android.support.v4.view.MenuItem; +import android.support.v4.view.SubMenu; +import android.view.KeyEvent; + +/** + * Wrapper around a native Menu instance which implements our version of the + * Menu interface. + */ +public class MenuWrapper implements Menu { + /** Native menu. */ + private final android.view.Menu mMenu; + + /** + * Create a new wrapped instance. + * + * @param menu Native menu. + */ + public MenuWrapper(android.view.Menu menu) { + this.mMenu = menu; + } + + /** + * Get the native menu instance we are wrapping. + * + * @return Native menu. + */ + android.view.Menu unwrap() { + return mMenu; + } + + @Override + public MenuItem add(CharSequence title) { + return new MenuItemWrapper(mMenu.add(title)); + } + + @Override + public MenuItem add(int groupId, int itemId, int order, int titleRes) { + return new MenuItemWrapper(mMenu.add(groupId, itemId, order, titleRes)); + } + + @Override + public MenuItem add(int titleRes) { + return new MenuItemWrapper(mMenu.add(titleRes)); + } + + @Override + public MenuItem add(int groupId, int itemId, int order, CharSequence title) { + return new MenuItemWrapper(mMenu.add(groupId, itemId, order, title)); + } + + @Override + public int addIntentOptions(int groupId, int itemId, int order, ComponentName caller, Intent[] specifics, Intent intent, int flags, android.view.MenuItem[] outSpecificItems) { + return mMenu.addIntentOptions(groupId, itemId, order, caller, specifics, intent, flags, outSpecificItems); + } + + @Override + public SubMenu addSubMenu(CharSequence title) { + return new SubMenuWrapper(mMenu.addSubMenu(title)); + } + + @Override + public SubMenu addSubMenu(int titleRes) { + return new SubMenuWrapper(mMenu.addSubMenu(titleRes)); + } + + @Override + public SubMenu addSubMenu(int groupId, int itemId, int order, CharSequence title) { + return new SubMenuWrapper(mMenu.addSubMenu(groupId, itemId, order, title)); + } + + @Override + public SubMenu addSubMenu(int groupId, int itemId, int order, int titleRes) { + return new SubMenuWrapper(mMenu.addSubMenu(groupId, itemId, order, titleRes)); + } + + @Override + public void clear() { + mMenu.clear(); + } + + @Override + public void close() { + mMenu.close(); + } + + @Override + public MenuItem findItem(int id) { + android.view.MenuItem item = mMenu.findItem(id); + return (item != null) ? new MenuItemWrapper(item) : null; + } + + @Override + public MenuItem getItem(int index) { + return new MenuItemWrapper(mMenu.getItem(index)); + } + + @Override + public boolean hasVisibleItems() { + return mMenu.hasVisibleItems(); + } + + @Override + public boolean isShortcutKey(int keyCode, KeyEvent event) { + return mMenu.isShortcutKey(keyCode, event); + } + + @Override + public boolean performIdentifierAction(int id, int flags) { + return mMenu.performIdentifierAction(id, flags); + } + + @Override + public boolean performShortcut(int keyCode, KeyEvent event, int flags) { + return mMenu.performShortcut(keyCode, event, flags); + } + + @Override + public void removeGroup(int groupId) { + mMenu.removeGroup(groupId); + } + + @Override + public void removeItem(int id) { + mMenu.removeItem(id); + } + + @Override + public void setGroupCheckable(int group, boolean checkable, boolean exclusive) { + mMenu.setGroupCheckable(group, checkable, exclusive); + } + + @Override + public void setGroupEnabled(int group, boolean enabled) { + mMenu.setGroupEnabled(group, enabled); + } + + @Override + public void setGroupVisible(int group, boolean visible) { + mMenu.setGroupVisible(group, visible); + } + + @Override + public void setQwertyMode(boolean isQwerty) { + mMenu.setQwertyMode(isQwerty); + } + + @Override + public int size() { + return mMenu.size(); + } +} diff --git a/actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/SubMenuBuilder.java b/actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/SubMenuBuilder.java new file mode 100644 index 000000000..bf73ed757 --- /dev/null +++ b/actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/SubMenuBuilder.java @@ -0,0 +1,119 @@ +/* + * Copyright (C) 2006 The Android Open Source Project + * Copyright (C) 2011 Jake Wharton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.actionbarsherlock.internal.view.menu; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.support.v4.view.SubMenu; +import android.view.View; + +/** + * The model for a sub menu, which is an extension of the menu. Most methods + * are proxied to the parent menu. + */ +public final class SubMenuBuilder extends MenuBuilder implements SubMenu { + private MenuBuilder mParentMenu; + private MenuItemImpl mItem; + + public SubMenuBuilder(Context context, MenuBuilder parentMenu, MenuItemImpl item) { + super(context); + + mParentMenu = parentMenu; + mItem = item; + } + + @Override + public void setQwertyMode(boolean isQwerty) { + mParentMenu.setQwertyMode(isQwerty); + } + + //@Override + //public boolean isQwertyMode() { + // return mParentMenu.isQwertyMode(); + //} + + //@Override + //public void setShortcutsVisible(boolean shortcutsVisible) { + // mParentMenu.setShortcutsVisible(shortcutsVisible); + //} + + //@Override + //public boolean isShortcutsVisible() { + // return mParentMenu.isShortcutsVisible(); + //} + + MenuBuilder getParentMenu() { + return mParentMenu; + } + + @Override + public MenuItemImpl getItem() { + return mItem; + } + + //@Override + //public Callback getCallback() { + // return mParentMenu.getCallback(); + //} + + //@Override + //public void setCallback(Callback callback) { + // mParentMenu.setCallback(callback); + //} + + @Override + public MenuBuilder getRootMenu() { + return mParentMenu; + } + + public SubMenuBuilder setIcon(Drawable icon) { + mItem.setIcon(icon); + return this; + } + + public SubMenuBuilder setIcon(int iconRes) { + mItem.setIcon(iconRes); + return this; + } + + public SubMenuBuilder setHeaderIcon(Drawable icon) { + throw new RuntimeException("Method not supported."); + } + + public SubMenuBuilder setHeaderIcon(int iconRes) { + throw new RuntimeException("Method not supported."); + } + + public SubMenuBuilder setHeaderTitle(CharSequence title) { + throw new RuntimeException("Method not supported."); + } + + public SubMenuBuilder setHeaderTitle(int titleRes) { + throw new RuntimeException("Method not supported."); + } + + @Override + public SubMenuBuilder setHeaderView(View view) { + throw new RuntimeException("Method not supported."); + } + + @Override + public void clearHeader() { + throw new RuntimeException("Method not supported."); + } +} \ No newline at end of file diff --git a/actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/SubMenuWrapper.java b/actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/SubMenuWrapper.java new file mode 100644 index 000000000..ca978e13a --- /dev/null +++ b/actionbarsherlock/library/src/com/actionbarsherlock/internal/view/menu/SubMenuWrapper.java @@ -0,0 +1,82 @@ +package com.actionbarsherlock.internal.view.menu; + +import android.graphics.drawable.Drawable; +import android.support.v4.view.MenuItem; +import android.support.v4.view.SubMenu; +import android.view.View; + +public class SubMenuWrapper extends MenuWrapper implements SubMenu { + /** Native sub-menu. */ + private final android.view.SubMenu mSubMenu; + + /** + * Create a new wrapped instance. + * + * @param subMenu Native sub-menu. + */ + public SubMenuWrapper(android.view.SubMenu subMenu) { + super(subMenu); + mSubMenu = subMenu; + } + + /** + * Get the native sub-menu instance we are wrapping. + * + * @return Native sub-menu. + */ + android.view.SubMenu unwrap() { + return mSubMenu; + } + + @Override + public void clearHeader() { + mSubMenu.clearHeader(); + } + + @Override + public MenuItem getItem() { + return new MenuItemWrapper(mSubMenu.getItem()); + } + + @Override + public SubMenu setHeaderIcon(Drawable icon) { + mSubMenu.setHeaderIcon(icon); + return this; + } + + @Override + public SubMenu setHeaderIcon(int iconRes) { + mSubMenu.setHeaderIcon(iconRes); + return this; + } + + @Override + public SubMenu setHeaderTitle(CharSequence title) { + mSubMenu.setHeaderTitle(title); + return this; + } + + @Override + public SubMenu setHeaderTitle(int titleRes) { + mSubMenu.setHeaderTitle(titleRes); + return this; + } + + @Override + public SubMenu setHeaderView(View view) { + mSubMenu.setHeaderView(view); + return this; + } + + @Override + public SubMenu setIcon(Drawable icon) { + mSubMenu.setIcon(icon); + return this; + } + + @Override + public SubMenu setIcon(int iconRes) { + mSubMenu.setIcon(iconRes); + return this; + } +} diff --git a/actionbarsherlock/library/src/com/actionbarsherlock/internal/widget/ActionBarContainer.java b/actionbarsherlock/library/src/com/actionbarsherlock/internal/widget/ActionBarContainer.java new file mode 100644 index 000000000..6f5a59923 --- /dev/null +++ b/actionbarsherlock/library/src/com/actionbarsherlock/internal/widget/ActionBarContainer.java @@ -0,0 +1,35 @@ +package com.actionbarsherlock.internal.widget; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.ViewGroup; +import android.widget.FrameLayout; + +public class ActionBarContainer extends FrameLayout { + private boolean mIsTransitioning; + + public ActionBarContainer(Context context) { + this(context, null); + } + + public ActionBarContainer(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + return mIsTransitioning || super.onInterceptTouchEvent(ev); + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + super.onTouchEvent(event); + return true; + } + + public void setTransitioning(boolean transitioning) { + mIsTransitioning = transitioning; + setDescendantFocusability(transitioning ? ViewGroup.FOCUS_BLOCK_DESCENDANTS : ViewGroup.FOCUS_AFTER_DESCENDANTS); + } +} diff --git a/actionbarsherlock/library/src/com/actionbarsherlock/internal/widget/ActionBarView.java b/actionbarsherlock/library/src/com/actionbarsherlock/internal/widget/ActionBarView.java new file mode 100644 index 000000000..2eb932ebe --- /dev/null +++ b/actionbarsherlock/library/src/com/actionbarsherlock/internal/widget/ActionBarView.java @@ -0,0 +1,696 @@ +package com.actionbarsherlock.internal.widget; + +import android.app.Activity; +import android.content.Context; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.content.res.TypedArray; +import android.graphics.drawable.Drawable; +import android.support.v4.app.ActionBar; +import android.support.v4.view.Window; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ProgressBar; +import android.widget.RelativeLayout; +import android.widget.Spinner; +import android.widget.SpinnerAdapter; +import android.widget.TextView; +import com.actionbarsherlock.R; +import com.actionbarsherlock.internal.view.menu.ActionMenuItem; +import com.actionbarsherlock.internal.view.menu.ActionMenuItemView; + +public final class ActionBarView extends RelativeLayout { + /** Default display options if none are defined in the theme. */ + private static final int DEFAULT_DISPLAY_OPTIONS = ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_SHOW_HOME; + + /** Default navigation mode if one is not defined in the theme. */ + private static final int DEFAULT_NAVIGATION_MODE = ActionBar.NAVIGATION_MODE_STANDARD; + + + + private final View mHomeAsUpView; + private final ViewGroup mHomeLayout; + private final ActionMenuItem mLogoNavItem; + + private final CharSequence mTitle; + private final TextView mTitleLayout; + + private final CharSequence mSubtitle; + private final TextView mSubtitleLayout; + + /** Indeterminate progress bar. */ + private final ProgressBar mIndeterminateProgress; + + /** List view. */ + private final Spinner mSpinner; + private SpinnerAdapter mSpinnerAdapter; + private final AdapterView.OnItemSelectedListener mNavItemSelectedListener; + private ActionBar.OnNavigationListener mCallback; + + /** Custom view parent. */ + private final FrameLayout mCustomView; + private View mCustomNavView; + + private ImageView mIconView; + private Drawable mLogo; + private Drawable mIcon; + private final Drawable mDivider; + + /** Container for all action items. */ + private final LinearLayout mActionsView; + + /** Container for all tab items. */ + private final LinearLayout mTabsView; + + /** + * Display state flags. + * + * @see #getDisplayOptions() + * @see #getDisplayOptionValue(int) + * @see #setDisplayOptions(int) + * @see #setDisplayOptions(int, int) + * @see #setDisplayOption(int, boolean) + * @see #reloadDisplay() + */ + private int mDisplayOptions; + + /** + * Current navigation mode + * + * @see #getNavigationMode() + * @see #setNavigationMode(int) + */ + private int mNavigationMode = -1; + + private boolean mIsConstructing; + + + + public ActionBarView(Context context) { + this(context, null); + } + + public ActionBarView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public ActionBarView(final Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + mIsConstructing = true; + LayoutInflater.from(context).inflate(R.layout.abs__action_bar, this, true); + + mNavItemSelectedListener = new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView arg0, View arg1, int arg2, long arg3) { + if (mCallback != null) { + mCallback.onNavigationItemSelected(arg2, arg3); + } + } + + @Override + public void onNothingSelected(AdapterView arg0) { + //No op + } + }; + + setBackgroundResource(0); + + final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SherlockTheme, defStyle, 0); + final ApplicationInfo appInfo = context.getApplicationInfo(); + final PackageManager pm = context.getPackageManager(); + + + //// TITLE //// + + mTitleLayout = (TextView)findViewById(R.id.abs__action_bar_title); + + //Try to load title style from the theme + final int titleTextStyle = a.getResourceId(R.styleable.SherlockTheme_abTitleTextStyle, 0); + if (titleTextStyle != 0) { + mTitleLayout.setTextAppearance(context, titleTextStyle); + } + + //Try to load title from the theme + mTitle = a.getString(R.styleable.SherlockTheme_abTitle); + if (mTitle != null) { + setTitle(mTitle); + } + + + //// SUBTITLE //// + + mSubtitleLayout = (TextView)findViewById(R.id.abs__action_bar_subtitle); + + //Try to load subtitle style from the theme + final int subtitleTextStyle = a.getResourceId(R.styleable.SherlockTheme_abSubtitleTextStyle, 0); + if (subtitleTextStyle != 0) { + mSubtitleLayout.setTextAppearance(context, subtitleTextStyle); + } + + //Try to load subtitle from theme + mSubtitle = a.getString(R.styleable.SherlockTheme_abSubtitle); + if (mSubtitle != null) { + setSubtitle(mSubtitle); + } + + + /// HOME //// + + mHomeLayout = (ViewGroup)findViewById(R.id.abs__home_wrapper); + final int homeLayoutResource = a.getResourceId(R.styleable.SherlockTheme_abHomeLayout, R.layout.abs__action_bar_home); + LayoutInflater.from(context).inflate(homeLayoutResource, mHomeLayout, true); + + //Try to load the logo from the theme + mLogo = a.getDrawable(R.styleable.SherlockTheme_abLogo); + /* + if ((mLogo == null) && (context instanceof Activity)) { + //LOGO LOADING DOES NOT WORK + //SEE: http://stackoverflow.com/questions/6105504/load-activity-and-or-application-logo-programmatically-from-manifest + //SEE: https://groups.google.com/forum/#!topic/android-developers/UFR4l0ZwJWc + } + */ + + //Try to load the icon from the theme + mIcon = a.getDrawable(R.styleable.SherlockTheme_abIcon); + if ((mIcon == null) && (context instanceof Activity)) { + mIcon = appInfo.loadIcon(pm); + } + + mHomeAsUpView = findViewById(R.id.abs__up); + mIconView = (ImageView)findViewById(R.id.abs__home); + + + //// NAVIGATION //// + + mSpinner = (Spinner)findViewById(R.id.abs__nav_list); + mSpinner.setOnItemSelectedListener(mNavItemSelectedListener); + + mTabsView = (LinearLayout)findViewById(R.id.abs__nav_tabs); + + + //// CUSTOM VIEW //// + + mCustomView = (FrameLayout)findViewById(R.id.abs__custom); + + //Try to load a custom view from the theme. This will NOT automatically + //trigger the visibility of the custom layout, however. + final int customViewResourceId = a.getResourceId(R.styleable.SherlockTheme_abCustomNavigationLayout, 0); + if (customViewResourceId != 0) { + mCustomNavView = LayoutInflater.from(context).inflate(customViewResourceId, mCustomView, true); + mNavigationMode = ActionBar.NAVIGATION_MODE_STANDARD; + setDisplayOptions(mDisplayOptions | ActionBar.DISPLAY_SHOW_CUSTOM); + } + + + + + mActionsView = (LinearLayout)findViewById(R.id.abs__actions); + mDivider = a.getDrawable(R.styleable.SherlockTheme_abDivider); + + mIndeterminateProgress = (ProgressBar)findViewById(R.id.abs__iprogress); + + //Try to get the display options defined in the theme, or fall back to + //displaying the title and home icon + setDisplayOptions(a.getInteger(R.styleable.SherlockTheme_abDisplayOptions, DEFAULT_DISPLAY_OPTIONS)); + + //Try to get the navigation defined in the theme, or, fall back to + //use standard navigation by default + setNavigationMode(a.getInteger(R.styleable.SherlockTheme_abNavigationMode, DEFAULT_NAVIGATION_MODE)); + + + //Reduce, Reuse, Recycle! + a.recycle(); + mIsConstructing = false; + + mLogoNavItem = new ActionMenuItem(context, 0, android.R.id.home, 0, 0, mTitle); + mHomeLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (context instanceof Activity) { + ((Activity)context).onMenuItemSelected(Window.FEATURE_OPTIONS_PANEL, mLogoNavItem); + } + } + }); + mHomeLayout.setClickable(true); + mHomeLayout.setFocusable(true); + + reloadDisplay(); + } + + + + // ------------------------------------------------------------------------ + // HELPER METHODS + // ------------------------------------------------------------------------ + + /** + * Helper to get a boolean value for a specific flag. + * + * @param flag Target flag. + * @return Value. + */ + private boolean getDisplayOptionValue(int flag) { + return (mDisplayOptions & flag) == flag; + } + + /** + * Reload the current action bar display state. + */ + private void reloadDisplay() { + if (mIsConstructing) { + return; //Do not run if we are in the constructor + } + + final boolean isStandard = mNavigationMode == ActionBar.NAVIGATION_MODE_STANDARD; + final boolean isList = mNavigationMode == ActionBar.NAVIGATION_MODE_LIST; + final boolean isTab = mNavigationMode == ActionBar.NAVIGATION_MODE_TABS; + final boolean isTabUnderAb = isTab && getContext().getString(R.string.abs__tab_under_ab_tag).equals(mTabsView.getTag()); + final boolean hasSubtitle = (mSubtitleLayout.getText() != null) && !mSubtitleLayout.getText().equals(""); + final boolean displayHome = getDisplayOptionValue(ActionBar.DISPLAY_SHOW_HOME); + final boolean displayHomeAsUp = getDisplayOptionValue(ActionBar.DISPLAY_HOME_AS_UP); + final boolean displayTitle = getDisplayOptionValue(ActionBar.DISPLAY_SHOW_TITLE); + final boolean displayCustom = getDisplayOptionValue(ActionBar.DISPLAY_SHOW_CUSTOM); + final boolean displayLogo = getDisplayOptionValue(ActionBar.DISPLAY_USE_LOGO) && (mLogo != null); + + mHomeLayout.setVisibility(displayHome ? View.VISIBLE : View.GONE); + if (displayHome) { + if (mHomeAsUpView != null) { + mHomeAsUpView.setVisibility(displayHomeAsUp ? View.VISIBLE : View.GONE); + } + if (mIconView != null) { + mIconView.setImageDrawable(displayLogo ? mLogo : mIcon); + } + } + + //Only show list if we are in list navigation and there are list items + mSpinner.setVisibility(isList ? View.VISIBLE : View.GONE); + + // Show tabs if in tabs navigation mode. + mTabsView.setVisibility(isTab ? View.VISIBLE : View.GONE); + + //Show title view if we are not in list navigation, not showing custom + //view, and the show title flag is true + mTitleLayout.setVisibility((isStandard || isTabUnderAb) && !displayCustom && displayTitle ? View.VISIBLE : View.GONE); + //Show subtitle view if we are not in list navigation, not showing + //custom view, show title flag is true, and a subtitle is set + mSubtitleLayout.setVisibility((isStandard || isTabUnderAb) && !displayCustom && displayTitle && hasSubtitle ? View.VISIBLE : View.GONE); + //Show custom view if we are not in list navigation and showing custom + //flag is set + mCustomView.setVisibility(isStandard && displayCustom ? View.VISIBLE : View.GONE); + } + + // ------------------------------------------------------------------------ + // ACTION BAR API + // ------------------------------------------------------------------------ + + public void addTab(ActionBar.Tab tab) { + final int tabCount = getTabCount(); + addTab(tab, tabCount, tabCount == 0); + } + + public void addTab(ActionBar.Tab tab, boolean setSelected) { + addTab(tab, getTabCount(), setSelected); + } + + public void addTab(ActionBar.Tab tab, int position) { + addTab(tab, position, getTabCount() == 0); + } + + public void addTab(ActionBar.Tab tab, int position, boolean setSelected) { + mTabsView.addView(((TabImpl)tab).mView, position); + if (setSelected) { + tab.select(); + } + } + + public View getCustomView() { + return mCustomNavView; + } + + public int getDisplayOptions() { + return mDisplayOptions; + } + + public SpinnerAdapter getDropdownAdapter() { + return this.mSpinnerAdapter; + } + + public int getDropdownSelectedPosition() { + return this.mSpinner.getSelectedItemPosition(); + } + + public int getNavigationMode() { + return mNavigationMode; + } + + public ActionBar.Tab getSelectedTab() { + final int count = mTabsView.getChildCount(); + for (int i = 0; i < count; i++) { + TabImpl tab = (TabImpl)mTabsView.getChildAt(i).getTag(); + if (tab.mView.isSelected()) { + return tab; + } + } + return null; + } + + public CharSequence getSubtitle() { + if ((mNavigationMode == ActionBar.NAVIGATION_MODE_STANDARD) && !mSubtitleLayout.getText().equals("")) { + return mSubtitleLayout.getText(); + } else { + return null; + } + } + + public ActionBar.Tab getTabAt(int index) { + View view = mTabsView.getChildAt(index); + return (view != null) ? (TabImpl)view.getTag() : null; + } + + public int getTabCount() { + return mTabsView.getChildCount(); + } + + public CharSequence getTitle() { + if ((mNavigationMode == ActionBar.NAVIGATION_MODE_STANDARD) && !mTitleLayout.getText().equals("")) { + return mTitleLayout.getText(); + } else { + return null; + } + } + + public TabImpl newTab() { + return new TabImpl(this); + } + + public void removeAllTabs() { + TabImpl selected = (TabImpl)getSelectedTab(); + if (selected != null) { + selected.unselect(); + } + mTabsView.removeAllViews(); + } + + public void removeTab(ActionBar.Tab tab) { + final int count = mTabsView.getChildCount(); + for (int i = 0; i < count; i++) { + TabImpl existingTab = (TabImpl)mTabsView.getChildAt(i).getTag(); + if (existingTab.equals(tab)) { + removeTabAt(i); + break; + } + } + } + + public void removeTabAt(int position) { + TabImpl tab = (TabImpl)getTabAt(position); + if (tab != null) { + tab.unselect(); + mTabsView.removeViewAt(position); + + if (position > 0) { + //Select previous tab + ((TabImpl)mTabsView.getChildAt(position - 1).getTag()).select(); + } else if (mTabsView.getChildCount() > 0) { + //Select first tab + ((TabImpl)mTabsView.getChildAt(0).getTag()).select(); + } + } + } + + public void setCallback(ActionBar.OnNavigationListener callback) { + mCallback = callback; + } + + public void setCustomNavigationView(View view) { + mCustomNavView = view; + mCustomView.removeAllViews(); + mCustomView.addView(view); + } + + public void setDisplayOptions(int options) { + mDisplayOptions = options; + reloadDisplay(); + } + + public void setDropdownAdapter(SpinnerAdapter spinnerAdapter) { + mSpinnerAdapter = spinnerAdapter; + if (mSpinner != null) { + mSpinner.setAdapter(mSpinnerAdapter); + } + } + + public void setDropdownSelectedPosition(int position) { + mSpinner.setSelection(position); + } + + public void setProgressBarIndeterminateVisibility(boolean visible) { + mIndeterminateProgress.setVisibility(visible ? View.VISIBLE : View.GONE); + } + + public void setNavigationMode(int mode) { + if ((mode != ActionBar.NAVIGATION_MODE_STANDARD) && (mode != ActionBar.NAVIGATION_MODE_LIST) + && (mode != ActionBar.NAVIGATION_MODE_TABS)) { + throw new IllegalArgumentException("Unknown navigation mode value " + Integer.toString(mode)); + } + + if (mode != mNavigationMode) { + mNavigationMode = mode; + reloadDisplay(); + } + } + + public void selectTab(ActionBar.Tab tab) { + final int count = mTabsView.getChildCount(); + for (int i = 0; i < count; i++) { + TabImpl existingTab = (TabImpl)mTabsView.getChildAt(i).getTag(); + if (existingTab.equals(tab)) { + existingTab.select(); + break; + } + } + } + + public void setSubtitle(CharSequence subtitle) { + mSubtitleLayout.setText((subtitle == null) ? "" : subtitle); + reloadDisplay(); + } + + public void setSubtitle(int resId) { + mSubtitleLayout.setText(resId); + reloadDisplay(); + } + + public void setTitle(CharSequence title) { + mTitleLayout.setText((title == null) ? "" : title); + } + + public void setTitle(int resId) { + mTitleLayout.setText(resId); + } + + // ------------------------------------------------------------------------ + // ACTION ITEMS SUPPORT + // ------------------------------------------------------------------------ + + public ActionMenuItemView newItem() { + ActionMenuItemView item = (ActionMenuItemView)LayoutInflater.from(getContext()).inflate(R.layout.abs__action_bar_item_layout, mActionsView, false); + return item; + } + + public void addItem(ActionMenuItemView item) { + if (mDivider != null) { + ImageView divider = new ImageView(getContext()); + divider.setImageDrawable(mDivider); + divider.setScaleType(ImageView.ScaleType.FIT_XY); + + LinearLayout.LayoutParams dividerParams = new LinearLayout.LayoutParams( + LinearLayout.LayoutParams.WRAP_CONTENT, + LinearLayout.LayoutParams.FILL_PARENT + ); + + mActionsView.addView(divider, dividerParams); + item.setDivider(divider); + } + + mActionsView.addView(item); + } + + public void removeAllItems() { + mActionsView.removeAllViews(); + } + + // ------------------------------------------------------------------------ + // HELPER INTERFACES AND HELPER CLASSES + // ------------------------------------------------------------------------ + + private static class TabImpl extends ActionBar.Tab { + private static final View.OnClickListener clickListener = new View.OnClickListener() { + @Override + public void onClick(View v) { + ((TabImpl)v.getTag()).select(); + } + }; + + final ActionBarView mActionBar; + final View mView; + final ImageView mIconView; + final TextView mTextView; + final FrameLayout mCustomView; + + ActionBar.TabListener mListener; + Object mTag; + + + TabImpl(ActionBarView actionBar) { + mActionBar = actionBar; + mView = LayoutInflater.from(mActionBar.getContext()).inflate(R.layout.abs__action_bar_tab_layout, actionBar.mTabsView, false); + mView.setTag(this); + mView.setOnClickListener(clickListener); + + mIconView = (ImageView)mView.findViewById(R.id.abs__tab_icon); + mTextView = (TextView)mView.findViewById(R.id.abs__tab); + mCustomView = (FrameLayout)mView.findViewById(R.id.abs__tab_custom); + } + + /** + * Update display to reflect current property state. + */ + void reloadDisplay() { + boolean hasCustom = mCustomView.getChildCount() > 0; + mIconView.setVisibility(hasCustom ? View.GONE : View.VISIBLE); + mTextView.setVisibility(hasCustom ? View.GONE : View.VISIBLE); + mCustomView.setVisibility(hasCustom ? View.VISIBLE : View.GONE); + } + + @Override + public View getCustomView() { + return mCustomView.getChildAt(0); + } + + @Override + public Drawable getIcon() { + return mIconView.getDrawable(); + } + + @Override + public int getPosition() { + final int count = mActionBar.mTabsView.getChildCount(); + for (int i = 0; i < count; i++) { + if (mActionBar.mTabsView.getChildAt(i).getTag().equals(this)) { + return i; + } + } + return -1; + } + + @Override + public ActionBar.TabListener getTabListener() { + return mListener; + } + + @Override + public Object getTag() { + return mTag; + } + + @Override + public CharSequence getText() { + return mTextView.getText(); + } + + @Override + public TabImpl setCustomView(int layoutResId) { + mCustomView.removeAllViews(); + LayoutInflater.from(mActionBar.getContext()).inflate(layoutResId, mCustomView, true); + reloadDisplay(); + return this; + } + + @Override + public TabImpl setCustomView(View view) { + mCustomView.removeAllViews(); + if (view != null) { + mCustomView.addView(view); + } + reloadDisplay(); + return this; + } + + @Override + public TabImpl setIcon(Drawable icon) { + mIconView.setImageDrawable(icon); + return this; + } + + @Override + public TabImpl setIcon(int resId) { + mIconView.setImageResource(resId); + return this; + } + + @Override + public TabImpl setTabListener(ActionBar.TabListener listener) { + mListener = listener; + return this; + } + + @Override + public TabImpl setTag(Object obj) { + mTag = obj; + return this; + } + + @Override + public TabImpl setText(int resId) { + mTextView.setText(resId); + return this; + } + + @Override + public TabImpl setText(CharSequence text) { + mTextView.setText(text); + return this; + } + + @Override + public void select() { + if (mView.isSelected()) { + if (mListener != null) { + mListener.onTabReselected(this, null); + } + return; + } + + TabImpl current = (TabImpl)mActionBar.getSelectedTab(); + if (current != null) { + current.unselect(); + } + + mView.setSelected(true); + if (mListener != null) { + mListener.onTabSelected(this, null); + } + } + + /** + * Unselect this tab. Only valid if the tab has been added to the + * action bar and was previously selected. + */ + void unselect() { + if (mView.isSelected()) { + mView.setSelected(false); + + if (mListener != null) { + mListener.onTabUnselected(this, null); + } + } + } + } +} diff --git a/actionbarsherlock/library/src/com/actionbarsherlock/internal/widget/ScrollingTextView.java b/actionbarsherlock/library/src/com/actionbarsherlock/internal/widget/ScrollingTextView.java new file mode 100644 index 000000000..edd5ec0a4 --- /dev/null +++ b/actionbarsherlock/library/src/com/actionbarsherlock/internal/widget/ScrollingTextView.java @@ -0,0 +1,51 @@ +package com.actionbarsherlock.internal.widget; + +import android.content.Context; +import android.graphics.Rect; +import android.util.AttributeSet; +import android.widget.TextView; + +/** + * @author marco + * Workaround to be able to scroll text inside a TextView without it required + * to be focused. For some strange reason there isn't an easy way to do this + * natively. + * + * Original code written by Evan Cummings: + * http://androidbears.stellarpc.net/?p=185 + */ +public final class ScrollingTextView extends TextView { + + public ScrollingTextView(Context context, AttributeSet attrs, + int defStyle) { + super(context, attrs, defStyle); + } + + public ScrollingTextView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public ScrollingTextView(Context context) { + super(context); + } + + @Override + protected void onFocusChanged(boolean focused, int direction, + Rect previouslyFocusedRect) { + if (focused) { + super.onFocusChanged(focused, direction, previouslyFocusedRect); + } + } + + @Override + public void onWindowFocusChanged(boolean focused) { + if (focused) { + super.onWindowFocusChanged(focused); + } + } + + @Override + public boolean isFocused() { + return true; + } +} diff --git a/actionbarsherlock/plugins/README.md b/actionbarsherlock/plugins/README.md new file mode 100644 index 000000000..6c241e520 --- /dev/null +++ b/actionbarsherlock/plugins/README.md @@ -0,0 +1,8 @@ +ActionBarSherlock Plugins +========================= + +Modules provided in this folder are plugins which add functionality to the +ActionBarSherlock library. + +The requirements for implementing each pluging are detailed in the `README.md` +file in each plugin folder. diff --git a/actionbarsherlock/plugins/maps/AndroidManifest.xml b/actionbarsherlock/plugins/maps/AndroidManifest.xml new file mode 100644 index 000000000..8615e26fa --- /dev/null +++ b/actionbarsherlock/plugins/maps/AndroidManifest.xml @@ -0,0 +1,13 @@ + + + + + + + diff --git a/actionbarsherlock/plugins/maps/README.md b/actionbarsherlock/plugins/maps/README.md new file mode 100644 index 000000000..a45dd1ffb --- /dev/null +++ b/actionbarsherlock/plugins/maps/README.md @@ -0,0 +1,18 @@ +ActionBarSherlock Plugin: Maps +============================== + +This plugin provides support for the Google API `MapView` widget through an +additional base activity, `FragmentMapActivity`. Your application must adhere +to all of the regular requirements of implementing the [Google Map View][1]. + +By using `FragmentMapActivity` you are afforded the use of fragments, loaders, +and the action bar--including support for using a `MapView` within a fragment. +You can find examples of these implementations in the 'demos' sample. + + + + + + + + [1]: http://developer.android.com/resources/tutorials/views/hello-mapview.html diff --git a/actionbarsherlock/plugins/maps/checkstyle.xml b/actionbarsherlock/plugins/maps/checkstyle.xml new file mode 100644 index 000000000..91bcb9a52 --- /dev/null +++ b/actionbarsherlock/plugins/maps/checkstyle.xml @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/actionbarsherlock/plugins/maps/pom.xml b/actionbarsherlock/plugins/maps/pom.xml new file mode 100644 index 000000000..4699b215f --- /dev/null +++ b/actionbarsherlock/plugins/maps/pom.xml @@ -0,0 +1,75 @@ + + + + 4.0.0 + + com.actionbarsherlock + plugin-maps + Plugin: Maps + jar + + + com.actionbarsherlock + parent-plugins + 3.4.2 + ../pom.xml + + + + + android + android + provided + + + + com.google.android.maps + maps + provided + + + + com.actionbarsherlock + library + ${project.version} + provided + + + + + ${apk.prefix}-${project.artifactId}-${project.version} + src + + + + com.jayway.maven.plugins.android.generation2 + maven-android-plugin + true + + + + org.apache.maven.plugins + maven-javadoc-plugin + + true + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + + ${project.basedir}/checkstyle.xml + + + + verify + + checkstyle + + + + + + + diff --git a/actionbarsherlock/plugins/maps/project.properties b/actionbarsherlock/plugins/maps/project.properties new file mode 100644 index 000000000..e5171db54 --- /dev/null +++ b/actionbarsherlock/plugins/maps/project.properties @@ -0,0 +1,13 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system use, +# "ant.properties", and override values to adapt the script to your +# project structure. + +android.library=true +# Project target. +target=Google Inc.:Google APIs:13 +android.library.reference.1=../../library diff --git a/actionbarsherlock/plugins/maps/src/android/support/v4/app/FragmentMapActivity.java b/actionbarsherlock/plugins/maps/src/android/support/v4/app/FragmentMapActivity.java new file mode 100644 index 000000000..44604ad1d --- /dev/null +++ b/actionbarsherlock/plugins/maps/src/android/support/v4/app/FragmentMapActivity.java @@ -0,0 +1,1240 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * Copyright (C) 2011 Jake Wharton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.app; + +import java.io.FileDescriptor; +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.HashMap; +import com.actionbarsherlock.R; +import com.actionbarsherlock.internal.app.ActionBarWrapper; +import com.actionbarsherlock.internal.app.ActionBarImpl; +import com.actionbarsherlock.internal.view.menu.MenuBuilder; +import com.actionbarsherlock.internal.view.menu.MenuInflaterWrapper; +import com.actionbarsherlock.internal.view.menu.MenuItemImpl; +import com.actionbarsherlock.internal.view.menu.MenuItemWrapper; +import com.actionbarsherlock.internal.view.menu.MenuWrapper; +import com.google.android.maps.MapActivity; +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.content.res.Configuration; +import android.content.res.TypedArray; +import android.content.res.Resources.Theme; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.os.Parcelable; +import android.support.v4.view.ActionMode; +import android.support.v4.view.Menu; +import android.support.v4.view.MenuInflater; +import android.support.v4.view.MenuItem; +import android.support.v4.view.Window; +import android.util.AttributeSet; +import android.util.Log; +import android.view.KeyEvent; +import android.view.View; +import android.view.ViewGroup.LayoutParams; +import android.widget.FrameLayout; + +/** + * Base class for activities that want to use the support-based ActionBar, + * Fragment, Loader, and Google Map APIs. + * + *

Known limitations:

+ *
    + *
  • When using the <fragment> tag, this implementation can not + * use the parent view's ID as the new fragment's ID. You must explicitly + * specify an ID (or tag) in the <fragment>.

    + *
  • Prior to Honeycomb (3.0), an activity's state was saved before pausing. + * Fragments are a significant amount of new state, and dynamic enough that one + * often wants them to change between pausing and stopping. These classes + * throw an exception if you try to change the fragment state after it has been + * saved, to avoid accidental loss of UI state. However this is too restrictive + * prior to Honeycomb, where the state is saved before pausing. To address this, + * when running on platforms prior to Honeycomb an exception will not be thrown + * if you change fragments between the state save and the activity being stopped. + * This means that is some cases if the activity is restored from its last saved + * state, this may be a snapshot slightly before what the user last saw.

    + *
+ */ +public abstract class FragmentMapActivity extends MapActivity implements SupportActivity { + private static final String TAG = "FragmentMapActivity"; + private static final boolean DEBUG = false; + + private static final String FRAGMENTS_TAG = "android:support:fragments"; + + static final boolean IS_HONEYCOMB = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB; + + static final int MSG_REALLY_STOPPED = 1; + static final int MSG_RESUME_PENDING = 2; + + private static final int WINDOW_FLAG_ACTION_BAR = 1 << Window.FEATURE_ACTION_BAR; + private static final int WINDOW_FLAG_ACTION_BAR_ITEM_TEXT = 1 << Window.FEATURE_ACTION_BAR_ITEM_TEXT; + private static final int WINDOW_FLAG_ACTION_BAR_OVERLAY = 1 << Window.FEATURE_ACTION_BAR_OVERLAY; + private static final int WINDOW_FLAG_ACTION_MODE_OVERLAY = 1 << Window.FEATURE_ACTION_MODE_OVERLAY; + private static final int WINDOW_FLAG_INDETERMINANTE_PROGRESS = 1 << Window.FEATURE_INDETERMINATE_PROGRESS; + + final SupportActivity.InternalCallbacks mInternalCallbacks = new SupportActivity.InternalCallbacks() { + @Override + void invalidateSupportFragmentIndex(int index) { + FragmentMapActivity.this.invalidateSupportFragmentIndex(index); + } + + @Override + LoaderManagerImpl getLoaderManager(int index, boolean started, boolean create) { + return FragmentMapActivity.this.getLoaderManager(index, started, create); + } + + @Override + Handler getHandler() { + return mHandler; + } + + @Override + FragmentManagerImpl getFragments() { + return mFragments; + } + + @Override + void ensureSupportActionBarAttached() { + FragmentMapActivity.this.ensureSupportActionBarAttached(); + } + + @Override + boolean getRetaining() { + return mRetaining; + } + }; + + final Handler mHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case MSG_REALLY_STOPPED: + if (mStopped) { + doReallyStop(false); + } + break; + case MSG_RESUME_PENDING: + mFragments.dispatchResume(); + mFragments.execPendingActions(); + break; + default: + super.handleMessage(msg); + } + } + }; + final FragmentManagerImpl mFragments = new FragmentManagerImpl(); + + ActionBar mActionBar; + boolean mIsActionBarImplAttached; + long mWindowFlags = 0; + + final MenuBuilder mSupportMenu; + final MenuBuilder.Callback mSupportMenuCallback = new MenuBuilder.Callback() { + @Override + public boolean onMenuItemSelected(MenuBuilder menu, MenuItem item) { + return FragmentMapActivity.this.onMenuItemSelected(Window.FEATURE_OPTIONS_PANEL, item); + } + }; + + boolean mCreated; + boolean mResumed; + boolean mStopped; + boolean mReallyStopped; + boolean mRetaining; + + boolean mOptionsMenuInvalidated; + boolean mOptionsMenuCreateResult; + + boolean mCheckedForLoaderManager; + boolean mLoadersStarted; + HCSparseArray mAllLoaderManagers; + LoaderManagerImpl mLoaderManager; + + static final class NonConfigurationInstances { + Object activity; + Object custom; + HashMap children; + ArrayList fragments; + HCSparseArray loaders; + } + + static class FragmentTag { + public static final int[] Fragment = { + 0x01010003, 0x010100d0, 0x010100d1 + }; + public static final int Fragment_id = 1; + public static final int Fragment_name = 0; + public static final int Fragment_tag = 2; + } + + + + public FragmentMapActivity() { + super(); + + if (IS_HONEYCOMB) { + mActionBar = ActionBarWrapper.createFor(this); + mSupportMenu = null; //Everything should be done natively + } else { + mSupportMenu = new MenuBuilder(this); + mSupportMenu.setCallback(mSupportMenuCallback); + } + } + + @Override + public SupportActivity.InternalCallbacks getInternalCallbacks() { + return mInternalCallbacks; + } + + @Override + public Activity asActivity() { + return this; + } + + protected void ensureSupportActionBarAttached() { + if (IS_HONEYCOMB || mIsActionBarImplAttached) { + return; + } + if (!isChild()) { + if ((mWindowFlags & WINDOW_FLAG_ACTION_BAR) == WINDOW_FLAG_ACTION_BAR) { + if ((mWindowFlags & WINDOW_FLAG_ACTION_BAR_OVERLAY) == WINDOW_FLAG_ACTION_BAR_OVERLAY) { + super.setContentView(R.layout.abs__screen_action_bar_overlay); + } else { + super.setContentView(R.layout.abs__screen_action_bar); + } + + mActionBar = new ActionBarImpl(this); + ((ActionBarImpl)mActionBar).init(); + + final boolean textEnabled = ((mWindowFlags & WINDOW_FLAG_ACTION_BAR_ITEM_TEXT) == WINDOW_FLAG_ACTION_BAR_ITEM_TEXT); + mSupportMenu.setShowsActionItemText(textEnabled); + + if ((mWindowFlags & WINDOW_FLAG_INDETERMINANTE_PROGRESS) == WINDOW_FLAG_INDETERMINANTE_PROGRESS) { + ((ActionBarImpl)mActionBar).setProgressBarIndeterminateVisibility(false); + } + + //TODO set other flags + } else { + if ((mWindowFlags & WINDOW_FLAG_INDETERMINANTE_PROGRESS) == WINDOW_FLAG_INDETERMINANTE_PROGRESS) { + super.requestWindowFeature((int)Window.FEATURE_INDETERMINATE_PROGRESS); + } + super.setContentView(R.layout.abs__screen_simple); + } + } + + invalidateOptionsMenu(); + mIsActionBarImplAttached = true; + } + + // ------------------------------------------------------------------------ + // HOOKS INTO ACTIVITY + // ------------------------------------------------------------------------ + + /** + * Enable extended window features. + * + * @param featureId The desired feature as defined in + * {@link android.support.v4.view.Window}. + * @return Returns {@code true} if the requested feature is supported and + * now enabled. + */ + @Override + public boolean requestWindowFeature(long featureId) { + if (!IS_HONEYCOMB) { + switch ((int)featureId) { + case (int)Window.FEATURE_ACTION_BAR: + case (int)Window.FEATURE_ACTION_BAR_ITEM_TEXT: + case (int)Window.FEATURE_ACTION_BAR_OVERLAY: + case (int)Window.FEATURE_ACTION_MODE_OVERLAY: + case (int)Window.FEATURE_INDETERMINATE_PROGRESS: + mWindowFlags |= (1 << featureId); + return true; + } + } + return super.requestWindowFeature((int)featureId); + } + + @Override + public android.view.MenuInflater getMenuInflater() { + if (IS_HONEYCOMB) { + if (DEBUG) Log.d(TAG, "getMenuInflater(): Wrapping native inflater."); + + //Wrap the native inflater so it can unwrap the native menu first + return new MenuInflaterWrapper(this, super.getMenuInflater()); + } + + if (DEBUG) Log.d(TAG, "getMenuInflater(): Returning support inflater."); + + //Use our custom menu inflater + return new MenuInflater(this, super.getMenuInflater()); + } + + @Override + public void setContentView(int layoutResId) { + ensureSupportActionBarAttached(); + if (IS_HONEYCOMB || isChild()) { + super.setContentView(layoutResId); + } else { + FrameLayout contentView = (FrameLayout)findViewById(R.id.abs__content); + contentView.removeAllViews(); + getLayoutInflater().inflate(layoutResId, contentView, true); + } + } + + @Override + public void setContentView(View view, LayoutParams params) { + ensureSupportActionBarAttached(); + if (IS_HONEYCOMB || isChild()) { + super.setContentView(view, params); + } else { + FrameLayout contentView = (FrameLayout)findViewById(R.id.abs__content); + contentView.removeAllViews(); + contentView.addView(view, params); + } + } + + @Override + public void setContentView(View view) { + ensureSupportActionBarAttached(); + if (IS_HONEYCOMB || isChild()) { + super.setContentView(view); + } else { + FrameLayout contentView = (FrameLayout)findViewById(R.id.abs__content); + contentView.removeAllViews(); + contentView.addView(view); + } + } + + @Override + public void setTitle(CharSequence title) { + if (IS_HONEYCOMB || (getSupportActionBar() == null)) { + super.setTitle(title); + } else { + getSupportActionBar().setTitle(title); + } + } + + @Override + public void setTitle(int titleId) { + if (IS_HONEYCOMB || (getSupportActionBar() == null)) { + super.setTitle(titleId); + } else { + getSupportActionBar().setTitle(titleId); + } + } + + /** + * Dispatch incoming result to the correct fragment. + */ + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + int index = requestCode>>16; + if (index != 0) { + index--; + if (mFragments.mActive == null || index < 0 || index >= mFragments.mActive.size()) { + Log.w(TAG, "Activity result fragment index out of range: 0x" + + Integer.toHexString(requestCode)); + return; + } + Fragment frag = mFragments.mActive.get(index); + if (frag == null) { + Log.w(TAG, "Activity result no fragment exists for index: 0x" + + Integer.toHexString(requestCode)); + } else { + frag.onActivityResult(requestCode&0xffff, resultCode, data); + } + return; + } + + super.onActivityResult(requestCode, resultCode, data); + } + + @Override + protected void onApplyThemeResource(Theme theme, int resid, boolean first) { + TypedArray attrs = theme.obtainStyledAttributes(resid, R.styleable.SherlockTheme); + + final boolean actionBar = attrs.getBoolean(R.styleable.SherlockTheme_windowActionBar, false); + mWindowFlags |= actionBar ? WINDOW_FLAG_ACTION_BAR : 0; + + final boolean actionModeOverlay = attrs.getBoolean(R.styleable.SherlockTheme_windowActionModeOverlay, false); + mWindowFlags |= actionModeOverlay ? WINDOW_FLAG_ACTION_MODE_OVERLAY : 0; + + attrs.recycle(); + super.onApplyThemeResource(theme, resid, first); + } + + /** + * Take care of popping the fragment back stack or finishing the activity + * as appropriate. + */ + @Override + public void onBackPressed() { + if (!mFragments.popBackStackImmediate()) { + finish(); + } + } + + /** + * Dispatch configuration change to all fragments. + */ + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + mFragments.dispatchConfigurationChanged(newConfig); + } + + /** + * Perform initialization of all fragments and loaders. + */ + @Override + protected void onCreate(Bundle savedInstanceState) { + mFragments.attachActivity(this); + // Old versions of the platform didn't do this! + if (getLayoutInflater().getFactory() == null) { + getLayoutInflater().setFactory(this); + } + + super.onCreate(savedInstanceState); + + NonConfigurationInstances nc = (NonConfigurationInstances) + getLastNonConfigurationInstance(); + if (nc != null) { + mAllLoaderManagers = nc.loaders; + } + if (savedInstanceState != null) { + Parcelable p = savedInstanceState.getParcelable(FRAGMENTS_TAG); + mFragments.restoreAllState(p, nc != null ? nc.fragments : null); + } + mFragments.dispatchCreate(); + } + + /** + *

Initialize the contents of the Activity's standard options menu. You + * should place your menu items in to menu.

+ * + *

The default implementation populates the menu with standard system + * menu items. These are placed in the {@link Menu.CATEGORY_SYSTEM} group + * so that they will be correctly ordered with application-defined menu + * items. Deriving classes should always call through to the base + * implementation.

+ * + *

You can safely hold on to menu (and any items created from it), + * making modifications to it as desired, until the next time + * {@code onCreateOptionsMenu()} is called.

+ * + *

When you add items to the menu, you can implement the Activity's + * {@link #onOptionsItemSelected(MenuItem)} method to handle them + * there.

+ * + * @param menu The options menu in which you place your items. + * @return You must return true for the menu to be displayed; if you return + * false it will not be shown. + */ + @Override + public boolean onCreateOptionsMenu(Menu menu) { + if (DEBUG) Log.d(TAG, "onCreateOptionsMenu(Menu): Returning " + menu.hasVisibleItems()); + return menu.hasVisibleItems(); + } + + @Override + public final boolean onCreateOptionsMenu(android.view.Menu menu) { + // Prior to Honeycomb, the framework can't invalidate the options + // menu, so we must always say we have one in case the app later + // invalidates it and needs to have it shown. + boolean result = true; + + if (IS_HONEYCOMB) { + if (DEBUG) Log.d(TAG, "onCreateOptionsMenu(android.view.Menu): Calling support method with wrapped native menu."); + MenuWrapper wrapped = new MenuWrapper(menu); + result = onCreateOptionsMenu(wrapped); + result |= mFragments.dispatchCreateOptionsMenu(wrapped, getMenuInflater()); + } + + if (DEBUG) Log.d(TAG, "onCreateOptionsMenu(android.view.Menu): Returning " + result); + return result; + } + + /** + * Add support for inflating the <fragment> tag. + */ + @Override + public View onCreateView(String name, Context context, AttributeSet attrs) { + if (!"fragment".equals(name)) { + return super.onCreateView(name, context, attrs); + } + + String fname = attrs.getAttributeValue(null, "class"); + TypedArray a = context.obtainStyledAttributes(attrs, FragmentTag.Fragment); + if (fname == null) { + fname = a.getString(FragmentTag.Fragment_name); + } + int id = a.getResourceId(FragmentTag.Fragment_id, View.NO_ID); + String tag = a.getString(FragmentTag.Fragment_tag); + a.recycle(); + + View parent = null; // NOTE: no way to get parent pre-Honeycomb. + int containerId = parent != null ? parent.getId() : 0; + if (containerId == View.NO_ID && id == View.NO_ID && tag == null) { + throw new IllegalArgumentException(attrs.getPositionDescription() + + ": Must specify unique android:id, android:tag, or have a parent with an id for " + fname); + } + + // If we restored from a previous state, we may already have + // instantiated this fragment from the state and should use + // that instance instead of making a new one. + Fragment fragment = id != View.NO_ID ? mFragments.findFragmentById(id) : null; + if (fragment == null && tag != null) { + fragment = mFragments.findFragmentByTag(tag); + } + if (fragment == null && containerId != View.NO_ID) { + fragment = mFragments.findFragmentById(containerId); + } + + if (FragmentManagerImpl.DEBUG) Log.v(TAG, "onCreateView: id=0x" + + Integer.toHexString(id) + " fname=" + fname + + " existing=" + fragment); + if (fragment == null) { + fragment = Fragment.instantiate(this, fname); + fragment.mFromLayout = true; + fragment.mFragmentId = id != 0 ? id : containerId; + fragment.mContainerId = containerId; + fragment.mTag = tag; + fragment.mInLayout = true; + fragment.mFragmentManager = mFragments; + fragment.onInflate(this, attrs, fragment.mSavedFragmentState); + mFragments.addFragment(fragment, true); + + } else if (fragment.mInLayout) { + // A fragment already exists and it is not one we restored from + // previous state. + throw new IllegalArgumentException(attrs.getPositionDescription() + + ": Duplicate id 0x" + Integer.toHexString(id) + + ", tag " + tag + ", or parent id 0x" + Integer.toHexString(containerId) + + " with another fragment for " + fname); + } else { + // This fragment was retained from a previous instance; get it + // going now. + fragment.mInLayout = true; + // If this fragment is newly instantiated (either right now, or + // from last saved state), then give it the attributes to + // initialize itself. + if (!fragment.mRetaining) { + fragment.onInflate(this, attrs, fragment.mSavedFragmentState); + } + mFragments.moveToState(fragment); + } + + if (fragment.mView == null) { + throw new IllegalStateException("Fragment " + fname + + " did not create a view."); + } + if (id != 0) { + fragment.mView.setId(id); + } + if (fragment.mView.getTag() == null) { + fragment.mView.setTag(tag); + } + return fragment.mView; + } + + @Override + public void invalidateOptionsMenu() { + if (DEBUG) Log.d(TAG, "supportInvalidateOptionsMenu(): Invalidating menu."); + + if (IS_HONEYCOMB) { + HoneycombInvalidateOptionsMenu.invoke(this); + } else { + mSupportMenu.clear(); + + mOptionsMenuCreateResult = onCreateOptionsMenu(mSupportMenu); + mOptionsMenuCreateResult |= mFragments.dispatchCreateOptionsMenu(mSupportMenu, getMenuInflater()); + + if (getSupportActionBar() != null) { + if (onPrepareOptionsMenu(mSupportMenu)) { + mFragments.dispatchPrepareOptionsMenu(mSupportMenu); + } + + //Since we now know we are using a custom action bar, perform the + //inflation callback to allow it to display any items it wants. + ((ActionBarImpl)mActionBar).onMenuInflated(mSupportMenu); + } + + // Whoops, older platform... we'll use a hack, to manually rebuild + // the options menu the next time it is prepared. + mOptionsMenuInvalidated = true; + } + } + + private static final class HoneycombInvalidateOptionsMenu { + static void invoke(Activity activity) { + activity.getWindow().invalidatePanelMenu(Window.FEATURE_OPTIONS_PANEL); + } + } + + /** + * Destroy all fragments and loaders. + */ + @Override + protected void onDestroy() { + super.onDestroy(); + + doReallyStop(false); + + mFragments.dispatchDestroy(); + if (mLoaderManager != null) { + mLoaderManager.doDestroy(); + } + } + + /** + * Take care of calling onBackPressed() for pre-Eclair platforms. + */ + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (android.os.Build.VERSION.SDK_INT < 5 /* ECLAIR */ + && keyCode == KeyEvent.KEYCODE_BACK + && event.getRepeatCount() == 0) { + // Take care of calling this method on earlier versions of + // the platform where it doesn't exist. + onBackPressed(); + return true; + } + + return super.onKeyDown(keyCode, event); + } + + /** + * Dispatch onLowMemory() to all fragments. + */ + @Override + public void onLowMemory() { + super.onLowMemory(); + mFragments.dispatchLowMemory(); + } + + /** + * Dispatch context and options menu to fragments. + */ + @Override + public final boolean onMenuItemSelected(int featureId, android.view.MenuItem item) { + if (super.onMenuItemSelected(featureId, item)) { + return true; + } + + switch (featureId) { + case Window.FEATURE_OPTIONS_PANEL: + return mFragments.dispatchOptionsItemSelected(new MenuItemWrapper(item)); + + case Window.FEATURE_CONTEXT_MENU: + return mFragments.dispatchContextItemSelected(new MenuItemWrapper(item)); + + default: + return false; + } + } + + @Override + public boolean onMenuItemSelected(int featureId, MenuItem item) { + if (onOptionsItemSelected(item)) { + return true; + } + + switch (featureId) { + case Window.FEATURE_OPTIONS_PANEL: + return mFragments.dispatchOptionsItemSelected(item); + + case Window.FEATURE_CONTEXT_MENU: + return mFragments.dispatchContextItemSelected(item); + + default: + return false; + } + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + return super.onOptionsItemSelected(item); + } + + @Override + public final boolean onOptionsItemSelected(android.view.MenuItem item) { + return onOptionsItemSelected(new MenuItemWrapper(item)); + } + + /** + * Call onOptionsMenuClosed() on fragments. + */ + @Override + public void onPanelClosed(int featureId, android.view.Menu menu) { + switch (featureId) { + case Window.FEATURE_OPTIONS_PANEL: + mFragments.dispatchOptionsMenuClosed(new MenuWrapper(menu)); + + if (!IS_HONEYCOMB && (getSupportActionBar() != null)) { + if (DEBUG) Log.d(TAG, "onPanelClosed(int, android.view.Menu): Dispatch menu visibility false to custom action bar."); + ((ActionBarImpl)mActionBar).onMenuVisibilityChanged(false); + } + break; + } + super.onPanelClosed(featureId, menu); + } + + /** + * Dispatch onPause() to fragments. + */ + @Override + protected void onPause() { + super.onPause(); + mResumed = false; + if (mHandler.hasMessages(MSG_RESUME_PENDING)) { + mHandler.removeMessages(MSG_RESUME_PENDING); + mFragments.dispatchResume(); + } + mFragments.dispatchPause(); + } + + /** + * Dispatch onResume() to fragments. + */ + @Override + protected void onResume() { + super.onResume(); + mHandler.sendEmptyMessage(MSG_RESUME_PENDING); + mResumed = true; + mFragments.execPendingActions(); + } + + /** + * Dispatch onResume() to fragments. + */ + @Override + protected void onPostResume() { + super.onPostResume(); + mHandler.removeMessages(MSG_RESUME_PENDING); + mFragments.dispatchResume(); + mFragments.execPendingActions(); + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + boolean result = menu.hasVisibleItems(); + if (DEBUG) Log.d(TAG, "onPrepareOptionsMenu(Menu): Returning " + result); + return result; + } + + @Override + public final boolean onPrepareOptionsMenu(android.view.Menu menu) { + boolean result = super.onPrepareOptionsMenu(menu); + + if (!IS_HONEYCOMB) { + if (DEBUG) { + Log.d(TAG, "onPrepareOptionsMenu(android.view.Menu): mOptionsMenuCreateResult = " + mOptionsMenuCreateResult); + Log.d(TAG, "onPrepareOptionsMenu(android.view.Menu): mOptionsMenuInvalidated = " + mOptionsMenuInvalidated); + } + + boolean prepareResult = true; + if (mOptionsMenuCreateResult) { + if (DEBUG) Log.d(TAG, "onPrepareOptionsMenu(android.view.Menu): Calling support method with custom menu."); + prepareResult = onPrepareOptionsMenu(mSupportMenu); + if (DEBUG) Log.d(TAG, "onPrepareOptionsMenu(android.view.Menu): Support method result returned " + prepareResult); + if (prepareResult) { + if (DEBUG) Log.d(TAG, "onPrepareOptionsMenu(android.view.Menu): Dispatching fragment method with custom menu."); + mFragments.dispatchPrepareOptionsMenu(mSupportMenu); + } + } + + if (mOptionsMenuInvalidated) { + if (DEBUG) Log.d(TAG, "onPrepareOptionsMenu(android.view.Menu): Clearing existing options menu."); + menu.clear(); + mOptionsMenuInvalidated = false; + + if (mOptionsMenuCreateResult && prepareResult) { + if (DEBUG) Log.d(TAG, "onPrepareOptionsMenu(android.view.Menu): Adding any action items that are not displayed on the action bar."); + //Only add items that have not already been added to our custom + //action bar implementation + for (MenuItemImpl item : mSupportMenu.getItems()) { + if (!item.isShownOnActionBar()) { + item.addTo(menu); + } + } + } + } + + if (mOptionsMenuCreateResult && prepareResult && menu.hasVisibleItems()) { + if (getSupportActionBar() != null) { + if (DEBUG) Log.d(TAG, "onPrepareOptionsMenu(android.view.Menu): Dispatch menu visibility true to custom action bar."); + ((ActionBarImpl)mActionBar).onMenuVisibilityChanged(true); + } + result = true; + } + } else { + if (DEBUG) Log.d(TAG, "onPrepareOptionsMenu(android.view.Menu): Calling support method with wrapped native menu."); + final MenuWrapper wrappedMenu = new MenuWrapper(menu); + result = onPrepareOptionsMenu(wrappedMenu); + if (result) { + if (DEBUG) Log.d(TAG, "onPrepareOptionsMenu(android.view.Menu): Dispatching fragment method with wrapped native menu."); + mFragments.dispatchPrepareOptionsMenu(wrappedMenu); + } + } + + if (DEBUG) Log.d(TAG, "onPrepareOptionsMenu(android.view.Menu): Returning " + result); + return result; + } + + /** + * Cause this Activity to be recreated with a new instance. This results in + * essentially the same flow as when the Activity is created due to a + * configuration change -- the current instance will go through its + * lifecycle to onDestroy() and a new instance then created after it. + */ + @Override + public void recreate() { + //This SUCKS! Figure out a way to call the super method and support Android 1.6 + /* + if (IS_HONEYCOMB) { + super.recreate(); + } else { + */ + final Intent intent = getIntent(); + intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); + + startActivity(intent); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR) { + OverridePendingTransition.invoke(this); + } + + finish(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR) { + OverridePendingTransition.invoke(this); + } + /* + } + */ + } + + private static final class OverridePendingTransition { + static void invoke(Activity activity) { + activity.overridePendingTransition(0, 0); + } + } + + /** + * Retain all appropriate fragment and loader state. You can NOT + * override this yourself! Use {@link #onRetainCustomNonConfigurationInstance()} + * if you want to retain your own state. + */ + @Override + public final Object onRetainNonConfigurationInstance() { + if (mStopped) { + doReallyStop(true); + } + + Object custom = onRetainCustomNonConfigurationInstance(); + + ArrayList fragments = mFragments.retainNonConfig(); + boolean retainLoaders = false; + if (mAllLoaderManagers != null) { + // prune out any loader managers that were already stopped and so + // have nothing useful to retain. + for (int i=mAllLoaderManagers.size()-1; i>=0; i--) { + LoaderManagerImpl lm = mAllLoaderManagers.valueAt(i); + if (lm.mRetaining) { + retainLoaders = true; + } else { + lm.doDestroy(); + mAllLoaderManagers.removeAt(i); + } + } + } + if (fragments == null && !retainLoaders && custom == null) { + return null; + } + + NonConfigurationInstances nci = new NonConfigurationInstances(); + nci.activity = null; + nci.custom = custom; + nci.children = null; + nci.fragments = fragments; + nci.loaders = mAllLoaderManagers; + return nci; + } + + /** + * Save all appropriate fragment state. + */ + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + Parcelable p = mFragments.saveAllState(); + if (p != null) { + outState.putParcelable(FRAGMENTS_TAG, p); + } + } + + /** + * Dispatch onStart() to all fragments. Ensure any created loaders are + * now started. + */ + @Override + protected void onStart() { + super.onStart(); + + mStopped = false; + mReallyStopped = false; + mHandler.removeMessages(MSG_REALLY_STOPPED); + + if (!mCreated) { + mCreated = true; + ensureSupportActionBarAttached(); //Needed for retained fragments + mFragments.dispatchActivityCreated(); + } + + mFragments.noteStateNotSaved(); + mFragments.execPendingActions(); + + if (!mLoadersStarted) { + mLoadersStarted = true; + if (mLoaderManager != null) { + mLoaderManager.doStart(); + } else if (!mCheckedForLoaderManager) { + mLoaderManager = getLoaderManager(-1, mLoadersStarted, false); + } + mCheckedForLoaderManager = true; + } + // NOTE: HC onStart goes here. + + mFragments.dispatchStart(); + if (mAllLoaderManagers != null) { + for (int i=mAllLoaderManagers.size()-1; i>=0; i--) { + LoaderManagerImpl lm = mAllLoaderManagers.valueAt(i); + lm.finishRetain(); + lm.doReportStart(); + } + } + } + + /** + * Dispatch onStop() to all fragments. Ensure all loaders are stopped. + */ + @Override + protected void onStop() { + super.onStop(); + + mStopped = true; + mHandler.sendEmptyMessage(MSG_REALLY_STOPPED); + + mFragments.dispatchStop(); + } + + /** + *

Sets the visibility of the indeterminate progress bar in the + * title.

+ * + *

In order for the progress bar to be shown, the feature must be + * requested via {@link #requestWindowFeature(long)}.

+ * + *

This method must be used instead of + * {@link #setProgressBarIndeterminateVisibility(boolean)} for + * ActionBarSherlock. Pass {@link Boolean.TRUE} or + * {@link Boolean.FALSE} to ensure the appropriate one is called.

+ * + * @param visible Whether to show the progress bars in the title. + */ + @Override + public void setProgressBarIndeterminateVisibility(Boolean visible) { + if (IS_HONEYCOMB || (getSupportActionBar() == null)) { + super.setProgressBarIndeterminateVisibility(visible); + } else if ((mWindowFlags & WINDOW_FLAG_INDETERMINANTE_PROGRESS) == WINDOW_FLAG_INDETERMINANTE_PROGRESS) { + ((ActionBarImpl)mActionBar).setProgressBarIndeterminateVisibility(visible); + } + } + + // ------------------------------------------------------------------------ + // NEW METHODS + // ------------------------------------------------------------------------ + + /** + * Use this instead of {@link #onRetainNonConfigurationInstance()}. + * Retrieve later with {@link #getLastCustomNonConfigurationInstance()}. + */ + public Object onRetainCustomNonConfigurationInstance() { + return null; + } + + /** + * Return the value previously returned from + * {@link #onRetainCustomNonConfigurationInstance()}. + */ + public Object getLastCustomNonConfigurationInstance() { + NonConfigurationInstances nc = (NonConfigurationInstances) + getLastNonConfigurationInstance(); + return nc != null ? nc.custom : null; + } + + /** + * @deprecated Use {@link invalidateOptionsMenu}. + */ + @Deprecated + void supportInvalidateOptionsMenu() { + invalidateOptionsMenu(); + } + + /** + * Print the Activity's state into the given stream. This gets invoked if + * you run "adb shell dumpsys activity ". + * + * @param prefix Desired prefix to prepend at each line of output. + * @param fd The raw file descriptor that the dump is being sent to. + * @param writer The PrintWriter to which you should dump your state. This will be + * closed for you after you return. + * @param args additional arguments to the dump request. + */ + @Override + public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) { + if (IS_HONEYCOMB) { + //This can only work if we can call the super-class impl. :/ + //ActivityCompatHoneycomb.dump(this, prefix, fd, writer, args); + } + writer.print(prefix); writer.print("Local FragmentActivity "); + writer.print(Integer.toHexString(System.identityHashCode(this))); + writer.println(" State:"); + String innerPrefix = prefix + " "; + writer.print(innerPrefix); writer.print("mCreated="); + writer.print(mCreated); writer.print("mResumed="); + writer.print(mResumed); writer.print(" mStopped="); + writer.print(mStopped); writer.print(" mReallyStopped="); + writer.println(mReallyStopped); + writer.print(innerPrefix); writer.print("mLoadersStarted="); + writer.println(mLoadersStarted); + if (mLoaderManager != null) { + writer.print(prefix); writer.print("Loader Manager "); + writer.print(Integer.toHexString(System.identityHashCode(mLoaderManager))); + writer.println(":"); + mLoaderManager.dump(prefix + " ", fd, writer, args); + } + mFragments.dump(prefix, fd, writer, args); + } + + void doReallyStop(boolean retaining) { + if (!mReallyStopped) { + mReallyStopped = true; + mRetaining = retaining; + mHandler.removeMessages(MSG_REALLY_STOPPED); + onReallyStop(); + } + } + + /** + * Pre-HC, we didn't have a way to determine whether an activity was + * being stopped for a config change or not until we saw + * onRetainNonConfigurationInstance() called after onStop(). However + * we need to know this, to know whether to retain fragments. This will + * tell us what we need to know. + */ + void onReallyStop() { + if (mLoadersStarted) { + mLoadersStarted = false; + if (mLoaderManager != null) { + if (!mRetaining) { + mLoaderManager.doStop(); + } else { + mLoaderManager.doRetain(); + } + } + } + + mFragments.dispatchReallyStop(); + } + + // ------------------------------------------------------------------------ + // ACTION BAR AND ACTION MODE SUPPORT + // ------------------------------------------------------------------------ + + /** + * Retrieve a reference to this activity's action bar handler. + * + * @return The handler for the appropriate action bar, or null. + */ + @Override + public ActionBar getSupportActionBar() { + return (mActionBar != null) ? mActionBar.getPublicInstance() : null; + } + + /** + * Notifies the activity that an action mode has finished. Activity + * subclasses overriding this method should call the superclass + * implementation. + * + * @param mode The action mode that just finished. + */ + @Override + public void onActionModeFinished(ActionMode mode) { + } + + /** + * Notifies the Activity that an action mode has been started. Activity + * subclasses overriding this method should call the superclass + * implementation. + * + * @param mode The new action mode. + */ + @Override + public void onActionModeStarted(ActionMode mode) { + } + + /** + *

Give the Activity a chance to control the UI for an action mode + * requested by the system.

+ * + *

Note: If you are looking for a notification callback that an action + * mode has been started for this activity, see + * {@link #onActionModeStarted(ActionMode)}.

+ * + * @param callback The callback that should control the new action mode + * @return The new action mode, or null if the activity does not want to + * provide special handling for this action mode. (It will be handled by the + * system.) + */ + @Override + public ActionMode onWindowStartingActionMode(ActionMode.Callback callback) { + return null; + } + + /** + * Start an action mode. + * + * @param callback Callback that will manage lifecycle events for this + * context mode + * @return The ContextMode that was started, or null if it was cancelled + * @see android.support.v4.view.ActionMode + */ + @Override + public final ActionMode startActionMode(final ActionMode.Callback callback) { + //Give the activity override a chance to handle the action mode + ActionMode actionMode = onWindowStartingActionMode(callback); + + if (actionMode == null) { + //If the activity did not handle, send to action bar for platform- + //specific implementation + actionMode = mActionBar.startActionMode(callback); + } + if (actionMode != null) { + //Send the activity callback that our action mode was started + onActionModeStarted(actionMode); + } + + //Return to the caller + return actionMode; + } + + // ------------------------------------------------------------------------ + // FRAGMENT SUPPORT + // ------------------------------------------------------------------------ + + /** + * Called when a fragment is attached to the activity. + */ + @Override + public void onAttachFragment(Fragment fragment) { + } + + /** + * Return the FragmentManager for interacting with fragments associated + * with this activity. + */ + @Override + public FragmentManager getSupportFragmentManager() { + return mFragments; + } + + /** + * Modifies the standard behavior to allow results to be delivered to fragments. + * This imposes a restriction that requestCode be <= 0xffff. + */ + @Override + public void startActivityForResult(Intent intent, int requestCode) { + if (requestCode != -1 && (requestCode&0xffff0000) != 0) { + throw new IllegalArgumentException("Can only use lower 16 bits for requestCode"); + } + super.startActivityForResult(intent, requestCode); + } + + /** + * Called by Fragment.startActivityForResult() to implement its behavior. + */ + @Override + public void startActivityFromFragment(Fragment fragment, Intent intent, + int requestCode) { + if (requestCode == -1) { + super.startActivityForResult(intent, -1); + return; + } + if ((requestCode&0xffff0000) != 0) { + throw new IllegalArgumentException("Can only use lower 16 bits for requestCode"); + } + super.startActivityForResult(intent, ((fragment.mIndex+1)<<16) + (requestCode&0xffff)); + } + + void invalidateSupportFragmentIndex(int index) { + //Log.v(TAG, "invalidateFragmentIndex: index=" + index); + if (mAllLoaderManagers != null) { + LoaderManagerImpl lm = mAllLoaderManagers.get(index); + if (lm != null && !lm.mRetaining) { + lm.doDestroy(); + mAllLoaderManagers.remove(index); + } + } + } + + // ------------------------------------------------------------------------ + // LOADER SUPPORT + // ------------------------------------------------------------------------ + + /** + * Return the LoaderManager for this fragment, creating it if needed. + */ + @Override + public LoaderManager getSupportLoaderManager() { + if (mLoaderManager != null) { + return mLoaderManager; + } + mCheckedForLoaderManager = true; + mLoaderManager = getLoaderManager(-1, mLoadersStarted, true); + return mLoaderManager; + } + + LoaderManagerImpl getLoaderManager(int index, boolean started, boolean create) { + if (mAllLoaderManagers == null) { + mAllLoaderManagers = new HCSparseArray(); + } + LoaderManagerImpl lm = mAllLoaderManagers.get(index); + if (lm == null) { + if (create) { + lm = new LoaderManagerImpl(this, started); + mAllLoaderManagers.put(index, lm); + } + } else { + lm.updateActivity(this); + } + return lm; + } +} diff --git a/actionbarsherlock/plugins/maps/update.py b/actionbarsherlock/plugins/maps/update.py new file mode 100644 index 000000000..c3781c3a8 --- /dev/null +++ b/actionbarsherlock/plugins/maps/update.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python + +import os +import re + +dir_maps_base = os.path.dirname(os.path.realpath(__file__)) +dir_repo_base = os.path.dirname(os.path.dirname(dir_maps_base)) +dir_lib_base = os.path.join(dir_repo_base, 'library') + +path_to_source_activity = 'src/android/support/v4/app/FragmentActivity.java'.split('/') +path_to_dest_activity = 'src/android/support/v4/app/FragmentMapActivity.java'.split('/') + +file_source = os.path.join(dir_lib_base , *path_to_source_activity) +file_dest = os.path.join(dir_maps_base, *path_to_dest_activity) + +# Read in entire source file +code = None +with open(file_source) as f: + code = f.read() + + +code = code.split('\n') + +# Add MapActivity import +code.insert(31, 'import com.google.android.maps.MapActivity;') + +code = '\n'.join(code) + +# Class declaration +code = code.replace('class FragmentActivity extends Activity', 'abstract class FragmentMapActivity extends MapActivity') + +# TAG variable content +code = code.replace('"FragmentActivity"', '"FragmentMapActivity"') + +# Update inner class references +code = code.replace('FragmentActivity.this', 'FragmentMapActivity.this') + +# Class constructor +code = code.replace('FragmentActivity()', 'FragmentMapActivity()') + +# Javadoc +code = code.replace('Fragment, and Loader APIs.', 'Fragment, Loader, and Google Map APIs.') + + +# Exit stage left +with open(file_dest, 'w') as f: + f.write(code) diff --git a/actionbarsherlock/plugins/pom.xml b/actionbarsherlock/plugins/pom.xml new file mode 100644 index 000000000..b9957d6a4 --- /dev/null +++ b/actionbarsherlock/plugins/pom.xml @@ -0,0 +1,22 @@ + + + + 4.0.0 + + com.actionbarsherlock + parent-plugins + Plugins (Parent) + pom + + + com.actionbarsherlock + parent + 3.4.2 + ../pom.xml + + + + maps + preference + + diff --git a/actionbarsherlock/plugins/preference/AndroidManifest.xml b/actionbarsherlock/plugins/preference/AndroidManifest.xml new file mode 100644 index 000000000..8615e26fa --- /dev/null +++ b/actionbarsherlock/plugins/preference/AndroidManifest.xml @@ -0,0 +1,13 @@ + + + + + + + diff --git a/actionbarsherlock/plugins/preference/README.md b/actionbarsherlock/plugins/preference/README.md new file mode 100644 index 000000000..256445d04 --- /dev/null +++ b/actionbarsherlock/plugins/preference/README.md @@ -0,0 +1,5 @@ +ActionBarSherlock Plugin: Preference +==================================== + +This plugin provides support for an action bar enhanced preference screen +through an additional base activity, `SherlockPreferenceActivity`. diff --git a/actionbarsherlock/plugins/preference/checkstyle.xml b/actionbarsherlock/plugins/preference/checkstyle.xml new file mode 100644 index 000000000..91bcb9a52 --- /dev/null +++ b/actionbarsherlock/plugins/preference/checkstyle.xml @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/actionbarsherlock/plugins/preference/pom.xml b/actionbarsherlock/plugins/preference/pom.xml new file mode 100644 index 000000000..6077bbcd5 --- /dev/null +++ b/actionbarsherlock/plugins/preference/pom.xml @@ -0,0 +1,69 @@ + + + + 4.0.0 + + com.actionbarsherlock + plugin-preference + Plugin: Preference + jar + + + com.actionbarsherlock + parent-plugins + 3.4.2 + ../pom.xml + + + + + android + android + provided + + + + com.actionbarsherlock + library + ${project.version} + provided + + + + + ${apk.prefix}-${project.artifactId}-${project.version} + src + + + + com.jayway.maven.plugins.android.generation2 + maven-android-plugin + true + + + + org.apache.maven.plugins + maven-javadoc-plugin + + true + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + + ${project.basedir}/checkstyle.xml + + + + verify + + checkstyle + + + + + + + diff --git a/actionbarsherlock/plugins/preference/project.properties b/actionbarsherlock/plugins/preference/project.properties new file mode 100644 index 000000000..c632419fc --- /dev/null +++ b/actionbarsherlock/plugins/preference/project.properties @@ -0,0 +1,13 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system use, +# "ant.properties", and override values to adapt the script to your +# project structure. + +android.library=true +# Project target. +target=android-13 +android.library.reference.1=../../library diff --git a/actionbarsherlock/plugins/preference/src/android/support/v4/app/SherlockPreferenceActivity.java b/actionbarsherlock/plugins/preference/src/android/support/v4/app/SherlockPreferenceActivity.java new file mode 100644 index 000000000..c2ab8c5c2 --- /dev/null +++ b/actionbarsherlock/plugins/preference/src/android/support/v4/app/SherlockPreferenceActivity.java @@ -0,0 +1,1228 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * Copyright (C) 2011 Jake Wharton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.v4.app; + +import java.io.FileDescriptor; +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.HashMap; +import com.actionbarsherlock.R; +import com.actionbarsherlock.internal.app.ActionBarImpl; +import com.actionbarsherlock.internal.app.ActionBarWrapper; +import com.actionbarsherlock.internal.view.menu.MenuBuilder; +import com.actionbarsherlock.internal.view.menu.MenuInflaterWrapper; +import com.actionbarsherlock.internal.view.menu.MenuItemImpl; +import com.actionbarsherlock.internal.view.menu.MenuItemWrapper; +import com.actionbarsherlock.internal.view.menu.MenuWrapper; +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.content.res.Configuration; +import android.content.res.Resources.Theme; +import android.content.res.TypedArray; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.os.Parcelable; +import android.preference.PreferenceActivity; +import android.support.v4.view.ActionMode; +import android.support.v4.view.Menu; +import android.support.v4.view.MenuInflater; +import android.support.v4.view.MenuItem; +import android.support.v4.view.Window; +import android.util.AttributeSet; +import android.util.Log; +import android.view.KeyEvent; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ListView; + +/** + * Base class for activities that want to use the support-based ActionBar, + * Fragment, Loader, and Preference APIs. + * + *

Known limitations:

+ *
    + *
  • When using the <fragment> tag, this implementation can not + * use the parent view's ID as the new fragment's ID. You must explicitly + * specify an ID (or tag) in the <fragment>.

    + *
  • Prior to Honeycomb (3.0), an activity's state was saved before pausing. + * Fragments are a significant amount of new state, and dynamic enough that one + * often wants them to change between pausing and stopping. These classes + * throw an exception if you try to change the fragment state after it has been + * saved, to avoid accidental loss of UI state. However this is too restrictive + * prior to Honeycomb, where the state is saved before pausing. To address this, + * when running on platforms prior to Honeycomb an exception will not be thrown + * if you change fragments between the state save and the activity being stopped. + * This means that is some cases if the activity is restored from its last saved + * state, this may be a snapshot slightly before what the user last saw.

    + *
+ */ +public abstract class SherlockPreferenceActivity extends PreferenceActivity implements SupportActivity { + private static final String TAG = "SherlockPreferenceActivity"; + private static final boolean DEBUG = false; + + private static final String FRAGMENTS_TAG = "android:support:fragments"; + + static final boolean IS_HONEYCOMB = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB; + + static final int MSG_REALLY_STOPPED = 1; + static final int MSG_RESUME_PENDING = 2; + + private static final int WINDOW_FLAG_ACTION_BAR = 1 << Window.FEATURE_ACTION_BAR; + private static final int WINDOW_FLAG_ACTION_BAR_ITEM_TEXT = 1 << Window.FEATURE_ACTION_BAR_ITEM_TEXT; + private static final int WINDOW_FLAG_ACTION_BAR_OVERLAY = 1 << Window.FEATURE_ACTION_BAR_OVERLAY; + private static final int WINDOW_FLAG_ACTION_MODE_OVERLAY = 1 << Window.FEATURE_ACTION_MODE_OVERLAY; + private static final int WINDOW_FLAG_INDETERMINANTE_PROGRESS = 1 << Window.FEATURE_INDETERMINATE_PROGRESS; + + final SupportActivity.InternalCallbacks mInternalCallbacks = new SupportActivity.InternalCallbacks() { + @Override + void invalidateSupportFragmentIndex(int index) { + SherlockPreferenceActivity.this.invalidateSupportFragmentIndex(index); + } + + @Override + LoaderManagerImpl getLoaderManager(int index, boolean started, boolean create) { + return SherlockPreferenceActivity.this.getLoaderManager(index, started, create); + } + + @Override + Handler getHandler() { + return mHandler; + } + + @Override + FragmentManagerImpl getFragments() { + return mFragments; + } + + @Override + void ensureSupportActionBarAttached() { + SherlockPreferenceActivity.this.ensureSupportActionBarAttached(); + } + + @Override + boolean getRetaining() { + return mRetaining; + } + }; + + final Handler mHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case MSG_REALLY_STOPPED: + if (mStopped) { + doReallyStop(false); + } + break; + case MSG_RESUME_PENDING: + mFragments.dispatchResume(); + mFragments.execPendingActions(); + break; + default: + super.handleMessage(msg); + } + } + }; + final FragmentManagerImpl mFragments = new FragmentManagerImpl(); + + ActionBar mActionBar; + boolean mIsActionBarImplAttached; + long mWindowFlags = 0; + + final MenuBuilder mSupportMenu; + final MenuBuilder.Callback mSupportMenuCallback = new MenuBuilder.Callback() { + @Override + public boolean onMenuItemSelected(MenuBuilder menu, MenuItem item) { + return SherlockPreferenceActivity.this.onMenuItemSelected(Window.FEATURE_OPTIONS_PANEL, item); + } + }; + + boolean mCreated; + boolean mResumed; + boolean mStopped; + boolean mReallyStopped; + boolean mRetaining; + + boolean mIsEnsureInflating = false; + + boolean mOptionsMenuInvalidated; + boolean mOptionsMenuCreateResult; + + boolean mCheckedForLoaderManager; + boolean mLoadersStarted; + HCSparseArray mAllLoaderManagers; + LoaderManagerImpl mLoaderManager; + + static final class NonConfigurationInstances { + Object activity; + Object custom; + HashMap children; + ArrayList fragments; + HCSparseArray loaders; + } + + static class FragmentTag { + public static final int[] Fragment = { + 0x01010003, 0x010100d0, 0x010100d1 + }; + public static final int Fragment_id = 1; + public static final int Fragment_name = 0; + public static final int Fragment_tag = 2; + } + + + + public SherlockPreferenceActivity() { + super(); + + if (IS_HONEYCOMB) { + mActionBar = ActionBarWrapper.createFor(this); + mSupportMenu = null; //Everything should be done natively + } else { + mSupportMenu = new MenuBuilder(this); + mSupportMenu.setCallback(mSupportMenuCallback); + } + } + + @Override + public SupportActivity.InternalCallbacks getInternalCallbacks() { + return mInternalCallbacks; + } + + @Override + public Activity asActivity() { + return this; + } + + protected void ensureSupportActionBarAttached() { + if (IS_HONEYCOMB || mIsActionBarImplAttached) { + return; + } + if (!isChild()) { + //Get the list view that the parent attached + final ListView contentView = (ListView)getWindow().getDecorView().findViewById(android.R.id.list); + ((ViewGroup)contentView.getParent()).removeView(contentView); + + //Disable the callback in PrefrenceActivity + mIsEnsureInflating = true; + + if ((mWindowFlags & WINDOW_FLAG_ACTION_BAR) == WINDOW_FLAG_ACTION_BAR) { + if ((mWindowFlags & WINDOW_FLAG_ACTION_BAR_OVERLAY) == WINDOW_FLAG_ACTION_BAR_OVERLAY) { + super.setContentView(R.layout.abs__screen_action_bar_overlay); + } else { + super.setContentView(R.layout.abs__screen_action_bar); + } + + mActionBar = new ActionBarImpl(this); + ((ActionBarImpl)mActionBar).init(); + + final boolean textEnabled = ((mWindowFlags & WINDOW_FLAG_ACTION_BAR_ITEM_TEXT) == WINDOW_FLAG_ACTION_BAR_ITEM_TEXT); + mSupportMenu.setShowsActionItemText(textEnabled); + + if ((mWindowFlags & WINDOW_FLAG_INDETERMINANTE_PROGRESS) == WINDOW_FLAG_INDETERMINANTE_PROGRESS) { + ((ActionBarImpl)mActionBar).setProgressBarIndeterminateVisibility(false); + } + + //TODO set other flags + } else { + if ((mWindowFlags & WINDOW_FLAG_INDETERMINANTE_PROGRESS) == WINDOW_FLAG_INDETERMINANTE_PROGRESS) { + super.requestWindowFeature((int)Window.FEATURE_INDETERMINATE_PROGRESS); + } + super.setContentView(R.layout.abs__screen_simple); + } + + //Attach original list view to the new layout + ((ViewGroup)findViewById(R.id.abs__content)).addView(contentView); + + //Re-enable the callback in PreferenceActivity + mIsEnsureInflating = false; + super.onContentChanged(); + } + + invalidateOptionsMenu(); + mIsActionBarImplAttached = true; + } + + @Override + public void onContentChanged() { + if (!mIsEnsureInflating) { + super.onContentChanged(); + } + } + + // ------------------------------------------------------------------------ + // HOOKS INTO ACTIVITY + // ------------------------------------------------------------------------ + + /** + * Enable extended window features. + * + * @param featureId The desired feature as defined in + * {@link android.support.v4.view.Window}. + * @return Returns {@code true} if the requested feature is supported and + * now enabled. + */ + @Override + public boolean requestWindowFeature(long featureId) { + if (!IS_HONEYCOMB) { + switch ((int)featureId) { + case (int)Window.FEATURE_ACTION_BAR: + case (int)Window.FEATURE_ACTION_BAR_ITEM_TEXT: + case (int)Window.FEATURE_ACTION_BAR_OVERLAY: + case (int)Window.FEATURE_ACTION_MODE_OVERLAY: + case (int)Window.FEATURE_INDETERMINATE_PROGRESS: + mWindowFlags |= (1 << featureId); + return true; + } + } + return super.requestWindowFeature((int)featureId); + } + + @Override + public android.view.MenuInflater getMenuInflater() { + if (IS_HONEYCOMB) { + if (DEBUG) Log.d(TAG, "getMenuInflater(): Wrapping native inflater."); + + //Wrap the native inflater so it can unwrap the native menu first + return new MenuInflaterWrapper(this, super.getMenuInflater()); + } + + if (DEBUG) Log.d(TAG, "getMenuInflater(): Returning support inflater."); + + //Use our custom menu inflater + return new MenuInflater(this, super.getMenuInflater()); + } + + @Override + public void setTitle(CharSequence title) { + if (IS_HONEYCOMB || (getSupportActionBar() == null)) { + super.setTitle(title); + } else { + getSupportActionBar().setTitle(title); + } + } + + @Override + public void setTitle(int titleId) { + if (IS_HONEYCOMB || (getSupportActionBar() == null)) { + super.setTitle(titleId); + } else { + getSupportActionBar().setTitle(titleId); + } + } + + /** + * Dispatch incoming result to the correct fragment. + */ + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + int index = requestCode>>16; + if (index != 0) { + index--; + if (mFragments.mActive == null || index < 0 || index >= mFragments.mActive.size()) { + Log.w(TAG, "Activity result fragment index out of range: 0x" + + Integer.toHexString(requestCode)); + return; + } + Fragment frag = mFragments.mActive.get(index); + if (frag == null) { + Log.w(TAG, "Activity result no fragment exists for index: 0x" + + Integer.toHexString(requestCode)); + } else { + frag.onActivityResult(requestCode&0xffff, resultCode, data); + } + return; + } + + super.onActivityResult(requestCode, resultCode, data); + } + + @Override + protected void onApplyThemeResource(Theme theme, int resid, boolean first) { + TypedArray attrs = theme.obtainStyledAttributes(resid, R.styleable.SherlockTheme); + + final boolean actionBar = attrs.getBoolean(R.styleable.SherlockTheme_windowActionBar, false); + mWindowFlags |= actionBar ? WINDOW_FLAG_ACTION_BAR : 0; + + final boolean actionModeOverlay = attrs.getBoolean(R.styleable.SherlockTheme_windowActionModeOverlay, false); + mWindowFlags |= actionModeOverlay ? WINDOW_FLAG_ACTION_MODE_OVERLAY : 0; + + attrs.recycle(); + super.onApplyThemeResource(theme, resid, first); + } + + /** + * Take care of popping the fragment back stack or finishing the activity + * as appropriate. + */ + @Override + public void onBackPressed() { + if (!mFragments.popBackStackImmediate()) { + finish(); + } + } + + /** + * Dispatch configuration change to all fragments. + */ + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + mFragments.dispatchConfigurationChanged(newConfig); + } + + /** + * Perform initialization of all fragments and loaders. + */ + @Override + protected void onCreate(Bundle savedInstanceState) { + mFragments.attachActivity(this); + // Old versions of the platform didn't do this! + if (getLayoutInflater().getFactory() == null) { + getLayoutInflater().setFactory(this); + } + + super.onCreate(savedInstanceState); + + NonConfigurationInstances nc = (NonConfigurationInstances) + getLastNonConfigurationInstance(); + if (nc != null) { + mAllLoaderManagers = nc.loaders; + } + if (savedInstanceState != null) { + Parcelable p = savedInstanceState.getParcelable(FRAGMENTS_TAG); + mFragments.restoreAllState(p, nc != null ? nc.fragments : null); + } + ensureSupportActionBarAttached(); + mFragments.dispatchCreate(); + } + + /** + *

Initialize the contents of the Activity's standard options menu. You + * should place your menu items in to menu.

+ * + *

The default implementation populates the menu with standard system + * menu items. These are placed in the {@link Menu.CATEGORY_SYSTEM} group + * so that they will be correctly ordered with application-defined menu + * items. Deriving classes should always call through to the base + * implementation.

+ * + *

You can safely hold on to menu (and any items created from it), + * making modifications to it as desired, until the next time + * {@code onCreateOptionsMenu()} is called.

+ * + *

When you add items to the menu, you can implement the Activity's + * {@link #onOptionsItemSelected(MenuItem)} method to handle them + * there.

+ * + * @param menu The options menu in which you place your items. + * @return You must return true for the menu to be displayed; if you return + * false it will not be shown. + */ + @Override + public boolean onCreateOptionsMenu(Menu menu) { + if (DEBUG) Log.d(TAG, "onCreateOptionsMenu(Menu): Returning " + menu.hasVisibleItems()); + return menu.hasVisibleItems(); + } + + @Override + public final boolean onCreateOptionsMenu(android.view.Menu menu) { + // Prior to Honeycomb, the framework can't invalidate the options + // menu, so we must always say we have one in case the app later + // invalidates it and needs to have it shown. + boolean result = true; + + if (IS_HONEYCOMB) { + if (DEBUG) Log.d(TAG, "onCreateOptionsMenu(android.view.Menu): Calling support method with wrapped native menu."); + MenuWrapper wrapped = new MenuWrapper(menu); + result = onCreateOptionsMenu(wrapped); + result |= mFragments.dispatchCreateOptionsMenu(wrapped, getMenuInflater()); + } + + if (DEBUG) Log.d(TAG, "onCreateOptionsMenu(android.view.Menu): Returning " + result); + return result; + } + + /** + * Add support for inflating the <fragment> tag. + */ + @Override + public View onCreateView(String name, Context context, AttributeSet attrs) { + if (!"fragment".equals(name)) { + return super.onCreateView(name, context, attrs); + } + + String fname = attrs.getAttributeValue(null, "class"); + TypedArray a = context.obtainStyledAttributes(attrs, FragmentTag.Fragment); + if (fname == null) { + fname = a.getString(FragmentTag.Fragment_name); + } + int id = a.getResourceId(FragmentTag.Fragment_id, View.NO_ID); + String tag = a.getString(FragmentTag.Fragment_tag); + a.recycle(); + + View parent = null; // NOTE: no way to get parent pre-Honeycomb. + int containerId = parent != null ? parent.getId() : 0; + if (containerId == View.NO_ID && id == View.NO_ID && tag == null) { + throw new IllegalArgumentException(attrs.getPositionDescription() + + ": Must specify unique android:id, android:tag, or have a parent with an id for " + fname); + } + + // If we restored from a previous state, we may already have + // instantiated this fragment from the state and should use + // that instance instead of making a new one. + Fragment fragment = id != View.NO_ID ? mFragments.findFragmentById(id) : null; + if (fragment == null && tag != null) { + fragment = mFragments.findFragmentByTag(tag); + } + if (fragment == null && containerId != View.NO_ID) { + fragment = mFragments.findFragmentById(containerId); + } + + if (FragmentManagerImpl.DEBUG) Log.v(TAG, "onCreateView: id=0x" + + Integer.toHexString(id) + " fname=" + fname + + " existing=" + fragment); + if (fragment == null) { + fragment = Fragment.instantiate(this, fname); + fragment.mFromLayout = true; + fragment.mFragmentId = id != 0 ? id : containerId; + fragment.mContainerId = containerId; + fragment.mTag = tag; + fragment.mInLayout = true; + fragment.mFragmentManager = mFragments; + fragment.onInflate(this, attrs, fragment.mSavedFragmentState); + mFragments.addFragment(fragment, true); + + } else if (fragment.mInLayout) { + // A fragment already exists and it is not one we restored from + // previous state. + throw new IllegalArgumentException(attrs.getPositionDescription() + + ": Duplicate id 0x" + Integer.toHexString(id) + + ", tag " + tag + ", or parent id 0x" + Integer.toHexString(containerId) + + " with another fragment for " + fname); + } else { + // This fragment was retained from a previous instance; get it + // going now. + fragment.mInLayout = true; + // If this fragment is newly instantiated (either right now, or + // from last saved state), then give it the attributes to + // initialize itself. + if (!fragment.mRetaining) { + fragment.onInflate(this, attrs, fragment.mSavedFragmentState); + } + mFragments.moveToState(fragment); + } + + if (fragment.mView == null) { + throw new IllegalStateException("Fragment " + fname + + " did not create a view."); + } + if (id != 0) { + fragment.mView.setId(id); + } + if (fragment.mView.getTag() == null) { + fragment.mView.setTag(tag); + } + return fragment.mView; + } + + @Override + public void invalidateOptionsMenu() { + if (DEBUG) Log.d(TAG, "supportInvalidateOptionsMenu(): Invalidating menu."); + + if (IS_HONEYCOMB) { + HoneycombInvalidateOptionsMenu.invoke(this); + } else { + mSupportMenu.clear(); + + mOptionsMenuCreateResult = onCreateOptionsMenu(mSupportMenu); + mOptionsMenuCreateResult |= mFragments.dispatchCreateOptionsMenu(mSupportMenu, getMenuInflater()); + + if (getSupportActionBar() != null) { + if (onPrepareOptionsMenu(mSupportMenu)) { + mFragments.dispatchPrepareOptionsMenu(mSupportMenu); + } + + //Since we now know we are using a custom action bar, perform the + //inflation callback to allow it to display any items it wants. + ((ActionBarImpl)mActionBar).onMenuInflated(mSupportMenu); + } + + // Whoops, older platform... we'll use a hack, to manually rebuild + // the options menu the next time it is prepared. + mOptionsMenuInvalidated = true; + } + } + + private static final class HoneycombInvalidateOptionsMenu { + static void invoke(Activity activity) { + activity.getWindow().invalidatePanelMenu(Window.FEATURE_OPTIONS_PANEL); + } + } + + /** + * Destroy all fragments and loaders. + */ + @Override + protected void onDestroy() { + super.onDestroy(); + + doReallyStop(false); + + mFragments.dispatchDestroy(); + if (mLoaderManager != null) { + mLoaderManager.doDestroy(); + } + } + + /** + * Take care of calling onBackPressed() for pre-Eclair platforms. + */ + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (android.os.Build.VERSION.SDK_INT < 5 /* ECLAIR */ + && keyCode == KeyEvent.KEYCODE_BACK + && event.getRepeatCount() == 0) { + // Take care of calling this method on earlier versions of + // the platform where it doesn't exist. + onBackPressed(); + return true; + } + + return super.onKeyDown(keyCode, event); + } + + /** + * Dispatch onLowMemory() to all fragments. + */ + @Override + public void onLowMemory() { + super.onLowMemory(); + mFragments.dispatchLowMemory(); + } + + /** + * Dispatch context and options menu to fragments. + */ + @Override + public final boolean onMenuItemSelected(int featureId, android.view.MenuItem item) { + if (super.onMenuItemSelected(featureId, item)) { + return true; + } + + switch (featureId) { + case Window.FEATURE_OPTIONS_PANEL: + return mFragments.dispatchOptionsItemSelected(new MenuItemWrapper(item)); + + case Window.FEATURE_CONTEXT_MENU: + return mFragments.dispatchContextItemSelected(new MenuItemWrapper(item)); + + default: + return false; + } + } + + @Override + public boolean onMenuItemSelected(int featureId, MenuItem item) { + if (onOptionsItemSelected(item)) { + return true; + } + + switch (featureId) { + case Window.FEATURE_OPTIONS_PANEL: + return mFragments.dispatchOptionsItemSelected(item); + + case Window.FEATURE_CONTEXT_MENU: + return mFragments.dispatchContextItemSelected(item); + + default: + return false; + } + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + return super.onOptionsItemSelected(item); + } + + @Override + public final boolean onOptionsItemSelected(android.view.MenuItem item) { + return onOptionsItemSelected(new MenuItemWrapper(item)); + } + + /** + * Call onOptionsMenuClosed() on fragments. + */ + @Override + public void onPanelClosed(int featureId, android.view.Menu menu) { + switch (featureId) { + case Window.FEATURE_OPTIONS_PANEL: + mFragments.dispatchOptionsMenuClosed(new MenuWrapper(menu)); + + if (!IS_HONEYCOMB && (getSupportActionBar() != null)) { + if (DEBUG) Log.d(TAG, "onPanelClosed(int, android.view.Menu): Dispatch menu visibility false to custom action bar."); + ((ActionBarImpl)mActionBar).onMenuVisibilityChanged(false); + } + break; + } + super.onPanelClosed(featureId, menu); + } + + /** + * Dispatch onPause() to fragments. + */ + @Override + protected void onPause() { + super.onPause(); + mResumed = false; + if (mHandler.hasMessages(MSG_RESUME_PENDING)) { + mHandler.removeMessages(MSG_RESUME_PENDING); + mFragments.dispatchResume(); + } + mFragments.dispatchPause(); + } + + /** + * Dispatch onResume() to fragments. + */ + @Override + protected void onResume() { + super.onResume(); + mHandler.sendEmptyMessage(MSG_RESUME_PENDING); + mResumed = true; + mFragments.execPendingActions(); + } + + /** + * Dispatch onResume() to fragments. + */ + @Override + protected void onPostResume() { + super.onPostResume(); + mHandler.removeMessages(MSG_RESUME_PENDING); + mFragments.dispatchResume(); + mFragments.execPendingActions(); + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + boolean result = menu.hasVisibleItems(); + if (DEBUG) Log.d(TAG, "onPrepareOptionsMenu(Menu): Returning " + result); + return result; + } + + @Override + public final boolean onPrepareOptionsMenu(android.view.Menu menu) { + boolean result = super.onPrepareOptionsMenu(menu); + + if (!IS_HONEYCOMB) { + if (DEBUG) { + Log.d(TAG, "onPrepareOptionsMenu(android.view.Menu): mOptionsMenuCreateResult = " + mOptionsMenuCreateResult); + Log.d(TAG, "onPrepareOptionsMenu(android.view.Menu): mOptionsMenuInvalidated = " + mOptionsMenuInvalidated); + } + + boolean prepareResult = true; + if (mOptionsMenuCreateResult) { + if (DEBUG) Log.d(TAG, "onPrepareOptionsMenu(android.view.Menu): Calling support method with custom menu."); + prepareResult = onPrepareOptionsMenu(mSupportMenu); + if (DEBUG) Log.d(TAG, "onPrepareOptionsMenu(android.view.Menu): Support method result returned " + prepareResult); + if (prepareResult) { + if (DEBUG) Log.d(TAG, "onPrepareOptionsMenu(android.view.Menu): Dispatching fragment method with custom menu."); + mFragments.dispatchPrepareOptionsMenu(mSupportMenu); + } + } + + if (mOptionsMenuInvalidated) { + if (DEBUG) Log.d(TAG, "onPrepareOptionsMenu(android.view.Menu): Clearing existing options menu."); + menu.clear(); + mOptionsMenuInvalidated = false; + + if (mOptionsMenuCreateResult && prepareResult) { + if (DEBUG) Log.d(TAG, "onPrepareOptionsMenu(android.view.Menu): Adding any action items that are not displayed on the action bar."); + //Only add items that have not already been added to our custom + //action bar implementation + for (MenuItemImpl item : mSupportMenu.getItems()) { + if (!item.isShownOnActionBar()) { + item.addTo(menu); + } + } + } + } + + if (mOptionsMenuCreateResult && prepareResult && menu.hasVisibleItems()) { + if (getSupportActionBar() != null) { + if (DEBUG) Log.d(TAG, "onPrepareOptionsMenu(android.view.Menu): Dispatch menu visibility true to custom action bar."); + ((ActionBarImpl)mActionBar).onMenuVisibilityChanged(true); + } + result = true; + } + } else { + if (DEBUG) Log.d(TAG, "onPrepareOptionsMenu(android.view.Menu): Calling support method with wrapped native menu."); + final MenuWrapper wrappedMenu = new MenuWrapper(menu); + result = onPrepareOptionsMenu(wrappedMenu); + if (result) { + if (DEBUG) Log.d(TAG, "onPrepareOptionsMenu(android.view.Menu): Dispatching fragment method with wrapped native menu."); + mFragments.dispatchPrepareOptionsMenu(wrappedMenu); + } + } + + if (DEBUG) Log.d(TAG, "onPrepareOptionsMenu(android.view.Menu): Returning " + result); + return result; + } + + /** + * Cause this Activity to be recreated with a new instance. This results in + * essentially the same flow as when the Activity is created due to a + * configuration change -- the current instance will go through its + * lifecycle to onDestroy() and a new instance then created after it. + */ + @Override + public void recreate() { + //This SUCKS! Figure out a way to call the super method and support Android 1.6 + /* + if (IS_HONEYCOMB) { + super.recreate(); + } else { + */ + final Intent intent = getIntent(); + intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); + + startActivity(intent); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR) { + OverridePendingTransition.invoke(this); + } + + finish(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR) { + OverridePendingTransition.invoke(this); + } + /* + } + */ + } + + private static final class OverridePendingTransition { + static void invoke(Activity activity) { + activity.overridePendingTransition(0, 0); + } + } + + /** + * Retain all appropriate fragment and loader state. You can NOT + * override this yourself! Use {@link #onRetainCustomNonConfigurationInstance()} + * if you want to retain your own state. + */ + @Override + public final Object onRetainNonConfigurationInstance() { + if (mStopped) { + doReallyStop(true); + } + + Object custom = onRetainCustomNonConfigurationInstance(); + + ArrayList fragments = mFragments.retainNonConfig(); + boolean retainLoaders = false; + if (mAllLoaderManagers != null) { + // prune out any loader managers that were already stopped and so + // have nothing useful to retain. + for (int i=mAllLoaderManagers.size()-1; i>=0; i--) { + LoaderManagerImpl lm = mAllLoaderManagers.valueAt(i); + if (lm.mRetaining) { + retainLoaders = true; + } else { + lm.doDestroy(); + mAllLoaderManagers.removeAt(i); + } + } + } + if (fragments == null && !retainLoaders && custom == null) { + return null; + } + + NonConfigurationInstances nci = new NonConfigurationInstances(); + nci.activity = null; + nci.custom = custom; + nci.children = null; + nci.fragments = fragments; + nci.loaders = mAllLoaderManagers; + return nci; + } + + /** + * Save all appropriate fragment state. + */ + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + Parcelable p = mFragments.saveAllState(); + if (p != null) { + outState.putParcelable(FRAGMENTS_TAG, p); + } + } + + /** + * Dispatch onStart() to all fragments. Ensure any created loaders are + * now started. + */ + @Override + protected void onStart() { + super.onStart(); + + mStopped = false; + mReallyStopped = false; + mHandler.removeMessages(MSG_REALLY_STOPPED); + + if (!mCreated) { + mCreated = true; + ensureSupportActionBarAttached(); //Needed for retained fragments + mFragments.dispatchActivityCreated(); + } + + mFragments.noteStateNotSaved(); + mFragments.execPendingActions(); + + if (!mLoadersStarted) { + mLoadersStarted = true; + if (mLoaderManager != null) { + mLoaderManager.doStart(); + } else if (!mCheckedForLoaderManager) { + mLoaderManager = getLoaderManager(-1, mLoadersStarted, false); + } + mCheckedForLoaderManager = true; + } + // NOTE: HC onStart goes here. + + mFragments.dispatchStart(); + if (mAllLoaderManagers != null) { + for (int i=mAllLoaderManagers.size()-1; i>=0; i--) { + LoaderManagerImpl lm = mAllLoaderManagers.valueAt(i); + lm.finishRetain(); + lm.doReportStart(); + } + } + } + + /** + * Dispatch onStop() to all fragments. Ensure all loaders are stopped. + */ + @Override + protected void onStop() { + super.onStop(); + + mStopped = true; + mHandler.sendEmptyMessage(MSG_REALLY_STOPPED); + + mFragments.dispatchStop(); + } + + /** + *

Sets the visibility of the indeterminate progress bar in the + * title.

+ * + *

In order for the progress bar to be shown, the feature must be + * requested via {@link #requestWindowFeature(long)}.

+ * + *

This method must be used instead of + * {@link #setProgressBarIndeterminateVisibility(boolean)} for + * ActionBarSherlock. Pass {@link Boolean.TRUE} or + * {@link Boolean.FALSE} to ensure the appropriate one is called.

+ * + * @param visible Whether to show the progress bars in the title. + */ + @Override + public void setProgressBarIndeterminateVisibility(Boolean visible) { + if (IS_HONEYCOMB || (getSupportActionBar() == null)) { + super.setProgressBarIndeterminateVisibility(visible); + } else if ((mWindowFlags & WINDOW_FLAG_INDETERMINANTE_PROGRESS) == WINDOW_FLAG_INDETERMINANTE_PROGRESS) { + ((ActionBarImpl)mActionBar).setProgressBarIndeterminateVisibility(visible); + } + } + + // ------------------------------------------------------------------------ + // NEW METHODS + // ------------------------------------------------------------------------ + + /** + * Use this instead of {@link #onRetainNonConfigurationInstance()}. + * Retrieve later with {@link #getLastCustomNonConfigurationInstance()}. + */ + public Object onRetainCustomNonConfigurationInstance() { + return null; + } + + /** + * Return the value previously returned from + * {@link #onRetainCustomNonConfigurationInstance()}. + */ + public Object getLastCustomNonConfigurationInstance() { + NonConfigurationInstances nc = (NonConfigurationInstances) + getLastNonConfigurationInstance(); + return nc != null ? nc.custom : null; + } + + /** + * @deprecated Use {@link invalidateOptionsMenu}. + */ + @Deprecated + void supportInvalidateOptionsMenu() { + invalidateOptionsMenu(); + } + + /** + * Print the Activity's state into the given stream. This gets invoked if + * you run "adb shell dumpsys activity ". + * + * @param prefix Desired prefix to prepend at each line of output. + * @param fd The raw file descriptor that the dump is being sent to. + * @param writer The PrintWriter to which you should dump your state. This will be + * closed for you after you return. + * @param args additional arguments to the dump request. + */ + @Override + public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) { + if (IS_HONEYCOMB) { + //This can only work if we can call the super-class impl. :/ + //ActivityCompatHoneycomb.dump(this, prefix, fd, writer, args); + } + writer.print(prefix); writer.print("Local FragmentActivity "); + writer.print(Integer.toHexString(System.identityHashCode(this))); + writer.println(" State:"); + String innerPrefix = prefix + " "; + writer.print(innerPrefix); writer.print("mCreated="); + writer.print(mCreated); writer.print("mResumed="); + writer.print(mResumed); writer.print(" mStopped="); + writer.print(mStopped); writer.print(" mReallyStopped="); + writer.println(mReallyStopped); + writer.print(innerPrefix); writer.print("mLoadersStarted="); + writer.println(mLoadersStarted); + if (mLoaderManager != null) { + writer.print(prefix); writer.print("Loader Manager "); + writer.print(Integer.toHexString(System.identityHashCode(mLoaderManager))); + writer.println(":"); + mLoaderManager.dump(prefix + " ", fd, writer, args); + } + mFragments.dump(prefix, fd, writer, args); + } + + void doReallyStop(boolean retaining) { + if (!mReallyStopped) { + mReallyStopped = true; + mRetaining = retaining; + mHandler.removeMessages(MSG_REALLY_STOPPED); + onReallyStop(); + } + } + + /** + * Pre-HC, we didn't have a way to determine whether an activity was + * being stopped for a config change or not until we saw + * onRetainNonConfigurationInstance() called after onStop(). However + * we need to know this, to know whether to retain fragments. This will + * tell us what we need to know. + */ + void onReallyStop() { + if (mLoadersStarted) { + mLoadersStarted = false; + if (mLoaderManager != null) { + if (!mRetaining) { + mLoaderManager.doStop(); + } else { + mLoaderManager.doRetain(); + } + } + } + + mFragments.dispatchReallyStop(); + } + + // ------------------------------------------------------------------------ + // ACTION BAR AND ACTION MODE SUPPORT + // ------------------------------------------------------------------------ + + /** + * Retrieve a reference to this activity's action bar handler. + * + * @return The handler for the appropriate action bar, or null. + */ + @Override + public ActionBar getSupportActionBar() { + return (mActionBar != null) ? mActionBar.getPublicInstance() : null; + } + + /** + * Notifies the activity that an action mode has finished. Activity + * subclasses overriding this method should call the superclass + * implementation. + * + * @param mode The action mode that just finished. + */ + @Override + public void onActionModeFinished(ActionMode mode) { + } + + /** + * Notifies the Activity that an action mode has been started. Activity + * subclasses overriding this method should call the superclass + * implementation. + * + * @param mode The new action mode. + */ + @Override + public void onActionModeStarted(ActionMode mode) { + } + + /** + *

Give the Activity a chance to control the UI for an action mode + * requested by the system.

+ * + *

Note: If you are looking for a notification callback that an action + * mode has been started for this activity, see + * {@link #onActionModeStarted(ActionMode)}.

+ * + * @param callback The callback that should control the new action mode + * @return The new action mode, or null if the activity does not want to + * provide special handling for this action mode. (It will be handled by the + * system.) + */ + @Override + public ActionMode onWindowStartingActionMode(ActionMode.Callback callback) { + return null; + } + + /** + * Start an action mode. + * + * @param callback Callback that will manage lifecycle events for this + * context mode + * @return The ContextMode that was started, or null if it was cancelled + * @see android.support.v4.view.ActionMode + */ + @Override + public final ActionMode startActionMode(final ActionMode.Callback callback) { + //Give the activity override a chance to handle the action mode + ActionMode actionMode = onWindowStartingActionMode(callback); + + if (actionMode == null) { + //If the activity did not handle, send to action bar for platform- + //specific implementation + actionMode = mActionBar.startActionMode(callback); + } + if (actionMode != null) { + //Send the activity callback that our action mode was started + onActionModeStarted(actionMode); + } + + //Return to the caller + return actionMode; + } + + // ------------------------------------------------------------------------ + // FRAGMENT SUPPORT + // ------------------------------------------------------------------------ + + /** + * Called when a fragment is attached to the activity. + */ + @Override + public void onAttachFragment(Fragment fragment) { + } + + /** + * Return the FragmentManager for interacting with fragments associated + * with this activity. + */ + @Override + public FragmentManager getSupportFragmentManager() { + return mFragments; + } + + /** + * Modifies the standard behavior to allow results to be delivered to fragments. + * This imposes a restriction that requestCode be <= 0xffff. + */ + @Override + public void startActivityForResult(Intent intent, int requestCode) { + if (requestCode != -1 && (requestCode&0xffff0000) != 0) { + throw new IllegalArgumentException("Can only use lower 16 bits for requestCode"); + } + super.startActivityForResult(intent, requestCode); + } + + /** + * Called by Fragment.startActivityForResult() to implement its behavior. + */ + @Override + public void startActivityFromFragment(Fragment fragment, Intent intent, + int requestCode) { + if (requestCode == -1) { + super.startActivityForResult(intent, -1); + return; + } + if ((requestCode&0xffff0000) != 0) { + throw new IllegalArgumentException("Can only use lower 16 bits for requestCode"); + } + super.startActivityForResult(intent, ((fragment.mIndex+1)<<16) + (requestCode&0xffff)); + } + + void invalidateSupportFragmentIndex(int index) { + //Log.v(TAG, "invalidateFragmentIndex: index=" + index); + if (mAllLoaderManagers != null) { + LoaderManagerImpl lm = mAllLoaderManagers.get(index); + if (lm != null && !lm.mRetaining) { + lm.doDestroy(); + mAllLoaderManagers.remove(index); + } + } + } + + // ------------------------------------------------------------------------ + // LOADER SUPPORT + // ------------------------------------------------------------------------ + + /** + * Return the LoaderManager for this fragment, creating it if needed. + */ + @Override + public LoaderManager getSupportLoaderManager() { + if (mLoaderManager != null) { + return mLoaderManager; + } + mCheckedForLoaderManager = true; + mLoaderManager = getLoaderManager(-1, mLoadersStarted, true); + return mLoaderManager; + } + + LoaderManagerImpl getLoaderManager(int index, boolean started, boolean create) { + if (mAllLoaderManagers == null) { + mAllLoaderManagers = new HCSparseArray(); + } + LoaderManagerImpl lm = mAllLoaderManagers.get(index); + if (lm == null) { + if (create) { + lm = new LoaderManagerImpl(this, started); + mAllLoaderManagers.put(index, lm); + } + } else { + lm.updateActivity(this); + } + return lm; + } +} diff --git a/actionbarsherlock/pom.xml b/actionbarsherlock/pom.xml new file mode 100644 index 000000000..99c923738 --- /dev/null +++ b/actionbarsherlock/pom.xml @@ -0,0 +1,213 @@ + + + + 4.0.0 + + com.actionbarsherlock + parent + pom + 3.4.2 + + ActionBarSherlock (Parent) + Android library for implementing the action bar design pattern using the native ActionBar on 3.0+ and a custom implementation on pre-3.0 all through the same API. + https://github.com/JakeWharton/ActionBarSherlock + 2011 + + + library + plugins + samples + test + + + + http://github.com/JakeWharton/ActionBarSherlock/ + scm:git:git://github.com/JakeWharton/ActionBarSherlock.git + scm:git:git@github.com:JakeWharton/ActionBarSherlock.git + + + + + Jake Wharton + jakewharton@gmail.com + jakewharton + http://jakewharton.com + -5 + + developer + + + + + + + Apache License Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + repo + + + + + + personal-repository + JakeWharton.com Maven Repository + scp://r.jakewharton.com/home/jakewharton_repository/r.jakewharton.com/maven/release/ + + + personal-repository + JakeWharton.com Maven Repository + scp://r.jakewharton.com/home/jakewharton_repository/r.jakewharton.com/maven/snapshot/ + + + github-project-site + GitHub Project Pages + gitsite:git@github.com/JakeWharton/ActionBarSherlock + + + + + + Jake Wharton + http://jakewharton.com + + + + GitHub Issues + https://github.com/JakeWharton/ActionBarSherlock/issues + + + + UTF-8 + UTF-8 + + actionbarsherlock + + 1.6 + 3.2_r1 + 13 + 13_r1 + + + + + + android + android + ${android.version} + + + + com.google.android.maps + maps + ${android.maps.version} + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 2.3.2 + + ${java.version} + ${java.version} + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.8 + + + + com.jayway.maven.plugins.android.generation2 + android-maven-plugin + 3.0.0-alpha-13 + + + ${android.platform} + + true + + true + + + + org.apache.maven.plugins + maven-checkstyle-plugin + 2.7 + + true + + + + + + + + org.apache.maven.plugins + maven-release-plugin + 2.2.1 + + true + + + + + org.apache.maven.plugins + maven-site-plugin + 2.1 + false + + false + false + ${basedir}/website + + + + + org.apache.maven.plugins + maven-deploy-plugin + 2.7 + + + org.apache.maven.wagon + wagon-ssh + 1.0-beta-7 + + + + + + + + org.apache.maven.scm + maven-scm-provider-gitexe + 1.4 + + + org.apache.maven.scm + maven-scm-manager-plexus + 1.4 + + + org.kathrynhuxtable.maven.wagon + wagon-gitsite + 0.3.1 + + + + diff --git a/actionbarsherlock/samples/README.md b/actionbarsherlock/samples/README.md new file mode 100644 index 000000000..2c461e84f --- /dev/null +++ b/actionbarsherlock/samples/README.md @@ -0,0 +1,13 @@ +ActionBarSherlock Samples +========================= + +See [actionbarsherlock.com/samples.html][1] for information on the samples +contained in this folder as well as a list of open source implementations. + + + + + + + + [1]: http://actionbarsherlock.com/samples.html diff --git a/actionbarsherlock/samples/demos/AndroidManifest.xml b/actionbarsherlock/samples/demos/AndroidManifest.xml new file mode 100644 index 000000000..29102b29a --- /dev/null +++ b/actionbarsherlock/samples/demos/AndroidManifest.xml @@ -0,0 +1,364 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/actionbarsherlock/samples/demos/README.md b/actionbarsherlock/samples/demos/README.md new file mode 100644 index 000000000..a0198bf59 --- /dev/null +++ b/actionbarsherlock/samples/demos/README.md @@ -0,0 +1,13 @@ +ActionBarSherlock Sample: Demos +=============================== + +See [actionbarsherlock.com/samples.html][1] for information on the sample +contained in this folder. + + + + + + + + [1]: http://actionbarsherlock.com/samples.html diff --git a/actionbarsherlock/samples/demos/pom.xml b/actionbarsherlock/samples/demos/pom.xml new file mode 100644 index 000000000..4af0c4f30 --- /dev/null +++ b/actionbarsherlock/samples/demos/pom.xml @@ -0,0 +1,121 @@ + + + + 4.0.0 + + com.actionbarsherlock + sample-demos + Sample: Demos + apk + + + com.actionbarsherlock + parent-sample + 3.4.2 + ../pom.xml + + + + + android + android + provided + + + + com.google.android.maps + maps + provided + + + + com.actionbarsherlock + library + ${project.version} + apklib + + + + com.actionbarsherlock + plugin-maps + ${project.version} + + + + com.actionbarsherlock + plugin-preference + ${project.version} + + + + + src + ${apk.prefix}-${project.artifactId}-unaligned + + + + com.jayway.maven.plugins.android.generation2 + maven-android-plugin + true + + + + org.apache.maven.plugins + maven-javadoc-plugin + + true + + + + + + + + release + + + performRelease + true + + + + + + com.jayway.maven.plugins.android.generation2 + maven-android-plugin + true + + + ${project.build.directory}/${project.build.finalName}.apk + ${project.build.directory}/${apk.prefix}-${project.artifactId}.apk + + + + + alignApk + package + + zipalign + + + + + + + com.jakewharton + github-deploy-maven-plugin + 1.0.1 + + + aligned + + + + deploy + + + + + + + diff --git a/actionbarsherlock/samples/demos/project.properties b/actionbarsherlock/samples/demos/project.properties new file mode 100644 index 000000000..34f549f8c --- /dev/null +++ b/actionbarsherlock/samples/demos/project.properties @@ -0,0 +1,12 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system use, +# "ant.properties", and override values to adapt the script to your +# project structure. + +# Project target. +target=android-13 +android.library.reference.1=../../library diff --git a/actionbarsherlock/samples/demos/res/anim/decelerate_quint.xml b/actionbarsherlock/samples/demos/res/anim/decelerate_quint.xml new file mode 100644 index 000000000..ff2d5a9d0 --- /dev/null +++ b/actionbarsherlock/samples/demos/res/anim/decelerate_quint.xml @@ -0,0 +1,21 @@ + + + + diff --git a/actionbarsherlock/samples/demos/res/anim/fragment_slide_left_enter.xml b/actionbarsherlock/samples/demos/res/anim/fragment_slide_left_enter.xml new file mode 100644 index 000000000..6bbf6a243 --- /dev/null +++ b/actionbarsherlock/samples/demos/res/anim/fragment_slide_left_enter.xml @@ -0,0 +1,23 @@ + + + + + + + diff --git a/actionbarsherlock/samples/demos/res/anim/fragment_slide_left_exit.xml b/actionbarsherlock/samples/demos/res/anim/fragment_slide_left_exit.xml new file mode 100644 index 000000000..0affbc700 --- /dev/null +++ b/actionbarsherlock/samples/demos/res/anim/fragment_slide_left_exit.xml @@ -0,0 +1,23 @@ + + + + + + + diff --git a/actionbarsherlock/samples/demos/res/anim/fragment_slide_right_enter.xml b/actionbarsherlock/samples/demos/res/anim/fragment_slide_right_enter.xml new file mode 100644 index 000000000..e2e116810 --- /dev/null +++ b/actionbarsherlock/samples/demos/res/anim/fragment_slide_right_enter.xml @@ -0,0 +1,23 @@ + + + + + + + diff --git a/actionbarsherlock/samples/demos/res/anim/fragment_slide_right_exit.xml b/actionbarsherlock/samples/demos/res/anim/fragment_slide_right_exit.xml new file mode 100644 index 000000000..c8e6e7c8e --- /dev/null +++ b/actionbarsherlock/samples/demos/res/anim/fragment_slide_right_exit.xml @@ -0,0 +1,23 @@ + + + + + + + diff --git a/actionbarsherlock/samples/demos/res/drawable-hdpi/alert_dialog_icon.png b/actionbarsherlock/samples/demos/res/drawable-hdpi/alert_dialog_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fe54477c925d2d866ed92103c4e8bc8e0d224272 GIT binary patch literal 1321 zcmV+^1=jkBP)bm(E4cg#`DM4;7kob7t-89p(l$VrW!BQt@)F%q zh$HJSkHup7)Z5#8OAv(8HNfq52k|qY^0!!CUj7=pBbB59Sb4Fksw!OIF+jsLTv1U` zS_Z)1SyxwA2;D0MClrLio}M00Nf`jwk;}@;#x*`}tFNz*5MD~c0JsfnZf+*!i_s{E zT?hi$=Wl?=S`~Bz! z^o}8l;xNG9Y{-D4qa&tAuzHfsW(%wRpG+oMJRWDOtE()PN~w(_H8nMjR903py?W@{ z0VE^}=))A(bNx>PPfbm&FD)%STUc0lH8V4#sEtMVAsp!r;WSyX4cqR*#Di+@?(XiU zAlK2IqwCGh&5ziHPbxG*tf{GqI-SnzYin!fV*sEf@KVNAjUX^AmQnur`t#x8p^|6V z0O1LkFc$;Vy1Tmr==T?RHhJngmE+zCAw0FWw@apC00~Q!Bq_?wX=$E>{9uj?5#Irm z48dx@*4;V{>_S4g!VY^(aUm!#!-#Rc;ZCF2Q1nCyXPR9|%R>~W5wA&kS?lT>Fd_&* z-_$yWCIdjcC{Bk=Uj6I^3uD1VE+7W=WfZ4%@*Ta+Pk7V9lkyrsbQejh50(asT}3@0 z&KANO=!$Fz#I3EZHk5y19&Vw-2$^tKh$jho5(@)gC%WJ%R#|W*k-~1~nu;FK2vLX8 zA%xYuVOy08!3SNKbXX5pg6p|`KA&@CWo4ZVL4vwQ%u^5JuCA`m%ag3RZsH}@(9jUp zIq7l1W&h&!dY_~3gbe9fhzw5x7Wy|fHr|0x6=tIZ+zj6_7)h=|-tq`Z#FK!>kIT!; z+XX=krYQnAQ69hrrA`+%9L93NfOPqp7X$PF7-5?47+En=e0Fx0?d|OmrIz82PC7F+ za;%7Vhk(n8`T6JHYAt;8YSPvgb#F4P_FgaLjjtL}NKk-~fB=L)1uTU{r8) zdPmXi4llM!IE4{uo@B*p+2H>X1BoWrfz=x%AF8ar9vA-u82=v6Zz;&mqw#qBp%v9n zA06{?ro;4gCTu3(2G$;c=0C-5Sa0xL{WENK>~z42q~kQ>tg{1IRP-Kw1&`l%?U00000NkvXXu0mjf=;U%8 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/samples/demos/res/drawable-hdpi/ic_compose.png b/actionbarsherlock/samples/demos/res/drawable-hdpi/ic_compose.png new file mode 100644 index 0000000000000000000000000000000000000000..cdb09e4c6eaaaf6ea9e5875cdfcb37f7cf2ed1ce GIT binary patch literal 1390 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+n3Xa^B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPAEg{v+u2}(t{7puX=A(aKG z`a!A1`K3k4z=%sz23b{L-^Aq1JP;qO z-q+X4Gq1QLF)umQ)5TT^Xo6m5W{Q=itD}*Nfw8ltnWLGZp^KY^fvdTbqoKKxi=nfT ztC1^AuSMv>2~2MaLaz%>y`ZF!TL84#CABECEH%ZgC_h&L>}9J=+-`BiX&zK> z3U0SJ;nb@Sbc{YIVv!;mCIn19ASOK70y*%6pPC0u?M1+39mBD~l!1Zqk*AAeNX4x; zGd#TyJBS>QPTrcgWog9P9YUf#3(Ny;UY=ZC&R^HpR8jC#<(^Gdsbz)Wo=Tx3tlf)N zM072>=Jbc(MzKxhT*{`-$`8uEmp$u!?w#4=8Fc-t%ap~6f*(6rQx^v=dTX(RRr6pO z^8>yqJL}G}b#iY~;6JsiVogx>y8lI=JE9$gcd+l(yQLpc9bZ%+VKRA+(nPt;!_W7G zH%)%PIp@;Pr7a7bcFtZ}U3P-2uPM8LVb=jQiHR}`N;kN;t3?-BcSX*-+aPY0USutI zM(*_jm*;E5tu^=Gcd6RIzGw1+K)ts?Z-mb@q&D9vw~2U~aw$>w9sBtOS<2-e{q8P( zz4w&P&M&+EyY9?Hv(No(Mhl#Zud@dDWH1%S_r8n%^K@5M*~ZrgWh~fMv9A`*Kflqj z{FrrDFyrZ!VMTS~+q_fSTTtfA~UfS#^?F6*2UngA9; B_aFcO literal 0 HcmV?d00001 diff --git a/actionbarsherlock/samples/demos/res/drawable-hdpi/ic_magnifying_glass.png b/actionbarsherlock/samples/demos/res/drawable-hdpi/ic_magnifying_glass.png new file mode 100644 index 0000000000000000000000000000000000000000..cdf35185e11af5444c96d62ec8aae629ce377c6c GIT binary patch literal 5093 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 Hu0mjfKRT*J literal 0 HcmV?d00001 diff --git a/actionbarsherlock/samples/demos/res/drawable-hdpi/ic_refresh.png b/actionbarsherlock/samples/demos/res/drawable-hdpi/ic_refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..08c32e09eb8b6a5d368c1d7d5505c2768a96227d GIT binary patch literal 683 zcmV;c0#yBpP)0y=@e07=@i{MrE6@bM09OQi6XI`I(14Ztx~7elCqJqDea|9|BvsG%zW?7 zyj}J%A3tqx_Raj~z3=_M_cmzQ$kK{f@Vd|E-Ug< ze7vhdluNu9Qsm(Z9N|C2d)pt$9c1k8TLyM#2 zkmM_1Q8UGR*#WxPT4Ma!;%hYhO@3{LeDB_&eE?im$YLx-j*5$<#ijkuKv10hG!JgT z19$>kZVN^lL7LhL(8g2K&!0P0Z>`uI+&Z+kvsh0fNEVUdl2oqHl)9Pyn@J_1ZPX9Q z@yOBiJoD7#xh==vQN^fBZT>W=Bs#IAai3Q3;m~)(bi1XBc}>&ab?Kil5f~MOeS=vI zVG)oPHnI`ZS}a8yuXeW_qFv24|8MoXy56cQ@CA&3K5%RxF2nbEuGEg2cFT{T`(OK<$7AQ2 z%1->A>Y6zZ3oh5`P(I0ZI>xIy#3Mwt^#mM%Q{N}5;0Me=U?4CMSl##)U;s$9B>jDB R`#Asr002ovPDHLkV1f^IJ%a!M literal 0 HcmV?d00001 diff --git a/actionbarsherlock/samples/demos/res/drawable-hdpi/ic_search.png b/actionbarsherlock/samples/demos/res/drawable-hdpi/ic_search.png new file mode 100644 index 0000000000000000000000000000000000000000..59de344e755b658e54ecd9d117fad8d63ee10b39 GIT binary patch literal 641 zcmV-{0)G98P)%d+fgDNAgZPMu2Zp-bmPr@eN_vZtbZhm`2B%BEYQh=?ww)he4-X_e{wc*FC| z-`AUFV}5+>Z`ONnzB|8tzu)hTVi-njkZmY7;1&st1cq(H0&|j}LP>!P=zumj0ekdQ zj*&FukvLcZUBlhZK-S0Fws;+=fg{78eS+$51u7mA^$2KzEc4w5*a1y&3sjJ&VJ~p= zm%(O`A>QJi%rQtij9&t8%=j-*2r9%mPF%y|!a8_l=3N9OaG$%0>SOUD_v5By3)EKe#XPX>s*qq2ieV(xP<*qpR8svHcx9cZ*xI*GsG4^gG)W;M!Ex|bR*g2I+8;d z!8Of|eVN^i38|&eKKj8H*VUNzM57|LVKqsD8rP{PRlWYJ zgZn9%cIb*UPz?Lcf}6)#!6H9i+MRclkX~SpgBoq&NHtou>lc;i4QnJY68O&r b{s=Gt9ClaVhD^{i00000NkvXXu0mjfAWrQWzK*Jv?0;Lo80;opQ6P$v~i$y-{$Y!|H||3h%^LZ`pC>*FXKR z6hmR{Dcy0EdJ4tQ{wvJ%Vfs)rNov!l6X8$VR3x;Lg0t@?>#prw!8NTd{AJec=-g0$ zUtb2^Ge>;1jpKZ#MYl2Rd*nNJU2eIx%Cb4lqD34pxMs%rbHp-L9eJHWrylJC_F+oyclqx$^NH^AqtE#d%MJ@5?jytQ73YTQIjpc(aEO`(2b(v_6Cz(s+xp(HEqGtt{pQOXx14t`cof>{sA(^_rS9LhM=#z8 z%D?}(SL{c{>$=Xs53BWF{6D__e5rWwZksI+;=ZbWk$rOa)!)+C-gNOJr!AY(uklYY WleVvVCL#%p83s>RKbLh*2~7ZX5PVz! literal 0 HcmV?d00001 diff --git a/actionbarsherlock/samples/demos/res/drawable-hdpi/icon.png b/actionbarsherlock/samples/demos/res/drawable-hdpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..723fbf062f1172c90596815b7d4e80795683059b GIT binary patch literal 6996 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 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/samples/demos/res/drawable-ldpi/icon.png b/actionbarsherlock/samples/demos/res/drawable-ldpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..181f679f59edb8acdc56bb16130cd35b15d5dc3c GIT binary patch literal 3003 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 HN@xNA^WO+) literal 0 HcmV?d00001 diff --git a/actionbarsherlock/samples/demos/res/drawable-mdpi/ic_search.png b/actionbarsherlock/samples/demos/res/drawable-mdpi/ic_search.png new file mode 100644 index 0000000000000000000000000000000000000000..75339d906896b93ae0af276862f4fbba60d643f7 GIT binary patch literal 1330 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 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/samples/demos/res/drawable/custom_bg.xml b/actionbarsherlock/samples/demos/res/drawable/custom_bg.xml new file mode 100644 index 000000000..f70ec1b96 --- /dev/null +++ b/actionbarsherlock/samples/demos/res/drawable/custom_bg.xml @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/actionbarsherlock/samples/demos/res/drawable/custom_bg_img.png b/actionbarsherlock/samples/demos/res/drawable/custom_bg_img.png new file mode 100644 index 0000000000000000000000000000000000000000..b314821f6481702de93cd191efd9a18df7cf075f GIT binary patch literal 848 zcmV-W1F!svP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_0000PbVXQnLvL+u zWo~o;Lvm$dbY)~9cWHEJAV*0}P*;Ht7XSbPzDYzuR7l5tm0OPEI1ELPMA?cW1hxOg z^(G3XIC^?MYRI-Rz!=C!Y*D^&-eE?DJ4oN zoFYV+;U9gb)H@&PlD6F$Ugy)>=HDPtNlMV6DX%gV*atN{L!4IcM82 z#z+Xk#MD|@YY}6_d(RkyS}Q3f)>@qB`J4PaPeKUn`+igS`Ft$Udr$A35CQGXXhg=A3x%0oeEb_y1Z8fKm!$436UfAf<$eSam93&dIiIXk3iZs;jlq zd*?Wg+q<AmB<$2rI2@u2s96QPx8Y^~J<0X&~iYuUd7y}j_> za~y|J4UltYjA2!4zZ58i3t-MkjPV8&V3mJ9AEQ60s%_g)5!Xj;3L#KywWK0qlwV!b zvC%lKR;Nez584aujVe`(6tq%`Ig)cmL=X}7eW$f%YgLd=hI5YdJgtoyAG9Y5RtUlR zpthG%NGVy+aU6Voec5<8=l-A#Jd8>5JX*Met zR~HppJ%GHKmAs`NMxqtkm&Yt7cQ)~t6qXJU-@|5{z|-EO=0`)v@42ws8E#UTWvTy0kx)hcyJ zV{5H;#9n9kdc8g#4_a$>>-n6sRilBeHTHey{eE+vC(q~8Hrn_72H{nl0vcnyk$mmD auKNe}Rz=O|X?(c=0000 + + + + + + + + + + + + diff --git a/actionbarsherlock/samples/demos/res/layout/fragment_dialog.xml b/actionbarsherlock/samples/demos/res/layout/fragment_dialog.xml new file mode 100644 index 000000000..f9dec5990 --- /dev/null +++ b/actionbarsherlock/samples/demos/res/layout/fragment_dialog.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + diff --git a/actionbarsherlock/samples/demos/res/layout/fragment_dialog_or_activity.xml b/actionbarsherlock/samples/demos/res/layout/fragment_dialog_or_activity.xml new file mode 100644 index 000000000..295f01787 --- /dev/null +++ b/actionbarsherlock/samples/demos/res/layout/fragment_dialog_or_activity.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + diff --git a/actionbarsherlock/samples/demos/res/layout/fragment_hide_show_support.xml b/actionbarsherlock/samples/demos/res/layout/fragment_hide_show_support.xml new file mode 100644 index 000000000..46950eb5b --- /dev/null +++ b/actionbarsherlock/samples/demos/res/layout/fragment_hide_show_support.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + diff --git a/actionbarsherlock/samples/demos/res/layout/fragment_pager_list.xml b/actionbarsherlock/samples/demos/res/layout/fragment_pager_list.xml new file mode 100644 index 000000000..bbe7b1d64 --- /dev/null +++ b/actionbarsherlock/samples/demos/res/layout/fragment_pager_list.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + diff --git a/actionbarsherlock/samples/demos/res/layout/fragment_pagermenus.xml b/actionbarsherlock/samples/demos/res/layout/fragment_pagermenus.xml new file mode 100644 index 000000000..b429b545d --- /dev/null +++ b/actionbarsherlock/samples/demos/res/layout/fragment_pagermenus.xml @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file diff --git a/actionbarsherlock/samples/demos/res/layout/fragment_retain_instance.xml b/actionbarsherlock/samples/demos/res/layout/fragment_retain_instance.xml new file mode 100644 index 000000000..0dc39853f --- /dev/null +++ b/actionbarsherlock/samples/demos/res/layout/fragment_retain_instance.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + diff --git a/actionbarsherlock/samples/demos/res/layout/fragment_stack.xml b/actionbarsherlock/samples/demos/res/layout/fragment_stack.xml new file mode 100644 index 000000000..1d12496ac --- /dev/null +++ b/actionbarsherlock/samples/demos/res/layout/fragment_stack.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + diff --git a/actionbarsherlock/samples/demos/res/layout/fragment_tabs.xml b/actionbarsherlock/samples/demos/res/layout/fragment_tabs.xml new file mode 100644 index 000000000..0fb142cbc --- /dev/null +++ b/actionbarsherlock/samples/demos/res/layout/fragment_tabs.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + diff --git a/actionbarsherlock/samples/demos/res/layout/fragment_tabs_pager.xml b/actionbarsherlock/samples/demos/res/layout/fragment_tabs_pager.xml new file mode 100644 index 000000000..c36cf3c30 --- /dev/null +++ b/actionbarsherlock/samples/demos/res/layout/fragment_tabs_pager.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + diff --git a/actionbarsherlock/samples/demos/res/layout/hello_world.xml b/actionbarsherlock/samples/demos/res/layout/hello_world.xml new file mode 100644 index 000000000..3d90a3351 --- /dev/null +++ b/actionbarsherlock/samples/demos/res/layout/hello_world.xml @@ -0,0 +1,26 @@ + + + + + + + diff --git a/actionbarsherlock/samples/demos/res/layout/labeled_text_edit.xml b/actionbarsherlock/samples/demos/res/layout/labeled_text_edit.xml new file mode 100644 index 000000000..27568afbb --- /dev/null +++ b/actionbarsherlock/samples/demos/res/layout/labeled_text_edit.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + diff --git a/actionbarsherlock/samples/demos/res/layout/list_item_icon_text.xml b/actionbarsherlock/samples/demos/res/layout/list_item_icon_text.xml new file mode 100644 index 000000000..c3825b719 --- /dev/null +++ b/actionbarsherlock/samples/demos/res/layout/list_item_icon_text.xml @@ -0,0 +1,32 @@ + + + + + + + + + + diff --git a/actionbarsherlock/samples/demos/res/layout/local_service_broadcaster.xml b/actionbarsherlock/samples/demos/res/layout/local_service_broadcaster.xml new file mode 100644 index 000000000..f01120dce --- /dev/null +++ b/actionbarsherlock/samples/demos/res/layout/local_service_broadcaster.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + diff --git a/actionbarsherlock/samples/demos/res/layout/receive_result.xml b/actionbarsherlock/samples/demos/res/layout/receive_result.xml new file mode 100644 index 000000000..5deb2ac4a --- /dev/null +++ b/actionbarsherlock/samples/demos/res/layout/receive_result.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + diff --git a/actionbarsherlock/samples/demos/res/layout/send_result.xml b/actionbarsherlock/samples/demos/res/layout/send_result.xml new file mode 100644 index 000000000..bdd927c60 --- /dev/null +++ b/actionbarsherlock/samples/demos/res/layout/send_result.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + diff --git a/actionbarsherlock/samples/demos/res/layout/simple_list_item_checkable_1.xml b/actionbarsherlock/samples/demos/res/layout/simple_list_item_checkable_1.xml new file mode 100644 index 000000000..f04db72ff --- /dev/null +++ b/actionbarsherlock/samples/demos/res/layout/simple_list_item_checkable_1.xml @@ -0,0 +1,29 @@ + + + + + + diff --git a/actionbarsherlock/samples/demos/res/values-v11/styles.xml b/actionbarsherlock/samples/demos/res/values-v11/styles.xml new file mode 100644 index 000000000..04c6f3f72 --- /dev/null +++ b/actionbarsherlock/samples/demos/res/values-v11/styles.xml @@ -0,0 +1,25 @@ + + + + + + + + + + diff --git a/actionbarsherlock/samples/demos/res/values/arrays.xml b/actionbarsherlock/samples/demos/res/values/arrays.xml new file mode 100644 index 000000000..c82b34d34 --- /dev/null +++ b/actionbarsherlock/samples/demos/res/values/arrays.xml @@ -0,0 +1,10 @@ + + + + Home + Email + Calendar + Browser + Clock + + diff --git a/actionbarsherlock/samples/demos/res/values/attrs.xml b/actionbarsherlock/samples/demos/res/values/attrs.xml new file mode 100644 index 000000000..0459aa5d2 --- /dev/null +++ b/actionbarsherlock/samples/demos/res/values/attrs.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + diff --git a/actionbarsherlock/samples/demos/res/values/colors.xml b/actionbarsherlock/samples/demos/res/values/colors.xml new file mode 100644 index 000000000..91061ea6f --- /dev/null +++ b/actionbarsherlock/samples/demos/res/values/colors.xml @@ -0,0 +1,23 @@ + + + + + #7f00 + #770000ff + #7700ff00 + #77ffff00 + #aa000000 + diff --git a/actionbarsherlock/samples/demos/res/values/strings.xml b/actionbarsherlock/samples/demos/res/values/strings.xml new file mode 100644 index 000000000..ae2bd72e4 --- /dev/null +++ b/actionbarsherlock/samples/demos/res/values/strings.xml @@ -0,0 +1,139 @@ + + + + + ABS: Support Demos + + Hello, World! + Hello, ActionBar! + + + Lorem ipsum dolor sit aie consectetur adipiscing\nPlloaso mako nuto + siwuf cakso dodtos anr koop. + + OK + Cancel + + Initial text. + + Pick a result to send, or BACK to cancel. + Corky + Violet + Press the button to get an activity result, which will be displayed here: + Get Result + + + Action Bar/Feature Toggles + Action Bar/List Navigation + Action Bar/Tab Navigation + Action Bar/Tabs and Pager + Action Bar/Overlay + Action Bar/Menu Support + Action Bar/Indeterminate Progress + + Action Bar/Pager + Fragment Menus + Only the selected fragment contributes menu items to the action bar. + + Action Bar/Custom Navigation + If you find that list and tab navigation are not suitable for your application you may replace it with a custom layout. + + Action Bar/Action Item Text + Controlling the display of action item text on phones is as easy as requesting a window feature. See the source code for this activity for specific usage. + + Action Bar/Simple + This is a simple showcase of how easy it is to add the action bar to your activities. Take a look at the source code, it\'s surprisingly simple! + + Action Bar/Sub-menus + This activity is a demonstration of how sub-menus work when they are either an action item or an item in the overflow menu. + + Action Bar/Styles + Dark Theme + Light Theme + Custom Theme + + + Fragment/Alert Dialog + + Fragment/Arguments + Demonstrates a fragment that takes arguments + as a Bundle at runtime (on the right) or from attributes in a layout (on the left). + From Attributes + Landscape Only + + Fragment/Custom Animation + + Fragment/Hide and Show + + Fragment/Context Menu + Fragment populating a context + menu; long press the button to see. + Long press me + + Fragment/Dialog + Show + + Fragment/Dialog or Activity + Demonstrates the same fragment + being shown as a dialog and embedded inside of an activity. + Fragment embedded inside + of the activity: + + Fragment/Layout + + Fragment/List Array + + Fragment/Menu + Build menus from two fragments, allowing + you to hide them to remove them.. + Show fragment 1 menu + Show fragment 2 menu + + Fragment/Retain Instance + Current progress of retained fragment; + restarts if fragment is re-created. + Restart + + Fragment/Receive Result + + Fragment/Stack + New fragment + + Fragment/Tabs + + Fragment/Tabs and Pager + + Fragment/Pager + First + Last + + Fragment/Pager + Menus + Only the selected fragment contributes items to the options menu. + + Fragment/State Pager + + Loader/Cursor + + Loader/Custom + + Loader/Throttle + + Content/Local Service Broadcaster + + Demonstrates use of LocalBroadcastManager + to communicate from a Service to an Activity. + Start Service + Stop Service + diff --git a/actionbarsherlock/samples/demos/res/values/styles.xml b/actionbarsherlock/samples/demos/res/values/styles.xml new file mode 100644 index 000000000..7b0707287 --- /dev/null +++ b/actionbarsherlock/samples/demos/res/values/styles.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/Cheeses.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/Cheeses.java new file mode 100644 index 000000000..8ac4fece6 --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/Cheeses.java @@ -0,0 +1,154 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.actionbarsherlock.sample.demos; + +public class Cheeses { + + public static final String[] sCheeseStrings = { + "Abbaye de Belloc", "Abbaye du Mont des Cats", "Abertam", "Abondance", "Ackawi", + "Acorn", "Adelost", "Affidelice au Chablis", "Afuega'l Pitu", "Airag", "Airedale", + "Aisy Cendre", "Allgauer Emmentaler", "Alverca", "Ambert", "American Cheese", + "Ami du Chambertin", "Anejo Enchilado", "Anneau du Vic-Bilh", "Anthoriro", "Appenzell", + "Aragon", "Ardi Gasna", "Ardrahan", "Armenian String", "Aromes au Gene de Marc", + "Asadero", "Asiago", "Aubisque Pyrenees", "Autun", "Avaxtskyr", "Baby Swiss", + "Babybel", "Baguette Laonnaise", "Bakers", "Baladi", "Balaton", "Bandal", "Banon", + "Barry's Bay Cheddar", "Basing", "Basket Cheese", "Bath Cheese", "Bavarian Bergkase", + "Baylough", "Beaufort", "Beauvoorde", "Beenleigh Blue", "Beer Cheese", "Bel Paese", + "Bergader", "Bergere Bleue", "Berkswell", "Beyaz Peynir", "Bierkase", "Bishop Kennedy", + "Blarney", "Bleu d'Auvergne", "Bleu de Gex", "Bleu de Laqueuille", + "Bleu de Septmoncel", "Bleu Des Causses", "Blue", "Blue Castello", "Blue Rathgore", + "Blue Vein (Australian)", "Blue Vein Cheeses", "Bocconcini", "Bocconcini (Australian)", + "Boeren Leidenkaas", "Bonchester", "Bosworth", "Bougon", "Boule Du Roves", + "Boulette d'Avesnes", "Boursault", "Boursin", "Bouyssou", "Bra", "Braudostur", + "Breakfast Cheese", "Brebis du Lavort", "Brebis du Lochois", "Brebis du Puyfaucon", + "Bresse Bleu", "Brick", "Brie", "Brie de Meaux", "Brie de Melun", "Brillat-Savarin", + "Brin", "Brin d' Amour", "Brin d'Amour", "Brinza (Burduf Brinza)", + "Briquette de Brebis", "Briquette du Forez", "Broccio", "Broccio Demi-Affine", + "Brousse du Rove", "Bruder Basil", "Brusselae Kaas (Fromage de Bruxelles)", "Bryndza", + "Buchette d'Anjou", "Buffalo", "Burgos", "Butte", "Butterkase", "Button (Innes)", + "Buxton Blue", "Cabecou", "Caboc", "Cabrales", "Cachaille", "Caciocavallo", "Caciotta", + "Caerphilly", "Cairnsmore", "Calenzana", "Cambazola", "Camembert de Normandie", + "Canadian Cheddar", "Canestrato", "Cantal", "Caprice des Dieux", "Capricorn Goat", + "Capriole Banon", "Carre de l'Est", "Casciotta di Urbino", "Cashel Blue", "Castellano", + "Castelleno", "Castelmagno", "Castelo Branco", "Castigliano", "Cathelain", + "Celtic Promise", "Cendre d'Olivet", "Cerney", "Chabichou", "Chabichou du Poitou", + "Chabis de Gatine", "Chaource", "Charolais", "Chaumes", "Cheddar", + "Cheddar Clothbound", "Cheshire", "Chevres", "Chevrotin des Aravis", "Chontaleno", + "Civray", "Coeur de Camembert au Calvados", "Coeur de Chevre", "Colby", "Cold Pack", + "Comte", "Coolea", "Cooleney", "Coquetdale", "Corleggy", "Cornish Pepper", + "Cotherstone", "Cotija", "Cottage Cheese", "Cottage Cheese (Australian)", + "Cougar Gold", "Coulommiers", "Coverdale", "Crayeux de Roncq", "Cream Cheese", + "Cream Havarti", "Crema Agria", "Crema Mexicana", "Creme Fraiche", "Crescenza", + "Croghan", "Crottin de Chavignol", "Crottin du Chavignol", "Crowdie", "Crowley", + "Cuajada", "Curd", "Cure Nantais", "Curworthy", "Cwmtawe Pecorino", + "Cypress Grove Chevre", "Danablu (Danish Blue)", "Danbo", "Danish Fontina", + "Daralagjazsky", "Dauphin", "Delice des Fiouves", "Denhany Dorset Drum", "Derby", + "Dessertnyj Belyj", "Devon Blue", "Devon Garland", "Dolcelatte", "Doolin", + "Doppelrhamstufel", "Dorset Blue Vinney", "Double Gloucester", "Double Worcester", + "Dreux a la Feuille", "Dry Jack", "Duddleswell", "Dunbarra", "Dunlop", "Dunsyre Blue", + "Duroblando", "Durrus", "Dutch Mimolette (Commissiekaas)", "Edam", "Edelpilz", + "Emental Grand Cru", "Emlett", "Emmental", "Epoisses de Bourgogne", "Esbareich", + "Esrom", "Etorki", "Evansdale Farmhouse Brie", "Evora De L'Alentejo", "Exmoor Blue", + "Explorateur", "Feta", "Feta (Australian)", "Figue", "Filetta", "Fin-de-Siecle", + "Finlandia Swiss", "Finn", "Fiore Sardo", "Fleur du Maquis", "Flor de Guia", + "Flower Marie", "Folded", "Folded cheese with mint", "Fondant de Brebis", + "Fontainebleau", "Fontal", "Fontina Val d'Aosta", "Formaggio di capra", "Fougerus", + "Four Herb Gouda", "Fourme d' Ambert", "Fourme de Haute Loire", "Fourme de Montbrison", + "Fresh Jack", "Fresh Mozzarella", "Fresh Ricotta", "Fresh Truffles", "Fribourgeois", + "Friesekaas", "Friesian", "Friesla", "Frinault", "Fromage a Raclette", "Fromage Corse", + "Fromage de Montagne de Savoie", "Fromage Frais", "Fruit Cream Cheese", + "Frying Cheese", "Fynbo", "Gabriel", "Galette du Paludier", "Galette Lyonnaise", + "Galloway Goat's Milk Gems", "Gammelost", "Gaperon a l'Ail", "Garrotxa", "Gastanberra", + "Geitost", "Gippsland Blue", "Gjetost", "Gloucester", "Golden Cross", "Gorgonzola", + "Gornyaltajski", "Gospel Green", "Gouda", "Goutu", "Gowrie", "Grabetto", "Graddost", + "Grafton Village Cheddar", "Grana", "Grana Padano", "Grand Vatel", + "Grataron d' Areches", "Gratte-Paille", "Graviera", "Greuilh", "Greve", + "Gris de Lille", "Gruyere", "Gubbeen", "Guerbigny", "Halloumi", + "Halloumy (Australian)", "Haloumi-Style Cheese", "Harbourne Blue", "Havarti", + "Heidi Gruyere", "Hereford Hop", "Herrgardsost", "Herriot Farmhouse", "Herve", + "Hipi Iti", "Hubbardston Blue Cow", "Hushallsost", "Iberico", "Idaho Goatster", + "Idiazabal", "Il Boschetto al Tartufo", "Ile d'Yeu", "Isle of Mull", "Jarlsberg", + "Jermi Tortes", "Jibneh Arabieh", "Jindi Brie", "Jubilee Blue", "Juustoleipa", + "Kadchgall", "Kaseri", "Kashta", "Kefalotyri", "Kenafa", "Kernhem", "Kervella Affine", + "Kikorangi", "King Island Cape Wickham Brie", "King River Gold", "Klosterkaese", + "Knockalara", "Kugelkase", "L'Aveyronnais", "L'Ecir de l'Aubrac", "La Taupiniere", + "La Vache Qui Rit", "Laguiole", "Lairobell", "Lajta", "Lanark Blue", "Lancashire", + "Langres", "Lappi", "Laruns", "Lavistown", "Le Brin", "Le Fium Orbo", "Le Lacandou", + "Le Roule", "Leafield", "Lebbene", "Leerdammer", "Leicester", "Leyden", "Limburger", + "Lincolnshire Poacher", "Lingot Saint Bousquet d'Orb", "Liptauer", "Little Rydings", + "Livarot", "Llanboidy", "Llanglofan Farmhouse", "Loch Arthur Farmhouse", + "Loddiswell Avondale", "Longhorn", "Lou Palou", "Lou Pevre", "Lyonnais", "Maasdam", + "Macconais", "Mahoe Aged Gouda", "Mahon", "Malvern", "Mamirolle", "Manchego", + "Manouri", "Manur", "Marble Cheddar", "Marbled Cheeses", "Maredsous", "Margotin", + "Maribo", "Maroilles", "Mascares", "Mascarpone", "Mascarpone (Australian)", + "Mascarpone Torta", "Matocq", "Maytag Blue", "Meira", "Menallack Farmhouse", + "Menonita", "Meredith Blue", "Mesost", "Metton (Cancoillotte)", "Meyer Vintage Gouda", + "Mihalic Peynir", "Milleens", "Mimolette", "Mine-Gabhar", "Mini Baby Bells", "Mixte", + "Molbo", "Monastery Cheeses", "Mondseer", "Mont D'or Lyonnais", "Montasio", + "Monterey Jack", "Monterey Jack Dry", "Morbier", "Morbier Cru de Montagne", + "Mothais a la Feuille", "Mozzarella", "Mozzarella (Australian)", + "Mozzarella di Bufala", "Mozzarella Fresh, in water", "Mozzarella Rolls", "Munster", + "Murol", "Mycella", "Myzithra", "Naboulsi", "Nantais", "Neufchatel", + "Neufchatel (Australian)", "Niolo", "Nokkelost", "Northumberland", "Oaxaca", + "Olde York", "Olivet au Foin", "Olivet Bleu", "Olivet Cendre", + "Orkney Extra Mature Cheddar", "Orla", "Oschtjepka", "Ossau Fermier", "Ossau-Iraty", + "Oszczypek", "Oxford Blue", "P'tit Berrichon", "Palet de Babligny", "Paneer", "Panela", + "Pannerone", "Pant ys Gawn", "Parmesan (Parmigiano)", "Parmigiano Reggiano", + "Pas de l'Escalette", "Passendale", "Pasteurized Processed", "Pate de Fromage", + "Patefine Fort", "Pave d'Affinois", "Pave d'Auge", "Pave de Chirac", "Pave du Berry", + "Pecorino", "Pecorino in Walnut Leaves", "Pecorino Romano", "Peekskill Pyramid", + "Pelardon des Cevennes", "Pelardon des Corbieres", "Penamellera", "Penbryn", + "Pencarreg", "Perail de Brebis", "Petit Morin", "Petit Pardou", "Petit-Suisse", + "Picodon de Chevre", "Picos de Europa", "Piora", "Pithtviers au Foin", + "Plateau de Herve", "Plymouth Cheese", "Podhalanski", "Poivre d'Ane", "Polkolbin", + "Pont l'Eveque", "Port Nicholson", "Port-Salut", "Postel", "Pouligny-Saint-Pierre", + "Pourly", "Prastost", "Pressato", "Prince-Jean", "Processed Cheddar", "Provolone", + "Provolone (Australian)", "Pyengana Cheddar", "Pyramide", "Quark", + "Quark (Australian)", "Quartirolo Lombardo", "Quatre-Vents", "Quercy Petit", + "Queso Blanco", "Queso Blanco con Frutas --Pina y Mango", "Queso de Murcia", + "Queso del Montsec", "Queso del Tietar", "Queso Fresco", "Queso Fresco (Adobera)", + "Queso Iberico", "Queso Jalapeno", "Queso Majorero", "Queso Media Luna", + "Queso Para Frier", "Queso Quesadilla", "Rabacal", "Raclette", "Ragusano", "Raschera", + "Reblochon", "Red Leicester", "Regal de la Dombes", "Reggianito", "Remedou", + "Requeson", "Richelieu", "Ricotta", "Ricotta (Australian)", "Ricotta Salata", "Ridder", + "Rigotte", "Rocamadour", "Rollot", "Romano", "Romans Part Dieu", "Roncal", "Roquefort", + "Roule", "Rouleau De Beaulieu", "Royalp Tilsit", "Rubens", "Rustinu", "Saaland Pfarr", + "Saanenkaese", "Saga", "Sage Derby", "Sainte Maure", "Saint-Marcellin", + "Saint-Nectaire", "Saint-Paulin", "Salers", "Samso", "San Simon", "Sancerre", + "Sap Sago", "Sardo", "Sardo Egyptian", "Sbrinz", "Scamorza", "Schabzieger", "Schloss", + "Selles sur Cher", "Selva", "Serat", "Seriously Strong Cheddar", "Serra da Estrela", + "Sharpam", "Shelburne Cheddar", "Shropshire Blue", "Siraz", "Sirene", "Smoked Gouda", + "Somerset Brie", "Sonoma Jack", "Sottocenare al Tartufo", "Soumaintrain", + "Sourire Lozerien", "Spenwood", "Sraffordshire Organic", "St. Agur Blue Cheese", + "Stilton", "Stinking Bishop", "String", "Sussex Slipcote", "Sveciaost", "Swaledale", + "Sweet Style Swiss", "Swiss", "Syrian (Armenian String)", "Tala", "Taleggio", "Tamie", + "Tasmania Highland Chevre Log", "Taupiniere", "Teifi", "Telemea", "Testouri", + "Tete de Moine", "Tetilla", "Texas Goat Cheese", "Tibet", "Tillamook Cheddar", + "Tilsit", "Timboon Brie", "Toma", "Tomme Brulee", "Tomme d'Abondance", + "Tomme de Chevre", "Tomme de Romans", "Tomme de Savoie", "Tomme des Chouans", "Tommes", + "Torta del Casar", "Toscanello", "Touree de L'Aubier", "Tourmalet", + "Trappe (Veritable)", "Trois Cornes De Vendee", "Tronchon", "Trou du Cru", "Truffe", + "Tupi", "Turunmaa", "Tymsboro", "Tyn Grug", "Tyning", "Ubriaco", "Ulloa", + "Vacherin-Fribourgeois", "Valencay", "Vasterbottenost", "Venaco", "Vendomois", + "Vieux Corse", "Vignotte", "Vulscombe", "Waimata Farmhouse Blue", + "Washed Rind Cheese (Australian)", "Waterloo", "Weichkaese", "Wellington", + "Wensleydale", "White Stilton", "Whitestone Farmhouse", "Wigmore", "Woodside Cabecou", + "Xanadu", "Xynotyro", "Yarg Cornish", "Yarra Valley Pyramid", "Yorkshire Blue", + "Zamorano", "Zanetti Grana Padano", "Zanetti Parmigiano Reggiano" + }; + +} diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/Shakespeare.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/Shakespeare.java new file mode 100644 index 000000000..8efa492bc --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/Shakespeare.java @@ -0,0 +1,223 @@ +package com.actionbarsherlock.sample.demos; + +public final class Shakespeare { + /** + * Our data, part 1. + */ + public static final String[] TITLES = + { + "Henry IV (1)", + "Henry V", + "Henry VIII", + "Richard II", + "Richard III", + "Merchant of Venice", + "Othello", + "King Lear" + }; + + /** + * Our data, part 2. + */ + public static final String[] DIALOGUE = + { + "So shaken as we are, so wan with care," + + "Find we a time for frighted peace to pant," + + "And breathe short-winded accents of new broils" + + "To be commenced in strands afar remote." + + "No more the thirsty entrance of this soil" + + "Shall daub her lips with her own children's blood;" + + "Nor more shall trenching war channel her fields," + + "Nor bruise her flowerets with the armed hoofs" + + "Of hostile paces: those opposed eyes," + + "Which, like the meteors of a troubled heaven," + + "All of one nature, of one substance bred," + + "Did lately meet in the intestine shock" + + "And furious close of civil butchery" + + "Shall now, in mutual well-beseeming ranks," + + "March all one way and be no more opposed" + + "Against acquaintance, kindred and allies:" + + "The edge of war, like an ill-sheathed knife," + + "No more shall cut his master. Therefore, friends," + + "As far as to the sepulchre of Christ," + + "Whose soldier now, under whose blessed cross" + + "We are impressed and engaged to fight," + + "Forthwith a power of English shall we levy;" + + "Whose arms were moulded in their mothers' womb" + + "To chase these pagans in those holy fields" + + "Over whose acres walk'd those blessed feet" + + "Which fourteen hundred years ago were nail'd" + + "For our advantage on the bitter cross." + + "But this our purpose now is twelve month old," + + "And bootless 'tis to tell you we will go:" + + "Therefore we meet not now. Then let me hear" + + "Of you, my gentle cousin Westmoreland," + + "What yesternight our council did decree" + + "In forwarding this dear expedience.", + + "Hear him but reason in divinity," + + "And all-admiring with an inward wish" + + "You would desire the king were made a prelate:" + + "Hear him debate of commonwealth affairs," + + "You would say it hath been all in all his study:" + + "List his discourse of war, and you shall hear" + + "A fearful battle render'd you in music:" + + "Turn him to any cause of policy," + + "The Gordian knot of it he will unloose," + + "Familiar as his garter: that, when he speaks," + + "The air, a charter'd libertine, is still," + + "And the mute wonder lurketh in men's ears," + + "To steal his sweet and honey'd sentences;" + + "So that the art and practic part of life" + + "Must be the mistress to this theoric:" + + "Which is a wonder how his grace should glean it," + + "Since his addiction was to courses vain," + + "His companies unletter'd, rude and shallow," + + "His hours fill'd up with riots, banquets, sports," + + "And never noted in him any study," + + "Any retirement, any sequestration" + + "From open haunts and popularity.", + + "I come no more to make you laugh: things now," + + "That bear a weighty and a serious brow," + + "Sad, high, and working, full of state and woe," + + "Such noble scenes as draw the eye to flow," + + "We now present. Those that can pity, here" + + "May, if they think it well, let fall a tear;" + + "The subject will deserve it. Such as give" + + "Their money out of hope they may believe," + + "May here find truth too. Those that come to see" + + "Only a show or two, and so agree" + + "The play may pass, if they be still and willing," + + "I'll undertake may see away their shilling" + + "Richly in two short hours. Only they" + + "That come to hear a merry bawdy play," + + "A noise of targets, or to see a fellow" + + "In a long motley coat guarded with yellow," + + "Will be deceived; for, gentle hearers, know," + + "To rank our chosen truth with such a show" + + "As fool and fight is, beside forfeiting" + + "Our own brains, and the opinion that we bring," + + "To make that only true we now intend," + + "Will leave us never an understanding friend." + + "Therefore, for goodness' sake, and as you are known" + + "The first and happiest hearers of the town," + + "Be sad, as we would make ye: think ye see" + + "The very persons of our noble story" + + "As they were living; think you see them great," + + "And follow'd with the general throng and sweat" + + "Of thousand friends; then in a moment, see" + + "How soon this mightiness meets misery:" + + "And, if you can be merry then, I'll say" + + "A man may weep upon his wedding-day.", + + "First, heaven be the record to my speech!" + + "In the devotion of a subject's love," + + "Tendering the precious safety of my prince," + + "And free from other misbegotten hate," + + "Come I appellant to this princely presence." + + "Now, Thomas Mowbray, do I turn to thee," + + "And mark my greeting well; for what I speak" + + "My body shall make good upon this earth," + + "Or my divine soul answer it in heaven." + + "Thou art a traitor and a miscreant," + + "Too good to be so and too bad to live," + + "Since the more fair and crystal is the sky," + + "The uglier seem the clouds that in it fly." + + "Once more, the more to aggravate the note," + + "With a foul traitor's name stuff I thy throat;" + + "And wish, so please my sovereign, ere I move," + + "What my tongue speaks my right drawn sword may prove.", + + "Now is the winter of our discontent" + + "Made glorious summer by this sun of York;" + + "And all the clouds that lour'd upon our house" + + "In the deep bosom of the ocean buried." + + "Now are our brows bound with victorious wreaths;" + + "Our bruised arms hung up for monuments;" + + "Our stern alarums changed to merry meetings," + + "Our dreadful marches to delightful measures." + + "Grim-visaged war hath smooth'd his wrinkled front;" + + "And now, instead of mounting barded steeds" + + "To fright the souls of fearful adversaries," + + "He capers nimbly in a lady's chamber" + + "To the lascivious pleasing of a lute." + + "But I, that am not shaped for sportive tricks," + + "Nor made to court an amorous looking-glass;" + + "I, that am rudely stamp'd, and want love's majesty" + + "To strut before a wanton ambling nymph;" + + "I, that am curtail'd of this fair proportion," + + "Cheated of feature by dissembling nature," + + "Deformed, unfinish'd, sent before my time" + + "Into this breathing world, scarce half made up," + + "And that so lamely and unfashionable" + + "That dogs bark at me as I halt by them;" + + "Why, I, in this weak piping time of peace," + + "Have no delight to pass away the time," + + "Unless to spy my shadow in the sun" + + "And descant on mine own deformity:" + + "And therefore, since I cannot prove a lover," + + "To entertain these fair well-spoken days," + + "I am determined to prove a villain" + + "And hate the idle pleasures of these days." + + "Plots have I laid, inductions dangerous," + + "By drunken prophecies, libels and dreams," + + "To set my brother Clarence and the king" + + "In deadly hate the one against the other:" + + "And if King Edward be as true and just" + + "As I am subtle, false and treacherous," + + "This day should Clarence closely be mew'd up," + + "About a prophecy, which says that 'G'" + + "Of Edward's heirs the murderer shall be." + + "Dive, thoughts, down to my soul: here" + + "Clarence comes.", + + "To bait fish withal: if it will feed nothing else," + + "it will feed my revenge. He hath disgraced me, and" + + "hindered me half a million; laughed at my losses," + + "mocked at my gains, scorned my nation, thwarted my" + + "bargains, cooled my friends, heated mine" + + "enemies; and what's his reason? I am a Jew. Hath" + + "not a Jew eyes? hath not a Jew hands, organs," + + "dimensions, senses, affections, passions? fed with" + + "the same food, hurt with the same weapons, subject" + + "to the same diseases, healed by the same means," + + "warmed and cooled by the same winter and summer, as" + + "a Christian is? If you prick us, do we not bleed?" + + "if you tickle us, do we not laugh? if you poison" + + "us, do we not die? and if you wrong us, shall we not" + + "revenge? If we are like you in the rest, we will" + + "resemble you in that. If a Jew wrong a Christian," + + "what is his humility? Revenge. If a Christian" + + "wrong a Jew, what should his sufferance be by" + + "Christian example? Why, revenge. The villany you" + + "teach me, I will execute, and it shall go hard but I" + + "will better the instruction.", + + "Virtue! a fig! 'tis in ourselves that we are thus" + + "or thus. Our bodies are our gardens, to the which" + + "our wills are gardeners: so that if we will plant" + + "nettles, or sow lettuce, set hyssop and weed up" + + "thyme, supply it with one gender of herbs, or" + + "distract it with many, either to have it sterile" + + "with idleness, or manured with industry, why, the" + + "power and corrigible authority of this lies in our" + + "wills. If the balance of our lives had not one" + + "scale of reason to poise another of sensuality, the" + + "blood and baseness of our natures would conduct us" + + "to most preposterous conclusions: but we have" + + "reason to cool our raging motions, our carnal" + + "stings, our unbitted lusts, whereof I take this that" + + "you call love to be a sect or scion.", + + "Blow, winds, and crack your cheeks! rage! blow!" + + "You cataracts and hurricanoes, spout" + + "Till you have drench'd our steeples, drown'd the cocks!" + + "You sulphurous and thought-executing fires," + + "Vaunt-couriers to oak-cleaving thunderbolts," + + "Singe my white head! And thou, all-shaking thunder," + + "Smite flat the thick rotundity o' the world!" + + "Crack nature's moulds, an germens spill at once," + + "That make ingrateful man!" + }; +} diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/Support4Demos.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/Support4Demos.java new file mode 100644 index 000000000..597ce3774 --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/Support4Demos.java @@ -0,0 +1,149 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.actionbarsherlock.sample.demos; + +import android.app.ListActivity; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.os.Bundle; +import android.view.View; +import android.widget.ListView; +import android.widget.SimpleAdapter; + +import java.text.Collator; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class Support4Demos extends ListActivity { + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + Intent intent = getIntent(); + String path = intent.getStringExtra("com.example.android.apis.Path"); + + if (path == null) { + path = ""; + } + + setListAdapter(new SimpleAdapter(this, getData(path), + android.R.layout.simple_list_item_1, new String[] { "title" }, + new int[] { android.R.id.text1 })); + getListView().setTextFilterEnabled(true); + } + + protected List> getData(String prefix) { + List> myData = new ArrayList>(); + + Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); + mainIntent.addCategory("com.actionbarsherlock.sample.demos.SUPPORT4_SAMPLE_CODE"); + + PackageManager pm = getPackageManager(); + List list = pm.queryIntentActivities(mainIntent, 0); + + if (null == list) + return myData; + + String[] prefixPath; + String prefixWithSlash = prefix; + + if (prefix.equals("")) { + prefixPath = null; + } else { + prefixPath = prefix.split("/"); + prefixWithSlash = prefix + "/"; + } + + int len = list.size(); + + Map entries = new HashMap(); + + for (int i = 0; i < len; i++) { + ResolveInfo info = list.get(i); + CharSequence labelSeq = info.loadLabel(pm); + String label = labelSeq != null + ? labelSeq.toString() + : info.activityInfo.name; + + if (prefixWithSlash.length() == 0 || label.startsWith(prefixWithSlash)) { + + String[] labelPath = label.split("/"); + + String nextLabel = prefixPath == null ? labelPath[0] : labelPath[prefixPath.length]; + + if ((prefixPath != null ? prefixPath.length : 0) == labelPath.length - 1) { + addItem(myData, nextLabel, activityIntent( + info.activityInfo.applicationInfo.packageName, + info.activityInfo.name)); + } else { + if (entries.get(nextLabel) == null) { + addItem(myData, nextLabel, browseIntent(prefix.equals("") ? nextLabel : prefix + "/" + nextLabel)); + entries.put(nextLabel, true); + } + } + } + } + + Collections.sort(myData, sDisplayNameComparator); + + return myData; + } + + private final static Comparator> sDisplayNameComparator = + new Comparator>() { + private final Collator collator = Collator.getInstance(); + + public int compare(Map map1, Map map2) { + return collator.compare(map1.get("title"), map2.get("title")); + } + }; + + protected Intent activityIntent(String pkg, String componentName) { + Intent result = new Intent(); + result.setClassName(pkg, componentName); + return result; + } + + protected Intent browseIntent(String path) { + Intent result = new Intent(); + result.setClass(this, Support4Demos.class); + result.putExtra("com.example.android.apis.Path", path); + return result; + } + + protected void addItem(List> data, String name, Intent intent) { + Map temp = new HashMap(); + temp.put("title", name); + temp.put("intent", intent); + data.add(temp); + } + + @Override + @SuppressWarnings("unchecked") + protected void onListItemClick(ListView l, View v, int position, long id) { + Map map = (Map)l.getItemAtPosition(position); + + Intent intent = (Intent) map.get("intent"); + startActivity(intent); + } +} diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarActionItemText.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarActionItemText.java new file mode 100644 index 000000000..69e635dc5 --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarActionItemText.java @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2011 Jake Wharton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.actionbarsherlock.sample.demos.app; + +import android.os.Bundle; +import android.support.v4.app.FragmentActivity; +import android.support.v4.view.Menu; +import android.support.v4.view.MenuItem; +import android.support.v4.view.Window; +import android.widget.TextView; + +import com.actionbarsherlock.sample.demos.R; + +public class ActionBarActionItemText extends FragmentActivity { + @Override + public boolean onCreateOptionsMenu(Menu menu) { + menu.add("Text") + .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT); + + menu.add("Text") + .setIcon(R.drawable.ic_title_share_default) + .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT); + + return super.onCreateOptionsMenu(menu); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + requestWindowFeature(Window.FEATURE_ACTION_BAR_ITEM_TEXT); + setContentView(R.layout.actionbar_text); + ((TextView)findViewById(R.id.text)).setText(R.string.actionbar_actionitemtext_content); + } +} diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarCustomNavigation.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarCustomNavigation.java new file mode 100644 index 000000000..32602aeab --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarCustomNavigation.java @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2011 Jake Wharton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.actionbarsherlock.sample.demos.app; + +import android.os.Bundle; +import android.support.v4.app.FragmentActivity; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.RadioGroup; +import android.widget.Toast; +import android.widget.RadioGroup.OnCheckedChangeListener; +import android.widget.TextView; +import com.actionbarsherlock.sample.demos.R; + +public class ActionBarCustomNavigation extends FragmentActivity { + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.actionbar_text); + ((TextView)findViewById(R.id.text)).setText(R.string.actionbar_customnavigation_content); + + //Inflate the custom view + View customNav = LayoutInflater.from(this).inflate(R.layout.actionbar_custom_view, null); + + //Bind to its state change + ((RadioGroup)customNav.findViewById(R.id.radio_nav)).setOnCheckedChangeListener(new OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + Toast.makeText(ActionBarCustomNavigation.this, "Navigation selection changed.", Toast.LENGTH_SHORT).show(); + } + }); + + //Attach to the action bar + getSupportActionBar().setCustomView(customNav); + getSupportActionBar().setDisplayShowCustomEnabled(true); + } +} diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarFeatureToggles.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarFeatureToggles.java new file mode 100644 index 000000000..74ed640b2 --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarFeatureToggles.java @@ -0,0 +1,254 @@ +package com.actionbarsherlock.sample.demos.app; + +import java.util.Random; +import com.actionbarsherlock.sample.demos.R; +import android.os.Bundle; +import android.support.v4.app.ActionBar; +import android.support.v4.app.FragmentActivity; +import android.support.v4.view.Menu; +import android.support.v4.view.MenuItem; +import android.support.v4.view.Window; +import android.view.View; +import android.widget.ArrayAdapter; +import android.widget.Button; + +public class ActionBarFeatureToggles extends FragmentActivity { + private static final Random RANDOM = new Random(); + + private int items = 0; + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + for (int i = 0; i < items; i++) { + menu.add("Text") + .setIcon(R.drawable.ic_title_share_default) + .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT); + } + + return super.onCreateOptionsMenu(menu); + } + + @Override + public void onCreate(Bundle savedInstanceState) { + requestWindowFeature(Window.FEATURE_PROGRESS); + requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); + super.onCreate(savedInstanceState); + + setContentView(R.layout.actionbar_feature_toggles_activity); + setProgressBarIndeterminateVisibility(Boolean.FALSE); + setProgressBarVisibility(false); + + getSupportActionBar().setCustomView(R.layout.actionbar_custom_view); + getSupportActionBar().setDisplayShowCustomEnabled(false); + getSupportActionBar().setDisplayShowHomeEnabled(false); + + ArrayAdapter listAdapter = ArrayAdapter.createFromResource(this, R.array.locations, R.layout.abs__simple_spinner_item); + listAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + getSupportActionBar().setListNavigationCallbacks(listAdapter, null); + + findViewById(R.id.display_progress_show).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + setProgressBarVisibility(true); + setProgressBarIndeterminateVisibility(Boolean.FALSE); + setProgress(RANDOM.nextInt(8000) + 10); + } + }); + findViewById(R.id.display_progress_hide).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + setProgressBarVisibility(false); + } + }); + findViewById(R.id.display_iprogress_show).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + setProgressBarIndeterminateVisibility(Boolean.TRUE); + //Hack to hide the regular progress bar + setProgress(0); + } + }); + findViewById(R.id.display_iprogress_hide).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + setProgressBarIndeterminateVisibility(Boolean.FALSE); + } + }); + + findViewById(R.id.display_items_clear).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + items = 0; + invalidateOptionsMenu(); + } + }); + findViewById(R.id.display_items_add).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + items += 1; + invalidateOptionsMenu(); + } + }); + + findViewById(R.id.display_subtitle_show).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + getSupportActionBar().setSubtitle("The quick brown fox jumps over the lazy dog."); + } + }); + findViewById(R.id.display_subtitle_hide).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + getSupportActionBar().setSubtitle(null); + } + }); + + findViewById(R.id.display_title_show).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + getSupportActionBar().setDisplayShowTitleEnabled(true); + } + }); + findViewById(R.id.display_title_hide).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + getSupportActionBar().setDisplayShowTitleEnabled(false); + } + }); + + findViewById(R.id.display_custom_show).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + getSupportActionBar().setDisplayShowCustomEnabled(true); + } + }); + findViewById(R.id.display_custom_hide).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + getSupportActionBar().setDisplayShowCustomEnabled(false); + } + }); + + findViewById(R.id.navigation_standard).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); + } + }); + findViewById(R.id.navigation_list).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); + } + }); + findViewById(R.id.navigation_tabs).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); + } + }); + + findViewById(R.id.display_home_as_up_show).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + } + }); + findViewById(R.id.display_home_as_up_hide).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + getSupportActionBar().setDisplayHomeAsUpEnabled(false); + } + }); + + findViewById(R.id.display_logo_show).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + getSupportActionBar().setDisplayUseLogoEnabled(true); + } + }); + findViewById(R.id.display_logo_hide).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + getSupportActionBar().setDisplayUseLogoEnabled(false); + } + }); + + findViewById(R.id.display_home_show).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + getSupportActionBar().setDisplayShowHomeEnabled(true); + } + }); + findViewById(R.id.display_home_hide).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + getSupportActionBar().setDisplayShowHomeEnabled(false); + } + }); + + findViewById(R.id.display_actionbar_show).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + getSupportActionBar().show(); + } + }); + findViewById(R.id.display_actionbar_hide).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + getSupportActionBar().hide(); + } + }); + + Button tabAdd = (Button)findViewById(R.id.display_tab_add); + tabAdd.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + ActionBar.Tab newTab = getSupportActionBar().newTab(); + + if (RANDOM.nextBoolean()) { + newTab.setCustomView(R.layout.actionbar_tab_custom_view); + } else { + boolean icon = RANDOM.nextBoolean(); + if (icon) { + newTab.setIcon(R.drawable.ic_title_share_default); + } + if (!icon || RANDOM.nextBoolean()) { + newTab.setText("Text!"); + } + } + + getSupportActionBar().addTab(newTab); + } + }); + //Add some tabs + tabAdd.performClick(); + tabAdd.performClick(); + tabAdd.performClick(); + + findViewById(R.id.display_tab_select).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if (getSupportActionBar().getTabCount() > 0) { + getSupportActionBar().selectTab( + getSupportActionBar().getTabAt( + RANDOM.nextInt(getSupportActionBar().getTabCount()) + ) + ); + } + } + }); + findViewById(R.id.display_tab_remove).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + getSupportActionBar().removeTabAt(getSupportActionBar().getTabCount() - 1); + } + }); + findViewById(R.id.display_tab_remove_all).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + getSupportActionBar().removeAllTabs(); + } + }); + } +} \ No newline at end of file diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarIndeterminateProgress.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarIndeterminateProgress.java new file mode 100644 index 000000000..f4e288c2d --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarIndeterminateProgress.java @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2011 Jake Wharton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.actionbarsherlock.sample.demos.app; + +import android.os.Bundle; +import android.support.v4.app.FragmentActivity; +import android.support.v4.view.Window; +import android.view.View; +import com.actionbarsherlock.sample.demos.R; + +public class ActionBarIndeterminateProgress extends FragmentActivity { + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + //This has to be called before setContentView and you must use the + //class in android.support.v4.view and NOT android.view + requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); + + setContentView(R.layout.actionbar_iprogress); + setProgressBarIndeterminateVisibility(Boolean.FALSE); + + + //Bind to the buttons which enable and disable the progress spinner. + //Notice how we *MUST* pass TRUE/FALSE objects rather than the native + //true/false values. + findViewById(R.id.enable).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View arg0) { + setProgressBarIndeterminateVisibility(Boolean.TRUE); + } + }); + findViewById(R.id.disable).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View arg0) { + setProgressBarIndeterminateVisibility(Boolean.FALSE); + } + }); + } +} diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarListNavigation.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarListNavigation.java new file mode 100644 index 000000000..74caf8cd1 --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarListNavigation.java @@ -0,0 +1,37 @@ +package com.actionbarsherlock.sample.demos.app; + +import com.actionbarsherlock.sample.demos.R; +import android.os.Bundle; +import android.support.v4.app.ActionBar; +import android.support.v4.app.FragmentActivity; +import android.widget.ArrayAdapter; + +public class ActionBarListNavigation extends FragmentActivity implements ActionBar.OnNavigationListener { + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + //WARNING: This should normally not be needed as calling setContentView + //or attaching a fragment to android.R.id.content will call this. In + //this case, however, we call it manually since initializing the list + //navigation will trigger a navigation changed callback and thus attach + //the default fragment as the content. + ensureSupportActionBarAttached(); + + + getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); + + ArrayAdapter list = ArrayAdapter.createFromResource(this, R.array.locations, R.layout.abs__simple_spinner_item); + list.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + getSupportActionBar().setListNavigationCallbacks(list, this); + } + + @Override + public boolean onNavigationItemSelected(int itemPosition, long itemId) { + getSupportFragmentManager() + .beginTransaction() + .replace(android.R.id.content, FragmentStackSupport.CountingFragment.newInstance(itemPosition)) + .commit(); + return true; + } +} diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarMenuSupport.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarMenuSupport.java new file mode 100644 index 000000000..15e9ae76f --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarMenuSupport.java @@ -0,0 +1,141 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * Copyright (C) 2011 Jake Wharton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.actionbarsherlock.sample.demos.app; + +import com.actionbarsherlock.sample.demos.R; + +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentTransaction; +import android.support.v4.view.Menu; +import android.support.v4.view.MenuItem; + +import android.os.Bundle; +import android.view.MenuInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.CheckBox; + +/** + * Demonstrates how fragments can participate in the options menu. + */ +public class ActionBarMenuSupport extends FragmentActivity { + Fragment mFragment1; + Fragment mFragment2; + CheckBox mCheckBox1; + CheckBox mCheckBox2; + + // Update fragment visibility when check boxes are changed. + final OnClickListener mClickListener = new OnClickListener() { + public void onClick(View v) { + updateFragmentVisibility(); + } + }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.fragment_menu); + + // Make sure the two menu fragments are created. + FragmentManager fm = getSupportFragmentManager(); + FragmentTransaction ft = fm.beginTransaction(); + mFragment1 = fm.findFragmentByTag("f1"); + if (mFragment1 == null) { + mFragment1 = new MenuFragment(); + ft.add(mFragment1, "f1"); + } + mFragment2 = fm.findFragmentByTag("f2"); + if (mFragment2 == null) { + mFragment2 = new Menu2Fragment(); + ft.add(mFragment2, "f2"); + } + ft.commit(); + + // Watch check box clicks. + mCheckBox1 = (CheckBox)findViewById(R.id.menu1); + mCheckBox1.setOnClickListener(mClickListener); + mCheckBox2 = (CheckBox)findViewById(R.id.menu2); + mCheckBox2.setOnClickListener(mClickListener); + + // Make sure fragments start out with correct visibility. + updateFragmentVisibility(); + } + + @Override + protected void onRestoreInstanceState(Bundle savedInstanceState) { + super.onRestoreInstanceState(savedInstanceState); + // Make sure fragments are updated after check box view state is restored. + updateFragmentVisibility(); + } + + // Update fragment visibility based on current check box state. + void updateFragmentVisibility() { + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + if (mCheckBox1.isChecked()) ft.show(mFragment1); + else ft.hide(mFragment1); + if (mCheckBox2.isChecked()) ft.show(mFragment2); + else ft.hide(mFragment2); + ft.commit(); + } + + /** + * A fragment that displays a menu. This fragment happens to not + * have a UI (it does not implement onCreateView), but it could also + * have one if it wanted. + */ + public static class MenuFragment extends Fragment { + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setHasOptionsMenu(true); + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + menu.add("Menu 1a") + .setIcon(R.drawable.ic_title_share_default) + .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); + + menu.add("Menu 1b") + .setIcon(R.drawable.ic_title_share_default) + .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); + } + } + + /** + * Second fragment with a menu. + */ + public static class Menu2Fragment extends Fragment { + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setHasOptionsMenu(true); + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + menu.add("Menu 2") + .setIcon(R.drawable.ic_title_share_default) + .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); + } + } +} diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarOverlay.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarOverlay.java new file mode 100644 index 000000000..250f95bf0 --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarOverlay.java @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2011 Jake Wharton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.actionbarsherlock.sample.demos.app; + +import android.os.Bundle; +import android.support.v4.app.FragmentActivity; +import android.support.v4.view.Window; +import android.widget.TextView; +import com.actionbarsherlock.sample.demos.Shakespeare; +import com.actionbarsherlock.sample.demos.R; + +public class ActionBarOverlay extends FragmentActivity { + @Override + protected void onCreate(Bundle savedInstanceState) { + requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY); + super.onCreate(savedInstanceState); + setContentView(R.layout.actionbar_overlay); + + //Load partially transparent black background + getSupportActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.ab_bg_black)); + + StringBuilder builder = new StringBuilder(); + for (int i = 0; i < 3; i++) { + for (String dialog : Shakespeare.DIALOGUE) { + builder.append(dialog).append("\n\n"); + } + } + + TextView bunchOfText = (TextView)findViewById(R.id.bunch_of_text); + bunchOfText.setText(builder.toString()); + } +} diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarPagerFragmentMenus.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarPagerFragmentMenus.java new file mode 100644 index 000000000..a8376e1d1 --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarPagerFragmentMenus.java @@ -0,0 +1,98 @@ +package com.actionbarsherlock.sample.demos.app; + +import java.util.Random; +import com.actionbarsherlock.sample.demos.R; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentPagerAdapter; +import android.support.v4.view.Menu; +import android.support.v4.view.MenuItem; +import android.support.v4.view.ViewPager; +import android.support.v4.view.Window; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.MenuInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +public class ActionBarPagerFragmentMenus extends FragmentActivity { + private static final Random RANDOM = new Random(); + private static final int PAGES = 10; + private static final int MENU_ITEM_RANDOM = 1; + + private ViewPager mPager; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + requestWindowFeature(Window.FEATURE_ACTION_BAR_ITEM_TEXT); + + setContentView(R.layout.actionbar_pagerfragmentmenus); + mPager = (ViewPager)findViewById(R.id.pager); + mPager.setAdapter(new TestAdapter(getSupportFragmentManager())); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + menu.add(0, MENU_ITEM_RANDOM, 0, "Random"); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId() == MENU_ITEM_RANDOM) { + mPager.setCurrentItem(RANDOM.nextInt(PAGES)); + return true; + } + return super.onOptionsItemSelected(item); + } + + static final class TestAdapter extends FragmentPagerAdapter { + public TestAdapter(FragmentManager fm) { + super(fm); + } + + @Override + public int getCount() { + return PAGES; + } + + @Override + public Fragment getItem(int position) { + TestFragment f = new TestFragment(); + f.text = String.valueOf(position + 1); + return f; + } + } + + public static class TestFragment extends Fragment { + String text = "???"; + + public TestFragment() { + setRetainInstance(true); + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setHasOptionsMenu(true); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + TextView tv = new TextView(getActivity()); + tv.setGravity(Gravity.CENTER); + tv.setTextSize(50); + tv.setText(text); + return tv; + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + menu.add(text).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT); + } + } +} diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarSimple.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarSimple.java new file mode 100644 index 000000000..7baafe13d --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarSimple.java @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2011 Jake Wharton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.actionbarsherlock.sample.demos.app; + +import android.os.Bundle; +import android.support.v4.app.FragmentActivity; +import android.widget.TextView; +import com.actionbarsherlock.sample.demos.R; + +public class ActionBarSimple extends FragmentActivity { + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.actionbar_text); + ((TextView)findViewById(R.id.text)).setText(R.string.actionbar_simple_content); + } +} diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarStyles.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarStyles.java new file mode 100644 index 000000000..e744d8a94 --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarStyles.java @@ -0,0 +1,60 @@ +package com.actionbarsherlock.sample.demos.app; + +import com.actionbarsherlock.sample.demos.R; +import android.os.Bundle; +import android.support.v4.app.FragmentActivity; +import android.support.v4.view.Menu; +import android.support.v4.view.MenuItem; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.Button; + +public class ActionBarStyles extends FragmentActivity { + private static int THEME = R.style.Theme_Sherlock; + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + menu.add("Save") + .setIcon(R.drawable.ic_compose) + .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); + + menu.add("Search") + .setIcon(R.drawable.ic_search) + .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); + + menu.add("Refresh") + .setIcon(R.drawable.ic_refresh) + .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); + + return super.onCreateOptionsMenu(menu); + } + + @Override + public void onCreate(Bundle savedInstanceState) { + setTheme(THEME); + super.onCreate(savedInstanceState); + setContentView(R.layout.actionbar_styles); + + ((Button)findViewById(R.id.theme_dark)).setOnClickListener(new OnClickListener() { + @Override + public void onClick(View arg0) { + THEME = R.style.Theme_Sherlock; + recreate(); + } + }); + ((Button)findViewById(R.id.theme_light)).setOnClickListener(new OnClickListener() { + @Override + public void onClick(View arg0) { + THEME = R.style.Theme_Sherlock_Light; + recreate(); + } + }); + ((Button)findViewById(R.id.theme_custom)).setOnClickListener(new OnClickListener() { + @Override + public void onClick(View arg0) { + THEME = R.style.Theme_SherlockCustom; + recreate(); + } + }); + } +} diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarSubMenus.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarSubMenus.java new file mode 100644 index 000000000..5f5e19c6f --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarSubMenus.java @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2011 Jake Wharton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.actionbarsherlock.sample.demos.app; + +import android.os.Bundle; +import android.support.v4.app.FragmentActivity; +import android.support.v4.view.Menu; +import android.support.v4.view.MenuItem; +import android.support.v4.view.SubMenu; +import android.widget.TextView; + +import com.actionbarsherlock.sample.demos.R; + +public class ActionBarSubMenus extends FragmentActivity { + @Override + public boolean onCreateOptionsMenu(Menu menu) { + + SubMenu subMenu1 = menu.addSubMenu("Action Item"); + subMenu1.add("Sample"); + subMenu1.add("Menu"); + subMenu1.add("Items"); + + MenuItem subMenu1Item = subMenu1.getItem(); + subMenu1Item.setIcon(R.drawable.ic_title_share_default); + subMenu1Item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT); + + SubMenu subMenu2 = menu.addSubMenu("Overflow Item"); + subMenu2.add("These"); + subMenu2.add("Are"); + subMenu2.add("Sample"); + subMenu2.add("Items"); + + MenuItem subMenu2Item = subMenu2.getItem(); + subMenu2Item.setIcon(R.drawable.ic_compose); + + return super.onCreateOptionsMenu(menu); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.actionbar_text); + ((TextView)findViewById(R.id.text)).setText(R.string.actionbar_submenus_content); + } +} diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarTabNavigation.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarTabNavigation.java new file mode 100644 index 000000000..18d99661e --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarTabNavigation.java @@ -0,0 +1,43 @@ +package com.actionbarsherlock.sample.demos.app; + +import android.os.Bundle; +import android.support.v4.app.ActionBar; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentTransaction; +import android.support.v4.app.ActionBar.Tab; + +public class ActionBarTabNavigation extends FragmentActivity implements ActionBar.TabListener { + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + getSupportFragmentManager() + .beginTransaction() + .add(android.R.id.content, FragmentStackSupport.CountingFragment.newInstance(0)) + .commit(); + + getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); + for (int i = 0; i < 3; i++) { + ActionBar.Tab tab = getSupportActionBar().newTab(); + tab.setText("Tab " + i); + tab.setTabListener(this); + getSupportActionBar().addTab(tab); + } + } + + @Override + public void onTabReselected(Tab tab, FragmentTransaction ft) { + } + + @Override + public void onTabSelected(Tab tab, FragmentTransaction ft) { + getSupportFragmentManager() + .beginTransaction() + .replace(android.R.id.content, FragmentStackSupport.CountingFragment.newInstance(tab.getPosition())) + .commit(); + } + + @Override + public void onTabUnselected(Tab tab, FragmentTransaction ft) { + } +} diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarTabsPager.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarTabsPager.java new file mode 100644 index 000000000..caf0dd546 --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarTabsPager.java @@ -0,0 +1,145 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * Copyright (C) 2011 Jake Wharton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.actionbarsherlock.sample.demos.app; + +import java.util.ArrayList; +import com.actionbarsherlock.sample.demos.R; +import android.content.Context; +import android.os.Build; +import android.os.Bundle; +import android.support.v4.app.ActionBar; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentPagerAdapter; +import android.support.v4.app.FragmentTransaction; +import android.support.v4.app.ActionBar.Tab; +import android.support.v4.view.ViewPager; + +/** + * Demonstrates combining the action bar with a ViewPager to implement a tab UI + * that switches between tabs and also allows the user to perform horizontal + * flicks to move between the tabs. + */ +public class ActionBarTabsPager extends FragmentActivity { + ViewPager mViewPager; + TabsAdapter mTabsAdapter; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.actionbar_tabs_pager); + getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); + + ActionBar.Tab tab1 = getSupportActionBar().newTab().setText("Tab 1"); + ActionBar.Tab tab2 = getSupportActionBar().newTab().setText("Tab 2"); + ActionBar.Tab tab3 = getSupportActionBar().newTab().setText("Tab 3"); + ActionBar.Tab tab4 = getSupportActionBar().newTab().setText("Tab 4"); + + mViewPager = (ViewPager)findViewById(R.id.pager); + mTabsAdapter = new TabsAdapter(this, getSupportActionBar(), mViewPager); + mTabsAdapter.addTab(tab1, FragmentStackSupport.CountingFragment.class); + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ECLAIR) { + mTabsAdapter.addTab(tab2, FragmentStackSupport.CountingFragment.class); + mTabsAdapter.addTab(tab3, FragmentStackSupport.CountingFragment.class); + mTabsAdapter.addTab(tab4, FragmentStackSupport.CountingFragment.class); + } else { + mTabsAdapter.addTab(tab2, LoaderCursorSupport.CursorLoaderListFragment.class); + mTabsAdapter.addTab(tab3, LoaderCustomSupport.AppListFragment.class); + mTabsAdapter.addTab(tab4, LoaderThrottleSupport.ThrottledLoaderListFragment.class); + } + + if (savedInstanceState != null) { + getSupportActionBar().setSelectedNavigationItem(savedInstanceState.getInt("index")); + } + } + + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putInt("index", getSupportActionBar().getSelectedNavigationIndex()); + } + + /** + * This is a helper class that implements the management of tabs and all + * details of connecting a ViewPager with associated TabHost. It relies on a + * trick. Normally a tab host has a simple API for supplying a View or + * Intent that each tab will show. This is not sufficient for switching + * between pages. So instead we make the content part of the tab host + * 0dp high (it is not shown) and the TabsAdapter supplies its own dummy + * view to show as the tab content. It listens to changes in tabs, and takes + * care of switch to the correct paged in the ViewPager whenever the selected + * tab changes. + */ + public static class TabsAdapter extends FragmentPagerAdapter implements ViewPager.OnPageChangeListener, ActionBar.TabListener { + private final Context mContext; + private final ActionBar mActionBar; + private final ViewPager mViewPager; + private final ArrayList mTabs = new ArrayList(); + + public TabsAdapter(FragmentActivity activity, ActionBar actionBar, ViewPager pager) { + super(activity.getSupportFragmentManager()); + mContext = activity; + mActionBar = actionBar; + mViewPager = pager; + mViewPager.setAdapter(this); + mViewPager.setOnPageChangeListener(this); + } + + public void addTab(ActionBar.Tab tab, Class clss) { + mTabs.add(clss.getName()); + mActionBar.addTab(tab.setTabListener(this)); + notifyDataSetChanged(); + } + + @Override + public int getCount() { + return mTabs.size(); + } + + @Override + public Fragment getItem(int position) { + return Fragment.instantiate(mContext, mTabs.get(position), null); + } + + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + } + + @Override + public void onPageSelected(int position) { + mActionBar.setSelectedNavigationItem(position); + } + + @Override + public void onPageScrollStateChanged(int state) { + } + + @Override + public void onTabSelected(Tab tab, FragmentTransaction ft) { + mViewPager.setCurrentItem(tab.getPosition()); + } + + @Override + public void onTabReselected(Tab tab, FragmentTransaction ft) { + } + + @Override + public void onTabUnselected(Tab tab, FragmentTransaction ft) { + } + } +} diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentAlertDialogSupport.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentAlertDialogSupport.java new file mode 100644 index 000000000..bbf410782 --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentAlertDialogSupport.java @@ -0,0 +1,110 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.actionbarsherlock.sample.demos.app; + +import com.actionbarsherlock.sample.demos.R; + +import android.support.v4.app.DialogFragment; +import android.support.v4.app.FragmentActivity; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.DialogInterface; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.Button; +import android.widget.TextView; + +/** + * Demonstrates how to show an AlertDialog that is managed by a Fragment. + */ +public class FragmentAlertDialogSupport extends FragmentActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.fragment_dialog); + + View tv = findViewById(R.id.text); + ((TextView)tv).setText("Example of displaying an alert dialog with a DialogFragment"); + + // Watch for button clicks. + Button button = (Button)findViewById(R.id.show); + button.setOnClickListener(new OnClickListener() { + public void onClick(View v) { + showDialog(); + } + }); + } + + + void showDialog() { + DialogFragment newFragment = MyAlertDialogFragment.newInstance( + R.string.alert_dialog_two_buttons_title); + newFragment.show(getSupportFragmentManager(), "dialog"); + } + + public void doPositiveClick() { + // Do stuff here. + Log.i("FragmentAlertDialog", "Positive click!"); + } + + public void doNegativeClick() { + // Do stuff here. + Log.i("FragmentAlertDialog", "Negative click!"); + } + + + + public static class MyAlertDialogFragment extends DialogFragment { + + public static MyAlertDialogFragment newInstance(int title) { + MyAlertDialogFragment frag = new MyAlertDialogFragment(); + Bundle args = new Bundle(); + args.putInt("title", title); + frag.setArguments(args); + return frag; + } + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + int title = getArguments().getInt("title"); + + return new AlertDialog.Builder(getActivity()) + .setIcon(R.drawable.alert_dialog_icon) + .setTitle(title) + .setPositiveButton(R.string.alert_dialog_ok, + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int whichButton) { + ((FragmentAlertDialogSupport)getActivity()).doPositiveClick(); + } + } + ) + .setNegativeButton(R.string.alert_dialog_cancel, + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int whichButton) { + ((FragmentAlertDialogSupport)getActivity()).doNegativeClick(); + } + } + ) + .create(); + } + } + +} diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentArgumentsSupport.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentArgumentsSupport.java new file mode 100644 index 000000000..2d6f67ee5 --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentArgumentsSupport.java @@ -0,0 +1,111 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.actionbarsherlock.sample.demos.app; + +import android.content.res.TypedArray; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentTransaction; +import android.support.v4.app.SupportActivity; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; +import com.actionbarsherlock.sample.demos.R; + +/** + * Demonstrates a fragment that can be configured through both Bundle arguments + * and layout attributes. + */ +public class FragmentArgumentsSupport extends FragmentActivity { + + @Override protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.fragment_arguments_support); + + if (savedInstanceState == null) { + // First-time init; create fragment to embed in activity. + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + Fragment newFragment = MyFragment.newInstance("From Arguments"); + ft.add(R.id.created, newFragment); + ft.commit(); + } + } + + + + public static class MyFragment extends Fragment { + CharSequence mLabel; + + /** + * Create a new instance of MyFragment that will be initialized + * with the given arguments. + */ + static MyFragment newInstance(CharSequence label) { + MyFragment f = new MyFragment(); + Bundle b = new Bundle(); + b.putCharSequence("label", label); + f.setArguments(b); + return f; + } + + /** + * Parse attributes during inflation from a view hierarchy into the + * arguments we handle. + */ + @Override public void onInflate(SupportActivity activity, AttributeSet attrs, + Bundle savedInstanceState) { + super.onInflate(activity, attrs, savedInstanceState); + + TypedArray a = activity.obtainStyledAttributes(attrs, + R.styleable.FragmentArguments); + mLabel = a.getText(R.styleable.FragmentArguments_android_label); + a.recycle(); + } + + /** + * During creation, if arguments have been supplied to the fragment + * then parse those out. + */ + @Override public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + Bundle args = getArguments(); + if (args != null) { + CharSequence label = args.getCharSequence("label"); + if (label != null) { + mLabel = label; + } + } + } + + /** + * Create the view for this fragment, using the arguments given to it. + */ + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View v = inflater.inflate(R.layout.hello_world, container, false); + View tv = v.findViewById(R.id.text); + ((TextView)tv).setText(mLabel != null ? mLabel : "(no label)"); + tv.setBackgroundDrawable(getResources().getDrawable(android.R.drawable.gallery_thumb)); + return v; + } + } + +} diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentContextMenuSupport.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentContextMenuSupport.java new file mode 100644 index 000000000..5519c7616 --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentContextMenuSupport.java @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.actionbarsherlock.sample.demos.app; + +import com.actionbarsherlock.sample.demos.R; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.view.Menu; +import android.support.v4.view.MenuItem; +import android.util.Log; +import android.view.ContextMenu; +import android.view.ContextMenu.ContextMenuInfo; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +/** + * Demonstration of displaying a context menu from a fragment. + */ +public class FragmentContextMenuSupport extends FragmentActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // Create the list fragment and add it as our sole content. + ContextMenuFragment content = new ContextMenuFragment(); + getSupportFragmentManager().beginTransaction().add( + android.R.id.content, content).commit(); + } + + public static class ContextMenuFragment extends Fragment { + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View root = inflater.inflate(R.layout.fragment_context_menu, container, false); + registerForContextMenu(root.findViewById(R.id.long_press)); + return root; + } + + @Override + public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { + super.onCreateContextMenu(menu, v, menuInfo); + menu.add(Menu.NONE, 1, Menu.NONE, "Menu A"); + menu.add(Menu.NONE, 2, Menu.NONE, "Menu B"); + } + + @Override + public boolean onContextItemSelected(MenuItem item) { + switch (item.getItemId()) { + case 1: + Log.i("ContextMenu", "Item 1a was chosen"); + return true; + case 2: + Log.i("ContextMenu", "Item 1b was chosen"); + return true; + } + return super.onContextItemSelected(item); + } + } +} diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentCustomAnimationSupport.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentCustomAnimationSupport.java new file mode 100644 index 000000000..aa6941b08 --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentCustomAnimationSupport.java @@ -0,0 +1,128 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.actionbarsherlock.sample.demos.app; + +import com.actionbarsherlock.sample.demos.R; + +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentTransaction; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.View.OnClickListener; +import android.widget.Button; +import android.widget.TextView; + +public class FragmentCustomAnimationSupport extends FragmentActivity { + int mStackLevel = 1; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.fragment_stack); + + // Watch for button clicks. + Button button = (Button)findViewById(R.id.new_fragment); + button.setOnClickListener(new OnClickListener() { + public void onClick(View v) { + addFragmentToStack(); + } + }); + + if (savedInstanceState == null) { + // Do first time initialization -- add initial fragment. + Fragment newFragment = CountingFragment.newInstance(mStackLevel); + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + ft.add(R.id.simple_fragment, newFragment).commit(); + } else { + mStackLevel = savedInstanceState.getInt("level"); + } + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putInt("level", mStackLevel); + } + + + void addFragmentToStack() { + mStackLevel++; + + // Instantiate a new fragment. + Fragment newFragment = CountingFragment.newInstance(mStackLevel); + + // Add the fragment to the activity, pushing this transaction + // on to the back stack. + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + ft.setCustomAnimations(R.anim.fragment_slide_left_enter, + R.anim.fragment_slide_left_exit, + R.anim.fragment_slide_right_enter, + R.anim.fragment_slide_right_exit); + ft.replace(R.id.simple_fragment, newFragment); + ft.addToBackStack(null); + ft.commit(); + } + + + + public static class CountingFragment extends Fragment { + int mNum; + + /** + * Create a new instance of CountingFragment, providing "num" + * as an argument. + */ + static CountingFragment newInstance(int num) { + CountingFragment f = new CountingFragment(); + + // Supply num input as an argument. + Bundle args = new Bundle(); + args.putInt("num", num); + f.setArguments(args); + + return f; + } + + /** + * When creating, retrieve this instance's number from its arguments. + */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mNum = getArguments() != null ? getArguments().getInt("num") : 1; + } + + /** + * The Fragment's UI is just a simple text view showing its + * instance number. + */ + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View v = inflater.inflate(R.layout.hello_world, container, false); + View tv = v.findViewById(R.id.text); + ((TextView)tv).setText("Fragment #" + mNum); + tv.setBackgroundDrawable(getResources().getDrawable(android.R.drawable.gallery_thumb)); + return v; + } + } + +} diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentDialogOrActivitySupport.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentDialogOrActivitySupport.java new file mode 100644 index 000000000..57e977e67 --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentDialogOrActivitySupport.java @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.actionbarsherlock.sample.demos.app; + +import com.actionbarsherlock.sample.demos.R; + +import android.os.Bundle; +import android.support.v4.app.DialogFragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentTransaction; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.TextView; + +public class FragmentDialogOrActivitySupport extends FragmentActivity { + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.fragment_dialog_or_activity); + + if (savedInstanceState == null) { + // First-time init; create fragment to embed in activity. + + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + DialogFragment newFragment = MyDialogFragment.newInstance(); + ft.add(R.id.embedded, newFragment); + ft.commit(); + + } + + // Watch for button clicks. + Button button = (Button)findViewById(R.id.show_dialog); + button.setOnClickListener(new OnClickListener() { + public void onClick(View v) { + showDialog(); + } + }); + } + + + void showDialog() { + // Create the fragment and show it as a dialog. + DialogFragment newFragment = MyDialogFragment.newInstance(); + newFragment.show(getSupportFragmentManager(), "dialog"); + } + + + + public static class MyDialogFragment extends DialogFragment { + static MyDialogFragment newInstance() { + return new MyDialogFragment(); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View v = inflater.inflate(R.layout.hello_world, container, false); + View tv = v.findViewById(R.id.text); + ((TextView)tv).setText("This is an instance of MyDialogFragment"); + return v; + } + } + +} diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentDialogSupport.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentDialogSupport.java new file mode 100644 index 000000000..fbabe2751 --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentDialogSupport.java @@ -0,0 +1,168 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.actionbarsherlock.sample.demos.app; + +import com.actionbarsherlock.sample.demos.R; + +import android.support.v4.app.DialogFragment; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentTransaction; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.TextView; + +public class FragmentDialogSupport extends FragmentActivity { + int mStackLevel = 0; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.fragment_dialog); + + View tv = findViewById(R.id.text); + ((TextView)tv).setText("Example of displaying dialogs with a DialogFragment. " + + "Press the show button below to see the first dialog; pressing " + + "successive show buttons will display other dialog styles as a " + + "stack, with dismissing or back going to the previous dialog."); + + // Watch for button clicks. + Button button = (Button)findViewById(R.id.show); + button.setOnClickListener(new OnClickListener() { + public void onClick(View v) { + showDialog(); + } + }); + + if (savedInstanceState != null) { + mStackLevel = savedInstanceState.getInt("level"); + } + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putInt("level", mStackLevel); + } + + + void showDialog() { + mStackLevel++; + + // DialogFragment.show() will take care of adding the fragment + // in a transaction. We also want to remove any currently showing + // dialog, so make our own transaction and take care of that here. + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + Fragment prev = getSupportFragmentManager().findFragmentByTag("dialog"); + if (prev != null) { + ft.remove(prev); + } + ft.addToBackStack(null); + + // Create and show the dialog. + DialogFragment newFragment = MyDialogFragment.newInstance(mStackLevel); + newFragment.show(ft, "dialog"); + } + + + static String getNameForNum(int num) { + switch ((num-1)%6) { + case 1: return "STYLE_NO_TITLE"; + case 2: return "STYLE_NO_FRAME"; + case 3: return "STYLE_NO_INPUT (this window can't receive input, so " + + "you will need to press the bottom show button)"; + case 4: return "STYLE_NORMAL with dark fullscreen theme"; + case 5: return "STYLE_NORMAL with light theme"; + case 6: return "STYLE_NO_TITLE with light theme"; + case 7: return "STYLE_NO_FRAME with light theme"; + case 8: return "STYLE_NORMAL with light fullscreen theme"; + } + return "STYLE_NORMAL"; + } + + + public static class MyDialogFragment extends DialogFragment { + int mNum; + + /** + * Create a new instance of MyDialogFragment, providing "num" + * as an argument. + */ + static MyDialogFragment newInstance(int num) { + MyDialogFragment f = new MyDialogFragment(); + + // Supply num input as an argument. + Bundle args = new Bundle(); + args.putInt("num", num); + f.setArguments(args); + + return f; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mNum = getArguments().getInt("num"); + + // Pick a style based on the num. + int style = DialogFragment.STYLE_NORMAL, theme = 0; + switch ((mNum-1)%6) { + case 1: style = DialogFragment.STYLE_NO_TITLE; break; + case 2: style = DialogFragment.STYLE_NO_FRAME; break; + case 3: style = DialogFragment.STYLE_NO_INPUT; break; + case 4: style = DialogFragment.STYLE_NORMAL; break; + case 5: style = DialogFragment.STYLE_NO_TITLE; break; + case 6: style = DialogFragment.STYLE_NO_FRAME; break; + case 7: style = DialogFragment.STYLE_NORMAL; break; + } + switch ((mNum-1)%6) { + case 2: theme = android.R.style.Theme_Panel; break; + case 4: theme = android.R.style.Theme; break; + case 5: theme = android.R.style.Theme_Light; break; + case 6: theme = android.R.style.Theme_Light_Panel; break; + case 7: theme = android.R.style.Theme_Light; break; + } + setStyle(style, theme); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View v = inflater.inflate(R.layout.fragment_dialog, container, false); + View tv = v.findViewById(R.id.text); + ((TextView)tv).setText("Dialog #" + mNum + ": using style " + + getNameForNum(mNum)); + + // Watch for button clicks. + Button button = (Button)v.findViewById(R.id.show); + button.setOnClickListener(new OnClickListener() { + public void onClick(View v) { + // When button is clicked, call up to owning activity. + ((FragmentDialogSupport)getActivity()).showDialog(); + } + }); + + return v; + } + } + +} diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentHideShowSupport.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentHideShowSupport.java new file mode 100644 index 000000000..c7b6f48cb --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentHideShowSupport.java @@ -0,0 +1,114 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.actionbarsherlock.sample.demos.app; + +import com.actionbarsherlock.sample.demos.R; + +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentTransaction; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.View.OnClickListener; +import android.widget.Button; +import android.widget.TextView; + +/** + * Demonstration of hiding and showing fragments. + */ +public class FragmentHideShowSupport extends FragmentActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.fragment_hide_show_support); + + // The content view embeds two fragments; now retrieve them and attach + // their "hide" button. + FragmentManager fm = getSupportFragmentManager(); + addShowHideListener(R.id.frag1hide, fm.findFragmentById(R.id.fragment1)); + addShowHideListener(R.id.frag2hide, fm.findFragmentById(R.id.fragment2)); + } + + void addShowHideListener(int buttonId, final Fragment fragment) { + final Button button = (Button)findViewById(buttonId); + button.setOnClickListener(new OnClickListener() { + public void onClick(View v) { + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + ft.setCustomAnimations(android.R.anim.fade_in, + android.R.anim.fade_out); + if (fragment.isHidden()) { + ft.show(fragment); + button.setText("Hide"); + } else { + ft.hide(fragment); + button.setText("Show"); + } + ft.commit(); + } + }); + } + + public static class FirstFragment extends Fragment { + TextView mTextView; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View v = inflater.inflate(R.layout.labeled_text_edit, container, false); + View tv = v.findViewById(R.id.msg); + ((TextView)tv).setText("The fragment saves and restores this text."); + + // Retrieve the text editor, and restore the last saved state if needed. + mTextView = (TextView)v.findViewById(R.id.saved); + if (savedInstanceState != null) { + mTextView.setText(savedInstanceState.getCharSequence("text")); + } + return v; + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + + // Remember the current text, to restore if we later restart. + outState.putCharSequence("text", mTextView.getText()); + } + } + + public static class SecondFragment extends Fragment { + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View v = inflater.inflate(R.layout.labeled_text_edit, container, false); + View tv = v.findViewById(R.id.msg); + ((TextView)tv).setText("The TextView saves and restores this text."); + + // Retrieve the text editor and tell it to save and restore its state. + // Note that you will often set this in the layout XML, but since + // we are sharing our layout with the other fragment we will customize + // it here. + ((TextView)v.findViewById(R.id.saved)).setSaveEnabled(true); + return v; + } + } +} diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentLayoutSupport.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentLayoutSupport.java new file mode 100644 index 000000000..e3355796e --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentLayoutSupport.java @@ -0,0 +1,223 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.actionbarsherlock.sample.demos.app; + +import com.actionbarsherlock.sample.demos.Shakespeare; +import com.actionbarsherlock.sample.demos.R; + +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentTransaction; +import android.support.v4.app.ListFragment; + +import android.content.Intent; +import android.content.res.Configuration; +import android.os.Bundle; +import android.util.TypedValue; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ListView; +import android.widget.ScrollView; +import android.widget.TextView; + +/** + * Demonstration of using fragments to implement different activity layouts. + * This sample provides a different layout (and activity flow) when run in + * landscape. + */ +public class FragmentLayoutSupport extends FragmentActivity { + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.fragment_layout_support); + } + + + /** + * This is a secondary activity, to show what the user has selected + * when the screen is not large enough to show it all in one activity. + */ + + public static class DetailsActivity extends FragmentActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + if (getResources().getConfiguration().orientation + == Configuration.ORIENTATION_LANDSCAPE) { + // If the screen is now in landscape mode, we can show the + // dialog in-line with the list so we don't need this activity. + finish(); + return; + } + + if (savedInstanceState == null) { + // During initial setup, plug in the details fragment. + DetailsFragment details = new DetailsFragment(); + details.setArguments(getIntent().getExtras()); + getSupportFragmentManager().beginTransaction().add( + android.R.id.content, details).commit(); + } + } + } + + + /** + * This is the "top-level" fragment, showing a list of items that the + * user can pick. Upon picking an item, it takes care of displaying the + * data to the user as appropriate based on the currrent UI layout. + */ + + public static class TitlesFragment extends ListFragment { + boolean mDualPane; + int mCurCheckPosition = 0; + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + // Populate list with our static array of titles. + setListAdapter(new ArrayAdapter(getActivity(), + R.layout.simple_list_item_checkable_1, + android.R.id.text1, Shakespeare.TITLES)); + + // Check to see if we have a frame in which to embed the details + // fragment directly in the containing UI. + View detailsFrame = getActivity().findViewById(R.id.details); + mDualPane = detailsFrame != null && detailsFrame.getVisibility() == View.VISIBLE; + + if (savedInstanceState != null) { + // Restore last state for checked position. + mCurCheckPosition = savedInstanceState.getInt("curChoice", 0); + } + + if (mDualPane) { + // In dual-pane mode, the list view highlights the selected item. + getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); + // Make sure our UI is in the correct state. + showDetails(mCurCheckPosition); + } + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putInt("curChoice", mCurCheckPosition); + } + + @Override + public void onListItemClick(ListView l, View v, int position, long id) { + showDetails(position); + } + + /** + * Helper function to show the details of a selected item, either by + * displaying a fragment in-place in the current UI, or starting a + * whole new activity in which it is displayed. + */ + void showDetails(int index) { + mCurCheckPosition = index; + + if (mDualPane) { + // We can display everything in-place with fragments, so update + // the list to highlight the selected item and show the data. + getListView().setItemChecked(index, true); + + // Check what fragment is currently shown, replace if needed. + DetailsFragment details = (DetailsFragment) + getFragmentManager().findFragmentById(R.id.details); + if (details == null || details.getShownIndex() != index) { + // Make new fragment to show this selection. + details = DetailsFragment.newInstance(index); + + // Execute a transaction, replacing any existing fragment + // with this one inside the frame. + FragmentTransaction ft = getFragmentManager().beginTransaction(); + ft.replace(R.id.details, details); + ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); + ft.commit(); + } + + } else { + // Otherwise we need to launch a new activity to display + // the dialog fragment with selected text. + Intent intent = new Intent(); + intent.setClass(getActivity(), DetailsActivity.class); + intent.putExtra("index", index); + startActivity(intent); + } + } + } + + + /** + * This is the secondary fragment, displaying the details of a particular + * item. + */ + + public static class DetailsFragment extends Fragment { + /** + * Create a new instance of DetailsFragment, initialized to + * show the text at 'index'. + */ + public static DetailsFragment newInstance(int index) { + DetailsFragment f = new DetailsFragment(); + + // Supply index input as an argument. + Bundle args = new Bundle(); + args.putInt("index", index); + f.setArguments(args); + + return f; + } + + public int getShownIndex() { + return getArguments().getInt("index", 0); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + if (container == null) { + // We have different layouts, and in one of them this + // fragment's containing frame doesn't exist. The fragment + // may still be created from its saved state, but there is + // no reason to try to create its view hierarchy because it + // won't be displayed. Note this is not needed -- we could + // just run the code below, where we would create and return + // the view hierarchy; it would just never be used. + return null; + } + + ScrollView scroller = new ScrollView(getActivity()); + TextView text = new TextView(getActivity()); + int padding = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, + 4, getActivity().getResources().getDisplayMetrics()); + text.setPadding(padding, padding, padding, padding); + scroller.addView(text); + text.setText(Shakespeare.DIALOGUE[getShownIndex()]); + return scroller; + } + } + +} diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentListArraySupport.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentListArraySupport.java new file mode 100644 index 000000000..6ad7367cb --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentListArraySupport.java @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.actionbarsherlock.sample.demos.app; + +import com.actionbarsherlock.sample.demos.Shakespeare; + +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.ListFragment; + +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.ArrayAdapter; +import android.widget.ListView; + +/** + * Demonstration of using ListFragment to show a list of items + * from a canned array. + */ +public class FragmentListArraySupport extends FragmentActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // Create the list fragment and add it as our sole content. + if (getSupportFragmentManager().findFragmentById(android.R.id.content) == null) { + ArrayListFragment list = new ArrayListFragment(); + getSupportFragmentManager().beginTransaction().add(android.R.id.content, list).commit(); + } + } + + public static class ArrayListFragment extends ListFragment { + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + setListAdapter(new ArrayAdapter(getActivity(), + android.R.layout.simple_list_item_1, Shakespeare.TITLES)); + } + + @Override + public void onListItemClick(ListView l, View v, int position, long id) { + Log.i("FragmentList", "Item clicked: " + id); + } + } +} diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentMenuSupport.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentMenuSupport.java new file mode 100644 index 000000000..9bf2cd514 --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentMenuSupport.java @@ -0,0 +1,133 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.actionbarsherlock.sample.demos.app; + +import com.actionbarsherlock.sample.demos.R; + +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentTransaction; +import android.support.v4.view.Menu; +import android.support.v4.view.MenuItem; + +import android.os.Bundle; +import android.view.MenuInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.CheckBox; + +/** + * Demonstrates how fragments can participate in the options menu. + */ +public class FragmentMenuSupport extends FragmentActivity { + Fragment mFragment1; + Fragment mFragment2; + CheckBox mCheckBox1; + CheckBox mCheckBox2; + + // Update fragment visibility when check boxes are changed. + final OnClickListener mClickListener = new OnClickListener() { + public void onClick(View v) { + updateFragmentVisibility(); + } + }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.fragment_menu); + + // Make sure the two menu fragments are created. + FragmentManager fm = getSupportFragmentManager(); + FragmentTransaction ft = fm.beginTransaction(); + mFragment1 = fm.findFragmentByTag("f1"); + if (mFragment1 == null) { + mFragment1 = new MenuFragment(); + ft.add(mFragment1, "f1"); + } + mFragment2 = fm.findFragmentByTag("f2"); + if (mFragment2 == null) { + mFragment2 = new Menu2Fragment(); + ft.add(mFragment2, "f2"); + } + ft.commit(); + + // Watch check box clicks. + mCheckBox1 = (CheckBox)findViewById(R.id.menu1); + mCheckBox1.setOnClickListener(mClickListener); + mCheckBox2 = (CheckBox)findViewById(R.id.menu2); + mCheckBox2.setOnClickListener(mClickListener); + + // Make sure fragments start out with correct visibility. + updateFragmentVisibility(); + } + + @Override + protected void onRestoreInstanceState(Bundle savedInstanceState) { + super.onRestoreInstanceState(savedInstanceState); + // Make sure fragments are updated after check box view state is restored. + updateFragmentVisibility(); + } + + // Update fragment visibility based on current check box state. + void updateFragmentVisibility() { + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + if (mCheckBox1.isChecked()) ft.show(mFragment1); + else ft.hide(mFragment1); + if (mCheckBox2.isChecked()) ft.show(mFragment2); + else ft.hide(mFragment2); + ft.commit(); + } + + /** + * A fragment that displays a menu. This fragment happens to not + * have a UI (it does not implement onCreateView), but it could also + * have one if it wanted. + */ + public static class MenuFragment extends Fragment { + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setHasOptionsMenu(true); + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + menu.add("Menu 1a").setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); + menu.add("Menu 1b").setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); + } + } + + /** + * Second fragment with a menu. + */ + public static class Menu2Fragment extends Fragment { + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setHasOptionsMenu(true); + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + menu.add("Menu 2").setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); + } + } +} diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentPagerMenus.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentPagerMenus.java new file mode 100644 index 000000000..418622d34 --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentPagerMenus.java @@ -0,0 +1,96 @@ +package com.actionbarsherlock.sample.demos.app; + +import java.util.Random; +import com.actionbarsherlock.sample.demos.R; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentPagerAdapter; +import android.support.v4.view.Menu; +import android.support.v4.view.MenuItem; +import android.support.v4.view.ViewPager; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.MenuInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +public class FragmentPagerMenus extends FragmentActivity { + private static final Random RANDOM = new Random(); + private static final int PAGES = 10; + private static final int MENU_ITEM_RANDOM = 1; + + private ViewPager mPager; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.fragment_pagermenus); + mPager = (ViewPager)findViewById(R.id.pager); + mPager.setAdapter(new TestAdapter(getSupportFragmentManager())); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + menu.add(0, MENU_ITEM_RANDOM, 0, "Random"); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId() == MENU_ITEM_RANDOM) { + mPager.setCurrentItem(RANDOM.nextInt(PAGES)); + return true; + } + return super.onOptionsItemSelected(item); + } + + static final class TestAdapter extends FragmentPagerAdapter { + public TestAdapter(FragmentManager fm) { + super(fm); + } + + @Override + public int getCount() { + return PAGES; + } + + @Override + public Fragment getItem(int position) { + TestFragment f = new TestFragment(); + f.text = String.valueOf(position + 1); + return f; + } + } + + public static class TestFragment extends Fragment { + String text = "???"; + + public TestFragment() { + setRetainInstance(true); + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setHasOptionsMenu(true); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + TextView tv = new TextView(getActivity()); + tv.setGravity(Gravity.CENTER); + tv.setTextSize(50); + tv.setText(text); + return tv; + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + menu.add(text).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT); + } + } +} diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentPagerSupport.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentPagerSupport.java new file mode 100644 index 000000000..b2a88676f --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentPagerSupport.java @@ -0,0 +1,139 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.actionbarsherlock.sample.demos.app; + +import com.actionbarsherlock.sample.demos.Cheeses; +import com.actionbarsherlock.sample.demos.R; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentPagerAdapter; +import android.support.v4.app.ListFragment; +import android.support.v4.view.ViewPager; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.View.OnClickListener; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.ListView; +import android.widget.TextView; + +public class FragmentPagerSupport extends FragmentActivity { + static final int NUM_ITEMS = 10; + + MyAdapter mAdapter; + + ViewPager mPager; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.fragment_pager); + + mAdapter = new MyAdapter(getSupportFragmentManager()); + + mPager = (ViewPager)findViewById(R.id.pager); + mPager.setAdapter(mAdapter); + + // Watch for button clicks. + Button button = (Button)findViewById(R.id.goto_first); + button.setOnClickListener(new OnClickListener() { + public void onClick(View v) { + mPager.setCurrentItem(0); + } + }); + button = (Button)findViewById(R.id.goto_last); + button.setOnClickListener(new OnClickListener() { + public void onClick(View v) { + mPager.setCurrentItem(NUM_ITEMS-1); + } + }); + } + + public static class MyAdapter extends FragmentPagerAdapter { + public MyAdapter(FragmentManager fm) { + super(fm); + } + + @Override + public int getCount() { + return NUM_ITEMS; + } + + @Override + public Fragment getItem(int position) { + return ArrayListFragment.newInstance(position); + } + } + + public static class ArrayListFragment extends ListFragment { + int mNum; + + /** + * Create a new instance of CountingFragment, providing "num" + * as an argument. + */ + static ArrayListFragment newInstance(int num) { + ArrayListFragment f = new ArrayListFragment(); + + // Supply num input as an argument. + Bundle args = new Bundle(); + args.putInt("num", num); + f.setArguments(args); + + return f; + } + + /** + * When creating, retrieve this instance's number from its arguments. + */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mNum = getArguments() != null ? getArguments().getInt("num") : 1; + } + + /** + * The Fragment's UI is just a simple text view showing its + * instance number. + */ + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View v = inflater.inflate(R.layout.fragment_pager_list, container, false); + View tv = v.findViewById(R.id.text); + ((TextView)tv).setText("Fragment #" + mNum); + return v; + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + setListAdapter(new ArrayAdapter(getActivity(), + android.R.layout.simple_list_item_1, Cheeses.sCheeseStrings)); + } + + @Override + public void onListItemClick(ListView l, View v, int position, long id) { + Log.i("FragmentList", "Item clicked: " + id); + } + } +} diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentReceiveResultSupport.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentReceiveResultSupport.java new file mode 100644 index 000000000..bb79ff120 --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentReceiveResultSupport.java @@ -0,0 +1,135 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.actionbarsherlock.sample.demos.app; + +import com.actionbarsherlock.sample.demos.app.SendResult; +import com.actionbarsherlock.sample.demos.R; + +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentTransaction; + +import android.content.Intent; +import android.os.Bundle; +import android.text.Editable; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.FrameLayout; +import android.widget.TextView; + +public class FragmentReceiveResultSupport extends FragmentActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT); + FrameLayout frame = new FrameLayout(this); + frame.setId(R.id.simple_fragment); + setContentView(frame, lp); + + if (savedInstanceState == null) { + // Do first time initialization -- add fragment. + Fragment newFragment = new ReceiveResultFragment(); + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + ft.add(R.id.simple_fragment, newFragment).commit(); + } + } + + public static class ReceiveResultFragment extends Fragment { + // Definition of the one requestCode we use for receiving resuls. + static final private int GET_CODE = 0; + + private TextView mResults; + + private OnClickListener mGetListener = new OnClickListener() { + public void onClick(View v) { + // Start the activity whose result we want to retrieve. The + // result will come back with request code GET_CODE. + Intent intent = new Intent(getActivity(), SendResult.class); + startActivityForResult(intent, GET_CODE); + } + }; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View v = inflater.inflate(R.layout.receive_result, container, false); + + // Retrieve the TextView widget that will display results. + mResults = (TextView)v.findViewById(R.id.results); + + // This allows us to later extend the text buffer. + mResults.setText(mResults.getText(), TextView.BufferType.EDITABLE); + + // Watch for button clicks. + Button getButton = (Button)v.findViewById(R.id.get); + getButton.setOnClickListener(mGetListener); + + return v; + } + + /** + * This method is called when the sending activity has finished, with the + * result it supplied. + */ + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + // You can use the requestCode to select between multiple child + // activities you may have started. Here there is only one thing + // we launch. + if (requestCode == GET_CODE) { + + // We will be adding to our text. + Editable text = (Editable)mResults.getText(); + + // This is a standard resultCode that is sent back if the + // activity doesn't supply an explicit result. It will also + // be returned if the activity failed to launch. + if (resultCode == RESULT_CANCELED) { + text.append("(cancelled)"); + + // Our protocol with the sending activity is that it will send + // text in 'data' as its result. + } else { + text.append("(okay "); + text.append(Integer.toString(resultCode)); + text.append(") "); + if (data != null) { + text.append(data.getAction()); + } + } + + text.append("\n"); + } + } + } +} diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentRetainInstanceSupport.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentRetainInstanceSupport.java new file mode 100644 index 000000000..f10971627 --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentRetainInstanceSupport.java @@ -0,0 +1,233 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.actionbarsherlock.sample.demos.app; + +import com.actionbarsherlock.sample.demos.R; + +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentManager; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.View.OnClickListener; +import android.widget.Button; +import android.widget.ProgressBar; + +/** + * This example shows how you can use a Fragment to easily propagate state + * (such as threads) across activity instances when an activity needs to be + * restarted due to, for example, a configuration change. This is a lot + * easier than using the raw Activity.onRetainNonConfiguratinInstance() API. + */ +public class FragmentRetainInstanceSupport extends FragmentActivity { + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // First time init, create the UI. + if (savedInstanceState == null) { + getSupportFragmentManager().beginTransaction().add(android.R.id.content, + new UiFragment()).commit(); + } + } + + /** + * This is a fragment showing UI that will be updated from work done + * in the retained fragment. + */ + public static class UiFragment extends Fragment { + RetainedFragment mWorkFragment; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View v = inflater.inflate(R.layout.fragment_retain_instance, container, false); + + // Watch for button clicks. + Button button = (Button)v.findViewById(R.id.restart); + button.setOnClickListener(new OnClickListener() { + public void onClick(View v) { + mWorkFragment.restart(); + } + }); + + return v; + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + FragmentManager fm = getFragmentManager(); + + // Check to see if we have retained the worker fragment. + mWorkFragment = (RetainedFragment)fm.findFragmentByTag("work"); + + // If not retained (or first time running), we need to create it. + if (mWorkFragment == null) { + mWorkFragment = new RetainedFragment(); + // Tell it who it is working with. + mWorkFragment.setTargetFragment(this, 0); + fm.beginTransaction().add(mWorkFragment, "work").commit(); + } + } + + } + + /** + * This is the Fragment implementation that will be retained across + * activity instances. It represents some ongoing work, here a thread + * we have that sits around incrementing a progress indicator. + */ + public static class RetainedFragment extends Fragment { + ProgressBar mProgressBar; + int mPosition; + boolean mReady = false; + boolean mQuiting = false; + + /** + * This is the thread that will do our work. It sits in a loop running + * the progress up until it has reached the top, then stops and waits. + */ + final Thread mThread = new Thread() { + @Override + public void run() { + // We'll figure the real value out later. + int max = 10000; + + // This thread runs almost forever. + while (true) { + + // Update our shared state with the UI. + synchronized (this) { + // Our thread is stopped if the UI is not ready + // or it has completed its work. + while (!mReady || mPosition >= max) { + if (mQuiting) { + return; + } + try { + wait(); + } catch (InterruptedException e) { + } + } + + // Now update the progress. Note it is important that + // we touch the progress bar with the lock held, so it + // doesn't disappear on us. + mPosition++; + max = mProgressBar.getMax(); + mProgressBar.setProgress(mPosition); + } + + // Normally we would be doing some work, but put a kludge + // here to pretend like we are. + synchronized (this) { + try { + wait(50); + } catch (InterruptedException e) { + } + } + } + } + }; + + /** + * Fragment initialization. We way we want to be retained and + * start our thread. + */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // Tell the framework to try to keep this fragment around + // during a configuration change. + setRetainInstance(true); + + // Start up the worker thread. + mThread.start(); + } + + /** + * This is called when the Fragment's Activity is ready to go, after + * its content view has been installed; it is called both after + * the initial fragment creation and after the fragment is re-attached + * to a new activity. + */ + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + // Retrieve the progress bar from the target's view hierarchy. + mProgressBar = (ProgressBar)getTargetFragment().getView().findViewById( + R.id.progress_horizontal); + + // We are ready for our thread to go. + synchronized (mThread) { + mReady = true; + mThread.notify(); + } + } + + /** + * This is called when the fragment is going away. It is NOT called + * when the fragment is being propagated between activity instances. + */ + @Override + public void onDestroy() { + // Make the thread go away. + synchronized (mThread) { + mReady = false; + mQuiting = true; + mThread.notify(); + } + + super.onDestroy(); + } + + /** + * This is called right before the fragment is detached from its + * current activity instance. + */ + @Override + public void onDetach() { + // This fragment is being detached from its activity. We need + // to make sure its thread is not going to touch any activity + // state after returning from this function. + synchronized (mThread) { + mProgressBar = null; + mReady = false; + mThread.notify(); + } + + super.onDetach(); + } + + /** + * API for our UI to restart the progress thread. + */ + public void restart() { + synchronized (mThread) { + mPosition = 0; + mThread.notify(); + } + } + } +} diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentStackSupport.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentStackSupport.java new file mode 100644 index 000000000..f8648a3c1 --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentStackSupport.java @@ -0,0 +1,125 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.actionbarsherlock.sample.demos.app; + +import com.actionbarsherlock.sample.demos.R; + +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentTransaction; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.View.OnClickListener; +import android.widget.Button; +import android.widget.TextView; + +public class FragmentStackSupport extends FragmentActivity { + int mStackLevel = 1; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.fragment_stack); + + // Watch for button clicks. + Button button = (Button)findViewById(R.id.new_fragment); + button.setOnClickListener(new OnClickListener() { + public void onClick(View v) { + addFragmentToStack(); + } + }); + + if (savedInstanceState == null) { + // Do first time initialization -- add initial fragment. + Fragment newFragment = CountingFragment.newInstance(mStackLevel); + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + ft.add(R.id.simple_fragment, newFragment).commit(); + } else { + mStackLevel = savedInstanceState.getInt("level"); + } + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putInt("level", mStackLevel); + } + + + void addFragmentToStack() { + mStackLevel++; + + // Instantiate a new fragment. + Fragment newFragment = CountingFragment.newInstance(mStackLevel); + + // Add the fragment to the activity, pushing this transaction + // on to the back stack. + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + ft.replace(R.id.simple_fragment, newFragment); + ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); + ft.addToBackStack(null); + ft.commit(); + } + + + + public static class CountingFragment extends Fragment { + int mNum; + + /** + * Create a new instance of CountingFragment, providing "num" + * as an argument. + */ + static CountingFragment newInstance(int num) { + CountingFragment f = new CountingFragment(); + + // Supply num input as an argument. + Bundle args = new Bundle(); + args.putInt("num", num); + f.setArguments(args); + + return f; + } + + /** + * When creating, retrieve this instance's number from its arguments. + */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mNum = getArguments() != null ? getArguments().getInt("num") : 1; + } + + /** + * The Fragment's UI is just a simple text view showing its + * instance number. + */ + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View v = inflater.inflate(R.layout.hello_world, container, false); + View tv = v.findViewById(R.id.text); + ((TextView)tv).setText("Fragment #" + mNum); + tv.setBackgroundDrawable(getResources().getDrawable(android.R.drawable.gallery_thumb)); + return v; + } + } + +} diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentStatePagerSupport.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentStatePagerSupport.java new file mode 100644 index 000000000..f4ebf78b9 --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentStatePagerSupport.java @@ -0,0 +1,140 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.actionbarsherlock.sample.demos.app; + +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentStatePagerAdapter; +import android.support.v4.app.ListFragment; +import android.support.v4.view.ViewPager; + +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.View.OnClickListener; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.ListView; +import android.widget.TextView; + +import com.actionbarsherlock.sample.demos.Cheeses; +import com.actionbarsherlock.sample.demos.R; + +public class FragmentStatePagerSupport extends FragmentActivity { + static final int NUM_ITEMS = 10; + + MyAdapter mAdapter; + + ViewPager mPager; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.fragment_pager); + + mAdapter = new MyAdapter(getSupportFragmentManager()); + + mPager = (ViewPager)findViewById(R.id.pager); + mPager.setAdapter(mAdapter); + + // Watch for button clicks. + Button button = (Button)findViewById(R.id.goto_first); + button.setOnClickListener(new OnClickListener() { + public void onClick(View v) { + mPager.setCurrentItem(0); + } + }); + button = (Button)findViewById(R.id.goto_last); + button.setOnClickListener(new OnClickListener() { + public void onClick(View v) { + mPager.setCurrentItem(NUM_ITEMS-1); + } + }); + } + + public static class MyAdapter extends FragmentStatePagerAdapter { + public MyAdapter(FragmentManager fm) { + super(fm); + } + + @Override + public int getCount() { + return NUM_ITEMS; + } + + @Override + public Fragment getItem(int position) { + return ArrayListFragment.newInstance(position); + } + } + + public static class ArrayListFragment extends ListFragment { + int mNum; + + /** + * Create a new instance of CountingFragment, providing "num" + * as an argument. + */ + static ArrayListFragment newInstance(int num) { + ArrayListFragment f = new ArrayListFragment(); + + // Supply num input as an argument. + Bundle args = new Bundle(); + args.putInt("num", num); + f.setArguments(args); + + return f; + } + + /** + * When creating, retrieve this instance's number from its arguments. + */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mNum = getArguments() != null ? getArguments().getInt("num") : 1; + } + + /** + * The Fragment's UI is just a simple text view showing its + * instance number. + */ + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View v = inflater.inflate(R.layout.fragment_pager_list, container, false); + View tv = v.findViewById(R.id.text); + ((TextView)tv).setText("Fragment #" + mNum); + return v; + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + setListAdapter(new ArrayAdapter(getActivity(), + android.R.layout.simple_list_item_1, Cheeses.sCheeseStrings)); + } + + @Override + public void onListItemClick(ListView l, View v, int position, long id) { + Log.i("FragmentList", "Item clicked: " + id); + } + } +} diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentTabs.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentTabs.java new file mode 100644 index 000000000..aec827e70 --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentTabs.java @@ -0,0 +1,171 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.actionbarsherlock.sample.demos.app; + + +import java.util.HashMap; + +import com.actionbarsherlock.sample.demos.R; + +import android.content.Context; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentTransaction; +import android.view.View; +import android.widget.TabHost; + +/** + * This demonstrates how you can implement switching between the tabs of a + * TabHost through fragments. It uses a trick (see the code below) to allow + * the tabs to switch between fragments instead of simple views. + */ +public class FragmentTabs extends FragmentActivity { + TabHost mTabHost; + TabManager mTabManager; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.fragment_tabs); + mTabHost = (TabHost)findViewById(android.R.id.tabhost); + mTabHost.setup(); + + mTabManager = new TabManager(this, mTabHost, R.id.realtabcontent); + + mTabManager.addTab(mTabHost.newTabSpec("simple").setIndicator("Simple"), + FragmentStackSupport.CountingFragment.class, null); + mTabManager.addTab(mTabHost.newTabSpec("contacts").setIndicator("Contacts"), + LoaderCursorSupport.CursorLoaderListFragment.class, null); + mTabManager.addTab(mTabHost.newTabSpec("custom").setIndicator("Custom"), + LoaderCustomSupport.AppListFragment.class, null); + mTabManager.addTab(mTabHost.newTabSpec("throttle").setIndicator("Throttle"), + LoaderThrottleSupport.ThrottledLoaderListFragment.class, null); + + if (savedInstanceState != null) { + mTabHost.setCurrentTabByTag(savedInstanceState.getString("tab")); + } + } + + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putString("tab", mTabHost.getCurrentTabTag()); + } + + /** + * This is a helper class that implements a generic mechanism for + * associating fragments with the tabs in a tab host. It relies on a + * trick. Normally a tab host has a simple API for supplying a View or + * Intent that each tab will show. This is not sufficient for switching + * between fragments. So instead we make the content part of the tab host + * 0dp high (it is not shown) and the TabManager supplies its own dummy + * view to show as the tab content. It listens to changes in tabs, and takes + * care of switch to the correct fragment shown in a separate content area + * whenever the selected tab changes. + */ + public static class TabManager implements TabHost.OnTabChangeListener { + private final FragmentActivity mActivity; + private final TabHost mTabHost; + private final int mContainerId; + private final HashMap mTabs = new HashMap(); + TabInfo mLastTab; + + static final class TabInfo { + private final String tag; + private final Class clss; + private final Bundle args; + private Fragment fragment; + + TabInfo(String _tag, Class _class, Bundle _args) { + tag = _tag; + clss = _class; + args = _args; + } + } + + static class DummyTabFactory implements TabHost.TabContentFactory { + private final Context mContext; + + public DummyTabFactory(Context context) { + mContext = context; + } + + @Override + public View createTabContent(String tag) { + View v = new View(mContext); + v.setMinimumWidth(0); + v.setMinimumHeight(0); + return v; + } + } + + public TabManager(FragmentActivity activity, TabHost tabHost, int containerId) { + mActivity = activity; + mTabHost = tabHost; + mContainerId = containerId; + mTabHost.setOnTabChangedListener(this); + } + + public void addTab(TabHost.TabSpec tabSpec, Class clss, Bundle args) { + tabSpec.setContent(new DummyTabFactory(mActivity)); + String tag = tabSpec.getTag(); + + TabInfo info = new TabInfo(tag, clss, args); + + // Check to see if we already have a fragment for this tab, probably + // from a previously saved state. If so, deactivate it, because our + // initial state is that a tab isn't shown. + info.fragment = mActivity.getSupportFragmentManager().findFragmentByTag(tag); + if (info.fragment != null && !info.fragment.isDetached()) { + FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction(); + ft.detach(info.fragment); + ft.commit(); + } + + mTabs.put(tag, info); + mTabHost.addTab(tabSpec); + } + + @Override + public void onTabChanged(String tabId) { + TabInfo newTab = mTabs.get(tabId); + if (mLastTab != newTab) { + FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction(); + if (mLastTab != null) { + if (mLastTab.fragment != null) { + ft.detach(mLastTab.fragment); + } + } + if (newTab != null) { + if (newTab.fragment == null) { + newTab.fragment = Fragment.instantiate(mActivity, + newTab.clss.getName(), newTab.args); + ft.add(mContainerId, newTab.fragment, newTab.tag); + } else { + ft.attach(newTab.fragment); + } + } + + mLastTab = newTab; + ft.commit(); + mActivity.getSupportFragmentManager().executePendingTransactions(); + } + } + } +} + diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentTabsPager.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentTabsPager.java new file mode 100644 index 000000000..3bcfaf05c --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/FragmentTabsPager.java @@ -0,0 +1,178 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.actionbarsherlock.sample.demos.app; + +import com.actionbarsherlock.sample.demos.R; + +import android.content.Context; +import android.os.Build; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentPagerAdapter; +import android.support.v4.view.ViewPager; +import android.view.View; +import android.widget.TabHost; + +import java.util.ArrayList; + +/** + * Demonstrates combining a TabHost with a ViewPager to implement a tab UI + * that switches between tabs and also allows the user to perform horizontal + * flicks to move between the tabs. + */ +public class FragmentTabsPager extends FragmentActivity { + TabHost mTabHost; + ViewPager mViewPager; + TabsAdapter mTabsAdapter; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.fragment_tabs_pager); + mTabHost = (TabHost)findViewById(android.R.id.tabhost); + mTabHost.setup(); + + mViewPager = (ViewPager)findViewById(R.id.pager); + + mTabsAdapter = new TabsAdapter(this, mTabHost, mViewPager); + mTabsAdapter.addTab(mTabHost.newTabSpec("simple").setIndicator("Simple"), + FragmentStackSupport.CountingFragment.class, null); + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ECLAIR) { + mTabsAdapter.addTab(mTabHost.newTabSpec("simple2").setIndicator("Simple 2"), + FragmentStackSupport.CountingFragment.class, null); + mTabsAdapter.addTab(mTabHost.newTabSpec("simple3").setIndicator("Simple 3"), + FragmentStackSupport.CountingFragment.class, null); + mTabsAdapter.addTab(mTabHost.newTabSpec("simple4").setIndicator("Simple 4"), + FragmentStackSupport.CountingFragment.class, null); + } else { + mTabsAdapter.addTab(mTabHost.newTabSpec("contacts").setIndicator("Contacts"), + LoaderCursorSupport.CursorLoaderListFragment.class, null); + mTabsAdapter.addTab(mTabHost.newTabSpec("custom").setIndicator("Custom"), + LoaderCustomSupport.AppListFragment.class, null); + mTabsAdapter.addTab(mTabHost.newTabSpec("throttle").setIndicator("Throttle"), + LoaderThrottleSupport.ThrottledLoaderListFragment.class, null); + } + + if (savedInstanceState != null) { + mTabHost.setCurrentTabByTag(savedInstanceState.getString("tab")); + } + } + + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putString("tab", mTabHost.getCurrentTabTag()); + } + + /** + * This is a helper class that implements the management of tabs and all + * details of connecting a ViewPager with associated TabHost. It relies on a + * trick. Normally a tab host has a simple API for supplying a View or + * Intent that each tab will show. This is not sufficient for switching + * between pages. So instead we make the content part of the tab host + * 0dp high (it is not shown) and the TabsAdapter supplies its own dummy + * view to show as the tab content. It listens to changes in tabs, and takes + * care of switch to the correct paged in the ViewPager whenever the selected + * tab changes. + */ + public static class TabsAdapter extends FragmentPagerAdapter + implements TabHost.OnTabChangeListener, ViewPager.OnPageChangeListener { + private final Context mContext; + private final TabHost mTabHost; + private final ViewPager mViewPager; + private final ArrayList mTabs = new ArrayList(); + + static final class TabInfo { + private final String tag; + private final Class clss; + private final Bundle args; + + TabInfo(String _tag, Class _class, Bundle _args) { + tag = _tag; + clss = _class; + args = _args; + } + } + + static class DummyTabFactory implements TabHost.TabContentFactory { + private final Context mContext; + + public DummyTabFactory(Context context) { + mContext = context; + } + + @Override + public View createTabContent(String tag) { + View v = new View(mContext); + v.setMinimumWidth(0); + v.setMinimumHeight(0); + return v; + } + } + + public TabsAdapter(FragmentActivity activity, TabHost tabHost, ViewPager pager) { + super(activity.getSupportFragmentManager()); + mContext = activity; + mTabHost = tabHost; + mViewPager = pager; + mTabHost.setOnTabChangedListener(this); + mViewPager.setAdapter(this); + mViewPager.setOnPageChangeListener(this); + } + + public void addTab(TabHost.TabSpec tabSpec, Class clss, Bundle args) { + tabSpec.setContent(new DummyTabFactory(mContext)); + String tag = tabSpec.getTag(); + + TabInfo info = new TabInfo(tag, clss, args); + mTabs.add(info); + mTabHost.addTab(tabSpec); + notifyDataSetChanged(); + } + + @Override + public int getCount() { + return mTabs.size(); + } + + @Override + public Fragment getItem(int position) { + TabInfo info = mTabs.get(position); + return Fragment.instantiate(mContext, info.clss.getName(), info.args); + } + + @Override + public void onTabChanged(String tabId) { + int position = mTabHost.getCurrentTab(); + mViewPager.setCurrentItem(position); + } + + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + } + + @Override + public void onPageSelected(int position) { + mTabHost.setCurrentTab(position); + } + + @Override + public void onPageScrollStateChanged(int state) { + } + } +} diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/LoaderCursorSupport.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/LoaderCursorSupport.java new file mode 100644 index 000000000..e477afc03 --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/LoaderCursorSupport.java @@ -0,0 +1,170 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.actionbarsherlock.sample.demos.app; + +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.ListFragment; +import android.support.v4.app.LoaderManager; +import android.support.v4.content.CursorLoader; +import android.support.v4.content.Loader; +import android.support.v4.view.Menu; +import android.support.v4.widget.SimpleCursorAdapter; + +import android.database.Cursor; +import android.net.Uri; +import android.os.Bundle; +import android.provider.ContactsContract.Contacts; +import android.text.TextUtils; +import android.util.Log; +import android.view.MenuInflater; +import android.view.View; +import android.widget.ListView; + +/** + * Demonstration of the use of a CursorLoader to load and display contacts + * data in a fragment. + */ +public class LoaderCursorSupport extends FragmentActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + FragmentManager fm = getSupportFragmentManager(); + + // Create the list fragment and add it as our sole content. + if (fm.findFragmentById(android.R.id.content) == null) { + CursorLoaderListFragment list = new CursorLoaderListFragment(); + fm.beginTransaction().add(android.R.id.content, list).commit(); + } + } + + + public static class CursorLoaderListFragment extends ListFragment + implements LoaderManager.LoaderCallbacks { + + // This is the Adapter being used to display the list's data. + SimpleCursorAdapter mAdapter; + + // If non-null, this is the current filter the user has provided. + String mCurFilter; + + @Override public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + // Give some text to display if there is no data. In a real + // application this would come from a resource. + setEmptyText("No phone numbers"); + + // We have a menu item to show in action bar. + setHasOptionsMenu(true); + + // Create an empty adapter we will use to display the loaded data. + mAdapter = new SimpleCursorAdapter(getActivity(), + android.R.layout.simple_list_item_2, null, + new String[] { Contacts.DISPLAY_NAME, Contacts.CONTACT_STATUS }, + new int[] { android.R.id.text1, android.R.id.text2 }, 0); + setListAdapter(mAdapter); + + // Start out with a progress indicator. + setListShown(false); + + // Prepare the loader. Either re-connect with an existing one, + // or start a new one. + getLoaderManager().initLoader(0, null, this); + } + + @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + // Place an action bar item for searching. + //MenuItem item = menu.add("Search"); + //item.setIcon(android.R.drawable.ic_menu_search); + //item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); + //SearchView sv = new SearchView(getActivity()); + //sv.setOnQueryTextListener(this); + //item.setActionView(sv); + } + + public boolean onQueryTextChange(String newText) { + // Called when the action bar search text has changed. Update + // the search filter, and restart the loader to do a new query + // with this filter. + mCurFilter = !TextUtils.isEmpty(newText) ? newText : null; + getLoaderManager().restartLoader(0, null, this); + return true; + } + + @Override public void onListItemClick(ListView l, View v, int position, long id) { + // Insert desired behavior here. + Log.i("FragmentComplexList", "Item clicked: " + id); + } + + // These are the Contacts rows that we will retrieve. + static final String[] CONTACTS_SUMMARY_PROJECTION = new String[] { + Contacts._ID, + Contacts.DISPLAY_NAME, + Contacts.CONTACT_STATUS, + Contacts.CONTACT_PRESENCE, + Contacts.PHOTO_ID, + Contacts.LOOKUP_KEY, + }; + + public Loader onCreateLoader(int id, Bundle args) { + // This is called when a new Loader needs to be created. This + // sample only has one Loader, so we don't care about the ID. + // First, pick the base URI to use depending on whether we are + // currently filtering. + Uri baseUri; + if (mCurFilter != null) { + baseUri = Uri.withAppendedPath(Contacts.CONTENT_FILTER_URI, + Uri.encode(mCurFilter)); + } else { + baseUri = Contacts.CONTENT_URI; + } + + // Now create and return a CursorLoader that will take care of + // creating a Cursor for the data being displayed. + String select = "((" + Contacts.DISPLAY_NAME + " NOTNULL) AND (" + + Contacts.HAS_PHONE_NUMBER + "=1) AND (" + + Contacts.DISPLAY_NAME + " != '' ))"; + return new CursorLoader(getActivity(), baseUri, + CONTACTS_SUMMARY_PROJECTION, select, null, + Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"); + } + + public void onLoadFinished(Loader loader, Cursor data) { + // Swap the new cursor in. (The framework will take care of closing the + // old cursor once we return.) + mAdapter.swapCursor(data); + + // The list should now be shown. + if (isResumed()) { + setListShown(true); + } else { + setListShownNoAnimation(true); + } + } + + public void onLoaderReset(Loader loader) { + // This is called when the last Cursor provided to onLoadFinished() + // above is about to be closed. We need to make sure we are no + // longer using it. + mAdapter.swapCursor(null); + } + } + +} diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/LoaderCustomSupport.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/LoaderCustomSupport.java new file mode 100644 index 000000000..9652edf11 --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/LoaderCustomSupport.java @@ -0,0 +1,453 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.actionbarsherlock.sample.demos.app; + +import java.io.File; +import java.text.Collator; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.pm.ActivityInfo; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.content.res.Configuration; +import android.content.res.Resources; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.ListFragment; +import android.support.v4.app.LoaderManager; +import android.support.v4.content.AsyncTaskLoader; +import android.support.v4.content.Loader; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ImageView; +import android.widget.ListView; +import android.widget.TextView; +import com.actionbarsherlock.sample.demos.R; + +/** + * Demonstration of the implementation of a custom Loader. + */ +public class LoaderCustomSupport extends FragmentActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + FragmentManager fm = getSupportFragmentManager(); + + // Create the list fragment and add it as our sole content. + if (fm.findFragmentById(android.R.id.content) == null) { + AppListFragment list = new AppListFragment(); + fm.beginTransaction().add(android.R.id.content, list).commit(); + } + } + + + /** + * This class holds the per-item data in our Loader. + */ + public static class AppEntry { + public AppEntry(AppListLoader loader, ApplicationInfo info) { + mLoader = loader; + mInfo = info; + mApkFile = new File(info.sourceDir); + } + + public ApplicationInfo getApplicationInfo() { + return mInfo; + } + + public String getLabel() { + return mLabel; + } + + public Drawable getIcon() { + if (mIcon == null) { + if (mApkFile.exists()) { + mIcon = mInfo.loadIcon(mLoader.mPm); + return mIcon; + } else { + mMounted = false; + } + } else if (!mMounted) { + // If the app wasn't mounted but is now mounted, reload + // its icon. + if (mApkFile.exists()) { + mMounted = true; + mIcon = mInfo.loadIcon(mLoader.mPm); + return mIcon; + } + } else { + return mIcon; + } + + return mLoader.getContext().getResources().getDrawable( + android.R.drawable.sym_def_app_icon); + } + + @Override public String toString() { + return mLabel; + } + + void loadLabel(Context context) { + if (mLabel == null || !mMounted) { + if (!mApkFile.exists()) { + mMounted = false; + mLabel = mInfo.packageName; + } else { + mMounted = true; + CharSequence label = mInfo.loadLabel(context.getPackageManager()); + mLabel = label != null ? label.toString() : mInfo.packageName; + } + } + } + + private final AppListLoader mLoader; + private final ApplicationInfo mInfo; + private final File mApkFile; + private String mLabel; + private Drawable mIcon; + private boolean mMounted; + } + + /** + * Perform alphabetical comparison of application entry objects. + */ + public static final Comparator ALPHA_COMPARATOR = new Comparator() { + private final Collator sCollator = Collator.getInstance(); + @Override + public int compare(AppEntry object1, AppEntry object2) { + return sCollator.compare(object1.getLabel(), object2.getLabel()); + } + }; + + /** + * Helper for determining if the configuration has changed in an interesting + * way so we need to rebuild the app list. + */ + public static class InterestingConfigChanges { + final Configuration mLastConfiguration = new Configuration(); + int mLastDensity; + + boolean applyNewConfig(Resources res) { + int configChanges = mLastConfiguration.updateFrom(res.getConfiguration()); + boolean densityChanged = mLastDensity != res.getDisplayMetrics().densityDpi; + if (densityChanged || (configChanges&(ActivityInfo.CONFIG_LOCALE + |ActivityInfo.CONFIG_UI_MODE|ActivityInfo.CONFIG_SCREEN_LAYOUT)) != 0) { + mLastDensity = res.getDisplayMetrics().densityDpi; + return true; + } + return false; + } + } + + /** + * Helper class to look for interesting changes to the installed apps + * so that the loader can be updated. + */ + public static class PackageIntentReceiver extends BroadcastReceiver { + final AppListLoader mLoader; + + public PackageIntentReceiver(AppListLoader loader) { + mLoader = loader; + IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED); + filter.addAction(Intent.ACTION_PACKAGE_REMOVED); + filter.addAction(Intent.ACTION_PACKAGE_CHANGED); + filter.addDataScheme("package"); + mLoader.getContext().registerReceiver(this, filter); + // Register for events related to sdcard installation. + IntentFilter sdFilter = new IntentFilter(); + sdFilter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE); + sdFilter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE); + mLoader.getContext().registerReceiver(this, sdFilter); + } + + @Override public void onReceive(Context context, Intent intent) { + // Tell the loader about the change. + mLoader.onContentChanged(); + } + } + + /** + * A custom Loader that loads all of the installed applications. + */ + public static class AppListLoader extends AsyncTaskLoader> { + final InterestingConfigChanges mLastConfig = new InterestingConfigChanges(); + final PackageManager mPm; + + List mApps; + PackageIntentReceiver mPackageObserver; + + public AppListLoader(Context context) { + super(context); + + // Retrieve the package manager for later use; note we don't + // use 'context' directly but instead the save global application + // context returned by getContext(). + mPm = getContext().getPackageManager(); + } + + /** + * This is where the bulk of our work is done. This function is + * called in a background thread and should generate a new set of + * data to be published by the loader. + */ + @Override public List loadInBackground() { + // Retrieve all known applications. + List apps = mPm.getInstalledApplications( + PackageManager.GET_UNINSTALLED_PACKAGES | + PackageManager.GET_DISABLED_COMPONENTS); + if (apps == null) { + apps = new ArrayList(); + } + + final Context context = getContext(); + + // Create corresponding array of entries and load their labels. + List entries = new ArrayList(apps.size()); + for (int i=0; i apps) { + if (isReset()) { + // An async query came in while the loader is stopped. We + // don't need the result. + if (apps != null) { + onReleaseResources(apps); + } + } + List oldApps = apps; + mApps = apps; + + if (isStarted()) { + // If the Loader is currently started, we can immediately + // deliver its results. + super.deliverResult(apps); + } + + // At this point we can release the resources associated with + // 'oldApps' if needed; now that the new result is delivered we + // know that it is no longer in use. + if (oldApps != null) { + onReleaseResources(oldApps); + } + } + + /** + * Handles a request to start the Loader. + */ + @Override protected void onStartLoading() { + if (mApps != null) { + // If we currently have a result available, deliver it + // immediately. + deliverResult(mApps); + } + + // Start watching for changes in the app data. + if (mPackageObserver == null) { + mPackageObserver = new PackageIntentReceiver(this); + } + + // Has something interesting in the configuration changed since we + // last built the app list? + boolean configChange = mLastConfig.applyNewConfig(getContext().getResources()); + + if (takeContentChanged() || mApps == null || configChange) { + // If the data has changed since the last time it was loaded + // or is not currently available, start a load. + forceLoad(); + } + } + + /** + * Handles a request to stop the Loader. + */ + @Override protected void onStopLoading() { + // Attempt to cancel the current load task if possible. + cancelLoad(); + } + + /** + * Handles a request to cancel a load. + */ + @Override public void onCanceled(List apps) { + super.onCanceled(apps); + + // At this point we can release the resources associated with 'apps' + // if needed. + onReleaseResources(apps); + } + + /** + * Handles a request to completely reset the Loader. + */ + @Override protected void onReset() { + super.onReset(); + + // Ensure the loader is stopped + onStopLoading(); + + // At this point we can release the resources associated with 'apps' + // if needed. + if (mApps != null) { + onReleaseResources(mApps); + mApps = null; + } + + // Stop monitoring for changes. + if (mPackageObserver != null) { + getContext().unregisterReceiver(mPackageObserver); + mPackageObserver = null; + } + } + + /** + * Helper function to take care of releasing resources associated + * with an actively loaded data set. + */ + protected void onReleaseResources(List apps) { + // For a simple List<> there is nothing to do. For something + // like a Cursor, we would close it here. + } + } + + + + public static class AppListAdapter extends ArrayAdapter { + private final LayoutInflater mInflater; + + public AppListAdapter(Context context) { + super(context, android.R.layout.simple_list_item_2); + mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + } + + public void setData(List data) { + clear(); + if (data != null) { + for (AppEntry item : data) { + add(item); + } + } + } + + /** + * Populate new items in the list. + */ + @Override public View getView(int position, View convertView, ViewGroup parent) { + View view; + + if (convertView == null) { + view = mInflater.inflate(R.layout.list_item_icon_text, parent, false); + } else { + view = convertView; + } + + AppEntry item = getItem(position); + ((ImageView)view.findViewById(R.id.icon)).setImageDrawable(item.getIcon()); + ((TextView)view.findViewById(R.id.text)).setText(item.getLabel()); + + return view; + } + } + + public static class AppListFragment extends ListFragment + implements LoaderManager.LoaderCallbacks> { + + // This is the Adapter being used to display the list's data. + AppListAdapter mAdapter; + + // If non-null, this is the current filter the user has provided. + String mCurFilter; + + @Override public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + // Give some text to display if there is no data. In a real + // application this would come from a resource. + setEmptyText("No applications"); + + // We have a menu item to show in action bar. + setHasOptionsMenu(true); + + // Create an empty adapter we will use to display the loaded data. + mAdapter = new AppListAdapter(getActivity()); + setListAdapter(mAdapter); + + // Start out with a progress indicator. + setListShown(false); + + // Prepare the loader. Either re-connect with an existing one, + // or start a new one. + getLoaderManager().initLoader(0, null, this); + } + + @Override public void onListItemClick(ListView l, View v, int position, long id) { + // Insert desired behavior here. + Log.i("LoaderCustom", "Item clicked: " + id); + } + + @Override public Loader> onCreateLoader(int id, Bundle args) { + // This is called when a new Loader needs to be created. This + // sample only has one Loader with no arguments, so it is simple. + return new AppListLoader(getActivity()); + } + + @Override public void onLoadFinished(Loader> loader, List data) { + // Set the new data in the adapter. + mAdapter.setData(data); + + // The list should now be shown. + if (isResumed()) { + setListShown(true); + } else { + setListShownNoAnimation(true); + } + } + + @Override public void onLoaderReset(Loader> loader) { + // Clear the data in the adapter. + mAdapter.setData(null); + } + } + +} diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/LoaderThrottleSupport.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/LoaderThrottleSupport.java new file mode 100644 index 000000000..a15962259 --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/LoaderThrottleSupport.java @@ -0,0 +1,525 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.actionbarsherlock.sample.demos.app; + + +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.ListFragment; +import android.support.v4.app.LoaderManager; +import android.support.v4.content.CursorLoader; +import android.support.v4.content.Loader; +import android.support.v4.view.Menu; +import android.support.v4.view.MenuItem; +import android.support.v4.widget.SimpleCursorAdapter; + +import android.content.ContentProvider; +import android.content.ContentResolver; +import android.content.ContentUris; +import android.content.ContentValues; +import android.content.Context; +import android.content.UriMatcher; +import android.database.Cursor; +import android.database.DatabaseUtils; +import android.database.SQLException; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; +import android.database.sqlite.SQLiteQueryBuilder; +import android.net.Uri; +import android.os.AsyncTask; +import android.os.Build; +import android.os.Bundle; +import android.provider.BaseColumns; +import android.text.TextUtils; +import android.util.Log; +import android.view.MenuInflater; +import android.view.View; +import android.widget.ListView; + +import java.util.HashMap; + +/** + * Demonstration of bottom to top implementation of a content provider holding + * structured data through displaying it in the UI, using throttling to reduce + * the number of queries done when its data changes. + */ +public class LoaderThrottleSupport extends FragmentActivity { + // Debugging. + static final String TAG = "LoaderThrottle"; + + /** + * The authority we use to get to our sample provider. + */ + public static final String AUTHORITY = "com.actionbarsherlock.sample.demos.apis.LoaderThrottle"; + + /** + * Definition of the contract for the main table of our provider. + */ + public static final class MainTable implements BaseColumns { + + // This class cannot be instantiated + private MainTable() {} + + /** + * The table name offered by this provider + */ + public static final String TABLE_NAME = "main"; + + /** + * The content:// style URL for this table + */ + public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/main"); + + /** + * The content URI base for a single row of data. Callers must + * append a numeric row id to this Uri to retrieve a row + */ + public static final Uri CONTENT_ID_URI_BASE + = Uri.parse("content://" + AUTHORITY + "/main/"); + + /** + * The MIME type of {@link #CONTENT_URI}. + */ + public static final String CONTENT_TYPE + = "vnd.android.cursor.dir/vnd.example.api-demos-throttle"; + + /** + * The MIME type of a {@link #CONTENT_URI} sub-directory of a single row. + */ + public static final String CONTENT_ITEM_TYPE + = "vnd.android.cursor.item/vnd.example.api-demos-throttle"; + /** + * The default sort order for this table + */ + public static final String DEFAULT_SORT_ORDER = "data COLLATE LOCALIZED ASC"; + + /** + * Column name for the single column holding our data. + *

Type: TEXT

+ */ + public static final String COLUMN_NAME_DATA = "data"; + } + + /** + * This class helps open, create, and upgrade the database file. + */ + static class DatabaseHelper extends SQLiteOpenHelper { + + private static final String DATABASE_NAME = "loader_throttle.db"; + private static final int DATABASE_VERSION = 2; + + DatabaseHelper(Context context) { + + // calls the super constructor, requesting the default cursor factory. + super(context, DATABASE_NAME, null, DATABASE_VERSION); + } + + /** + * + * Creates the underlying database with table name and column names taken from the + * NotePad class. + */ + @Override + public void onCreate(SQLiteDatabase db) { + db.execSQL("CREATE TABLE " + MainTable.TABLE_NAME + " (" + + MainTable._ID + " INTEGER PRIMARY KEY," + + MainTable.COLUMN_NAME_DATA + " TEXT" + + ");"); + } + + /** + * + * Demonstrates that the provider must consider what happens when the + * underlying datastore is changed. In this sample, the database is upgraded the database + * by destroying the existing data. + * A real application should upgrade the database in place. + */ + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + + // Logs that the database is being upgraded + Log.w(TAG, "Upgrading database from version " + oldVersion + " to " + + newVersion + ", which will destroy all old data"); + + // Kills the table and existing data + db.execSQL("DROP TABLE IF EXISTS notes"); + + // Recreates the database with a new version + onCreate(db); + } + } + + /** + * A very simple implementation of a content provider. + */ + public static class SimpleProvider extends ContentProvider { + // A projection map used to select columns from the database + private final HashMap mNotesProjectionMap; + // Uri matcher to decode incoming URIs. + private final UriMatcher mUriMatcher; + + // The incoming URI matches the main table URI pattern + private static final int MAIN = 1; + // The incoming URI matches the main table row ID URI pattern + private static final int MAIN_ID = 2; + + // Handle to a new DatabaseHelper. + private DatabaseHelper mOpenHelper; + + /** + * Global provider initialization. + */ + public SimpleProvider() { + // Create and initialize URI matcher. + mUriMatcher = new UriMatcher(UriMatcher.NO_MATCH); + mUriMatcher.addURI(AUTHORITY, MainTable.TABLE_NAME, MAIN); + mUriMatcher.addURI(AUTHORITY, MainTable.TABLE_NAME + "/#", MAIN_ID); + + // Create and initialize projection map for all columns. This is + // simply an identity mapping. + mNotesProjectionMap = new HashMap(); + mNotesProjectionMap.put(MainTable._ID, MainTable._ID); + mNotesProjectionMap.put(MainTable.COLUMN_NAME_DATA, MainTable.COLUMN_NAME_DATA); + } + + /** + * Perform provider creation. + */ + @Override + public boolean onCreate() { + mOpenHelper = new DatabaseHelper(getContext()); + // Assumes that any failures will be reported by a thrown exception. + return true; + } + + /** + * Handle incoming queries. + */ + @Override + public Cursor query(Uri uri, String[] projection, String selection, + String[] selectionArgs, String sortOrder) { + + // Constructs a new query builder and sets its table name + SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); + qb.setTables(MainTable.TABLE_NAME); + + switch (mUriMatcher.match(uri)) { + case MAIN: + // If the incoming URI is for main table. + qb.setProjectionMap(mNotesProjectionMap); + break; + + case MAIN_ID: + // The incoming URI is for a single row. + qb.setProjectionMap(mNotesProjectionMap); + qb.appendWhere(MainTable._ID + "=?"); + String[] newSelectionArgs = new String[selectionArgs.length + 1]; + System.arraycopy(selectionArgs, 0, newSelectionArgs, 0, selectionArgs.length); + newSelectionArgs[selectionArgs.length] = uri.getLastPathSegment(); + selectionArgs = newSelectionArgs; + break; + + default: + throw new IllegalArgumentException("Unknown URI " + uri); + } + + + if (TextUtils.isEmpty(sortOrder)) { + sortOrder = MainTable.DEFAULT_SORT_ORDER; + } + + SQLiteDatabase db = mOpenHelper.getReadableDatabase(); + + Cursor c = qb.query(db, projection, selection, selectionArgs, + null /* no group */, null /* no filter */, sortOrder); + + c.setNotificationUri(getContext().getContentResolver(), uri); + return c; + } + + /** + * Return the MIME type for an known URI in the provider. + */ + @Override + public String getType(Uri uri) { + switch (mUriMatcher.match(uri)) { + case MAIN: + return MainTable.CONTENT_TYPE; + case MAIN_ID: + return MainTable.CONTENT_ITEM_TYPE; + default: + throw new IllegalArgumentException("Unknown URI " + uri); + } + } + + /** + * Handler inserting new data. + */ + @Override + public Uri insert(Uri uri, ContentValues initialValues) { + if (mUriMatcher.match(uri) != MAIN) { + // Can only insert into to main URI. + throw new IllegalArgumentException("Unknown URI " + uri); + } + + ContentValues values; + + if (initialValues != null) { + values = new ContentValues(initialValues); + } else { + values = new ContentValues(); + } + + if (values.containsKey(MainTable.COLUMN_NAME_DATA) == false) { + values.put(MainTable.COLUMN_NAME_DATA, ""); + } + + SQLiteDatabase db = mOpenHelper.getWritableDatabase(); + + long rowId = db.insert(MainTable.TABLE_NAME, null, values); + + // If the insert succeeded, the row ID exists. + if (rowId > 0) { + Uri noteUri = ContentUris.withAppendedId(MainTable.CONTENT_ID_URI_BASE, rowId); + getContext().getContentResolver().notifyChange(noteUri, null); + return noteUri; + } + + throw new SQLException("Failed to insert row into " + uri); + } + + /** + * Handle deleting data. + */ + @Override + public int delete(Uri uri, String where, String[] whereArgs) { + SQLiteDatabase db = mOpenHelper.getWritableDatabase(); + String finalWhere; + + int count; + + switch (mUriMatcher.match(uri)) { + case MAIN: + // If URI is main table, delete uses incoming where clause and args. + count = db.delete(MainTable.TABLE_NAME, where, whereArgs); + break; + + // If the incoming URI matches a single note ID, does the delete based on the + // incoming data, but modifies the where clause to restrict it to the + // particular note ID. + case MAIN_ID: + // If URI is for a particular row ID, delete is based on incoming + // data but modified to restrict to the given ID. + finalWhere = DatabaseUtils.concatenateWhere( + MainTable._ID + " = " + ContentUris.parseId(uri), where); + count = db.delete(MainTable.TABLE_NAME, finalWhere, whereArgs); + break; + + default: + throw new IllegalArgumentException("Unknown URI " + uri); + } + + getContext().getContentResolver().notifyChange(uri, null); + + return count; + } + + /** + * Handle updating data. + */ + @Override + public int update(Uri uri, ContentValues values, String where, String[] whereArgs) { + SQLiteDatabase db = mOpenHelper.getWritableDatabase(); + int count; + String finalWhere; + + switch (mUriMatcher.match(uri)) { + case MAIN: + // If URI is main table, update uses incoming where clause and args. + count = db.update(MainTable.TABLE_NAME, values, where, whereArgs); + break; + + case MAIN_ID: + // If URI is for a particular row ID, update is based on incoming + // data but modified to restrict to the given ID. + finalWhere = DatabaseUtils.concatenateWhere( + MainTable._ID + " = " + ContentUris.parseId(uri), where); + count = db.update(MainTable.TABLE_NAME, values, finalWhere, whereArgs); + break; + + default: + throw new IllegalArgumentException("Unknown URI " + uri); + } + + getContext().getContentResolver().notifyChange(uri, null); + + return count; + } + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + FragmentManager fm = getSupportFragmentManager(); + + // Create the list fragment and add it as our sole content. + if (fm.findFragmentById(android.R.id.content) == null) { + ThrottledLoaderListFragment list = new ThrottledLoaderListFragment(); + fm.beginTransaction().add(android.R.id.content, list).commit(); + } + } + + public static class ThrottledLoaderListFragment extends ListFragment + implements LoaderManager.LoaderCallbacks { + + // Menu identifiers + static final int POPULATE_ID = Menu.FIRST; + static final int CLEAR_ID = Menu.FIRST+1; + + // This is the Adapter being used to display the list's data. + SimpleCursorAdapter mAdapter; + + // If non-null, this is the current filter the user has provided. + String mCurFilter; + + // Task we have running to populate the database. + AsyncTask mPopulatingTask; + + @Override public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + setEmptyText("No data. Select 'Populate' to fill with data from Z to A at a rate of 4 per second."); + setHasOptionsMenu(true); + + // Create an empty adapter we will use to display the loaded data. + mAdapter = new SimpleCursorAdapter(getActivity(), + android.R.layout.simple_list_item_1, null, + new String[] { MainTable.COLUMN_NAME_DATA }, + new int[] { android.R.id.text1 }, 0); + setListAdapter(mAdapter); + + // Start out with a progress indicator. + setListShown(false); + + // Prepare the loader. Either re-connect with an existing one, + // or start a new one. + getLoaderManager().initLoader(0, null, this); + } + + @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + menu.add(Menu.NONE, POPULATE_ID, 0, "Populate") + .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); + menu.add(Menu.NONE, CLEAR_ID, 0, "Clear") + .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); + } + + @Override public boolean onOptionsItemSelected(MenuItem item) { + final ContentResolver cr = getActivity().getContentResolver(); + + switch (item.getItemId()) { + case POPULATE_ID: + if (mPopulatingTask != null) { + mPopulatingTask.cancel(false); + } + mPopulatingTask = new AsyncTask() { + @Override protected Void doInBackground(Void... params) { + for (char c='Z'; c>='A'; c--) { + if (isCancelled()) { + break; + } + StringBuilder builder = new StringBuilder("Data "); + builder.append(c); + ContentValues values = new ContentValues(); + values.put(MainTable.COLUMN_NAME_DATA, builder.toString()); + cr.insert(MainTable.CONTENT_URI, values); + // Wait a bit between each insert. + try { + Thread.sleep(250); + } catch (InterruptedException e) { + } + } + return null; + } + }; + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { + mPopulatingTask.execute((Void[])null); + } else { + AsyncTaskCompatHoneycomb.executeOnExecutor(mPopulatingTask); + } + return true; + + case CLEAR_ID: + if (mPopulatingTask != null) { + mPopulatingTask.cancel(false); + mPopulatingTask = null; + } + AsyncTask task = new AsyncTask() { + @Override protected Void doInBackground(Void... params) { + cr.delete(MainTable.CONTENT_URI, null, null); + return null; + } + }; + task.execute((Void[])null); + return true; + + default: + return super.onOptionsItemSelected(item); + } + } + + static class AsyncTaskCompatHoneycomb { + static void executeOnExecutor(AsyncTask task) { + task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void[])null); + } + } + + @Override public void onListItemClick(ListView l, View v, int position, long id) { + // Insert desired behavior here. + Log.i(TAG, "Item clicked: " + id); + } + + // These are the rows that we will retrieve. + static final String[] PROJECTION = new String[] { + MainTable._ID, + MainTable.COLUMN_NAME_DATA, + }; + + public Loader onCreateLoader(int id, Bundle args) { + CursorLoader cl = new CursorLoader(getActivity(), MainTable.CONTENT_URI, + PROJECTION, null, null, null); + cl.setUpdateThrottle(2000); // update at most every 2 seconds. + return cl; + } + + public void onLoadFinished(Loader loader, Cursor data) { + mAdapter.swapCursor(data); + + // The list should now be shown. + if (isResumed()) { + setListShown(true); + } else { + setListShownNoAnimation(true); + } + } + + public void onLoaderReset(Loader loader) { + mAdapter.swapCursor(null); + } + } +} + diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/SendResult.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/SendResult.java new file mode 100644 index 000000000..9345f5c19 --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/app/SendResult.java @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.actionbarsherlock.sample.demos.app; + +// Need the following import to get access to the app resources, since this +// class is in a sub-package. +import com.actionbarsherlock.sample.demos.R; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.Button; + + +/** + * Example of receiving a result from another activity. + */ +public class SendResult extends Activity +{ + /** + * Initialization of the Activity after it is first created. Must at least + * call {@link android.app.Activity#setContentView setContentView()} to + * describe what is to be displayed in the screen. + */ + @Override + protected void onCreate(Bundle savedInstanceState) + { + // Be sure to call the super class. + super.onCreate(savedInstanceState); + + // See assets/res/any/layout/hello_world.xml for this + // view layout definition, which is being set here as + // the content of our screen. + setContentView(R.layout.send_result); + + // Watch for button clicks. + Button button = (Button)findViewById(R.id.corky); + button.setOnClickListener(mCorkyListener); + button = (Button)findViewById(R.id.violet); + button.setOnClickListener(mVioletListener); + } + + private OnClickListener mCorkyListener = new OnClickListener() + { + public void onClick(View v) + { + // To send a result, simply call setResult() before your + // activity is finished. + setResult(RESULT_OK, (new Intent()).setAction("Corky!")); + finish(); + } + }; + + private OnClickListener mVioletListener = new OnClickListener() + { + public void onClick(View v) + { + // To send a result, simply call setResult() before your + // activity is finished. + setResult(RESULT_OK, (new Intent()).setAction("Violet!")); + finish(); + } + }; +} + diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/content/LocalServiceBroadcaster.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/content/LocalServiceBroadcaster.java new file mode 100644 index 000000000..eace84d69 --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/content/LocalServiceBroadcaster.java @@ -0,0 +1,167 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.actionbarsherlock.sample.demos.content; + + +import com.actionbarsherlock.sample.demos.R; + +import android.app.Activity; +import android.app.Service; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.os.Bundle; +import android.os.Handler; +import android.os.IBinder; +import android.os.Message; +import android.support.v4.content.LocalBroadcastManager; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.Button; +import android.widget.TextView; + +/** + * Demonstrates the use of a LocalBroadcastManager to easily communicate + * data from a service to any other interested code. + */ +public class LocalServiceBroadcaster extends Activity { + static final String ACTION_STARTED = "com.actionbarsherlock.sample.demos.STARTED"; + static final String ACTION_UPDATE = "com.actionbarsherlock.sample.demos.UPDATE"; + static final String ACTION_STOPPED = "com.actionbarsherlock.sample.demos.STOPPED"; + + LocalBroadcastManager mLocalBroadcastManager; + BroadcastReceiver mReceiver; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.local_service_broadcaster); + + // This is where we print the data we get back. + final TextView callbackData = (TextView)findViewById(R.id.callback); + + // Put in some initial text. + callbackData.setText("No broadcast received yet"); + + // We use this to send broadcasts within our local process. + mLocalBroadcastManager = LocalBroadcastManager.getInstance(this); + + // We are going to watch for interesting local broadcasts. + IntentFilter filter = new IntentFilter(); + filter.addAction(ACTION_STARTED); + filter.addAction(ACTION_UPDATE); + filter.addAction(ACTION_STOPPED); + mReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + if (intent.getAction().equals(ACTION_STARTED)) { + callbackData.setText("STARTED"); + } else if (intent.getAction().equals(ACTION_UPDATE)) { + callbackData.setText("Got update: " + intent.getIntExtra("value", 0)); + } else if (intent.getAction().equals(ACTION_STOPPED)) { + callbackData.setText("STOPPED"); + } + } + }; + mLocalBroadcastManager.registerReceiver(mReceiver, filter); + + // Watch for button clicks. + Button button = (Button)findViewById(R.id.start); + button.setOnClickListener(mStartListener); + button = (Button)findViewById(R.id.stop); + button.setOnClickListener(mStopListener); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mLocalBroadcastManager.unregisterReceiver(mReceiver); + } + + private OnClickListener mStartListener = new OnClickListener() { + public void onClick(View v) { + startService(new Intent(LocalServiceBroadcaster.this, LocalService.class)); + } + }; + + private OnClickListener mStopListener = new OnClickListener() { + public void onClick(View v) { + stopService(new Intent(LocalServiceBroadcaster.this, LocalService.class)); + } + }; + + public static class LocalService extends Service { + LocalBroadcastManager mLocalBroadcastManager; + int mCurUpdate; + + static final int MSG_UPDATE = 1; + + Handler mHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case MSG_UPDATE: { + mCurUpdate++; + Intent intent = new Intent(ACTION_UPDATE); + intent.putExtra("value", mCurUpdate); + mLocalBroadcastManager.sendBroadcast(intent); + Message nmsg = mHandler.obtainMessage(MSG_UPDATE); + mHandler.sendMessageDelayed(nmsg, 1000); + } break; + default: + super.handleMessage(msg); + } + } + }; + + @Override + public void onCreate() { + super.onCreate(); + mLocalBroadcastManager = LocalBroadcastManager.getInstance(this); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + // Tell any local interested parties about the start. + mLocalBroadcastManager.sendBroadcast(new Intent(ACTION_STARTED)); + + // Prepare to do update reports. + mHandler.removeMessages(MSG_UPDATE); + Message msg = mHandler.obtainMessage(MSG_UPDATE); + mHandler.sendMessageDelayed(msg, 1000); + return Service.START_STICKY; + } + + @Override + public void onDestroy() { + super.onDestroy(); + + // Tell any local interested parties about the stop. + mLocalBroadcastManager.sendBroadcast(new Intent(ACTION_STOPPED)); + + // Stop doing updates. + mHandler.removeMessages(MSG_UPDATE); + } + + @Override + public IBinder onBind(Intent intent) { + return null; + } + } +} diff --git a/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/view/CheckableFrameLayout.java b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/view/CheckableFrameLayout.java new file mode 100644 index 000000000..238773125 --- /dev/null +++ b/actionbarsherlock/samples/demos/src/com/actionbarsherlock/sample/demos/view/CheckableFrameLayout.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.actionbarsherlock.sample.demos.view; + +import android.content.Context; +import android.graphics.drawable.ColorDrawable; +import android.util.AttributeSet; +import android.widget.Checkable; +import android.widget.FrameLayout; + +public class CheckableFrameLayout extends FrameLayout implements Checkable { + private boolean mChecked; + + public CheckableFrameLayout(Context context) { + super(context); + } + + public CheckableFrameLayout(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public void setChecked(boolean checked) { + mChecked = checked; + setBackgroundDrawable(checked ? new ColorDrawable(0xff0000a0) : null); + } + + public boolean isChecked() { + return mChecked; + } + + public void toggle() { + setChecked(!mChecked); + } + +} diff --git a/actionbarsherlock/samples/plugins/AndroidManifest.xml b/actionbarsherlock/samples/plugins/AndroidManifest.xml new file mode 100644 index 000000000..189e92769 --- /dev/null +++ b/actionbarsherlock/samples/plugins/AndroidManifest.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/actionbarsherlock/samples/plugins/README.md b/actionbarsherlock/samples/plugins/README.md new file mode 100644 index 000000000..9a223bb62 --- /dev/null +++ b/actionbarsherlock/samples/plugins/README.md @@ -0,0 +1,13 @@ +ActionBarSherlock Sample: Plugins +================================= + +See [actionbarsherlock.com/samples.html][1] for information on the sample +contained in this folder. + + + + + + + + [1]: http://actionbarsherlock.com/samples.html diff --git a/actionbarsherlock/samples/plugins/pom.xml b/actionbarsherlock/samples/plugins/pom.xml new file mode 100644 index 000000000..6a42052f0 --- /dev/null +++ b/actionbarsherlock/samples/plugins/pom.xml @@ -0,0 +1,121 @@ + + + + 4.0.0 + + com.actionbarsherlock + sample-plugins + Sample: Plugins + apk + + + com.actionbarsherlock + parent-sample + 3.4.2 + ../pom.xml + + + + + android + android + provided + + + + com.google.android.maps + maps + provided + + + + com.actionbarsherlock + library + ${project.version} + apklib + + + + com.actionbarsherlock + plugin-maps + ${project.version} + + + + com.actionbarsherlock + plugin-preference + ${project.version} + + + + + src + ${apk.prefix}-${project.artifactId}-unaligned + + + + com.jayway.maven.plugins.android.generation2 + maven-android-plugin + true + + + + org.apache.maven.plugins + maven-javadoc-plugin + + true + + + + + + + + release + + + performRelease + true + + + + + + com.jayway.maven.plugins.android.generation2 + maven-android-plugin + true + + + ${project.build.directory}/${project.build.finalName}.apk + ${project.build.directory}/${apk.prefix}-${project.artifactId}.apk + + + + + alignApk + package + + zipalign + + + + + + + com.jakewharton + github-deploy-maven-plugin + 1.0.1 + + + aligned + + + + deploy + + + + + + + diff --git a/actionbarsherlock/samples/plugins/project.properties b/actionbarsherlock/samples/plugins/project.properties new file mode 100644 index 000000000..c6243b559 --- /dev/null +++ b/actionbarsherlock/samples/plugins/project.properties @@ -0,0 +1,14 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system use, +# "ant.properties", and override values to adapt the script to your +# project structure. + +# Project target. +target=Google Inc.:Google APIs:13 +android.library.reference.1=../../library +android.library.reference.2=../../plugins/maps +android.library.reference.3=../../plugins/preference diff --git a/actionbarsherlock/samples/plugins/res/drawable-hdpi/ic_compose.png b/actionbarsherlock/samples/plugins/res/drawable-hdpi/ic_compose.png new file mode 100644 index 0000000000000000000000000000000000000000..cdb09e4c6eaaaf6ea9e5875cdfcb37f7cf2ed1ce GIT binary patch literal 1390 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+n3Xa^B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPAEg{v+u2}(t{7puX=A(aKG z`a!A1`K3k4z=%sz23b{L-^Aq1JP;qO z-q+X4Gq1QLF)umQ)5TT^Xo6m5W{Q=itD}*Nfw8ltnWLGZp^KY^fvdTbqoKKxi=nfT ztC1^AuSMv>2~2MaLaz%>y`ZF!TL84#CABECEH%ZgC_h&L>}9J=+-`BiX&zK> z3U0SJ;nb@Sbc{YIVv!;mCIn19ASOK70y*%6pPC0u?M1+39mBD~l!1Zqk*AAeNX4x; zGd#TyJBS>QPTrcgWog9P9YUf#3(Ny;UY=ZC&R^HpR8jC#<(^Gdsbz)Wo=Tx3tlf)N zM072>=Jbc(MzKxhT*{`-$`8uEmp$u!?w#4=8Fc-t%ap~6f*(6rQx^v=dTX(RRr6pO z^8>yqJL}G}b#iY~;6JsiVogx>y8lI=JE9$gcd+l(yQLpc9bZ%+VKRA+(nPt;!_W7G zH%)%PIp@;Pr7a7bcFtZ}U3P-2uPM8LVb=jQiHR}`N;kN;t3?-BcSX*-+aPY0USutI zM(*_jm*;E5tu^=Gcd6RIzGw1+K)ts?Z-mb@q&D9vw~2U~aw$>w9sBtOS<2-e{q8P( zz4w&P&M&+EyY9?Hv(No(Mhl#Zud@dDWH1%S_r8n%^K@5M*~ZrgWh~fMv9A`*Kflqj z{FrrDFyrZ!VMTS~+q_fSTTtfA~UfS#^?F6*2UngA9; B_aFcO literal 0 HcmV?d00001 diff --git a/actionbarsherlock/samples/plugins/res/drawable-hdpi/ic_refresh.png b/actionbarsherlock/samples/plugins/res/drawable-hdpi/ic_refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..08c32e09eb8b6a5d368c1d7d5505c2768a96227d GIT binary patch literal 683 zcmV;c0#yBpP)0y=@e07=@i{MrE6@bM09OQi6XI`I(14Ztx~7elCqJqDea|9|BvsG%zW?7 zyj}J%A3tqx_Raj~z3=_M_cmzQ$kK{f@Vd|E-Ug< ze7vhdluNu9Qsm(Z9N|C2d)pt$9c1k8TLyM#2 zkmM_1Q8UGR*#WxPT4Ma!;%hYhO@3{LeDB_&eE?im$YLx-j*5$<#ijkuKv10hG!JgT z19$>kZVN^lL7LhL(8g2K&!0P0Z>`uI+&Z+kvsh0fNEVUdl2oqHl)9Pyn@J_1ZPX9Q z@yOBiJoD7#xh==vQN^fBZT>W=Bs#IAai3Q3;m~)(bi1XBc}>&ab?Kil5f~MOeS=vI zVG)oPHnI`ZS}a8yuXeW_qFv24|8MoXy56cQ@CA&3K5%RxF2nbEuGEg2cFT{T`(OK<$7AQ2 z%1->A>Y6zZ3oh5`P(I0ZI>xIy#3Mwt^#mM%Q{N}5;0Me=U?4CMSl##)U;s$9B>jDB R`#Asr002ovPDHLkV1f^IJ%a!M literal 0 HcmV?d00001 diff --git a/actionbarsherlock/samples/plugins/res/drawable-hdpi/ic_search.png b/actionbarsherlock/samples/plugins/res/drawable-hdpi/ic_search.png new file mode 100644 index 0000000000000000000000000000000000000000..59de344e755b658e54ecd9d117fad8d63ee10b39 GIT binary patch literal 641 zcmV-{0)G98P)%d+fgDNAgZPMu2Zp-bmPr@eN_vZtbZhm`2B%BEYQh=?ww)he4-X_e{wc*FC| z-`AUFV}5+>Z`ONnzB|8tzu)hTVi-njkZmY7;1&st1cq(H0&|j}LP>!P=zumj0ekdQ zj*&FukvLcZUBlhZK-S0Fws;+=fg{78eS+$51u7mA^$2KzEc4w5*a1y&3sjJ&VJ~p= zm%(O`A>QJi%rQtij9&t8%=j-*2r9%mPF%y|!a8_l=3N9OaG$%0>SOUD_v5By3)EKe#XPX>s*qq2ieV(xP<*qpR8svHcx9cZ*xI*GsG4^gG)W;M!Ex|bR*g2I+8;d z!8Of|eVN^i38|&eKKj8H*VUNzM57|LVKqsD8rP{PRlWYJ zgZn9%cIb*UPz?Lcf}6)#!6H9i+MRclkX~SpgBoq&NHtou>lc;i4QnJY68O&r b{s=Gt9ClaVhD^{i00000NkvXXu0mjfAWz-uCD{+5{n(Ac8Q=U@(Zz=v}m6hSAFyBYN*Gx+sz8o#-KYjb4%{5uF4f zYLKG5a?bgm_x-zPz?zMJ|j+P1)IWsu`0H9JuDC*seh`%o>@y*xp zdxOf&a0jPkjMI0s#d#sIXn>rJ8ww3lbwS#p_0UKgANOIj6aYYA>tJAvGuG6ATf4b{ zk$+{t-Y%FMGyotaqD@^*1{^?-XzbNq`Jel!2OEyw}-mk7>Dn&aO_8Efi* z6x^_AkSJJ4z*-0<1cE`p5MdE9F)@A+R0tv@COiNT{kOf4tpF90~ZwZ^6~bXIh;_H;qJ z;#3u-Ic`qCHV!s$A&9sT1R^FPBnB0Ni9;ZAB1%Gv!irFsq9_z1F0Akm$Nz*?R*(~d zK*c5G6k$pbh?0=_4NgHsR7o5rECv&T3jKpsb@jj@U9Hjo=ykZ!`yZ_M|B8hxV9`jN z8`i+h&H0}S(6M*Jxp~;TVL%G{q99GAwS(*5_22aT+gn96*5N7IMj7ko0{T~c;ST?U zeg%0kn1r0Nk}&k&e#?uC2q{WHltn}pB!pnXFpmFVZT^2^CU|3v;NRl-e~RUwt(yw` zJN<9z-z@&yJZRUOj=|ovhCh}#4**~cS5=fV@Lt$6C&S#G$+{}>+y67QoxwkxLTzJG zFTmow0W!`=5{J?7VDQ^QoM~ZZIkko?dO76b3+6N_&i7^c(rK&|ZfQ8v8^6O#1q?zS zSyQOj*WMpZ5imKAw-q^`7XH&ECg4{zhT!x=$fdtK^)r=Tl3ub5x<0x*IORzh=BjD0 z?*cvsyv3io9em{q;04A$j2?Q;YhD9LBMB}sB0sK|x47czq}y9St7{e!UM(tmu6 zCBF5HUFKzGW@byXhIzr{geT$*+Ejxy+sJSn22WD9DCCex4rcPFQZT?CFz;eH2g zBve%6W##3>OJpret}i4!h*h55mG|?LB#F%$wizLv@CS?#8kbz!nz6?y3WMLhS?OQiXl=IYi1JcUIyTeSB?=XOR`EKz$GE3`9)#8 z-4hUCY`0Zft^0&5<)*c`O=(8sr*M$)s6_-RNr0%YQd z#{6x1H10^~OADvZ8bT4<+k5>4)QfTH4;lM*@8p?%jmRT?&q%l_NMUvL_g*qv^6gfecb`K2nkPTJK|+MT7pJ~9 z91DNv42k|;Wcx6KU$DpSfG#Qeik#R*?BmEId|Mj65T+udp0b1BB+5fc^b{QV(PXFl zR+_kH%k_!qeDimzi^Cw;+L}t|Gwqc+vc!Nbcbumua=JjtTqYlgVTAAUP_2EKnB zS#o=>XE!%^lKrcSd1pJGjQ=sj|9F-K^JCu9hkFdSc7mMpHxb=1MrEtXf+>3`9YVfk zH(~s;e<|@1Q9#N7`S!vyvi*5wbg6*?p?ES~P7A^GEn_zmD8cIjTVBH7%h65`gnkYxGMG`I7W6(jH(5>=IhKcg%;G@pC zO;fbE_cl#PLq>%gbs7h2*m7Uvm<5IeNU^wqn*Bxw{Z?aq-H-cAzS@74&rzMZq|mGSx5&=9bkAChUug z#$$eqxWDs4=ys6YQ)LVTTyC9#h)C;MmppCc@G9qhm;TPM1M9q?;9ZHJp)j7-Oud}& zh3B&4dJh6GKP>SG2z*K5%IVK^Q#r(jjFN%qs<_|@P+11@+NY#^^u^v(cBwOtg)>*S(!gM9@3|4U^zh&=&*zth!JbIZGVWgnBpW>4^N|1^i-dMaGHpz&GW2z!9 zPt0ICqARL-gHR1o-y+2HY0g;K^LGz%zt^ysIxMf;_en4^=EhtY|!;3G!Z7b?&hQB87K5{J>x zF!ykUrL^~x$VJa=zFjUfTi%;DiEkv=i`gR zF$Cre@{FH<*dl{x5NLS%|586a^j_&Ub7KcpKfR5X^-#vtL--%dVwYeKh^2om7UDws zY1XO!s6>^-sr4damk>&M$b52!CfOPVWfcPlMO2FHfejxjS52X0^;HDE`qby|J#lVl zob?JMZOieVMaMZt%OUcy()qRQEH!4K$0Lxv`OdI+McLWeFC=3dPD8*EhFQ$E%obGu zemx_YsOa~LME0G$`v!oA;SYHpjl~3x~X&*-B&oB+;0)o1u zJeKI-w={c2t-|}Jq75I;rYvOe%(Dzjb5@DQb{y>Wyf0QSb*NOwLzmP=S~xlFa>M&2 zphiVLo3p!BR1IDE1wfK@hz&Dq)=HiMN95b}&vh-ETBgr7`d2A{hb#Stnnr{dv^cN3 zJNgjg7}b+HDWaXxAk`S5SOF)@c<*aV<2U*H zpXYyBP)l_R1LtS#?ZNUJGu=fG;#1#Iqb|}|RxZyT#d>kJljc&qpqP1$P>tYMm4K>x zi7`-(8eDbP8?!}+_%ihrPDFRBT&AK zv55}jB(2z4$wF|j=@!_n(!i=N3Hh!KVmdoJt0?uHJdIoTea+hfS=;kTeIu3KZE^TL z;h}SA4e_=mtrmVFrv1Q!zG0ADenIL%U(SQh_=N(q?cQ~9(RSASZSj!O335l3Yqvvc zvE>9ysS|(YvrLy;i=O8lWi{m-UeXbd-cWbE1Y`guF@_0uB+c6L5{Ra4ASZYe$yXNr zmo+c^RD;BVOTgZXD>L|=0LQIq807W^Eo$RPh6~DS#hS`&kVyrLafA;EntBSX^ z2j1Oh4V6O_%sU4cS1??1KX9z%(`ju<_@_DVSnlE3dFKb7GV2hsmX7a~y zRVk0B{`Yp6yXIiaU`eDykEiMeUzNRih!JOJRyZjRaiq2I{`R3`e@u8AP{M&U8 zdG7y`KoDxg&+cqf3s!6E47BC7$B#Uda;)2(TN&^h=PrynPoN486+Qj1^Lg~?j&Qf$(Ol~A4yccI#58Sb5WO$xYXq37c zz$bu5$0-K%Hjx_;5Kz2hWus=A4^(ByI;}Ms-z<>7B3H^;>TL@zF1|12lJWd8rU^{y zUSa(-^`{83*H4tY{HyoXFT2AZeUg~bfLkAD%@B(zzNz5nT4d1+fY)VNQnjCQw^=-_ z#ephunj{T;qP?`*Ts|bRAqr5MdqfV(10S6Q--jBAFzloq>S!oE>o|D9^kcuXYw9_- zu94|T&T;YmFXe)=K=>CY#mB-#1Mb_6jvr@c)`#*PFShf~r?ELCVk;)(xvF{MgUZr$ z9`P+UkJb>2QJArT2dsx|t!fD;%YZuN@Z1_%%{^UOx_s}Eahm~{%Uu=JxKtAzh5C#6 zKU>KcPl4y(C1v@OhX&$-FFb{^#(Zy_LQFq%4iX=5V6vH`2g)hp2G=ou4?dBU zclp%j%cSzop~UppiP@ay-|A@eVsjWw@l#I+J>f1_D4h*>M(YotAFkf?Jjs$8#PER= z*qB%C1iW|cYTn^XkVx;0mDMZyVX8-J*MoHqsGzQP+Y1}8UDx!_)$%x+cyCB`MxEcS z3y>=eHmaO}o?Y>=TW#|BzbA1K>R*~;RF`E>&oe4Af2ek?G}No-m=(f^+|tkE{z;Fh((?)36($jX8D?KjKKWVQ_uO{0FA`0!fKUBT(bw|AUotA@pICstdp zYHMlfRh@LJYEWnoLRJ%x7t~V8A4=WQrBezHrlyGqZQLVMs>}ZvP8Y_YeeqSPpLfk( zz?blZC`tE^JCr1zS<sy^x}_q5VH&B>hur3vKg>)%br)6-=`do`En^%o{Sie;BNB6z#{p=IYQ z3y=LAa*q9qG{EG6+HR$L)mFrv*q6|F3t9IBe1%f~`J-$CvoO0tQ z&$FwUkB`KS6b<%wec6@U2$XQs6*i$!zl>8LJRv--zeTlJVFK0N6K|+j#ROeSbNKZ} zo*%OmsmH0U6#+*h)ATuSZ=R^Zv~2T(9k{v?0q+Wg^x}`T!pmlL@~i(`+q07}GiPHC zx50}imIDT|&6 z^ip7E8uV6qSfKt~-|%%QK-L7zo3E4Ay?~{UJvF^JK5si3nRt@a8>n_l+xj7E%ra?z zPYQ2$)u%ONVx53sn+wmT5WhZLI6C(y%j=GW*@>l=s~WCm|7yHR>1KMFi)Ajp44q3| z+d|ow665c9hZqyDtEb39*F_(9kiQ?OF*Kjen6}hrmzNilr-E& zOeIpeAPj2$_h%QT#EzIhT_$)@A7tazRy`~QdY`es>Ur`iFc`XgHf9=!-#Mus0yEY$ zdB#Lj9_-afL3A53f{CRt)C;Xo>L_3kbFD|=aFlM>zo?AMnJImq7}U`_QIsh^Gy%}_ z`WXpIQ0z56icanXa}7>%&{CoAhL2ImR>gpm>%4|2)yUH<65#DC65%eAF9%Xi73S;F zvnHjBam zHYmuaq^O|Q@{WV28YOQ?#+!kkHV%}K5f80N-2@}4+rij@7`=9a|2=FM@(r>e$$s2x*S+5|>SsdKWQ+=Id?il}#U5t40EQL>StzpZK zU=7Ax^pknMh zB|I$TC20k@Yd=%*!OEp82~mJR2Dn1yGM1`wB~YAE(Oa5^nrM}oZQb=$@cfeAG_fhr zs(Y-maEP0SP(e=WxXBH*^(rua+>#Rc{j_+oxSrQDW?kE`N7FxcwD$Zp)=9LFRS)lv zrS`f8I}x%if-5*Haf96@;5o3Bh(7FAFLw_Ke^?;<;GaK7N0RA32RB~f`90kz}6HG*UE>(_QTvq#f z{hrjt_S{i<#^!DLv%Y5!+Er4gJ4iw22s#Tde8<$_mkpOp zm_NvRi53fe?zA$q7jJ2+el?dwr1X@I`20@n$N#_$+hob~X`Q!YGY`%&+aKJSo}-C> zTW?n=a$bRJ1o0*NX|mmiIW*iN4#zKQ?t@fRq6iBK@6q1pT~q0141T^Dr$)b3tQ3kf zymS;6fhT)W#4n((eoPdP?G2HHl?3P;?vO9k(%30qBkHWc@9+Dxm%9hjZJE2dpX@wtcO6{q$3rb)2KPjl#-j&ExM0hbeZLc!TcYTJMYl0&q~*w* zp92|DZg~vaGM6H+S^`Zv`xhFg?caZY+C^y*dF+%94JjI1H`ND3JOR(uO&^_*tVqJ@ zn^DQJDCHCxbY_BdmAFAa>-Kg4T{5UOD$|ctryR&r&LClbH5^yUVn@9jLuc{%aseIE zw*@cG?EC%LjYig)TS1&Eugkqjf_<3lA!lW+Y4x0rNl>m@G2gu>MSUuVN~__hx_KI( z0ZF#REkHFhNHWocZFr23hGNnA5%~#KB_*BTvy}1irqOOq>F_h%Uqr-%@hy8=l%y~r z88sMxSYOF9(dJ~T2cF3HIt(<9GX9ALY=klgf4lH-ltLc>iTpX-4n?^7NbFj#NnF+j zQ^x8NYdjQ2Ttq_vJ5c~U|OI1lru}0o1^#1?@cc4!I literal 0 HcmV?d00001 diff --git a/actionbarsherlock/samples/plugins/res/drawable-ldpi/icon.png b/actionbarsherlock/samples/plugins/res/drawable-ldpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..181f679f59edb8acdc56bb16130cd35b15d5dc3c GIT binary patch literal 3003 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 HN@xNA^WO+) literal 0 HcmV?d00001 diff --git a/actionbarsherlock/samples/plugins/res/drawable-mdpi/ic_search.png b/actionbarsherlock/samples/plugins/res/drawable-mdpi/ic_search.png new file mode 100644 index 0000000000000000000000000000000000000000..75339d906896b93ae0af276862f4fbba60d643f7 GIT binary patch literal 1330 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 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/samples/plugins/res/layout/actionbar_preferenceactivity.xml b/actionbarsherlock/samples/plugins/res/layout/actionbar_preferenceactivity.xml new file mode 100644 index 000000000..d2e1e83d7 --- /dev/null +++ b/actionbarsherlock/samples/plugins/res/layout/actionbar_preferenceactivity.xml @@ -0,0 +1,8 @@ + + + \ No newline at end of file diff --git a/actionbarsherlock/samples/plugins/res/layout/map_simple.xml b/actionbarsherlock/samples/plugins/res/layout/map_simple.xml new file mode 100644 index 000000000..c91ec5f95 --- /dev/null +++ b/actionbarsherlock/samples/plugins/res/layout/map_simple.xml @@ -0,0 +1,10 @@ + + + \ No newline at end of file diff --git a/actionbarsherlock/samples/plugins/res/values/arrays.xml b/actionbarsherlock/samples/plugins/res/values/arrays.xml new file mode 100644 index 000000000..e511636c0 --- /dev/null +++ b/actionbarsherlock/samples/plugins/res/values/arrays.xml @@ -0,0 +1,16 @@ + + + + + Alpha Option 01 + Beta Option 02 + Charlie Option 03 + + + + + alpha + beta + charlie + + diff --git a/actionbarsherlock/samples/plugins/res/values/strings.xml b/actionbarsherlock/samples/plugins/res/values/strings.xml new file mode 100644 index 000000000..52db11c1a --- /dev/null +++ b/actionbarsherlock/samples/plugins/res/values/strings.xml @@ -0,0 +1,76 @@ + + + + + + + 0GPE4Lb_ZG_rnk3YyJHd7pBAxP0BPBJvmZR_-Kw + + ABS: Plugins Sample + + Preference/Simple + You can use the `SherlockPreferenceActivity` base class to place the action bar on top of a normal `PreferenceActivity`.\n\nThis does not yet support the use of `PreferenceFragments`, however. + + If you compiled this application yourself you need to specify your own API key in res/values/strings.xml + Map/Simple Activity + Map/Simple Fragment + Map/Activity (with Action Bar) + Map/Fragment (with Action Bar) + + In-line preferences + Dialog-based preferences + Launch preferences + Preference attributes + + Checkbox preference + This is a checkbox + + Edit text preference + An example that uses an edit text dialog + Enter your favorite animal + + List preference + An example that uses a list dialog + Choose one + + Screen preference + Shows another screen of preferences + + Toggle preference + Preference that is on the next screen but same hierarchy + + Intent preference + Launches an Activity from an Intent + + My preference + This is a custom counter preference + + Haunted preference + I\'m on! :) + I\'m off! :( + + Parent checkbox preference + This is visually a parent + Child checkbox preference + This is visually a child + + Example preference dependency + WiFi + WiFi settings + + beta + Default value + diff --git a/actionbarsherlock/samples/plugins/res/xml/preferences.xml b/actionbarsherlock/samples/plugins/res/xml/preferences.xml new file mode 100644 index 000000000..e84c54ae0 --- /dev/null +++ b/actionbarsherlock/samples/plugins/res/xml/preferences.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/actionbarsherlock/samples/plugins/src/com/actionbarsherlock/sample/plugins/Support4Demos.java b/actionbarsherlock/samples/plugins/src/com/actionbarsherlock/sample/plugins/Support4Demos.java new file mode 100644 index 000000000..2a25d60f4 --- /dev/null +++ b/actionbarsherlock/samples/plugins/src/com/actionbarsherlock/sample/plugins/Support4Demos.java @@ -0,0 +1,149 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.actionbarsherlock.sample.plugins; + +import android.app.ListActivity; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.os.Bundle; +import android.view.View; +import android.widget.ListView; +import android.widget.SimpleAdapter; + +import java.text.Collator; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class Support4Demos extends ListActivity { + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + Intent intent = getIntent(); + String path = intent.getStringExtra("com.example.android.apis.Path"); + + if (path == null) { + path = ""; + } + + setListAdapter(new SimpleAdapter(this, getData(path), + android.R.layout.simple_list_item_1, new String[] { "title" }, + new int[] { android.R.id.text1 })); + getListView().setTextFilterEnabled(true); + } + + protected List> getData(String prefix) { + List> myData = new ArrayList>(); + + Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); + mainIntent.addCategory("com.actionbarsherlock.sample.plugins.SUPPORT4_SAMPLE_CODE"); + + PackageManager pm = getPackageManager(); + List list = pm.queryIntentActivities(mainIntent, 0); + + if (null == list) + return myData; + + String[] prefixPath; + String prefixWithSlash = prefix; + + if (prefix.equals("")) { + prefixPath = null; + } else { + prefixPath = prefix.split("/"); + prefixWithSlash = prefix + "/"; + } + + int len = list.size(); + + Map entries = new HashMap(); + + for (int i = 0; i < len; i++) { + ResolveInfo info = list.get(i); + CharSequence labelSeq = info.loadLabel(pm); + String label = labelSeq != null + ? labelSeq.toString() + : info.activityInfo.name; + + if (prefixWithSlash.length() == 0 || label.startsWith(prefixWithSlash)) { + + String[] labelPath = label.split("/"); + + String nextLabel = prefixPath == null ? labelPath[0] : labelPath[prefixPath.length]; + + if ((prefixPath != null ? prefixPath.length : 0) == labelPath.length - 1) { + addItem(myData, nextLabel, activityIntent( + info.activityInfo.applicationInfo.packageName, + info.activityInfo.name)); + } else { + if (entries.get(nextLabel) == null) { + addItem(myData, nextLabel, browseIntent(prefix.equals("") ? nextLabel : prefix + "/" + nextLabel)); + entries.put(nextLabel, true); + } + } + } + } + + Collections.sort(myData, sDisplayNameComparator); + + return myData; + } + + private final static Comparator> sDisplayNameComparator = + new Comparator>() { + private final Collator collator = Collator.getInstance(); + + public int compare(Map map1, Map map2) { + return collator.compare(map1.get("title"), map2.get("title")); + } + }; + + protected Intent activityIntent(String pkg, String componentName) { + Intent result = new Intent(); + result.setClassName(pkg, componentName); + return result; + } + + protected Intent browseIntent(String path) { + Intent result = new Intent(); + result.setClass(this, Support4Demos.class); + result.putExtra("com.example.android.apis.Path", path); + return result; + } + + protected void addItem(List> data, String name, Intent intent) { + Map temp = new HashMap(); + temp.put("title", name); + temp.put("intent", intent); + data.add(temp); + } + + @Override + @SuppressWarnings("unchecked") + protected void onListItemClick(ListView l, View v, int position, long id) { + Map map = (Map)l.getItemAtPosition(position); + + Intent intent = (Intent) map.get("intent"); + startActivity(intent); + } +} diff --git a/actionbarsherlock/samples/plugins/src/com/actionbarsherlock/sample/plugins/app/MapActivity.java b/actionbarsherlock/samples/plugins/src/com/actionbarsherlock/sample/plugins/app/MapActivity.java new file mode 100644 index 000000000..ba06fc716 --- /dev/null +++ b/actionbarsherlock/samples/plugins/src/com/actionbarsherlock/sample/plugins/app/MapActivity.java @@ -0,0 +1,26 @@ +package com.actionbarsherlock.sample.plugins.app; + +import com.actionbarsherlock.sample.plugins.R; +import com.google.android.maps.MapView; +import android.os.Bundle; +import android.support.v4.app.FragmentMapActivity; +import android.widget.Toast; + +public class MapActivity extends FragmentMapActivity { + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + //MapView for the lose :( + Toast.makeText(this, R.string.map_warning, Toast.LENGTH_LONG).show(); + + setContentView(R.layout.map_simple); + MapView mapView = (MapView)findViewById(R.id.mapview); + mapView.setBuiltInZoomControls(true); + } + + @Override + protected boolean isRouteDisplayed() { + return false; + } +} diff --git a/actionbarsherlock/samples/plugins/src/com/actionbarsherlock/sample/plugins/app/MapActivityActionBar.java b/actionbarsherlock/samples/plugins/src/com/actionbarsherlock/sample/plugins/app/MapActivityActionBar.java new file mode 100644 index 000000000..0537614b9 --- /dev/null +++ b/actionbarsherlock/samples/plugins/src/com/actionbarsherlock/sample/plugins/app/MapActivityActionBar.java @@ -0,0 +1,45 @@ +package com.actionbarsherlock.sample.plugins.app; + +import com.actionbarsherlock.sample.plugins.R; +import com.google.android.maps.MapView; +import android.os.Bundle; +import android.support.v4.app.FragmentMapActivity; +import android.support.v4.view.Menu; +import android.support.v4.view.MenuItem; +import android.widget.Toast; + +public class MapActivityActionBar extends FragmentMapActivity { + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + //MapView for the lose :( + Toast.makeText(this, R.string.map_warning, Toast.LENGTH_LONG).show(); + + setContentView(R.layout.map_simple); + MapView mapView = (MapView)findViewById(R.id.mapview); + mapView.setBuiltInZoomControls(true); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + menu.add("Save") + .setIcon(R.drawable.ic_compose) + .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); + + menu.add("Search") + .setIcon(R.drawable.ic_search) + .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); + + menu.add("Refresh") + .setIcon(R.drawable.ic_refresh) + .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); + + return super.onCreateOptionsMenu(menu); + } + + @Override + protected boolean isRouteDisplayed() { + return false; + } +} diff --git a/actionbarsherlock/samples/plugins/src/com/actionbarsherlock/sample/plugins/app/MapFragment.java b/actionbarsherlock/samples/plugins/src/com/actionbarsherlock/sample/plugins/app/MapFragment.java new file mode 100644 index 000000000..0d02aa93f --- /dev/null +++ b/actionbarsherlock/samples/plugins/src/com/actionbarsherlock/sample/plugins/app/MapFragment.java @@ -0,0 +1,43 @@ +package com.actionbarsherlock.sample.plugins.app; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentMapActivity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Toast; + +import com.actionbarsherlock.sample.plugins.R; +import com.google.android.maps.MapView; + +public class MapFragment extends FragmentMapActivity { + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + //MapView for the lose :( + Toast.makeText(this, R.string.map_warning, Toast.LENGTH_LONG).show(); + + getSupportFragmentManager() + .beginTransaction() + .add(android.R.id.content, new MyMapFragment()) + .commit(); + } + + public static final class MyMapFragment extends Fragment { + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.map_simple, container, false); + MapView mapView = (MapView)view.findViewById(R.id.mapview); + mapView.setBuiltInZoomControls(true); + return view; + } + } + + @Override + protected boolean isRouteDisplayed() { + return false; + } +} diff --git a/actionbarsherlock/samples/plugins/src/com/actionbarsherlock/sample/plugins/app/MapFragmentActionBar.java b/actionbarsherlock/samples/plugins/src/com/actionbarsherlock/sample/plugins/app/MapFragmentActionBar.java new file mode 100644 index 000000000..3134b2ebd --- /dev/null +++ b/actionbarsherlock/samples/plugins/src/com/actionbarsherlock/sample/plugins/app/MapFragmentActionBar.java @@ -0,0 +1,62 @@ +package com.actionbarsherlock.sample.plugins.app; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentMapActivity; +import android.support.v4.view.Menu; +import android.support.v4.view.MenuItem; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Toast; + +import com.actionbarsherlock.sample.plugins.R; +import com.google.android.maps.MapView; + +public class MapFragmentActionBar extends FragmentMapActivity { + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + //MapView for the lose :( + Toast.makeText(this, R.string.map_warning, Toast.LENGTH_LONG).show(); + + getSupportFragmentManager() + .beginTransaction() + .add(android.R.id.content, new MyMapFragment()) + .commit(); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + menu.add("Save") + .setIcon(R.drawable.ic_compose) + .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); + + menu.add("Search") + .setIcon(R.drawable.ic_search) + .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); + + menu.add("Refresh") + .setIcon(R.drawable.ic_refresh) + .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); + + return super.onCreateOptionsMenu(menu); + } + + public static final class MyMapFragment extends Fragment { + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.map_simple, container, false); + MapView mapView = (MapView)view.findViewById(R.id.mapview); + mapView.setBuiltInZoomControls(true); + return view; + } + } + + @Override + protected boolean isRouteDisplayed() { + return false; + } +} diff --git a/actionbarsherlock/samples/plugins/src/com/actionbarsherlock/sample/plugins/app/PreferenceSimple.java b/actionbarsherlock/samples/plugins/src/com/actionbarsherlock/sample/plugins/app/PreferenceSimple.java new file mode 100644 index 000000000..5602dfae8 --- /dev/null +++ b/actionbarsherlock/samples/plugins/src/com/actionbarsherlock/sample/plugins/app/PreferenceSimple.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2011 Jake Wharton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.actionbarsherlock.sample.plugins.app; + +import android.os.Bundle; +import android.support.v4.app.SherlockPreferenceActivity; +import android.support.v4.view.Menu; +import android.support.v4.view.MenuItem; + +import com.actionbarsherlock.sample.plugins.R; + +public class PreferenceSimple extends SherlockPreferenceActivity { + @Override + public boolean onCreateOptionsMenu(Menu menu) { + menu.add("Save") + .setIcon(R.drawable.ic_compose) + .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); + + menu.add("Search") + .setIcon(R.drawable.ic_search) + .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); + + menu.add("Refresh") + .setIcon(R.drawable.ic_refresh) + .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); + + return super.onCreateOptionsMenu(menu); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + addPreferencesFromResource(R.xml.preferences); + } +} diff --git a/actionbarsherlock/samples/pom.xml b/actionbarsherlock/samples/pom.xml new file mode 100644 index 000000000..9ddb6da3e --- /dev/null +++ b/actionbarsherlock/samples/pom.xml @@ -0,0 +1,24 @@ + + + + 4.0.0 + + com.actionbarsherlock + parent-sample + Sample (Parent) + pom + + + com.actionbarsherlock + parent + 3.4.2 + ../pom.xml + + + + demos + plugins + shakespeare + styled + + diff --git a/actionbarsherlock/samples/shakespeare/AndroidManifest.xml b/actionbarsherlock/samples/shakespeare/AndroidManifest.xml new file mode 100644 index 000000000..69fa3bcb9 --- /dev/null +++ b/actionbarsherlock/samples/shakespeare/AndroidManifest.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/actionbarsherlock/samples/shakespeare/README.md b/actionbarsherlock/samples/shakespeare/README.md new file mode 100644 index 000000000..5e507379c --- /dev/null +++ b/actionbarsherlock/samples/shakespeare/README.md @@ -0,0 +1,13 @@ +ActionBarSherlock Sample: Shakespeare +===================================== + +See [actionbarsherlock.com/samples.html][1] for information on the sample +contained in this folder. + + + + + + + + [1]: http://actionbarsherlock.com/samples.html diff --git a/actionbarsherlock/samples/shakespeare/pom.xml b/actionbarsherlock/samples/shakespeare/pom.xml new file mode 100644 index 000000000..9ffb7b5a9 --- /dev/null +++ b/actionbarsherlock/samples/shakespeare/pom.xml @@ -0,0 +1,103 @@ + + + + 4.0.0 + + com.actionbarsherlock + sample-shakespeare + Sample: Shakespeare + apk + + + com.actionbarsherlock + parent-sample + 3.4.2 + ../pom.xml + + + + + android + android + provided + + + + com.actionbarsherlock + library + ${project.version} + apklib + + + + + src + ${apk.prefix}-${project.artifactId}-unaligned + + + + com.jayway.maven.plugins.android.generation2 + maven-android-plugin + true + + + + org.apache.maven.plugins + maven-javadoc-plugin + + true + + + + + + + + release + + + performRelease + true + + + + + + com.jayway.maven.plugins.android.generation2 + maven-android-plugin + true + + + ${project.build.directory}/${project.build.finalName}.apk + ${project.build.directory}/${apk.prefix}-${project.artifactId}.apk + + + + + alignApk + package + + zipalign + + + + + + + com.jakewharton + github-deploy-maven-plugin + 1.0.1 + + + aligned + + + + deploy + + + + + + + diff --git a/actionbarsherlock/samples/shakespeare/project.properties b/actionbarsherlock/samples/shakespeare/project.properties new file mode 100644 index 000000000..34f549f8c --- /dev/null +++ b/actionbarsherlock/samples/shakespeare/project.properties @@ -0,0 +1,12 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system use, +# "ant.properties", and override values to adapt the script to your +# project structure. + +# Project target. +target=android-13 +android.library.reference.1=../../library diff --git a/actionbarsherlock/samples/shakespeare/res/drawable-hdpi/icon.png b/actionbarsherlock/samples/shakespeare/res/drawable-hdpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..723fbf062f1172c90596815b7d4e80795683059b GIT binary patch literal 6996 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 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/samples/shakespeare/res/drawable-ldpi/icon.png b/actionbarsherlock/samples/shakespeare/res/drawable-ldpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..181f679f59edb8acdc56bb16130cd35b15d5dc3c GIT binary patch literal 3003 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 ganY=gu%KH53+7=g`bSF9`b|O0=vLvBJX;eg( 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 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/samples/shakespeare/res/layout-land/activity_titles.xml b/actionbarsherlock/samples/shakespeare/res/layout-land/activity_titles.xml new file mode 100644 index 000000000..cbacb3b2c --- /dev/null +++ b/actionbarsherlock/samples/shakespeare/res/layout-land/activity_titles.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/actionbarsherlock/samples/shakespeare/res/layout-xlarge-land/activity_titles.xml b/actionbarsherlock/samples/shakespeare/res/layout-xlarge-land/activity_titles.xml new file mode 100644 index 000000000..2010ecf2d --- /dev/null +++ b/actionbarsherlock/samples/shakespeare/res/layout-xlarge-land/activity_titles.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/actionbarsherlock/samples/shakespeare/res/layout/activity_titles.xml b/actionbarsherlock/samples/shakespeare/res/layout/activity_titles.xml new file mode 100644 index 000000000..3c6146a46 --- /dev/null +++ b/actionbarsherlock/samples/shakespeare/res/layout/activity_titles.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + diff --git a/actionbarsherlock/samples/shakespeare/res/values/strings.xml b/actionbarsherlock/samples/shakespeare/res/values/strings.xml new file mode 100644 index 000000000..97871a1da --- /dev/null +++ b/actionbarsherlock/samples/shakespeare/res/values/strings.xml @@ -0,0 +1,7 @@ + + + ABS: Shakespeare Sample + + Shakespeare Titles + Shakespeare Details + diff --git a/actionbarsherlock/samples/shakespeare/src/com/actionbarsherlock/sample/shakespeare/Shakespeare.java b/actionbarsherlock/samples/shakespeare/src/com/actionbarsherlock/sample/shakespeare/Shakespeare.java new file mode 100644 index 000000000..de3e59d8b --- /dev/null +++ b/actionbarsherlock/samples/shakespeare/src/com/actionbarsherlock/sample/shakespeare/Shakespeare.java @@ -0,0 +1,223 @@ +package com.actionbarsherlock.sample.shakespeare; + +public final class Shakespeare { + /** + * Our data, part 1. + */ + public static final String[] TITLES = + { + "Henry IV (1)", + "Henry V", + "Henry VIII", + "Richard II", + "Richard III", + "Merchant of Venice", + "Othello", + "King Lear" + }; + + /** + * Our data, part 2. + */ + public static final String[] DIALOGUE = + { + "So shaken as we are, so wan with care," + + "Find we a time for frighted peace to pant," + + "And breathe short-winded accents of new broils" + + "To be commenced in strands afar remote." + + "No more the thirsty entrance of this soil" + + "Shall daub her lips with her own children's blood;" + + "Nor more shall trenching war channel her fields," + + "Nor bruise her flowerets with the armed hoofs" + + "Of hostile paces: those opposed eyes," + + "Which, like the meteors of a troubled heaven," + + "All of one nature, of one substance bred," + + "Did lately meet in the intestine shock" + + "And furious close of civil butchery" + + "Shall now, in mutual well-beseeming ranks," + + "March all one way and be no more opposed" + + "Against acquaintance, kindred and allies:" + + "The edge of war, like an ill-sheathed knife," + + "No more shall cut his master. Therefore, friends," + + "As far as to the sepulchre of Christ," + + "Whose soldier now, under whose blessed cross" + + "We are impressed and engaged to fight," + + "Forthwith a power of English shall we levy;" + + "Whose arms were moulded in their mothers' womb" + + "To chase these pagans in those holy fields" + + "Over whose acres walk'd those blessed feet" + + "Which fourteen hundred years ago were nail'd" + + "For our advantage on the bitter cross." + + "But this our purpose now is twelve month old," + + "And bootless 'tis to tell you we will go:" + + "Therefore we meet not now. Then let me hear" + + "Of you, my gentle cousin Westmoreland," + + "What yesternight our council did decree" + + "In forwarding this dear expedience.", + + "Hear him but reason in divinity," + + "And all-admiring with an inward wish" + + "You would desire the king were made a prelate:" + + "Hear him debate of commonwealth affairs," + + "You would say it hath been all in all his study:" + + "List his discourse of war, and you shall hear" + + "A fearful battle render'd you in music:" + + "Turn him to any cause of policy," + + "The Gordian knot of it he will unloose," + + "Familiar as his garter: that, when he speaks," + + "The air, a charter'd libertine, is still," + + "And the mute wonder lurketh in men's ears," + + "To steal his sweet and honey'd sentences;" + + "So that the art and practic part of life" + + "Must be the mistress to this theoric:" + + "Which is a wonder how his grace should glean it," + + "Since his addiction was to courses vain," + + "His companies unletter'd, rude and shallow," + + "His hours fill'd up with riots, banquets, sports," + + "And never noted in him any study," + + "Any retirement, any sequestration" + + "From open haunts and popularity.", + + "I come no more to make you laugh: things now," + + "That bear a weighty and a serious brow," + + "Sad, high, and working, full of state and woe," + + "Such noble scenes as draw the eye to flow," + + "We now present. Those that can pity, here" + + "May, if they think it well, let fall a tear;" + + "The subject will deserve it. Such as give" + + "Their money out of hope they may believe," + + "May here find truth too. Those that come to see" + + "Only a show or two, and so agree" + + "The play may pass, if they be still and willing," + + "I'll undertake may see away their shilling" + + "Richly in two short hours. Only they" + + "That come to hear a merry bawdy play," + + "A noise of targets, or to see a fellow" + + "In a long motley coat guarded with yellow," + + "Will be deceived; for, gentle hearers, know," + + "To rank our chosen truth with such a show" + + "As fool and fight is, beside forfeiting" + + "Our own brains, and the opinion that we bring," + + "To make that only true we now intend," + + "Will leave us never an understanding friend." + + "Therefore, for goodness' sake, and as you are known" + + "The first and happiest hearers of the town," + + "Be sad, as we would make ye: think ye see" + + "The very persons of our noble story" + + "As they were living; think you see them great," + + "And follow'd with the general throng and sweat" + + "Of thousand friends; then in a moment, see" + + "How soon this mightiness meets misery:" + + "And, if you can be merry then, I'll say" + + "A man may weep upon his wedding-day.", + + "First, heaven be the record to my speech!" + + "In the devotion of a subject's love," + + "Tendering the precious safety of my prince," + + "And free from other misbegotten hate," + + "Come I appellant to this princely presence." + + "Now, Thomas Mowbray, do I turn to thee," + + "And mark my greeting well; for what I speak" + + "My body shall make good upon this earth," + + "Or my divine soul answer it in heaven." + + "Thou art a traitor and a miscreant," + + "Too good to be so and too bad to live," + + "Since the more fair and crystal is the sky," + + "The uglier seem the clouds that in it fly." + + "Once more, the more to aggravate the note," + + "With a foul traitor's name stuff I thy throat;" + + "And wish, so please my sovereign, ere I move," + + "What my tongue speaks my right drawn sword may prove.", + + "Now is the winter of our discontent" + + "Made glorious summer by this sun of York;" + + "And all the clouds that lour'd upon our house" + + "In the deep bosom of the ocean buried." + + "Now are our brows bound with victorious wreaths;" + + "Our bruised arms hung up for monuments;" + + "Our stern alarums changed to merry meetings," + + "Our dreadful marches to delightful measures." + + "Grim-visaged war hath smooth'd his wrinkled front;" + + "And now, instead of mounting barded steeds" + + "To fright the souls of fearful adversaries," + + "He capers nimbly in a lady's chamber" + + "To the lascivious pleasing of a lute." + + "But I, that am not shaped for sportive tricks," + + "Nor made to court an amorous looking-glass;" + + "I, that am rudely stamp'd, and want love's majesty" + + "To strut before a wanton ambling nymph;" + + "I, that am curtail'd of this fair proportion," + + "Cheated of feature by dissembling nature," + + "Deformed, unfinish'd, sent before my time" + + "Into this breathing world, scarce half made up," + + "And that so lamely and unfashionable" + + "That dogs bark at me as I halt by them;" + + "Why, I, in this weak piping time of peace," + + "Have no delight to pass away the time," + + "Unless to spy my shadow in the sun" + + "And descant on mine own deformity:" + + "And therefore, since I cannot prove a lover," + + "To entertain these fair well-spoken days," + + "I am determined to prove a villain" + + "And hate the idle pleasures of these days." + + "Plots have I laid, inductions dangerous," + + "By drunken prophecies, libels and dreams," + + "To set my brother Clarence and the king" + + "In deadly hate the one against the other:" + + "And if King Edward be as true and just" + + "As I am subtle, false and treacherous," + + "This day should Clarence closely be mew'd up," + + "About a prophecy, which says that 'G'" + + "Of Edward's heirs the murderer shall be." + + "Dive, thoughts, down to my soul: here" + + "Clarence comes.", + + "To bait fish withal: if it will feed nothing else," + + "it will feed my revenge. He hath disgraced me, and" + + "hindered me half a million; laughed at my losses," + + "mocked at my gains, scorned my nation, thwarted my" + + "bargains, cooled my friends, heated mine" + + "enemies; and what's his reason? I am a Jew. Hath" + + "not a Jew eyes? hath not a Jew hands, organs," + + "dimensions, senses, affections, passions? fed with" + + "the same food, hurt with the same weapons, subject" + + "to the same diseases, healed by the same means," + + "warmed and cooled by the same winter and summer, as" + + "a Christian is? If you prick us, do we not bleed?" + + "if you tickle us, do we not laugh? if you poison" + + "us, do we not die? and if you wrong us, shall we not" + + "revenge? If we are like you in the rest, we will" + + "resemble you in that. If a Jew wrong a Christian," + + "what is his humility? Revenge. If a Christian" + + "wrong a Jew, what should his sufferance be by" + + "Christian example? Why, revenge. The villany you" + + "teach me, I will execute, and it shall go hard but I" + + "will better the instruction.", + + "Virtue! a fig! 'tis in ourselves that we are thus" + + "or thus. Our bodies are our gardens, to the which" + + "our wills are gardeners: so that if we will plant" + + "nettles, or sow lettuce, set hyssop and weed up" + + "thyme, supply it with one gender of herbs, or" + + "distract it with many, either to have it sterile" + + "with idleness, or manured with industry, why, the" + + "power and corrigible authority of this lies in our" + + "wills. If the balance of our lives had not one" + + "scale of reason to poise another of sensuality, the" + + "blood and baseness of our natures would conduct us" + + "to most preposterous conclusions: but we have" + + "reason to cool our raging motions, our carnal" + + "stings, our unbitted lusts, whereof I take this that" + + "you call love to be a sect or scion.", + + "Blow, winds, and crack your cheeks! rage! blow!" + + "You cataracts and hurricanoes, spout" + + "Till you have drench'd our steeples, drown'd the cocks!" + + "You sulphurous and thought-executing fires," + + "Vaunt-couriers to oak-cleaving thunderbolts," + + "Singe my white head! And thou, all-shaking thunder," + + "Smite flat the thick rotundity o' the world!" + + "Crack nature's moulds, an germens spill at once," + + "That make ingrateful man!" + }; +} diff --git a/actionbarsherlock/samples/shakespeare/src/com/actionbarsherlock/sample/shakespeare/activities/DetailsActivity.java b/actionbarsherlock/samples/shakespeare/src/com/actionbarsherlock/sample/shakespeare/activities/DetailsActivity.java new file mode 100644 index 000000000..f9452aee8 --- /dev/null +++ b/actionbarsherlock/samples/shakespeare/src/com/actionbarsherlock/sample/shakespeare/activities/DetailsActivity.java @@ -0,0 +1,60 @@ +package com.actionbarsherlock.sample.shakespeare.activities; + +import android.app.Activity; +import android.content.Intent; +import android.content.res.Configuration; +import android.os.Build; +import android.os.Bundle; +import android.support.v4.app.FragmentActivity; +import android.support.v4.view.MenuItem; +import com.actionbarsherlock.sample.shakespeare.fragments.DetailsFragment; + +public class DetailsActivity extends FragmentActivity { + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { + // If the screen is now in landscape mode, we can show the + // dialog in-line with the list so we don't need this activity. + finish(); + return; + } + + if (savedInstanceState == null) { + // During initial setup, plug in the details fragment. + DetailsFragment details = new DetailsFragment(); + details.setArguments(getIntent().getExtras()); + + getSupportFragmentManager() + .beginTransaction() + .add(android.R.id.content, details) + .commit(); + } + + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + Intent intent = new Intent(this, TitlesActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + + //Get rid of the slide-in animation, if possible + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR) { + OverridePendingTransition.invoke(this); + } + } + + return super.onOptionsItemSelected(item); + } + + private static final class OverridePendingTransition { + static void invoke(Activity activity) { + activity.overridePendingTransition(0, 0); + } + } +} diff --git a/actionbarsherlock/samples/shakespeare/src/com/actionbarsherlock/sample/shakespeare/activities/TitlesActivity.java b/actionbarsherlock/samples/shakespeare/src/com/actionbarsherlock/sample/shakespeare/activities/TitlesActivity.java new file mode 100644 index 000000000..e23822cd7 --- /dev/null +++ b/actionbarsherlock/samples/shakespeare/src/com/actionbarsherlock/sample/shakespeare/activities/TitlesActivity.java @@ -0,0 +1,14 @@ +package com.actionbarsherlock.sample.shakespeare.activities; + +import android.os.Bundle; +import android.support.v4.app.FragmentActivity; +import com.actionbarsherlock.sample.shakespeare.R; + +public class TitlesActivity extends FragmentActivity { + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setTitle(R.string.activity_titles); + setContentView(R.layout.activity_titles); + } +} diff --git a/actionbarsherlock/samples/shakespeare/src/com/actionbarsherlock/sample/shakespeare/fragments/DetailsFragment.java b/actionbarsherlock/samples/shakespeare/src/com/actionbarsherlock/sample/shakespeare/fragments/DetailsFragment.java new file mode 100644 index 000000000..2f2dcd69b --- /dev/null +++ b/actionbarsherlock/samples/shakespeare/src/com/actionbarsherlock/sample/shakespeare/fragments/DetailsFragment.java @@ -0,0 +1,50 @@ +package com.actionbarsherlock.sample.shakespeare.fragments; + +import com.actionbarsherlock.sample.shakespeare.Shakespeare; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.util.TypedValue; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ScrollView; +import android.widget.TextView; + +public class DetailsFragment extends Fragment { + /** + * Create a new instance of DetailsFragment, initialized to + * show the text at 'index'. + */ + public static DetailsFragment newInstance(int index) { + // Supply index input as an argument. + Bundle args = new Bundle(); + args.putInt("index", index); + + DetailsFragment f = new DetailsFragment(); + f.setArguments(args); + + return f; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + if (container == null) { + // We have different layouts, and in one of them this + // fragment's containing frame doesn't exist. The fragment + // may still be created from its saved state, but there is + // no reason to try to create its view hierarchy because it + // won't be displayed. Note this is not needed -- we could + // just run the code below, where we would create and return + // the view hierarchy; it would just never be used. + return null; + } + + ScrollView scroller = new ScrollView(getActivity()); + TextView text = new TextView(getActivity()); + int padding = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, getActivity().getResources().getDisplayMetrics()); + text.setPadding(padding, padding, padding, padding); + scroller.addView(text); + text.setText(Shakespeare.DIALOGUE[getArguments().getInt("index", 0)]); + return scroller; + } +} diff --git a/actionbarsherlock/samples/shakespeare/src/com/actionbarsherlock/sample/shakespeare/fragments/TitlesFragment.java b/actionbarsherlock/samples/shakespeare/src/com/actionbarsherlock/sample/shakespeare/fragments/TitlesFragment.java new file mode 100644 index 000000000..5555af84c --- /dev/null +++ b/actionbarsherlock/samples/shakespeare/src/com/actionbarsherlock/sample/shakespeare/fragments/TitlesFragment.java @@ -0,0 +1,96 @@ +package com.actionbarsherlock.sample.shakespeare.fragments; + +import com.actionbarsherlock.sample.shakespeare.R; +import com.actionbarsherlock.sample.shakespeare.Shakespeare; +import com.actionbarsherlock.sample.shakespeare.activities.DetailsActivity; +import android.content.Intent; +import android.os.Bundle; +import android.support.v4.app.FragmentTransaction; +import android.support.v4.app.ListFragment; +import android.view.View; +import android.widget.ArrayAdapter; +import android.widget.ListView; + +public class TitlesFragment extends ListFragment { + boolean mHasDetailsFrame; + int mPositionChecked = 0; + int mPositionShown = -1; + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + // Populate list with our static array of titles. + setListAdapter(new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, Shakespeare.TITLES)); + + // Check to see if we have a frame in which to embed the details + // fragment directly in the containing UI. + View detailsFrame = getActivity().findViewById(R.id.frame_details); + mHasDetailsFrame = (detailsFrame != null) && (detailsFrame.getVisibility() == View.VISIBLE); + + if (savedInstanceState != null) { + // Restore last state for checked position. + mPositionChecked = savedInstanceState.getInt("curChoice", 0); + mPositionShown = savedInstanceState.getInt("shownChoice", -1); + } + + if (mHasDetailsFrame) { + // In dual-pane mode, the list view highlights the selected item. + getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); + // Make sure our UI is in the correct state. + showDetails(mPositionChecked); + } + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + + outState.putInt("curChoice", mPositionChecked); + outState.putInt("shownChoice", mPositionShown); + } + + @Override + public void onListItemClick(ListView l, View v, int position, long id) { + showDetails(position); + } + + /** + * Helper function to show the details of a selected item, either by + * displaying a fragment in-place in the current UI, or starting a + * whole new activity in which it is displayed. + */ + void showDetails(int index) { + mPositionChecked = index; + + if (mHasDetailsFrame) { + // We can display everything in-place with fragments, so update + // the list to highlight the selected item and show the data. + getListView().setItemChecked(index, true); + + if (mPositionShown != mPositionChecked) { + // If we are not currently showing a fragment for the new + // position, we need to create and install a new one. + DetailsFragment df = DetailsFragment.newInstance(index); + + // Execute a transaction, replacing any existing fragment + // with this one inside the frame. + getFragmentManager() + .beginTransaction() + .replace(R.id.frame_details, df) + .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE) + .commit(); + + mPositionShown = index; + } + + } else { + // Otherwise we need to launch a new activity to display + // the dialog fragment with selected text. + Intent intent = new Intent(); + intent.setClass(getActivity(), DetailsActivity.class); + intent.putExtra("index", index); + startActivity(intent); + } + } +} diff --git a/actionbarsherlock/samples/styled/AndroidManifest.xml b/actionbarsherlock/samples/styled/AndroidManifest.xml new file mode 100644 index 000000000..f5b398484 --- /dev/null +++ b/actionbarsherlock/samples/styled/AndroidManifest.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + diff --git a/actionbarsherlock/samples/styled/README.md b/actionbarsherlock/samples/styled/README.md new file mode 100644 index 000000000..6323b1d51 --- /dev/null +++ b/actionbarsherlock/samples/styled/README.md @@ -0,0 +1,13 @@ +ActionBarSherlock Sample: Styled +================================ + +See [actionbarsherlock.com/samples.html][1] for information on the sample +contained in this folder. + + + + + + + + [1]: http://actionbarsherlock.com/samples.html diff --git a/actionbarsherlock/samples/styled/pom.xml b/actionbarsherlock/samples/styled/pom.xml new file mode 100644 index 000000000..4aa2aff59 --- /dev/null +++ b/actionbarsherlock/samples/styled/pom.xml @@ -0,0 +1,103 @@ + + + + 4.0.0 + + com.actionbarsherlock + sample-styled + Sample: Styled + apk + + + com.actionbarsherlock + parent-sample + 3.4.2 + ../pom.xml + + + + + android + android + provided + + + + com.actionbarsherlock + library + ${project.version} + apklib + + + + + src + ${apk.prefix}-${project.artifactId}-unaligned + + + + com.jayway.maven.plugins.android.generation2 + maven-android-plugin + true + + + + org.apache.maven.plugins + maven-javadoc-plugin + + true + + + + + + + + release + + + performRelease + true + + + + + + com.jayway.maven.plugins.android.generation2 + maven-android-plugin + true + + + ${project.build.directory}/${project.build.finalName}.apk + ${project.build.directory}/${apk.prefix}-${project.artifactId}.apk + + + + + alignApk + package + + zipalign + + + + + + + com.jakewharton + github-deploy-maven-plugin + 1.0.1 + + + aligned + + + + deploy + + + + + + + diff --git a/actionbarsherlock/samples/styled/project.properties b/actionbarsherlock/samples/styled/project.properties new file mode 100644 index 000000000..34f549f8c --- /dev/null +++ b/actionbarsherlock/samples/styled/project.properties @@ -0,0 +1,12 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system use, +# "ant.properties", and override values to adapt the script to your +# project structure. + +# Project target. +target=android-13 +android.library.reference.1=../../library diff --git a/actionbarsherlock/samples/styled/res/drawable-hdpi-v9/ic_stat_android.png b/actionbarsherlock/samples/styled/res/drawable-hdpi-v9/ic_stat_android.png new file mode 100644 index 0000000000000000000000000000000000000000..0d0e37f816ed05180d210261fad4bf352ed2e887 GIT binary patch literal 919 zcmV;I18Dq-P)8yqWLJe0O%^aNQu%cN5(IX_`3dAfwooQG0c^)f zatOZ=RDE4uUjDSOuprdcE!$_{@pwAuAOygsc+-gyR0TJ5fDI{0=^{i-0K<-9RDP_s z#>dCo8M#Z`#R+;3?^)yp#n(}#gLhu9S4W-`>Tp~d8X8JVfYm`D5a^-m1l3-{@jMiK zp~@=?EshDOK7{WvI_V|RVH`hKcP#-xG8sBfE)ta47B!B@wF^xslVa$=4HFhKRtMsX zgE1y>Ez&p&?^SaRuBxeb=;f;4{-{-bY{&FJBnN|;n5w06qY$w%eO83kfoT*6Gf=!# z-HLKhq$62;yDSeY0i0{XpWFZ{QfmY^DKUZM-n8K_FQmlkX0d{0QN)FeT$5bGaT1iwp3GVaRe!$DMq1r{aO#qNKF)`6i zHPFNtfn3O%pP$!LsZ>9$KP7mDLAZyx z#7i{>@EP9Po6%_WMLZs_&7~1p`>`H!%~Yr9aO#I&=~TWo96er=$;8M%Tl?DDn(Y_a zL}{9!tE)>Ml>8-@0WFe1b{@STHj)$~k;wjM)kJKNO|#F;%#{23`gQ>N1?X$Q-w>aI tvTfuC_RGP+!9NX{tz(OU76T0o`~&AH^kCLsUK0QS002ovPDHLkV1jn%w#5Jd literal 0 HcmV?d00001 diff --git a/actionbarsherlock/samples/styled/res/drawable-hdpi/ic_stat_android.png b/actionbarsherlock/samples/styled/res/drawable-hdpi/ic_stat_android.png new file mode 100644 index 0000000000000000000000000000000000000000..eb01dd0143b72d50e39a9c89e707d8e29860bf6e GIT binary patch literal 1212 zcmV;t1Vj6YP)F8u*T5TvUvL=jvmapyvD zDdioH7z)J$>CBxubIv#4Idf(#(VP4y47lWdG&eVUT`t#` zySuyhY&Ww8G{H#hfZEEfB|zP|n-{CGqMZBU8RqN0Kd3kxYLD@&e!_5RDt z3te4Z1rHAoKQThw4A@8EL;+S>S{n9xy;M+8z~>oAp_h@CfuW+JB2K`=!$X)kF$2ra z&h`V?^Ye2?fFv>spNs^*Jg+b&7y`w~gyjYKd_LOW--ppS_3G+sIz2t5+uPf?In#h{ zLjeXrPT4{j0PN}M333(C*Wr}FZ0Iy*aaY)>a64w$ZB+8xGjZf=O>1q}`k zQXmkZ;^JbidU<(CESYI;ZjS3XwWsSTz`&Lh#&U9UsJ*?N`uqFI?^jZT*a70da5zj; zQ&Y6Mx=O74B-)=fuKQK$fdFRLVrLBv4HOE6co-v*2xm@sKxh{i7kO?C3=9yfjXVeK zY>GKy18p2I7`FR?t?uq_&I%3yl3cEL$TN%~&k)|8o*u%fv$KggfRiQVP@={)H8l|c zh_J~9-EKFZ7h{c$jT|5jg?{pc4%)PU0R$L;V0RlE8=M6`kmMi123Ug~92yfqTVOCE zhXp?IjYJCXdHM2&q#E27@#*GQtna`1m-jtgMiJ3gKH8C6rLskpoz3 zYb#Y&R`Oca(b2&}C9W;mn5mBfdvtU}wY9aJb=U$h-H#4b0S45dTNZrFi(pXSovg3- zp)ZFHwy<8ep?{|gOa`fgNc1hQLEp4FTVPmV$}zEHw4$E~glSw}hd%t^CyV~AFowxw zp-cyu&X_5bw!m~cu_G`j8JFk*T=UBnC@F)OrL}^FesibFp4^qs$5@RTbskZ z`S|#lTJnp;lpTX&ycF=<#>-)8X^Hy!`eYT`K6`xfHTU=T+{WzetnpHpqXL6*jDZzh zHa9nEbaa%nhbu-uAiBQ%jVlTd#<8(6i#2&(^lfuYpA?Jac6WD|=I7`6<(!w7N4Ut5 z0tgW{g)!U=U!nJ3BiT9wn5RG=)+(1csu~D9<^};U#-=a>4(oIydN@pAo0Sy{kCOb%Xq18T9~>N{V?XURB_$;|C{fvfQX5zpd@MZgfL`Q>Na{?q zUnzFu literal 0 HcmV?d00001 diff --git a/actionbarsherlock/samples/styled/res/drawable-hdpi/icon.png b/actionbarsherlock/samples/styled/res/drawable-hdpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..723fbf062f1172c90596815b7d4e80795683059b GIT binary patch literal 6996 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 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/samples/styled/res/drawable-ldpi-v9/ic_stat_android.png b/actionbarsherlock/samples/styled/res/drawable-ldpi-v9/ic_stat_android.png new file mode 100644 index 0000000000000000000000000000000000000000..a2aa04f03659329ed8f31b23c49bbfb030d12d7d GIT binary patch literal 428 zcmV;d0aN~oP)7mN z%SyvQ6rD_x;-lS!Qly}Wiy(GU1b6;|Kas71kgmE@C}=jV8=-d9pOF57E(-44DdGbW zvWOOK-tnB&fc*pU!Z2sfJ@?!@GeZ3B$g)fs3-82Zl}Z!*E|aRN zUU{B((`vP*JTv5M69P`MTrO|NaeNvCL5Iut{Sz4MFjwf*0yG+p<;i4Xg<-fCMNyC> zNtCAP3dHZ@@%VZ)8imv%bkj>kw}NXIKnH*Y#UX(;_M5v0)hZYQ0|9kl4fs zN7xOxnu?;-fNLMSkj?{`JjcuM2tt~s$?O*ruW+0G z7PA5zb8jg4q&9z65Ylm+HMBiM`vZvbR{@`5{tGleYq#5v;M2K(=ytoSDA|Mt+AG6axS7fv3HLa~|NIvAiPBeXawE;c&R%x^DhI)oL}dEXybVpW+*@ W@x@OcB6o@a0000Q z5{Y27TA|nLVYAuTcwn8F0XrU#;?rv&5I`=MgOZO>D5ODdw;S5+HYiWbt}|dty2Rmf zxu6afnM_6(N-@7jqY;+NC9c=2&bRBFg1`=k!$BvdQYlocRix8tkfA)uWD=E1Mf(ZH z{BM~F5T(#4jRoOwSo&eV-)q)%5QMDkfqjxmAWlxGb8nk`6M#7cv*)9USg+SQpEY8JncanQ)J4Q(GC{dq)@(VHMx%jFr}OEYWDo>2 zV5IGI8lt*jJRWNnl;U=~HDfZeP0pA;^E)LHi95T?xiH9Yzu(WTw%u-Lt^^(YE67aA z*Eoima-O2msCPb}zgMa^586Hx6ZqJ~<8i2bb3qMQu~>Y~X0s3M_FJQh!C>&(Y&L&e b@<(}ZM9L&rbyXyo00000NkvXXu0mjf0!jNX literal 0 HcmV?d00001 diff --git a/actionbarsherlock/samples/styled/res/drawable-ldpi/icon.png b/actionbarsherlock/samples/styled/res/drawable-ldpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..181f679f59edb8acdc56bb16130cd35b15d5dc3c GIT binary patch literal 3003 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 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/samples/styled/res/drawable-mdpi/ad_spinner_pressed_holo_light.9.png b/actionbarsherlock/samples/styled/res/drawable-mdpi/ad_spinner_pressed_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..f95e6d2e1cfdeef3b17328a6ca5c4f68362e7e64 GIT binary patch literal 3080 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 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/samples/styled/res/drawable-mdpi/btn_check_on_holo_light.png b/actionbarsherlock/samples/styled/res/drawable-mdpi/btn_check_on_holo_light.png new file mode 100644 index 0000000000000000000000000000000000000000..8fdb3429ac7dcc71b631c384ed1a242093503bac GIT binary patch literal 927 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI z1_o{+5N5n|x9$%}u&lr_9Y`yHar>`1a~T+z>OEZ?Ln02pz3Sa9k}h)WV|?lPrN=KS z2yX6D`oXwKqCJNxO_5_#Xjr5x2a9{TmzkkTql=0}q2@>99Up`>@|-;8sA?4nCN#C2vaoi3a{fSJvK5QP1rE3zID_IS{NgauvaZLI~)7~Gv^@{}!ejeaEbLPyP z18?iHH~CzX(Vrz8d|oXo+B(?!`x>3M|9|vHSIEzQ%(d^3v(3><6KlI1Wp~`o+pa(F z|4wZ+SJwW$r&}u{-(2ombN@)RMa%g`EbSlE&$V&il~}=&n6E6eI>uZ4StoDwjWA*R z4q-(;^Fqxx`fW@nHsyu)9}mrqQaJjzr2ogqTf1Hdw*5Y(_U1@+Go#5Y&ET@HAu*F} z8ImXd?W-5u->6?0ezRpYqd^OE?-h=Q%$(zifBNE?lVqY7pDQ-~SUD%m?89S*h|9+8 zQp^k?zGkidi?^j0GVK0nW_M(x+{a+^`dbqp3yN)6WbfGvIo%}2lx^y&;XY{QXWWVGR@h{N#kJi4!vNloCGV$-!?RXBj z<$Phe|0v34-T7bIKjgk^-M&73_Upe#*qJoC-o1zk^V|6Q2iyKD(_)X!thlzea^J-l zUxe2i-MG>?#>wj3gpgh+Cwm{P-Njo++sIFPM#MnGL z`1b3MUUtW8lfrl3wfjEleIF=6%s*oPtKg;f|Ax?lx!49JGy{Irtt#G+IN$CUh}R0X%pqSW&IqU>S?=U~&q Tt&h!s>KHs-{an^LB{Ts5KZ%S@ literal 0 HcmV?d00001 diff --git a/actionbarsherlock/samples/styled/res/drawable-mdpi/btn_radio_off_holo_light.png b/actionbarsherlock/samples/styled/res/drawable-mdpi/btn_radio_off_holo_light.png new file mode 100644 index 0000000000000000000000000000000000000000..c67e9fbb93f1d5910ceb418e3d8b3d2dfcac9067 GIT binary patch literal 556 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?HN@zUM8KOn)f0>^Y9tpLXDzvj$kU|^-re zr%~TV`{zyO2W&n&AMom%?hrZ6D_Wdc#Y`=9-=H zkyNU`p_SmJ*~sUaa8%dofa;v%NAnfMQuG2DpXgi+ne>vOJDhQzx2(amsN4Fc%dHk9 z`X6oZpPuzlZ|OBgxz%bpcLRA=>guRBGftA?@VOGcbNqV!sd~?h2u}$T~hqJ z#pl_^+p}65R?e8IvhI+mh)wG??b3eZJBgL|rJif=*;97(TfK&}k&b4-KYj88X1KcT38tySecmX8dz8v7(6|=Fds!jZhlH;S|x4`Q|3rs25OK2 x*$|wcR#Ki=l*-_klAn~S;FejGTAp8&U98|7Y+AVWu^CVugQu&X%Q~loCIAQM$Ql3u literal 0 HcmV?d00001 diff --git a/actionbarsherlock/samples/styled/res/drawable-mdpi/btn_radio_on_holo_light.png b/actionbarsherlock/samples/styled/res/drawable-mdpi/btn_radio_on_holo_light.png new file mode 100644 index 0000000000000000000000000000000000000000..ed5acc92c110182f30e13a49df5c674fddc6c8ba GIT binary patch literal 998 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI z1_o{+5N5n|x9$%}u&lr_9Y`yHar>`1a~T+zj(NH`hD02GJI&W4Bv9mdeg2$EE93JQ zH?~GDGkzSB;c|3|tH|3Z5w=rrlsSr`Z!BA&5Y;8&v7`9%GK2D&uB*i^vDdXsiTJ#5 z@}(53W&0$v)4pt-A?$IY$INy1&%;k+-~F6l{Qvu%>U(}Nd5-or`YuutIm%(ZdLMiAI{ziNrT#ZIe0wLmY$1EK6yx@*6S=O){SvdhW+lyD zadrP~yT9A^q?H~GYIoeQvNUbU>r;Pz#S333y13fSKI?3htI?DFKkYao7>pByPFYQ0 z3##2N{p!n%sOYWX@-N==suUm9JLS6LVsx5Reca7Gmsj`C-EStzn$sYA;Yl`YS3PHz z#otmpsSDE!3#e`Ycq$Sz&d zH0hpD*)`#Z(ith)h7ew^0Tz4>UeXv?2lUReLf>y5Iv1tuQ61HDoslTdPucWW{N!R|Rr%%+c^qV_Z z$9A>lv-1^qWgG*yU!~eed!7;4Q zx4CQurf3Gy64!_l=c3falFa-(g^KYj88X1KcT38tySecmX8dz8v7(6|=Fds!jZhlH;S|x4`Q|3rs25OK2*$|wc tR#Ki=l*-_klAn~S;FejGTAp8&U98|7Y+AVWu^CVugQu&X%Q~loCIB@5uD}2Q literal 0 HcmV?d00001 diff --git a/actionbarsherlock/samples/styled/res/drawable-mdpi/ic_menu_refresh_holo_light.png b/actionbarsherlock/samples/styled/res/drawable-mdpi/ic_menu_refresh_holo_light.png new file mode 100644 index 0000000000000000000000000000000000000000..604a4fdf6e8417ebf15fb4f6c2dbbca1f643039d GIT binary patch literal 1324 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8!2v z2N=7Z%(epwmK8Xr18D^?ZvQoBE&~ILiKmNWh{y50Q=@Z2LPgs4Z#^%$?D8eQnPRsj zS}rujs3h?Ci)ibbKlJq7k)bLz)kQ#s<;o0&PENyz2U%Eo)Y@i9^jt3ICuKq^EdzB`v2>CRQkdHsfAS?#i1gu z|Nmw@^N>n)hNN_Isd4RX<}rv5P#J1q+)?d{Omha{EJ;h z4+t;_MO54sxhdKGTRg8q`fTe?<%hSIwx3?5>igL`n?0>+>5ALJJ1q94`hQ-zD*xN> z+b#zuui?qF`!gda)U9@#)}EK=bk6h4eO3AD*|Tq#Uq0IXv~E9}N6gv8x6ckQfAN0m zZ~HF2?Oi)G@5`Ul-T3m<6PB-EuXm(-Ob?vm^QVoE-SEtUdA>o5Kc1>(ugYdM7t5M+ zE983It?Ry(4>HcatZg|Gb)4<6tL)v06QwjZ|BO;w^~>(w&1h|wbJy2ImvMP!Y}N@{ z@|IO!B`kKs!F7*bFL5blX`a7Q?4rL^RhU!a?c(z-)?tzlwIdTJ^S}M^<^0mVqYIiW zE(Xl_a^Lia>n@#zYo&Gf-8+6=?%j(bDcz`Jzu(A8|5~@{q;JRbe(CiVhL58rg!pN4 zIn1guK4oT8{cwU&*?H^NhO2(wJU3NJGU}87bGuk;tAE6uD@U5MIX*4E#@lr5#QI0e zC8it2EsU{0aQI?LomkSMuF8C?9kQjTk(jIXxnQ?; zwYKIi_qp14gVy~h-(R|Wo5h|~?!VJnWJ>~A7A$=}=iWwLjVX6GU)-h1zH{r2?Z>#4 z1WvaZ#5VqzR$3t;a%yVLJ%*SAL4l82WoiT;8R))tVA!fR&*GQbcHb@z&0n5I;pMzm z)(0gsul)=Tp1knErV5W`iFb3VE;;YYH2b#s@an2a2A`;RKY2uTxjnj;N0v1dImyfo zxEOa=JmC4ejO@mK-%!?~}yS~CDo$e9~Zb@ssb?4?5 zZMv!LAh;&|m`wGX6P5c+R&O+^xEk8K`?6}=M|rO$SMEss(Ve-bSxYTgF7*7O69#=ri2rx=`*_ZTdGYVtCV%ebo{4XDWG)nj9P#0IofI}-c9pZ z_a+^_yl%~(#89ghQ|83%{h0P?#hw+<*%qI_ydX~V_N_@X8khGu1}(O_t0$TtljU@) zU5Zn-=3npb*u=7d<{Es)`nGhe(6{kD8KbXZrre$u|PLQ`^oo;K)_%aeX$M%86KXXoepwuOnPwhB!Tv(zp; z`9`ilEpDnrU=n}P<@)4$#!oJf7gq)cRRaqW)e_f;l9a@fRIB8oR3OD*WMF8ZYiOuz zXcS^-VP#-wWoWEx0Av{O&2Caf(U6;;l9^VCTSNUZtC>Izk{}y`^V3So6N^$A98>a> gQWZRN6Vp?JQWH}u3s0un02MKKy85}Sb4q9e09F=Qga7~l literal 0 HcmV?d00001 diff --git a/actionbarsherlock/samples/styled/res/drawable-mdpi/ic_menu_star_holo_light.png b/actionbarsherlock/samples/styled/res/drawable-mdpi/ic_menu_star_holo_light.png new file mode 100644 index 0000000000000000000000000000000000000000..77542c4dbc7c7d25157298126c88fb8cd82bc268 GIT binary patch literal 884 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8!2v z2N=7Z%(epwmK8Xr18D^?ZvQoBE>K&Ir;B5V$MLyW&vwg%im-mTzdC&8#4||=ZzfD| zJwIWd6#2fnJp+N85y{N*YoD2iK@5y=&r%>{bv| z;^_$FTp51eHFWybt9K{AXl+|p{(4^ZxxLHd*}aqR{I-ky6;?R;)6$=_nYK)9{m*Hj z_@FM^*>XFJff?VXLz1_Df7bbS*5=8M<$}|SBRCB5u6#C?O?suwbNi#j_CEDxy(@70>r^fEnrD1di##hQ?0vQOrI&i} zBHNC|cBNScy(>E&%u27hr~iJ+Hi5vR3+-}qn@=>w+di5UbTvNB@bQ`_4f|^hubMm0 zmw$e`dVi~Dam3?;tiQN(ZU%5}4x6ParLy$wyFFo^xoXlo)7LHfZ;_`~w0!rirX>Mg zYhMd*d;Z7pfOf&9t}A(e)b*{_3q;9TxADbpSSK5@Nc!H!mursOynKEwMt!Z<#^d_ygD>#~Xf5YVcuUDOFY{-ud={|cw?eg0v-{R`-pSqCpxjZSv zeDXWtxo3U9u^Q;iJOA!`{@?kJ<>QX-^@*-navzu=RZCnWN>UO_QmvAUQh^kMk%6J1 zu7RPhp;?Hbv6ZQ%m4Sh-fd!Df@a~2YiiX_$l+3hB+!_{cPUr(_kObKfoS#-wo>-L1 k;Fyx1l&avFo0y&&l$w}QS$Hzl2B?U^)78&qol`;+0LqSvXaE2J literal 0 HcmV?d00001 diff --git a/actionbarsherlock/samples/styled/res/drawable-mdpi/ic_stat_android.png b/actionbarsherlock/samples/styled/res/drawable-mdpi/ic_stat_android.png new file mode 100644 index 0000000000000000000000000000000000000000..e91187d49857a62f66a8cff81005724d4160ff36 GIT binary patch literal 780 zcmV+n1M~ceP)P000>X1^@s6#OZ}&0008hNkl?%*sm325#D>I#MEmRLi9J7nA8=gZU$8o2s0oeL6(-t|9Id61k3@5X zugHfHP`Q03nZ4z`*8;1{O|s0sGds`hGqbx8{V(DWBI$JcOSjwowpc8V#P(V3a5#R3 zLZPqKYV`*&Tmlpf1}~z~XeG`J4uW!I9DzDmV@Ron(7^JLYz~$?0^` z+uPd`xY`*hhD$bl*x3<}jlR6R#3aBe6M$eKfpvI19twxU4C?iIS*vmo=GL|N7A(Qm zOkQ7K2~_Q5I-Sz#=_&2*?$XxQ7ELA-dVGAOVzKyP4DduW6Bz9V`jgA$C=!WKJRT>X z&&L`}V29r>?!zQtVjb$#Q6iBb=@)i~Uf}!S;DAm}PX3AkhM7c{3l0Q}pbu+nYh3q6 zqd^-R8+3PfCvNuD>vi_Shdw+%KWjhmM0AqbY$i5Nme1#DXJ?0+%_jE&r^YG(M;Qx+ z0;xMjXJ=>h{{GI(Ogxid&8x`9IUK@lQbL-c^zVa0UN}&T*wT{5CBSm zxtN`nAM*$ULz38*%LD^uNhsQatv|&N4PZ%P;^}f>7gA3!LFu5)gc{kH01TzVFqzmU zfl+pa9i5+_^Yd_gd`!t?(t!Ol#d3m&-+mhlhL+ z0Q&UwMCzSmmYq(AYPA|wDisYb6Elgv82kJC3p0r{T2-q){kpxq&E4PMuNwM~um26#6Z@L0+&rED0000< KMNUMnLSTaO7SF9`b|O0=vLvBJX;eg( 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 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/samples/styled/res/drawable-mdpi/spinner_disabled_holo_light.9.png b/actionbarsherlock/samples/styled/res/drawable-mdpi/spinner_disabled_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..2dba2704f493419c5b3171a3f03a194900fcb497 GIT binary patch literal 331 zcmeAS@N?(olHy`uVBq!ia0vp^UO=qH!3HEnRL*JxDVAa<&kznEsNqQI0P;BtJR*x3 z7`Qt@n9=;?>9s(?x1KJJAsLNtZ#i-`IY_iUT(7~j&^5fn>R|nU<%<3?*@I@ACrG@O zzO3`ScAC|ZFOxoLdwzbA_A7>g!R_@n@AnVl1x~qW2ru+$F%kqaE{EA1NOIztqvte} z7`L0ct=SQi8;t1{K~ri`727{4e?J*7Xej YZZ(m@*Zsx7P+(y2boFyt=akR{08E~Q00000 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/samples/styled/res/drawable-xhdpi/icon.png b/actionbarsherlock/samples/styled/res/drawable-xhdpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..34ca9a4892030e271e74c462ee71f55ff4c7bbb0 GIT binary patch literal 10322 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 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/samples/styled/res/drawable/actionbar_tab_bg.xml b/actionbarsherlock/samples/styled/res/drawable/actionbar_tab_bg.xml new file mode 100644 index 000000000..990990983 --- /dev/null +++ b/actionbarsherlock/samples/styled/res/drawable/actionbar_tab_bg.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + diff --git a/actionbarsherlock/samples/styled/res/drawable/ad_action_bar_gradient_bak.xml b/actionbarsherlock/samples/styled/res/drawable/ad_action_bar_gradient_bak.xml new file mode 100644 index 000000000..0233f4efc --- /dev/null +++ b/actionbarsherlock/samples/styled/res/drawable/ad_action_bar_gradient_bak.xml @@ -0,0 +1,23 @@ + + + + + + \ No newline at end of file diff --git a/actionbarsherlock/samples/styled/res/drawable/ad_btn_check_holo_light.xml b/actionbarsherlock/samples/styled/res/drawable/ad_btn_check_holo_light.xml new file mode 100644 index 000000000..ee2c57e53 --- /dev/null +++ b/actionbarsherlock/samples/styled/res/drawable/ad_btn_check_holo_light.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/actionbarsherlock/samples/styled/res/drawable/ad_btn_radio_holo_light.xml b/actionbarsherlock/samples/styled/res/drawable/ad_btn_radio_holo_light.xml new file mode 100644 index 000000000..15fc3ba0f --- /dev/null +++ b/actionbarsherlock/samples/styled/res/drawable/ad_btn_radio_holo_light.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/actionbarsherlock/samples/styled/res/drawable/ad_selectable_background.xml b/actionbarsherlock/samples/styled/res/drawable/ad_selectable_background.xml new file mode 100644 index 000000000..bbb68004a --- /dev/null +++ b/actionbarsherlock/samples/styled/res/drawable/ad_selectable_background.xml @@ -0,0 +1,21 @@ + + + + + + + \ No newline at end of file diff --git a/actionbarsherlock/samples/styled/res/drawable/ad_spinner_background_holo_light.xml b/actionbarsherlock/samples/styled/res/drawable/ad_spinner_background_holo_light.xml new file mode 100644 index 000000000..d8d72bd27 --- /dev/null +++ b/actionbarsherlock/samples/styled/res/drawable/ad_spinner_background_holo_light.xml @@ -0,0 +1,25 @@ + + + + + + + + + diff --git a/actionbarsherlock/samples/styled/res/drawable/rounded_rect.xml b/actionbarsherlock/samples/styled/res/drawable/rounded_rect.xml new file mode 100644 index 000000000..bd0e341b4 --- /dev/null +++ b/actionbarsherlock/samples/styled/res/drawable/rounded_rect.xml @@ -0,0 +1,19 @@ + + + + + + \ No newline at end of file diff --git a/actionbarsherlock/samples/styled/res/drawable/selected_background.xml b/actionbarsherlock/samples/styled/res/drawable/selected_background.xml new file mode 100644 index 000000000..546caf273 --- /dev/null +++ b/actionbarsherlock/samples/styled/res/drawable/selected_background.xml @@ -0,0 +1,19 @@ + + + + + + diff --git a/actionbarsherlock/samples/styled/res/layout/indeterminate_progress_action.xml b/actionbarsherlock/samples/styled/res/layout/indeterminate_progress_action.xml new file mode 100644 index 000000000..25b5ccbb7 --- /dev/null +++ b/actionbarsherlock/samples/styled/res/layout/indeterminate_progress_action.xml @@ -0,0 +1,23 @@ + + + + diff --git a/actionbarsherlock/samples/styled/res/layout/main.xml b/actionbarsherlock/samples/styled/res/layout/main.xml new file mode 100644 index 000000000..dacc55780 --- /dev/null +++ b/actionbarsherlock/samples/styled/res/layout/main.xml @@ -0,0 +1,21 @@ + + + + diff --git a/actionbarsherlock/samples/styled/res/menu-v11/main_menu.xml b/actionbarsherlock/samples/styled/res/menu-v11/main_menu.xml new file mode 100644 index 000000000..c705525bd --- /dev/null +++ b/actionbarsherlock/samples/styled/res/menu-v11/main_menu.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/actionbarsherlock/samples/styled/res/menu/main_menu.xml b/actionbarsherlock/samples/styled/res/menu/main_menu.xml new file mode 100644 index 000000000..edcf84f56 --- /dev/null +++ b/actionbarsherlock/samples/styled/res/menu/main_menu.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/actionbarsherlock/samples/styled/res/values-v11/styles.xml b/actionbarsherlock/samples/styled/res/values-v11/styles.xml new file mode 100644 index 000000000..b790ce9e1 --- /dev/null +++ b/actionbarsherlock/samples/styled/res/values-v11/styles.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/actionbarsherlock/samples/styled/res/values/arrays.xml b/actionbarsherlock/samples/styled/res/values/arrays.xml new file mode 100644 index 000000000..9fc21674f --- /dev/null +++ b/actionbarsherlock/samples/styled/res/values/arrays.xml @@ -0,0 +1,27 @@ + + + + + + Home + SDK + Dev Guide + Reference + Resources + Videos + Blog + + \ No newline at end of file diff --git a/actionbarsherlock/samples/styled/res/values/colors.xml b/actionbarsherlock/samples/styled/res/values/colors.xml new file mode 100644 index 000000000..ec6af37fb --- /dev/null +++ b/actionbarsherlock/samples/styled/res/values/colors.xml @@ -0,0 +1,22 @@ + + + + + #FFA4C639 + #FF58BAED + #FF777777 + #FFEFEFEF + diff --git a/actionbarsherlock/samples/styled/res/values/dimens.xml b/actionbarsherlock/samples/styled/res/values/dimens.xml new file mode 100644 index 000000000..0b21229e0 --- /dev/null +++ b/actionbarsherlock/samples/styled/res/values/dimens.xml @@ -0,0 +1,20 @@ + + + + + 20dp + 8dp + \ No newline at end of file diff --git a/actionbarsherlock/samples/styled/res/values/strings.xml b/actionbarsherlock/samples/styled/res/values/strings.xml new file mode 100644 index 000000000..3bbe36138 --- /dev/null +++ b/actionbarsherlock/samples/styled/res/values/strings.xml @@ -0,0 +1,33 @@ + + + + + Refresh + Search + Both + Text + ABS: Styled Sample + Logo + Up + Tabs + List + Label + Navigation Mode > + Action Bar Background > + None + Gradient + Image + diff --git a/actionbarsherlock/samples/styled/res/values/styles.xml b/actionbarsherlock/samples/styled/res/values/styles.xml new file mode 100644 index 000000000..a2e0d6c8c --- /dev/null +++ b/actionbarsherlock/samples/styled/res/values/styles.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/actionbarsherlock/samples/styled/src/com/actionbarsherlock/sample/styledactionbar/MainActivity.java b/actionbarsherlock/samples/styled/src/com/actionbarsherlock/sample/styledactionbar/MainActivity.java new file mode 100644 index 000000000..3321eac57 --- /dev/null +++ b/actionbarsherlock/samples/styled/src/com/actionbarsherlock/sample/styledactionbar/MainActivity.java @@ -0,0 +1,240 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.actionbarsherlock.sample.styledactionbar; + +import com.actionbarsherlock.sample.styledactionbar.R; +import android.animation.ObjectAnimator; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.support.v4.app.ActionBar; +import android.support.v4.app.ActionBar.OnNavigationListener; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentTransaction; +import android.support.v4.view.Menu; +import android.support.v4.view.MenuItem; +import android.support.v4.view.MenuItem.OnMenuItemClickListener; +import android.view.View; +import android.view.animation.AlphaAnimation; +import android.view.animation.Animation; +import android.view.animation.RotateAnimation; +import android.widget.ArrayAdapter; + + +public class MainActivity extends FragmentActivity implements ActionBar.TabListener { + + static final boolean IS_HONEYCOMB = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB; + + private final Handler handler = new Handler(); + private RoundedColourFragment leftFrag; + private RoundedColourFragment rightFrag; + private boolean useLogo = false; + private boolean showHomeUp = false; + + /** Called when the activity is first created. */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.main); + final ActionBar ab = getSupportActionBar(); + + // set defaults for logo & home up + ab.setDisplayHomeAsUpEnabled(showHomeUp); + ab.setDisplayUseLogoEnabled(useLogo); + + // set up tabs nav + for (int i = 1; i < 4; i++) { + ab.addTab(ab.newTab().setText("Tab " + i).setTabListener(this)); + } + + // set up list nav + ab.setListNavigationCallbacks(ArrayAdapter + .createFromResource(this, R.array.sections, + android.R.layout.simple_spinner_dropdown_item), + new OnNavigationListener() { + public boolean onNavigationItemSelected(int itemPosition, + long itemId) { + // FIXME add proper implementation + rotateLeftFrag(); + return false; + } + }); + + // default to tab navigation + showTabsNav(); + + // create a couple of simple fragments as placeholders + final int MARGIN = 16; + leftFrag = new RoundedColourFragment(getResources().getColor( + R.color.android_green), 1f, MARGIN, MARGIN / 2, MARGIN, MARGIN); + rightFrag = new RoundedColourFragment(getResources().getColor( + R.color.honeycombish_blue), 2f, MARGIN / 2, MARGIN, MARGIN, + MARGIN); + + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + ft.add(R.id.root, leftFrag); + ft.add(R.id.root, rightFrag); + ft.commit(); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.main_menu, menu); + + // set up a listener for the refresh item + final MenuItem refresh = menu.findItem(R.id.menu_refresh); + refresh.setOnMenuItemClickListener(new OnMenuItemClickListener() { + // on selecting show progress spinner for 1s + public boolean onMenuItemClick(MenuItem item) { + // item.setActionView(R.layout.progress_action); + handler.postDelayed(new Runnable() { + public void run() { + refresh.setActionView(null); + } + }, 1000); + return false; + } + }); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + // TODO handle clicking the app icon/logo + return false; + case R.id.menu_refresh: + // switch to a progress animation + item.setActionView(R.layout.indeterminate_progress_action); + return true; + case R.id.menu_both: + // rotation animation of green fragment + rotateLeftFrag(); + case R.id.menu_text: + // alpha animation of blue fragment + if (IS_HONEYCOMB) { + ObjectAnimatorAlpha.invoke(rightFrag.getView()); + } else { + AlphaAnimation alpha = new AlphaAnimation(1f, 0f); + alpha.setRepeatMode(Animation.REVERSE); + alpha.setRepeatCount(1); + alpha.setDuration(800); + rightFrag.getView().startAnimation(alpha); + } + return true; + case R.id.menu_logo: + useLogo = !useLogo; + item.setChecked(useLogo); + getSupportActionBar().setDisplayUseLogoEnabled(useLogo); + return true; + case R.id.menu_up: + showHomeUp = !showHomeUp; + item.setChecked(showHomeUp); + getSupportActionBar().setDisplayHomeAsUpEnabled(showHomeUp); + return true; + case R.id.menu_nav_tabs: + item.setChecked(true); + showTabsNav(); + return true; + case R.id.menu_nav_label: + item.setChecked(true); + showStandardNav(); + return true; + case R.id.menu_nav_drop_down: + item.setChecked(true); + showDropDownNav(); + return true; + case R.id.menu_bak_none: + item.setChecked(true); + getSupportActionBar().setBackgroundDrawable(null); + return true; + case R.id.menu_bak_gradient: + item.setChecked(true); + getSupportActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.ad_action_bar_gradient_bak)); + return true; + default: + return super.onOptionsItemSelected(item); + } + } + + private static final class ObjectAnimatorAlpha { + static void invoke(View view) { + ObjectAnimator alpha = ObjectAnimator.ofFloat(view, + "alpha", 1f, 0f); + alpha.setRepeatMode(ObjectAnimator.REVERSE); + alpha.setRepeatCount(1); + alpha.setDuration(800); + alpha.start(); + } + } + + private void rotateLeftFrag() { + if (leftFrag != null) { + if (IS_HONEYCOMB) { + ObjectAnimatorRotate.invoke(leftFrag.getView()); + } else { + RotateAnimation rotate = new RotateAnimation(0, 180, leftFrag.getView().getWidth() / 2.0f, leftFrag.getView().getHeight() / 2.0f); + rotate.setDuration(500); + leftFrag.getView().startAnimation(rotate); + } + } + } + + private static final class ObjectAnimatorRotate { + static void invoke(View view) { + ObjectAnimator.ofFloat(view, "rotationY", 0, 180) + .setDuration(500).start(); + } + } + + private void showStandardNav() { + ActionBar ab = getSupportActionBar(); + if (ab.getNavigationMode() != ActionBar.NAVIGATION_MODE_STANDARD) { + ab.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); + } + } + + private void showDropDownNav() { + ActionBar ab = getSupportActionBar(); + if (ab.getNavigationMode() != ActionBar.NAVIGATION_MODE_LIST) { + ab.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); + } + } + + private void showTabsNav() { + ActionBar ab = getSupportActionBar(); + if (ab.getNavigationMode() != ActionBar.NAVIGATION_MODE_TABS) { + ab.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); + } + } + + public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) { + // FIXME add a proper implementation, for now just rotate the left + // fragment + rotateLeftFrag(); + } + + public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) { + // FIXME implement this + } + + public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) { + // FIXME implement this + } + +} \ No newline at end of file diff --git a/actionbarsherlock/samples/styled/src/com/actionbarsherlock/sample/styledactionbar/RoundedColourFragment.java b/actionbarsherlock/samples/styled/src/com/actionbarsherlock/sample/styledactionbar/RoundedColourFragment.java new file mode 100644 index 000000000..5a8105a53 --- /dev/null +++ b/actionbarsherlock/samples/styled/src/com/actionbarsherlock/sample/styledactionbar/RoundedColourFragment.java @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.actionbarsherlock.sample.styledactionbar; + +import com.actionbarsherlock.sample.styledactionbar.R; +import android.graphics.drawable.GradientDrawable; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewGroup.LayoutParams; +import android.widget.LinearLayout; + +public class RoundedColourFragment extends Fragment { + private View mView; + private int mColor; + private float mWeight; + private int mMarginLeft; + private int mMarginRight; + private int mMarginTop; + private int mMarginBottom; + + // need a public empty constructor for framework to instantiate + public RoundedColourFragment() {} + + public RoundedColourFragment(int color, float weight, int margin_left, int margin_right, int margin_top, int margin_bottom) { + this.mColor = color; + this.mWeight = weight; + this.mMarginLeft = margin_left; + this.mMarginRight = margin_right; + this.mMarginTop = margin_top; + this.mMarginBottom = margin_bottom; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + this.mView = new View(this.getActivity()); + + GradientDrawable background = (GradientDrawable)this.getResources().getDrawable(R.drawable.rounded_rect); + background.setColor(this.mColor); + + this.mView.setBackgroundDrawable(background); + LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(0, LayoutParams.FILL_PARENT, mWeight); + lp.setMargins(this.mMarginLeft, this.mMarginTop, this.mMarginRight, this.mMarginBottom); + this.mView.setLayoutParams(lp); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + return this.mView; + } +} diff --git a/actionbarsherlock/test/README.md b/actionbarsherlock/test/README.md new file mode 100644 index 000000000..332a6f1d2 --- /dev/null +++ b/actionbarsherlock/test/README.md @@ -0,0 +1,11 @@ +ActionBarSherlock Test +====================== + +This folder contains two applications which perform unit testing against the +main library. + + * `app/` - Individual activities which each set up and provide interaction + methods for a specific test case. + + * `runner/` - Suite of test cases that verify each activity and method + provided by `app/` are operating as expected. diff --git a/actionbarsherlock/test/app/AndroidManifest.xml b/actionbarsherlock/test/app/AndroidManifest.xml new file mode 100644 index 000000000..ec871bde4 --- /dev/null +++ b/actionbarsherlock/test/app/AndroidManifest.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/actionbarsherlock/test/app/README.md b/actionbarsherlock/test/app/README.md new file mode 100644 index 000000000..b84d6e69e --- /dev/null +++ b/actionbarsherlock/test/app/README.md @@ -0,0 +1,9 @@ +ActionBarSherlock Test App +========================== + +Individual activities which each set up and provide interaction methods for a +specific test case. + +Each activity has a name which provides insight into the what it is testing. If +you are providing new activities to test please follow the same naming +conventions that are already in use. diff --git a/actionbarsherlock/test/app/pom.xml b/actionbarsherlock/test/app/pom.xml new file mode 100644 index 000000000..956db7776 --- /dev/null +++ b/actionbarsherlock/test/app/pom.xml @@ -0,0 +1,52 @@ + + + + 4.0.0 + + com.actionbarsherlock + test-app + Test: Application + apk + + + com.actionbarsherlock + parent-test + 3.4.2 + ../pom.xml + + + + + android + android + provided + + + + com.actionbarsherlock + library + ${project.version} + apklib + + + + + src + + + + com.jayway.maven.plugins.android.generation2 + maven-android-plugin + true + + + + org.apache.maven.plugins + maven-javadoc-plugin + + true + + + + + diff --git a/actionbarsherlock/test/app/project.properties b/actionbarsherlock/test/app/project.properties new file mode 100644 index 000000000..34f549f8c --- /dev/null +++ b/actionbarsherlock/test/app/project.properties @@ -0,0 +1,12 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system use, +# "ant.properties", and override values to adapt the script to your +# project structure. + +# Project target. +target=android-13 +android.library.reference.1=../../library diff --git a/actionbarsherlock/test/app/res/drawable-hdpi/icon.png b/actionbarsherlock/test/app/res/drawable-hdpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..723fbf062f1172c90596815b7d4e80795683059b GIT binary patch literal 6996 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 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/test/app/res/drawable-ldpi/icon.png b/actionbarsherlock/test/app/res/drawable-ldpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..181f679f59edb8acdc56bb16130cd35b15d5dc3c GIT binary patch literal 3003 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 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/test/app/res/drawable-mdpi/icon.png b/actionbarsherlock/test/app/res/drawable-mdpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..79f50d84cadbe15431808b63e74a22c51109e9ad GIT binary patch literal 4248 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 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/test/app/res/layout/blank.xml b/actionbarsherlock/test/app/res/layout/blank.xml new file mode 100644 index 000000000..34dc540b5 --- /dev/null +++ b/actionbarsherlock/test/app/res/layout/blank.xml @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/actionbarsherlock/test/app/res/layout/issue0038.xml b/actionbarsherlock/test/app/res/layout/issue0038.xml new file mode 100644 index 000000000..dcfcb2549 --- /dev/null +++ b/actionbarsherlock/test/app/res/layout/issue0038.xml @@ -0,0 +1,21 @@ + + + + + + + + \ No newline at end of file diff --git a/actionbarsherlock/test/app/res/menu/issue0031.xml b/actionbarsherlock/test/app/res/menu/issue0031.xml new file mode 100644 index 000000000..f6c4be5c6 --- /dev/null +++ b/actionbarsherlock/test/app/res/menu/issue0031.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/actionbarsherlock/test/app/res/menu/issue0033.xml b/actionbarsherlock/test/app/res/menu/issue0033.xml new file mode 100644 index 000000000..a6aa1519d --- /dev/null +++ b/actionbarsherlock/test/app/res/menu/issue0033.xml @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file diff --git a/actionbarsherlock/test/app/res/values/strings.xml b/actionbarsherlock/test/app/res/values/strings.xml new file mode 100644 index 000000000..7af366e3b --- /dev/null +++ b/actionbarsherlock/test/app/res/values/strings.xml @@ -0,0 +1,7 @@ + + + + Resource title test. + Test + Hello. I Am A Test Title. + \ No newline at end of file diff --git a/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/FeatureCustomView.java b/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/FeatureCustomView.java new file mode 100644 index 000000000..629e3bd95 --- /dev/null +++ b/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/FeatureCustomView.java @@ -0,0 +1,45 @@ +package com.actionbarsherlock.tests.app; + +import java.util.concurrent.CountDownLatch; +import android.os.Bundle; +import android.support.v4.app.FragmentActivity; +import android.view.ViewGroup.LayoutParams; +import android.widget.TextView; + +public final class FeatureCustomView extends FragmentActivity { + public TextView customView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.blank); + } + + public void setCustomView() throws InterruptedException { + final CountDownLatch latch = new CountDownLatch(1); + runOnUiThread(new Runnable() { + @Override + public void run() { + getSupportActionBar().setDisplayShowCustomEnabled(false); + customView = new TextView(FeatureCustomView.this); + customView.setText("Custom View!"); + customView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); + getSupportActionBar().setCustomView(customView); + latch.countDown(); + } + }); + latch.await(); + } + + public void enableCustomView() throws InterruptedException { + final CountDownLatch latch = new CountDownLatch(1); + runOnUiThread(new Runnable() { + @Override + public void run() { + getSupportActionBar().setDisplayShowCustomEnabled(true); + latch.countDown(); + } + }); + latch.await(); + } +} diff --git a/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/FeatureEnableActionItemText.java b/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/FeatureEnableActionItemText.java new file mode 100644 index 000000000..9e2a5a043 --- /dev/null +++ b/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/FeatureEnableActionItemText.java @@ -0,0 +1,24 @@ +package com.actionbarsherlock.tests.app; + +import android.os.Bundle; +import android.support.v4.app.FragmentActivity; +import android.support.v4.view.Menu; +import android.support.v4.view.MenuItem; +import android.support.v4.view.Window; + +public final class FeatureEnableActionItemText extends FragmentActivity { + public static final String MENU_ITEM_TEXT = "Item"; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + requestWindowFeature(Window.FEATURE_ACTION_BAR_ITEM_TEXT); + setContentView(R.layout.blank); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + menu.add(MENU_ITEM_TEXT).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT); + return true; + } +} diff --git a/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0002.java b/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0002.java new file mode 100644 index 000000000..5ac2e1686 --- /dev/null +++ b/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0002.java @@ -0,0 +1,54 @@ +package com.actionbarsherlock.tests.app; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.view.Menu; +import android.support.v4.view.MenuItem; +import android.support.v4.view.Window; +import android.view.LayoutInflater; +import android.view.MenuInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.FrameLayout; + +public final class Issue0002 extends FragmentActivity { + public static final String MENU_ITEM_TEXT = "Click"; + + public boolean triggered = false; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + requestWindowFeature(Window.FEATURE_ACTION_BAR_ITEM_TEXT); + + getSupportFragmentManager().beginTransaction() + .add(android.R.id.content, new TestFragment()) + .commit(); + } + + public final class TestFragment extends Fragment { + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setHasOptionsMenu(true); + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + menu.add(0, 0, 0, MENU_ITEM_TEXT) + .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + return new FrameLayout(getActivity()); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + triggered = true; + return true; + } + } +} \ No newline at end of file diff --git a/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0030.java b/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0030.java new file mode 100644 index 000000000..588470cb6 --- /dev/null +++ b/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0030.java @@ -0,0 +1,58 @@ +package com.actionbarsherlock.tests.app; + +import java.util.concurrent.CountDownLatch; +import android.os.Bundle; +import android.support.v4.app.FragmentActivity; +import android.support.v4.view.Menu; +import android.support.v4.view.MenuItem; + +public final class Issue0030 extends FragmentActivity { + private boolean performFindItem = false; + private boolean performRemoveItem = false; + private MenuItem findItemResult; + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + if (performFindItem) { + findItemResult = menu.findItem(1); + } else if (performRemoveItem) { + menu.removeItem(1); + } + return false; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.blank); + } + + public MenuItem performFindItem() throws InterruptedException { + performFindItem = true; + final CountDownLatch latch = new CountDownLatch(1); + runOnUiThread(new Runnable() { + @Override + public void run() { + invalidateOptionsMenu(); + latch.countDown(); + } + }); + latch.await(); + performFindItem = false; + return findItemResult; + } + + public void performRemoveItem() throws InterruptedException { + performRemoveItem = true; + final CountDownLatch latch = new CountDownLatch(1); + runOnUiThread(new Runnable() { + @Override + public void run() { + invalidateOptionsMenu(); + latch.countDown(); + } + }); + latch.await(); + performRemoveItem = false; + } +} \ No newline at end of file diff --git a/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0031.java b/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0031.java new file mode 100644 index 000000000..2b8247084 --- /dev/null +++ b/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0031.java @@ -0,0 +1,39 @@ +package com.actionbarsherlock.tests.app; + +import android.os.Bundle; +import android.support.v4.app.FragmentActivity; +import android.support.v4.view.Menu; +import android.support.v4.view.MenuItem; + +public final class Issue0031 extends FragmentActivity { + private MenuItem mResourceMenuItem; + private MenuItem mStringMenuItem; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.blank); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.issue0031, menu); + mResourceMenuItem = menu.findItem(R.id.issue0031_resource_item); + mStringMenuItem = menu.findItem(R.id.issue0031_string_item); + return false; + } + + public String getResourceTitle() { + return getString(R.string.issue0031_test); + } + public String getStringTitle() { + //Make sure this matches EXATCLY with the menu.xml value. + return "String title test."; + } + public MenuItem getResourceMenuItem() { + return mResourceMenuItem; + } + public MenuItem getStringMenuItem() { + return mStringMenuItem; + } +} \ No newline at end of file diff --git a/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0033.java b/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0033.java new file mode 100644 index 000000000..531d66b0b --- /dev/null +++ b/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0033.java @@ -0,0 +1,78 @@ +package com.actionbarsherlock.tests.app; + +import java.util.concurrent.CountDownLatch; +import android.os.Bundle; +import android.support.v4.app.FragmentActivity; +import android.support.v4.view.Menu; +import android.support.v4.view.MenuItem; + +public final class Issue0033 extends FragmentActivity { + public static final int ID_VISIBLE = 1; + public static final int ID_HIDDEN = 2; + public static final String TEXT_VISIBLE = "Test1"; + public static final String TEXT_HIDDEN = "Test2"; + + public MenuItem menuItemNativeVisible; + public MenuItem menuItemNativeXmlHidden; + public MenuItem menuItemNativeCodeHidden; + public MenuItem menuItemActionVisible; + public MenuItem menuItemActionXmlHidden; + public MenuItem menuItemActionCodeHidden; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.blank); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + menuItemNativeVisible = menu.add(0, ID_VISIBLE, 0, TEXT_VISIBLE); + menuItemNativeVisible.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); + + menuItemActionVisible = menu.add(0, 0, 0, TEXT_VISIBLE); + menuItemActionVisible.setIcon(R.drawable.ic_menu_star_holo_light); + menuItemActionVisible.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); + + getMenuInflater().inflate(R.menu.issue0033, menu); + menuItemActionXmlHidden = menu.findItem(R.id.issue0033_action); + menuItemNativeXmlHidden = menu.findItem(R.id.issue0033_native); + + menuItemNativeCodeHidden = menu.add(0, ID_HIDDEN, 0, TEXT_HIDDEN); + menuItemNativeCodeHidden.setVisible(false); + menuItemActionCodeHidden = menu.add(0, 0, 0, TEXT_HIDDEN); + menuItemActionCodeHidden.setIcon(R.drawable.ic_menu_star_holo_light); + menuItemActionCodeHidden.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); + menuItemActionCodeHidden.setVisible(false); + + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case ID_VISIBLE: + case ID_HIDDEN: + case R.id.issue0033_native: + return item.isVisible(); + } + return super.onOptionsItemSelected(item); + } + + public String getXmlHiddenText() { + return getString(R.string.issue0033_test); + } + + public void hideVisibleMenuItems() throws InterruptedException { + final CountDownLatch latch = new CountDownLatch(1); + runOnUiThread(new Runnable() { + @Override + public void run() { + menuItemActionVisible.setVisible(false); + menuItemNativeVisible.setVisible(false); + latch.countDown(); + } + }); + latch.await(); + } +} diff --git a/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0035.java b/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0035.java new file mode 100644 index 000000000..8eb7e87ce --- /dev/null +++ b/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0035.java @@ -0,0 +1,30 @@ +package com.actionbarsherlock.tests.app; + +import android.os.Bundle; +import android.support.v4.app.FragmentActivity; +import android.support.v4.view.Menu; + +public final class Issue0035 extends FragmentActivity { + boolean mIsActivityCreating = false; + boolean mWasMenuCreatedOnActivityCreation = false; + + @Override + public void onCreate(Bundle savedInstanceState) { + mIsActivityCreating = true; + super.onCreate(savedInstanceState); + mIsActivityCreating = false; + setContentView(R.layout.blank); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + if (mIsActivityCreating) { + mWasMenuCreatedOnActivityCreation = true; + } + return false; + } + + public boolean getWasMenuCreatedOnActivityCreation() { + return mWasMenuCreatedOnActivityCreation; + } +} \ No newline at end of file diff --git a/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0036.java b/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0036.java new file mode 100644 index 000000000..c50fcd59a --- /dev/null +++ b/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0036.java @@ -0,0 +1,35 @@ +package com.actionbarsherlock.tests.app; + +import java.util.concurrent.CountDownLatch; +import android.os.Bundle; +import android.support.v4.app.FragmentActivity; +import android.support.v4.view.Menu; + +public final class Issue0036 extends FragmentActivity { + Object subMenuItemParent = null; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.blank); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + subMenuItemParent = menu.addSubMenu("test").getItem(); + return false; + } + + public Object getSubMenuItemParent() throws InterruptedException { + final CountDownLatch latch = new CountDownLatch(1); + runOnUiThread(new Runnable() { + @Override + public void run() { + invalidateOptionsMenu(); + latch.countDown(); + } + }); + latch.await(); + return subMenuItemParent; + } +} \ No newline at end of file diff --git a/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0038.java b/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0038.java new file mode 100644 index 000000000..024b03d3d --- /dev/null +++ b/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0038.java @@ -0,0 +1,31 @@ +package com.actionbarsherlock.tests.app; + +import android.app.TabActivity; +import android.content.Intent; +import android.os.Bundle; +import android.support.v4.app.FragmentActivity; +import android.widget.TabHost; + +@SuppressWarnings("deprecation") +public final class Issue0038 extends TabActivity { + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.issue0038); + + TabHost tabHost = (TabHost)findViewById(android.R.id.tabhost); + tabHost.addTab( + tabHost.newTabSpec("tab1") + .setIndicator("First Tab Name") + .setContent(new Intent(this, InnerActivity.class)) + ); + } + + public static class InnerActivity extends FragmentActivity { + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.blank); + } + } +} \ No newline at end of file diff --git a/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0042.java b/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0042.java new file mode 100644 index 000000000..72b38d108 --- /dev/null +++ b/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0042.java @@ -0,0 +1,54 @@ +package com.actionbarsherlock.tests.app; + +import java.util.concurrent.CountDownLatch; +import android.os.Bundle; +import android.support.v4.app.FragmentActivity; + +public final class Issue0042 extends FragmentActivity { + public static final String TITLE = "Hey, This Is A Test!"; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.blank); + } + + public void setTitleString() throws InterruptedException { + final CountDownLatch latch = new CountDownLatch(1); + runOnUiThread(new Runnable() { + @Override + public void run() { + setTitle(TITLE); + latch.countDown(); + } + }); + latch.await(); + } + + public String setTitleResource() throws InterruptedException { + final CountDownLatch latch = new CountDownLatch(1); + runOnUiThread(new Runnable() { + @Override + public void run() { + setTitle(R.string.issue0042_title); + latch.countDown(); + } + }); + latch.await(); + return getString(R.string.issue0042_title); + } + + private CharSequence supportActionBarTitle = null; + public CharSequence getSupportActionBarTitle() throws InterruptedException { + final CountDownLatch latch = new CountDownLatch(1); + runOnUiThread(new Runnable() { + @Override + public void run() { + supportActionBarTitle = getSupportActionBar().getTitle(); + latch.countDown(); + } + }); + latch.await(); + return supportActionBarTitle; + } +} \ No newline at end of file diff --git a/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0045.java b/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0045.java new file mode 100644 index 000000000..935c5bc22 --- /dev/null +++ b/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0045.java @@ -0,0 +1,35 @@ +package com.actionbarsherlock.tests.app; + +import java.util.concurrent.CountDownLatch; +import android.os.Bundle; +import android.support.v4.app.FragmentActivity; +import android.support.v4.view.Menu; + +public final class Issue0045 extends FragmentActivity { + Object mMenuItemSubMenu = null; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.blank); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + mMenuItemSubMenu = menu.addSubMenu("test").getItem().getSubMenu(); + return false; + } + + public Object getMenuItemSubMenu() throws InterruptedException { + final CountDownLatch latch = new CountDownLatch(1); + runOnUiThread(new Runnable() { + @Override + public void run() { + invalidateOptionsMenu(); + latch.countDown(); + } + }); + latch.await(); + return mMenuItemSubMenu; + } +} \ No newline at end of file diff --git a/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0048.java b/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0048.java new file mode 100644 index 000000000..e30b0e097 --- /dev/null +++ b/actionbarsherlock/test/app/src/com/actionbarsherlock/tests/app/Issue0048.java @@ -0,0 +1,75 @@ +package com.actionbarsherlock.tests.app; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentPagerAdapter; +import android.support.v4.view.Menu; +import android.support.v4.view.ViewPager; +import android.view.LayoutInflater; +import android.view.MenuInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +public final class Issue0048 extends FragmentActivity { + private Menu mMenu; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + ViewPager pager = new ViewPager(this); + pager.setId(1); + setContentView(pager); + + pager.setAdapter(new TestAdapter(getSupportFragmentManager())); + invalidateOptionsMenu(); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + mMenu = menu; + return super.onCreateOptionsMenu(menu); + } + + public Menu getMenu() { + return mMenu; + } + + static final class TestAdapter extends FragmentPagerAdapter { + public TestAdapter(FragmentManager fm) { + super(fm); + } + + @Override + public int getCount() { + return 2; + } + + @Override + public Fragment getItem(int position) { + return new TestFragment(); + } + } + + public static class TestFragment extends Fragment { + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setHasOptionsMenu(true); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + return new TextView(getActivity()); + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + menu.add("Test"); + } + + } +} \ No newline at end of file diff --git a/actionbarsherlock/test/pom.xml b/actionbarsherlock/test/pom.xml new file mode 100644 index 000000000..179b4dcfb --- /dev/null +++ b/actionbarsherlock/test/pom.xml @@ -0,0 +1,22 @@ + + + + 4.0.0 + + com.actionbarsherlock + parent-test + Test (Parent) + pom + + + com.actionbarsherlock + parent + 3.4.2 + ../pom.xml + + + + app + runner + + diff --git a/actionbarsherlock/test/runner/AndroidManifest.xml b/actionbarsherlock/test/runner/AndroidManifest.xml new file mode 100644 index 000000000..01aea3af3 --- /dev/null +++ b/actionbarsherlock/test/runner/AndroidManifest.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + diff --git a/actionbarsherlock/test/runner/README.md b/actionbarsherlock/test/runner/README.md new file mode 100644 index 000000000..5b856cd2e --- /dev/null +++ b/actionbarsherlock/test/runner/README.md @@ -0,0 +1,11 @@ +ActionBarSherlock Test Runner +============================= + +Suite of test cases that verify each activity and method provided by the test +app are operating as expected. + +Each class has a name which provides insight into the what it is testing and is +then prefixed by `Test`. If you are providing new test cases please follow the +same naming conventions that are already in use. If the test cases corresponds +to an activity in the test app please ensure that you use the same name for +both classes. diff --git a/actionbarsherlock/test/runner/pom.xml b/actionbarsherlock/test/runner/pom.xml new file mode 100644 index 000000000..f3460695c --- /dev/null +++ b/actionbarsherlock/test/runner/pom.xml @@ -0,0 +1,75 @@ + + + + 4.0.0 + + com.actionbarsherlock + test-runner + Test: Runner + apk + + + com.actionbarsherlock + parent-test + 3.4.2 + ../pom.xml + + + + + android + android + provided + + + + com.actionbarsherlock + test-app + ${project.version} + apk + + + + com.actionbarsherlock + test-app + ${project.version} + jar + + + + + false + + + + + test + + true + + + + + + src + + + + com.jayway.maven.plugins.android.generation2 + maven-android-plugin + + ${enable-integration-test} + + true + + + + org.apache.maven.plugins + maven-javadoc-plugin + + true + + + + + diff --git a/actionbarsherlock/test/runner/project.properties b/actionbarsherlock/test/runner/project.properties new file mode 100644 index 000000000..b904742f6 --- /dev/null +++ b/actionbarsherlock/test/runner/project.properties @@ -0,0 +1,11 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system use, +# "ant.properties", and override values to adapt the script to your +# project structure. + +# Project target. +target=android-13 diff --git a/actionbarsherlock/test/runner/res/drawable-hdpi/icon.png b/actionbarsherlock/test/runner/res/drawable-hdpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..723fbf062f1172c90596815b7d4e80795683059b GIT binary patch literal 6996 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 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/test/runner/res/drawable-ldpi/icon.png b/actionbarsherlock/test/runner/res/drawable-ldpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..181f679f59edb8acdc56bb16130cd35b15d5dc3c GIT binary patch literal 3003 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 ganY=gu%KH53+7=g`bSF9`b|O0=vLvBJX;eg( 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 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/BaseTestCase.java b/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/BaseTestCase.java new file mode 100644 index 000000000..8dc67f7e6 --- /dev/null +++ b/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/BaseTestCase.java @@ -0,0 +1,109 @@ +package com.actionbarsherlock.tests.runner; + +import java.util.LinkedList; +import java.util.List; +import java.util.concurrent.CountDownLatch; +import android.app.Activity; +import android.os.Build; +import android.test.ActivityInstrumentationTestCase2; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.TextView; + +public abstract class BaseTestCase extends ActivityInstrumentationTestCase2 { + protected static final boolean IS_HONEYCOMB = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB; + + public BaseTestCase(Class clazz) { + super(clazz); + } + + protected View findViewByClassName(View root, String className) { + LinkedList lookupQueue = new LinkedList(); + lookupQueue.add(root); + + while (!lookupQueue.isEmpty()) { + View target = lookupQueue.removeFirst(); + if (className.equals(target.getClass().getName())) { + return target; + } + if (target instanceof ViewGroup) { + ViewGroup targetGroup = (ViewGroup)target; + for (int i = 0, count = targetGroup.getChildCount(); i < count; i++) { + lookupQueue.addLast(targetGroup.getChildAt(i)); + } + } + } + + return null; + } + + protected List findViewsByClassName(View root, String className) { + LinkedList results = new LinkedList(); + LinkedList lookupQueue = new LinkedList(); + lookupQueue.add(root); + + while (!lookupQueue.isEmpty()) { + View target = lookupQueue.removeFirst(); + if (className.equals(target.getClass().getName())) { + results.add(target); + } else if (target instanceof ViewGroup) { + ViewGroup targetGroup = (ViewGroup)target; + for (int i = 0, count = targetGroup.getChildCount(); i < count; i++) { + lookupQueue.addLast(targetGroup.getChildAt(i)); + } + } + } + + return results; + } + + protected View findActionItem(final String text) { + List items = null; + if (IS_HONEYCOMB) { + items = findViewsByClassName(getActivity().getWindow().getDecorView(), "com.android.internal.view.menu.ActionMenuItemView"); + for (View item : items) { + Button textView = (Button)findViewByClassName(item, "android.widget.Button"); + if (textView != null && text.equals(textView.getText())) { + return textView; + } + } + } else { + items = findViewsByClassName(getActivity().getWindow().getDecorView(), "com.actionbarsherlock.internal.view.menu.ActionMenuItemView"); + for (View item : items) { + TextView textView = (TextView)findViewByClassName(item, "android.widget.TextView"); + if (textView != null && text.equals(textView.getText())) { + return item; + } + } + } + return null; + } + + protected void clickActionItem(final String text) { + final View result = findActionItem(text); + if (result != null) { + final CountDownLatch latch = new CountDownLatch(1); + + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + result.performClick(); + latch.countDown(); + } + }); + + try { + latch.await(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + + @Override + protected void tearDown() throws Exception { + getActivity().finish(); + super.tearDown(); + } +} diff --git a/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestFeatureCustomView.java b/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestFeatureCustomView.java new file mode 100644 index 000000000..96c87d265 --- /dev/null +++ b/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestFeatureCustomView.java @@ -0,0 +1,25 @@ +package com.actionbarsherlock.tests.runner; + +import android.test.suitebuilder.annotation.Smoke; +import com.actionbarsherlock.tests.app.FeatureCustomView; + +public class TestFeatureCustomView extends BaseTestCase { + public TestFeatureCustomView() { + super(FeatureCustomView.class); + } + + @Smoke + public void testCustomViewDisplayedWhenEnabled() throws InterruptedException { + getActivity().setCustomView(); + getActivity().enableCustomView(); + + assertTrue("Custom view not displayed when enabled.", getActivity().customView.isShown()); + } + + @Smoke + public void testCustomViewNotDisplayedWhenAssigned() throws InterruptedException { + getActivity().setCustomView(); + + assertTrue("Custom view displayed when assigned.", !getActivity().customView.isShown()); + } +} diff --git a/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestFeatureEnableActionItemText.java b/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestFeatureEnableActionItemText.java new file mode 100644 index 000000000..7dbdd19a3 --- /dev/null +++ b/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestFeatureEnableActionItemText.java @@ -0,0 +1,19 @@ +package com.actionbarsherlock.tests.runner; + +import com.actionbarsherlock.tests.app.FeatureEnableActionItemText; +import android.test.suitebuilder.annotation.Smoke; + +public class TestFeatureEnableActionItemText extends BaseTestCase { + public TestFeatureEnableActionItemText() { + super(FeatureEnableActionItemText.class); + } + + @Smoke + public void testFragmentReceivesOnMenuItemSelectedCallback() { + if (IS_HONEYCOMB) { + return; + } + + assertNotNull("Text-only action-item could not be found.", findActionItem(FeatureEnableActionItemText.MENU_ITEM_TEXT)); + } +} diff --git a/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0002.java b/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0002.java new file mode 100644 index 000000000..152f73275 --- /dev/null +++ b/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0002.java @@ -0,0 +1,17 @@ +package com.actionbarsherlock.tests.runner; + +import android.test.suitebuilder.annotation.Smoke; +import com.actionbarsherlock.tests.app.Issue0002; + +public class TestIssue0002 extends BaseTestCase { + public TestIssue0002() { + super(Issue0002.class); + } + + @Smoke + public void testFragmentReceivesOnMenuItemSelectedCallback() throws InterruptedException { + assertFalse(getActivity().triggered); + clickActionItem(Issue0002.MENU_ITEM_TEXT); + assertTrue(getActivity().triggered); + } +} diff --git a/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0030.java b/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0030.java new file mode 100644 index 000000000..0ebac462d --- /dev/null +++ b/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0030.java @@ -0,0 +1,21 @@ +package com.actionbarsherlock.tests.runner; + +import android.test.suitebuilder.annotation.Smoke; +import com.actionbarsherlock.tests.app.Issue0030; + +public class TestIssue0030 extends BaseTestCase { + public TestIssue0030() { + super(Issue0030.class); + } + + @Smoke + public void testMenuFindItemDoesNotError() throws InterruptedException { + assertNull(getActivity().performFindItem()); + } + + @Smoke + public void testMenuRemoveItemDoesNotError() throws InterruptedException { + getActivity().performRemoveItem(); + assertTrue(true); + } +} diff --git a/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0031.java b/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0031.java new file mode 100644 index 000000000..d9000448a --- /dev/null +++ b/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0031.java @@ -0,0 +1,31 @@ +package com.actionbarsherlock.tests.runner; + +import android.support.v4.view.MenuItem; +import android.test.suitebuilder.annotation.Smoke; +import com.actionbarsherlock.tests.app.Issue0031; + +public class TestIssue0031 extends BaseTestCase { + public TestIssue0031() { + super(Issue0031.class); + } + + @Smoke + public void testMenuItemResourceTitle() { + String expected = getActivity().getResourceTitle(); + MenuItem resourceMenuItem = getActivity().getResourceMenuItem(); + assertNotNull(resourceMenuItem); + CharSequence actual = resourceMenuItem.getTitle(); + assertNotNull(actual); + assertEquals(expected, actual); + } + + @Smoke + public void testMenuItemStringTitle() { + String expected = getActivity().getStringTitle(); + MenuItem stringMenuItem = getActivity().getStringMenuItem(); + assertNotNull(stringMenuItem); + CharSequence actual = stringMenuItem.getTitle(); + assertNotNull(actual); + assertEquals(expected, actual); + } +} diff --git a/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0033.java b/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0033.java new file mode 100644 index 000000000..31426e6aa --- /dev/null +++ b/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0033.java @@ -0,0 +1,69 @@ +package com.actionbarsherlock.tests.runner; + +import android.support.v4.view.MenuItem; +import android.view.View; +import com.actionbarsherlock.tests.app.Issue0033; +import com.actionbarsherlock.tests.app.R; + +public class TestIssue0033 extends BaseTestCase { + public TestIssue0033() { + super(Issue0033.class); + } + + public void testVisibleMenuItemHiding() throws InterruptedException { + //Get native item + MenuItem nativeItem = getActivity().menuItemNativeVisible; + assertNotNull(nativeItem); + assertTrue(nativeItem.isVisible()); + assertTrue(getInstrumentation().invokeMenuActionSync(getActivity(), Issue0033.ID_VISIBLE, 0)); + + //Get action item + MenuItem actionItem = getActivity().menuItemActionVisible; + assertNotNull(actionItem); + assertTrue(actionItem.isVisible()); + + //Get action item view + View actionItemView = findActionItem(Issue0033.TEXT_VISIBLE); + assertNotNull(actionItemView); + assertEquals(View.VISIBLE, actionItemView.getVisibility()); + + //Hide and test hidden + getActivity().hideVisibleMenuItems(); + assertFalse(nativeItem.isVisible()); + assertFalse(getInstrumentation().invokeMenuActionSync(getActivity(), Issue0033.ID_VISIBLE, 0)); + assertFalse(actionItem.isVisible()); + assertEquals(View.GONE, actionItemView.getVisibility()); + } + + public void testHiddenMenuItems() throws InterruptedException { + //Get the menu items + MenuItem actionXmlHidden = getActivity().menuItemActionXmlHidden; + MenuItem actionCodeHidden = getActivity().menuItemActionCodeHidden; + MenuItem nativeXmlHidden = getActivity().menuItemNativeXmlHidden; + MenuItem nativeCodeHidden = getActivity().menuItemNativeCodeHidden; + + //Make sure they all were created properly + assertNotNull(actionXmlHidden); + assertNotNull(actionCodeHidden); + assertNotNull(nativeXmlHidden); + assertNotNull(nativeCodeHidden); + + //Make sure the items think they're hidden + assertFalse(actionXmlHidden.isVisible()); + assertFalse(actionCodeHidden.isVisible()); + assertFalse(nativeXmlHidden.isVisible()); + assertFalse(nativeCodeHidden.isVisible()); + + //Test native items are not present + assertFalse(getInstrumentation().invokeMenuActionSync(getActivity(), Issue0033.ID_HIDDEN, 0)); + assertFalse(getInstrumentation().invokeMenuActionSync(getActivity(), R.id.issue0033_native, 0)); + + //Test action items are not present + View codeView = findActionItem(Issue0033.TEXT_HIDDEN); + assertNotNull(codeView); + assertEquals(View.GONE, codeView.getVisibility()); + View xmlView = findActionItem(getActivity().getXmlHiddenText()); + assertNotNull(xmlView); + assertEquals(View.GONE, xmlView.getVisibility()); + } +} diff --git a/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0035.java b/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0035.java new file mode 100644 index 000000000..cc7d15755 --- /dev/null +++ b/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0035.java @@ -0,0 +1,15 @@ +package com.actionbarsherlock.tests.runner; + +import android.test.suitebuilder.annotation.Smoke; +import com.actionbarsherlock.tests.app.Issue0035; + +public class TestIssue0035 extends BaseTestCase { + public TestIssue0035() { + super(Issue0035.class); + } + + @Smoke + public void testMenuCreatingOnActivityCreation() throws InterruptedException { + assertFalse(getActivity().getWasMenuCreatedOnActivityCreation()); + } +} diff --git a/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0036.java b/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0036.java new file mode 100644 index 000000000..8ead681ef --- /dev/null +++ b/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0036.java @@ -0,0 +1,17 @@ +package com.actionbarsherlock.tests.runner; + +import android.test.suitebuilder.annotation.Smoke; +import com.actionbarsherlock.tests.app.Issue0036; + +public class TestIssue0036 extends BaseTestCase { + public TestIssue0036() { + super(Issue0036.class); + } + + @Smoke + public void testMenuFindItemDoesNotError() throws InterruptedException { + Object menuItem = getActivity().getSubMenuItemParent(); + assertNotNull(menuItem); + assertTrue(menuItem instanceof android.support.v4.view.MenuItem); + } +} diff --git a/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0038.java b/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0038.java new file mode 100644 index 000000000..7a5517318 --- /dev/null +++ b/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0038.java @@ -0,0 +1,21 @@ +package com.actionbarsherlock.tests.runner; + +import android.test.suitebuilder.annotation.Smoke; +import com.actionbarsherlock.tests.app.Issue0038; + +public class TestIssue0038 extends BaseTestCase { + public TestIssue0038() { + super(Issue0038.class); + } + + @Smoke + public void testChildActivityHasNoActionBar() throws InterruptedException { + String className; + if (IS_HONEYCOMB) { + className = "com.android.internal.view.ActionBarView"; + } else { + className = "com.actionbarsherlock.internal.view.ActionBarView"; + } + assertNull(findViewByClassName(getActivity().getWindow().getDecorView(), className)); + } +} diff --git a/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0039.java b/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0039.java new file mode 100644 index 000000000..29cd25e67 --- /dev/null +++ b/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0039.java @@ -0,0 +1,39 @@ +package com.actionbarsherlock.tests.runner; + +import com.actionbarsherlock.internal.view.menu.MenuBuilder; +import android.content.Context; +import android.test.AndroidTestCase; +import android.view.Menu; + +public class TestIssue0039 extends AndroidTestCase { + private static final int ITEM_A_ID = 1; + private static final int ITEM_B_ID = 2; + private static final int ITEM_C_ID = 3; + private static final int ITEM_D_ID = 4; + private static final int ITEM_E_ID = 5; + + public void testMenuInflationOrderAndCategory() throws Exception { + Menu supportMenu = new MenuBuilder(getContext()); + addMenuItems(supportMenu); + + Class nativeClass = Class.forName("com.android.internal.view.menu.MenuBuilder"); + Menu nativeMenu = (Menu)nativeClass.getConstructor(Context.class).newInstance(getContext()); + addMenuItems(nativeMenu); + + assertEquals(nativeMenu.size(), supportMenu.size()); + assertEquals(5, supportMenu.size()); + assertEquals(nativeMenu.getItem(0).getItemId(), supportMenu.getItem(0).getItemId()); + assertEquals(nativeMenu.getItem(1).getItemId(), supportMenu.getItem(1).getItemId()); + assertEquals(nativeMenu.getItem(2).getItemId(), supportMenu.getItem(2).getItemId()); + assertEquals(nativeMenu.getItem(3).getItemId(), supportMenu.getItem(3).getItemId()); + assertEquals(nativeMenu.getItem(4).getItemId(), supportMenu.getItem(4).getItemId()); + } + + private static void addMenuItems(Menu target) { + target.add(Menu.CATEGORY_SECONDARY, ITEM_A_ID, 0, "A"); + target.add(Menu.NONE , ITEM_B_ID, 0, "B"); + target.add(Menu.NONE , ITEM_C_ID, 0, "C"); + target.add(Menu.CATEGORY_SECONDARY, ITEM_D_ID, 1, "D"); + target.add(Menu.CATEGORY_SECONDARY, ITEM_E_ID, 0, "E"); + } +} diff --git a/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0042.java b/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0042.java new file mode 100644 index 000000000..585b8d668 --- /dev/null +++ b/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0042.java @@ -0,0 +1,26 @@ +package com.actionbarsherlock.tests.runner; + +import android.test.suitebuilder.annotation.Smoke; +import com.actionbarsherlock.tests.app.Issue0042; + +public class TestIssue0042 extends BaseTestCase { + public TestIssue0042() { + super(Issue0042.class); + } + + @Smoke + public void testActivitySetTitleWithString() throws InterruptedException { + getActivity().setTitleString(); + CharSequence actual = getActivity().getSupportActionBarTitle(); + assertNotNull(actual); + assertEquals(Issue0042.TITLE, actual); + } + + @Smoke + public void testActivitySetTitleWithResource() throws InterruptedException { + String expected = getActivity().setTitleResource(); + CharSequence actual = getActivity().getSupportActionBarTitle(); + assertNotNull(actual); + assertEquals(expected, actual); + } +} diff --git a/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0045.java b/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0045.java new file mode 100644 index 000000000..075fb2246 --- /dev/null +++ b/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0045.java @@ -0,0 +1,17 @@ +package com.actionbarsherlock.tests.runner; + +import android.test.suitebuilder.annotation.Smoke; +import com.actionbarsherlock.tests.app.Issue0045; + +public class TestIssue0045 extends BaseTestCase { + public TestIssue0045() { + super(Issue0045.class); + } + + @Smoke + public void testMenuFindItemDoesNotError() throws InterruptedException { + Object menuItem = getActivity().getMenuItemSubMenu(); + assertNotNull(menuItem); + assertTrue(menuItem instanceof android.support.v4.view.SubMenu); + } +} diff --git a/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0048.java b/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0048.java new file mode 100644 index 000000000..eab386588 --- /dev/null +++ b/actionbarsherlock/test/runner/src/com/actionbarsherlock/tests/runner/TestIssue0048.java @@ -0,0 +1,18 @@ +package com.actionbarsherlock.tests.runner; + +import android.support.v4.view.Menu; +import android.test.suitebuilder.annotation.Smoke; +import com.actionbarsherlock.tests.app.Issue0048; + +public class TestIssue0048 extends BaseTestCase { + public TestIssue0048() { + super(Issue0048.class); + } + + @Smoke + public void testViewPagerOnlyCurrentMenu() throws InterruptedException { + Menu menu = getActivity().getMenu(); + assertNotNull(menu); + assertEquals(1, menu.size()); + } +} diff --git a/actionbarsherlock/update-version.py b/actionbarsherlock/update-version.py new file mode 100644 index 000000000..a80af1570 --- /dev/null +++ b/actionbarsherlock/update-version.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python + +import os +import re +from datetime import date + +repo = os.path.dirname(os.path.realpath(__file__)) +changelog = os.path.join(repo, 'CHANGELOG.md') + +code = 'android:versionCode="%s"' +name = 'android:versionName="%s"' +in_code = code % r'(\d+)' +in_name = name % r'([^"]+)' +new_code = None +new_name = None + +# Update manifest files +for dirpath, dirnames, filenames in os.walk(repo): + for filename in filenames: + if filename == 'AndroidManifest.xml': + filepath = os.path.join(dirpath, filename) + with open(filepath) as f: + contents = f.read() + if new_code is None: + print('Current version code: ' + re.search(in_code, contents).group(1)) + new_code = raw_input('New version code: ') + print('Current version name: ' + re.search(in_name, contents).group(1)) + new_name = raw_input('New version name: ') + contents = re.sub(in_code, code % new_code, contents) + contents = re.sub(in_name, name % new_name, contents) + with open(filepath, 'w') as f: + f.write(contents) + +# Update change log +with open(changelog) as f: + contents = f.read() +if 'In Development' in contents: + contents = contents.replace('In Development', date.today().strftime('%Y-%m-%d')) + with open(changelog, 'w') as f: + f.write(contents) diff --git a/actionbarsherlock/website/resources/.gitignore b/actionbarsherlock/website/resources/.gitignore new file mode 100644 index 000000000..0815732fb --- /dev/null +++ b/actionbarsherlock/website/resources/.gitignore @@ -0,0 +1,5 @@ +_site + +#Maven site plugin generated folders +css +images diff --git a/actionbarsherlock/website/resources/CNAME b/actionbarsherlock/website/resources/CNAME new file mode 100644 index 000000000..87a75d963 --- /dev/null +++ b/actionbarsherlock/website/resources/CNAME @@ -0,0 +1 @@ +actionbarsherlock.com diff --git a/actionbarsherlock/website/resources/_config.yml b/actionbarsherlock/website/resources/_config.yml new file mode 100644 index 000000000..d237810f7 --- /dev/null +++ b/actionbarsherlock/website/resources/_config.yml @@ -0,0 +1,7 @@ +url: "http://actionbarsherlock.com" +pygments: true +markdown: kramdown +auto: true + +kramdown: + entity_output: symbolic diff --git a/actionbarsherlock/website/resources/_layouts/default.html b/actionbarsherlock/website/resources/_layouts/default.html new file mode 100644 index 000000000..4fd89c98d --- /dev/null +++ b/actionbarsherlock/website/resources/_layouts/default.html @@ -0,0 +1,78 @@ + + + + + + + + + + ActionBarSherlock - {{page.title}} + + + + + + + + + + + + + + +
+ + +{{content}} + + +
+ + diff --git a/actionbarsherlock/website/resources/development.html b/actionbarsherlock/website/resources/development.html new file mode 100644 index 000000000..7e373a4c4 --- /dev/null +++ b/actionbarsherlock/website/resources/development.html @@ -0,0 +1,33 @@ +--- +title: Development +layout: default +--- + + +
+
+

Development

+

The ActionBarSherlock library along with its sample applications are all built using Apache Maven. Maven will automate the process of compiling and assembling the apklib and the apk for each project.

+

Using Maven is NOT a requirement for contributing to development. It is merely used for automated testing and releasing of the libary and sample applications.

+ +

IDE

+

Even though the project uses Maven, each folder within the repository still maintains the standard Android project layout. By specifying the desired folder as an existing source for a new Android project, you should be able to successfully import the sources.

+

The library should be created as a project first. Any sample applications you also wish to create projects for can then be created.

+ +

Prerequisites

+

Maven compilation requires that you have installed the Android SDK into your local maven repository. This can be done automatically by the SDK Deployer.

+

Follow the instructions on setting up the SDK Deployer. Then, execute the following command in the SDK Deployer folder:

+

mvn install -P 3.1

+

This will install the Android SDK 3.1 into the local repository.

+ +

Compiling

+

Once the prerequisites have been successfully installed, building is as easy as running mvn clean package. The apklib for the library will be located in the library/target/ folder.

+

An apk for each of the samples are their respective target/ folders.

+
+
+

Getting The Code

+

The source code repository is hosted on GitHub at JakeWharton/ActionBarSherlock.

+

The GitHub project is also the location of the issue tracker as well as the source code to this website.

+

View project on GitHub

+
+
\ No newline at end of file diff --git a/actionbarsherlock/website/resources/download.html b/actionbarsherlock/website/resources/download.html new file mode 100644 index 000000000..0d73a023f --- /dev/null +++ b/actionbarsherlock/website/resources/download.html @@ -0,0 +1,160 @@ +--- +title: Download +layout: default +--- + + + + +
+
+

Download

+

Version (loading)(loading) (change log)

+

Zip Tarball

+ +

Plugins

+
+
(loading)
+
+ +

Sample Applications

+
+
(loading)
+
+ +

Including In Your Project

+

There are two ways to leverage ActionBarSherlock in your projects:

+
    +
  1. If you’re using the Eclipse Development Environment with the ADT plugin version 0.9.7 or greater you can include this as a library project. Create a new Android project in Eclipse using the library/ folder as the existing source. Then, in your project properties, add the created project under the ‘Libraries’ section of the ‘Android’ category.
  2. +
  3. +

    If you use maven to build your Android project you can simply add a dependency for this library.

    +
    +<dependency>
    +  <groupId>com.actionbarsherlock</groupId>
    +  <artifactId>library</artifactId>
    +  <version>3.0.2</version>
    +  <type>apklib</type>
    +</dependency>
    +
    +

    Make sure you also include r.jakewharton.com/maven/release/ in the repositories section of your pom.xml.

    +
  4. +
+

Note: If you were previously using the Android compatability library you must remove its .jar. ActionBarSherlock is built on top of the compatability library and comes bundled with its classes.

+
+
+

Release History

+
+
(loading)
+
+

View all »

+
+
+ + diff --git a/actionbarsherlock/website/resources/faq.html b/actionbarsherlock/website/resources/faq.html new file mode 100644 index 000000000..6149793d2 --- /dev/null +++ b/actionbarsherlock/website/resources/faq.html @@ -0,0 +1,73 @@ +--- +title: Merchandise and Donations +layout: default +--- + + +
+
+

Frequently Asked Questions

+

Have a question that is not listed on this page? See the "Direct Contact" section of the support page.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
What action bar library is used on pre-3.0 devices? +

The widget is a custom implementation that was purpose-built to mimic the API, functionality, and look of the native action bar on 3.0+ devices.

+

The basis for the widget was work done on Johan Nilsson's Android-ActionBar library. The first two versions of ActionBarSherlock used his library directly for support on pre-3.0 devices and without his work the current version of the library would not be possible.

+
What API level should I target if I want to use the library?The library itself must be built against Android 3.2 (API level 13). Your project should be built using the latest version of the SDK as possible (it is best to try and use the same version as the library). This is not a requirement, however, and you may build against any version of the SDK that is Android 3.0 (API level 11) or newer.
Why do I have to target at least API level 11 or newer?Targetting API level 11 or newer will cause Android to automatically add the native action bar when run on devices using Android 3.0+. Since you will be compiling against new APIs but your app will likely be run on devices with older versions of Android extra care must be taken to either avoid using or properly check and call any methods that were introduced after your minimum SDK version.
Why do action modes not work on pre-3.0 devices?Action mode support is still being worked on for pre-3.0 devices and will be released with a future version of the library.
Why doesn't the logo defined on the activity/application entry in the manifest get displayed?Despite there being support for loading the logo for activities and applications since API level 9, the underlying implementation in Android is broken and does not work at all. In order to specify a logo on these platforms you should use the abLogo attribute in a custom theme.
List and tab navigation hide the title on pre-3.0 devices. Can this be changed?Due to the relatively small space to display items on phones, this cannot currently be changed. Future versions of the library will behave more like the native action bar on larger displays (e.g., Nook Color, Archos 101).
Can you add functionality *X* to the action bar?As a general rule, no. If the native action bar on Android 3.0+ does not support it then it will not be supported by this library.
Why is ActionBarSherlock a library project whereas the original compatibility library is only a .jar?ActionBarWatson, the custom action bar implementation within ActionBarSherlock for pre-3.0 devices, relies on styles, themes, layouts, and drawables in order to display properly. Due to the limitations of Android and .jar files, it can not be accomplished any other way.
I found a bug, what should I do?See the support page and create an issue on GitHub, post to the Google Group, or contact me directly. Or do all three! The worst thing you can do is to not report it. Please try to include as much information as possible in your report.
What causes the following error: Binary XML file line #8: You must supply a layout_height attribute?You application or activity is not using a theme from the application. See the "Parent Themes" section of the theming page.
Do I need to include the .jar file for the Android compatability library when using ActionBarSherlock?No. ActionBarSherlock is built on top of the Android compatability library and comes bundled with its class files. Including the .jar will result in a very large number of compile-time errors.
I use progaurd. Are there any lines I should include to ensure functionality of the library? +

Add the following lines:

+
+-keep class android.support.v4.app.** { *; }
+-keep interface android.support.v4.app.** { *; }
+-keep class com.actionbarsherlock.internal.** { *; }
+-keep interface com.actionbarsherlock.internal.** { *; }
+					
+
+
+
diff --git a/actionbarsherlock/website/resources/favicon.ico b/actionbarsherlock/website/resources/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..0b9f03ed0f1aee40e15d2cd6d916dd91858d473b GIT binary patch literal 1148 zcmZQzU<5(|0R|vYV8~!$U=RbcG=LZ+qyWT>U=qmS0Aeh_&DtQEkB4g)Pzt1#B#@Wr zSC$j!_1{ES`9CiY=Ru%muuF(FL{VC_rKK$Ke@3+Xe`AOl`+$1+h}92Lrz|Vc)K-!7 zKP}Sjzmbm8e;#hGoj_r3Qp`|OkZf`w!s9N+_)zc6xf2`z&+7>J`SNVl#gA8-PrW|h zbnfBVsgEz8+55kyIOD&qsYU`WGpe$qlR8R$|KB^&cJ=4WUB|vW*?IEI{S_xaU++Hl z=2F*{M|aNsONtKqrll%vfX$5V+MI<;CPe@L^8Cn|pI@Gy{Qlw2sjn}No%(Wr)u~Tc znvcD^KJ(7*?VJ9qDoD)7rhopFmIWKeBhYe}0_&_2t>AZ*MM~`toSYsZTei zo_u?*Kp&5{*z|8+HC_7Tp^dK&tV;j)@!__M-(MX+@%izllb>$SJ^Ar!$EnZf zQ;wb5+5N-L!t@F@{UEWUdpD<^IOlAp6#oN?{RiQ802|FvJOBUy literal 0 HcmV?d00001 diff --git a/actionbarsherlock/website/resources/humans.txt b/actionbarsherlock/website/resources/humans.txt new file mode 100644 index 000000000..9eae994e4 --- /dev/null +++ b/actionbarsherlock/website/resources/humans.txt @@ -0,0 +1,25 @@ +/* TEAM */ + + Name: Jake Wharton + Site: http://jakewharton.com + EMail: jakewharton@gmail.com + Twitter: @JakeWharton + Location: Pittsburgh, PA + + + +/* THANKS */ + + Name: Johan Nilsson + Site: http://markupartist.com/ + + + +/* SITE */ + + Last update: 2011-06-15 + Language: English + Doctype: HTML5 + Standards: HTML5, CSS2, Markdown + Components: jQuery, Colorbox (jQuery plugin) + Software: nano, jekyll, GIMP diff --git a/actionbarsherlock/website/resources/index.html b/actionbarsherlock/website/resources/index.html new file mode 100644 index 000000000..0c996acef --- /dev/null +++ b/actionbarsherlock/website/resources/index.html @@ -0,0 +1,173 @@ + + + + + + + + + + ActionBarSherlock - Home + + + + + + + + + + + + + +
+
+
+ +

ActionBarSherlock is an extension of the compatibility library designed to facilitate the use of the action bar design pattern across all versions of Android with a single API.

+
Donations & Merhandise
+

The library will automatically use the native action bar when available or will automatically wrap a custom implementation around your layouts. This allows you to easily develop an application with an action bar for every version of Android back through 1.6.

+
+

Download : Zip Tarball More...

+
+
+
+ +
+
+ +
+
+

Usage

+

Interaction with the action bar is provided through a single API by calling getSupportActionBar(). The methods provided by this interface mirror those of the native action bar exactly.

+

Enabling support is as simple as extending your activities from FragmentActivity and declaring a theme in your manifest file.

+

Learn More »

+
+
+

Theming

+

A single theme can be used to style the action bar to match the look and feel of your application.

+

If you need to customize the look for a phone or tablet, Android's powerful resource filtering can still be leveraged.

+

Learn More »

+
+
+

Samples

+

View screenshots and descriptions of the three sample applications which are bundled with the project as well as open source applications who chose to implement the library.

+

Each project links to its source so you can investigate their code for reference.

+

Learn More »

+
+
+

Resources

+
+
Frequently Asked Questions
+
Common pitfals and their solutions.
+
Help & Support
+
Places to go when you need assitance with implementation.
+
Development
+
Contribute to the libary.
+
Merchandise & Donations
+
Show support by purchasing a shirt with our mascot and/or donate directly!
+
+
+
+ +
+
+

Featured Implementations

+
+
+
+ +
+

FriendCaster

+

FriendCaster for Facebook gives you the best Facebook experience on Android devices!

+ +
+
+
+ +
+

RateBeer

+

Mobile interface to the world's largest source for information on craft beer: RateBeer.

+ +
+
+
+
+
+ +
+

SeriesGuide Show Manager

+

Manage the progress of (re-)watching your favorite TV shows. Keep track of which episodes you still have to watch or which ones are upcoming.

+ +
+
+
+ +
+

Folder Organizer

+

Group items according to labels and create fully customizable folders and widgets. You can organize apps, bookmarks, contacts and shortcuts.

+ +
+
+
+
+ + +
+ + diff --git a/actionbarsherlock/website/resources/merch-and-donations.html b/actionbarsherlock/website/resources/merch-and-donations.html new file mode 100644 index 000000000..30cd68fb0 --- /dev/null +++ b/actionbarsherlock/website/resources/merch-and-donations.html @@ -0,0 +1,36 @@ +--- +title: Merchandise and Donations +layout: default +--- + + +
+
+

Merchandise

+

Purchase merchandise containing the ActionBarSherlock mascot! A small portion of the proceeds will go to benefit development of the library.

+

actionbarsherlock.spreadshirt.com

+

Merchandise

+
+
+

Flattr

+

The Flattr service is available for those users who would like to show a continued support of the project.

+

+

For more information on how Flattr works, please visit their website.

+
+
+

PayPal

+

PayPal is available for one-time contributions of your choice.

+
+ + +

+ + +

+
+

Due to the fees that PayPal charges, please donate no less than $1.

+
+
+

Your monetary support is greatly appreciated and will be used toward the costs assocaited with developing this library (e.g., GitHub subscription, designer commisioning, etc.).

+
+
diff --git a/actionbarsherlock/website/resources/robots.txt b/actionbarsherlock/website/resources/robots.txt new file mode 100644 index 000000000..cb4bc85f9 --- /dev/null +++ b/actionbarsherlock/website/resources/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Sitemap: http://actionbarsherlock.com/sitemap.xml diff --git a/actionbarsherlock/website/resources/samples.html b/actionbarsherlock/website/resources/samples.html new file mode 100644 index 000000000..7b4202258 --- /dev/null +++ b/actionbarsherlock/website/resources/samples.html @@ -0,0 +1,82 @@ +--- +title: Samples +layout: default +--- + + + + +
+
+

Library Samples

+

The library comes with three samples, each of which demonstrate a different use case of ActionBarSherlock.

+

A compiled .apk for each sample can be downloaded under the "Sample Applications" section of the download page. You can obtain the source code for each in the samples/ directory of the repository.

+ +

Demo

+

The demo sample is a showcase of the functionality of the library (most notably, the action bar). There are several demos of different functionality but the most important is the feature toggles. A set of buttons make up the layout of this activity which allow you to toggle virtually all of the display-related settings of the action bar to observe how it behaves on various device configurations.

+ + +

Shakespeare

+

The shakespeare sample was used to introduce fragments on the Android Blog and is now part of the SDK's API Demos. The demo has been modified slightly to show how ActionBarSherlock operates as an extension of the compatibility library.

+ + +

Styled

+

The styled sample is an application developed by Nick Butcher and posted on the Android Developers Blog as an example of how to use theming capabilities of Android to allow the action bar to match the style of your application.

+ +
+
+

Open-Source Apps

+

The following are open-source applications which implement ActionBarSherlock. These should provide a more realistic view of what implementation is like provide solutions for common implementation problems.

+

If your application uses this library and is open source please contact Jake Wharton to have it added to this list.

+ +

SeriesGuide Show Manager

+

Manage the progress of (re-)watching your favorite TV shows. Keep track of which episodes you still have to watch or which ones are upcoming.

+

Market · GitHub

+ + +

RateBeer

+

Mobile interface to the world's largest source for information on craft beer: RateBeer

+

Market · Google Code

+ +

VampiDroid

+

Android app to search and organize cards of Jyhadâ„¢, Vampire: The Eternal Struggleâ„¢

+

Market · Google Code

+
+
diff --git a/actionbarsherlock/website/resources/sitemap.xml b/actionbarsherlock/website/resources/sitemap.xml new file mode 100644 index 000000000..cdbe22cf0 --- /dev/null +++ b/actionbarsherlock/website/resources/sitemap.xml @@ -0,0 +1,60 @@ + + + + + http://actionbarsherlock.com/ + 2011-07-16 + weekly + 1.0 + + + https://actionbarsherlock.com/download.html + 2011-07-16 + weekly + 0.9 + + + https://actionbarsherlock.com/usage.html + 2011-07-16 + weekly + 0.8 + + + https://actionbarsherlock.com/theming.html + 2011-07-16 + weekly + 0.5 + + + https://actionbarsherlock.com/samples.html + 2011-07-16 + weekly + 0.7 + + + https://actionbarsherlock.com/faq.html + 2011-07-16 + weekly + 0.4 + + + https://actionbarsherlock.com/support.html + 2011-07-16 + weekly + 0.6 + + + https://actionbarsherlock.com/development.html + 2011-07-16 + weekly + 0.3 + + + https://actionbarsherlock.com/merch-and-donations.html + 2011-07-16 + weekly + 0.5 + + diff --git a/actionbarsherlock/website/resources/static/1120.css b/actionbarsherlock/website/resources/static/1120.css new file mode 100644 index 000000000..2d8ebca78 --- /dev/null +++ b/actionbarsherlock/website/resources/static/1120.css @@ -0,0 +1,63 @@ +/* CSS Reset */ + +html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,address,cite,code,del,dfn,em,img,ins,q,small,strong,sub,sup,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{border:0;margin:0;padding:0}article,aside,figure,figure img,figcaption,hgroup,footer,header,nav,section,video,object{display:block}a img{border:0}figure{position:relative}figure img{width:100%} + + +/* ==================================================================================================================== */ +/* ! The 1120px Grid V1 by Jake Wharton \ http://jakewharton.com \ http://twitter.com/JakeWharton */ +/* ! */ +/* ! BASED OFF OF: */ +/* ! The 1140px Grid V2 by Andy Taylor \ http://cssgrid.net \ http://www.twitter.com/andytlr \ http://www.andytlr.com */ +/* ==================================================================================================================== */ + +.container { padding-left: 20px; padding-right: 20px; } +.row { width: 100%; max-width: 1120px; margin: 0 auto; overflow: hidden; } +.row > div { float: left; min-height: 1px; } + +.row .fourth { width: 250px; margin-right: 40px; } +.row .half { width: 540px; margin-right: 40px; } +.row .three-fourths { width: 790px; margin-right: 40px; } +.row .whole { width: 100%; } + +.row .last { margin-right: 0 !important; } + + +img, object, embed { max-width: 100%; } +img { height: auto; } + + +/* Smaller screens */ + +@media only screen and (max-width: 1159px) { + /*body { font-size: 0.8em; line-height: 1.5em; }*/ + + .row .fourth { width: 22.375%; margin-right: 3.5%; } + .row .half { width: 48.25%; margin-right: 3.5%; } + .row .three-fourths { width: 71.5%; margin-right: 3.5%;} +} + + +/* Mobile */ + +@media handheld, only screen and (max-width: 767px) { + body { + font-size: 16px; + -webkit-text-size-adjust: none; + } + .row, body, .container { + width: 100%; + min-width: 0; + margin-left: 0px; + margin-right: 0px; + padding-left: 0px; + padding-right: 0px; + } + .row .fourth, .row .half, .row .three-fourths, .row .whole { + width: auto; + float: none; + margin-left: 0px; + margin-right: 0px; + padding-left: 20px; + padding-right: 20px; + } +} \ No newline at end of file diff --git a/actionbarsherlock/website/resources/static/apps/com.abcOrganizer.png b/actionbarsherlock/website/resources/static/apps/com.abcOrganizer.png new file mode 100644 index 0000000000000000000000000000000000000000..d96f593e4e0da5cb0793ceefe98799fb22bd1f78 GIT binary patch literal 11838 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 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/website/resources/static/apps/com.battlelancer.seriesguide.png b/actionbarsherlock/website/resources/static/apps/com.battlelancer.seriesguide.png new file mode 100644 index 0000000000000000000000000000000000000000..926e618e0c8fa3ae399789072f5d97fcc6793c65 GIT binary patch literal 9199 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 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/website/resources/static/apps/com.battlelancer.seriesguide_01_2.3.4.png b/actionbarsherlock/website/resources/static/apps/com.battlelancer.seriesguide_01_2.3.4.png new file mode 100644 index 0000000000000000000000000000000000000000..8ac68259ea6a7febbbe50be7d2a0b4e8d2dee191 GIT binary patch literal 197587 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

AR<#;H zwFy)}j4=weri@0gu-Xc#)>f6ZmX=B)x?KpiCl#w?oGns!<9;dvYY8qEfvE~dqROFn zmMxc7f$Z3kvuv$YR3%eK&6b^=r9Z=bln0N=q?zhD-yT%xX#PAdGPzR&kGDa*=Ty62 zmUm(|fgyS{M$eyPzHl<%*4`frO7E^pXP=yf&mPsmy}iC_B|*)DlLw!C_@gi^VHH$B z6JZ*4YIPcG)v^oT0ozXFC{o)Ic3jHQ3HLh3a_Ng6~VOrZU~BKebUT zEw)LD+*g2rDjnx6h7BKYyea0GQWBER_m(XQQKd#L)^a3b{Z4?I03yq7KJgl799yXN z&O0-l8o&0dHT9kK$`%AI1_dS2l&7&YLL;k91q|h20qjC2Ndx-U|p8>TMxR zwGyC0`#dRuY**8^G@7Ksz}=x~6rgf@2Lh2EVV4$tu zVV6x2REm=iiw}$;n2%TqIDuerECa%FWP(sE9KiW;T*irs;s8~tDlo;Z`#xts)|zvU zNALLPC16Vy9dl!*zH9ITh9M}w0QmG)LcWlV>x~BD*3xN_qNO`q6uQO#P%hzFFn&6sR zJBSv}(shna=ds<0?US}=M=h+ketmB?C7X3z)W|?uZ&~B!>P>H1LS&mE#=8#mMQ^`4 zJf2XN+j%XPK;t+b1{pOk$SWbL>3|tDlVXX{1;EuQ-#mCaolbYBJ2DDBT<@;KK1{}>@ZECd=k=Lfu%K+25 zE+rC(*iDlg&YR=Hz^2)FDMhTP7*GGrMVFW(4Bq)B#Hss#U1MG)NUi5nj?IiH8zj7? zD7DHN8juayj5rjUhT#x~fhG^LT0@(yd0kezo#UDoA`nF&qQy?aLjw<^GuQ}t2#hf} zb20$F!gEW;nlKmAJWa#2BXT6*Kx!rcJlG)<%uL2XUWmVH z!3{h#IND)d*LYe&a8K?RO8|j2L8cW;eTpZ-+{-i5Gzu6n8O9L677KNGb)$F}s7@ZrJyjrqUB6!GVwV?>!5!6Tq38>S+E$ujB%Voj=t(M91|z%>%vpc@_8NkyRQyqN%e1+Ty6($1H->g%_6!m$*@b(zai z^#n}EM5BXfn|+?O3;_kdhl59|H6vaAWf1YR*H{yF zXUlNRi8Yt{D09pV9;P8Jsc4}(y+lm~c==73XaKFSpk{`6jdTK42)G>fW<};8_ya;2_V!&W+t%T2k+rstBFe8ZVXGOIL{HmV>ila9b=5E zi%?g{it648VFaGWqO$@^x*q)NYh<3Jq{1>s-A&G1!UBU*#*)@0&JXB8)&k;O5Ve>y zN5Y;>RfIcRJrks=n8aZUoZ(>6)RwqJHxZC^lVLP%^9Za^hw&hzID;P#+`Q|V2tWu|fCvdW)9UKR z^>@G^ZLFvE=ziMa~W*i2iX%eECao^Y#0yLj6+Ct&MIqeN7V+|I60INKoN zo%e6P5TCrlyZd#0aQFJ^A4J0ObVo)h(y(L7w(_uJLxCkiax(aF%BWF($NTwos~jHe zhTSv{VaO?4wEL1Yt!rMiC=A2cE~^1!+Xl`S5aMi#oBXuqigr&#Gk`Mb=O7{|u_77O zk^qHZCPdi`g(4X;szbzi#)LRXFftN)X7-sVl>|2g2}_;4%3)#PvODtwbx&R`9pAr zaTmrZ$Cy`zLd`T4g@WKEICn;Llg6C0t){u8q9~dPuHIE*0GUi9(lH;O5sO`ZoD$+3{cQY zK+2gYF~INy4ddQBHw0n166O@W3OIZ7ejj#^_Wl$T<#b9oRf}Igp{z*ryw2E7Ms7D8 z5avmzqDi!P;FNBkrbiD4siQ6#rl#aa#DbDsK{hxz;KZ^oB^m@M8HqqC!vmU&DMd|Q zJP0z3Xlb0zBNH6^(ey6oC1u->)95u9A7h@=F;D=*JIzH6Bn(4dP7yi-56tLpnMdcd zxB^=93RIt8XO?%<1WO>vF+(`#l3h{?ob5Q@@0{Er?bHJnohQ0o#&NP~8r+f+4DO7k z6vI|wZC4mQi*o9@HSC1DJ!_~|sd#tBXRKM?w{Kvyfe3mg5}Q1_Iw|(iUZP6AzJBvQ z;rZckA5dbtd*k(2j!%B~_kL$d>m;yT$T^q|MAr`=Kjy31PJoYZJbly3aZPu}yK%g_ z-d~03y2K^LH0KOt%Cuq`-HzHV-dK~IbIFAYEw(g&d(V3})Ym)%lxE8FV#q6g-!FOw zGA>KW0GP67lxCFd-~~cNSy!-}jeGRjCY#tCL?uɽ{A*q)L9}p8tYpBiQ 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 POgg$BeXH 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¬SNprv_!(I(rLl`8bAVO#p?KK!U9}Bvivq* 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

wqcVr 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%0A-C`6!5H!G7pgGL-B5sRF9XDvDZpRZra&f7ni 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 H`xfv&wkRoD literal 0 HcmV?d00001 diff --git a/actionbarsherlock/website/resources/static/apps/com.battlelancer.seriesguide_02_2.3.4.thumb.png b/actionbarsherlock/website/resources/static/apps/com.battlelancer.seriesguide_02_2.3.4.thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..7d4d5f17c197827f81d3a7422e38294cdc6a2b89 GIT binary patch literal 4116 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 z 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

}cM=;iK(OAd43pflmqM^v0r}FJ_ulAd${Cu2#{9 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 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/website/resources/static/apps/uk.co.senab.blueNotifyFree.png b/actionbarsherlock/website/resources/static/apps/uk.co.senab.blueNotifyFree.png new file mode 100644 index 0000000000000000000000000000000000000000..f8bccc6633875b612b0f443b91fe1816bdb5c2dc GIT binary patch literal 6383 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%0D`$31Hn+NZR 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 z zC8Xs>L>V4yn@G!lbM&!}W zW0Y6Yh3m_QA0Dnht?QaIyO~ooiluG6kK!~DH|1B@@b-{^BGZ44;N&?{Rko%_@E^P& za^CPu=Atx^-^VLUo{eGQW8ZAQ2?j<>vXxCv$DPsgANQNTH(lwBDWCmvTc|g}=bh7} znqrnkIkL{FQ>U!KIrXKe@9TePzc)g&&@?lLyR1*MnT%CxIAxU(=OnYr6z{X}JnDhk zr@nzZjw$!lI3LRkl%fLb+qnioGAB1^d{yxP1q$uimxSW6-emeH+A)qK6ij81^ikEC zq*92!*J{(EVT=dI%bv5bSC-C+KTFs>V@G+b}h54ohOqQx2*e zX$%t8dni-&XToiM;#+{J;<7h-V$in!F61}o3BjA9*a>_s+u_~2 z`@1E~UC3E|G|$KqU?PuN{O-G!iWder3MT>c!PsrrbjFRsWR1~3?q3@lM*jxa zrDRhg{aQCy5w&GP58|Gst`gdvCW%qWouW$1d)HUnm&qPK*(5iySkkf(OqNstej$IZ z9Nu1)4TIp`$rt%-sw!;dk@e+|y5h=vr2zV%!YS|p1=U$s;#G$f&Vw@hL@JUa1>bnf z^i~W7;!`y31?-EMG$pp)&-y(J2uP2jBnY&yh7cs7f_k)$6#e*0QEQH13(Bz{2hlYK`XBsI@2rLJOQTd7C7nGILVrek;ow()-so zIaa;3Zn%TcIQ7KLBAsTV#Y|Vv_e5rwHjKm-uh8!eizRXTO zl>Fm%RIQU55o}DTz$#Eo@b-pS-%NS0e>3EC?}eT@E{8qw$XN2n*CRmmz%3|J_v|zv z?6-QK+mmK>NkcU36@_UemHb+ zv#*^%q}x0+(hiRs*)THj=b^sona8yC>+x$C84id#VKc+Lgdyi?IbXx=bejb8sw!{&EaXYG$q|J4`9wWy}}@9vJ_v)xvU-S5zPXTU7; zTgzU_v$F)}-Kn;61vPgg3e>J;Xk}CMwp443d)AO5&~`9Cj%XEH``E|u^OGMbU#g+L zC#z|2niiE;`AM4d1pY4ic7}@)D+HkxPoOclJQA>3?!G;)Bp3A``>^6=F^*p>rd|!fcmGj*hV~g3H{q|f&B{)5Y2|f zn2$_&>IQH(BPW)E{`mUp_zU0fh3yw7#g|WiErkj*pG&zX%_2nJ8$6f5NuRywG+1r6 z17JkBE$YUZWTC_?_jZveq^hixvkPzX$2{frmUhPI_?PKTxuGpE zi^{V*;ET|H@!wAM%asMI9chau;zGEsqG1twBEJzcDl`E}ki?#qRUgS5f1aw3E_}fo zs;SHsz|YIay}_z&OYFy~Mgzxkmh@E{>O-z6=ctp0n0=(LQ0caPck}Y*I#1W@^04IfE_eFtPAOcqaApPI!|Q!*FT9X#N-?`<-!R(V8XiWw_nJ$o zdP0L=DpRo;zA9Zdr92%HaP*5X2@12PJH5jvheZMt$b(1#IK_Knj91>NC;2u%dzuaJ zDikdOT2>X~?Rb4ur{iCl$mxJ(SGzKk%uc9rOotx!BG_7p28S~$`m3hUs@z?cj|5>~ zO0*Or2oLrHC+1lr`^*4D8Z9|Z#Hfp9pb$qNCtBI4FjxdbQlpD_DrJ2^D7JG-OLVG> zh7K$#CtdXZ`)Qtjd;c-7*Xy)iUf!>1dN+uty>GlFf}8sf%ps_-vdVDzf5G_^kvxHYe1!6My#{_J<;$@*q;5w# z&pG+PAy8GdP~t>y-}h=dL<~muC#HQ51pnI>==?3)p0wcGn^l~u(J??(~< zhW~forzz*aVGaQ=yBCrI21)1fv1+}uWKR^25xq)e_Z;t9kgF@`h`qdr)AO8yGGXj?EqMZMJdMtUnUn4V9Vj~lJE7OD z5Cnv}z$+7I$SEbq5_8%sD?>LG;5{#G?Y0!%89<;v@1`T#m|vNq`(g{eRuQs#{J1!K zc?0EPd7Msi|AKOh?S>3hpwQ9harA=f5Y|)g@boj)D4%QtA=TMwS2mNcm43``-g{hotC@x`fiwX zO_CY->A4i*DN#$0H(HJLhTyiGRr44)C)ag(I)8Vq>$Kjl%Y6vz-K{?RDz}*#e8SGa zM#@+dw_KS!BuI%50;>?6E8TTM>{wAHksG}`93D{?qI4tqR;wul5{Zdwu*eEROWud< zV@f&9K}G+DgG-zwrOT99lLk%cMOsLZLMYgJq83v!Pgyl`jrP3hLr|aznb_#uL|8?Z!O;sb2CKchB^Kw3=X`ZKL zS}*hErzPt&XsxjTCyMK9iJN@=eWy0V1b$M5#V_R2V% zO>-g7pZ(hV5w_C&Vg!-nbH=9c`{T1MP_;4XODB^Q{OU4E%uW&!>j2S%(>QMA^BOWY53osMO z$S@cpkVo+?o2#csP3KGOF#*(Hv{1#(q2mvBEd!!A-np&mYx3Yhh>ag-3$`-pIQK77 zI(}55aAis~Kqn;BQPXQ%Tm{{MW~MHuiE|8^RAVsvk1B3jrX`9EIi&Be0-tuG=kL9{ zAlaDP-~C@38x4mD%~|oUfA(wKFjWY@xOx=hlR=Dax!?F5s1?8Of-XSt)y^N1Q0`Bl zLMh{CmFqr~o(eKXJyZm}!ZVv6k-fSBwoz!Ehc5H1QW}XvT^iA&D{G*uWLF z01Cv|0*o<@$c7wF@|^BW8Bj5iBS8=%>Bv$-4k-*GD>G~Czyc3wNd`Fk*1R;&NHi!X zWx66;K5MM<9i_Puf}1~#o>e8NaAeoLsJS7>^kND*=hJ!0alT!0$Y~$)biJ%^7Ab!j z2&89L)9!p@<*-nG4+KBL;!#Fb4kN)AM|Z_xwSQZ(hbXV@mtQW$YD-gxM>{kHkng>_ zI^|Y<|2T3y(9{+NvWz!dB5-Yj)?JXqSvd)jRgf#CDDc%~T?kU57Pqyteq*@&(@*kY zC~EI1H{0?IXauyjKf;USfY9)X_Ss*?i+WS_iL+7;chfYj>-F{B!@Exp5AW`;r;ZAsDp5zNi$h9zo&u9 zaWA{4T`q1bLKJLzG)$u)`>(cTLLh7PKsC_FgY|EDdvBBuz zXV29T+9-tT*~Y@Ey(O(ei>-yGQy_LiLP;FQc;(TW&5YCdO(aiF^5y;Y4}bk(eR%Wm z!^8Fc!^8dk<->57!W1NGh>rMgl$=}B@@GxbNp!c7Ln6IR!Y{I06JNjxXyEP-BRL_L zJ?<2nUrrujEDfFB7W5KB6hhb6zQM5hIntM3N{GQfAN+=Bld(12TZmXWeqVK=Hpgu~ z8F8R7abp~S>^~SMAh%?9U+2wifzWNXC=@|(v}4Dd&`MH0(8QK)=Cn^^#|cP~BJ1B! z5(!+;uSC-T@QL7YKNn%v66=ccgn>doSJ`pzX zsBm;44jOMINy*d!%24*Omo2lc;ALt0P{;3p{Hb9Wg~$@zP?E2k;)ZG<20@+Q3RV}y znPh9=i~s%HlZdVHxdQKXP!03ym zh4O$I4bJZm$$`Ah(sd~$@!%ad-XK%((dm#hffY(}kkfU_X<3J9S+5rt)}%RbQVgVp zF$Op7YdDNtetC*N(h-vPrn;a;s!I6}prt!#fkh-n$? z$IE~Cjkn*)E=1b(=F6vD|E~xt@aJy<_fH&cT+cnWmC0gRqB{?J>W3E+B}t6l5LUYg zCAjxCSTd$jGm?e~w4*z{f}8i~dMe(t{U5$q>bnw{f(~H_6X$hZuOF6&HRsE9S`LH) znKqDouyF?rp|l!p;#O;JfsCo!v*ARl>g%B`)sP6`7TL+Bi2NQhNr)+-%fjkdMWc!Z ziK-e^lPu%cBW>#7&zKt_2rWkPyRqz3TZ``KLPPlyzQq`_=-)_~;&8==b{N4sVkEi& zX}_9cmK?%#eSeqlKV9Fi)9~?nx?HFG_02SYd|21Z?|+-8>vg?emydZ`hc!@AN-ivx zBFp7BoKy$NA*l{3nnJkAb67o~_*e!R+5YQC^U06l+qXyB8+vb>&aHHdOd3-FsFk#g zL+q#&1dNIYfoy3opqXv_qReG%`lH^8k}LEHkZD1pW$)^f! zMI9~uL#M`BAZ(HQuJdSkdv%l_4}~dI5{BGovnz*k=N!@;vXjJtI7OB8H#vuxqH5BRScX$y6M*0eLftfC47pp7 zA^5OQ;j)vIH0P)(q)9cdX$X7B8vFAkvT_QM^HNQrhV5K~a*bQ+XHmxA)aIw#F(&PtP10_=+RNUQ{-r69P%wD=om_NUde z^U;vVURo+d-BnRF=XX|{Jt2kenTsUMUQ{VWO}dXH)&|k>)vX*KZ~cWDXx`m_dh_Xi znTDhiQog;<*|Ap|RekK4{hlBWG~N)9Bchn6WC->|{M>O;B340#(g9I|q-qgXy4@{m$Uf^4v=JeHLmY2j&O3T*{ZS}wmV z!oRaLULD%1EdD)LKl>u%9nfb_bomJ zQQtBdU9l!-wF~>G$jU?$dfbT`zY_(930tYz=Rj zwF+wvDW$BUVaoZ{l2mU}2-hi=*4#LrKy^sdw66DSUT50$1gD)))TA-62u~@*TM^H%Nd%T(SRB5YE~)5h%6&gB>+ILk3PcI2&UGs+(T;aQJ`7(<1H88`fmrKB-hQf$x% zHT5vzNPQ>7r(c613KU7iTDfur>~l`x;qG!-R>`a((Atq9--N6xksD>Qr?>XnIwezx zs-u)-2N4+J$Iw{9o4{R2Gz;LN9#>el=|m)!SBj;!&~%dn7vVd$d^i!q`Y)UNBxcCb2|7#1lyO zaT>BxM0V#vgo0CEXr6QtfrMfy+)U=**7(!=b-I3cHxFT-B!rx&JWcbQa?Gh_ynwoXibIa_KRqce>x;J-_M<BSe~mlpfDA1k6_(!uYp zq$bAEDx*sJ|J|fGI3-0-LNpl`QgPreRW%F}KPXX9Fb-NFl6l7Ts*^PAH7_B%7&uQM zuP|o~xTvNSh>iD7opsd>8Eb(WqK}RQz;YpN$(JL4ZY=TWOY_n`?zd#Z>oQwKGJh{q zSAh&7wMm|x2-6%(PI4q_CtkrHPf`blZ)hN+hB|yBruc-)^5iZDMn)fm&>R1;bA>c zADqMxhUq+MP}by)?n-6ND+v*eDT^l3OGhS=8$_LW9fXRqiuBEBX& z_EcZ&Z{v|AN++4RI2K|0>kohZ>!&u6AU9ayi-`rm>dCn@D^7#}( zNHOR<$Dqs}jeDj_*fz+swQ+zv8I30yWYzX1$UI99m1Qh`#PcjB#u*>GEQ-a6VjlB4+Vq z;f{nT%8tog95rcpB){v&!w$tzY1Gs9qBts_+B#}9r6#{aL&DnJQapD`-YEN$jtW!u zV`p6R!5gx`D(C+nMR3y|Npd6x8aMrd9qkVwo3qzx6ws7ztc(a0=SGB^M}m715pL#* z=82VVW`Uv(tIBZq$m+R>l^GFP)M>f^B#JjpcYXD7`5}(>x_X|~{us@?Z`MhuM6UhI zQiiqu?8zBC14<=z7Q2PW+r?0&whVy3_a0?VqMUO~nO2IpZ=PK=Q+W`Ef)~{W!pLaZ zey6IGlce08lyP~61}|Y;QK}r$zu_{mVTa}I)7m_B#z@VZvKoS4ETC?}ufRO#^R+e5 z#iFYeF#HT(EWdh!jooc39|9Oo_x5Kc*=du1v%2GI9RoF!?qcV>6U7}yK(dIiz~b_~ zVe%=FsTTeJ4$Q@FcO8nR4J?WRez`Y=`Q=4DHsR&J6$;Hy7KMHRel)M2#iG4D^At_t z5Jkp8_a=x)mKK9mn6;jQbQ|$CEWnm(K@>SC?2?AT@D0Z{IcVIJ1oa7GC+Vws(qnE?2Opy{N z%{d3g0tnFEAvzS#NQ;#=sE+UB8Z`FSn3`JecMG%~;lv3gP1(a!L#CAXw7=Oe&_MKo zEEAK++k%(}3qvFhIBFE?e zE!$`1;&-~N{x(p?P%KhwHWyrANmDluUCxpdX$~u6*q6@V zyZvpCj80aeM2xcXia0KWakLT|+=_5QQ9&Of%`7BBGVixpB#|c`Vi;@;i}fOWoEnv|@w5)sQsSs@@I;l>7EJ-4mP zyP|`U>$b+)QyK?hyKkmj zo(dpw355YeC&PWp2`h{RZ7g-|>PKIkm&+x`0x!zg05$P6m(msv%s&vd&RZguK9-RB zzp#VLWw3DiU#YFu8+6s~g2Kf$6%a5xiNuyo8f2QLq{Kb3CcaJH>M8E(*1%@%z|>&M zCe-J}l4^15%~v@6>faYXJEL;#N4L95mc67d=QU$_Wgm$CBq?)TlDGKFfRM9+i1)q0 zEvRVP=Zu-tK-95hp-#vV2YIE0gw8sq3SAKRX<=T|MMXUjAyEbs1V|uc`+dXWi3iR3 z7%N`IV7^##H9pU%POtDK`eYwIj z)NB6MTvM~DTLxD^`7Ci&G+HFV-&OWQ@yt|UE%>pHJ_(5oUQ&>NU7j9>`%#2b$IiDa z1QUrs?YP70hSfR8)X>YaUpg9$Pd(mfi8Yt>N}rn3)4I40WRM#Yl{|4y+R>P0?s6XU zG|%(n;SYa(_wmyYpMLnm|Nn75oRm~ODY0TlSIpRAI`abwIwW%gP$Vuvo=RKbcH@7% zD2b4F=aUXH=ONF7O3I!XzoE`spAv~k!j$>XX2*3W#uncxTE`pl{mo=nBpeuIO~8WA zdE@HvmKYr`DdqeoKcqa#m~cfcu7w?dyNF3cM|n`W@A3mDFLO>h=R9oZyq)zh>7<>e zVH)!E=V`kghgrJMhYsB@Qid=1GPUb+>-^8YEP(vwuKAt61_X#~y3!#;@o^y&Ec>GAmZ z>D}Rf{_y+9$2m{wJ`G8_l*MSu_r!sTkUS1RtE`lB$}1&Cz$ji>v#LnWU5+}9Sx9rv z!-r${MwlYAN68cUm7k)0Pl=K`uS#B0Hsq2#TJdh+7OXy;xlsegovjNWQwZ)S>A3uJ4cYJ&|KW52!&Z_$)ge0;> zE=2)|CnDI2NM!3v?5pSgeBBt}b(u@XA{hH3t)5^57#Liz@*b2PB(4||eczdeh0))= zNV-iDku451Scj;lVD<^6m)N039mHrhZnM5VYu4zfYy&|R+~1r%gCd!i|M@G*p?Pvv z!IL#7v-5(Ik-Kwn0T=(yKN$NLNbCsIO8Cij{#7>hA_tOw%5Q&~U?fRfK$GZuGtabdd>2`R9cB~GsTzN6t*l4Rjj%t>U_G~}!jIk|vL2)JUgj_%#$yn0~KZJKos@H#Te+M%n0 zt*X`9;DrsB>ZG?c)fd#4jaP}?M&}WPo}Jra~9z%d`*seI~?cvFidZzfn2*6`#1LK7+g54yQimTw0dS3 zUf#4GoEzV|&a%Y-9HSIcuc7o3%3q&jKGLJM~7E#%;e|XO){sGl3y^A#GJFt(_w!6m_$gi6Y12eazYLevA~;Ly=S4B}h*wYkv@qr&z^xe5f9sL<`#kHYY3ww0!}u^w zd7CHT4uKIT$zmg=#C(f9^FF7bWu@Q*|P>Qk|B__UOw1UDG81M5i z4IkCt8z1{NIgo}Z5;+5ac`fp)S1|@fJM!ppSpe-uCrwc{gzP`%$En*7^YkEj$RsQB zllW27$P|ZRo*(D=^IzxTaL7rsmngI+b22|Z&WCw^c%0{9_GuytvG0BBTCn6u5%6uN+5B`^s2pe2!j%N{Yt0gk;%r zwD|kA!jsC%(!Hi|gH(Y{Y+hPuUR1TCeJGfnfguL?^^ZO*h$DkCBED6@)W7bV`>Pc$ z*X6>|1;^JY;u4|ZB%@8FT^`bY`Zdd|{%te*oNq@a6hY)JYt9|Xhoi5Iam+kI?m(GgdeTa!MPbg#s0wbbPW_{Cr5SIH<=A1Fz`%wl- zs{5tzMPJoxBD3kiF{N9N&b9kZdu@VRVtU2&Dv#Lrzj5|=$oAqTl*Lci=B&B!*9kaq zb1zpYGUQoY7$uImv&!t#$Z#dcwz|id;{LpB!N){y4uWoEjPaFtAz>j7#A-H zRU1?^m-eXyY`{^MJ?At1b8hH4iR zb!io+If-OK%;_#=PzMbd$`M8}9Icu77#w^`-p3^j| z&cw;5C~}i{P!ZO>U?WGR4_PQALJaNMx?Sg%N^`n?p7_<;o70jKtj#%lw8$o=>sAYY zLti$G*=L(Xya+iiUn40xZ(OOBE z)<}s7K@0~E#2Ehp6Ckd#ET z+ybvQzHOxn0j(<~+|!uWcVL}vk*4hih>WGDkW#xK*TiF1tiR!r)vu=5Fz8R7zSZ$#H4%?Hcw^{yG9`YS= z))W{cfs@}ALu}cg@sj@SY2qTHyraaD^#iw!9lU2Hnl04_+`3_xU zpd=kV#|$8rGw_);KCrw%ZH+;xLTHS4P+r0qUGEW>=nw-`L4+h~mfvfZK z<^oDKTrh_Hx^U<@rYQbS)%$8@=}&olSK$f)F_KXd$GiGaJ)BWrkYC#RMHfAxcuEgLcjD-_ zafRb@^m!Cjk(Av2taet3gBw-Yd*&3kDen_!q9_tp_SPbfI}ypp)3kjv zP1Dd#6RRY4ZG4XmMPD&TpMgLZTQl(l+cE4z^z2&F6aF;WXYOS z-s&`H{#OaPnw&Qa+XqezyS8@41vYeAgiTp{`}ukG7r>3YhPrg^1#W&b7VeAkRIYP8 z#349fF4t|@b_T5Dadg-)uNVdK3a2D?BQ-5}>tG__aO{BU+5zgJz z#6&7GO)t`bNF?YiaHdSmao_tXNheRObC+0Lnv2%-Ew;9C9b#O0@|oESRqqq;1zlu^45#cTf>A$4C-1DTrhM-ACcb+c+m~M2HO;@5q+*eO&jth*za4 zoRCY=fhu!xg9%$d?)Rce{QXwbm=jpNx-nPc*|-wd2?(Fjd2#8UnzS=M1R_EFCh0*0 z$|p-^W%1Yh)ItrW$i>}#-vOxvS92$v~cUY%R-Ac>#siG0+s0(1zuOx z`gw9i1z+m(v44f>>7ojeU!X&5R4QBVHZL#bFoO5f*(cSBHxcV}CyY{#+jAdQcrp4;AYRq|Q z*0zDA>mdr5p~ZSrV<@3h0TLjaK8$j*z>AezgVcfb{ZF1({NrcUoX3Yl|ErRpZ|;LT zD^K-ha<^f8`s5tZviotXuAzmA``^WMDoeX?=UgtL<9}uC4NU;FAE9Gn`twbKzGv4Y zyL5l=z@Ze$v9i07$eJI3@-Qpd7;s92W(w{ZBUb4Aqp4 zv2S-lz5$fHHBAk4$k6WH=%0PS#9j}7DL1AWg?AHR7c5O zH*60dkDul|&C@vL*?%0S)s&KUIVa6IjVwg3oe%Q0^OwfeLE^P5T!R&~FGBgTO>S{j z)^=0&>=B##qK7Z>ynPy5vo3k!<(CV_-mtOBI6l26bCRT?JvZxh zCTDG%u7~GeJ6B&eu0MO}N=s1sOSpUKoUd@Ac$)x)MFcsBL-Yth&WoseAs+2Rz#;Ll z_tT3!OheW==Lf_SgsYV!EMx?kI3*G9Y(xhbI+@ZanuT?#@sjexMEePUj5 zx^)OBWbPbW+Y{QWFQ&GH=`DC~1OM@ASMsKHw7Td*=U2Td>6E?ZoR?2(cUt&=tlgQR zK&5;08~D8LpDu2y*02ee)$=oNEE`Dbql{7JX`bg}^el`?l7*sPnucn0?_2bIF!lo! zDt&nk5*=cU(E1jn&hcxOz&=LXBRUF}41K?MuCdQ&A1=k8ZK^ZKoGR_#sd2$3iV zYXdr9V~krkdE4R{`-lc_ui@x+1zaH*uHEzVwY8@Wp;)S~ltY#Ufh-&c_^5g<0y zC}O%#jP7XjUkDQ>N=On>dg%=TBsa8QvjDAPkAx@^MJS~)rz2r6z29TW#so0xP)Jwe zBZn@s30Mz|cnrod6T|w(i!4kaxBE``1hE@(T4ff&drBhUo#^~Hxwe78ca{i|+kv-{ z>(erXi%lDhxbnhaeEmEwPwDEb0-lg{$xsEtzWF~YUKrecj~=@mzrTq%O-V(4msL{E zls}`e^-@RaI>n7+|>k@27o}S|U|Gn;g#zgFU zhYk%>VPc@PTp<&R-zQAk%{k?iq!Qdn_FWbMP9nGmIw_#B3m3SEJ-s!%N@{w7B!XdG zv5T^X3V?ZB-v%vQoS`d_zgSFSuK5=}Jgb+LrY?9g_4n)<^{MW0s`U z3wam`ar_@c7JZ?gwh{KPjcc@8;nJ}qOVI{z)>k3l=R7}XnzGNG4tdzhaP0Ph|6a+a zAPG@~lCjP@ZYM*nT_)E&sU~D%V}+dX708qk6UfTGimP|tSz+6kJ(Eh>_h@k^Kzy@j zbR@jGG+>EJb~x@(l+wSDNKqoLo67Xe(Q81%xDp`8HIu#08!%#+SLT-kvBi=xCWMnG za^(vSSjXt@F(pY%Hs$Mb&DMp;7AiE^X?WEmKqbj022_OL@a-HQq_2VnX5ns(!{~=OZx6$EiaE_gPAOu_ zNKTTF;;j(X77V=Jhx&wQwE|%qcye!D;?y9MZj~fumK{aYSd-iozUDo$_M;c)If@YZ zH0CsEz7aLZUIm$nlaiP04CHY>j`KnPoO6tlMMWJI3_ixud*v(M%6l`stwg$`fTSZCag?iD!XB|l?clV@> zCJEvVDltjJz=L5dgF>1!=2d`h+Keff!+Gd{AQCwd4?`s%gY-M>r2!3cJuU{ z5;guyyZiQe?@w`Ao|+;Uh&VEF0KCP>*kE@<3@iMjm35TJc3Am#<%)HIW=Ck<`X-1< zT%qn01#Z|EJoNa{^lkM*&`qj)3J%QAk!q^Ahy}J_2Z!tkfi03EiEDPHB^&P+g+6&K zs*jbk5=DxBZOrvH}Y*9*O)gK*wy}MKLy3d4FYY?sB25QzQl9O~w zDXZ!{O(}Od&oZS>JL#g0qKWCQXFf^NeLb?HHBz|4SowlWo3849Pu@cwSp`s0Hn)+H zO=M^df+xcO`#WI*x3X>R*woB>rGcsV3LhM0rz=i!+x!pL1V*$lIWQ|pIdPmtXj~np zrnqhki~n?8SFQ94;bWvDD)SX4O@gC!MN|L$+I~q?lx+Ovc{!{-v!~i1C{Cck8vqa0}}THfDWU zgzBtaM{{Ypm1Tn?b9c&Njd=Ig39yMPmuXi{ZAN)%B~ zBHCs9Qsp-n#t{eicTblLws8F3pp^s3yEtf`kB4{rp0N-6*9P2Tl25~ z&y6?_KG2=*c@)uEUkxHEK81ZGS2|_nWgHnXMHd5<$q^fP|E*g$MfeH}XL?+STe}#8 z56@079gU{Bt>WUg{bRf2J1|KyJ0uAlEIf3jrPzs>s1E#}2z_fQnf~D5=)}NHWqA`Q zF_MJkc_3m7SomQ4cHN+61n(S)aR9^?iju#ti^?2K`NqRDN)&3tEw1~-1(fwDdDCp% zrKw(r62XbEPom?WBO2TftkK#O1+YOI7|BnnV!MtdjfzpMjN>FC$~W*!TA_26;M<kDyW%J9Bq?+>bv!!hS+c>M4odYk(9ev;I6 zd0H=fktvPTFlx-oxyAi%&qauxka&qnI9OuCfF221c*P_MYpJl^tD&S*-clDeiHMh7 z&x;c$_GaHpcKSAaf4=ekC0Ause9G;@#(pnZhbd`h9|6s^vqfz+Er&@+raNYef+RFd zi6VN6j4D^q8$W_y0lORgeog&d8_tTU21oSc9;=JJbvA?*WQ~G=cj$;Z+dF=2i;qF- zCpWfS!~m&q;IVOT5knPtA$@_vhCm_^LZIk^saFAgS%wF!ojpW3L=+hAHWcQTeo^<1LUD@XECY!MiE3mwNCp)V$~vX3=9_tbI3DJ1)U19^ zajU`l(O;V%5d}(b1sy3R9R|&urX8;C4M-{o^>>8g=zk2YLcz^dxuS7}p78SehZY|We?!58^mJZKe?kFe5 zn5<7L&4lRZS_9=9rVj z+kiw)?$@Vm4z+nhQqpL7@#L~yZ20>g00MIciA*FKNhz;J9Y)15Ma_Baa_&~6L}}5Q zHR6S>(Ad&#R>_pMAWzCkMWoM~^BW#U5lQlp9G>JnZYgXisnS+H6|XvnNr`#>E@x=DXR zp^2P|fO9~S_QJ`rASx|Q9{}N>YFEW3^kqL^yASnxadtznz?#-I6nI&JH3^*&GjQ!Z z-4G@dh^=#m9WNt#G~s=V311KmSlO^gRSB*R%JxR!G$Doo&Haf)%* zWBFR0q2TJh6UyFihjEoea~|@X4#UTJe)ahefBoybPw(D5{_yze;~(ZB&*MDghdkty zDm7itj_kA7{6HJxb9SUR=prKmq9)DG24sv$C5Vu$L^Oy1?sm*g$-rd+&cPVC>6jCL zEsFY(=NGf(jviPgg7bzQq7kCIRE@}H-7fPg<$QSc`1o-?&hwB(9wdCwp5P5UU9h44 z^hZF62uxydgekJyt~(ouN-F@Vj&<+?os;wdndFt9hv6{IhiQ5oGT|=Wn*uU*DQg$d zC(Y9+UUW>|Rv!}gLN;zOPq$ej_Y_eRuaHnAgzS|Nz{nEtezw8au3z>q-17Br5WwGs z)#XXx!yz5UZrW!3i{4Wf5z4osBT6EPHVKAEu6Kcalu;zAK}A%+-Fv4bY1E7e$dmH2 zfxYlmRbw^AW`$J$w*6CGv4l_>HVzHo=Dp0v+wFFqv;O>)9k6{HN}DE%=;x>(5Q5p- z)%VXUpK371*y87%l3-TbTUP%ID=P#c^KoNpz{pN#={Mdolz)a;wsCW2xezQ-St zVYeF$Wl1A&7C`ScGqL4cb|Xw{LddI zO~Z8D9)@9<9uAKmrui_bCbeSw8{3wYTr;zM`t`5AyC&?4b%|J)P?&Ok7dTn5U1C}m z&wueV{NnXfXZwzs^TBtYB(rYkX`YXVoTrph_N>YbM3W748^rchoS`uep7&8GVS`To zOi276g~u&p6E!%z+EbSQm)UEV#;keLBwkotfgGV>qjR2zX_%*n&+q=9|M_1&e}4Dr z51&4NIvhXFc^D4UFw8l#k0~QeH%X|t2*2#VW(+hc>U#!rG7Z=%i;BnmK_3JmZA`oc zjO?X%IE-1Mag-1R1u+4VWU;~n$9v*Fav_HYy%e1N?(AFX zfow6{V7gO8l0J>18RseIltq=r5}}~0%CQQ4@)VtQsk*mu^K9BD&7ygmhw1hx-7N~e z$bV7K8ClseiO|j-$CNSWoThwuoF5mS2HUe@^Pxm3(ZLWm`E?UZ3j1>c_rZVxE8tJGr5y^|ZoG~Kf(6XU}y(^02Er!lkV z9Wgj8pvT5MU#){hhrMG$eD#5UqpKF&a;4m_(YUw~=08PK^8=0<=TGe)?4MN5=@aBxxj35nEnY z?%H*H*21a2#PDA*H){c~VBoBGg=?aD7L5CIdxp5OJgWtWmZAM+xPBeqQ*9R)6lS7m zF^I&RB%vgi$+tYF`{ZwP7LDqhpj2Fr6394XqbPxv_#kZr>{-9i20!kA ze_utNO^aoOxFU=zL+29@`H3MnMFZ6$!OF}{D-QNr($fjV|4=RQ30xugpbeTco6c(w z#ue_j@c!u?uFR_dTDwMD^z-Q?^iSEZY;>dow(~7CR2Eyz0g;!imoWFqiFYGfc>B($|-UkK%_H((TZe8|$ z+qRO2&0a->WhuGeg9Ugm(SkYGHO7C$8dh;W#hEkKOru4%Uy<|uZ+$G5v!)KS61uRStS&9P ze(w!V$kG1XF;O2tnU+990^sPWQ?f~@0ZPx})p?lA5wWP~+*DI(BmttR*35ki${pi1 zx55q;EM?Dd_UG-xaoBJ#S@M|ntdcl)H%Dy;9Wrn9uzmOL_}8Ddr^9&v@acFuZSOyg z+i}#9I8tyH4Em=%rzGr!iQMfaTBPJe>fCSmAxk?TvoI$RYuqHy(giQa;jkT!?eR4Ha5|knAIIb8pZ*6&S*hP@tA31Z3QU9w;eWu5kC&6KA1=#d3=C)_iY~38J%VposowvEgYd zE%?~aUQSmXNb!B;36>3FKXBYd`lG4KIet&v6w~0Y9>c3uuJ~d$X|58zS@8tGMpe;_ zDghO)Is4}7Jg({zLhae@pt0^XR2KJ1nb5@^xkjTE0VFKrk{JmwDKYVl0wWV4h_i$Q zgjOAs-lWVxB7st$|7MeUGlW{1`{=kw;xik)IHLH9bP%23iG0S^lR1C?c zgr%+Gq;OMk4CM|i@mFl9^48tiP6>(YFpkF>IVa_unasxTthIs>9na?rn$N2{oyXY} z5jEd*byl_?9H3hor#gZ;uqA5I+nwP!F<=?c(BN2z!7FcR87n1X^jP2=Dwpu3adGEN zglmg+4Vn@#^L4KIkk?Z*SV4|uFf%rU=UA8K>qKN|=81rPc!k`osuh@EOt64H_=K!_ z(?c+pwN=VF1yxyHW6c3>8NlymNM{OJYH1e1Gu(weGAf5bRFfrQvd?!5TH~WDGyQ$E zd|uIuCwA(9iu3ojXxsvQ0D$xnc8OAG9Y*{8*EXQLHP=f|^TX=@jv$;PmP@c9V)VDn zTB2A_;iXTV4e?)yF)au~-$MGJVEi>SdJvaMLo$WIsFekvA!+zS${dre*tlZa_%B{z zg0JYw>a91PmWxQOMcWBQd+pII1*URN^LUsn*t_0(0IrvO6Tm<^4{Hj%x}++s(r^8% zb10??_Q`qt#Uq$;|MHGd378R+bm9op4P6^&sX^j_xjeI^ONS{4f_*#tZ^1;b(k&ek zPbTw6^F>!{gvmE{T6v6D&(eH`k7urXQtS+@uto?Ff!&0ugZakVhh!=2;ai!VCTVGaBt|7s9o}-zA`9CgJ z>vc3VbyK<0)tj|G`?)ohwbm3+y@(9{Im}kKzcr?;7u>dv?A^tBZeBJtyt4Fk+0u%^n=Vo?}PSW%5-SqKfssa7mLD5b$ug`@U9f5C52@9ggk0?cun|+v9K?SeKF!kaB3TV^rnK8_3~nlM>+U!;5*@ECFnv zMLr(uZF@X@df0Bq)926I!~A0U?W=wYzksQqYkCbi!fJ{D(fDFwu7W^K<*Ru02xj8e zZ5CthF21pkuGitw*UvrioDCl;6mX3#bP&lp^g_Uq2*5|NQ7FwR8g!4zxQodw7;tU3 z{Gdpxp;m2J6l_V?97^FkP1Gc)?HO~G5p8e~vESV}WF0i;ylJ;NkK6Ix_H_E`^Xc=S zKfil;__v=F??aruFadDu=F_ zLxIKzKx~v5L#S(Iye?7#5C6h`36}sVv!M>${P7YQc2I)e0%hdPQYYqCGxd*yb?m=@`V%hf7Iui3Ic^Uk-D^U&tL9rB@N z3Nh;?5)UMzsm{xqz(?|cl_8XzL6ip+W}kv&ijEjM>XIg&Ev`+udp)(4)#-9+sF3Qr zD~|xt7X0W1nU#h2G)ciNmLU1{F^{6U#{k?fSMc{zwLGVWOMu^+K9meCh*=|4G|M0{8Pd`08eEz4;51-q=9BZ+#kB$KE z)&MASomi|eS|narzR^;JV@k@zab*DzY=G3i>4YhTP-8qu%Z!}c{5MG@w>l8H6 z2;~e`O@r^3WT5HuwTo=0eh#)CHZ`)=ZT=hOTno3k&p98C55w`W`7~~NW!75vnYFzc zx!k{jFwY5IZ^RpE{u^LG@&YooaD|gU-tn`y7r*%G(op#|^t(CW!CTIkRkDM)?v{+V zp;%!Tr70d+i=}C9nT#!rR@%HVY<}jV2WLz$k;V%xypqAn`aQPZ(|8j;NX#RDWUQI*wZKNePz_xs3;kWd~YV9VeG|y{-#n-bY zMK10NGmA?@JZfkN;P>a{tin4}viX?}m4mfU1g`K*IlhTHH-QQu0RwijV!OHqh!I#N zXX2chkK@=5!*)F0x8uk5_%O<+<8eErZV!n?mV8ZY$@wl3f?E&$Ox*GY9?@E zp$iZ%@ISn+ejZ*HZ{PnmJ?YG3_9__gSxc{}m=`#^vKsOF z5Iaq?J2t*y&F!p-;fsm6s-FM2$kaBU4LbSn;VUxg=OGKWc=H|rXR-1SYG;O|V_A-j*>W)zLkXV-L87|zaP2Y^^W zBm|_6y|q>Hnr^Oi6{V8Xr~4m%xIZ0FpH8Rk_H^7H$HTbQJhl)`g5F-${(@gF`8}&d z*VF!WpLCRzq?Z0BC2HH0+dOEy>2H`LfG6t_{wK2j>dElo`mHPMi$?@S)7PyOkBKiK zSRlsOac1n#<~U!nF?MEF*oD3L$y`+zg^zB24imrVHfe?PEBej4^5qv(I)5tWc?N{{ z#wCo))yjggchlV($=H{Rs_wonT|_^*T*5SD9MEHE5J@?(i_Ak9$DD3%kjBlYhyVKD zfBO9JaR2c6ho3&(pN`{kyVsF7Z5BlpB+Q{>`lf5Vv)HYqddUqeah2FC%w#Tx076NQ z2uuW=`6xwno!MEy6-+N{w-Z~SU&jyExAv~{rqqk2|JvAU{`hgib@1_Jim11 zUx0D5pZi~$)pPu`>CL&Vo{@uZb~)5jWNc-!;k zb3&*9yk71%(ma`0-kYb)EC+r-gTmzT!fT?UJ;t6qL> z17x@*UrID$YXD>Xq)GC#t=o)d3gatJ-eOUna-GytX-D$erJN=%I}xa zefJ&PQp%-Wn2CqkMF(*4;_B z;@h9y{xQEgFTVQnKb2j+uqzW^yu2~1slND@03`d;(9{r2=j#=|=x4>U_Ll3@@bNf4 zv|~Hu8$}utC9P4>xe6MO)=x#E@*syS&hwa0=`_u7s9LM80%5lUF1vz(w#3oxxFMEUtYjSaE zjaP`QyFmw3%>&n=WkHS|C@p7;s-742_WLOtw_5LCHqd>K4mkw8VIbt@z~X8i>z;}0 ztW@hT9EYK<8(^xBvabkzQXAuKz0}9&hQ7X1no$)CpzIQywZgUJtQiy&d=LvU?fNNM>~Ds^&J$8h$67Yg5xz887_;V9m9;&ifKrlqUQCI) z`M;1w$Ng?mdM|U6=KiuDQ?kYopd$fcA2N+3&Lu)fw5dAleAvx*zn7+XeEI9iulDl4 zfHCX;cquUdd4BfIRM|NUmZoNA<_6d0w5#pnW<5tw&0AVy_srDQHI$|&yH4PyfG)bX zz~GR9z_E6#WM^DcjxTTN)ikUq_$u7rfBJMfwg>4Fx2^VBgcy?Z=*dI;@{9KGr{;Dy zoyGa|o898~#oex|X5BAkdYL>-rQ8Q}iEF4jX2!-@Kt}c^8OvpT2)D%q3)2@SHFbSs zBhde8GNX^l_}F6yXQ#H`p0=Mqf4)C$kL~d^o{smY?e@?PIRpW?>Dy?X@ev|>fxuRs zff4~a%wwD1WNC*TcbSy|v0h5sx1207y<9{?+3$b=GdtEyz}7eFV&-O9Gc)Mzcas>> z1Zw}~yfD3nn8-ad^^+AeKcQcBhEOm zC?p{SUxLyUyYCT*BY&tdAMUCdMn<{GIgf4op&!PcgC!yW;D`djVkBpbH{s*vJFmQD&Q@U z2aDFEX*si4S__>m74&+&a_H#WNzXtYUM{fcHiX29{?xK1bqSIJSBQ)vgKGASYoN`I zC?jc_SHJ8FU&fLO)HJJZG0Z37VvUJBU0gi&NJKH|$kOg5b4i$)l!aN8S#qCP0vVdm z*>N3uVMLTDHI%+3#Ql%N))MwYc)N4Rv<#Ey;5k11vI`zpeo<9EqV;~_D$CJ(>#dE9 z<8t3K1(vM)ezB-y^tg0^Y>cZSTCz=XMg&3zN(4fsJrdyXVZgyLv#)Hk+;7$Tt121` zz*FCxUl?15rodZAc?A;E(2iNNbU{MiylMA`b{NO)(7ut=VI#_^7XcfXB>@tLXY`fEn|1WYb#$>Z01UCBB2bKw z5=<>yuCr3_1vRI7%tL$Jf7%{4+u<;@ZQUP5M-4-6+dN9yF%iY;d9}jWugFLD#0Ccz zW^OCD;xPcuVKYMf00;c@`rVF53F%?W4K- z&D`1w%^J;RZU_jLD{T8dXK6Q|w&SNC{`_zMcK^fY&woDtf1e*7e)>GHyM1dNQ5UU+ zX&ZZ4e%F}FMt@-~6e(g8t%Sx9IZM;&IoZD-{$p<`Mx41v{fl$geVRh_cGZ;L?si^- zbvLjCU?$40q6QZ1C`OCAa^9q1>^yh}tKv}K0tDa)5L0=nrXZ-B7Rp$G@xSMSF3vKs zvar@FoN><{{II*ba2AS{T`RY_)d-lCgarV+p0&V56LXQnnhy41wTQUdMD6P~ow40q$MwYy}&ULR+kK=g!z#J3V z*!0bcaFTtF&m+C?fykxcg_CM8`KYn96db^c$o0%%sYCz7h@FN0ePnCd?c1PvuS=oj z0+t>kpz8rGad5;$KA|B4%(YS-nUMSCz`Tr}+%(1O>+HP^0s~4OF!wx4F3+l&Wmi@+ zGM;PfjW_ed(79h$;Cv;I*JXF@JvIig@=@)41?Ga_f~USKN+0pYuYk_!AO6?=ZS&1z z`}{ItC)VH;=bJ#!9_8u!vDOF_%;*i6`4q3Piq1U0gvcO>5(_Ob#LIbEWyI!|g7-6k zaEpv7pe9F@J}`6LjycC=A`BTRG}Uo>!r99*fgh&dcn%yrr!hq!Wn!YBupwU|I6;m-=fal$ zxp}hc9j@1|^wT8(lZw8&m^BW}H@7|g>>P>Uj`^T@h^i!gU?16Gj5Nt} zqZF;dq6Qd*NqkKWfb+L5IaFILE-ctV+7$kkL1wqC6zlTTxP83MCQgQfFvwuojPfKmr83Sw`@CAbZP!W`S=kI8WdSpt81Y z!lOwMa>s!D#EDs$(kHZCvsik|-ni(Q2tx0piD_@;sY` zF@fnlbp?=%cs2Fs&pucN8HFUO_H$j#JzH zk2_$;0)fda54q!LJQ4s2LC4IhS)A-z#*CpEuo3#cYMR(gp)P5*3&t_{zu!EetC>#T z+N1#>!VLhhkCfDrg%*PK6oELP1{IZ8KDD}cUp!I$Y z(wEW-1&jo3n{y__7>Oh7ECG715g*-L{ldi`Co>P`MOrrTF0JOX*&>*diBVAMwv)bQ zW|4seTChQ#k2X3BOJ3d~IN+oR^zwCpxy@?O{K|fFYi?Kemv6%v)kG{%E|Fo`%65=( z82_R?)S^l2I^_)5W<(}cF+O=q#yMx^yJ^{clQvD`4C1YohCKL-B^0-A3TUI{6s4W_yaehqav6r3x*kF;S(NfWZL&(6vo_w+_l+Y)ZtzT(6dlf` zEYPd=L;(H%#~3(DgoY{innMc2!b4M|RZ9VqGD7E;HS=|o0t$68-w^?q0dS|phJkO8 zB@JWUstO6G4G^M`M_?(r?eehEF=vjHa4K-UY=t5d1?Op@rOHiCf|6B9^#gMq+S74+ zJpIkXpFjWg;dC0eW0sV&@6}fzrJ2ta?2&Nhc$IJHN;8IZZAFC(%^D-g=jVT zx!K=!rJ4KM*l1p1GbpBHX9*M6mO5~;W6L(GDMk5)V&{XjV0{0UkW4^AS+1X0H=QS%R;%mRVkfhZA^R!ZHnwSylbo%;`mKb8=clt( zTzE|00{-}ZVJ)ENR&zZJS%)qU%KbrXrv}+xdx)j<(&m9P-H5tCSbEeMp@?iq6B)WCb_F=EWVyJgjBf(sZTg6; zR2zcgJ)$E{5bkP-&sR7#(KfMRLuEi4!PAE(d5)+VC)XBh+5v!r)P4mquIFDi}bs;MbE&{P*HuGipJ9~*Y2!){)*l6 zs=RpmpDMA#t+D?0{rlN;1)Nw!^Dwl-cKhic$NOJd2iQcpNN|Z zqj|B4GJWyg#JDRschkx4QCPpFtZ@qB*UxC>cmDAV(A>3!T~jpIZisPjIsgK&&eobJ zaX<|LJO~LArn=6p4#d1%5~I|a6;hxDUObA-7Qk~d^KWU7+P1l`+x|G--=F^G{{GXa zpZ@Kyr{j1WbC$MEA#<>jwD-}@NjS9HXhJNn9DgJIU&o(@sAU!VuxLseEY4IzC>3VhfTC4}mz%$SLb<&8?m1kWZq!i?h zB4f~Gz0LdY(Ew?L39O#(IoXDQr7U=2- zL|MKLo%KCa;;uwedQEAn;vjIZ3N<0E2*MLsW0WVaE-cE*&7tcUX0tY2R8G=5{vAE@HY|iZLL}Nl4x+E4SRr89i-^ zfSi~0Aj7zAhfk-6)9JVwS=B8yk7LI<3FVZt=+KTTxjk&Q+s~hWxc~HU|8P3pAGh0K zJZ#%ux-4QSSmWc|mRMWqY3zLr9sm~LZQ{zZVVYnKwFE|19J=&QX_JByPHhvN82nSX zVX75ak^9T=o-`d&42^ZG?=sB3{o|E?p1!K9=U4D-?u+!Tpv$6tZac)gL;&nU5WN9v zsrTp}uS_qV5_8{N-QCd z+lSNr>HgSmm~-FV4n)11-SXM(#R?YAh6T=+ z_3dEJZ|5@~-F#_mZ{6D-vR_?9p#;h}a1J-wjv1ANd_A;zct3=&Vlg)3!opm$wQ7}O zaRZ^Mzy_&qLlY{K9WoiQR87^uO9;P!y#u>mZ5GXw=Huwa<4Q9mqe>upe_tdj6_|pl$rU44^sX` zm?bewu9uR6B1aEBaNKq^kkzn6#jYM02)c#@ivVQfw3^P)|NikjC$-nVILrxmofCaw z<9AB#RyBuSveqnp9tR#|9D5`|3jn<`sbgY>KP29252UQD!LcW{FMSZ?nWDzraUFE1 zGi#P!va~F1KWxTv+zxG<$HV22|^CH186BF--^n9~4gAm&>(Z&bWPm#;@Axk@C=r}PK@uHZ{jQ>7Hm{y@)I{1S(Z|KgO8oW==XJ+p= z7*IwI*de@wZLZs)-hLW3Lpu&_4u|1JB#X9f&UGF%<&+30y}6OX8yRp|&ts#O0NgjT zvv0plD@89~P3oK(kMD+8B7GPy&rjI1}TWJ9MZgM}5XRuOLL z&RRE2!ZQ9P8Z5m<9LXU)l!_A6J%ADqlRBPG^4FaG3r(H=%E#`jeMukEW2q zs+lz#4~C*9(uTAK$H)*Zfwjt*|1tl_#QQyNa#r{teN(e8qz?iMQ`nU)s&zASYbT<{ zPt5SmbUIRzE$ltDghS7RgmH6xIBiekyJ2XLo9#G^L)OgH5LmXj@Svsh5Va_2 zQ6rI$5~vQ$Z{D!#e(19%&U=_SHOM`P2Q=#a)F-n8gAOfm;ry-tV)^9LZ=N2i8Bv4QJf2>}xl!+@e zzV=vH?-(&LE|D>3&7@hmO+?n(X(Y0q(3oGt(P7-(+9g|>d>;&u5-fGe-3Am%k(oP6 zLLpdym{!rR8VJtXe_T)B`Tf)`+{zPD2CAmZBAB^DbhiX8Y*0fW>@*KxXh}`a;v{Kk z2^WE|vK~oU!|ygCsnwp7GJRmwoZFnwXz}~XK|@dNvsren{1&4A_`aBV3kdTkX;I%+ zcsp0Qs#d<9*|&2GbFj;)P191p1D@MO;*u!$`XPBi0cA%#a6XJ%;SXp90f{U!kX4w* zS;Q6Lh5`W~)-2)K5@tmKy988DE*7j{Rsj+bh!XMth5J_9?#>D$Yj^2w>IP-5!G*@X zsK8R9=zOTKuuPCTYmo(Owf|M+KHp@msRShrVP)|-wt~onowoyAy7d(8w5gzg_+m*- za)o`I_{npaEfWQAz#1y&)z=%GrSmksDDwkUu2J94sZS`?l3VkGR;OCryq3d;w;X zOawcRJ~nTljf~2Rr3f!`jmmvzNzLq9Eg394Ro*5|V7{L2&(Z9+QJj9gywRy2-5A2@2a%Y_*fjC@5`ig(UOX zwRMIRY>ET|DT&emwJ<`Ef!VaW(Vd%DETz(3zFB?i#MhKyZ>dB<+LV$Z_a-7*d}#48x(6H>?D($4uv|Z?W)cKKnMD#V=n)3l)Fm z&!4BzlAle}@UQkf`I!8Rvu;8Qe2hCkdVj->y@BP+8;eJD}wEr(qzxdh2a`CEiei@O`?kLj2gasJ3-cR{e zUReAs{OB3bsb9?celM99d{QnfeO?w>6bs%W`iuu~M ztgD&cwMg))y)!Gbz^hpq84(FwZ^pe<=UuMOBf;EF5peM1g}qjS)SA)V-z+{yg_I?jScR1 zHuK8xwc@Jg_YpUiTY%9IoHbxA>Acl8fC;yVjdmoq$*iT102yIUh#E!!311-YZIDPv zo&*RnVL*y;Gx~Rs0uxA?5N+KUR4}uBQ!el#E0iWv#g28vh|3jD#BmJdWD|LR*~d{v z0KBY~0}FP9KxhFZzF63+g$f_QbmS0Gza`%C0N5(f48TCBSEzMmviNOhP0-&9k)R$t zkhbh%D5gAWXN|NS&x=AS0ouecvjgth7 zJx318$X(EPFd=jvI%BR+^K+~6HeXz$`C$j4vE_ACoo#@3U=5?TpfufQit~ead*}!P z09TcwnJ`K76bfQnmUbep&ildMsLr91tev?)(llajq9h-(SThn7EX_>LYK$m@te8m!W17nyF6!j4-)WbQ%(K=-y%Py=C%v_ow9A@%ci z-fjB4HR%BHO`0Kn@VA zqB<=tI#sB9U2%RaU}u{Kqbf8MxxW5~eqsJXKcQEA{r8ZnN_Pl`O(usEx{eM_0x96Ww}^uq=aP#vrwjN3AyGpp+yMYY>Fk(h8QBW4DCt42U#jm#?Gt zAS1^($D4lY_n(i)!^!PxS2?c28E75d3M)-|yj$oFDkR05Qr>s={(J!Iz3xivo@r3I zxh#Mb(VceIQE;}({WWwZ%km4&oagq#dFIX@n&ls?CGb!fl7v$qg@sUJqP0s5nixD7 zc0>kg+(k*kt!CE{|1szW9D|UH~s|Gi#fb#k?@Z?0}?GHIjB!6%eY$d2?ZJnGJTq z<=^RxOZH0yBx7?`t{g#QFc5n$|70`;%|m%I_Q}ODMn_--+K`vT`%eQ-%po>RC4C@z zUkuBus|LuNU0VfJ{>^HU!xOl^*JKHTC`2Y06aamv1uOKM=L^iY)#;zg$Gl~xd+y;8Y}${1ya4RtFE7no@U`FZf6MDOjhOBKC=yZ28F=N=wc z*YZqzrGvcSb{RmS&K_k#(!x*mdG>f7bQ>cU)T!^-nL=<8CCY#XJu8^Id9 zU^W77=Q)`h4u5bp$>jPOv!!mr1RAyCSK@yK;rz+c$Hgsy;!2+>9XD6a#dBOOpX(>e zYPJXf5zGrcE)2xqLyEv=w+gx+Ibk2yv1g7c&JR=Sr^EIz&HX&L(_!fQ*iW3~ZKBT* z1FlJROnUTMFKSexmRe9zNos|K;tB%UOcknD9;h_X)!C&v{Z4#Y8nDKGdsVcT0%T~6 zsZrR_DfnF9o0IFyP7_?4pK*B>qp&p^@4YTm;UNK8=YFH%u6$&cXvtuR5iN{skUC9n zb_rKPNFEq$Flg09LnUmQVX-Lf4E)$iZz3aNv4k#=Hzv0PlYi?6WzDrLz1A23MCp&W z)Rh_4`A_p7`|Ph66QUc<;=_t)GorXywtVRXNT37b030A#ggk}7 zit513FC!mSSUkPNYt^NEqcX!$fdF&JDRRV~r#?+Q5D6M)_68BURCh1YUs7iq`Y#Q9%_%vY;=U5|!ackFC6w>2ummDW%vVeQWKTh^ExV(Cn{Y`?y#b8tgSZ z)d;#=nEPA88sZ9&I|5G9M>dw-cbFQW_&auxHQn8+(%pbmGOqQC3{gpd{?cB(wEYxQ zoYJ4QB6F1ZHl@Rq$gdbwBo)s=Yq6QA5(9WzCVgot3kt3wqNE8Wij<;3;CtlPOyCp~ z09shpk-UmT5zq__t&4K+PP(!o%?+JJSni|`L9>fdQrpf^CJ8Zo8vA{k67%tM-*4ys z(D#y^3Yw$|b7%IP9LV}roaZQaD zAIji0w%(%BAG)SPjHOXJvsw+>8iN+_MbT9P)?1c`FQ%uxikWr?gKaATi<2?7< zY2Wv48n>8kIHfVBB>g0*6)zTG;MQ6k;9F)~4&R;J{mgsj4qqfRvqZ8ewM>DdL?(_R z;lD(_r$`8%1L7SN%|a{54dkjDNSd>y=T}um6h|_~*UT;2c*jg(tN9ZGG9w}LK)fN! zjL``u_?`lwc+VPu8H6z&_Ac(y*diMOj@o#VG+=6Z=O4Z$oFi4kV_q3Z{)KArZs{Jo!fv15RKX{jg-1u2Ko-0^R>U4-e`5E zbqT%{V-Q-XU3|$=IHJTjC26DgU?`5W_fV-Cz?8RVC-I`INUjl4m;LOxaSDdLN+_d4 z6Bx%&gdf94Y}1@3N|A{X$`(Pu;0}|QWpLmX6hsJy+mOWTunA=J7TkoD#{mp`|IEDc z$-}9(T=1)xom7?cL)lbICjc+b&3Nzc>O#IhJ-3PqH9`kbDByRHw6%A?tLh5CKdvhC z;Ul06?z^J4itI9v0B5SHLoLY6@`ur}s@W{)CcxIdQrJ4u%p7?`c?$(pXi)nR8COnu z1Q>zD8g3oSG>^?eSe;BxsAG<;%+n-k>g#?U z=fll(h|FP3q8~NxX|JlmAGe2h z`{S`cjFKev)5vI$Vx&mO!H)J9V|uRGhqG|1fsIaH#rL+tpN2D|AO}!vhl~g?KYPl> zGkyQNAA!}X87^P__&@!|zB+RkL-*Jq=b}TZ7q7k+5@_e9yV}q)X=G637rNDUW+qW zSpNaUo*5;ij0Ksz7FbaqnBk6G4?Ve0Mj7GKt3e`j+JMpETTRdojLKNAt0L1Ho&n|e zpU4{U4(&pD{hXTsjHFGeZuC-z56XC3gM~z33p0-rK~kH_AK6#Wf$y5D zyusAzVH;_mQPe9Z97aECBHu;;4L;&Em=IRR<^VR3&KYbCvCOfwU2QLNwI*U<9Q1Oj zZCgh3yudN`G?au4sLPm6#vArY+Nov1ZEOQFa2kn4LSTS^^e>gZv-e9)*RJE`FHPZ} zt7k4pEL3wxrPt3mYAYfftyi%{cKOrIu6XL69*gA+4I(f9-)HFh#A)OaS?a{qI#{2( z4zyJoYDH8mhmSZo5GIZi*6 zil>VH>Hn#|X^^cRw$)k4VkyIeYmN(ww5?lw@ zuLEA4FFVhf(pIdcbMuEg73-q;i9RnDq!n92?yi~2C-JY89)_nSSoLbWygL2o55?6P z|JW6)YY&ZCj)G7{VFz#~NF!N8M#y&WtUoAY^BQtbR*woimbg$?U?Nb2U@xH3+S=Gu zi)e}qA0*@s;3a*}_MMPG;z%qhGN&k0Kc%fC>0^vT!u$GUK1}m*n)f%yhj)M49zTDc zVw$^I(ugH`w86c%^nvb62%TJCSRzI)Yln_ok$p^DvPJ;30R)T(iG~zZA8jW2ws>|R zyNqPKB3m{#3^CKJ&<5Wo^5E`*@fHEYi@s5l4Z+Eo&{RfV+&M=Rc81%D$g0Q0@^mGhrgwwS{bd$o6xaFB=$jT&~b#s zuQ4)1pnMn*FxX(LA7jn&2ho8VCT$cZ2TNX@QD zpksWD#v;-EOQ8EZql85k-`R@%Sve%{hHAxe3>q!%&_E}eDu49FzM>~j*CsDQ<2qGX zG+;I8r63Uty=96LF+m?0i6zFUoyM1R3GfTR0L;k|hR}-D0o=e3Rd;p`FD&NYzP~)# ztz#NELP^>kT+as44`k0@iHFv^=(5d^{y7HwI+ilNfY`O-$U zP#2`R$n35v9B$R=Oxgvh8}Gf<4aLr$<~F|So7bJH6b_xPa%IWJ&YIobDP9njTxNhW zGVe6X&P8cuH-DZEpXb9orPQ}++$ZEHQ@Tn0BsCHGQ2DaFc-mNH^1DLm&=UiFs_azQ zB741DXbSE+S1Lg~&5I12ZU!~lpL>)rKokIU@B%v*9R*s4*8ndGAO!$}%jcOZkqEJ+ zVB&S~dyYc*~8K$2aub_zEb!IbIS2MO$0}6r!3q-!1 zBu(4>_Tls4cdnQKLh!R?;!crnf+VxU1xQEriYSa zJ4TsgJ0FiX+qqAvKaMGmF|csmaZGUwlQe`@tm#%KUp{|5JRG;P?0eX^i5b~X5x{HB zK~?ljzdzUae#3o?JS;&{Wa8jZKwJ1%ELoTkbbiHVgSILRX?|+E`(okLtj+eUGA2mK z)JEBE2)+WX63va<_(~by7zH`RKq1!gQJ~bMJ!%Ucdtk*B5HE_j$j^oyDR00G0&(}q zEL1yNS1^EaldW>7oW9hZ&+zQ-s=|@!I^P_s?4arV>1&fOxM5$YypX_Go%R9s#G!g? zK>?ZMf=kQ{Q6jZCuJm8R>5Hbax%R98j4sh|aGcURPB9+lhwc3C-NVV_g;IoG8zy}W zEJVO066-$R%wym8)8RNDj=Pv5rhy|YfeO$iK3ghP{mWSmrT%5KmC*~Ly!&Z!Mh3I& z`cp=Rj?&-A828)x%dh8vF?5e{7vomaKDI&1ULrXH=F~dzdb6=!XY`CKYr#VDQX&U| zdclAF7w+~CiZiUd)C66ySGif%Pgd*=z;g184Pk6~Klg{@@wh$q^OREj6y-CJwrit` z0H%BT#1JaT{6fqB1a~lm|MOYZ*jox#D+3{SB-1of~R_Mw9zHTQ+DWj8T=`*a4e{a+em~YICRUNBoFkU``Q)p(BuXnn&#M zU(0}NVj`*lFhHmDMF3QVpNazXTfrkEVvwM6$dvDP;Ykh<|861|x<%x`$Se}bZ~?oW zMG%Y>0SIK@qd4+si028c3x9w}C3~)cS&!|~96x;Y+pa;BIR={uF- z^_qQ02bL{RR@{^}BP^rJO2?$MRxE<-fYuy2_1u#MMiPlFqhV?JEyGGz+B^y2ucJY9 zQjjH#bOX(DlRfK7yS)AR$-n%(v+vC-SSqwLj8W$Z5*Z@IUuRaGX+LJTRDhz<+S<`W0a*jjI)~*y{o>>i8Al;uN$JR(P{t}o7XevZ z=`p8AmEFNEzaYZEU1vg9L2md0Jkzj4^UAZIZ;3V~(qnf1Rd&$08El_^D^YvU02%IuX^rF%kPUdUgf(HSjQs=n*1tt_QyLc}a8FI8 zn)?}^pQ4fL^y)H#EzB!^R;dglKrGb#2TG=3<+aM}=}$*%!H^SJK1tfR>&Hx6fWluk zYO?{)$q2pdKmy}noEZ$Kw=(t8$DP=T+c>818Nz=ti1^xo9&|l;2MvJ*t&KBbyg@`PYm??&?rq?dK4Fmvbgcvj<8}WcC3MQ8#MTzP7tCQbfHl9qOeqzhzmZPX# zAP_8?L0>@D5SaH`f3)`m5!qo6ko<)iEOuX zf1Ky-JdYMP{?X?;q8nnI69;DL2Oc?%!N{DZL!aX0Q3H8o*lFvLLXD>Cub!4ypMPW+ zln)mk??YBC(V?mh1(tN5WQ=utvpv51`mR52=R-e#?)&ZMX^IEzz`w-^_Z9}NmRf0> zDGP*n=OTZvfJ3N8!qmEyP$Na=RO2tefA5vb6pfjjDXG~^SDu9X^K1PIvRmWI&FbXS z+qRtvC!rzqQTWe*#xe5=YRIfs_M`BGk4XZ@z;UD^RD>GEJCVT=v_M*e)c|D4avxa$ z`Cp;p{8tR`Zg2@BfVWOpKhP(94jSNxw!wfxNRcgKXh8t<<|7bmumGg}`O{BVU>%Eq zsT`r}9`!Py)#1f8biV4)l&<+sTkx(NH0Qp=cBMj4RNm96_HE}Se%AI-1fxdOiYmpW9k!21eeA%{{6{* zP7*1xaOBxUIwe2}Y`a*kjaAm-?-l&Uekk3hc0j&UJ~X6jr8w){=PEeyoNjHo%;uN^=$N&H2 zaG0lg8nKTtrG%j}U{{{6Zu{(oR$gcJKQ;QjAAVvsnw5duC0ttohb6njX&a~Ql#ZW| zU$!@MKTeE^+r%6Xg2b;=n)`&)RPNjDO*A3=tEa5W>AJTsqAzYszo`vq>MVthHjkDA zM-|%dNLX4g8WLlcueK{W9{rc;d{dPa^kK^37 z<1~-+CrS;!r75N{CC1dw)A4xxd^{e~UeeSHk3v8mbeZ{YwFR~p-7nYtmsKdi^(cS$(|9(X5o~*G4Z#^UKAP@2uU>C&x&TCCQv(1SNX4WrSFsp%Z2`yjCh3(IecJ_YXl1cECU({C5q)@ z8R!Q7(%P3~iR>5140)33LG@jm@fR&V1U5ZgrU&D)btZ)4i`Dfa#TZNE+F zX1`A{p@f0@GI}$I!KM*+j_))f`(V_a)@LO+fc(urUm$!37BVy%tEaccQ}rV17nEN; zW~X%88k+k$$3da8f8(p$_-GYo$ivR`0m(F zH~qX@pN#8GxOWN+eP?elI1L^-#%Z^6^~mjz@Q#}e?6{=BL=X&h0ETHr3Vf(p)-fS7 z11S}9b&i~UPda=;ZE4Na*CncfROw%Gd{6&I8o*-}uUw+MSzdMji^@)6gPm3O?l&Iv z(?WZfD;;=;06HKua1Bcr2kKcX2sLoi6`51Ws?IrMgUMY4L!)~;@El2gSB4TUh$$S9 z_5@&Ga{(U|ho`v*vIv0)+prsXV3R2h7zwNZm&hc^b+-2x&VP?IjhqD5H7DW70KBGD zb+l31UqaliPyX#VANJG3ucd$YX`ZKaIHrDk=+oR`J*P2AzmI8@PtuOWWP*3TTP~?K zz0;b)isUt8U_y+M7=c>}Hv%xB2fRc`t&oYx04snH9?3YZwZBIfh?o#rtmwPQ@UB{MPkI0{72j`&eH@Ct0Rr+^9!gp#zwfrGpiNph2>)Jr>JN<8l8 z{_Q;V$9eni(9eg%aeF+xeRuNvRfHYb=9zXn$|j*hashRau@xp|aJ0kD>@aO|vs4{B z++^yPX7(o#jaXmvBKpRKsliP@Gv+>j)n#t3rcT=eF^-!ew(8!M`wMtAEh1{*Ir5W7Z0& z`*s*^pl!iP1Pvi_-)oL&W7I5Rf&m5vv?h1={mJhy0_^bry85Piaq8R<7lw2M2Rwzz zPq97T+&p}F*nXMjF(pcU8f63kN3SvUX}*d5JN}%uH{1F6_2G|)FZ0*q_VdHnFMmw) zcJ5Q(t{C*axwhvo8wP%)Mb1NRCtZTlpc^Qy(czIg^mcq4$tEA7cQN$++#kn&KhJ%i zZlv$WsSjyN5?RumXsk^u*c!0jFQ?8X3S9rfZvq&*s~W>AOE9L`&-=G&J0G`)FWbYz z_INmc{nPQwzCG^R@VW1&6i1GGH!zwhr8c?9sU1H(Y>(T|+tkk~wIfW7QYNMC0$Lt@ zlf60pCj3gL&FbX74gF3eIBw0l9sx8hmY(T)^gRhXhDX8RK8XZl2uU1Z+-T%WB*oM! z_bUukWh5~=;>b9_r9~PRS;KB=1sl=tF?hQMpz<+Tga~$GS6T%S*nrpeJ_33iJ_bzW ziA0085E(-ZMC|Y_E`yGIpQ7_*-r9ix>?dnoRR_|kS8qtG z^QS9Aa0fMq5Yr%p5tKpRZS>AuXxDwz9ie3&JJz;=GQ}I40@sLTD?v!k5KFQIS!k(^ zkp>L7;x@cK`F+cL4}=0`v*yt*mR`XdwoP23oIgLq;{RKAxA5uP^3|E~Ou>t{Xy^fLeu1AqU@zUzJ{lv`RW2+Usd+B*f4AQAC=oaTO>(%;Yh zKJBKRID}d|oMs*G*Z^E8ukOM5(*n>}U;#ALZw8y)xh1&nBWyaZ3=$G*PbI%utDoik zziI2$UvRA4nT917PGztP`|LgsM6gOJT%LTa$9e!y&bHwo_pBj6q*jlUc5-ExiZ;ve zPx;4h_*$19c!-@}gtHR=ed+SBd9CuZW%I^bd{$;!`{!4N;j(%5YU9cC<%=fXcrlyQ zSk-ozi343KP|aSIWY30$H%qI|)CR$3dh;RZ?kQM8g^}aFWeOZqit;N9$08KivR4sd z2yd*t1cz{TO3$th%7DFep?;}{v4DI~)}d1!O>O1_DW%SqR~U2)Du?X6YCPzL$>|4Q z-JM~<&3m{G?&)$#$*{eSj=CFt@xuP^pqpHCfVR}Z#RZav8=7fD0~&wf-MBjWP;)n; z_o8ZejUSalP#$A-cMmQaAZ_nV@OpnH-Lk|0VBkv8ix>I7*Qn^tr83`|SH7^I^iqR8 zFOcnJSYF+#1>h2i4j{_`e_3R&8&DS)1tmqqqeh@aF(9J?J9vpC`zf(E2*MsJrN&pq z^C!V*XW=dBEe!~*uTzki#(DeYczk&G`Q0?%#Mtm?YDH46p&J#Q?M%J|v5bd^x8nds zzWQ;4_Y{Kpk*>7c4cMr{mHJK{9}qF)Z$tuWFU(vQW&fxWtWxTxQ1Yd63m&W&@W_Mm0TNWWQe``lvF0zXk9)m?Hv%+cw0ADQ2+gqF6mt2wmr#cLJv2>g? z>dr4Ctu<(0qxD{=K(A{SPUK>w^|+G(6Gd2Kx_^0cw`%313cjqCnYbM;AmjuwhADTk z!W?*WcJ1{eUj$@AE+=q^B7QBzZ8}Ek!$`m(vQ^gVz@aJqk_fa%ch)&E93xLaYwKWr zra!U;(4VT(z_$Z?c3?pE2$h27K9~rk{4zHlv5VkQ3}S@WDITZ9QvwEqNRc#NI3|oP z2{ELBL}w9yZv9RN+yTVo68b4QKXlroV>TOL2B3~?(ikI&^nHIwePF(qUL+XHk%%L< zn{WdqRu`Ciqtg)921@NM@)K-_WUn*7)V72$tWL(7;DZl=fjQ^XvH^KYjW2Zy%1o{rd3k%hx|1A3o39`4Icq-i&QOv~dvD zh>3u$BBSm)`>|YFq>o5J8?YRf4jNxZe`Cv2ayclY(+F!vqFB@DWR-St*K=&misIOw zJk~AU2f$Q2)0@5b5>@a7VO-YIP^sK?UU|I(3GBK~x9MW!af-MiNiMvMw9+Fxs|_fv zZRN>g31^j6PdntYqPA^{I~cTTEyAVHhpu+y56T$(Y@_n@6FmQMHfrA#%j=F!EUY2} z%o+xkL}WCU@D>(xcUQoLYR*MbS6HQL!{UfTtI%@nInfI;gF`JSA%rC&C*44YzIJ0wv^-mJ$7 z#}QHZEvMb;WG@VNn#hC_#odwbQ8=RK(O&M;)JKlUA?`}-qA0a2#ZVqDSG+Q$Xjmy* zCua5*aj;q|APWvII4R~{TI3WN_x;>Y)A2AL=l$Vu{M`4Sx5uwv9=?1z&WHIp_uJ_Z z6UTcbb`hzjOryFEHnWv0!PvTio;S#A37XkRFEOnFWuE70-XEv!_TAk7@gdDO^I@L1 z^Km=(H;nNfXyU|R996If0{_G!5fBh_l+oJ9a%m~v=@9f)t#2b(>&cDKM@GI$)Nhjv zb|ow*K?mklyyuY#rK&ycRwsv5Z8xfDva1s6`a^&kJjdkXo~2LxXJZ$GW09d`vZ}1% zI`butD|SoYeQ$XMu>rIr5RA^gVml{BS%z9B<}+I`oJAw4JCACKxnf1og25V7dd^XeD|Gxgj59 z;^Yw}$u4mhEWCBxiYV&9tcH6S^6FXET*4;3K6z|K-t*^n|C1}5i6>=P&1 z&hx|Zc-$TjV@fWe#L$+ZE#pgclKTIF`~EQBeEss}>%)9}c=&vLn2+xsKF!;HPARPe zngKgq)mB68%p*DUw|`Us_M44Wl&k!k^LwoH>9QH_h0b+D%luqFvEfc@qzhn#*AZ_R z9XKGug{53!O#j1}c#W*N(=AeTui4*I0|RP=3k%DspX+Jcr}_BhIKMq^568p)Pyg*d z&tDH|j#HYGJl>?(r8^c9h%6%~9OKk)-yOajkMm(pB8fwb9iuse?g_8LRC#@M`pmC7 zH{P6#t%Hd=r_o@|kLYWS!BgOm_AFf$3ZPs1t_r4&aHccg*5>*&lxJ`@;3@g`)V|Q( zYFqeamY*hD5h@2JfK^0tp<=5byVv(x)s5EcnjZI2#?7%ZVxNsw4xCQ zMHVKD7Q#JgZ5`qn{-e*2y0fYzs{oY5C@HmRoMSKR6fxdojWP7EUHoXTA*iafH2~}p zC;(=*#LhH;=ro=e>e?>(snyv4#mCw;%eN+gyl?iWFUQAPF%IXCMf7zlT z2{s_T4kNK9Cm^L91u9(gtm8!%xGWnM-4z=XY#~+t)5{CK55h9V zevT8(t#IsR3OksS?6$|l=QMBUe*189^Yzdl`e{G*pSSb8O+2R^;%i|>*5vmN5s2B! z(1H)NNhw5IzNXEEX-s|pIL>pw zpFe;3`k#OM<>BkY*Dt^Q^7$X9ZJJZsOYGN)I8GS+G9}oAV64$i+40<;q`&90!31rn zG&PJ}&Y)8_LbsDr{E{?Aw@JP)O#nw8WNnF(i~MtB1ECFJWm$j;oG0b%n`o@_%Wha? zOczVbj21f`l(Q2N`W@U zsFz+pydteG?elYOo#GoridEsO)~?kx@#CVcB-Gz6@9xjlx5HEA-~yL+NXC0SJ6Gki zS9;@-m)fhP@kEV|5qHEpVJ_+3aHtt!7XfLbXt2&CQyJYrZeqvll55|3PyfNa#XuqV zScX+IeriwRYcvD;|4tFyY)O(_2V%~5&?^uiM_Y7eH9@V|86H{PTp`2EJhGt;((PXJ zEUZvr_g;^J7Me=8Yo0Y)h+W}7QJf9Ynemg*W~RG-TRQ?E(VXR+IcG+1pqCK!eSVH& z>YxhfNtV5Y_Yy*2@the|1_`PFV8RP{ZL*uYFA3+iz43At(b?b;{H$V6rLag!nUhi= z1VxX19L!?r3v<=ne!B|lHwMcKZw9j{i*P{=_p0<26O=lm2Ddr5pJloiosmU`%8YgZQG zDTH_HlfDs3Xj>?kuEtGr1Ww}$;Cn>5jyPMbY!n)ZTAG8kWdp6%aAue2IHxsIBLj9h zXP)vj+;!XkaQywBfBfO&o5K%3{{GX4}vWT-_->i)RO)&SwqUTWHCuAW*8R$Ti)0@AE@{ryX~1rv0vI zwo}gCu$`vkD@)yUHd1d z`rps4)eME>&mG);X2rK>5N39sf+2nd&~V72GIfXTSq`4hLewm;1qzb1Bp0a^3N<6(O^blby= zQTF?jv|hS_0RS8BV4s2zw26T>%uQ-088TCHWP>7dkST}6|0diyjlebMyKd|tF@99r||InKg}CU%BBO_?cP=^z-vMlCfEake_98|Flkz!9!#pq+<>g8;pD zClABYZI&zJDu>T(N((AyI$PDSLsv%wcD0&6Z%uYWT%wOD;8?;E%sMHLdCF6lfaQ_&6l?iuZ83N;!2}beN7n91UHH@^ZL!S z&xga5ry*w<$6@H2QKS=j)nu)=ciThv__+OW*pH($!ju>wtqXu*Q@k+D7hit#bk@D28yh5({a=dsViC5M(uKgm7?5tX5thF#{o z?R4aB%G3A{$B+N-$4?(WJ%0M}@#DwGW7lo(x=FgbDH952)ldcq-dG|J&Xc#kB2)x& zy(}J_Teabvu=3;`^=gq;t=mWSWmyIBltL11#t~F)63ogEGLQ^)*HND2B#RIoK&g)=aqANCb z7B2t(GkFa?fALhUOT4o9Xt9XXKDAWhB<%cxz`HDd#kL(a@=P9kWK7QsQ~$BKGPEQyps zc)a7WlO9{_fk2VFyZo@rLp#`KYjC&=fSei~_R~0a-QBC{&`tYpWYn4h?XV>qu;$j@ z!r(1dlgO( zGiP4g>z_V6u~@zI+WQ?C9M}dhRj_dTVnLWTKdTM)PrrWhpZmqC5Fm+53XCQ525qEZ zON^LBI!5q*#7;{<8jAZln5exm+&~Sx1b~!B4b6Jm9=C6fj~|a8#_rAWFdYw5W)f+Y zbe4c`zijWvaFV4dUSCw_Grx3C(X)s0JYFh8F6{L0uib2w<_M%kqh;ZeeOgzyg_pT~ zI)nn_Gb;in+SWKXUs#UJhz%iCn1SoeiMin}4-<1$b64wT5UzGlmjS`{?17Ap9znRz z9hDRvB)VQ(gwnsJ1comhMoTozOVm^gbvx|1V~b#C6q%o00>z{+3e-^Nhd~KAi8PHW zBc^u9N`UNG12X^{@T+!a39O-^dK;o|?Y2fi?^|_%lp` zH+~+CuutiV0&t{OIo47lS;RhohZf4{d%wU8B@h`0s4rOJIK&qo`?{8g0WgY(n${$O z&i3qD4>gO(U0_TslDUsUEjShb)}=P(#K3}~=`}Z*b2r@OVa#LKZ3jkT`5HKJ4y^*Z z_&_uR$Fi2b?@rQKy8%{E6porAN01y75QcXp=Cp9m&dcf>phF(Wcc+XSXvA8!czvd-V{Emi~2m~Mnw zvStsNbDg_!Ou{4QP9LXfI*xffez<${;eGdNyU)YnIPUj{VH`9u;;0!tP_WjVhgWvh z5C;grJmekpv@zG#avf97CyyUK{{BDy_fL1nZP#_V)9x~k17q8oNMN6GKl{_1p|#(@f`bpA_xGm|R}s?l z?4Ym#kTPfHyF3QGS&vheCT|bZVZZ(TfB7Gu{`J$RlZ0wiLS};)6p<35fjy%tZ;-3V1cqNAR#XC%UMUL5KDp zQv${S>)(?081!A1H(9zv*G=1L+NYfF^2j+M`vOvW`2vc~#cZ{zyq&xG7ptcpc28XJ zD+uZyNE*%B-5s{mG<8$v^|a4-9S;)VzviK5B`Z{~T%=ipkvxvK*#A;*NulC>b)#d~@P8YDf?{IGDxuEGnI%Mr;1zRs zlSfQtN(`WEAoE)xVcviTv8BsB0G2>$zan9h-DxTu?uh!Ed5d5TI5(Rrp08eQ^Qvea(i)L`Cr-5_~8u2nK& z#zEJJ%rpprgVrznDj|X&FhNg2DYx7=udq*nRs$`s1X%+Efd^=92Z&3WYYeD2{3@x! zEOIghAQ#9edu4$j3GkjNb~p#iVA=N_`SJUnZk`~8hW8^1C8t3e5<){M7GO_ljuwQ4 zQw9~*WU(D_4Pd}sQ zzet5eDt<$YFDTh%}?H9a?_dpB5C)QV$H_)zEz(Z?ZFr=%R-VQOTDjtTYHy1LTt;g?;0_gl2CW%V2)Q@@p4v3YO+2toP0m>b*g5-KK^6)* zOT$d8B*=)&sDbI7$}}J-;R9RFNYLb_rxe!GG!Hwv1JtD!yB=Rt5^1180Oy~)tq>QV zxdJ?}n-{3(=QAJA?7RwP*w4NNX7(EtW*La}K{KnqZ3WbEW57F?efxrVRy;GlJuf6~ z^cDyr*Q7F?NDA`@TUqO!urM$nJS0Hc=PX$|9aV-bBfgNVopA0@nOU(!hm>y4?|QEQ zvrF$>F$>_MOXto2a|MIDTEVR&cTY_w3m3lr%BQ~J)q7j76MHQ!v|^)eDGT5Y19@Q2 z<(lW4U{{x`%Fc^1x3~hr$mT5i#fo6IfQ1xcU+o$uT-}qTAUur9K^w{ctfDz**@_G@j@m`^aSgg* zV8Q_2&aHX!oMb%7LwOOcsl4I1L|#hn$2~jl-Z2s<6qQcZtNW#pTT>84Va7~BNVQ$k zKnZ{1&wc^n$?5-8KEDP;OXix)c}nxoqp=KOU}3_zhVJY3ei#AXU501WE^}ala~so3 zKb<*#Vdv}`7ZXnwIXAVm);mtb3h<7l^vQBG4;)vMKJjL;SP|=zED!gy&X!WU^7}#G zQ7S{?7p*YBVzWX$pV67e8G4+}>2H6v()bruv0x0Db|o{@fS^tYlvoE+d1w_?aux6)C1JfRnhx`FD`EVFSxAU|HcapbK=!=cV2i`aIVY$ zH3j!&`m9t=hRE8Bxp2C@InO@w%(#W?=GHK+7+Z=S86i@!~8YKL=h0O(U&hsf_# z-ed?(lgGUqGzS?~fCM~jVqhwejRW>z=RB)CQQ>U`7V~U#1`&Vr4PJ*bdc*C{-0O^7bZi4!TAm^QGz09U(<@A&rH&*2H<^Tb{80#2oxD3Xm3Lg3I1Cgd^wAsdmFtAHa=r#{n`Upa~E3zT@hT2%KV->zJnYHH1|nGbGM(SaXob^uJ7TFZCQ)_aZmRVk=^Z=DWq&* z6drk+@-+Vbc=(sY@pyc5{P_6s$H(K;ZM$id?rzL144H#)W*KtQcf#9oIvkIO2*#MZ;tbFVW-An2T-i?iz$C7hS@U#;c~KLtkgb_wx;Eo86=E@1E~S#*5hXSH)T ztnbIv6Ee!sK!Yj4CLkgYqcEm{0tKgWXJ-xqB9HJ;B49%vINNit@n`dIJ@H%8x-O#3 z7T0bTDAwE2gVuSx<;=s5Kf<9S0Q@&U!d%*G;?WkpB%gB8_HQi})9n z`7)eWGfwC6ry&>V_R1f8)Y-XRT-4?4Gc~JQ10>3lk*5z`_xN}`Y!BU}DpJe%CZ}DB z`c{RfVce4pW4GPj9S@)W{OP#e9uM2&@x$?PKOGO9GP7dL(j2$j5^m1Fx&Vwx6g1-B#cyP)O%s5CMoKDl>@TNIrZSt`jRfUK$GUvoO4w+9l zcf&Xl8vu6bNowJ@AqhVy^(Y-xP?+o(JK*B4<6qRcSe>ge_F_3AeN&%z>UwhQxLJZ1 zB!bp>Yj`oUv3Y8K#V*Z%_k{cBR9(#Tm-MnHh;Qw>)~pW_fPp2A6eQX^44JL;eZJu$ zS_ht$tSPIN1sHU_WCbSeBVootNE~7!VJZ98uIHX^aCv{Yetw33Dg3K{w<=qFQhb{% zT%M}+unG}N614c9!(bQ*rrBmLB=Hsu1~Z%G&EL-daiMn4%+1VO%h*5&h!B)+R29)i zYS6NZW>Lu}tjm&u>Ai6@_cj6(42+UTkumEXPh-;!lE*il%H7ya&4=;Dw(GL0B#}Uw zco-6ZZqZxv7+wFX$}G~%m>7bMSkRN#PdHb6`T1G?dX+W=)t^j_o*g5vT5D&?;RFUH;WSN%iuS z3+9(szY;@$J92(e)y1kj3lY$3YEz#raW}GbqM}XWoDXl_Ok+28)40oH^I;grE)QYs zn%w2FJ2H5@d9Lc7fNw)<7IPcz^T={SQaX>e1?R-sS^E+gdjN0)`6M1qGzfikux7Ad zR_CQ)^_i}$KXYi>_UW&-v`U{X@cPLe%+8sqD)ro$Yg!ocxHQ)Truny)*&~&H{JN#V z`uO0VV&D4Lh)x9@Fmog6CW$bcq1UDnN+3v_EeY2|u;VTOQ$w_)yi*a0-r)-T6=Fym z_iKoB$L>3c8w*xs^)%Kt%>8#@?fK7wrE1}Bjk9uoefjSBDa^iDmSKN(Umzf@=&}sH zFya2Q*?%$-2G2$C>g;(mv_z_r!PhZKQ4}uHsx@;=w%s6~aOT{kDdnvD%$g-j&ZFi$ z?WgTQyY1BFPBn)Y2z4Q% zt25v#JYTxutEjK7souq#as~bYcoAo|0&m3N#TC01qKOZ&F{YXq@tTH=#glkl8Z(Bk zgI)O|#rvH66dld|EI71lk7ep%U4mK4{JU&g6AQ)4y+kYC{!;>f`4`q2JFCfxms3w~ z8OhAZ<5bbpn3M<&GBWU9dCv?(A2h2D-C@^F$NjMzbG=^Y+>8x~^cgA_p7BA>$ zm7Q%C-f*~zsPyopbr@oBSDd~|^lhyCAF&QmXDx4LfJoj#K*DEOTFy+nRsa-?CLIZt zm<6E6ju``7&0R#vl9Dl;I>*g6CL{2lfIz9Hx`;8{v_-j0C)np$Sye#O@Q7zgwYKxcmxmboPpwvQ+rj-mSQfy7^5vtfoxcb z?^2}m1^%MYi?h=jm;?ixjNP&d{LC5uw zw0w~p_N=_q27BwGtu%FlmXQMX%PljL#jq#M4beUWTwunf%}?`SuPnf`K;I*63;{W> zx1|jQeV3xO#m#4xJ!5j{`^#Ufa{Ng=zhuYbBF!lxR^Diy6<+(wes3^6u(fDzp|Xq? zYYi@gzX2YtHQ>|2TWdT*T5nG35r7e4LC}!(HgeMM@ZXj@2sz9J6 zN}%Lwi{|OY{6F!_zrRc+>FTdv2Gkk+6X9930R%~~8FEJl9rdv7ro7*+@3!0R-Q%Z! zef;6$pMUuDFF$@d9Jbxv-C^wV*p14$%dCQ=2>u3=7_u=cInOJPK(F+q9!h&%SoY?L z{1nWk$HpfB$BeNB5VAOC$({T|*HP2yGo`WannoxOEGnooAMLexT!+Fxwdn2Bl`o(_ zpLuk@CKvrfsLmX=%i>DHubGmM{(VG@*|q$-@}`Z}qL9Z1>L7-BuWNwBY=DKqgOUIZ zd7T7-h~F`h5`p+xX#$j9kY3M!iwHO3hAzFfX|7mZ#L~|_eAoKY*xE1b44~xLo656? zWPpOtEW$%W6j*Z>9{1AiQTG3hb&{OPVQZklB(3q-Sf;`(;H5tIR{X43^b${KEN#26 z2o}~C4l1L#*j!pd#YDzPvgH!UfIbUkzVc^R8Lq!jGG<2py!m@EU}AeVt1qpTvs35X zswgkLS?CwDmfV--3&u3NEigk3%Zv8vHQamRcd2Z&rizSeYNuHIY#Sk{Y{wjD$2QWzwqn%lb;kd#yMVkd)@xxbXCFM z01^ykGO=Hj_UAu!KYyOSjgf6v^+K>Y;xgp0<%A6;- zLL%mr-Y0`e=hoT+!J(~gUc}Zlh-T?7e&?Qld%1B9`*{i$9sJJm=jO8~b0~`Ra!wGx zxL)=Cw3;n&?uK){YP~Up1j~hi^al^Wi;f?faE6YqO-vUBS#%t1kv+1r#%?;3FafcP zHJ@~YiUndMWGtYH2(}06gekEybDeoQ$lc-1@wmS`PXE`34hF<*6G*gt_U4 zeK+Nt2?OUONYH|(nfnSn5d{y9Iix#nv|1`^U8v!ZweMhs#>pHcKeAm3x>fH;87 zDgr>UCNuCABISD)_W_;ET+(}(Wx_@O&Yjr5!t2UZ~kC=HN1GZ05Y61EOt zJ)AT8L+vqAV@jJ226z>b>; z$(>aNi~`12zP2>fFKmc2sO)!+7NKcv?eSLB9nycG_KoK~R3i)@W zfuTe)kbqN5#`L2%zFHvKY}$qZ96@41H%oswclSo%pHpqc#+9jjS$OA#25(EtVEH+E z20{_dJg$cmen{v6Slmnyw5!}XO`vGgLFK*-M%lP@ZalVY$ z+vSX5ZauCt5|f8WDtglGh)I=+L6LyScZ-cjacn$QEBpB@xa(ALz6k_39)4XKgv2=y z<3XqW)aPy>=FrKZW9>Q>6yKsPl7Jj+%T4D?NI`gu@`*?YU8GId@II8*?X9Gl*m`)PD!?K-fPtOQ;L~a#s1m+6z~< z%C=mLG`}cjltCH!-?Vr6WZFq)9P*?&Ye&qDXwF1s@*ZL&B!_9k#6eWI8h#xBIf(}b zE_up2a3tel(bNsIM+O%31cK35{A*aXtlX2&wnRY=sslI7`IXQEvoHd{z^xO*cw>z- zrZR7-DJ)|^!Lboci4bYX&&(VQ`0D$F3yy$*1&qp^JD&DA8n5?FH^l#KhWUlbM`J=D@k z9;TdStaTJo?T4Ihn4qu=^M{uf1`Z1{h~cJ;p z#}oNOK>;|iHluc9(`9b5becNNO*c+sK1g>Q_TybGe8=>R0;lYO0Tc6XSv9K_E-0F^ zd|Cj?Ku#757xSs{vHlwe5r%pLAn~HOxJczawct5<7j7Te0!LU`tXj?vWgV>nbkHXO zTs78Q+IQ>t6JvBKkovVnc0}dd0(`^Pf^o)@wf3fDa1A+M+vPVLZ=bh?0=V0za>o2_ zV@oruU7VdEfvS&H)aU0^6jBzQPcK5AlTQx1kubfpuwxzGPwVdSkf%c)$K1&;qU2{j+Q;*dQ*HYX77%{<(XI(Pk_RTKgoRGqYz)n;bFNo3rv8 zs=m35XW3rPW5>3rz8#QZ9xQvGTQjo1gv7DH*@DZ9#@v4Gr3Bl86=O~O-kE>0#P?EC z<6364H8IVakvOO-htfDdFxx0Vr0aa*-m6a2*d4czA3nW5PTep{R?adoA~Q=GyK$d8 zUDw(jw%g;IKmYjgaoTQ=hvQ*7PSd(O=3%Q~1pzF|s*DhUdMgl`uLC*=m~b3)JL-17 z9-9GG6f>lqFp?;-THxTwuL&Un;h1FLq~1Ut)*|Q!6jaTU39OF~*t#4OG1nkSS+4|G zB%{kR?nhP8A?Hj36U^~pppe}KS|Ash8ItW4G3BA_K1_$>;dnf5kJIsZxBc|#&mSMB z;Vknh~ z2+|UT=^^@5FB5mdYb4MyXJ&Gu_l`$omgY{S;f$OSnIJa2>$?5a-JuevFO$KVHAtN= z?&*Ob^%3ZPXIm^iL<2rj108s(~6%g6k;`uG4N@r~8{POuao-Dt0pTS7%b3{-uDP~ks;3&wVs61uA z!${qo${V(I002T840*+!t8$gVfH$QukSCE-bdmGGV}|;-V`hl~7y(>amP6Ub-f`Qm zO1ka6FUps=h+(#H0Rf+Z1tfMmCIDhVl6|d+i5mw@HLG)g{=t)NX=czpu}`Q%Xi5*o zMQHu9ym;NTw?LLCF(am&-uD4Vodg_&3YjfgNXCIT#B*H4pGPFJtp#D{^q+xuBDFHUFu{W*W@OY+&ZGX`JIFI;+>u6M?1yDF>AJ8+1%7{Qw4Zos*xm*?}!wtSDl#Mg*u z_}$uDXQ`fh4OdiFm8onWSD46oCW~i`;I2vwPeQF$J`aD-FJG@-y7u;b-ezwvR^RQK z$j~WTL~67HaF8NL3l)?N$E%*nFWOm=3-cu1WBUha`g?T6-8?)L8wwV@Eg<3weJ&Z# zsS?k=t-x0Nj84KIfqYl2fz3tNC#J}dl(AF-W1@A?VA!b+cR8is=KSLQ-SPP0n5XS_ zJWhwHI}UHA@%=bWQ#X#HS+X=;)9pnXy<0OvmYRyC1w;%(6M5rdP-5Bb87yXCWv0L) zHdB>=5g$BZj(`@;?v(-J=m=EH#Fo(V11A|sGzj~eEs`|EL4m=N|q9oNn>F8 zu;aven{(F<4QZ37vDCNg!}i?NLHs;ko6%ODE+Y=Zj0gI;v@YIy+rZ6z~ODXrni-rT>p3xY?2;$qvMv zFEKA5Hv33RvG7w(t<*^ONc7BxM3|W;sy8Cs?lq6<72$U8^+2x%>2}SdsEr!oKLPGo znGqT2B^#(h)@UPnTeEs<5Y7e&wRg=YWYzew<9wr&`p-VC>3_7PQ zlXBJ^l!n!Ao+fg{3qiC0NY9u1|ir4?4P%9+uJ9R{^BYok7fL) zJN3c*T?3bobx+eo%sLNqGjL`cFz*zdCt@ZaF@1F7iSu}JLB1pHfehBpLh?1$&gcs4 zi~1Rv#w8P0>-uH9Xzt3|v|2$Z@Mp!pi?QYcAEPrd!P>qyE?)IFb4=Wcrr&1$?c5!f z{Qkq?!~JoYXW>bdCjp_Xh%yXA&Z$$qpO^dd`OCw@hxb3ezdye}Km2$;54+)hnD2B_ zK%DOpOHHU6Amy1HZY=;(%J-Z(=PnPbKYZKec{dGtn)8xb$XheA1?`y_Ita8*xUCRy zvlE_|VL9*4pWlDpozH)NzW;D|c=&w2zh8#k+(}+krdgRZbK)#{&>U!3hQs~g;r!un zf6Co)&`-j5`*6MP+-h{axgvvADC<}|lL4OmmH(^u1)DxeX>^k=J)vowqPH33}tMt z6IOp!c$ywPiSE~bx$*$HiO`4&hcxD%juVXJ5$~oHy)sKiW)fu-W#r5{0h#10XUKlq zBwzaY3$&EB>_8NQvf_|XcxFbyzS@S6Vz;%}NZ^jfX@qG6CM0Y6@5gv)f7v0FKc^P= z6Vw)bTiEzWpSo@I*ZaY0NOQM{j`YW2_+i)0%l$H+&;Rn}%fEg2{N>A+ho64`(}(kN zI4yZucHJ;Bi4Z~hHecj_CMFDwnFRs>Y3?LRW~Z4QB2W|4DW>GM310I0KZMuCC0f@h zGH)j2QRBuD)INYW)NEBUs_=%FF&4_({P#ubCyo# zoHMI((l9CbRPHHxAV3E9hfVUxF#uroJO=a>I7yyZd1jgQUb?8m;k0ZIhh$eJ#UFAz_O?&kgM-!#to6pNOx6%rYY(m6$7lfEI+kB!rIvBq zTzQZU;1-$`Qcja5CG54e&L0!cD!ZIKkK~RcdK<^OSQkZaL)TL?0YM#AWtf@o@^U^O zKD_^Y_`KZD@0Zh%@8_(Mw>^Nr@-dmjqBe*C1N2&<|} z!4^+!nw^EK-~M~Nd~LUle+Jdf%dacEx$58EJc5+^vb~+8Qk#gVDk4)X-Bta>UzR=I zN^er6${M(PL)Q1?*oZ!7+dhMJ`PRQ(h3pK;s@jqvY__ZRDpc@iu2}Uh^*47bqRS_A ziYrV1FdA>6!w74RZl8K6i0iejA0?~?iqDh2E!Jsep|G}pXNFsHcagW;Atgdq2H;GN zQzqm9H)?N?V{8$~zR?T#gRNl#CW(l&hQ81uUbD-Rz%mimJJO^6pj|hOn;_q!6+$N* zgY83Kx(v2?1g0>J`W0@jf#umc((#dXc3Yvjv75@)O#REsZIj#A(Z`+%;_V$h@geft z7<^3uyhA{CM5r=FR!*7ow9`S7RgTEplmVEr^|iIB^mpM(g1?H6Hx8@ZP;p%}ghcz> zRZ1^xf7d%7$GNZ9&m^qYKO=B`iV>M!)LBs2rGV>d8Z-i2$+Ep z{&++te@)mGJGriZ9$&|3Zzv)Qtwux!a?Haw z&a(`{m^zg_$|p(Lay~}9jPFwX8)rN9-gtz&@v%N+#3K9^AF{c^s6$v3lgF=qC8zXEQ7 z>~Zdm|EE2`2=&~PtZj-MLIBT+HK-&cADvy(v2*K74~Q}IX6_`ji`pZ5MB3ZXQ6I?4 zH@HB)kdKJKDOfBB(5|UW1`rvzLcw%UWR8=+ zqabXW#9Ojx0#I-WjAIp!G$;>a(1wAXRE)L&(!Hf34A($V4M-HizJajW%fzZgkiq|P z1Umw8OW+95L#)uF^*!&IFWHeG&hs#^!m4*(sEVbp(epb7q}9qs_SIrN0#KnGw9<+>+Lyn!zT)uI zUs-RiN9sS)L>B2t$T`i*4u_C4XOY8sUbgdmKF!NKEwbY!b6y6{^CH4AjEsGuN0N<| ztDxqci?D_(5_1<#ab<0VMlxulngObfyXfyqU(U8P)g!h*WrW1E38WN20~4_8(l%#)>EMeuGp}Q?y)}C5|P&K4MnXt<_VPc&%H(`%V+uwNh*!k#eB)p?E zV$TTsBZ^_22oQ!Q05VTgQpd#XC4s7RG|DIdjvS}Lc|JiR#5@jJvhXBJ<}62%z>qemQ+uF6JMI(+p$~P+5DOSWyD2vZA%fC`+F6-4rrNqY#p%y0YoH z-^tYJyz7K>*3*2P^*k*1pFe;2Pe1*apFTYN z{$C#+K0o~a?+>S8>SonEiyWupiSJN_k5aAE$J}}gD(p)1#1qlgHC_JA)4EXR0}!Sr z3dF7^@Ch}_$WE#2a?X>Ada%qgh-PMyJTs`nm;g{w^LKIqBSI92gx*{0oK*tuGV_v^ zl`7L$L^*vwvc!n&H+`%<+Spj4@oHq4SybnYGKjKDR^1ILPs?!F%~L)c4%1F~?2wx+ zcQP5G-jB>|KHXB)h8NtXtGW-MR6MutZCS!94gDn+cmer+8Z!9Bdprm(yQKj z1Xz_(ud-#=^Yh=hLPEpr0JH9=>6RxNlu!Azd|2|bTjpiS+VLQoW|di&`5=c*VWW54 zi)YgZN>^ZUDwx2H{PG%wWwb3@#<5xQG!tP%WB?4*0)Imw zxQ%_)OGlnM5GEBBjDo7oOJv|la!<%2d5}dZp$rXG4A}RS&|C8oF3KZ1r-bS})ixs7 z1jb3~B?~huvLsd*?*@rRqnF-XGErJvjk)0pCL#uhOd^`NW5ZB*NNV84b@-JylI?Ra zbe*cEYuYOeeZ)y7nLbU!pprG~kmoHAvJCV6pzoJ?Qq`cn%Y@@j_)ijPH!Q<$I31SV zGMsXj@t7rtNmzzqHz*$iV5QL7J>4Z7?K<|K(zQwZ)L&AO8^(1FK2JPrz9-R03?WAi z%ux&QhN-RHREEg})$na8z!M^K=Bit+EwQIi6L* zB_X?%HKrsIy1us^29KKPBxNtCBJ7Rp>ORGU zkbYU0b&(A1@ZBl~3v1`<6+8w@6*B3VyKa!oqhy}*Ao+ecoKNS&hc7>U`SADW&;R!2 zUmrf7&ck6iTogx(F~Tn@TvY`a?@j;c#Z&A1eyky&Bafbv{W$VAUIt5&puF^)OmSt? zHCB`b(SipEv9B-$(_cRFcZq-IZ3S2GjOFisj+b2(ub+pmE&1wLQ_?wkqHJSD=1ySSc%9fLZl{eP<-uP8T=zqr*TMiLke*3t%LV>?n zd2UxDze||t8NNQU`x))|2JBZM?~7;NnG~I}O$bEM_%HxKVjvH$1uzAU!ILRdzrFTd zfW8DG@PKm7a8sD7Fy_*?=@M>Y&Fp;VFYs>dYb~4w>qs0hBuv&r%9t1=05SDKIzm+! z6r3iC>Lk&Z&o)?E(7hELsNQdZFAx>6%7WkF*TI{OT50Ww)G0@=pZRu z_vscZM9$Q8fX-7;$@8*wSx(F0Fr4o*NtcI(bpGzJEc0oY@^C*5Syj8#qM0Qi60^Pj zEv+<2+X6s~x9|FQP6={*i_Mz*{vDJSc>rsm7{{2LOaJq$Rr{1o8t7*A)`A-Ibu{)x z>*iHdQzqODZjz3I2SDZ|O~S;`QAM_ot+8$L*XGIxxB#*-lSgM-u@NEq9)KMj6H8W- zOjX|pxH|@E3uX!w0RV}8Vj@6$WQ#~TGP9t*ye_=C^bMy+(LE29^`4sRX3Z;ld0lme z1Oh3~I?E}msOFSUgA7BSx?!66{du0VZo4#UCMG-$jLedPXb!`?>`r;m<^Fs(%QT4$ zSxGf-voyP53hI&Uly3J`JQ}ih&e!mc;u^maRa;!*`Ythxs4^+Bg*T4CD*+NFG5}71 z=NFXIrXmiQDkk7Oao$EE0~LDjdnNKQVdmf~xNsAt*q2gKfp~Qpjla1pEUv%j-oJ1T z(oLXVWV+4jlnDm}NVr0@3=s(6-qj(oL&ckU9Y{Z z>ld6!pg1KPxsxzYIg14Rlm`uYK1tW%Fc1@IV7^uI z;kz{{N?fljdeHQ{RQ0Lwl+b$W$CkMZJ7IA7csD64PkES|oB$dE1cu;=N97oKX1ohJ zO>Zj5*D#hCP5de#g*C-ze|`m}smc3G1ooACNu9qipYR4oQWjR0D9kfU?uI!JdDjht zPBTxPOcQg0j;%xwHm=x^ItFGuCPL+)JOoj99S}TOs?5ERK>R$ilJmI*uM1mqe4skmqMu=nuTyF2C?c$B>3Jcu@u zL!O5`40&2I3p-LkqLhRJIoQAj9hq5!b>z{yGTL=qKe-0~j=`@hQ{s)|eQwA9%tEM) z8UX;SBSIb|A>t=Mn>q2kW##GEby>&-CL1Vq($6_%450}cL^tFy%be$>Bf3l6BxV|! zJ)*m%ga|P>Z`&r;uUEmMN#m6R@O`_oW~@x@TW1-`2g@3hh9u;A!QVi_IZw*MY(~`# z9Enrb)4*AwA{&{w(r%IgbCpO^fHc;y1qEgi0!}qL4{C#0N_ktExk36xK`vUd{M^Ft zYU8XgAOZmq3v=Mi7xq~6J(VFFKxb?7%ExE~{hfdX3)Xtad$#GQmA%9+PAz%M4I>Rs ziJ4Cx8%~KWQeyc!lc)jPh36n@3|PlgzD@tb zJADQJ@tt7ZllZn@Bc^iwnvA|>4w9I-0X5Ljgw#RyUM5R**-bXh)+KKEQm>^)S0n}p zyal2cZB-UU?F@iTT)Vg`w)TQ2QM&UOLS};u8WNQZ@G%DFv;9^legqW zQ8Z-_+NXKLJ+0Q5f+WSmO~S zC`7X0jR4+Ucc>k!U_u`I5?o@iHGyZ8QUJyGX&Y2sLVTmpg@HJ;670ux$36Qt?z6Wk zp)e*^R;3|n?qnDi)h=sR?Nk+lYR2Y<$S0P-3fN193{s^krNo|1+N?zZIs)S4gc3AC zF{LeC{M&zh_{azKhMRgA$Dyj z?zj#VlvT1SacCL6Pl(PX9707pccHN|=sd{4%>Bfa5`zCk5o6P}`>HB}qwfokF1~VQ zgnCB;T?e+5TPBF0Ntg!ou6|WI0xteNw5c6a1vxoS)!%tP+aSUU%$oOG(UFwrj+OeE z5o`zz*wAqzht;4Wj&1T3d@9#nOn+nKowv`7Rm=I8cBF6dDP7|l;WZIgJZBAyCdGk= zh4Z|dhj}RgTd~Mh^Jb_HC{6{CA8rB@GMOEkPu;QJZda_S)`6Fp2DA3mkw|6Yp%$lB|zN=f=?+j=T4VFhI0=8 z!ZRrid1ld0CS}1KE5#IuW^6h=3Nq&fJCy8EFhQ<7R^*i~)Lx*46r#md0n# z92)<>tbvP5#C0&v4{*`Q%&d~Yl4AgNenJR=Z!;+;Vq(%gGyicAQe|at0U#(8EDS!t z1io=T5mZ?zS%(^dc+UnsQYXny-N<>!Gm44;tfOV#PuBd9)>Z5J{vAGt;Qg_jLc(rR zo|JReSyZH%ByrE8oF#`aOQ%RG=9{ZahMuplm{wHto3&9ljDWx_nN&pcqO2&Gk^&?z zGFU-0HchFK9!Qi^r5%h00t?x&Cm^PjI%OQg|EiiDa{~&@!09&-Z#@e*h&DzC;3SC1 zFkJA7m6OE)3=LaRP;!CzQwJ%kb8T{-I!7OsISZ>WrodZK&5~zbmJ_i~L33bElEMJd zU)o7wy=pxRFzdh_1>SXfq8%nHj5Jf; z4f)imh&HF0vjVcvq=ESFx-~to`j?fX5CTd^JOO|c0O-AiTe6Ntg)i&~y=_;?;uDn0 zlpdlt2=r00_Gq3kb5cose^AZyBrKY_W`IA`U#=a~N42D8pcRSmD!_Bs?WBLh}`auh}pCa3R2 zn*b3cFegLSB0$ko_Y^PDy@sj{35>H9(`z0^!rwjY`cfVj?I;c)^7~GMd$Gm z5YK;|Y~Mazxyd{WuiD29)drfY7)>f)28~xluzeB<6wELG2?t z41ozo^4)Z;qh-Nn62&w{L2dk+Q(Ql)aYP-wP3GIm^~h<-GwGbqhY#oF{P1u-oR?)D zhUK8M#vmBXh2OVr?M<|H1*tUUYge0fW8LlXarAv{u@7~RMsCs6#Tfbw&Y1Eg7hWN+ z;9E)ob4b)M!!f6vhxKpMM%Y95UnbF^NR-nlrj@U7eo2Ew6*pRgbWH920lEF5`+} z>{_ZYG4V{A2Gt+tWm&e%EPB6Wk-QNG-6#V>rFQ_8!?@;sTo<+LA&D_0Z^XnaM-HMz zv#NJ5FK^O|=;&!({|yzT+Q25BT_&YDE`JIDcD`F#F2htm zHX{a8I#WZ>iOM>DmFiw>92E&zpo@W{5cQloWJE@vD%iAlX1y_);P%#APnBMaxJdk) zYs5)V`?Uckr5C<;37-Llu$gd3`v*;8Ju$;7ho8@@hMCbv)-XF zphOh55eH&aOxAu=?p?yV>Wy`AFO0TG#;@ci8jNUzbCE-3E~TL7*HuS1-o!^y+nxLB zM6IiX^4_nC&8mHO*$eI0jTuvv=wqc2p0P5QY*?;JJ6Q~-zYJ4O>zB6G`Yrq_5ZTe% z?Vpi05-y!zt>}*SDt@*UC$9RI0M`D6ZIFKEv!|H%74Ll!qD!uB>bn;vcp=m&v0;ud zDe*)b&n%4M$ciWbe$(4X%uFmiQ}SLqhfR`vfn(3CmOOZ1Yr$K>Bpn@pRE*wQrn-;6 zh;o$RJWtFKk>bmMaRP<-GTl+`NSMjsK6PbS$0uv#J(PA0KCk$d+Y+wDF?OC|?uI!_ zI1Sv*GUwc-YyOdNWqvAgiA+F2GrKN{D%A zRQ8-h%1V7CA`5_lA*fmqmr|owKotNx=Ggc2l2eNtBvyo z1EK#GrqEZMLpS7n&J$HRGx2nv>gIivBMq$79-X=n7gVD0r zyF?sB1p{VLL6RvqL(a42yc?*u{1Qg;it2pa$J&5X)A29u4ZY!#uFb0__O-Fj!ES>x zr=&UMgtI8JbQ20++lx65=fnAYzbwPd5+timI52(sq?|h)2I)>i_c?#L|NQxSa*hgh%iVz_a2Oyb&nUY|~B%45F30@*5=m`g5&N6tP0JA`o zd3T)hGEZ57ER!YLG(z530Oke&dOLAo9P}u|d|1A_fB*UZ!{OoK_xFc~FQ3on&!_XO zo#sw(kcoF&fIKMYc~THvmfiXD{f{3G_sd1cG_o>tAVX{e=Vh51<OuAO6$%r}M*?hYw#K&L7U_p*zX_tg4bymYfGruAGAqHY;NR z##Lf?3IA*Q%QVQWvt}N4S$~}G5BGCE+|OC(zC)r^<*W-6BOyhfkhA12 zS=YcKl6QG`9+tc;`R`|4@{nZ^nI!9!^D+r(a)RI#`iRL!LyjzNL+@K_z_PhA{)N&k zne&Dw>z_}FkoMMMLZ;RMI?W~-h)RU`cv@) z9Ji^gAcS&jD)+h+@BFJGqESt*;2#h>=@R`hsIqW&Iw%1Vd%#v()HQkv%msVCu~?D! z$P~FttOF8=%)f=KVHP=n-3M*F2McYiw6!%oxm%BWlgO9g<15n%8!ExVfQXif5(B;d z1^wgYtFFr4`#=13w8XT!o-a#w|30nS)%u-v>a$b>=!$!$g*UAu>G7CFrnaDFT2y@*FUxA~ZrCjp^P z3dqdTalK0ZH!<{x2~a``5x(8#G@`A57?MC>Ze;5uB)Z^WMmrM0Xv;(;Lj|>wRs5$T z3o$dWfwXGzV+z*F1eLdqQ2eLbQO7*7#c4t(!W0ylS=c#N@|;LXIp(BVqjF|xn6xMO z#)T0RMsdF12zo%yl4cIWFf6${&XXwTVVQ@+;r_HN!|CwDY58!Tmp_@`-=DtA3+F%+ zl1!Y47?>Q@1i$5L3O)jhD6>6$Q~9y*NVdK4SKg9yb^}cya{&<|^+=bhL`26tY z_YV)}56k=W@P3wM=yKwzlUb)OL`<;?mTY9RP3ixDr-lBU(o@gTLU^oL2a5d)DF9lE zHe>Xq<>_&a|M3RcDzpvOTE2yEx-gaOz?Cs=tDGcf&6<(BtXb#bG%v$)e>ne_|NEy8 zhlhs`KmGKt59c43k{}kPx{+CU-tm3_^R;HwyQrtE^3-yg@~o~ z8w4w91l#$&aA~S&O?|oV_D)7cG?c*p39!5Nf{(ktUbQ8!udI1edh5ph^QVtSjGb+O z{*j&*gRS>ZO=gbO71*NbiAp5C3>xrKfNJL;UHTBCbueKY%qw2MvcEz*6(d7<-1g7I zIxYgxjYaag_(tUn7{_a^>eHc&BdBi-}XI$z+d!;^rDT_TZ6;o_mu#Q4`z< zOgRbCHX|cvQDx0aoCe~o3Q(dKFwLd~60m;bufbRosEjLW%=GGSrJ5s{k8AXFg=Lez za(eahrg{_{U)dW#SNd-I^wsUN|B(s%(mS(W8Th%ls^QBE)gVCu84Dz&iYKtRbNX?x zk$P~62%=44Bm}4kU}Rz0VIUl)DGtOrAhTHT@D4vg1_H#JzOc4(UaSbqpeM}%S(TL( zGRvo7)}w(2uZd4priOV;5qkz9HkVxjaE$sDRw+Ijs4^_jn@E@lOinrg9Fy>G9qwrl z5KwfRIk6BASrkwfNfSzD$QEyWYr86PPi4nle+@R;)Po2KPohH}Hy|S;Y2`7f_sTCv zC?r~7MnoUwjqpdXt4WfhDgj#G3rf&%QQ4gHl7(6Fn3-51>n`U%&H*F20HjRdyNO7V zC(2`2c5Y*yhUu-AkEPs))*9imSl2P!BA0}Yk9R%^vmKpiRwIDs<{A2OwO(1@_UZfZ z^6Zowi#R>`XhGb=G?+i^;ii6!T(KplxP6Z)5MIYOJhk!tL3yy^bC z*Xb`CXL!Aiu`S~xM+PR#8B=60N~SoP<*p`chnU{ z0=NEMVfg1aSMQ>{Sa%v%Hwa9>0Y*X~%#sJyJpZ?b;AT6HBs&Z+o(foL zM_M*2tH9BY6%kqBti+6aBf;L-tho0k(B2G@aU;ReMuW+TQpJw?Yy-J z{@NiR+tNd6I7YM(hA#thI?hob)R?N4pyys>YMIh=495EzEw4RT z@FYq>Ejwlq%-US(psX6UW6sKBH>zZntTr+e5$rtyF35HI^)t1nm&FUV@oBL!GGDxz zF2d$d1tK$(APDn{8_h}dh?yv5QC5W3Ig6Rh?DScCKNT^02o=qd3kv-vct0rSL3rRZ z77-Ql4RG}F=}JnwjGOufb(WqYwAXePPQ)aORfzMB0LeJ0J(07tA2#8{4$jqj*2oSc z$&?4ej6md>cZ{5~CM7w~6NpIe0;@6tqm9hkjk#y$Mr2@RYN*#UkxUjnMFfa;?M6mj z3`H6Ew^S{g6@`dP7f;*LSOaoBvrw#1F*8G8-jfUy3)R_Dp4W_?!8=S4+}z)G^EW?! zX%GvJz7|kaV9AVh)U~A47J%zH4V?#{fy!@~?z@sGVGwnL2=l(xX!GFd1|hf_fj9v; zw7mz5D@Cwgn!TtpanrWW+LBEhyLC=ZBKpdZSry3{kE!2>K-$FH+>N(C<;7h_Ud-Jy}Qy;y4-D5b&%mI=WZBP1!#JWp_=*1o7UnI z{A@lLOg33qHuT1?>ysRaIOKP|5F~`;(PM}}5RsX9f^>35tGU)EM&{PP@*;L6Bt}r@L{QZf~a#ckdtW zetNv!Hgd(>sAkKGL=l$30YXLiJ*K6WBHGIuOOOH2C1+?nM8F6tfK1rNeq}K`sO<{) zdou@|#p}{FV2vvVXE-LyEm92gs71r2U)CU1%mvwiDYYxRRQq=Jw_vZ^mZ_N~uFHj= zD}fB)06l>k+UJBTR(39(U1TL*B0q1jK!CJaTDJkq0Lr4dx!v-#{c!hTdw2IRBu`8fIP9aMGw`&4{rA5Z*1Ijwrvr>_*lWr zxD8=TrCLbf-TVYXa0%=z6=aj8+B!x{%|}d_MYz3j5S#>{IVA=w03DskA~Bwbx0KByiJ%1z?Y#k5PVfIWP+9TgMAZ!?ZPgC z_xcM%r=hk*^q27l;LC#Nc2hYm2WA+1Vmb{;Gn2Zrv1SOiPd-={kZJ}Y!P?%e!I(^C z$p9p$Yg>Tz1~$a5jGxck^7|K0NUGn?;>ypgWs9zHwm3o}9ePjJu#Az#sKa<6wC|9! z*5^4BdqU`2E+uf#zTrd-5{8}(hNPlR79nNl%kMe4RHAG?&W#J9@=*H>Pge!oS5=DT z%tJA=eZQ;058^_325^JS46x7KDGzySbdqswwjUnfJ^b;*-NWO<-E=;6V;<9Zn0RE( z)DSAB@Y?&`nw@WEesjttn&>^GIoQHG+Eh+lie{F2uy__IQv(dAEhs71d6Yqj)p{1f zkoUq_MVVCrS1*&G4cv_5Ktc3y-sn9TFOUK>R)N3;Zmjo5I&@iO7`5S$v*v*_Pv3TT z)8YL?mYkUt8JLG&lu$jU5V$2IPu;59++@1IwOnaZvRV5UnNhr zjskWC54XJJn*>@9So%Yl!;h7J zCA0~22JAseaK(g26k{SLwV0YoSvV`p8SIA)N!Qd=(ffAB_Vj5^8o_TAV`cei&Re){R>pY9$X9{=TW`fznSO_Or7&6)>Q9_VO1S?2ivx{_$fJDwVm z@wS_$+q?Ha|9tm<-v9Le;qecj@3x<&smoVG*FiUd$S@?p0LT$wb(tf5pL}Rb4-4=> z_2R8vss&e&nF-KAPVEncPhFK9)ofb{XwzAq@)3FSsa>1o!SY^)vz(dn9UjIG11pOv zC1DO9ITMKiNVc`^<;lYjts-;P-gTgFJ*hL7`ql6Tc!+EEJn(-=ij0YA8*vXi?Dd(#X)9u~kzdhbPJUl#p_~ZZm{Q3R%cIvJ~ z^7$2qES+N0i7Iij{mOscIsiOj_nmzPS5N(awRn;6+00BSHVSMR6j4U;sNyV<&O&3B zF}Xd_e=gpRv)?aQ0M|(1`PiltL?I&+Ycr0Sr5U2{nBe9oNvZb)Yuh5pRZ`GsS+K|sgg7#*-BwAsO-{^r%r&oD1r!Btv=JF6^| zbAcm3zr%!^gb;QX+^k1qU;ABOJ3kif0uzF2lAM)u?rK%yDBq~&dT^E)$;G6hE}aNZ zd+3pIgY9?oScLSoH{uzep5pqIdBw4O>Yfz9E!@;h89U*!kRKC3aDF3l6*8EDk_ku! zdZOblT=vHZHd#(RI`P)4-IFhu-20Z!36vFy5&9E6VX6#XCX4^!*v-T4g|oIb=1Yu~ zd$V#;B6Aa(j4X);Whi3+8=<-yrY8TnCCp4J9dYJ7bcE!Y*X#p==GyG6kDZ5-N<@no zna%^#k!9Ec(haeJ2&uFq0e>U=@tlN{mPD4*(m%ac>kUD&ZHPKwk%RKa*pN9=7MYrH zY{rns=AfN)Sr2)dx@qdJZf^%k7s8sDdy&k@z*VXN+6A(l65K2bY8*s{bB@LrlGq_z zEyW#ENo+I%fcGspj^J1hL~Pdm9DE&3AJ|_zk9`Ra$i^Y}O~`<#d&#-kPGh(2rfIku zs!CnCDPLa=`A2U?oeK`j*Ew;sFTX|C(s#3A;7pHcC;l>*$MVzn6 zW<_j`3~d^|K-VnN%`;!xcHs}dQULM7H!%ElTM2=F}pte!VD!j>irCM5ct{5IQn5p z0X7vJI}>MbPEOwFTEBRW&qr&EW9|DTSsw}n@BU`+ZFRHZMJzp1dpxt{sdpC90rtS; zT$UR595pbx)F>$gWOpth93k}gIkGZ=O=V`97{j-6KTe_nG*FBnjHJWFePGamndQu4 zl3~n}Rmz+~)6}z;t@LqMHQ3eqL-1hJaWub=U)M19sMpf zd?k6x{BFAKw%fzq``ZtXk3awP;o%RD|Kst)NL99ZxRUMFG#&DwEV+?{k#dWxYz?5LFKN-@3x|NPrj2DG zO<50(O4D3DOji&2c0cBA9<{j_Rw6Gcje-@<=?O8vjx5_pMbNfFX=!`LP-E~YLNlq^_iz5 zQTcN+*kPckqzF6ovv>Bo6H1IMEX))j<`#&XltAi)bnX!I4VgK3hVQ&-nzG`9j~2DPr%f1)AA|%XpTYcod0@(Oul`+o^b%pr*YOgYp>>S*Su;p!3>7z=gy&I zjxXe7qfeLv7Zkn!;Ol~JHa(Tx0!qszkh9X=%=Sfc*p-`S@jm`u;X_1?viDMC04V##sB z?B~b|$&~YJI7ZCi*Q61cT+C^&gbnYpGED{7D7H;6p4@x|E|Nd?e=jF-_GUikee{5t z36)b5YtFrDJdv6_G%^iYxq;w04AR{=AkXm^=?a#DhqtL6m<-`>_tfD#3c6obyiU)vKqCPY@SCbFn97{R4T^ zI)K5X@tXkTBkc3-s9iU9hh|6_M6w8Scr7`HBpiM8K(dMS+FDp4#gn`oths#mjI2F7 zXZ1F4v}nsJ0ZBIPDW*gi(kBk7 z8C5WMSIXTXk9ip0j}knT)*OT(0GJat{`tPWT=r{pYa7w;jdNw~3xjU9U=gw+nz!i_ zi<~j3HUNkL$$cXpj;i_P{rdRnWUGn>pvC+n&dl$Q|7Ukv#BB2%BUBEM+crjXY6tQm z25DT)^*u`-l^bO%=cLN2dmW(;9q7(RSX71M(zg-LkX~USy|p$v9u)L<{g|(K;HxA9 zE4>bg7|tm>44SCqlNk~EC7fL13upzaHAP}30CB@6T26apIcvr&l5?KIy~L0@4~R*4 z?SrL1m4Gf&GM2fxtaIwq08QvJ4pQ=-4RN1@bI0!n$aG){8*mIegS;pmG8AALni)Gk z9L}D6eqqwtvYJy9%xo$Dt$6lwUKK~PqWaghpX0om#ooQOwy%$8-SKyNwzw3Ne+k}K z_+k_z47%~B5-KFT}?R`n> zn(PJy5+L1o((oW85LE_|ZoEfS3BWBUG<_}WVWZ|(VI?(|%k~o+c&8p`!%1Qxz87WlWCRS))GeZiLxnbq{Hc$C#lI=mJ{92TA&HHp8YOV!Rfce}n z0c)QC&k}OLL@bAr=`#7#U&?8fHK?uy#BqA#x0T zB*gX}2^$}j+1}(e-qDE9TZCe6X(W8B5@3Ja{voRi(on0m8>r1SF1W6)wkqeDcygckMA2sUN=h zFTbkhFTQ$J@JXU|wORYQ7az)-kh63FK)M}z1OVJr%Wmb4 zBOs3Lj#qV;yIwdk5tbJe!Co|uc%9mXWkBHG#lNvn<(nk2>}M^y%XcU3tdy6D(4bHR z4wgvlOkIQ}Ffyh@j+Lzs&}+0d{_7keRAuYL?f6yveojCN$f+s?aw&Kpv4nl=Eie!@ zSq}rlMQB)!UHU!0SkBP_u4l3CAsR|ZL)SOWUvl2wZSU@Gx3}GGx9z5Boc7Z3f#T2r z23cVtW|d~40dJ4avwqGwC+5r|gW$d+?5NKxBw4dX_;+PwMJD%-JIRB(^30YPc3>rX zvdRpv8Q5jpx4U`hM&`Z&A_Absd2%m9TP+Q-BQQavCw~TjXWqrSO`}TqC-NrLHAm~` zf?Q&Vu|+Zzu6YRo%0Rfsu&>ZF4MT5&-m_}M;Q$bB82t|dr&$tO@YopVoZh^e&0_*0 z42*r#WEp#3hf~LFD2)Pu(Gm;Av!2>GY^sK{WE?yP6v^14t=hHP6fXZ+0^SmL4e`6w ivGx)=$^VeM{Qm)yx!|i5NCTGu0000Z_d99WHFWm z`2{zujf-{zawI%m978JNrXFPE1@f8<7E8}%%lTu>&#KnM&G`7uteHSj22WQ%mvv4F FO#q`M9f1G< literal 0 HcmV?d00001 diff --git a/actionbarsherlock/website/resources/static/controls.png b/actionbarsherlock/website/resources/static/controls.png new file mode 100644 index 0000000000000000000000000000000000000000..9257176616c3e0a5c145e381a12ee15fa556dc8e GIT binary patch literal 1249 zcmV<71Rnc|P)V!Y*4EZ4OogST zri6rqYJsRyQd08t_V@SqUU#9bt*zwf?~tLsnVFe+kFwX@=UG`+oh~W<+9? z#KpzEy}gQxinG4bHdTvkgR8Z*wRDQE#?IZ~l^To_n@2O}IT3~G6)PQMiWkECPLz3lbBk=|vuW1?-!1MPfMnI7-k<+5D4+u9dB zmBqs*!1`WX^^eNcMJr!PLIM#5ImikCM2QFtu!&5!*FQ47ix$41yk(NoRGKV31w{bT z00~7PN)uuam~M@5V_#6h?wu403Ltp{i3MyzMz?=r zx{Z9j{bnVTaFT4o&?6v~XF->~u+!yjSAg8%Bz7`BuBukl8fm*EyoWnQWFSLX6e6vze7N{Ty7V&(` z013w{f)568-|HJ)$j$ZN`bGpC*d|nVVfcw7FmAqrV&F{aP zAfRO!1jYNWFghE|S5dkD%AoieT(?fR;rE-8)x%mH;NNd-i>~#7T(|MH8c;e7fRb;Z z=p`-S6U_JKknc@PUwdjST0t|wU3eP$GGPzp{xmDGa{g7q0HG}46K;LARAd7PK&#{c z7+@1EeBD34Iq+@#7|bUe`nJ!1)AxU02`UT7WBL+4;r@Q+0V0A|Q;Qs)aP5nw_5!?)*?^0x3>g-<$cLB zU7pQm9~?h#Dm0rIMbY~a>mTSc<)`naIj|E?j~RHs_RrLpETh4iq_}Tp>-+wF8GOiX z37n}fnck7qjP)fy|G56er~EN0gXD+b*EB&nPhaxM_t*57RBMrsgTa8j?itWiave|{ z^nJW9nfd0t1p6WXoOf!pl;OSW(@yK~uB*MGk$ z1Cqb$OGamSAE1%7A6QeQ@CkJIzC}aPD>IDKD8L8Uwp zD8N$+>xvXU;oyBNH_mf>Un0zeaPz*KM@m^&i|`2-zbE+j|6b!y_Ir_OkE~-m00000 LNkvXXu0mjfA+dCQ literal 0 HcmV?d00001 diff --git a/actionbarsherlock/website/resources/static/css3-mediaqueries.js b/actionbarsherlock/website/resources/static/css3-mediaqueries.js new file mode 100644 index 000000000..76bc26048 --- /dev/null +++ b/actionbarsherlock/website/resources/static/css3-mediaqueries.js @@ -0,0 +1,779 @@ +if(typeof Object.create!=="function"){ +Object.create=function(o){ +function F(){ +}; +F.prototype=o; +return new F(); +}; +} +var ua={toString:function(){ +return navigator.userAgent; +},test:function(s){ +return this.toString().toLowerCase().indexOf(s.toLowerCase())>-1; +}}; +ua.version=(ua.toString().toLowerCase().match(/[\s\S]+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[])[1]; +ua.webkit=ua.test("webkit"); +ua.gecko=ua.test("gecko")&&!ua.webkit; +ua.opera=ua.test("opera"); +ua.ie=ua.test("msie")&&!ua.opera; +ua.ie6=ua.ie&&document.compatMode&&typeof document.documentElement.style.maxHeight==="undefined"; +ua.ie7=ua.ie&&document.documentElement&&typeof document.documentElement.style.maxHeight!=="undefined"&&typeof XDomainRequest==="undefined"; +ua.ie8=ua.ie&&typeof XDomainRequest!=="undefined"; +var domReady=function(){ +var _1=[]; +var _2=function(){ +if(!arguments.callee.done){ +arguments.callee.done=true; +for(var i=0;i<_1.length;i++){ +_1[i](); +} +} +}; +if(document.addEventListener){ +document.addEventListener("DOMContentLoaded",_2,false); +} +if(ua.ie){ +(function(){ +try{ +document.documentElement.doScroll("left"); +} +catch(e){ +setTimeout(arguments.callee,50); +return; +} +_2(); +})(); +document.onreadystatechange=function(){ +if(document.readyState==="complete"){ +document.onreadystatechange=null; +_2(); +} +}; +} +if(ua.webkit&&document.readyState){ +(function(){ +if(document.readyState!=="loading"){ +_2(); +}else{ +setTimeout(arguments.callee,10); +} +})(); +} +window.onload=_2; +return function(fn){ +if(typeof fn==="function"){ +_1[_1.length]=fn; +} +return fn; +}; +}(); +var cssHelper=function(){ +var _3={BLOCKS:/[^\s{][^{]*\{(?:[^{}]*\{[^{}]*\}[^{}]*|[^{}]*)*\}/g,BLOCKS_INSIDE:/[^\s{][^{]*\{[^{}]*\}/g,DECLARATIONS:/[a-zA-Z\-]+[^;]*:[^;]+;/g,RELATIVE_URLS:/url\(['"]?([^\/\)'"][^:\)'"]+)['"]?\)/g,REDUNDANT_COMPONENTS:/(?:\/\*([^*\\\\]|\*(?!\/))+\*\/|@import[^;]+;)/g,REDUNDANT_WHITESPACE:/\s*(,|:|;|\{|\})\s*/g,MORE_WHITESPACE:/\s{2,}/g,FINAL_SEMICOLONS:/;\}/g,NOT_WHITESPACE:/\S+/g}; +var _4,_5=false; +var _6=[]; +var _7=function(fn){ +if(typeof fn==="function"){ +_6[_6.length]=fn; +} +}; +var _8=function(){ +for(var i=0;i<_6.length;i++){ +_6[i](_4); +} +}; +var _9={}; +var _a=function(n,v){ +if(_9[n]){ +var _b=_9[n].listeners; +if(_b){ +for(var i=0;i<_b.length;i++){ +_b[i](v); +} +} +} +}; +var _c=function(_d,_e,_f){ +if(ua.ie&&!window.XMLHttpRequest){ +window.XMLHttpRequest=function(){ +return new ActiveXObject("Microsoft.XMLHTTP"); +}; +} +if(!XMLHttpRequest){ +return ""; +} +var r=new XMLHttpRequest(); +try{ +r.open("get",_d,true); +r.setRequestHeader("X_REQUESTED_WITH","XMLHttpRequest"); +} +catch(e){ +_f(); +return; +} +var _10=false; +setTimeout(function(){ +_10=true; +},5000); +document.documentElement.style.cursor="progress"; +r.onreadystatechange=function(){ +if(r.readyState===4&&!_10){ +if(!r.status&&location.protocol==="file:"||(r.status>=200&&r.status<300)||r.status===304||navigator.userAgent.indexOf("Safari")>-1&&typeof r.status==="undefined"){ +_e(r.responseText); +}else{ +_f(); +} +document.documentElement.style.cursor=""; +r=null; +} +}; +r.send(""); +}; +var _11=function(_12){ +_12=_12.replace(_3.REDUNDANT_COMPONENTS,""); +_12=_12.replace(_3.REDUNDANT_WHITESPACE,"$1"); +_12=_12.replace(_3.MORE_WHITESPACE," "); +_12=_12.replace(_3.FINAL_SEMICOLONS,"}"); +return _12; +}; +var _13={mediaQueryList:function(s){ +var o={}; +var idx=s.indexOf("{"); +var lt=s.substring(0,idx); +s=s.substring(idx+1,s.length-1); +var mqs=[],rs=[]; +var qts=lt.toLowerCase().substring(7).split(","); +for(var i=0;i-1&&_23.href&&_23.href.length!==0&&!_23.disabled){ +_1f[_1f.length]=_23; +} +} +if(_1f.length>0){ +var c=0; +var _24=function(){ +c++; +if(c===_1f.length){ +_20(); +} +}; +var _25=function(_26){ +var _27=_26.href; +_c(_27,function(_28){ +_28=_11(_28).replace(_3.RELATIVE_URLS,"url("+_27.substring(0,_27.lastIndexOf("/"))+"/$1)"); +_26.cssHelperText=_28; +_24(); +},_24); +}; +for(i=0;i<_1f.length;i++){ +_25(_1f[i]); +} +}else{ +_20(); +} +}; +var _29={mediaQueryLists:"array",rules:"array",selectors:"object",declarations:"array",properties:"object"}; +var _2a={mediaQueryLists:null,rules:null,selectors:null,declarations:null,properties:null}; +var _2b=function(_2c,v){ +if(_2a[_2c]!==null){ +if(_29[_2c]==="array"){ +return (_2a[_2c]=_2a[_2c].concat(v)); +}else{ +var c=_2a[_2c]; +for(var n in v){ +if(v.hasOwnProperty(n)){ +if(!c[n]){ +c[n]=v[n]; +}else{ +c[n]=c[n].concat(v[n]); +} +} +} +return c; +} +} +}; +var _2d=function(_2e){ +_2a[_2e]=(_29[_2e]==="array")?[]:{}; +for(var i=0;i<_4.length;i++){ +_2b(_2e,_4[i].cssHelperParsed[_2e]); +} +return _2a[_2e]; +}; +domReady(function(){ +var els=document.body.getElementsByTagName("*"); +for(var i=0;i=_44)||(max&&_46<_44)||(!min&&!max&&_46===_44)); +}else{ +return false; +} +}else{ +return _46>0; +} +}else{ +if("device-height"===_41.substring(l-13,l)){ +_47=screen.height; +if(_42!==null){ +if(_43==="length"){ +return ((min&&_47>=_44)||(max&&_47<_44)||(!min&&!max&&_47===_44)); +}else{ +return false; +} +}else{ +return _47>0; +} +}else{ +if("width"===_41.substring(l-5,l)){ +_46=document.documentElement.clientWidth||document.body.clientWidth; +if(_42!==null){ +if(_43==="length"){ +return ((min&&_46>=_44)||(max&&_46<_44)||(!min&&!max&&_46===_44)); +}else{ +return false; +} +}else{ +return _46>0; +} +}else{ +if("height"===_41.substring(l-6,l)){ +_47=document.documentElement.clientHeight||document.body.clientHeight; +if(_42!==null){ +if(_43==="length"){ +return ((min&&_47>=_44)||(max&&_47<_44)||(!min&&!max&&_47===_44)); +}else{ +return false; +} +}else{ +return _47>0; +} +}else{ +if("device-aspect-ratio"===_41.substring(l-19,l)){ +return _43==="aspect-ratio"&&screen.width*_44[1]===screen.height*_44[0]; +}else{ +if("color-index"===_41.substring(l-11,l)){ +var _48=Math.pow(2,screen.colorDepth); +if(_42!==null){ +if(_43==="absolute"){ +return ((min&&_48>=_44)||(max&&_48<_44)||(!min&&!max&&_48===_44)); +}else{ +return false; +} +}else{ +return _48>0; +} +}else{ +if("color"===_41.substring(l-5,l)){ +var _49=screen.colorDepth; +if(_42!==null){ +if(_43==="absolute"){ +return ((min&&_49>=_44)||(max&&_49<_44)||(!min&&!max&&_49===_44)); +}else{ +return false; +} +}else{ +return _49>0; +} +}else{ +if("resolution"===_41.substring(l-10,l)){ +var res; +if(_45==="dpcm"){ +res=_3d("1cm"); +}else{ +res=_3d("1in"); +} +if(_42!==null){ +if(_43==="resolution"){ +return ((min&&res>=_44)||(max&&res<_44)||(!min&&!max&&res===_44)); +}else{ +return false; +} +}else{ +return res>0; +} +}else{ +return false; +} +} +} +} +} +} +} +} +}; +var _4a=function(mq){ +var _4b=mq.getValid(); +var _4c=mq.getExpressions(); +var l=_4c.length; +if(l>0){ +for(var i=0;i0){ +s[c++]=","; +} +s[c++]=n; +} +} +if(s.length>0){ +_39[_39.length]=cssHelper.addStyle("@media "+s.join("")+"{"+mql.getCssText()+"}",false); +} +}; +var _4e=function(_4f){ +for(var i=0;i<_4f.length;i++){ +_4d(_4f[i]); +} +if(ua.ie){ +document.documentElement.style.display="block"; +setTimeout(function(){ +document.documentElement.style.display=""; +},0); +setTimeout(function(){ +cssHelper.broadcast("cssMediaQueriesTested"); +},100); +}else{ +cssHelper.broadcast("cssMediaQueriesTested"); +} +}; +var _50=function(){ +for(var i=0;i<_39.length;i++){ +cssHelper.removeStyle(_39[i]); +} +_39=[]; +cssHelper.mediaQueryLists(_4e); +}; +var _51=0; +var _52=function(){ +var _53=cssHelper.getViewportWidth(); +var _54=cssHelper.getViewportHeight(); +if(ua.ie){ +var el=document.createElement("div"); +el.style.position="absolute"; +el.style.top="-9999em"; +el.style.overflow="scroll"; +document.body.appendChild(el); +_51=el.offsetWidth-el.clientWidth; +document.body.removeChild(el); +} +var _55; +var _56=function(){ +var vpw=cssHelper.getViewportWidth(); +var vph=cssHelper.getViewportHeight(); +if(Math.abs(vpw-_53)>_51||Math.abs(vph-_54)>_51){ +_53=vpw; +_54=vph; +clearTimeout(_55); +_55=setTimeout(function(){ +if(!_3a()){ +_50(); +}else{ +cssHelper.broadcast("cssMediaQueriesTested"); +} +},500); +} +}; +window.onresize=function(){ +var x=window.onresize||function(){ +}; +return function(){ +x(); +_56(); +}; +}(); +}; +var _57=document.documentElement; +_57.style.marginLeft="-32767px"; +setTimeout(function(){ +_57.style.marginTop=""; +},20000); +return function(){ +if(!_3a()){ +cssHelper.addListener("newStyleParsed",function(el){ +_4e(el.cssHelperParsed.mediaQueryLists); +}); +cssHelper.addListener("cssMediaQueriesTested",function(){ +if(ua.ie){ +_57.style.width="1px"; +} +setTimeout(function(){ +_57.style.width=""; +_57.style.marginLeft=""; +},0); +cssHelper.removeListener("cssMediaQueriesTested",arguments.callee); +}); +_3c(); +_50(); +}else{ +_57.style.marginLeft=""; +} +_52(); +}; +}()); +try{ +document.execCommand("BackgroundImageCache",false,true); +} +catch(e){ +} + diff --git a/actionbarsherlock/website/resources/static/feature.png b/actionbarsherlock/website/resources/static/feature.png new file mode 100644 index 0000000000000000000000000000000000000000..a15b531e0c714a1321694898ab24db5301bd57a7 GIT binary patch literal 103689 zcmeFZ_dnZj+%_E58a3LYwW6gqr8bFGHDeVqYEyg9*y~G6&DO5H_oj%bT@)3yYi}Wn zE~OOD>AIf#Z@7QCD~P;EJ~_|#INrx`oQ>AfRHnGea1#Q7P#{zkbRZDImk23%(I}=_o&i)MBB#;0K}?YRU?b%d3z4juH+Jr$%yZn$(rL3t0{1 zb-6GB@{zO3y}OG4X_iGujS1d=GqP7PR(Z&d(2;S<#l7C3^MJByAgv7}ecI!Ptiz?o zMvf~xvjXm)FIA0Igl^NY-jHi6wWRCZ$Z2}Sdq_R#@i)#PGcC_x7QBvQ7r3^}QixUv zC&{%VQ$fBQ>TnJ zO@~#^v}lzR9eBjnzTvY>3;Dmj2R5Q2d3X#&k1dywYDv{NE|* zsesC6lJNXZPLyrqBl)H|1#OzG4DG$Dy2Jpt<}v)C-u=4Vc09adtlX~ZXOodH%Dh=q z@4iY>@uD)yQrC_uH{E_r;OvRX&Ij7nqhgA(lksj6nR-IQ#4

Xb+2RC%hIb`9t0G8)?L;NXT`jkIxuI6@Fwr6Z=6j>I)J5YvQ}be3qd(6u2|9Mh`{sIL8Q6B0;Hpyu4u{87 z9aYpC>+x6G>3GV^wyNgp|5dF?o)A>!*!BFt(>mQ;wTG0J*UK@J=H!reZWQ)jMjjUb zQQz&v&x!3aHB+h*8|>Hf=()(Sr%(Iqo>k41ot{^klwZ{F@cs@KmA2BOG_Xks(X6y< zJ#7jZs5~_4C|##L52`#aKZtg{)Iah_4V`Mr$}OlQ^Ip=OzN{R?f(o z(;hvVK1br}=A6@{{{9I)mq<7>Ok+~kexF{tt6elMaWi~1q-=8TR`}|USKgV)&m8=- z{*@u@>c$({<Ai$wG0yFGSx91qBq-c`fWP6{3ieTQe|K<*$KYWfI?ttr>fKVXgS8*o6xxH zjYCe=VIgnm5mXgY>05rY4}XRyQacK8Tv87zC%kyuqoIGJ>_RO*2$)Ko0ijDHE?0Q5Iwm54~4teYZ#VJ&vt{f zf}`+f2FGTt)Fw_QOR<%dfx)4bYaZ&-1j6^dyRZa;wf8`N_2Wux7;Wg93Mq7GJH0AJ14(3nA$}Wwn=1%A2x;>3}!^yEX2lji1 zCg<6RXFDHU8i%|C%TGKLQ;D>rE8nY3n{=)kp6FO<6TW9Gxqmd|n^g&O)5nO{u z-EwOT)?hp!*~5xZu(G_J)S?1^JqPD}_+p&}`EhQbo&RF$c&haHxBZ*W#~fk$E02*c zwZ!37fqK*OdN7;hOOC+qP3sKon*-)O%xE($N7PDMe-U9Chd>*~XPPU&Q~#7+V2I7s z6+h-?B%6M};lDRl_S*1;>CgEmQU|U-K%7xDBtfi zPP}gsll)k0hjK^G&Ym)4U|o&^N`>ujD(sAzjoxdVYtieh8CIfxQld(@Y?qQVWi4kn%?x@m5GB!0e#b;#DzhBr-(#{;+uJ|p_v{ujJz~9$ry_(r+ z=c!+*(lAs%eWM-Dg({BiTp=4rk=nCZQKq0lxu8L> zuW^!D4KIXVqin2op115_Zp$o~?VQz;J(2cwM%F5MD+h9BQR`^53j`1P>^ly}^6l4S z21`Zk8FyZ+6H<3&Ozf(Y)YMLCM8-HAy2K>Fy*P3kN^lwE51HHr=^->-T6R6QaqSbm z8cK28qtD))zKi2ZhI+wd_3V~j=I?!|8cB0xNFMq=emu~^af)d>aPjPP*)u&)7@C`q zwTqc~_h+R!iobr?=J)(V27b;(>rI2LaKxJ(NX`C|x{?U7f&grUW69RD(G(lS%QQD| zjLF_ivC$Ihqp^8EggQ6k$m+IjdiUpvud0jCSE7)tuw=a9EUJimf8x5<&NwSmb@fGc z`rVApB1G5D9lNX#;)?a^Kec2dI1Ft(_4P1CL;Qj^g}WB*6zWa;IixAIX^mgQt~2`W zUfXk?Bj=DDv>nNq(I93vt@xu&({D*PpiR>p⁢zmZM^?*deCJB5Y}CDPqn2MCtZ* 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

D}W@mtU6~XD)XbZYnYe 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

pV13*3!zHFxxM_#si6 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≻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≤kHPf7qCKqJeVFoqoDCrk6OFUnMAnAMxktsdm zrf&GLHh(+gh*1S&6#BX^_1K1`b@&YU0;=dL>}Uf&v=S&2qjZc-%&p1gmg6oD<1XQl zTa%g5tddig2D$MNe7JIu)FQ}K@uz+%kkl(%KB8O?$MF3Q>1lZWQ1UXWws^Nog=S#wz#4T{T(F3%guCZ}?b#?VDi_c*#qt4Bk z;VBrM6h~$@43}|B00Vv`Jz_+8BrJl}{<`L4CqkEUwe>6ud_Dy-pAqoC<1XW3A<3se zVruzubjdA|6WQ!g-YPx|P{wD=3$%55{mX>P9Xy?rXOjJfQ`nQGH#RQZ}hZ6FsCRr^uoc zTEs)R8lUd}Sz)bnv3g*leVvv(4E_RD#NpQ&>t(MXYnU;l$(LQ$4N$BL_q+H)+ zRV-6Elcu~{89qyWjnllVEh57DwH2aDE?xN^i)t#3A}umPzCB7}9>vTEg0`j4F>MgB ziOnU6TYE4q`Ta!91Ri5hiEb#C-g5rO9}1&Ym5=|g1sJ%R`n6YGC{=%`T*jmPE$&1` zN!z{n*gBiTp|`cQpTp~_6KTpbvKrL<*TRNv=hM>a2KDy+i_!3U;5 zt)%9ZuYM-s^uzIL*0b{?o1jxBad?+b$qOjBfHLyrb`p5Z|rZ5kfMs)AS)wy>NR$rf!1tmJB%_3$3ZrDkN%KIM10 zIO)$97`G$!G=1e+`Z<O8ymvI-8coyIIOKZgrHZ?7}C&nk*a3JRRX8X)_5@0>+ijSPJwq>6` za3<4R?!v@NGFy6}HQR2@D=b(;j!TLvm!P9g!n%<}N;c|{T`is~q2^qd$$@k!2kaW_ z##_@;m3&F$6GE#l?5U-z*yh$MpG+ObL42Nd6gz4<*xWE!5ocaav9wW8RbI52F012+ z^Y)QG)k25yDN5|lmBgu~iU7tVYADP0ZUiD6W&LyVWeBQ-Yq!Pe+i}h!2euG$XQKAz zZH&5LsuD(e)%>-OrXGm$P?EL}eCfSTWPEl@fq!51y;E=HI;N6`+75duX5dpJf+cz% zzGHCT>Lyj+AOHRPNzq8ZvTswiy8s5YZ|>zxoi2~NY39 zxDIyzXBm!ND4*rLUT$X*EyvoFCuGEc+2f7pF#xo1d+4M;+P6QrcbNM1sPvs)0j=3O zXf!?TBYobq@#XciCV&Y{=$wPJ>Gm#*Czi2DA$7YRzKO8)h!v%j96IKwNs-!*)USK; z%&{5R|J;=OKUFqA2A9NC+-}DBWvt}1w;l5##)nXP=V_bLJ&ZAMt=DPtjA~iB*x&kO z0ijNNzRcK@SmQDA%0r=UxyB3XNIZ@7xj`@<{yGd7AS2pq57(*uNET)Clr=w7D~Eow z94$q+f)$5Mk-x#m13efh#oKmfN&i&~W&IgEK3OkPCWGYZ-YK65l~`a(Ovq(jM$vhD z4+&zI2)J-{-PGdy3JXg!>`%hb=!38-uJYTb2a+sTPfkg{@av@%6(oAYAWvhe7K-9{ zYAL%)_X7#Rj`XE8@YJgGkC{4(BukIJA}`Xpp}y>RWyjTAp1GL7xMk+O_$yWvn?TQZ zb)5JcI`!8aY@U+4BS#nZBt8}NKYCyvDRBEEA%dTRg zn0}smo@9pmZ^MIFnuPa+SKmF@xiFBH+R^R|G8H#2-RT-fBvBy3>zeQ*H{DG7a7j+z zqLg}s?J9jc9_qOo9w) zxhZ0`c9I>=Ox?b$(=1OaB5{~y1n;y5_b~7)%H^jbt zVTxUG>N%oLtg(M_jNI$rtIias-)P-#oSW~%pZh*7J)ZKL;8TD#eQ@^-5jr_LD^&;+ zzX%=pP$D;ELxWz4zB@&PiIHFur&BKdQo`1$0!Vi#?TAuM{ZXSPa00^x3JJdHnHAI9 z+>V+LQfBKyS1CHq=)A8L&863~5XDoAvzrO6wDFe0(J<^guV0AtOF+d7VYz?iRiK+% z98=Hntz8$Wl=BxRHGZoR=e?MSdrkt`*p?s?C5XVq57Y?7MM3*kh+`L&CoZ37{VvZp z$Mr=ad&9r9_#e35lme-=`(#iH8Q}(HpYw3}(;%7|YNm*eSN$%79#pQM3BKg9JJs=t zNHC++^*|C_M62j7IX}X3$qo5qxj#@RQ6zSOo-okhP_o+{xV zXd+>!kN*tSj~n%fObkAu7nq_=9?UDu*_?N3%@7}}i@}gUD4%HP8THt4;i#}na1*iZ z&!w1g(jzQIYbZ=;QIwSGb622GW2W8vr;LhUIFgo;II!w|f%PME@-4H#)IlGqu7~A) zRd_{+?TXfZ^s>WyYGe}h0&c8CyJhCgs=iT=8J1bgsgOR|7sP{RPn$@o?VaIu%1rk* z7i)g_aXNcpb5CK(%ruhRU62UcEMT*j8-O`4ciUGQ(#qxxl*qN&IjDu&g*>PU!0ueLSXH}4u@Q0{>n?>b$xNi!?9LVt-)2BN(bVw7v zPfE#d<>r`pyXbuN>rx1IDw7Bdcl1py%kqk>nfc8*m|Hw-?o$+1ZQu{{MVu^|n4S~2 zvJBJ_Er=aez9vnSW;sw!IOVqFX*)xaQ0#X2Jhc#a9pHrOB5s8ofSCE7wa!)HIbFw` z(ouP7r?VYIR~+ko2^ul~r~{s~8?7XP?$Y-qo!v*?G880)l~=YHDb1{Q1{lkuIBLT; zxdF=0-Igs(9kJ$_KVoCy)aZ_TB%)2Al7LHnx&&+pQe(V9Y5PJu8Ei>>vTYObxj?zj z&TQ@i;A7d)L;{!&BC0YvDqrFQ(h_E=Wt54$wciV?*FOi^-fb_T%_)2?rAJIMp&n2v zpLfEZISlWp#Nk6+syXfcT%{v!?ku1~Y6j(ADL8X+B@+}Q*_bV@W{V$h2t@SIh~4)0A`ew#(T^jf_EVbHXhp|a>|`Pat|HYJvFxJa)sv`DOm?Np{Xd)#ch z(t==qwV%WO(he7?lx;N;PlShmtEpa!VG&+=T>e44R1>E76)SZ$Oxl-tF<4RkU)=Jy z0)wk+TXBh*l(hdwo9A8}qHlL{!74XG-ZeB>F>Qz8+{p*->#psS(yFcFAwSI87%E7y`E zOF(qF)yioLB>INmV{J7fl)q#_L#DB?4_N4**Ud=J(}5Wm5-=Gla~JBwnPamTNQb-( z9;(x>3vHsZ3Z!j&W)jqI!<~AYz7j*tf}Eeb)OAI}8?yURm#KD^ROJiU?^? zF&`3yF>A<6aPnq)oWDXAE1yA|>sx>9MGifdz3^*B1p!`b2<0Uiv%#(~!5dZ60gaRV z-3!&Q44OW=ZFhy4o1|ae;VQS8`Iv8T)Zb@dwXW*WwV1IFZvka6lWMWj?xYOmE+820 zBif_jAS@J07qBxTh5m9B2x7tS(2)I*IY+sh7m(f!O3~+KCFUFl& zBfp4>rdx(|nCQOpJRJ<;X|R{3)>hTDJ;u~#Ae>au3aKLJvt9YjK1$=X-NDI%=42Z} zRU+*?_pJZ@k(_z*~i?*?-Phv<9HCP|4>*)uX&DL+x^9I>=>|KY3%59fPL8O915mC9FYBvBsWdn?M` zon{HcprMGhWEL=PwrbY%>n>nlnZAE=53{7XZ3vRlp($OWZ zBS0!2w<)K=W%tn2LSBWLhN@NPNwv65W&EnQrQqQ}jCYol#l2yF-*+hu`AK8sZ9}dq zDtTzaXEzEGX_6jKH5WhyE3>qD_M8*wI_Bav? zUT1+lY+0lNhd#yJ)YLS+(rw-M+K$Uto>JKF7_J}yA3s+gid1GUJbTBPze2;Nn0+gL z?ML|?i*?T-`$7tF7Mu55T;1Gi%#U^4$=-GbW*46P5+mF}?((26lHFbqvMNvM;%igF zoo1N)`9U%=qyIW&E?CLGcMh7_`L!&b=BHW$wp+!Rke~tDp@@+voPo90yb z=1JU0U;q9Hi`?4e2LR3nr1`bJ$8+H(dzOcKxZq55t@v}(=<(aW9v_qH@u?+}3fegr zted)Uy{2N9YgRJ`YKIw8^e7yWu!Fq^h3y1SpJVp}S8$cYCv};m5Nv%T;TC$8}9K0o1NU%(9P*K zF$sw=&>M%bExYLhh-?H9tvCsdZ^uOv2n~JW&`J5|_8-Pw8dIp3fQBn1gh_KK&`7pa z%}c*vyu8znhS|ep9G%(9S=d-Cy6M@6Zf}~eoj6t)X-Md!{|p#s!%{zs%<~d+K~>7s z6P(mc!ckS*j}W2QJ?xnS?jrGL{YaK9Fp6(#O!^|v(;>3P+I&fNaZ%v{>(`~Thcnjb z+X4AJ@Yt!st|b5G($dgS%XsvB7~2d(kcP~@i7tUbU;d9DA;#68aXoWQYbh2ZL9$+x zLD6E;)TmT=qHlWh~1BsIDMO*Cz^D1FmcuKpXYwhdb<0rrxlmtE1Ny8xL`SOaAct%+_D zJ|77>>)!jG_5dnNE=2Ec`r1k1@X650t6dVQxnWLVdOBWsvy3yTvn_zpd&Ngksnz9+ zxzg`wRbV!Yhv_)I&XY-tA%wTwpbM#i=_{*lbgYXmi$e#MgpYe7-n7XwBp3mZUa^Ly zp>Z^gHzGP3g96kggFiw-|BoL(Qbjzu;SAd|8FDwgPk^aRK(U_vrXEJR3tS1!e;@CV z@1ITl7P2E5PG;XeFp1s-#`HW`DW5JwUg;VUzY&@4t5>D!Hi~~FM4C{H^pK}lLNzx` zEqfYbUcVo{(c}&d7Z~}_XmF(%l-G3mnEXs&CsqQdhbnpaxpdLW)w=Q9sUQ~^6};SMnQ_nnLQtXsg18a}7JBL5EZ6*7gs zULMT@a%G(EU>HP2Xf-?2$B3LECoq241L84rfB>6XS{`I`-zZZ7xYyO)4LgsRg2EVR z2$mzIJ{k4;Pub4bn*6Y?O}QXUNZdw2PY5zr#wZJtnE65wkMZAIf~|V5OwJiga%1gL zM`&(-oK#pSd_>v>lb79OoMcS36 z%GgNH>vf_O7$RbkUfLE__Sw8aX^_Q7?#fAHf&G$voywD|&!DeY%ce3FDLlp9&R&XA zKdZO=i%DfQp4ll&w&}OkU>P)%5~)4v=1-p$&*o!~NBP3o7{X`A%3z2c}cS>*E z$X?C6>8>z5WgYD=h|sAS;TYrD3>3y98eyrsEE_tp77m!#n4$_+v>!{`-yI*DI%{7o zm|$WE?qEd=9Wuc`7b&DdEG!sV4YdX_{oLtEk@#S?toCBm{MOAC!>N|2O7V>boC7Ft} zvh}C1N&Q1E)_-=&(Kkfgg27d$#-bGo+e3(9lg#HF2bV|~N}1k6U3yxlZLlqdhwHQU`)A{A)#nlxz$Pz5@h0~~su%EzuZ~l0HyW(|J4&o`c zJt7$RhU%sdW$4?>pe`wb0JYSg)!ec9tEoX5{_*R@=5{RXUA6W-G zFoK!!w+c+zNt5S#KrGoxW05*!@^IQ)l!IjZrR3joy;NCK*VCmdJ2ID;R4~9^ibF8O zk*nJFG<6{^sAEoMwOwe6<9)Evsx@a%=eH|TtH83f`!mXuCTI=HNNrbZzDAMqaf2P+ zx<35Kd;qMs+$wxw$I|!6E;TUz)hamxLaIWkW;LjY&lc6sg;!AeW6bma7!r7oz3s@p zr5i>tAS>Fe^|%EBog~o>Ljx_cB949FRY9hx$xe61H|;&GQlx4u94k3nd61ivx=h~R z>yl6TCLs9~ekXEk*DRtnA26nauWGF^r;FA+$EFCDcldDRNmv~@%&alF#IMsSI`Tq0tLlvgrD0-Z^t^k zIXSoaG&t8;PUgBH4*oh@EgV_FkAQGnc?b~$xb%X}-_{Zhn~`^imKE)%UWb=RwJ~X${ z_={rTmdi=0?Cl8Ps3a~P-)K==mq^%7` zo^#@F-s8PwKSS6-fu_<*x}Ttz)nUfAas#;4;}z5Sz*}=75`%)vPzBBcpnZG;Y)xI~ z<6`6RV<3r5JN|?g`0_izRHF@IhF%N$to`)72ekmZK&C5z2_73|4H7aAZ_P(Of@47; z`<ph1eaj*xlkd5e3B_JcbCKHNgQY8e6Z|(!md{280i45CTxz3??vwqXm?9 zi^3l}fPu6Yrv@5?Zg{T|fSmi`*1u2Ryd-26sq0%d^W9wQYTb{8+%pA&CNw`ico1Li zrl&Fq)i3ej`kP6WS>c<_945WAL|iUYab-jwG7W=T87*?_WC&?Z)gcVm3(?Zj<8@(a z;%32qTF0&0JR)q#t-sK0$Cwu!saS*@8g7EUXtx! z`O0rN7o-(7?%oCHh7hd?1s;RcVyPwJrBglruGxHbUmSCmbTd8I?{P4cLSAl_(*x7Z zBLM<(a&nKXh<&qaT1h<}0v2RIge^ql;xilZRPY!DH*u=wqOhq?J{bpaPhp6{$^hNzroOL7C7ecH9fXA(;Z>B+YdbG_dr6gO*7ZPFtnM(EP~$6Z62-MQU_B5q~v3JBzPg%Lf>Nu`#8kr6r)2GUX=j;xzqt z@$3GcP;CFt-D8Khk_i6#^^=iVSmUZYDf|-f@E}@lfDcjql%GVv`60^;o`-%31D0Y} z)iKW*#vZ{R7|Ou4?7rZ+H74Tt^n%Q9!RYg#OsQHKGBZFy3wg%dPej^({!1ov+KF4a z>-UaFIRb4bD9sT6|3)(9Ti0a2-78!DX}OEJxQxmz&kuMX!shkQ%JJ=_R7)m7nC!Hu zToam=kZer_)<-Es{@H>;-sRCaIo*+-$m`sm13A&JF-+2`a=QMtDQi|bT;|V|v43&A ztAH}=8FwZ1X(9KFpwUahZ0ksFcn7PE({Jc%SDpIF71DUZ^f>x=lMR)COCKpU_|VOy#}#A>z_YZX-~F=$2`z1= zISU55W?MaBKTo<|H&vw54H>vjO2Jih9d7#IMDGH!_>jMMKs7@FSI5IsGC*1f>SsZh zy@~bpn7?=M2mz#zp!eLOHyj_R*lK~SEf7o3ebMZ@PJK9_>)(2wnFeC98MbABn~mNm z;E60pdRj@ZOiP_mx=2pwtl7g?g9kF?x`?I!i94KlUNH++Cm;{TaH)#uF&U$Q@T5e6 zq#*j2(Z^C{CYS+ZHVErf#KiN3*7K8HfuH0ie}-)P_D}r8w~&{@`h@jQ?Hli5eOk3_ z=z0u&wJq*PMt0Us%!4F8SRk9_+uXimd1`j$@S=FTWiFAE7jSkKcv1#Ux$&06ch0f5 zj0CaU^@|9YaKtR>{Jjq>y`pspAZgzV0T&h8jsIb3vcw3*)$;e!Hec*q8YlG>i$tK} zz#5YJln&j?=QRH~tQvSnZsKeHgbTj;g|8bpL)50A*4#7J*K(_q8GlSqMuxxJCn=j2 z>dC~jeV~hKQh9Fe@MTM+x3(9U^Op#CpW#kt|s8$*%C?=2sj(<#ROwzB7A3UaX z6RWKy>khQcx+-P6iH%A9?ON8E;wGucT$oG~X_GjMc`y;XCy)VvhnJL{1TPY=A5*bW-*6IuI#Gk_$KN z!V_o;L84bPP578qS0D=enh>}xm!wb6#%p@7cFlc27Jvp38Hwrr4NB!}N`>N$KN`6n z(-AsHu0NX?=!cXB0+Cah=+HvOXto97Q1W>OGBBbJ={eG{5dBXTVJrwwRgt+`Y9m@n ziVR0vf*iZhpj@MT+sWLnn$CuTRJ#1a#%&L+3fy|3Fb0v#jCvTgPO1VsF?|NoQXQXK z-C1Kn(8=$TUZZdke5B>5&d?WZ{I3&4vc~s+{XWcz9ZvV=L@wb+W0VLQiX?U_qe2zO zMZT}A%A)Bzhs;L!doC6b-OL)ji;PFQwn{rU@4H51A4 zi0ycW;JJSYScWITXacA9z%Z1jQ8qa_8HY#qDY+q>!GEb+d9wv0RWB(n*GOVuG8lyn zNgS_oS?H^2jdqrH1J=A7@mq7Wto=;^B^uTtQ*JpP=Un9+EjEUcL%96n1%|+9sfcW| zO8#SPu0dTR+ROjk{URks$KKu9*3J0<4>wq)C)U=+;P(B3H?llLD?Y>JR5?5%BhO!r zaN`COWISwQ(gN9xj@houn~BLqU^;prVM{lB_{%#(;ud&(mQCoF0jcgd8Q_#1bmM0VNAv81!$mla#@9#&O6zjN z(`wDy-t{$;Wm?_h*Wr_rz4I;W$*Mku*FRdX&&Q{gxYk{;f@dCtlFY!{sdjUkoa$@$ zN)bDa?w5LgluVq)By{onJ2&fi*@CD%_3}KfcbJfLEPm`&%qecJGa+RZO>rB=dJXwL z8+jdR@m$rUN2UY`GvS>YZLq+bdMxbZH}SQKirTJ;e73h_o98VL)ykYRzN{>rJwlA) zAso#?L5(ugExI(0AW)Msk%_<$LVa;KyX3x{q+^3122{kx=z~n1^S~BE%^uN#smj9L z%6 zRipuO=7az`6D=aO5qETHQeVaCnCwm0x4}&-JGNrM_i^_ctX)-$Lu%~8Qq!Su=_+MSQgNgj{@N;$hJ<@C(ht7s%(0k7UQ)Gct z!U|qLthzv)UezS5D!*><;PBE3N4NYJZCb1CESRuD^s1|OCC2x9Ii`1)C=FYhqDGw|kv@@u#KB?>fG$UD1PyiX|Tkx<5CTU@!X)W ziq?fD46l!xi;q8iw}G4c50~@F-c#Bk{%Re%TqVqOtJP#=<8}>lg$0epA!B10 z4fczWat)*Nj%VoWGFGn{Z&%cKj1El=2q7CQ6Y`159Nzq5K<7R_|XUNngnq_F1=*G(g$H&J_(fv!8M>O1mSi4i9vRuXtj{e75 zS{g&!G}Zww73Ra!&`1{g?bH%mwqq; zmU7_vEc(qF`Qj&JfPo(JZ6ILCjVYP6uMBbWUSz7eV$vI?n8Qk(rf|w)B@`Gn*2m5L zvHa3K!jkmkND7zO@xg(|6OgYd0ckWnIP)D3(s*rjehL_{X45`ov=@+LQ_5H+;4uaD zX!@Or^*fblu&PYNl}b(%Bgz8V8|SL%>T(Ix_$%bQkK9ww{@V0(RAPL~Iw!u>w>GdI z%VE>S%fZ?=UufAFepHL3WZvpNfUdbq?$Wp4ywzpH#0M%=jpS-s> z!<%L2wCa@JG)7XD@1ZMA5u=IU=ksI|YIZVv9n|%=S9&VYh81Hb`tO@O<Yy z3k{X!+Jyskkkjse2g7nhgSf7@O;j@GwxZ%4oobEEq>te9RUnR<8>NM$BaOrxKsAnGsf zP0dRC&mtTb@}W2ac%eKJDMBr0PKnwzDj$KL1Ge z6I;hXqbm7aPJ;qed26;(YzVbm=ma$^1bdtIJvLP#_boolduB@4&vW9h$F~a-l(v8d z)P588bL9$dcTmqh2Mw-gZ`$}xIQq)gx?v1iRHyDB!nsvXmvdiB~5x$me`Qg1_vDZfCb&wlLD&}vc`rmFoSPg{t$E0W$ zthz9M9URcX96i{&)kAF8M2RD%p2&c@q5}**J)l6L0w;WOaiMhy>ZSr?$6( zk2n9t4yQm&_eLI&yFdS_;COfbYux#FwZqb>_+>SjX?wgCLu|;8>9;H|Go8)5agJo+A`;E%DUz9two-!lAIp)Z^EQXzkLxF zP$auVG)e=Zt6_YTK)vnRR6&SOuTg_pD<4+J#&J7Ecq;N{tDnc0G0=>-Nh2KbWgHF1 zN7Ly=)wJw|7ZT8P1wILe1g?pEg=WVh)c6j}+Y6cTeutY$4pZYb6S)Ab=IBh1VN(~u zC1=6#AhP2igv?$9@?IM7?{P2LaW9+QEt;KY3}mcuV`)b;J(6}n0B0Uyd1}GZw!8`% zy-X~=$%;Hj{qr347c9k4Zn6tYDQxka!7Zi+`e^pg`S>a$&*qITp7z{9Lcn>@8=u_X zr2DFFjBQXRiV%sqqniCst?T?$BqoBRC6wHK!5?e~bk>CcNU?Z#PP{jk`MLw{Fa>7{ z=-2W2yt3>1|>9%0@%<%NnjHZOlrWk>bZ3z=zV1iQa$^C&2RkO-R}T1 zZJ#aN?2o{82QOR#0i`U0|3}kV2UWecU;jv#u<4fW?(Rk!L>iIq?ovXfyIVj+x}-x| zy1TnOrQUl#@BIEa&N-u=8TS6hb+2o!&l&--o4+7jI0)_i0$267t#dD9d;_OfeI%|! zVug*fgZLz}$79;e8vVqGgCirXU>B_Me0|FGza}~%#)P9jd7r_~f-@5Qt5!}aVdwDuN zFJyb-8wGR)V9)7#SPcYFhOWp&#m9rdKydOSKJ}RuYTQoFu;%s)xQWQ&a@|4ey}5Rt zK@{sy1!UI0%}N$PnHyTNWlLt!@6E>$>9#J)9;k1-SN3UYww|&DVmLEM7IuAoIqq6= z+pIfkoPAS^iz?i_MtIV)=>cNvqiPj={O8>Xck?d~46v}Uk*g+%9*g##ymmUOKXFj; zgu8%f11;W8Bffv*?%}rXO&Be(qr;tU39!f`nF7p4)u|W#?9rRjp*1_E;2gFX=t>O5 zWf2lB4S;xv*Pd!%XFL{eh~Lg+&UVvb`L?}dpipqIR3s@^^0MdRYqo@KuvNmpUGXIY zH#sEP{1SxgqX05u0f)9cf(&lSsmq<@B^tZ&Vt~o(-+mFMB-Y)lQC1(olD#vQRiskN zZb3~6d~pHcP|ad(#U+o$3h%4&um1~Ef(&FQOa01F@*kEs!xWYMtaN*UI2hL7X%7>} zS>q<6`$16DlD2B0C zMnuKY6C>LE#Z)&H6*YD)TB?w{(|b3o5BkqDBFU%oZ{O_OO|e-9g;mUMSy=LGV>#pe ztr@UYg2Qhr4&9SQE^#h*vU)XR9>ZS#-N{iE{NZ%^RZGE$E_z*s>Lko|(eVwj=BIdN zNY%r&|MTv~DE3cw8**v%07**IhqIrURkv?^E04~<-mN|CRQa514vB7@b$^^kOIF^U zzZ?-jP3*k1tIn1Z-P9QJsl^vwKqVAJ(S`ns`sUdCtK>*tYTaMo_)_qwfSG;uK8Pi% zDy}1ym@r%BQZI6|JqcZ1lCV%2E{Aq&^6rVeO1iWPAM;S30!jUsia2R)&QI8*y{C`? zI<&(OM)pu%?LpG!NfjYrzc`TA5Cql?Xre=t84oO7wtwbFZ!j6(qZmJ5qzJ5sVBggT zKJb+{Y@mP|KLLP{gkA>Vj?ni4AmIC6zP8VhAh5N_0Xg>~(Q5{%rT}7)2h@qjd-*Z{ zTmL~Tj-i=j{oi(ZI?UC8Va&nL4<#+VCXg9?g-Fr?4fF%RC0Yk?;R}HNbuW-{Yyh@< zs0s(gczXjM+}_dARxh#R7Sv2fm+1u4cIpbmUFd)YwU<0j#!DF^Z;$K6jpEZMDT2dG zejOB4kHF(c3PCSZg7f7d^k7_rg zmC`tI3vn`d9m1!qgZxDM7FPp=p>%;{8t>=E-94*Q@J@;!G*9DqrsE`xIV^8R{{)LM zm(ztV`pu^B} zM3|83Mz-(iHg?V(x9?FEU)}_Lq-6iKu-)LsU%EF`2^?ucLPrhQ0KUa*Z*R|!S=bS; ztz{*R0H-GxvTjkLzyJQkuHaJlYLJ5Dzh)3L#Sjz{3N$VQgk-Rh%hO^UUtU%=HeTf| z3vNFj3XjDa{Cyt$NiFp5b+Fc50IV3&_uS08u2>cs^+E%a1=dNW9Pi_FxYlo^ivT^6 zq)2nlK|n%c26C{#2XqFaqt#Y_U~Y06*`{sktck8;I9z0Uf+Re40uL95fRDrb?(+i} z1ll`lttY*%R59ZJ?g)T^sbTkI^&Grkusb1sITeN%tC@i-?UxTi4weI~nhgg7WKO%o zd>lV2Fs%P}r(s*ym`u`^KR)A%Wx^S zHA>-g-C@HO;`{2sm51|C)c~A4@Ot|ocG7n5)An-Bmf&h1?u|i_tJ6Q0ecf=^F4}uM z`x4&jxtf%@8|!KBQm#D0yBA`Ktf_-k8QL4J_XdxM0as(MK{FVFB9lsh($fgfG07Tv z`9@7SEdx1CJZz4ff8!W6bc`{G$aJCjTQwWyu|E##vCf*jb>xwrKfx;~3`Xdr!Stig zJD_8pp6-IzjVah8huQmA=}0U71=5H;H~{=nmm}=~q7GndL=y8wXJmmVnlAEU|G{N(-y7lE-|3XU**S`R` zEW@md!64emQq+R!t4uriZ|P|y!^PrqKj*6aT%TtJ4u>Z1_hSO(<$MwKtX)EdlWdZz zHv2RgQ-D%yG2RK^GS$8iDZ#D(iwFpA;0G!fIF!d8_-%8|2(ooL)n?#%Q7f((L4F1e zaRWl3ME<-<5vgvS4Q`%B;#>0{$4w=T+P=R3r3#v(sEXcGgP#wnP`B0!Q|Pn-TW(Y| zy(q^Ag@LB$<7eRWV4Ozb0vm+=$s*#DBzv$#c3wtHv%~AVb`ptEvwc)clfLj-B(+ggMSi z_`z!AB zK}pG^7w&$nLINEHi)Jjf@N11mVa!pbfn!(vYxX`+kO=d7+SX~NH#wXhZsy;P_jPwk)cKs=;a5}`^Hs=Q`T1= z*J-bA$&lxhC<}MSlrngu3_Vv#(}tb*{(N;hm%%@Ot{J6B7(Rs1n&~?de(NX8I|4Ei}cdj8icz3}f7IJnY(06tePjkc_fY#n{!6|z4 z_vPc?4a-Km=a*RbVa307@N~oeLdjDGPV4te9$nWsu5XgL?J*R-jSbX_QLcoD%V>|} zF(7@5jrhq{j4efmE2mTFlPsu_viEJD6c{Y)aXib;}s7w>03 zPYOsT*Xk54xB^>I7oCArWk=y`I-efI{&518G;@l zKy%H{*+ai$TjNd835Ee);+s&zC|m0l78KXBo9)Yb8u$W4fPw`6z1(0OqB5M>3S$g{ z!SkG#$K95PkV6hHo(ZQlWFJ&T>8wEv(UQm7OQj+`05vX=^_p@B_Us{7$g75L6o zz|kB!->^1rVS&TZU^p%lR_9?%z!lX9|0de=rr2{Zl+HE?OsYA(bBCieoqR+AII6|~ z`i6RJe_VkPM3liz6EtT*6pN!Q^)qCoG~L4!>d$@nu1pS{Nu>RxtA8o*WgfYNT@n2t610Fyjx=Y z#Q89^^p%OV9jC7fm^{V6$o_Ns*VKW#=u?_%^=>v-|2B&J{#ioKb1LYWh_Msx180eW z)HYGzBl}v*;?QAKyN9kH=_cqm~eGNHZVI zb*4|&IO~ADz3ivL;43g*Ik~JXnj$3^wr66eo`ZvK4Kh@Z*%Rh+ zlnunVl6A|)R{%|W2T;UfkA@T>tpH9@4Xzt-gavM1V8*Mmp8Synyi+bPh^(H&T z;BL_GAjg0zp{o9!NcQV^Hc5-(B_#EbbY%EeGIlH%0U+SxEh6O8=yHtfk ztwls0yL?xN5k>Dze)19!FU$6o8gk@6xeYI7oG#z-OlWbj^Y@Qe@Mi``i=<8E#BSOo z^`2=9ddz1UCHOp@{wp2 z*2Xi^p;cQ^_gy1G++iBMry(GDGqBmc z$Y>tIgA)Nyt!7(i#hoE-B44OO9f=}eJSGm2y?@F+?5MtPb?#|MmHs}&uY&HIW!+~d zdZ4g@cgSbgVH2UIg1Cd860RojLrPztSVMuRP7n-o=Xz04!ii3|j#LRDm%Uy^VAcfw z@kzo#X$z|viwbrkQtZIFq()ZL?6Ijxq@3p|aNM*!FY%qFF;)DBs{h-eaN5Sl&s%;p zks&hby*2k?_HSgy*yl}0r2J3Z3V^`S=;|Snfn)pHndyfb{f^{{-)psUVmpzzISEAN z=#WvVs}>cOX$D2bTHckQ436TZQOFmHnFff6t)Wpw)fd@Tm3-Zzd8e>8L7v85IPz&h zIaQra?nDj6#K@m~q?8}~+)Pc~vSV=Qdx%E`zOITqvS-vgn2waDl|BFY6P*_qN6^CJ z(RT7u--p5GrmYw%FW;i&RWkD675 z@KPjl>n?lx6kw#0a$4vM(i>j4tZ_|x3D z8eM3vP|e)!5?zY7WV#)gf4C=)(Odo2^V`cO%b&NS3;|XI!Ta!G`WO{c6ZuE~jq|N} zL_PVCI{9_c+=(LcU!}gg_(%c*A0`pa6{X+oY{@I&MfU21R$-GyF;h+uy~UAbO;qbA zfj_F89r4)r zF9nj!(gt>IwX$girSQ5S@lg3~N*W}|f-3K?@BZx$qwFA~-osTgy~WEK6KHHe*}v2- zfZ&AFfEi*NtEsT#KZP2F{P7P#My-eGQFfS=WfwB)<%{vS3wu*&NF{SQP?z~Ox4{HZiTpiiIK3ao# z$)-r6cG0grNTo9Hxd|b|8TITyX|*I&X0G!|2$Ew0#7)YaS8SPF-7$KJd{P9aYH7q{ zdKw81ITHsjBUe%C$=N6FCe{b&hM&=_PLZr_Pjjckt$A&^iIgKfd^k#J&=OaDLuYq{ z7Rw+B@ijdoS47wk9)jMhOC~Q%#r*5BQs`B{FZlQsyw}c7X%sra`3kx`*x%dx;O3S% zUt?JVHhEibF7V})MJ0&U+Xmh#-dnkSj)y4}7Lxk5`@EGF+DC-&50T$%71n#v+tH-n zyO~3ndkCBgyf6OJ={A`$)SVMe`uuRYu|^d*?tZUXF=N$JwtGSTxFn)Hxob`Hls0wZ zRR-G-n`uxfpIz$nP`0{V=GgR!3oofX9az@DEjo<#lq0UtYEHg+hwfP*^;h@IphlCEYs}1aa)X!mM zf}2sqZ%Y*Hk5UmK`70gaZ%nF>px) zC!P9_lV3`4SzZ3r?Gl5v)q7v7O&t=`X`%NZvkZ_u=gxni1#sXRn6OQ*zPFxmb?SM zs~|FI&ADWVQe+#e0fHSSIKW26Nfbp}V>$Z6fbk(Z-`zG|>;CzB;s9#t5k!aa9esVB zI(-40^ET_}=jTZQqRAAl76wS}6DuEI79|fEosrQyN zUpGFL#)cccbC8NAJMZbjf2_}4Lb9cF`HG`UdnYI6|E>t#Zm*hPYZD1#O7T-$h?(c# zoF(;4Stibt$^{YLGEVv`wPoWs|NihN=ns_M_A+M2D+EFZ^Y1Hwue0@LAp)?OLARd| zbPWQ+J-~LVtTOVjDxK?S*@YRzt?aiK<47n2Pc+=*n~=7aD7@-i$!k=IgUf#$qG|m* zJu)&HLdPMoh6TIGbPS3@4(b-jj^-ND3ZGsYoCNfL{&wmg@5_6dwX5n7TDcT8gTUZT zkB^)nz8QEF@z~vb9}vCGq)owut0H>n-XE>fTjCz=GY#W8w!gQQ75EbKQ<4Io2ceJ> zzwJ<@UjyWfo-Rk1Pq&YF0zI>Jt5c^-X4M$Kv>foDhJ}3S`d63f*PAw!DjFpOSaFg( znB=&1N&M?mnrS??cyU;nEoOgzc6pPY2h0aDaO{jnWztF&qt z0qjD>qmgEr`kbH0Q03(OT<6@eDU8gU%sm4n-LsE*5a*@yzRM2ScAB`bxAn?cy|%Bl zAQR)$p}gtZH8KRDV3%1eeAm1>9;uImA`=f9fu84L3&LLRa|K0JTE}yZDlQ9aj0b1i z1Dl6BftXi`8QT`0i${(TW6a(&`0 zoB8Dqi`_y?78rCk|^k(-m*5DZ30VnPXtraKp?YT?cUP%U`h=T z!Y8Jud*W%{e*69ndW!+BA2b31EI!@6sWouV{PuE2gyv!-LHrKtjCfW(9EuD<;_)`S zdVeLuu(GyX8?r=G$mqDgele(2(U*HRuukU`=1y$iX}5Z5my4%b+wXbXsSs5Ei?1*=Vg5GrTB`{=7OVx! zEE28{XI^Ei{3KPWAGfNsn|CR#L+6VzpTF1^9qO+%AH@4@w-R5}WX^bq#^X>%fn<7MZll_~; zZ~+S&_Bu~SKnsrvMi)$F3*2S`?wj+t7{5e-^@=SK4dihqxda69WVXk?KmZZ^Lu?et z`rhyfzQY|U3MknZ2}9|1s42z)0x7KzAR6rJ7=i;Jm4wXtZ9#O|UYRS|MxtK#+gD1* z+k>-)a%D!Fi3zGE&)L2%0HtuT7Tlh%UE(^v$hP4NfRfh$vMYnZ_C3EfSg*C$q4}hD z`n~ZmV3`j9ZJ!?q!}q|m7sc@fp!=aBGFZHhp5lvi`@TH;Ll@kO?SbIrSia_e>MsV) zHZOOhY?WY_yfeI{TB&iKaNq0ZAET2Cj9?cvBaOi7| zh!k*dUy@n~5@8WIT;J}l!gKPQd!Sw(Z!2OXC))>}4w6y@Kk5L_F1 z*e1Vcso8QGzHQ$8{Ot2qTx7qvo(&12w&gxA#JWiRU%uS^5er zL`-hkoT=N{a;UF;}f7tEQ=-2GdPXc|pFj1daCdOz0EC`aNOS(u_I z$JfeF;>pXs)KbbE;z?Rbf1qGTI)uqs5?+Ykqg7atJ|wW$tR!L}Ri4UiWi$L>CkfGk zDf|`$^8qOc0^}zayU%L!n2>=_A8{y?n)@cFK16nhBSlEsevQQwvVPm<_T+9Xd#K<| z?a`e0ih<5zn>U8yw~!$n9a*W(brae3{4wn7R`cn`*Qwt+QWJ563T;uqFt!0!Jg<>Z zLca~N`tkwIxJPfW)|#sU#8`@>--C4dP) ztz&{m!u>NwKnFC<43g6W(5>sk>Px^I?=8%er){=4jf?q`@{O@Bbjz2go6QpAmnKX7 zhS}e%uO7IB1v{a4!!}tP3fRfK(>6j%mZ;uGsD^#&b5< zKP7_0?;HOkOdzLbk$4_C1J>q99&X}y14ffFur_wE0L_C-UR_a3faW}uBSuC6rz&>I zP4?2=C$N)hI@VihzsL)eJ$=zI?MkpKKEE%i*r)>Nl<)P%L(|3$>7Zxv#pR}RcEY9? zD(o(~O-5z9T>Nd>{2l=g9ew+YO`%}58e4C0C(GKf1_MeIjn!CF_D;#f;VGoLq^$C- z9ZLWJqC+btTTKzOj|DJ#5uma!w9{Z6BT&3#ni5S4kPhh{K`wiDEg0RyfxH;nW9N17 zw@9bT1=rDgP#-M8N6#*EUNRF@18}Dg2tw%#bm%p}TgtZNY%=F5GSrgA%*`&d&UW^E z9peSM`ZgI}xCV=cu(FJL^@@60*%P57^FXAyyt4DOCnG2*I0u$qu^J%!ga=xw%(|C91u7NPX5kDo733G1 z+jFiHJ}cC0TSN{#*}sG|^oUu~QH4`NNsiDEZTj%e<;Pj$4kh@{1LHfoX3cm?>2I5u z6T{H3;_^B!7&Q^v_#x#^PHrmeGMQ=r4edx+OhlxIuzUYX)35i_s!0uL??GiS-+7K* zq`@N^tz_>NJP$b|Lfu{n?nfRhR^gd>SXzFdVJ8@^bc#uLH@=|uF=t047Xof&i36Lo^ z_@Tu*zOvsmVJISUb>qh6cwzv}Tb{moWT_C`e+O10dvgT#Ns7_e*%Q+;YkfmAmPCct z2fd;TTSXVt3S-3{Ve7qPv-K>qT{^b+YhPJ+qwrh8z?G)KjOTCQA0hdt@uLRWPufZ# z>S?p+4~?z;_vHVy5`aN#55_1cA;WDL0XXi!Tb;l@mCKS9==;~T=AKCU%?_lfDnd~w z*(ZJ#sl4t)yP3YMP#1`<(*n$GgBfx)CmD_TQHDnG5VUp_v`O$P;LG|{VVG1ln*`5d%8iwMopb_CW>Z>4jo8yx^=t4F;t-#r@c3xC^~Vw&j4sX@^3cTw zLxlLhSq$?q8!8dBrvV{(()4QOmK)V*6F6Z7TBRRK$rZBx3Gpz4@y;MQ>0}rZQ(&pYm z4Te#ag*F;qOpDZO#He#=!&{Thz5HkkVCO66$4nT&b$pe@VM^=Rawe%_T>0trW$i1q z!a!%J<>c(_S4cclMN2%iSr(P8WsJ|HaMS)y>$p;lTzR=ch(3u9UGLewNI{9DURY`9 zVro*=^^dn>ZhmVP2%2e^>xJn9H4c9IvU zF=NVLa#;?4FVh&A{c$vAD`HINI!ch`vYxRb9r*GelXiK31exvf3suraDc5KxfpVe7 z#_z?pVX$2UyDfy-z)hcMp_#bYGN-J93Zq*YR{vXHa8>fu`#-b;Z519k`c|t>10Gzr zi=LxgsI5)zZdLsttr+TP$`R8 zq}O+j_?Xwu8Pj^;md(k{~-?%zYwZeGxa4+qQ_ zS=p}~#h|84Fv&e0A{|$gNO@m$`vUvoJ)H6wbdcPn(KzJG)*QJQcqYYbzp@3V8sujO zp#x1^Y-$%;DyFXK#dVN+y`SveHp-9?YU@Y{Bt%8zMAWaXfg?ywhG5BBT3#aEM&mf* z-Ep|6y+#p56+{NB3>#)uL2Cg2owm>0a!qH%f#nLAW86EHn)m_)BzY_;f~FCKwNP{N zB=N;=Tq#)y0$#zQSE+qmH-iL06Sq>}nPH<_f)G!O+taksVr`g9m3*Pb-f1-dbyun0g1!R{O3kE8y3na&EQR$L3@%@)|6m@Qgs@*0u%ihmDB_4=_#g@^w| z5vSD*vYvOWi9d|>TRqCT^V1qbJ0B1}#XKFhKOY{?EMP#rMHQ!qhfFKr%=N3aH4FHy z+5P{y0q;QqRX10pOL|k{EHjhI1%p@@J>qB7r2%Qx`4&wSh0Jd0xRT#Q!(XJD^}v-B zaP-}1Dpblh=^l03kHECy<@o{BNbpD^owUCML__aQp=0h7V3K&W3|PkoZBdophrD>K z{Gn{CXDmj}dlHG^GU!5k;^i+hWh6dpZ6twL>UK-DY16jv6M7l&jhsZqnl9;-_7BWf zG8=_2=JGTBcXa*En`|p3ox18B*1q$#FJrU9OX>jqk1t3ZXjA=pUr7f30T1!kc%Q&V ztQ39Hfbhf7M_$MIA>9g*6ra{!Y*n!y2D;X8py-%Ju1CV70?Rm!?@1lq?UE~opmM`b zlWm%S?GLJX!eenxjUWn3BP1bp5?hQ~gurY{7<(7QER zlNBZjm<+H=WHgXS=O;fRCsIekY-l62ARBT?A^jRo)zA{x`JD8HItn>>Y_+Bwmcr>D z{#f~BkaRf2UNflUKV-(Ye{jRKNlZTmW2&%WqbM_3Q<^Ep>wJgQqR4L~@>i+UUmz9+ zvl#~RG`)7@Qqoigj^U(Qc2EY9?8n^^@OJe?zkdSv-3h58zPx

$2B%6<{1N5LO0+_^mm8P3W)Dq-#P3ARZ&dPgMo#N`G6*Yc-@FJ~~mBl8Pzh6c2 z*qx9SO#d{g{Q>HPQQ^OQk&}-P0W;_}qG24DOzCWVWAHq1_0au-N7b*l&vMhWJM9?2 z7#0!~c}iVCX_j*A^c-g%o$rEgC>OAsb$`j1V-#uzCY{-<^g1y8}u zkV}7O%c^Lsd&y>c-Sp$Fn@MOJ&*I7rFWBt;1s>K&bEgh46CLq1qb`3ASH)Y6 z%+KR3`Ja<2q%EZ18k@VSJE`@??qHuzt>&6S)fH|jD0cNHuK z@BQ^tyM>k4Hz^DOxZv&cqMSA0z23Srjme+4;S}bSW(sTN?T(V$&<;YuktL{AX+hGy zKY|<|kA5Lf4EcPa7d1BATu6;G;b}-~=LjiB;y^EYQ%u<#l>CL?T{MtonUVl5T)eG-;7PwB#2s!JD9OdKtl4cvMSbe* zBKi{W(SfF=G}Z#My?1x~hkWHZW1e^89b4{&Wd=j2*J0@W=q!#eFTClm#j=OCb?(~_ zxoL*bHJ@KnjQEneIj;4Rz>F}#U8q;K(*$9F>vfboVXJoyHR<ve?kB5PKZlM7QV4-@OKXq-sVv&cDg zm|U0T+ji5#mY0eTmQwZmKiSls7}-KThPoL-C^!gyT?4Dbu`hy@zWNfRkH}HY*6KeKpMU7>yN`X-_=c7oYS{5f07#OoQXY=lY%2Y@)^$A zXCQMNYl30Hh+SCNPcbm?g=x0jaBC4TfWn^PZ& z92t-1qyzl|T+NNz1R+LU=NoJzx-$2Y@I{IY1KTdo3lTk(Kq=q_P`G|FW4r(C3z2AW zeNT8}ek+Fh)D28*4}!_{zErn4`RQgpqRihPPEnmvR``4io5XpJ;)v5051MTw=5sW& zIpyBqzUJD-F(IjY7jBpDYBu3gtmJ7)7bP1(g)WqN?>n^n2Qlz10i0DnArT2sLY%Ld zqRm>2wu_6hKUB2dn2p|F#%Z{WvYnWJaEkqtmv_{$1~=O2%oxv|m)4sgh*P}ir>t10 zLmnv^uY-+%mG3{O%75fl$}*v7wuVP+vNVesq*1jO{Hqq4ufx{M6<}r>D&|e_{+elB zP+*4oTg#Zs@rFEOycV`R(mU~AxzjeWjOQA`n~rNJkFrFvAaC{UJ3U7Cm2Xh9YHQg$ z;;i7UCg0}z-|n^cFr|=A6pGTs2_>SEx%0Sn0a*RtL%c%Ne=Is^Q#{ayExK?o-h|MJ z-1sWK$CrW)HgG+zYk7e^y$y|;6A~lX zno%UlS&QJs& zR_oz(l6}EUvlDg2A{@iRlty3q3GWEN|e!G8(C3V^{H=gb` zxt~rpd4zgpTmE*tJ7RE9YV*O4Q~=-4CV`fM)QA%C=5V9myn~T75>ZG5=0lv2l6O zafXnylkgm~q6%-x~4x~_wAJ9Rd zWuyX|kz8};DTW{o{gkt%WzE!JJpa$#mZR7N4+}opQJo>BVYkf}bfc~g-fV-y zE{lDQKBLBmHsA4uO1F8=(pYBwDx3%kMz|%HMV5l%ov@Nj zy91TXPDOB|U&)d^f1%ZaF`?1Wp``g)|50l#+}>2;-$wxyt?~-w#7;ODn6l@I>-YZe z25{-t&|!XGUsEI%luh*B&GEY|lp16t$1y3VH^2xeTbI->yMctN5hk33ww(?`VV0YG z&Fafd8QJfdfVnD6YLBnVfA##RLvBd_iz5^5V&CfIGwPphf9CO6^~Y#x&SLuLWtB>f z1eW-DdL_V03H-xup0{9V8E6r31?V8~{!XApo?zTLtwJo(E+=>3-apuvKvJ-LPxn~^ zP%)E7qIm_I1;JlKLr145&GS6quAKoE_V4{P=>T{N;zMuVcza>i9q_k`w6f+B{)o&EPiC9AjM^aZz2GVEh<$DLOe zchsvtk^7UNTvzzwjPk1z8x8<>!I{X{>Cq@)fs3qC2jq+|qUAuB0#N_BHdZ2}i5D1g z?L7JNgZ&d11r4r(DyM#JqPHYb6PO}@|7MY|pzn*w5dS;cA)cFtQ8p1p=0KSaZF#0W z$|8Sc${GM7ugD8?+bhTzXj(;BkG<{OB5$I3gUBVJoU_D1b5P$_h1c}M4HJRl2^Mzo z9oh{4jhaXJ$c6;-2#$#`bCnJ~dtpgLTwK+0)0L3R2aiNdJ5R|RgUA*FvT^|JCHj!@ zQiF9jK=weODOl7Zq&#Um!7U?CH>Wibqyc9lu3sowv&~PW;}WM4;x#VIq{tvECtDmH zrTGno?dKXa!Q}<=-mw}k;MZ!<7zw%*PrVWQbIyoD7BiLh7Ah8+)V|Yec=MGSFgDWu zR6s7gSYv)$s5P*REr|lN{e7~qyO}QNvDUmyHk86T9h`J5U~qHGCP~b+g8VuOt z#Q$K>&<&SJ9mPRar$E({AeKrm&{(k#(n~wN>PlQjnxx0+}ao{jAT)l4}}?LA&KL>y+d{D&}c{ z3y-_ZF%6ZYcmgt?DLNu^KEnG2 znrRn3+kzFa!6YoB>d598c&OiaGHAR$U6eUA8t_k3^l6{zZWrSjRg!*Tk+Jq2BNFrK zzlxXtW%w%mwmIY}beilK^lWcde8s@xq;K@JF(sQpgdW$WBfuB>UH@?NH^Da3$$;dA5H?<|LN;p*GXkQ=b1FiiwNWA zc<>uOU;|7B_KJtggXOS1fiWV$#`Vx+^>h`W0x?$$r zT_v5|jvrzuL zApwUZ{{8L*FYstf{OCR9|Y#5wI%W#Okq=ZcnAWIf-{l5z7LH6RK`ja>!?o~1mT z*RsrJs|R$&dV58y@Nl}#ltfO)b^nEv-j%VFAU>|vs=nDp-48c=w+8YJzJOjWY|VYu z=gJ?#PLN5}iS&6~up;xFh3obAtd4ri;L@*qO!|kgLj|XJR>u}Og4cKUV%Rtn()9ul~YF}C%*kuiy-}An^sc9GykT5@#Sy~`T6st)Vso74AFHB6agwt5=;?C^ODoDit5RIXrjD#uR zAg9tROO0800rsMx=ZhJLglGGcOBB{PVyCjkdQR5 zCO_fxa{%ME#)`)XFP9%eVp?VP?8{=`Xt5CXOOl9VX7^&)WDRD-?wSU1g?gDbA*nmh zFf^6~H8LI_=K-R2f{NhZeYi-IzZ*TE{!;U(b#$fMIl?qr)Tdd>4ped~DgdLd^O9Ll z__mIz_q_ySjm5OhzlVQ1t$qSvdZt(Z$-lFgKW?pP{K6|)NKi8KbJiv@I_3dKTMA(3 zG<}OG3qPK3^Z={So4^fc1jMflc#5Eo6Ntd0V`q@v)^*`*uM6as%3z?O={YMk8m!OW zzNEL=FIsUQIADZPZ%#YwmEo0XA4v^RzfEQ~`H&l5q#ZEjusGdGn2~jJ8L1onG#M`mJpuEzg%g16gZE)FhbvTSJ zE9kdF*&7mqEno+dBq>_DI6mb+_{DLBfmUg^&-upt&ZJ3D2t*rU??>$GT~^snHbbyg zq-~*veDjqiu+YBJ;RPP(CKpOE#(7JFF1SYydP{lL?T+kXaIk;AqQM26Ai$FWCiUWJ zo9L%nDU)+Q0UN>!*lb_ze-SMF1&PIwAZ-#&(06hW`K>cnwnhO0*R2qwg~dcWTJ((8 ziC}V%FClwLSljY8#IAP5CB6k$*Mn2BQG@( z|FU*ge9GqCkI~e>)wqKU_kA^KqMfOJ*koW6IbBU7eA6$bV=Hiwx`~NbEA(BxBsyPn zI6+l- zVX`x-?zmOe4c7KmTvvx9Z8wq?U+VGoP1QBjSn=o|ewx~1M=G!j_RbNMX>t=WMY_5o z1;@=e+Bs~kqaez}TcwvJN=yC9lGji?G{nLy!^Uqc*W^P#qcnOyj9RJ;p}bkm_&(Wv zudEb)o)s?qLk~G8Z$m{-aozNYMSTkepC-$TTP17~a==aHOOduKz^_t9yYM;AGnpG4wuuL*I zv;mFqyS8J)Ey^FAd=)#*bms(q>mYW5xR3JVv>>#v#)wOgO9i7#t_+*59IPU>A&o^B z&+S}hSf;6w0ik1w=MG?~J$77U#ESrEUKDld{PA2tBXeow!2m*5D>pEJst-A7mv&M(0gHRNVVvab*M$T>A!anRKfB z1lIO`2#!C_1}=9)bB01}jUiB7-gQRlhtj^q;S39bE%g136!b~A#^StbHfu1=GOMR6 z0?(w>98?a2u1pX%>&#ejqj)$C{0|ksEg3QJmb~X9X2=?V&zi3+HFhg>j;)bb_#O)g zpLIBbW;_qSOdi|W4`t@iG7_TK;2{}aSx%tW_EEsz9@ofyLxEZU_Y}OMB4E}bb>-(% zFH}1``JA*qu!0Rt&mmhwELea2dN(+}(zs*bMgh8t=|E!d7>c3=tXXV2WU!;dacnw+ z32=X@z(i`hxISb^QKXM63w&ieTS0{+`P+V3Hh+FCW3}ZoC@K6ztDpTJ z8eV|2`R31*_MqtBH)5{|pJ6H*rZ=W7vq!?+nHmA@`*(2hqd>Xg&Pbse5;9d-9m9gv z|D)-wqoVr0HcraW-8nFHcXtlW(B0i7Al=e6fYK=;oq`};BHbV@f*_4j0`L9))_VVT zt?Mvz&OQ6={XCyX*utCFBWwM_n7(2`5Kvamznk<1MfI=g^=`83vO5kq(TjV#Za0mH z=wujd4IXC_?GNL{5yXHsh+yQ6Zvc4T0c$nzl(36k$A$-DBWW&PlFZ@F?~zH-vQXK- zSuC`Ko+;o|bMG2CNBLMhRwC%S3;~^e4DUKR|I;AlI30K60)z<*nZR8IrUv$Nx>+>h zAzndrPAT&~cP|)aAx?LS^pLBW9i6>kA(3?q5RZ&%K1RsypkH>PgJ99e2$0n~3EE>QKeWwNb)chE!c>DdYQhpEfP6v(mVo&;2-al&` zFBY#H@3zvyfs=zP)8JeFOm8~Oh>kY~H2g?pt>8E`SALgMJ)|m%g$FU@y0LK{RP)2`hXP~Eu}p3x^Y729G$*OyVw`q z_@Ak_E5?{40CnBOpw4*cySc;2Q*`v{Q27h;e@mM!_v`-q6rJEZX!({5oARtW0W*O= zSn5n8DeF!#+}s$s!HktKZnyX;w5IKIdbz?F7Z7wEPfm)&UT997bm)55AVX4CRrm0d&u!4+CroFz_hbo``HhdgOp?+iQ<( zJ>l7!QlmOLor;>uWff3`lB!0tO#()VUgYjBZ|3Sif8q#%EK2*EXu3?`?9QxM5VeGt z;1L%zD17dC0K`_el`#t;?I!hR{l<+eti+g_0Y9`d2GjKF{L2+$tN<6l)XUjr3U5vO za?0OflyA1=tdDCySgCzv)La@?1#KOo1o6D6Wb{i)HqTyLHEVDj-& z>*YoZSntX+#2AX}Pe-U}$ekOE`47=)T2i1W1XuHr%y#-TuW>)}_f6kJ(_{|Ql^gTb zbOA;EfYXeIH#Ke+glid$bv=&8Ck021k*meq-(KLs`nNk-7`+E^_?b*DknbP%xUn60 zT0CK?OvB?+K)pn4#`R*(W{41H{iBPD^#!l9cYbzGa*xim_B4wo35>2VpIP zSVx%x($Dr;2?ni{H#4ClQ0kb&_jiAZ=Q*`&UVletMHOlff>j9Sv4CXB{MfGaR0}Dj z4R`^2+luZfO6BNG&Jc@NlDjk%V#Y#$3h?0YDG;O z<^V0NqJ8G-PrS<9hQ2MeyPM&bG$$4RufX5}Zwy@rk6t26?qMk6G7nOCOuE=iEN9n+ zhm(36g{$4bzwR=kpz}_iq#2JW%8Z}sUz~gE7w6Hyi%$FAIXWy%KR>_BBO+__V>iPU zA~CUbpn&wYHP~%KnQ}-{ss|WA{`B6w88xxEi3LyQ!*W?$4uvxx@LQ#d#CY z{S1TI0sOGiZUl-0;eU18^m;GdW^=&t=goV!%?{Lria8%^*BWp78yMK%}R9|bw93bA_|=3V2)Wf zFIT0%;I|;Z-@Nz|_?*Nof>ha2;VkBn>?}MgDnBTvu-A176N^`hlclAk%$J#e78T<; z`1+EI6CeHU(^|P8NsV3@5?A(m;EJ?)@wO98#mtcFe} zB4HA#_I*$Re%I+VMdWzTccHbj-p(3RIIEkP(V5~0Fc(tr8W8?1a0gAh|pMS@g-8xA-M+H<_ae*qTx7Eb3|&~sL@YksYV#e#PUb!l0J}-)ik3yVOv;)Q#+acdH;^Qe+4q-T)5(<^9h;mZdvgaxm3Y>0Jm- zupNFWjKj1$hR$c$_G4i=57Z3J1Qa`xKFX?0;}1z9;gq|0Sq;8snP~VteeIjusi2_5 z)$VF(R-2jLWH*t+@gqej#ahI7HX=oGlVjnNtZ$wW|GtNln_cvV2hS*WmE#ejTl3#< z*6Xit-;a_-8$vsh>nkC~Z2C2|73+H0j}#lGXMEw`DKm_HptUU-bri?PKPL3-?S_*A z&o>`?`?dq{!K-}gUQU&JGvLdIhm%Ifm*=O*PSVJ1c(WuXLxBD{Ss@|5=>ZPy$H^hz z1J+l_4^Lq{lNJ+awC8;)P$1wq|-+6lSC`@ykC!6CZ^ zu2s&7%M(W*^4@_c&NVxu`K89`+i@PYa}hj^T%GOiS7f;Sf_6o_Qql{pq~&28%^*F76(e%ciw&!2uam(+4WWVMAn|BEdEi)m_O7#UIymg0H{=!7!;eaLXD*B{l1RJPVO7epqC_ z|3~@-FG8aZA4pvXc!z6!;nIB%ILR?VlR{>?=K1nQQhH2qNS~05+!(SN9#k8K7te z^i0Zk#bFP{&Hj%z{|sO ztnbZjAHZFF7WmI_Z)9R({P zi))x3_(i7wH8xr>Mp(=Y25W=qe=|5%i@a z6+=q+dsbL7B2{!uGS##i=yd4q;+)b9aT>8K$Y%-Q3P*S4>xnb|_XlTk2 zIo~>8?S4*t;j)!9fk0RUqSRH1GSwL&Ch66)SsDTrvet8kG!sMK#5;5I^)3CM&T7m)vxYd=+2CfE}(I%pZF_NS9SNAuX`cF2WE}#pvW8-qH!TT)0DKdw4ZQY zHYyqYB_hQHJdUcMdFklf=BH=63VKX$gKJQKkz{b-scRpuC#U7(dZ++}sBV_-@2%c^ z@$GQt^Wg15xc-Q8*dqg#_-lB+XV?4YzhvR}xi2Z7pO4Z4Pttm`)wsLhH5ysKo+>nO z1=2NM^9YN_!!rZETo?X3O4~}kElNm$BD{*0l78`(p84l`h5L8^fnjI!fR&p_6lexUS6h! z7Zi#IT!p`kyo@lvOjh09i=XwIOezFNL9lC%wP?fgZhK!s%>XK7$W>PHj`{f;(mue? zGe(l`2pEney25Dz`eiDeu{rYG9^`pL`KEu#=9?{W_$OSy4_0Xlz<5s!RslgD1IP^#Ai zGE{Y=GsmWM9?+F{*7#s=G*kX>dJ;vC^_1Rr3A&;>|CGzavhCFR=u65q)pj% z90ekmF@eH}%96H%!;RigZ^s^sYQh2|Cot9}USz2nHc?97jU7qiGpj+T3w26xlIgk= z!LC)RMPPwZrrq0R?TI7By7kJaY@TEVPE1dB6JVMDFa{=qxWg^yFg zke#X!*fv|i2hPe|R3l((L*d-xJ)$_kHX*OLU|}4m2dOevLjnug@V87bK#t@$u8D|P z4{;tpAa81k?XJ~8v$8gNw={+GGuwBB>SDEJIKLrEnPNXKF$ zWEU)>P2sWC6Z^4YeI)!}?{-pOl5-~xJSXIrn&lqg2i-gW@{HZ#w)u5&5rT$GW4HZ< z8IUz9F&wt2aSxd!X$mrH712Qn{)5E%l_6JYKmm5QrR~oj0#9VWo_{<)Esnxg1fiKt z;V)r+WzmeET0z_*URKio!9X!FG5>=m?=WxueGPavgS#G%KmNBNfg=H;!QX>NC!oqq z2Qf73%IaCOdmUD!SrxsUXRDl6=1)N*UKdzdS|%tgoK(Y>N+mUT3V2%OgK12P2`V8o zlx9A2j2s-Cs6O?SLXuIx4t5!oStb+jyF}pz6$wADCb{h2IOOT6EiW$z-eh?C0I{T( zal$@LtWpIfIi&_7>{1oQenO}~Wd<9A4p$GZwS1aF z+-rg@1m60k&wnb0bQDp0{7M+<^J1V-_(u0m2^+_F3D(76nLT`;?ZT)B3)-kk1{Vm# z-|%Ovn5IW{iYK+viy4^E?#L+pLth~iNEv|D?6N=Pm_#84m(w?Pv%ly7iLyCs1k=m9 z$mSK-MoLRh_hvB3GSY#JNsWu<#wj7HW7UXCvJOKP3%emq84JdF^}VyMA}6)|n*>!H zI5S!z=6ww<9JVv^!FLCi5B3g@j?gxT`qt4u!rx_#;p&>Ht^Owl-J3MR0BhNaD;W!L zKJETD;`a>Mrv!+j!9ff8Tf8NHLiU!k!fxsyLake)tas!?Q zKO@DqGwCzeDLUV8;2&KN$Gbe+F<>Ycnp_QySk87eD-92Bf^~@}OT=K6=wJUEh=k%|37b zJl-@M+m7`OUoofMcMSXK`04heC3%;BLtWj~6F@)1mAb(@4+PX(mz~cdXt>l=mmE>~ zej>Si2Gf}W2XjE29iWp;5$?Iv0E(>Lrn))~Ux0tU?=rNYB{>D~gQ;q7qh`o;ReyG;2ep^6?h)Gj=w*u8=84F+!Y4;5*6^ekv~p$;iDzN>2tm z&r?DK2?%YDDixveiIQfLdqjb7ED20TY7i-6BEuyTXOx{jl$KE2yy@;WP6dYkEBpe* z>=q|{6XM-%7`M0`?eJ*oG2zJ5oLBxYEHy<&T>H&i4?)C>2mu$=G41JQn)gd6oG+2~K;n#z|u zITdA@LMnD@ka2ylRuPX~`aft8{?Lfkj*?aX$ah_U+6F6%l|le@ zsGv7Zdi221Y#LzFuW)d3dSCtE=iuU+Ke>JX{=Kz_M-KDfGkcG)qNm5`(}2be+cyqz z)9Vzzz@tXTs3l*+D=QhlJO@}F0>KlzzlP%9lX+ez8vg!KibjL7YkcBoWNcBEC`HX& z6a<_|YUOh~{gKQ;S38KW&D)dEXg(DKxqgY9rk#LCE&iR9=+NL`2o?ijU46aJ-LEQR z3kwI})o%nm#mvag-~RnlyP$)EL*UK;8Z;}0JM@0?o4S^5eR-|w-}8;J$Y?Y?0El=6 zO{Ee4dRac!b(fiRztQ(ZNkT#@DjJ%ZeZWW)bdzt^?#pcX__?vUtw%kt5-9$X_s7!s z`6a1;5|Bcg|4UY@Z{|G<-wD$!5=lt2@^kS?1ek~6L$1}5D%$= z{Z%y!O=oW8;0C_(#OAp6cERpKuK)hl*!!R_z@VVTcI@@@4(@Y0$E5MQ;=||1zJc|1 zw*UV71%Tu+8AZsf8Pm2lj!L0nenJ!kpSPBOL|P&0ZzvT1DRx@aA z;eZkUZMUXLixLGwRu<6*`PK~jiW14Sk_GaD01C-5<(z{G<5$zZC$1j5n73i?fl}Kd zbVy?{o1Bq}y;7NEexP={tnI8|u8mF}cV60+>&=(>+Y9<7)wJ(I#mV)tp;~9S&l1a5 zBitdp1QqUy4XR)p^+f_Q8|4%!X1teMq$<}unP0Qk@&sQ z$NhV?oX&uK3Rs70y{@FrdCmTlBn}QA*1m*_>+5^lV_A!fN@{#uvvXM>67R6=|NR>) zK8*@I!&m3`d-IVjLGwcHKWN6Qcw3=|_x+N$ThWAnbrFZZj$_@Ep^gZ~n-RdWthc7A;Gd$$}*=UE}~Z@lPJbKdO%`QoRW#Xq*PDf5$Bb~K+~kP`w=nj2<3X?=V>vj_f&tkP`HjiZ)zK! z$-kc(`TO=Y4YSNW=+#A_AwT>D*ZruHnoT@T=%@duKzjt9t=Pnvi%2i>Otd{dYD{5^ zc+joak4UPM?@dCE7Z#&4BYb?g5Cm$$#kI)=ez4FUYV+>oNVv`%rHleKQVx0ze(D)7|XtP&wXiLU(xBrrB?++mI`Nyq!FZKjuADl5z9*fA7(#Tt>J~NXWs>xqGRu zsR=Y*fKAhC`-r;u!N%X6lg9938GTE^T8e>fHEvpqe(Oj+92>ms`LH`<5yR%rbF0fh z#|WA(Eq)w46b-ravO|x#J+G5z3rdWQxHz%08~+NY|K?kM&5bfxAD*L$BBgXnWfD7o zHfzSgg7b6~iqeOtQ=-=DOa%vY|*t00b_OEvw5A%e+F9!h9X4 zz6dF!*A;xvF;SzU2>rlDpkJo1!RF#atWP|csV1)*oJR(8hE`OTB8`D#OK9d|xOc}x zQVay&SI?D=>b{bS762KRR?iKl2SxrR9?Y>T!|EYaEg5`79K_cCB6E*%aH`UiX*D;W z#imy47HCeVd#Uz@5BGf&MCPZf4;FgP_mv+;6kA#Q&^^PSlH^5kw-s9pc*R4n^(V`q_J^o zEoC!SSLxn6;k@KDtzv8t*^_a&2ofdM{@M_QQnjvF5#A%%DvRHvZVJMr$< zqDN=Y!JkGumZcYi2K8#W?T64#>tu5GC<$#i;}{Mtj=L8v5yP^{>+^LD$lGwd@t42!~RhG!bnBJej z);GrCcP$NGDvY=ogj^ln4dg`8WIu=rFvmtmt7|c~G3}}7KLa}G+={_D3fDrNh>h)Y z4_2elLt~N!qv#axJf{|kfyX?BKsM4l&Jw)owAZH~%4%$e-pqc!@74;9VTUTcCBt;d zlYRu=MFeprge`gnkUrt`PN>EYO;~VzswvmW zW;Ml5VanT35#G^Wc#ZJyD538}4A)rHy|T6V-0~@OpO6oDNZ{!V%=&EzC-U#|TQe3) z-(pw%*-C0dyijaVsc!p}Az>UCOAxtQTPV3yp`P|F+*(mLGx{K_LNCno8m>T7w z;cwp%ftFW_-9sxKxGd6F>fyM4Z+f9-Sc~R8qAJ^yC;YYcHOcoM8my^dZQ&RqSNpu_5ER7t zhTJ(*PnQIB3$62DeG!r{x=3tNWn{W=@<+sLhi){e0JC`8OWs92)j^`1LvZitfkOq|b_!)2O5~&CP$+EOwhZQvV+RsUEBKPZkbH z9X542FQb#Avw>AOg2+(r2oxyH6fF?jx+QuwVrbdBcVw85sxlk5x`g%|k49V?9H~%_FGD-q z;I>iMbdetIx4VvZ09V##bKlO7b}5i@yvaZWPjEiC0!@6eH8|Q&R{l4AiS-W^3Vq=% zhF%5a`cblJkz~>~$}GP(=5ReD=^Y8%o9{H`t9OUaT~773ACy64?5~hrbQhe2rdg`S=z;lZQ%oV1ik%O?MI^&wG}mG(5@|Gc*z_B{{o_{RWz86cY4G~)0Kn#A><0kXyNaY2zy$7k-PFT6%p-CtUuf>+*2vWSz`rq^Iz{3T(4P~if?iv+CjpH} z_{a#VW>H|Asb_C?bF)zKiOlX|1m_XYX(zbhGbV|OGlkSK-k<()L_=ch@=5k?tq1~L%t?|++~YW92yGgw)E zSCF^Y?b?XE1LQZk(7yXI1ck0 z8q%B>_MbT^Llt~kRh4(t6fUpEd@x}P<3ywuO@$n~eg=oX{))G?CSRV40tV*N4P)6) zd1Wo|r%c&KJDak|X{Psure#7jmZq=fBW~-uce24f8GBTZYVNqWz zJu+PFR&vJvP$3i*rep1

H~x$7p=NRywQxAM`4nI)n4VLoN%;sLlz?D;WeO)T1`LYq37Rvv zy3>D3v;2B#pQ#AjU~h={oRUj9)RK9HCa>4{-(c6X_Xw*(IcIooB(B81+SmC!47qihI@LH!QZT<(L3>A&W?fv0|EGp?Y$%Ip{ zHZ^mR(Qq&Bw#K@4<0$DZWqj@~tRH%5fc_?x*bPzeUy0%Aj}2vW<2tIo|L*wJH8fy` z#K1zS^B42OrLhVNL;OVz0|8fK+5VevSRW@R-PXEeIrBR&Zgz*veE%#_Nxq2zG8)M0 ziLbA(e{Xbhd$Hl^=}%4k$_m82_62_W5g@r?_;{V|zc2{k9#bkQ71^GHcGg#H>d_S& zTdC;a=&<_5U)=Uo2v_0`VOp%=)4%_vdUSYfkM5^QDgk|{i`}6*|K)f2g+q(PKu5QN zLyc?I8!Q(HfFXu*IP>2Z6){cmIaF130eCeXRiC3--N;-pWGt1seA9!US1OVy3b=5u z+q(bP$GzP09U(SsYH9iUWh4|BoB>rx%5q*j?bguoR}AG;Dr?}jbjkb|MuN)U+6n@$ zp8wt44jasQZ`$mhS0%(d&O!Rct3u+HQcTMmvLD3qt@Qeu0}YDUciqWMZ{vh&gx+W^ z`cuoqp_dxVU!`QS-AET6jNAy5%4z2?@-sV+#X3O8ygXjdi=)tG6CQZC_+}-^sgEhEEMsH-zKO+ce%UYZW z!i*@U1mIL3ts6Ad?TC;nQKGllo>JwZ6GmI3RW#Wwb=2Ao%Mlfp+18z&t}OyRGYJMr za;35K8iZF8LwAW1P?eT~W(UnomIp;r&)+~Nu9}RaQg>O5xwT|e6Go-?4t6qhmu!1ax6dI~$zqbtQ8)(Qw zJh{fMHMJPFZtt0X@jEJw;f11Xz2m=COSiC!wbF*a8;=%$bHgHs;o#ti*FVP)uS|5f zw4~ocW|eb@os&a~ufT`>^8Z=@B%lSNRdZ5G?M{Vlph=a3L>-9J~ zynf|Mt(-<VtaV8BNQ^NfMyRZ{M&KMN8(Kyl#&0^QK6cHH(H#CarH~q5kFYPp5W8ZuQ9!STIs6k<5pG`_AC>|ru(r&;<49)NC|{ACt0&D z+60FA_<^;_NlOF?RXAf6C7bGA^+e~Wgr_7RLM9&W%RxE?ek6M3s)Z!Bg8o~T3$pWp zsF9ZLWkx_OIJPcw()58zOVE^QwER+&W%!*}n-Lmz;SLDwqx#Y58__>yyRz{LIj4cU zz1w6UVsuO!y7l)anIwyo>Dv!It*U-Cl8&rLc(0EoN@Gf3s9d0-a|7 ziD^8#ud_FKWJN1UZ3QN#8dgGVpcZ-KQcE%wE`eB~#V1^i^fb;!KZKFJK^H7hEb*!b)P|1M-C5|SJ((FV<`86~;p^x~yoC>FohO=#0OIO|hsT3cEughfuuiY`1) zY~2~}syMUNtV4gHj9jj}+S&Z5G}j+Z?ERmhvQ?pEqdR{t!D47xa+3wbGV?CArKe19e-ZKGT0n&ard(B^*4SX?J%%!a>rH(t=JaPyMfFKtlU;^HT=kt3hf zIU~gJtAC7WRMTB}>pv5Ul|^EgjbRxXzwr3E^$}cPGWz0f?$rg#E~q(V!c=V3IBDs5 z$>4zT43Vz0J?Hq;hCfaHaW|2Sd-WA9#9y#VuID9h`ZStuduiOHml(qk}7_y?$9+vd{nlbCi_HN10DP)4D{_I`@b7@7lJ> zw?K6}4(0cm$T%kmlpAb(52*^u>R>yTLiChOf_ft3+H}oX6#*QUWc25s@~|{75Gj5L zgt2(fz&^e{`^^vb-E@^*dRbc*4PO>o>HKb`pSBS4)ph#bvJPaps@(mwI28>iaeJdS zU-@6+D58||4%AE;iLY&=T}RupqQ|(YnJ)GsSfrCtqpu{t41>%2B2pu{kh})L$9S=l znTzPNVo0>CJRZ>-q@`un-VjY4ay2Ftwn&?HlsldO0%j@%%<`03rkRLzX=Oc5I83ti)b zj+&w>Z@A|00`fQR>D>L(OXm7^Pnr*`dx`?3=pjh;#G`LB?5c&2&lWzm9@m1=)j3~GCG>EOrA{HG_ zXpn?J0es+U4KG-oWZ-UfGMc)d87iXyDzZ<8E=y$kz?or9f5xw*e&dY!_!0To9*`qj zGIoWTE4GNd`v7K&cacS7znE-J6T zj0IQIs(=AMl6gM_ON(Ko>yy`p)tFo1*c*K8bEM|B4Es6JMg@@sExI`hok;IE)p()A z8yarL={K2>3#H?)Rxz^o5F(QpGSs4!WTEow5`|1P=&mZ8V_AWrRrz_hQKz<9z&<9J z!wGB?%eaFcr&=)nf{>(&P*t|hBtq|!0b9lJeB1Hcybcp$f&!{h@iUT;Q&ys@!0914 zjFxPAoAZ+^FhhlH)P(b@N7k6QA}Csky{Zl)2FJbdI&l9xwJPfermCWa3?r2URk^)C z7rfB}5n+8=ISy#yFSg-cN>x&G>nt@SlIfL>v~2ewR{OCs6PP2}#lV{OQo;))>j_X{ z?S=a|?5~BdA>+87%BYH}N-nac-)0Jcp#;kYD=G^pg}{qCHpzj@t|85x7*WG zbd`4Q{@DX1{{{a32zt&$#9@_>i-2cz{f>@I(!)5B3ws;DrfN-GL~)Ly`l={CUF?Ex zb|-Vz;__7;<^%#4q($r;kEPCg?#m|y=FHj-h{-O!ni!-x5l`p`YI{vobZH7gT!|3t zF#(t;!B=Eg2FfQ8%H~z{mCQvK6{niWNe>jue@O+cR!@LABNz#hrJ{o;6rvcb-~H?U zOA2+;2QjMnClZy~(-+w8$X%G^IQ67|TDNhHS4CAsRcwr>%(N)y*a(VLMr);}Oi>NN z=0l@>+c3S1l?YxL8BtUoomFg3jSS(DpNH8>ig-dZ;RYW^hJT>&`!WwXzL8@6TR>xS zq67Q=DUa>)0aW)^t!{rI|`m!ZmOY^yT=W5ig!M;e!YI_(f`6*fQa zbKI>2(t(0=3Z#`=^boE%!h1T}y{DaRH(8FV+1Pt-?TnSoSE^U#bWC_zFiobImOW&4 zcDY2|(T_H|gA^{xSAhh@DTl1~_Vxv-+iUQX=V5!HZ?o8L({jpdopx`hgXjqo!9mQr zMm!aQnre3hN~xa_c;?bI$9N++Rv{{exj4GUa2!FR6eX4TW+^1hbdz$uos`vet4cDc zrzB3z(3yoQ%LzrclSHP64jo)!m-j2!uUcX8iJ;W3$sw(aXA8}hKECSrt$dnk5Ff+| z|K@%f7AP<0m8%acgDE!X%GkI;%lP3S&BWX zFitr3b#>eFG~PUMLFti$3@gh?7Vf>zQk0fu*hAl7XmUui*J~%>6x6M2>l6E%XB|%M zJ3fe^;YixQw(uU|AF8+UY&=i<7EaRjuV}8>g(I~_OIi> zgjFiXR`dEfvsTylD&#QIh!SNTvEMrcQj$!qzp8P~1csQPsUeC2LKO+kzzTE=x)3d%G{vrODM*e$u1L)JmWv!+h=7ra)wKTtUnCFvmM$mm#B zENO*Y6f7nM9@>M(mRuE?iDp)yesKtMes9r;#N4zM5doQ)h0TrUfpoGCXlisr%rjU< zO6r=U5j*%GH6__;vHL^x_B%13Otd#BY@=%o%ZLY!U6?0Y`unqC%E7P8bn+FQqJaCDxY0ld-Pm(dc+mOA6w9<-fN~A_%Ah2d+5V# z+*l-Y6-8ZIBV?-b+Egc6lFK;g$>+kB_C4lDKVxO)ky&%+nxGXB|?*+`-#Sc39g?~?OLJtL$y?oAk#b4sY=9< z-j8Ow_u>dLvS#(VgQrhMN7RdivQVp)qq0uoNmkaGV?SunsK}<$29T-2;&KX_(^&>` z-1i}J3+LEQsVP~GVr2ZgUNGOgn*GHJ6~|e=>M*|?x;nZE%H&S|Hk@WwIV7opH?hsc zTM6kNC)Cp@&nbi?jv6fW8~x0zlWbyZMa4HWOU=$Ui4drk^vdwDT_)2JL}lQl)`5p? zr`O6ks7qu&NERda!-Su{zJ74Xo;b!%kd)Nuy?2<~_X_DpiisAiO2TB`3g|NbGFPE) z#Qsr&Z5VJe7_cf5KgbE>Yb4jyxXKqnuwF&0oNTroLohNoKUjBdJOHqn;vZ**g3=5y4%PjTi5Z6I z99;{d%|KtfKL{V`VyliaG0&>*s9!W(Xeyh2W*a8J)F_kO5_f@!;eT3>#>wgIGRR;6 z_lqP8BG!T8moZpNgoqWb)8(w|&_4^+*JvbkmTK&JiJYql2;@!4bled8AFzJR>-H%b zwD~?x04v*ae!R~*0wZR9|b$E#uqc%^A?vPzOtE_d+(-BB@0sgUJoUI z@`&V*lihu1YEkk#s1_nmM4gjkaDfEG#iXe7F1zr}eZ63L6^-N?tp%$N5vc$MUFl@= z5(r#}RL(g?#hcT+yu4D-);X$?a%tBn88*etiX+Io+iZPk=Z2z6qPuD5bnzt;U8UB7 zpNF$|O{@KNPQrEZzxzv@)I$@}RtWZP;PRXIld;`Gy}lS;2u?LPqK6Fx;Ly}sHk}Ls z=emRg75s?!c{0Z+T?h4P!m#LJUyua-5$HG(%(EM`!AU9Y1V*vfN&i5;(cvDfNz#2= zB%q;sPT%+w3FQk6|h+#HF zmvbr*wqqM$qcyslbNiN;7gm+#J0L%dL0&g7R;JObt-?7#{&l^yfC0+qm9u1#tMn0F z)pxF=-p+Zjgrj;gv0XOztVF(XWsG9r<~KBNimDzpL3N@-5b7sawPD-7GGwdNF|RnM zIBWGgO2f+F7cNHapiKb~jaL#Y*KSf*_xI@LLBK~NkJXRg(G50Fp=D%##xLF%l?67M zW>;+7uKGQ6teRV?H25Jw=yU>|X_R8o0S_*jLd7akW1u1z6Hta?0bB>WP77#^DHO4v-=Qf~>Cd6Wdtv>Cq?lb%k? zbrGNlQZMtD(s8L-IrpCy?FYjj_%4PJpk)&_E^h9FQM_a~6aJcc_K;r)`%xo7MF#_K z=uJ*i7h5PL_E9N+n0v2Wnw{o28gdr+{|K4}yzf!%53Nku*0gQ4Y^k);)Bi~Y6~s3u zx%&zRth{opkdrb0Awqese3nZUK`L^Pz|sM|$Z95(t+?;x6)3i|HDhFI43p_%UYK>n zfvh~!HubX5Sl-k#E16n?9$^SHPA^J54K>KsU8Z~0qGlpfLRCaDCUO107n+gV5{$BxW&{#QdOoM}n4^4ETP+kEp*Xenb& zx(fN;ZZhjHT-CbPBLN02rgGxXLniX}>;$CJL{Ok zu_R$YjS8S{2zuO#LTL%n%WIgXV0s0Fuc8qZjkU861|Ov_TpcUh8*5#rjD_6`>(^~h z-L!i|BKEUaEGB6;|M32FI1D_be&Gk^3)|T<0goN-Z6@`zCVwM`rKN?Hb#e~5zgWj| zP6lqIZEEIKggi7#PyQPm4ER^D7qqu}%~8H`9&{K|3eO{X>x=6}<|+<@)-~S*hqee* zHV_-n$3YNYylA zqj(kDp_0y!0;=3Xv53~Ysm<<m@xjaW^=G3s~)Vpu(~q^hi6{zB`CbEsH5dPnTT2 zZ>4@xi0p4toNC!;J63ggk1pcq4vx;lFZ^QT)1IDO< zGzg=+yBi6mq)|drx?33CA&qp2(p^&0-Hk|hgLJ)n4&EK@U3b zm`tJzq?IUB=&b>yaa{DbCA8eaJ;Eg=T_oeVx-qB@yZu5shGS%JV^qZ~os^X1zJc<8 zX+TUdSM1~R8P$}su7=_TE~FZlMW~9(*#ES%Wf-Kr`1q?TkZQ zC(!M>Ej&?gur<#w`M9Z$PX+05vdDL0BH__WAwi|oYmR6P8r-Y~d4I-S2qnb5UF@$h ze_zNLA>nKFwLeK#jUG?|%f&?sgjIj-iX{Qmx~ks%`{(MW<8hpvJUrYe+p|lF%fVxF zxWBLGqwA#Np=G{faM9+8D{yl2<;Ft(7Zd|MT!CsBvgZp|=>r!A)2<&)YlRQ~L|0fJ zvSb4kV3oQ0LFY(yfwWvDSET#`_X^V#33WILNF~V-`;JX*C=+oajp{E1YGwJX?bHuE z8bMfs%jtgy;TI5AA>_H#_72+auqIMZO*q7b0MH2FqIr;0nhxK zMQTWCe1If0dIbGud2|-R7);{WTs2SMyAa5Ss*~SMoB^H;aTK{bNB)iI7+rV0&0vLe z-_6$7Z*?BMeVYB=7Yx1amw1Xhua$TiKfiMD!!UZ;Y2*}|?2@<-djY(xQ9g}VK3qL5 zI6R_?KcBD4W$*e8(7W18TCX9vEaVcgMh|C|8#I(p3mHILKa&5vjL<$78JtfGi=`BUAMgTrOk^d z1}RSCQwxYv8sfT?A?S6WjquSQd7FyA+;L!Dsx`h>7odMMS4#tGC~y)>5erZ92=a|s z;|tY03+i3a?n~{G!UAUA$I+qy@v1;QCLlR3NV)nReiu}_NRs=aX0HNa6+9WXEG20MkPr!yhK9U3EX2o9W3t}KqsI+MFDhUl|z zuRYYtXC{BlBS{U!^hQ~Z!775&GBZ0(J@2ihS_kmFKt+`}FWojz}LBbLJ93MQd^9pF; z8mJS3svOXy(JkgNp1*wf$)z5HAhgQxr#&-L>z+AsEP}+b|Gx3>{l*UB zRnFj$^`#!^4Sw*#k?VP}(euz*y~N{@rPIq3PAk>?jl;{9>RMhHr8^bAJ5@=}Q*%!D z`|;Lx%s1uwzZoR%(8+~8!5*t#XyWI~9VmF62t6js|7P8&`woNXZ~UQ)?+K&d{_5kw z*{Q1kPVH^pO&jGVf+mu*ztBRA4Q1{{*iYy&yUjo1D=Q`}WMDf200us@x)=@Y&#S6< zj7Hc8g$3v#b3Zg~25LqYMN&00LT-8-hvKS^0>Uza)7W5~m_@d2@pW|LL4EA5P*9WS zIyJ?u3l3r&0y|mB9HV9Bgzv0mrv8--({?uzp}vh(=XNb8&AY5ek8fA;mZTa9iFfn} zXfz{}N!k1cEJ{?>I7ym3M2#ARvF}FncyndQOlTjd$=u`pD@NNCm`cRHIq{o>)4&z= z3vu_J+e0`D7h;(Pa(2qLp%RWUY#(gUWeR%X)yOkCd-$_+ux>^$B=AdTFyeu&h zymQ~LLoZ|Rd<^^1!xc-O-B(Q$29?8lJ5JG46vAT65^o8ja+Zw85MV;`_=WzH4`9QY z8C78h7}6Svhv_O-(Sy8lUIhl590MSkgBkD1kZY(>3LjR`Bb$74%#5q67v=Fo)3UzF z*Dp#I;lUuZQ(d`jf901BO)ffFtp4_M z(4WeC_HKY?Ua@{l{hBV2zRobs%+G08JBD;%N9ngkA4TH+7G%vbn@$o!zbfOKuQe>& z%hWFZNmg0Lu=*1p&6!Cc(hYAzC;rM(G!u|0a*8b+57-b4g&;Fj+tEc*%lXGkDTOGJ zQ(*#S1K>$ql7w@lR;4D3`HY!(R)w^IKLWkW16jv86*Oi_-rP7;6_h&WhHn4TqG z^0N#Y02S0QMm(;Iyk8P*QZ7kSjSGc4SF}O#FeB=WKj`bfsTzWTp$0Q#xQN(BM28)> zs&~hN=(X<5p%%HQU{t{yoK3RTL8@R$L;MMS9~^>EJZFhQ=T{98@-|jW+IydNJJ~>* zP*_C|xEqi{qSz5<-x$OgNtlwFnwaV{vYo6|p}8?DI!@G?nI-D?LF~)Uh}%2rc^>+G z>i(l6R=>Mce{{u!F5;l{eMMK{6@e|%m!7y6K?=_`Bz*k`C+Mxt%K_2ZzuID>`Ag2e zwVap74)`Rh#A6=LdjIpzDhTlST#Pv4&Tk|_1|uQ_w(cK);rJ7~^v7-#bUfqQ+SWO3 zO|aI8_J8dTbJ{)_W`>gnVp6sKEVlIRUyd++GpXv$KU`C&UCst(;%_|N{fcAYB?7O_V334?f>9Q{g}$KE!!%X0v>ra-0%;P0GuPk#CI2R6@-vui zVGnEKkN_czHWF_AHg5Zt-!|F(_y~l2lzfj=P;NOct!vu(x6-_0#q6kW($tDC!>58i z1Pbnkel^0kDo0pMC-+@(-%QS1ez#l_aQ;(&6{CV5s>;U3CgDANzL{J+p81u-qqk)q zqHPe>@gji$&yI}&-m3gHnjq6AeaPszTD}dExQ)J)piT`Ik?`Ng`nCIVLF9*Y(|T-Y zz?Zv z*=%z}mX@5MBy$7|%&CCJX&bs-jliiYN_<9^o!fQ+2b!uZFj?2s;xzhc{D#7fO9hE} z3`Jjn6u$pn3;I0@s^s{^O!9qZ+{eSx`-QHf(D*4b9~$F5y-nKLMT)8!u3dndFlPAM z3Typ%t{$anBHoN@F|Z5?k&{F{M-8#zB#4r##3=~iRpw&kjg$(NvNkcvn<952mRbf% z5r6WwfM_tw4rQb%<}zyVTJ!z+vdY9bxMzP|)vy#=4Tso3@$+V_r83B+We1|j$&T6Q zw6$~j906>S3R_+QQW8isQe`EKyi|Nb(gZLb^cq_L6>=RtgX5kgawz)BD1|qA0ih1e z41VQK1T(gm(Wdm zTb^m2A6nMGcu)=f5d=?Jrz72X>Nl11GL_3AkicTUYoo_MSS!w^qq&RL;sPC2j{EIC zr|DWsTJ>{vL<`Wr|C~jZt99J|hC~rLt#9-S^k+KWU1XfJOSrs_o;q9^6PMtA{ah?@ zIqo>VeBxZx!+~t|pRV)CgHykBcH+nE(Kd@tl;qD|!PuSoWwOP0!;YRQn~5QFl+2K0 zXFwflAmFL+^sQ+cm1#ulfO^EIf2d+scF<7VPSn7V%6a#7g7}Be=m6FM;i0U@!x8qd zJTn>jvN!4CL-28S2fmCZ1Pd10f6gx!tJBD|U&3MhaYYF1$L(rfKC9bR6M|2r0FCAc zyn376@(0{7;2OX?U6n!=uEt3fD_vIM=JaK-=m1$ji|Vj|a`N+R+^M_==x7uWQQ;V^$wPhmIru2%s<4H%{Cfni4JqeJf{P zS`j}`2iZs$1|hYq;J5w7BbMZ=*z61-vGg^EaDw~rv~{$rTIQs<2h??d#V4(=Oo*kc zq%_NA@Tdk6{199BS9SAqlh(X2(B>54s*KD?vgVusU;JcO5GIMs3Nq%!N96ym)d3>7 zEztmwPVR6}Fh@Bbp`qVsI$=@z`%b#5%Wx#GLCHC;8`-mx3$oaQi9KT4xv zc+1$vl`-f2hO+56#lSQEyM^7Cws~7#4&nk1GcOB!>rSNnQ(`;sr$VFgnvvdt2&nwm zQo;$+P_~kK=4dVj0f9;7dqLfDDYDxkd<=9;w()keh7VFHk_D`(ZaA<|MB86%s79ZY z1{1lAwLG_W@^_ZU-v~tXXr9!v&1CeoV;CKCGBcv!EoYlzMWb>Z%Az$XW5MNLx@V>c z66G0)1P0N{eA{L}mEj5G1SqDO`y#CUrtaR5EB#3+=BcF3L0bag(J!zPedn8w#rH?CblLXQxv*l2&imI2EbEXihDR%y!& zF$=HoNAh;h7V(vpc_3zTW941&dc+tN!7O~R`83=5iIZy+5^%JX2?>xe&-q4ESBKx` zag%D`{dj_JHkgWoe1RtxAuT6K&*w?MV6tZ&IqZh~cM&vv1DdQ)U_u8pNVRQiXh3afFeukfKiR$*{A_v2wXf;r+wy`tgprk6BwuQvKP5MR#3#&~!b?sbSL_bLASy_;9>q zTZ9jXe!86|t~D2BCaDpz7yCS(<)3FfVT~WU%HL-=dfD}N2EMsb6t$X`k@29C@_jYY zoGFd1%p4T>L9t9j4KVc^pv3e8)@e~0Q-Fqp{8v6}5$n3*Q;5muxA(0{y38&jYT|If zZ+k^{wo*NCuxosNTXn$uVwLs1$%0CzH8pO4ErPcc!Ad3>30=bPj!ZUeL^EZ(2%J3h zP~RfV$a+UiUpNR@;x2O%Cecs;QNy>%kucH%Cs*F)U1BoR>K@jK(<0?*RDpO)xDpD{ zsDN)(XSlc~J3roJcAYny>VD8eCc`o%8P$GGJwaTEjw)23QBFhh53z5cWcvG29J`}Q zLwFAeG)uI2zr9zu7sJ=?E+latRS-TrG30c--J{an00Tt&dUaVpw1J633=^b1E5CWS zMZzMXq38%HJkZ_&4uhzpv+UjY7!T{}8HH5CK~x;hj09cMFiWCD`kDaI2p`p-BSJf{IAe>4b{WKkrA-ubw0gX)xoyXP8PO#yRS?1M`dIpCl z^1~$=C(@ix2=#e25fks<{g)YQx71(jD4mF1iZ~eD1=UN*TRxQXS#}5;8wyjn;&zAz&4X28ju+`+`S&^=H!dK1mLVbD$2=jnxLR{kmPzshJ)PJHH zr$7@rznveYyKsht)RQ{#^_jWgtz;`}fBa}9-#9N znSDkbCe>gzn~Ny^>bPoPb2tm$W3HXFTMF1oaKBYL8*384NGPKYGODdsU%&L4t z@4*{E?b|x>q7C3Zrs3cQF~jkZO6o~#TH_co0cU>L{qJUgMUIE(iDL?rC*;Tq;9!$r z>+(?RatIS0s$yXBEJ2xrEetcTw(=kO4pGIPhxos>OCln|>=r@){jr<&2eIHsBt8T1H5%??xBV?Y;vVvi*kjFu+CcGTUx6eK@$g!SmuK;xvDH>n6Os0b;Q zOxQ0)iIJGf*efODI}v%o!Q=kVmreKF!?6{OA-plU^16DzFbO50a%w|5pA@1-uS*J^ z>4Jp9_#`=wrI|zVk;=Zp5@05hW>lcOT69JNX-Guf0KnNg6%R?8pkVosdcNXAgCW+W z6@}z?be#&)e~IK(NOfahiAW$;ngx)5&ZtEnnvG!8WtENUR>(j9czcH=#}?`&vysd!H?dT#9LYG2j*A0FCU@aw=4e%w&7}9TBHo!zz{X zec%#UFaOH8>s}s5t|G5I1P_lH?5lSPn6*Y3>_qP+u>nx!*{$QYD`OHY(fJ>ANk#zl zv?Uo)=mvEDHDyvLVpqvKxq+2xL_G*JzQZ9vgl}{!okfP9FsL=`r_8&;HlPSTWaM{$HgafRf>2@ zD%jc2Eh-y*9o={Sd1U+DkHkHn83}ryu6R)T+%H-ZkRzd)Vg|zC&@JbXLfP~zi}FJk zjV`vjBn|?BzBYEH`kgG36sNUnF)BAv(ONQ_8ZlSF_MA5OaJ{cs0}rRqyDI+_sgXHR z3ep`L#{E78x}w_H2~@potVJxNi0+%eSNvqCQqME{JXws9*`@P`s zL?{YM97o&EAm^1g*+pv9lK6EKhYZA9Vpi;(bNP6xl8^wiD)hWeeU>tKK3Fk@dK4|3 z1*wb+#yFENd>@2_suw5|W|{XXsCTwh_cI!d1*Vv{s`}f^co99ax>`kl#iQAxErc_= zs-_x(5hIlVpv4^oPbVh+SLr4PS{O6Tpt@^OR1Hi6;c~=1@k++=+c2s4z|8E>5RUEH zi4eJzBF<2$o;?P{mR}y-$_TJQptWmQgQ`h;fYL&1DcBm4CTY|8t-DHJZ4g)Y5Zq{Y z<|6$EEow6Ohpw82Ig)A=s(eP-6bomYUZMt~H`b6B zG9_s|{OcR7A;tqbbQ~ILip3L;dJ`Xjp5w_k zw*Ak=vi1#vY&$Y_F(lCOFv9c3|IDYOkxN2C0 zv%n*d=WQGPu^qv?#$`!5gKo(&pZOi{e7BzgZ{Mk0n8t}}_?{0NDJDueJ6V6a806Gk z)z|$%X?&x8xPwd%fQ8()vA%m*+S#G!BYS7-&d((zgktk}z&npnA&NBQ47U(xyG-M1 zubB&QNnZgE%8KM!wVuqja(aZ@{yM@xAPg>hdj?5HFHS)MFT`{CuT!5iJ*bG@P6Qzm z@fZ-gfZ^5YNl!Cou+zD}>EOG89<_wCKX*LgG$^tOg zBJ0{fL0=7KiKDs*p|VytN1VlS3jkU$vqqC=GlnSyq`pS4Orvgwq5uXDRvf%}<@#M+ z9ie)8LPI7e?u5M+DG%GQ_VN+RS9muhJb;M36+qD9iwZQx>?S?zmWbxWhABuUNWzdo z>R>xw#K)xpy}1A`sXO9Ln3Kxy6t=SJcxC_$`lFL>!kH_nR!1W+SQSVw8LEP9h>EDg zF#L3b2bI3a;@{GCge+(D`M40#aFV|CQtDQE{Y|`=MQ9##M9A!HyR>l>-m!MDeA^|tI_XyB=vEe7qj&7NDb*LTTqefW^bBWzCmtt#7OgYtYkkl_?F9p z88rmUPY-dg`z*wSPj^~qeQ~A`3!oEu z5HRopN0l4g`KQ0AG?j~o56g;@FaV<%T0Na=#*kqM#11=qQ;EKRDY!tF1K}()?$p-> ze8t!OXed>=^1I;F8{g=DBlWE3m1^t3>eHXvdCHA8IMM3FgX{I5MG2Qg70S+~`(b>4 zvhE_~Cvrqx@Ig-8`9)-+jL+nF;7_%$s!{}FdNnXGFxl#NCCCh2K^XW!h~N<>OlQ%h|qa7~Njg9Eq@XL0%9P zQC2IW5VEhz9vOp(M+_^nG9ym~6M5`$)C1Acg`9WX9k8kXHQ~}**?@!Fa_4XB$+Za~ zsS9SUU5pLk(mpJZzz(8KcuxkEx8vru1fDxN!R6V)Za=o9NI8f6!zR`Hs;jitH(*l% zW8j2a#AKWzk8SM;Q^$i!6_;=&w`x!uT1=9)=Swu-M6_8K#kFPRy)KJ|Plo zQ`QzmoWxPZnbP_^fyl%y_t$-kt-nT&r{)af0q98kl%fe!i=9#GOzH6jQ{0`ij1rFn zB2`VT!PDd7QKG9klGn?AKBbL~t8N_ar`4w+31ib%K0kVe^aZ%YM1msr6&VSP?d-5D zb3~%1i&bf`3ykiPabA{RPG`kAOzr$0${R8H`Ir9vX})}g^Vh@Svf_Pl$+%Gy>_U{o zlBx-+jAUB(zG-{KtG*onQQ=EXX6I0HZG1sbw{tZ8x}OqNYq(}}45jICN65c>>8TLC z5CFQ+2w$GvG7A$`Av^&R_-9Kmc3l=I&3Hqy-gjAZpYL1#C-v+h)z3Dy>&tghqo0qv zk2mCY%Flu)zl`6~mi`%cG4RRq* zPhyrrss&hOJ-~=i(LlJnsvvywwCla<*5LsPy28(i#UtaBTXJj)@$k#t@l6C(?4jV? zZ`r|Nea@Qqynyl+_wBp4*xdlS7uH}n1bN1q@2!gJCu@tTbWwVA!&XOJRfz{o#PsHJ zx%T0y==m{2iqWx)jf1^3*>uO|7F*EOmAfmV5_LNp~_5Ok^*7cq)*^{wURPdy!FB&p?h`I|9a z4AT#@it1KdUa|R%?pF%uH<739mnsiIr(Pb2fU^X@ol7I#**;OR$#1t8vZd$gA-zRW zdMN}Pvy|JTkGYg$zW)rQa-VB7N(g=cOz^RL6$>?E^UiPrxd_QJGN953d9`oa-aLP5 zp?gil=gw!)ISEtY4xaQnS9ZSQvL${Prg*kSgA;_FmXp)Jw6yg6qjmLq*`P|1>MZZ( zh4Vz%Efs?xDKLox8-EQL ztQkSZ-K1w?XQ=3^Oo~Z_an6Ml4Ih5$MT^{bLMbjR#~62}_PB&ggkA8+^kqCsYhucf(aP^io9=3# zn5GS{%P2d_OD0V z@?zZsI)UGYlc{>Nd}+Yk49NP56!70RwmY8FpUz_$kC{-+qW-w*f0JHZGk+l}u#_>^ zRgu$jJXf01>~r!M@;KEcy|)k>wuOk>Q?PlLWluD>^syG)P!_KYtHFvEglWKrebapr z{}PXxUZgb9K59x6J z1dBX3zKU@5@+wkpT1I2V`TdoR!BOOUGl*h`+g7a4s)nO7qP|aOgv2P=IM40we$V&K z%RjZZHjfTB-~L`d?_DLhaW7vB2**v1JK+i(;nFYv?PBa2-0Z&-JM}L9vi8^KYUn`! zzTfCR@fzX7Yql=BpGD@G&MBQ^Hfr+S9xCD;cK%?=_PULL;@;=9<>8GM@w0bW563;D)!N z7p??Bf$T*u44;cRF>csZy zyC5Z(257xJ)~Gf{z5HutwY@9vw49D`OVymd$0B9-{MpB^tGBlf{s^zYt_&JZdnTIepjSDy2hmKha#*uL{ESS))fMtmO& zFY_WqdW|PZ$iqKvuiMkMhreN(xzBFp+FvY7`2r#$&=J2VFX_7+Dher^pu*KR68kjc z+?j&zK!&(1#35~S6yHF)-+Nh=?Kcn_-LkNdLt_vnUk?D_k}1kcX%gujij?qS>;3(* zDkkXcjO~A4>>t_xvbp)+^}f2UuI@Ch8nHROTMC4A`ux4JZ+&_22b(}!X1^OfL8ukz z5S%~eWC&sjY*=GbODAAfHF*;3j!DE3akPgs#`>MS>Ug2_yT20mN05GxW0wnP&~V1w zT2@XC^gjADEvufy=ASK8cZV^=Qf8E@sMaN^X%Jg@KjMhX=nxT6g^*Xw7!Aq_V&gUF zNFFt|RW90pquw4*`0TVKhZ#^q?sYR)HlJ562bE0|aR%S4ejy5k86(vkW@POA2_cG% zx=i(Mqg@0Ct!b1limur5wp*7!-CrCGeUcz41dI$nvpW=#xtxBy(S)51*Xuu3&L6rV z=*n;F=n;2RwbI$VR{vgOPDu$xM7L0oQ!Hv(B~!LdpR!AZ8u+R?VculqD-yrT&a#b% zU>i1j)a;k9cp~^%44DP>ebvpTO^44uj{8IAzU#_HJ@f6?e661AK!hnNo_3ILzv8I@ z@uQOQ45SX_+W$7eeS_$Uh{aNRpFTJ~ur+#@7(G<~4$=5PoolcLQWyNwzItlvWloaH z{;}_|iw?SeWAWYM`JnP;>`j!w0Skfz?R0Vb!Oc3~t;_0RtUl%%IU{TAXX}8fX1-O6 zcBNJvg>acljtD~~J6jaam$N6&qmOY@v%RH=rhv`i;eQ&>@?qZc@u&Fj1GSig#%t1S z&C`FpTvl|W`);che~nCX_I=PHX_Cb)Mz1&hX5N}IHm<~k5Rs*zuvpVz_27s( zkp3v@cLs(@D}+$Z6~P$o_-{e|ajf4Tr_{zS7Wn&p`S&(Xf5l1%Tl_Y^DVi>Q^8VC} ztNTUk`g=Rm5rMhoiAC*$=2Hn1%_{GCuQ6IN*3t7 zY1?TPnsWWG>2F^d#t3%W*dxatBM&B}M-yT$-)glgD@a;Tom#UKP3flyPs*C82^r(t z5bU!nw(tIzr#E7h-CsK{9^~MAnW3wz+iA?{IH>D&ayZ*4>t_GsIN9#ef?|yXli#;n zTBq`8`GRHX-@VS4M|u*E{T8$Z0Rssqz3a*;FCO1du)CUf#Wj0M4CwXxSp9LM>jS@O z1YOrScd%cF)Vu5Q>vE@$94YV71v^WSz}cN?2LZ>|sDwHxPHy|mX~(qJA zLmBG{@+OQHmfs5s!f;d-nN;;{PG4hAH9EKpGfcCJ{Mknkyt`&pvs%Q&-ImL1^vkDa zX7KqAurvZ>@q@tyj(d{{w8-%S@*`82A#(}|pgHcAHtfh&_#8@t8NADiV{X@$d5Sk^ zvX4xI^mLbdh>VHIa{JW$<@FA0^sd#~)ukZ`0m%d>i5p`ZtbdCz7~`o)=@lt`p7+jY zUFotySz0g^-ExECL@wAkW zOAzA3vvP31U7WVG{btcJe`w7ltD{&?7`i^IU+>+nUoOfL?8!V_i$QigdSzdk+K!id zo`Omaa9kC0kYG)E3{%H{#z|JHH!RnlwBntx;#I4hrwTWY4v5D?kPmKtt+XeNy@AMO@_qql~-AnhR z2(cYC2s9_S?DAJ!Vv=vC?A)^;*QDX1Dka;&mYN)g1dGS!COly3`hDKHUB9^0FFO^P z&b<1+PRzUwcPC-RSy}0ZZEpf9oa%$|jcxKA95?)CDI~qU8g;>>JEU#u$MW**%~5jK zF@~wmPMj)wVa&4ic&6?<0Qv(qt8!daq$IVy8}Dwp0CNm}@qmd7Lb$^h>HIm;AX~U$ zW!P1WTUl9UAW4q(9GU-dqW|sfP6pO6609gm)OAggwaDtVxaXO1?o0&lJBP!6(;`b* z*O|}_V?+GuxwP*|+|<&<{RAaiEcl_gy-vaUMUjHBxV^Z{PSMu&ke~R4Py|OC@fRjJ zYXvi_Aui`m9|Dr_KBoi#a)=7@lAKcrMqpG@jzb-NrMRhHM4wZnAo~g0F|Uw^FUgfq zWC(|@Zh#s}R-3QWm1k9r)2#Hbv2^6RR8|M|K_-BYRz_3Itx`01CHMi1n8xKKDZM~R zXmC4D4NG(K)SVEMP?^PG)TdH3tmZ{I&z$ev=Sk^b?+&L`@$lsWTsbBE;{hp?#|WFr zbv%)f_X>O6+@7mX=69w@YRgS+IU(F4+Me&wI(EsZS*2}_a{V@1(8qWULvqZiUcaeT zD~}fBa<}zje!sTRpBb6QO}ocRB{`8Bw;km(%{jb z=}awrSrs@}RjF_m*+b!LWtxkz8~Eq=s%mjjwsBPk3VLZbEPv`b^*eaApOK{il#~WD zh0h@H1o=M)2eqN7JoVOBa~}?c8m>Ln@zD}oIa4irWevBc`_dx$___OnQ<`1nk$7-K zTyry#YcwIC-LS&eoe)UoKxzV>3Gr`YOZ7b9&7xpz=+g%;LM14|gGbx|o>j=s2+wU* z&}mkswp^FYHfLs=%LbIBNTe|VO@5wW3yZKU)G$jKV!Y&Da@5EM@ zis7;SGlU(c*vU=v4h;bBy5Tcri)@wLNfv*-Ss)g*Ir1jvw9<5He;Ym&7#pL(Rq*TsSq+OJxgE9$3=Tcq6kgZeO@?sdSu}|3zin+G1&)S1@5V{^2P&i@+^e>+X zA$+|4N=kP$QuvvWAgB|c{10hO=IT>d6(=?h2pG?5<^a(GSF4<9i%5~lvakC7b#cO- zzRObP*Opbz^lx^K;L!I%Ui3XJ;|Y~gmY8~9zp~g3CM{5btNoJsvN^cL;TMF+v>1P5 z2-c5-E{GG>%HLyQA-{gEl(Ma8E z(Ftrd9&DNhcXl_QO`m!8VUUTjhcjZ z@7hOU+SSC``N02v%aY<{;hnIr@U@JRIs&$eut73{HORBT+} zzg_yy@OdaX`*_ou%@s3j%0wM(wPYySLA{Q& zuLn7jSe1XGX;?QUt^UR+s>W%onn$UY)l^`@L<)h{s0Oxx$^xsILv-Uc*uQoX*mxnb znY7B?447t3hZVVr%@DT=lW49H8AMM=On55i=k>%F9F?H6T*!=n5%3CG>8Dm?YV>{eDvj;tWT?3Ip@@#pbRq0M0Wq0 zO+1ys=FBGVyfPAMd#qw+B}UX4pSVYPW@g)2|KEqrLwPBK-@RA1eFh8S>>_PBJ`2kY zapd3G${Hr-xTr&%B4fN#Xoh+4TlPTAk9&j7uOu#C{I*sN{a9j)Wo6azzq$^h)W89m)Mws z3=HZq2S*SgcHsDtx0vxGU%%%%Knv^v6T^)c zk9@@&lN$op7ZaV+7%KUd%~8;Os=AN5E|0v42m%N2sBoo;shR!l@l1@<=NI!;gXwJS zIL0qay|NiVtmsT=fmYr68QXG`(@Xe4zhUocXTW&h(#z}T2<3kJZhjs4(s^!O|Ax|Q z*L1|QQu82QZG(&YPo-w=kXlrd^Ioj(!M`^q!Akg8+hfCKIc!3&d&ZDl1+OpX&Z4fs z%_Ha}+|*Dd>HsLjQM9LUPpeg*3^rV*RUh6;vx)R38; zkDf=kqQ&QyW1=`1yq&6`LT+)lEKI$mI3}GVX{UEbqZYAn_uD_~u1D%0zV-XnqXtGO zWVLkck_OK9?jM^@hb)f8Q{yBtjeJUWY}jIMzpZ00VMH#hOeNjYb#zy(UeNu(L3I~3 z+Dt_6zTb@rOF3@9k7N!>Eko4B%}&xkEJ^}d(PL^3tfezzA~S6v4QmHW37VIs zpD+xn7hr||uuhLy)D91iu8u?kQ?D;#;?WwHnKPku+P39pG|X{_xad#&pU5hL7Sw7+D7< zWs`w&>9%sR-JeKo^pIc{^wgkj*Ir3oVH{*~OcP`p;|<5O8*~jo7)2GQBvP7bv~xZX za1Mn)Q9vc!Y3b<^P&g9>S!VLGpWrMCW`%uvYT6;)upk9GfXaQ@l(?^j;=a8MyvXu1 z;o6vLPuN{`{&4`PYT#<7KRC{1X}kqfQzY|wLI=hJ%&b@#N8M+1uFdcJ2C376mc*qFcAC4F}U1T3Pbf6oxIa>x)6Xc7LClhN{7I_!9t z!l)a-b-hZda;$$lrERQoQtABPYU#5|T4_`(M{~29q@jr%TPQX6(8yUkf9|gPA^F<7 z+%sD7>qW~jv@kTsnz3$lOBHl0Y)uvW|5gj_{#(^7pLNjoi< z`r`CK&B#z)A&Q$hM1y2xmJe6ZUE1(qP0aC@M=^v)_ns@{&~*%ImAhByWg>~!?bk-9 zZ9Nl+2*qD*#J8?CTKd+Bs>^5Lj}r14cUJ=~TH2S@?AP}j;?ZZQUC$pJiCK#uy!)Fm z=*;48wh87pp|8erVh(Wf_^6%zmDT8s;Flh`C4a* z8e-$80mc+qDBV3GX$hu~JbcV?{jocgA;ujhpVh7Uo?9A|qOIG_OR~EPA1NR1-UHF= z*^T?%oOkoOe&XZLl)u$Epi}F%+vJ20dapSxqcS0DX>2Sc`uVrs-C(Y*pYn!XFi5gX zK5uwcI9CM~qU+DYtJMj0*LG2hT*q3U*vLBD?GZD*zV7jZbSn1nqR!`BznT$5n^!x{ zx!hs#KhijmfTo>7!spAb1NG)&^0t=x5AuzwuG$qPblJZZokC(=k$)Mca9}4%RnY8z z;#c;T`!;>*9d?3t;+bNC@ja#{2PcS&Iw?#uR*wT!UPC#y&`2D%(H&D;TYEw!;`Xz6 z{qcUiE4&GRSOM}A@9`9`zEw;3aLB-p+!a%HjlE(mu5qG_Eu6ih?rhxXXykBMlptQWj_>OT zFP?~Nc!?eYhf9jUssmbhFigwEk{mN(M2L)~uwE-cCH!9H4BnmfrqjDe^#n>j=**6CWj9J5mUFY;KcI-Fkc4MUbJaTH3BCpK1MQX)P)sux2FrN~Xe| zOVaisjef~krSNYG*CsPWcQWUsYZ=kJ(S9^{uQK8z@``F8m_%o%CH=-D$~gaFIFt4= zGM1u;Iml=br*EJrdFj=nP7py{U|jv4F(+}B5qX#S@uiBN`zXKEV3#TK^t$m~`_H!x znG+I;+gx|Xv|yX)`cxGTEBdr=-C#Z#L+aOj`YZ{~=~aXKcCkK|ow^gn4cx73YhTW5 zcza((%+1ZQz-RX#FMcEi{wdCTyveiu0ILY5x&N)WIw5&`$nrW@{Dx*|aL`LXt=KRP zWx4S_;;nvKkfoNkJXk)X?n@4`ORw3U0f_ZGboSv5i=-ueg-`752W3sSSVW1e^!Sh@ zGQZPj=vYE@s-dC6j(g|^n7v|!rBM=&5}1h+*XknUA40L%^7A9;#Uq!Di8i1W3ejju zl-A!giLEnFjap4iieP>7Uq5HOUA@(BYjfRir*S&MtomXQhpFEl2lCC386bWcT%*ZJ%q>P!B@yvl#=#&`^F=^)R^?6?4giJ=mz%eq9hX zLDN~Sk#>CQPFDP~_a_raRFRVYd+b=jhUVtqBb+jDi&`@1?xg3Zfo<3A;bew&UG2** ziM!LjA;wMg%@NZFxAWq3lYcY6fBz0@^*P(Zb$!E@im5ssUSh|CjYLI7rNsP^HGQO1 zr~JWL$ljKQiFltN@iY{NyZy8mn|sZdd1Rv(<2bR9G)ThTPY+#A9};?KXr!``10j_) z?;*CvfM1ES4)>}`w7-caT-&@QSQCtCG0==hPV7rt{g|Ih&pOOG5?W%HT=GsgcouW$ z6xYY@(EjHo_o}2S9$;<{b-Cv$r3A;VoGnt zZd;`-m3~ZrxIU~y9uhd&8z;<~a?m2Wk1^+4m0uGRc*8~Q8SyS-RKE6a&4gg7T%TAx zYZuJt%X3o3)~Yb~bQs4Nd39|T`X>7dLtR7D4SezvgCh|ApE{8>($E0>0>SgHEG z-!~B@rT1>*tC<@RWUkF#MNcZe5^M=P$&Ko8*3c%0n42J>(8b5M#eZx_SjH4 z`e$m>_(?;_N{sJSnPpzc7i*qv--lnWH#%YC;28T{wXNUhnFikc3VPVr?fSm{A$)t{ z;c$Ym#O~o=Q`h~`qb4h{0c$bXArHp_nX0`4YGjci0|WAU(XmrG>qd;ssCzeJm zM-LRO6_#Ihz|?iLq)mz6RPR2N+3q`rqstrbDsQ7>CE5%%O=T3S_9x&s`VJ9)uM3p6 zs$3LgBU9H?TG2zX)t@xw1dKh2JLvalXo~mD`4U9Syk*{_EM9=?W)5 z6tHGftGcK|RuBECsQZS8(RX%tDgXIPT}eEDeTfU}#7XH_%OX z@siL;g?DIja+0Czk4o1cF`Cy>DW&~wkwxut5Oy!WWm8+{6o;M%2%KHQfW%rQt#kW zAv31>`DST);64<0{F7Leac@?ntTQ)D&75EM2+(&2Es&$dfn7sRJxV99e znv%E6(tFztf(?p(e$L#UsSgyC#SeYBD3$&>X5v@=DNGY{TEO*asexpO)MNh7-@g_< zKIoO4`W{yvg~i1v#Z&YgBhD5h1QLz27HN!(j5Z0iARtWb31Ih0*Xqgn z`H6{&i7~7)_n7sM)i_otZd5a}W{U)NkfkUPYZmqT7NzPloY9QM7q9K=W`)^odFU|E zvKKQ7^QXraO3!;reaz2%_twK?&X;>YkQ5W;=fzFr;OydJOlPMgzI;gGLB5s@Tc(^i zwIWx#`;a1qshqpPc-iRy1veZR!c1s#rNA63)ALkvSVslR*oOh%Jkz5<^g4o3$teLR6%0lM9&84_ z1_A%d*uwmV1`=%KK2F!exW(U^9NiprAOE9I{XUZ=JiMQVJ1zn;acf(fgAlo4K!A#p zqje_bc)PxyUU!4TygCPIK&BQ4X#p!{l~K!iV|BohgX!IO-Odj_Z}g#mk5_M{B+mMY z9*e3Dz(xcM1~%e=1wo@zQCC;jU;v?DX2PM6@DgL2!Qx3Ov0X<+qC%>pR@ud@S6g{; zbmdj6(2{3e*4A1D!o-*x63QdWo1CI4rfjO09e%ZQmjh&dhlh@<*9jYU020Bx!{GVz zY_#<}7!o9kneI?{q<<%NA8S}QC(4P+vrfJnf=(NGjhg1>W)74$va%NUeBbIgz~)na zF}3&g#OpuikIi03OI7T;RbNe-VVh^d5fR(`c{ig->vucCkGk?2>a4`-l{!Dx))Fmh z(WeD|tgoBaXJbCL{TOv^pt`k5dM7bdt$S6JY&j!#qJS1v<@q3d(COSSh_cI;!$&39 z<-jEC(1PmvYIE0k58878QYpO9Y|g4itf_C@qp%-?O~`B+cjE_6mz%ihr$h3{ki9*- z(ed$r@(rIITcgu*BiH6T2EAWhS}A|3RjJV?!EZ=JeHLhGhba=TBZOo9xTHrM&vadUI`RL9WqRG)nSCVc zV8nKRfB$%MeYXABQR8gIM-Ch3m6A$2K6dWkJ{vB9IuMj()0Ot_oY+{r$P!Giz7o}O z;}v-G)uDdJr#@7>iGl!Uypk5u(}{LKhv9JVr=`BXwMFmNV)RmnL>3*pFIc})Hjc%d z07pohS1f(#dV#EY+h-037Z=flgU zduC(Ncg$*?ap86cyuV`TK~nbAa|gY8oR?nZtUHwEH_>j-ok-1%IaAw`dv(hPb}E<< zyal~uAEnWzENpFTU^@-<(Az=z9Fcp9Dw9@hn?>3U*gY%u=#)c-{ks`(t+Y(iGGt@48CQa=%&KwNkFGu2Qz% z;-!<}p&6rw{Rka%mqQya&1Ji^|BZHwCjb`+HP$N%m67KRa6L3*XdI(8HXKl{(P+DE z$noY!vY59leyeaJblbAAl$)Ci!pZm&I>H`92yMjaC5vwA!*9cGD#yNR?N?S(T4Akd zOa>eL%m-4Yh55^E@%3wAwfg&1U6Y%k?C-s2Wv>J5uNP`9yDAPu*-~Tk65p^APp+-u zYHRD}e1=tjnElRz#YZPPjA`wppJs}qk? zYk>b;LtQ=tjvTU?b324@%qy>A%R5)vxDt-9Rjy4Iso|aLoMOGH zM?>%y>`J$`Q+3*CyTLul3dXvI#0_Cp{oE(?o|K)A&h_3}MSTdQh+tm8Qfr%=(T(R_ z0pOx_T@P?StcLIX028V_KUh{~HALsCjsL-UuSgVeQ}Cyc-=I4c3f3T5c-(@&&E6sz{yH%)^5?E-ntx za(NdQZa|vu5#NRq7f;(cu6I)9xEr;&4V=W^+SqPSeGUxRVTy$bh_LZ+D~A=nl8sdr zNPfR?KD>JYIKahi6__w+;>(E~kqcggN4GcliMx40l9wz&=PXxo#_c6`fw=)LE+_B? znz&YOHKb+Sfj-RSUZpn*L{-C=m?~a4sG!{rYw`t(U zRIy6bK$R3}96;e4HEYM^Dm$jmEQAF6bt>l$>bQZ)<>fg02F!60Tx#)XAMxWhWq^mS zzbENR;juJ#8)#2A`1fe}Y$FWM!psZ-B>Tt2xaZtk54R^#c3Dv0Kdk6<&9}#GPpPIz zF=-3DA7FDnzYC(CUU_`{)jF}Dm>8DvJiu69F|oMKP4mOG4ochcoF1?mJ!E~a?`K|{ z&sP~QG&)g&{0;bO^2o0{3-x&372ku(VVioNz2bD(>4psB$8V7-mPNlN`WT(r1-=`U z2@PK|KBMG)UT)1>S*)bXfNW9R5{oHE>f9q}%x(JbTVG1(e4rf2o(HtbCd6^_pl;CP z*l9b%p!>I-B=vwF{Ma~K9RpD497#4NwmU_$EZjr%$n=l$KmY~K77;;H=nO!7qfUQv zzygYjkS;DR011tdeFg#=++*OK0te|!Q&SqSr~v5zR|5=6D0|@UP8>|(y@D`(121Wu z`R(7M=%H;;k;*WC42jm*J3b!l2}6@X??6ALk)Aq^uT4$2 zJ@p{Al)g;=K0NGqYFdqyqYnuQdBz$WdVG8=_+q)CwY=(TT!M}AEyK3~1-9!0iCk91 zMb*5l4cpN06y8X;miENB)6wT9(X8DF$M+ZhFQ!`Q=xRMVAu`cypJNMWw3sD=9`5{H zA{{gh3=F8bQk7Rj@xh8))J8WpHfEJLCd@IG+A5O{S;QBBt=!Sk0dh4mV4=MH{9(GL z0VLqA0Hfg;&y@g63*bCrZOsIfa|K;pG|#z=y7#8PfTaa-1BgeGN;;Rhjm;nnzl4Ou z?~@ZnFlCXEkvt+IF&|l8TfBXX&dJI76iDMaB4G~?fsBM0IZ{E?zud@=j*fmG9P|M~ zP~&}Kk}_hQ19e5rDly+3|D>)>(%07qP#O&cOfC2=SX_SFaoY5eg33x9IDG5;*9gwo zyaBtG&{pr;nW-8RZ~gjJPhpGEY^Rn*Rn2;X`qoln*hn4hXh~522jEzU2mmFQmX`cQ z3hgL7j9=gXb$R^j-T8Qb;<7jB{PVc&ge!IAmsNrKX?bRI+ zN!7X1Wzb~|4Jkq8DVbMY4$*NdtC-LFp%f79o9FNuRSAkBaL8;JS8P*xFP}w+laT8z z;i*p1ah$4@?PJ=H7Nc4UmK*Cim(mN6Ri1SxECU4OhR?#Qv0fBEZE2djm0iiJejVyI z`>YZgA6i5nPh%H*#ns_sLA~Wdb=GUdSsrZD?pJDRA)1)-8u_fTugUrsLOD+cctcN~ zb%Shz8G%S<8CXCp8~s`!oLpJU33(;fInCPK!{cj7U=$nd>^Y84>h;>Lq(gpM1(~)$yHEZ&>9H+r}07jUmcAbiy!LHq5pC)HWiYG!O4z zZ>E z^GVF`YlC{742Ag#Wu1D3uJzx$MTj24y%Dn&?5giQG|WBfDvY9)7Q%Lo;jkP`}YVBUhGMq4AL4Z;=R@FTz*z@>FEn7p;LIG zA$teQ($2F>lIl>%u&Z2?ZMsH~1a?$pZ}@~Ff7UN9v^pi@sP=ysgC=3<3Q(b8BdVpwKiuO(c$7&#kFLRk6f+yl*$h z^_;%6PjOY5EZI&9Q+ZaH9lq>vpF6m2Nuzo_!`1Oa^7&;2nnp-LLfu&cEsFz*?JGnf(!~&6ZlJ z2IUwzH)fT&Q1ua}B;DVfXFsy&3q7CCd-zIYy&R3G|4))uR0f8y!EQ*#$mncSz~Fle z0(M0lP>kyc(`%IWvq8#ii&ccQeFKb+qe~QqgS}l(V|2ylBj2K)X!B{`_hfQM24T$C zpbj!$ZgeXDkg#N2t+c~F;`6adn^rK^T0srMkir;^>AJK zjMJK57>W`O@-ru!U6oc-4kfSpVs!{!X_S$g8(8xkHz$;qq8h6(lrVK~DzQg}hxe!T z8d#Y!48^;JIDZ{2w;fxH7g;*IFsgPalVI5=Ogz0Iia`cs=={cidY)wIj=j;z#qQS^ zAqp7zXg@kBi-Al2Pvy9<;6hDK^D5Xg{sCR}M#XMB@(tn?+vFeK1?=vWq6U!#tV^*n z<%HldA7+JYt5(E;<7^Pot-cx6;ZIMS+1N>xm3Ib*ov&0Bpz=yho`R*2bAEDT$*BLBuPhLDX*iMI6 zTs#~=oM6KZ{L3M0arA%%07^jHLDAIgu}A3Z>pOROh?%0yq{T)8*n{vNaUlyFy*)CG zpC$S?jY}dFbP&YL??T9)n+hYP4Ksuo`{vd8%ta~Ac2fnY493~|*O$ZpHG3&a6u0xa z7iDBfCM8F>6cxXWvd)H1UeQcuc9KwK-or8?!q+0;sYAmncmygXr%V0mHI>`A9$%Xj zOIoUCky(_BkesbxlLBl;Dw`+K$|dw4e2PeI)YZ%2`+24ww+VG}DBear6D}zj{Qj#w z%mIx~^Epy%V>%ULyiM8K?Mkv1`~)d}Aa|olUDE;X5Y^LjRI0`1vy*B2V`(Y2s%pF> zRr@;gMf%9~-=?mFvolw~ShUzslwU}m#k{_*%U|@Bl>tS`_TA0JbvK$MLh>a($uN!o zn%Z(akA5lXaVxG`XNk-z)l5VO=7iD+%XKj4!#1U_+A=<-vpMu0$g)Gz6&6DQ#zxT3DB6dNy;o6;=N+7{ z7Z!l?4OsljBv+nA$S*e$P!gd4;pvGJfoFX9#)wV_4ZMSboR15E2HQ96uV*JG6R4`H znhhmV{XRN!Qsxn4YaSdNLZd&4dCO{0zs4>7|GfajfE_(?Er2FZ1;ca! zdn)F5o)q4YYmNKvD^T1GSCtY9H>AFt7Ko2;mdHGA-o__=t^&w+^LC;bY=1_@=d=g! zTF#%75@%ZA>~~R8VOtxe)CIp(SZyt@IMB@k4PzTvsWiluJy;~cXhGut{)-Q2aXn;V zc3C4o2Z~kFp9r57Ukrm{;G3}7?B0M z=I`NRn1?8M!vZ+GtBfe1CHw%sn4khf@;KX)Z@=D(8{ty`+7b9m$?G1x!lEL}mz?tl z4bjnLiIpZ{;izavuNM?klblN0Y_u>g{`rTQxw;a#&pt0GC0<@W9$H2X!s2b1r9?v7 z#UR&p>g$S1`{`Vo6-vJSPU|}<`fwyCg4*=yWpxmhZnX&t0z}LUySn`xleHM? z_m|_TzUykqe!KNo7iiDdXGuYa{1*vE$UUECo~+m~_r!<@6!E_cmOzVn(n12yKjzJd z^W?Y#Zurwp1R~)}40xa5y`zwQm51?AQIcdV@Yli9>TM^s)*p`6^WkiuLIkt>`l*b2 zFu*4fT=&_=5x@EQQCQ7BJzQ>;DhIytJ(b{arG+TXI?Nq+q;3)r?##?Z!D^SYj*)b3 zu%hiJ0ViQ4c2A{*qU1S&|DPfnrzIy&j-(rZYAG;rrwf)zo5_mQJ- zk!Ikk^GX5;*7NbJjZRNv#lph6{x{#1=)ODN;|h5i1X#7}xu(tt?tnd&jEs!#`U%N6 zFm^y#g;tF|xF^~-#7f;yOI?b+le$`Q2Y{tpWfWqq&q^A1{czQlG~vI)55&vfEDM>? zVme?(xPmHgCGhsB`KWREE+`6*W-wR6&%bF@=e@S<$qEP4nw?hKf6dg2T1*48|1`p5 zlqGakh-zUlKS#tJ_2b8n*Ku9fSPPBpMqtyP zZsG-z#mHIojT!aMFV4+H0(Oii=6&2RakUawu3HVH{kwy%2X;{Roh><3Z=Ma&47pE8 z?6O}Wq2X>gx%e5XnKvacOSgHS3_jf7y6%4RwzxW8C8MH>u-3m`?z%Sw+NlM|;_KIg z!mwZ8NnqnocG<+P>+y;RkPuw@zGa5@Uq){8{JFX^x3Ze?e$EyfT2}S~5b5gjA@pKm zFkny&MV-{WwX>563X*y%WJc`yNs$N1z_;CGeNQ6A&L}xTRm{WIKpfQTkW9IlkS}wz z?#!xQf5mg&75ba+ z={14LWB+5DHFa6VBD?=)seho__)o3dW?Wu zzv6E*-c#GoN{&W^hPutXfe#xL_Q;_p4dac>%p_lEOaLzh(jP?B1HJ2K0yV3JsBk#{xS;pW_v4V8&rUU9an2{p!{uM-gzmzWfMw^Tw-T&vL*pG z0)Q<+Fa)q+w#&Zc_H1k*VE2_KrJy}lzLd$YvKb3aX|O&N~C8J_Di`I`x68 z*k>;GTConz$=dulErl#et^LoC%ZoAH#|h>wVevW$C@EtO8SJ?)+2*<&A!)|4Rew;~ zyr_e5mKP%RR0n)7wV{^uq;WFyoZa2KO_uuOi#;R-P`sO3?6DM03j$|N6gT%ha%Rpaxt9Yn+p8Hjs` zPaMb0$_m-t-5q4fj8C6{W8yGfYqqr{7rz4ZmUO4@WR^gd`n|s|%a&@u1WoNu&@*Ev zoH6rt?@&lf82z|Q&tlj?8a4If$C+v9_gaHWdg>$>SZe#yx4Y9Q8d(ree}0C%EWlJ4 zQZOHyD6}x`o9RtTPQarjTF33n2^+(Pjk}uvGd=shkZ!&(&C10^>u?XjJ@gX`PT=R~ z9R%vf3!7Y^vRJA!w&@zKan(MFQg)`LEQdtzuf2ka^7`> zv&jqw!w1g@_EyStO=#ahF1BAg~&Gkv2=#z+|pIk{{ zO-jX#gWTvDkQM>6($bD7vFn7q(Ix@*8j$fp|4^s4*!Q~A)apB`65A>|He;qc{U3c5 zT5KRuuNyZKZi12lZ`85^d=OKL>|~F-7TRhYhhRG|K`a)`C+zxP+(h&vmL)D;P`@$ zOEmr5@2uM?uP5=-%VaEH30b*mfgo2P(X4-xd4VG|US^)1GL?nW@*@-n7A7G7wXu*@ z@W;v4UFhCH>+zR?NHHAepUwTaalDa06zw9#OIuKjX`l^Pty!%L?;m?5S}1yJkd|-~ zc;%WSdWjjh`CKycWt4N6odHhuJ37NBZq;4K0l*-mBnE7>71tpu!3ex;Ccbcdpc?ji z7lC+5Hw`2Qqz7=3i8{-;gw#UTK+-t%9QtA{tK{el*4QoE_u)gps0I>PBq9nqhn+81}ECu0~;H(0&0Cfe=_>|`7vO<>O3$$ z8OY?XmNS6%$|?PhgY9f6{}aj{`$t*{oD=XYI_e}-V2d?Ab?FW21W0PR7WLycn2Zi8 z47v*RwtHi*g~nv&4cv`3P0sb1WlU#`(hO-mAPWdacogFa86rd{wA2dx^$b9~Uv6^p zp@1tT;WT1Dw>lyaFsL!e(+D0ECIa}rV@z#sF z-y85Ju*u(CwE^MJ&5dxt;)jduk|U*IX2K*sb%nodT5DqKGj-|sR~kWb znVD)*?fr`K$gqA2Dy%Xo#IKu>Xb7@2Bh}@w4}EesXVak}^GQ}RLGO1qp;!kd%1z!c znq^to@cuUA1(aapUW(u*Gb!!IaU$h;7+nlZJ%e>jMA^?=rX_x)MB*S@Q2$vE8) z`(QETUpE|tf1_aYJ$Zuw7w(5QQ&Y*)?B7X$y;!D~#Y9-lUm^qQh~e};fg?dJX(;}K zvro|i$6~Z*UC(M@^M`XANAxOPFM0m#meMYf#4vy{KoQITu%3c*t^7|H=$t6NRpgzT z@!!*GVKZ%$30^1y4!;nBRfWR*j^8~8xW~ghR85y|icn1asqY9BjtZimg0t^?DSe_b zASMHgdtC$mHzceAjS(596jvwz#MyLSDgRc8KtqFW9&r6(rUMoi9_ z=|o*xGMJp3BYbyQicm>%EJVt#%cJXyLZRlIDfXFNU%j_m7b5C1Kh8P6Dex`nXjtO|a!sooEMTiOe#84%1*hps8+GmlJXW!w!BLb#;RT$Hz z0zq8rA3LbKk_K_(EEWq~CXJZuTSwXw<%rY-lGJK!QOR2ABD$3O)Bi^3mH^pR=kU6uz3~_!bESIztoU zHAYc2oca>j=kr0!OL5D^ZWW7$sPbeVD%q78TduYDKc8%_)qin5Or#W8cnhlJ=p5D+ z__Ach9tZQA=(^l-v6~D2r~^IkYL*xy6yB(pvdxAglc724g!HlFkSe*)6YWA$5HKR7 zbs2wwA?n3NdbdP=L&uH^bJduSS;3zonDw}{DV=JUhliuj4flvh$6$`U*uEPThB=+R z(>iK5I(4y&iwsqD#7E+!>2EyjKrr9PsWfm$*_b5hh6NXWgs`|nF0@7Rz}$~96g_is zK%)N5G>Kv6u4yUXkqehx;8#J8UBfncCa71biY<9KrN{2zmeg~PnWtfF)Hl!y_2y|k zmB^uZp(z7H`pVG3PUyth zYh9=f8-#+14={FF3pKvCCEw3{L$)6&Q6wAUwy2JRHH+G+^5U5ET7>kL0!N4v^Sg1= zm5uQ(;JU0#b%E`#SZs2;|Ci-mxVbKfH$4-6u_c zY@x*EmsWzUwxr=8ZtU4522pJCkmJ88ZA!G_05YrGG#fQCvTH=JYhstk1doLDnfr43 z6n)i~PP`!(pHJ`hbe=nFu?A=;S#@yOsaZuJv8h@3Z~oWLdk@S32(o~*9OK$~Qk$-; zj`jx-%O+XZ9He6!>V=#t^(DwqQ{+zG-c1;7Npl+Bye9Mi!p6W6f*`IET7rK!0v$RN zNrWIdM)-;{!&t=N`MPG!%^qneExbIzb|)dr;R} z4#V4Dpwy2oT!6!!_l!kxzVxg`cN0Z0^VGtK)9TS>OGoI7z256Z_z=g(u^LX(;?IeA ze;d^i;o?TbEW1w(2NBL^>mrl*6nFQ@_&$touhH$*SiOt{YqQ zQ3~lQtihZpDEN-UsG_Cr^2y`Uvl^YV2QYQ>54gCUnL6i`0~DM(s8@wTpL5^8{TX7r zg1q~;j$|9wZ2|ev1R6*jj|Yd;+LD%593$^AA|=B=^0qtI8ZP(NYLAZb8EX`_L?zCw z3cc@sv>Gq~lQcGEaBzETAY|})hh<|B=EKC9!|Ada4QHdUd371yNW4QR{FB!ulyT%5 z=gHfbQSjl}GY>O}jo^fAGCLbmX{GQ#?`>I}q4-Y}^c8}KJ;spDwt{t96&hPHF&y68 z=#=*s9dU}ar8KBV599E}#u|K0W4N_cRM8kR2cKT)G3%MoE0tT~G&CraRZjMWqt+8`0jRf%IfJz{WZ zDP%(Fq80f$|8r*4k|9Q?1MO>x+cTc!0+MtM>#2)1{~InLUXTjRQ|u`ztxFhP$$ai zoBn<5u!9i)ED>kivAeOG3abXbk%r-{+s#RY@tvRu;gGG=GL(<9zqWvnGJF}qy_*~f zie!xqS-Jg$v@#tP?`KdU#Fgxdt6ch+Zue=UI!|-MM`9wTa3gW~@AgH|1J7R?Xz zB2Ehc$I4+AeP;4}C&A_B>q0)3e7lL*?N&Jlb7nm~9Ua|S8ZB<_x!1Q4qy^FpC)qHh zR54mFlo>c;$ukRb>0)H95!zIGbSBpn@}+oN~>|Q6m2S;?BGTWj%IMwXXarq-0b^un&#u_~xky&{x?K~HAP{6^ zTz8;?&3FFOwyGnC3b}7T$9Tp>j9E;ZBCSEf8oO_s`8F%Ds!^vD9=Y1rmmiBLUyvV* zsWuCm0$8=*8xC*Je0yH7$E#}GhC1YGwumcWta9n?O|^G(JyewtZ^8-3tSrqksC66) z-0qdPEl`&()@&(ALude<+^!HHv4xN12#+d+g@?*ze?oWthI;h?+7N*^6@!6dS(VyT zTi{074-eKF3DyYKd?CxPLi-C6U5l<2E8T#+p8h0+?@)&H2Eodp6n7y(V1)e{2~tyC7Y zKV@wD9AhK}@$5LqVt9Tdq@$HPi^jo2wih*9X^3s^2PxmX@7O1eaHOsqlJ3uw^oM8Y zY?U^imuCp)`sYTC6PA!Aj~>RTtC<*fyhsh_vcz+5(=dESOV@?Q2&Yd}HQ-E`Q(xUt zu3Ooips~jJt@lw5%5_R1>ox-UD(EHCmM)0K6nYp+|DT^55BG*aB# zqN2FiWBEkh9T}MW?;Bi>I@k&~D73;^DFisdX}z8n6xoz4)l{1RS!eZl9yLxi$S!tW zMavUJt4Z@gux5m0;t{_pQ(Kv%vW`lZ6Tjag`7D6Ki9waA1zD`Z=G!yr-^TdOOO;g; ziob6N>2>xS&rqT0?#V21-FqRZl1#+>lT|w;Yhb;xZ_4|Bz8wx7{Z&^i^4fF&qR>65t#a!ctb3Mk+hIu zZb5BF1Qh!%dZk}*M9>R5s~E$tk7<7R_6HobT1l_y5vU{f8qbFm!Y4gK$>uvOLwsJ; zBj>ysGLPL}kVtd#22D3%#hQCzp!7A^`-7cRZ|^L2*<=j#)d1Hh-l`$?I|aijGk4YI=cq)nBCDWO=}8N_ZqA)P?WSx|T=#Fmw8A;uR6|&&Kh1Jc`tReTQO=MM z5Eofi7{~)H!cW}jU=Y%px2Njo{hE;_!wVjs7PQzQ4A;F9+;T8@jdOF6iKvu!%zx5; zSl&dJY)Nd?<{H|mK4o8(4Gj$oD=Rr)1$#w_EGN{}ereVdO_|tT8-#f26#u#NJL%Zn zT0QZ(T_{fead*LD@>SSAp{)1w8^c`j_r0ymL=eP}akSpZ$rXSTgZ8-YD%mn(8TXHq z=R`_67Yk{h$rctv*8YA{`tn9yd)8f%C!++T$mnkjI9UaA1ex>$`c=c5>46!}SJt;} z0fRC2Bg{RqH);8bO7$%xy&7A$oBa$8B)H4CxVSQt2#SYK5?)B%`|gA;e=0neVv* zl^r8vBjykF5s}Fj-u~|wzjZhdf2$Q#JF)PULA8|4mxaLTJ&tLQH+-Da^+urCmvY5* z1AQc{&tEuP1p<-E_`rK?h(>1HDT{`N?m7EHn^;}>-ng~!1uZ5@@!CmBD4eZy^3BQ^ zwd*zunNn#UdU32Rl(sYC(|kDkY4Db}F_CjlWKC!{B@4odDD?R;>E^>}G=8xp-Bu@7 z%)ZZ z=k&xUXmXnFEFH%-KdFQgKe0kRQs~7O~gY!5Vj6 zu~t6Uw;M1Br9y2qusTNg%rluGQsuoPpnhC*tnSiGt`oY z4YfN&xnci>6;U`LnKe?lrdB*3tG0R>S$+x-i)A$gwBV@3@b0f1zq3$*eH@e5iaR0z zjx7PT{!hm3n`sZdvmMF)EF)jjH zM$qY$7(b{B;>1`HZa}~}KK#&(D!NQ1*#fQ~%5T}A+r#Ry4n(>=9H8V0b=~>0=?3HB z24~2JS3dZ$8tH}yt1FXgX=?~_CPxq58Z0j@d7rE`1S~hMQ59KQ`q`9JANfp3TtR3) zWi(%pVhyQr`I{$%l_J~`Q&FEvMPSH7O^OEn8)SQG@<|v~U;U2?SJ6akhot2Ni@KAG zO(8d}OeH0LMujpv7KLj93RcnE=(u1q8bO({r_U)D8FkfGc&TD?|Nnad)P+$)ml3>I zsp8#XLp`U*9dDgZdZiwwrFwb3m-<$b4MJ5%khO`m*tNBAkeG@N4c|0x2NNNV8_9nY z34=G!#R79;s4@AKt(iV4Um3CE`1}99n3It_H7a)11Xqo}0`9hlS0jV4a1@nTB(Jbo zLPwjo`M)LNRzJV@;822}B8!c!&E)EI!cEINaE{8%-vV*D@schtTd}d2a%$9rVrgLq$c~cqD~F6USe*KP;6G+wf;(=0;M-fg@y&jVPe)GF?$Y zos|>;f#$v?X(Q-%`!Tlb_B>skD^*-}w>7?0c2bHbTvY{YXJ;olJ3B;!tHphP&teC? zJi+0(ln^W|=0G7|-Uy39-J+hZx9#7w`&%&sLjy4`cp8Elq$mZRFljv!h1w!_UU=tQ5N^booO5g zs>TIMwL`Sox+`?db&OR)kDz9WC_BZzZac@(t92N;Mps_Hez{>J9?>SN78+DG+g0X- zFl&;nxnn(CNj(U3UJf%L1j~tsTy^XQer;;ZuP-MembTS>4mvCxRIpT+71kRif%jY( zWQMNrj^LXdVX89unGa&5hODRKd?hW{uHI1*#cgWW-oa*S+2uohp0eFLKQv^0i%u|bHFzLITSM&2hGzE6=(`Wp~+ z5|qeI1I4Wv==WkmaA;Zphony$oS6iCnK>J!z*%szPD8=LLCo#K{jI}^G`KAK5xCy} z*O?6Db7Io-Ni7lxvd*kD2dQFnWj z@!%8jb95~=Bunh9D)Xx~LtY_Qk_l?55c#4|w6zP9-~By{^Ct3asplsw7h8rt(PCt* z({3$tJMI_XK&SQQno~!amguZ6XcU+`PD~taJ88XW*))`}~qA9M}VS;;fhn z9BS0e&wH*yt@?2Y3kyz=rC2y2|69;hN3wStOH7XQob68D+^qtXI=p!0nxXoh+kBAa zvy}I{6lbAA@<-@CRm8!xnW|gAroZsMb0RJCppc-dTo7qTvUWi;t|Q|z?TkM@Ht|2h z3Q7pN?ZKPO8rv$!yT^B2Mil1m1K6|ab>b^EY+Y|qvlh2?L`$oRIu&%%g#~YuNV~d7?!O+W`V17E~lcS5*#v|59bFi;=xH18;+PRqJlhBXSL&iqYU<&6{Z_UXS@G6g`Q`pJo6 z6ehbpAX_G^1=*eaB1u_~p|?7tT4JDCVCbk_K|BUwWc;_`#MdX&oX#aTYM`i(eIRFp)KsudP))M$|^P4aJ` zIb(mIB;l0oLxwN9WU{?}BO^i{4>h7yq(ZCP>WV*R3W3X{{!^aPNL?Ptd37_>CAkuZ zipMp6+Km|l?bb0hgyIzpV1j^2zZ>f7982oBcVN}}_>@yc7{;$&np7a$Rf`5b=b*!e zywOAg8fWFMFi$=xC-OMh(-i^5bE@lt4bgJC_&_ulH^qYx8#Vp}<&s)btNn z05JBJ$qU$cohbsfVs`%xZjPA$2N=-bWnpKJso2{ChFy9hJ}&cfhkE>uaz$J{Vu@Pxz)H0Hn*JygdWkrYfvo(3XIj08`!91zJ* z`k_HLyb|C=zjVJDp3<7w+l8;JeE*z4yY4*hXR5;{O})qCy((;G4)bk9(pwHjvN$OH z1Rn_*bvH2A3rtby7D*wS4|nUW-GN9bZG-!+v*5wY<+lQe)$0}m)_iJ0udH*T>)L*9>I=; zQvP>ho)PuH^p8W9P@FtfRJWb4=iVzXFb-l=78zL=k8Y~14Gf}TF(bl*VM*NoYFjj~ zVmn+=bh;8s&&^at9+19RZ8Leu+32|WGtOLCQB~#n*t`~->vKZsf;|qQ9BhxyE&PLf zU$A_n1YYac!Or_gU&NaJ53w7%c%YaHlv97X4O9xJ6Al@!59bFe94|neJI_w?IjyH0 z+8fg7oQ|FjiL+cTRBe+yU9-u+eFFN|0|UV{S$@d4o1Tzj1How-t&x9r3vyB9h!OSd z^jbYn5XuU+tGzd4dR{B0L4k-GAF_m-Oz^L=aOz!qRrYVty~5=XYtC|l%gq-S+AJfC zROVV-w&SksmJDkhIE2lUh6E_KYfvt_58X=hmo{tTc}AOcwk_f&!LAtJFKXX{f6>htv$iN_ni+W+BLQk-q3?bON7G%gK7z2{zIAC+K#hq5VwZgD zj2TztF5fr2HfQ`6(sp9WHmJG!pV!jq;ag;;<>WlYSQAF};n1qR42UQ$h6GfsblAzP zupRE_M5|3EBYLFgt`_Y+5$MNDA?3gw&7h@y|J7xZ}6N~yj zqT^87MlD1hw)J2n`a*4{{$J`F&-m+hNX@2!hkkW(JwKE8(2>ar;#kpsd4{&p*b8_f zN;2h$*?VEcn)KDnJ5EE?YcjOk%^MA{Mb4-}C(+G(i*#m1ZLkJt25IKl>I;;@DN=rT zF3EH}oL(4jr5!^`<}k|84Sb*8k$eeH+%b;V!LG^@YTOhW-Xe2Q7&< z*?}j1a6nGQ3QrT5%Sxbzv8!t0{3bK8@Mv%RH;Q##*BDbGw;<0LL%IM1JDRxakH%j?PRT9tlCU-j&P3~N^5tNg=2{BW;vhDNr#TFJ7iipRsAxIp<#n@ z9)5t1n1a6~G(N+$lwi#A zUF7w&eo36+8(y*KB6@f`KRQ0E5H0UDwLgEz@oG=&`G%IaU`-YKIq>b$r0Qfle*jz< zlG>KX?=2F0e45|q@j7-+VWsithftSGRtH)zns9<3tAC3H8=sj#Yet@`uSx_o9je=O%HPOPLd zVkFkD0}Sh?vHA9Xf{bK3GjZjRu8!RP{I{2{x_N2=zum-Jx8>=it!47$cZ{(l!V8we zO#^2v=Pz!o<_Tj$@;EXX8_DPNFs0B5VyMzM2_{R>Ddz~BY#aG}F3`-EZGSWuMPlAC zTew}Rzb2s*Qm~9ROOmaGIr`g}CyDM^%cYQ^fhRi;ZJNW0(lTT=8_T|_{w_{fVKUZq z&hG`IOJ)NTZNmx*k4dbi%hxRjBMUM58M4U}TYD06?|JL+PG#S9!L{!DkgZv73eWVC zJzi(AWPiS1M{HDXdcY!Y!ww0?3V}`L4n-4-4)cj4-DSp_GjTt7u@X=~;-$##Byd(N z*{-*I^vY?}Xx{WXjS$`TPU&^<$>#rvUHMs>qduC}Rh4YNMsLU6Mq&^sOoqnb<4$3p z&)-g%se!V)yd%gl{Exz#V9Z8el8QYnsHUO~agt3B*Q8@Wn7M6xg}VvLsK6nUP|jUyxMRa`k*vM^R1i;%U( zeEgS92I*c`e+0!Zc+aeP*wdn~OCd}>0|`mIg4ACxy;F+Ljw=6JDl<@!jV1lGm=X~m zt{BQ;=YmHv*^aM6kZJkVsUdIgQd7SE54pGo`R6A}SxN}wVlrX0Ft`iFCKZulT}iyK z65>`BQGWx{#Y+9)j~C9P{8?M0$RelvZ6g!aMN$O~RGsS>X^w zge@gwOf#wAAj)W9;*}+;xHB5Pr#HK;o7&x1Mn|J!qhoWt)>+T|ZsspHvg?V6+L@D9e(JpS$cJeXW zkvzR>Z@FkD7%W+q@`f|Q4&10qexJe5R`GMwZo;0zUnLL3e$L4Sz7x9-0Gj%4lg$KY>Rqn zr5JoJ92C3x>5=T?pmUZ8z>Lk{WR%ZMKI)QY2s}{a-Ao70$JwPVSTN6gsq4)TH z0Dz@Kxp64LkF(Z3faz$CkT&SZ5%JZAyMWVerm=g~E^!bt6hFg62TkVq>I@bPnBjy|wBL%o_>$YdXz&W* z4d`86tL!6zs2W!uIS6n}`TOcyW2f4LH!Nw!YCU}cqxLp5&}O(T?~&=Y0j~P=rdPKS zP{me1qoad$$mk1ROC+q%F2iFum0i3rP1#8!5>-_V!GP&$BeVh)+79x*qF|^> z@M3v-8^d+IV6s~4jA57!57N^4^!a&8&o#taPNei`k=e)|GAhb7IvIc3aqnh9YlWhOVNyQ-{stal^XM*pO zh)!q5&^c5$WKPUfK;4g`Bt_S zs2bu0dm+=YXyh3yRyeRQg;T2amj>L44d2ybvHA`$efNI50aNMlH@NnJKukD-_7|7V zHMhUtc{gMs63&&{mr?7f;VfOk6}9uh^Dg*>8UJZ^qAu_q_2m8ce z>nx`AlhT!KIM9aB8)L1kt*vE%vPZFgg`IAb^TC_R-rhyXz=CZn_X9hLRA18?f(sPj zrfUQ6W6dGQ%LAJzAo127I119L{KBkoiI1;F=I1%O{pPrDuD05+O)xR>@bCtO{d-PW zA}F9Lft+8t90>rJeL|93M8`?T7F?Tv@E#OB3QAksm9}~QyMpi!;?wtn`7Beh#$=6Y zQ+)H8fWM@B7UynZL`AuutWKaUY&iK$xnCJEQ>(~?H2PVLQ=!)=^_8WbA9Qm}2swzT zGbUd?LrttD1Zjj+*yYzO)_uxPrUOhRq{e5Ds`GAM)v534$Y|i^tj>2tL2Vp+UY;5w zMp0hv`QVp^;P>g;3IwdP2usCzly{$bNTJBZ6oFIGq>NXCwaXv*_JRH6Xk2AFOBeNZ0* zT@KxKW-SAmvJ{-rsO*R_vodbU)4y{^+bJ$da7RPBhZre(;T`Ys1>2M>A@z0~^8AHP zD2%qAbYM;Arp3L!Z<<12w6QSlq4>Oq2YGXUmySIz+Dpn9_Ntx?eDW`^(Z1fT2-jmrO*ruk|;g1hI0+i|tLbo(8aRJ3dMholM8y`}TPjg5SNmEe6(49}o*X^F6-q&u zPOf|?jy3*exiRYVnEmnvyxA!nR%u|4R;K7k^ASZNuakJ8-CD7#eCEdFVb!ffnQ*g9 z*jK$U|Bku`uzIG`>Y0U2u8O0g8v^;2!)W|1Sa_}Te}a+tzjXVR@W>;z%a&q9FJ@-Q zGGeISPvi`S4;;FonEhtUThBJVSq1ZFSR(5n`4-PKDs}5zO~(>SQAv3dc>N;-$A^3-%;v0oD$6i$qLO7GpFy3RY4|jhXrMZcQrq5X!vU&g>8E>-z>bN+Zbx zoa^5z)Qx~+3(C;P7U?M4o5}BBU1RS$p2CtNQ$6a_2317WNBEgn#4eB1kI-b8xXK_a zBK-8r=3V6%&$(=4sH!Bk4SEqY%|80%<$6NwX|h`fm0`OSwdca52cj2;gN>t)FKvv+ z*FK6*n9%;P%}65Oh3qv%v762@DD?ydVcEo^E#8P^ix^bmYxj8&bHq}v%d=eDJ_M7- zNZPI@U-g($S@}6a`riElzIM12YY(M5yuy^6x@G+SKs2r?Wh{4UWzV*YrFpwv9R^wto!{L>n`}=K=k?9x)5Mn_Y zg)gL7vaoAUQfVuPl%EhNe7WH0+;5x%B#8lgi&X=E&BkZSmhzh<4T^)X$5V_}{uJX8 z5Dfy~u5}(lNE)Y{x8bBAuQc!{QdqAACsbGtz*JZda4t^@7r}6z8cWep8$&5(mG6!y-*8gA}rZa3M1gWTo zd+o^a&(hqu%O5tF-}bx*If+?fMZ4SL2u5g{PF$jG+I`!-0VksM#Eb^-t4nq67urM( z_EqtT4jeMjeM(*W22$ybNg~HYS2%olce`BlXcJEDlSMjaA@DfFyExBAuU|8&Z~*^t z4G6)p44$5sSUGqCyb5FAyZsn+nz0NOD*voRO~ay)^mc6BGj;A}0cl4Q3kOGd$5k6F z>3c3|A9RfX>6O4mWLxmnw;uB&(O%|Z1;*GPm^6LYi` z<}MH=`zkn0+vBp!t;JceW|m0wrD#G2iUM{_MO^|QB^-~hjeH*dk#4VRbRm4n@j|%w z%7%e?egW5RGQU4{+zN!OLfW~Gu{e~c?Zo^#h|hJHW@G$kZtZ~_?atkahnZ|?P2ovS zl1vlIa*>tDdTkkAUhykHLG1!B!qNs-=$Ef%w{7_fN<=}C?}DxnRl~;8Qk-6g`(E}{ zH%5#(r0)XV`wi&_dXHBh^y8w3{gC2iE8+8z^=fv6{5j6qnDs(9*Wd@%a}r5Bj*jwZ(N0DBPj=~xk$G~BNpXFpM`OT&Qig;Cr?8ix zNtJEA__ubmjH&qfG*2!yR@f$+Ca%O!t2|exSa;Ze!|zMZY8PS#{+C=Y1XQ6%vc)RB z;1g|PSXAP{_*rER0yjV%XX0v$M7EvQbaq|k;7gdOI%nCa4g4uvAmnAn@DIJD4=<@I zt`42!R;O^t?8kkyMXc+-gz<(7Yzv5HdG(EN%p5+Om}D-i;@~~f|B}pogap02E~z~eOqkIDE+xLdS& z#W(XqP9rpR1h|n2l-e$H?$?Ph<_o%g@oV{bn=|jgp05__c#sTpQvI;7=$9f;HJXp^!Jo7CTF@!Va39PW5NZ zc+JI7%zbPHul85VKU0B1lp|msgenIVbg1;gtBVtp7~7%b z$3N4~6_@pk?}?!2Td|W%2CdO3DJUpVUg-dx%8#~xq&FXa=gim1XFbv8bDG(y<7Pg` zrxi{gkf;T#OQ||UkNklcZT8bbf)ubhP`>|k4C2k{UbSPHj7I(a57*tLr${M1e&*Cf z{$1B>*b?df7wG&<^z`6?Se%m+d`DrC^tFSb?yruJAo_{g^iFPO!J2gZ_huFN6DVzv z>LWH^kZ~F~MBF#EpMOk_Y1(PYvbqv7~>y>PUnKae9};AGR-`$9-i($f22A@zs2m&DW_!NWUNTsN5Higdzr%b~LGCM6)~N9NvygD|q3ajiu{LEg#me}o0z zEC4Y=qdnj72fKRP6OybnX+Tz`H358z=gXBrAfVl%tZ)cm;pB|4ZpxSx#gm!L65#hn z|1)=f*CN(=nbO>aJq2@U3nqmsK3MT~s&b_y&H0i-wb`1-nST?p>ZI~4r)xDT&&4DKRD3bn0VH7$%zlqc0lGE?M zTCR5EK{&zZ@uhLVed?wBqE8;6ZKx-^@dOHX9q03&q5A#uxby}vdzQo0E1=D=#bcsu zlDtxRZs#1Tnx-$te{MR9Ao7l7`0jkd6v{H^5?-|w_0YO|L}OCBwBwuf#X>K3 z@~JUxN?jChd0%83KEz6u6bf%6_JZDfY4`uL0BauG-)eXeBf~jbbNl30;eNar&-E*x zrZr=NUbGA2Kz`seRxd&#CgyUNH+OF|84`Nfrve%Ue&JCoR@PeIm)QPPIq9IcFR>=P zBT+!xD;4h{5}T!Egk1PB@?y#RsTQ zt-z3=a?O&{05bO|ub;Y#M$*4R!6>Cb(Mr8QX3DDi@<{qZ^$JRTh6&w2+RP5#*{_Sz z+82C~<-W`oOc8*bYkVl1ZCBX#_P8B3k-&HW*=nL)IDUj=ITW80#e60c3?sgk_h`Zn z<#OkDcBYP3wyd{E4a0?B-w>z$*%&9v`555B_u!1s^3)LeCJt2EIMyY35~z6vp77@t zW7UJjJbwV?#|a9K;0)D(MUZ$nV-jb(lW$d<<7bn~^yCGwTAoki2C^PA~*9 zF!~?QONIJ1xZQ5$YW=E;0->;^K4?8}YdtZ@gj`sHOmGmozV{0t?iL_jy#`ov6{W&& zy5hwueSoSx4i|t7g7mmVBabm#kH~9vv$6MQOM5|xOue8r0aW5Kz{e-=Fh+3N%|v}? ze%N=4nciaCcH`9>uUOShGBLBT9+^CRf?s%7a}kWuEItziZQl%KU={ea=LAtRSpTmlkXu!e9`EZewXB|{hRD$ZEmLp%Tp zj9lZjP~mtx$!!8C(*VXBFi67WbEfFCiwS7+B^p)++uhDsSXh)ETV1AjVdDh;;k}>M zyd&hkom+skpxfsS(|-CnmjG~2kLLo2bb$@*|MB2I0tt*BIQYM;@qE1AB9it1kd670 z(wnX;UsUmszP|ijT!7s*FrbvGi{f>5Me$Bb3eIK6#mPs9>ky3AlJgy>x##}k@#Ls_ zXy(gSXr{ie;Jom^CZUJ6>7BX}k^x|uZVtJ7@N-}HsX-*w?Z!EUflz?D7Ddg=C6n52;eWivZWa zhjp<^=LdlF_^e0po&Rn|43H)-H(Fs*QBl>JjKs!{XjLpE^iWe%=e9`Z3%%~3Iz4Q7 zn7F!fv|WI<%;2E-$dS);#}+K3RuHqDFUA*lfrWQ4@-mHVM6Z{QzM7A#nUA+65vO_O z>}asT3D3RX=t@nI?5T|4JTT5&l-!%16tS97kIa5IQLTWo9DRfp_@5nzur;=$*{6De z%_{MFvGvZl`TnnE55QauedXRrvIT$o%t=Y;r)IGyY15&Zi~uM;<=0&EQku|XeW;AN z{v3W^Gy2WDQ&+=A4f0LUV~%88Ycw&E6v{^oD5}|SLTUIQ_5a@my`QMK z>+pW)z=sjLX5WGA|M#RVz<`IUF^a$-P$)#ncZ-E`yH_ zPI3TnMuowfHPErxpbDo8rOxq$I9sY20nAB5n(8=V96jq9Bl>;CAgF)03Rln<@vcT6 zDkBHNT2;6Le2^6lH`lxI^zjr^$Ej>~@cxTCgmMGpqTiX$*6;af5bI-zb4fQC5M}Qo zJ9q}$WtxW=g{xPDE_GeHd2YRI{s8zFJ&ry_q+`QgimSm@uWdVR@{wvfVH6XDEt9Bc zcl!n#n{n6w*^_@ay43b)YfrN_qov}|pEe)sDm(QYz7rXI#+ZR0H-V@=V7ZTj)Ifp9 z@gP})s{UBQb3b0{I(^y)rZmg>cl5|pFzG9pgWqjte$((~m-o%}0ICr4^n*#9Kv+xH zh23L=&oi7vV*;xuyZz!zAJHcD8OdsK}rZPcq zLAs$q$f?3v{5JkLv1nkpb@y3`3Aei%)1U*i?Lp2P1VncFOo{Alg?y6;J{ie-2L0p${J-k9DWVDUa^C_%tx8V*kHm)FyzMA4FQuSt@;<{&<~sx*5XVV|4hASlxC= z07Sx-dL7NT4=(#?kNzKw*C)(DnKAt%$6mr!lt1hvM@cOe^SPI)9yA7pSCMvYZEE$;8J-Pekea(fR<7iHxl2G0d zy-rXn;GRDGFNRh5LjTaCA0DXRJJziO3(eQgHi2CO763ZQPz4_ionHXR3OE=l|Fy95 z8gMg8Aqr{ll1Gz0!~Rux+69(Eh9uY||ENUBfd4mTENsBUk5J)|>{`^M57^ZPM z+`%(t-(6+1(Mt6&e(&j9P#e)Uh1GsFsM<1b(6gsE)S=<`b=F)?BxTrLr8rS(if3i+nZ~LY)o0Qrv7rRj z`AI49E3&hn#t@J!dm#>MKY$gp&Sw-F+LOWkDhnG&zak!N4_q?5g+Bs7m;w$%9l&J9 z+V>TtsfniYv(6hG)~wG$GyUi4zh_5dqh`XkSK1Jy(=SV18OC|A7z!4sN4AUndo%lZ zA2Q*TEa$|XO%FzoMb_Ky6D^_F(43HyJ@F>KvcM_pN+nXw?rtozHW7MXbs+YE=91GM6mJ*n1;r=UeRTD3^8C! z2wxlxcl`$2V`-{C5v|9*kbK}wd5zT^aNtAT@(pN-v~*l`6MAg8;Q~x$Q01)iSc179 zgtHoF>abP#Y`)d)`yV;#0SJKL1{}joq?0AzpztYPP|dSH;{^$qzn*C`W81+Nu)fL& zC?8twnonGv!2@x6FBBw~x!ugvP$D1G-Lg)8d-QFNui~E4Sr6LKFs#HGj(+|7g&_+^ z3m90;BF*n&N*=Qd%J4SmfZ52Ao5w)r?dzQZyQnz@7vJ}PKx#gz17ldS@CrbiZlirj zVNppK<_WCWXU|wk6ciQrfWjSzea8h?CxFo&hQ`$mU_rWBsPS_fRzFm@k`QkN5ax~m zlmzGu)*iX6T4^1XH{;o1B;J$#E}x_o)=@9WcZ;U6zRy~q;S1Dj`I=@1O$Rdf>>a}} zm_jwW@2Wygv&etRLv(nBYVQs5e(xEAMasej(>;$@pr64IR4L1I{}XcwQRfIOhRjq( zfDu-MU@v6ji5T&C&#Q_J2zMMI_5jt@#Y2Ef^Um{Gjl+15&%cJ;3%q^c`hut!LT-1C zklU@ZxcB3@TH_%EH1y}^=hZBo(vlKTf`Z+>1mZYHYIH(?cwGPwDz^H@0l;$ul&~Kv z2*JU@JTK=BYb5>v;@T|w1{zd#09 zV1S{bV0zp^++c9FL!wc!;0R1_irQ?rS4wbx%KAinPC3Do2_tgKH4Q!F`s;Z7%zb8q zWN&k;$Dp17)J6Jg zF)^{_b~k!Z)<;=q18}cFkSh}3yIFalC2x-G2h<#QkAyyWK{zH4N(g}7!{d64R^9z< zz3y{634-Pciv!b*-SK!Ww8gy>kMpI13+`DUo;I-VD7Gv0lyxyzVG$AVujdv*16Qw8 zSD)8NidEoyUOIZB{v$%It!*xHQgysoHxYm~<$vg{>W)jk*8!ndNWjkeCjQ%y7fnmM zz*ZRXe;x7P?tZzniCW8#?Fup-hirZGZMs)wWPF{h3d#ZIV}y;d@XFxccHe=37h{U*M|)N4$kU zDw+7y90kFaT$#kU)$gw#09y(Vi0u&kPE!5gfpr7ME*>W=1cQN$U>m4hTbh6Q0N7Vj z4j~nJP-Kzh>#lQOLFs|t)q@`@@VFqKQ9#qbpka_r>t3Z^0rZQ6-cA&qfZ*uCZ}sAZ z7$7NW+q{C%YJR{@{{#o&^M0E<0wiU%PJ6=>qP{EjW{))=&&>Ql9H$9fQ4@UyT3-M} zZ3Nt=GUg2<5&%@302UGOlc2xCKD-2kCOolDFBdH!uG0t*g(kl2@(cs79)xz^0WrQt zN2Lklm8d9F#xi)nrrrs$!))+CifQ5I-nsew(ERr+>vphURA!MHC%aiS1nBnwJ#q|` z3pdDT@c~7r4lE9D-#TS1ku#iL0;G;SsKN#g%?yFr@V;>Lp~)Np2_QmL1HoxDyM1^; zj7tD`{W_NW3hxJ`jY1|w9*xjtMtDGXV5%?9|J5WqHkKR?!gjM0zvrJ#PnbvN9&zhs z`x#rDLzDJnu+Sr9=aIlw`n`8dbhM$ZEfOpWQE#@#CVUm==JR3;DB_1y5PEY32y)D~ zk3e3+Xp**w4A}dKjs9&$?EY``X8WVu6)enL|Mw?QxdUj^t)AM2!vRRU;cpsxp+H5T zam49CX!rA6pUmOJ`v{U9JUV)w)=M{?RoDPE)<&eS&tGNFE%}Q^KWoMRdS!#W@?VV6 zpxRcErza*=BU}^R&}fd$fx5h900df+)7xd1DvOYIjY;SI$96eyMWD}k#Q!l=`{ zogl{~6VyTh1|S3N&%oLMTGLIb|8r^Uzf~Ixp9|pjmtBCgWgAt_1ar00FaqUV+-@GA zi?ms9hR6f}$tI3IlLMCv{P&9hFW)HIp{;*k{t4!VXg+5RM$;zKsIYkt;SECRAwWTg zOd?d|J+Sm|3DgCv9rvPYE;eWaYyx$S<+eU{mxI9cW0dJzS45j`HCW93jF%8t|3Anr z(XwBfJ-eJV7%pm9hSSH{JpA`%V@{4CY_a256^A>CkZ;Ky|OH?iWXZLPafZ0szPio_=dM&VA+Hu`zhj#uxwv)t%>N%mb6$ zThZ9`>f1nyd3xeYB*F(OPyt5=fS4ocl{0u&v8;01i{U1ZBo|jsvi%|d_3KXiS@i%A zb2@?kwcFeeAH`fNz>97HH!LMC@m+P^0;j7aWXq-({S@y}7CyUZx3Fe+LufisgX`!H z!-vm7M)>17C0(VgnaKca6Q&~m{r>Mv9Yrqmq}t7@*}j+!3^Z}lG~3$_;Bv@#ta-Mu zbXxk-S(I5|gTdM8rvZyhUN9KmStTyJOTM|DGYD8jUt|&>?9Jff9M?W$xqKY@fQXN0 z$j%6N{5zAb2S1|G^StnxWZiK9c}5$QN(ZSR09U&CXAfqvAg$pv`9FC0FS*@cg7Pa+ zLJF2vm3da(fg&Cv$J7QTOMAXt2MKtUMTa+ab8z4xd%lcG-?b<2EoJ%un@+r9L6%Q4 z91e851mGEfo8dC}O98CChOQHIPoR<3X68Q;b{%~cVcJl5cd>`zW19h;qHq`KX(M9&bci{Ye*o3;E`64;p zD(<<->)Jatw8GcemQqYcC}M&l`rJizAgqGAdtUjf~iF~xVr(0S=rGXTI!offq$ zc0d%=8xUO-us#MKVk+jX0|Y+XS(?t)8cqr%2((P?L(%?O8>t9??>ZhlGq^B%ZD(C6 z@lt4@Li^sUjA((xETO~}gkuZNX|2&{5umq7c5 z1I)19D3V0y2FiG&F_G8gmBnZ-!(il;ll~w|vur<^QXy5(9bZB4$rRY{pCSQsUy#4C zs5$&qrH%+N0%?H~W72xJ)1D;ApZ2{yY;C1;w4+d?rSW~HJZBxOYi8{c7|)-8+?Dr` z<=#rt7fd2NpD=A8AqZ$ru7qM;!T^%U!XLYMsjn^U=p8}hx;sRLWQFH4nV9I$FE370 zT1TI}PM2oNq`=Y_hpS%R@rAs0DZ=kKE|;HEmzzJ#SvbNusNyWuQ1rssr#*RrF%fA} z2Eg@M|Ed1M!V*9!my)Maekaf2^Ouc<<>yaigME4=u`H)yd}2Z=2sw^d_p>6G1u9;w z=y)o2YPx4TFOnx)i5k*8X*z6{DwYybT(XenypX=4$ruJxF;K3E$O=8y&HFtoSWm99 zv}5P;6I42{KX4U-=S77-VT+%EQR9bDozELyiH@SlOP`(+-QXf5cc66sLZp-Bi!8$d zqSL#LA2x85Ob`qjCe`+XpC$@uN>EzZ{zlTZ5eHOYUzE~~!i-&U`{XEkdz ze3vI0X;wuDm8_MSwbXYoX|`SP_gf{mK~Z6c986e3V?g3zRL6j%?K2KubSlV9f~T>Z zrYdbQQ@s&E+YZ6x+Kzck-I@BLFf`!dhuin(2Wzb@!hvkGWL3zC7{zu(s_}SvPf%*t zd9?WM+DNR}M}*QnU+oh#U-C@@+mHLZoC(V_|B@tjG%yJ$Y?_Lm*&IE@m3j;* zJicGy2vE~I*a7revP>lS{Xr6<&4udp@KEM`OE{P+@F+zXFi*m`P~eL|X@AMUQBYy) z1>=0Pi4f@43ft5JYE)EugHD1Gq6QQY54KHr%C)9QsU+Aekd>n8$DE zY5D+Cei)^Vu%7r+cp)Ai7u&Hc_OT;PFAA+;YzKQ(^l_dC2X}($e-!lY68I^@u zY8vd?ld17h`U*NBc$|(*w}=vN$CVUSgV*jkU(ZTvYEY@OYQfKzNK+XklU3k?$l%Gc zBe9p5z3b_nf?z-ghFw_R18*dW@qY8d@w$FlG9ZPF>&3@0mr# zfK%9h!pIK@OTINX|EW^GCE-V6A;)Fvg*%b5SPvhbk*ZRI1<3iXC z+F{fMjxqE4{TV_X4q(_%$WS7h_5O5FQ@G>op=Ld4Q?wkD#$2(xeE;G;h%oO<(M||( zxFq`Fz6pgr#}1tCupg=goGyvj5=PaUkoSwrNvDWWf-T6YG}@W1WVdg?h_JbR&h6%^Au} zYcT)LQZT*_31C_dMh6sifA;s|1e@%2a5x{R$zA@DP#~Hf6XM!Gn%M!1jvkKxedih& z-zh0AaiK+vbELsuW{$*ocvM)t3zP7$Nj5_>4j4C#1hWoI149wU(j3Uug!``zB^O4~ zWXgS8p>yuE_RPVqI?Vzdx8%OF_+vBlTWX2!e6H!UTI)uR9D{*($jFJr0tM9Me`sH9=(829Ch(-RaR zJaoA0`zFd-Q1-U2I*{%cKhe-Y5-Nv@X2S7F+q^p~s$@jBbp=Y^s`l_=BsXvv8#sd~@g5e>ZOSGP^F1Pv zJd{qZ?w<7Sd4VPc6-m7rwWj>|yh<^`q^-1+a&6P5dN+nuyd*5T(NaFCq3tv7blW)? z`p)*gnCJ7T;#zDBKAw%`YwnK{KHN`m=KMV!R3__PJz9^zG;rN^Tu%8(MvGVi-K=vT zkE&n;CAno4qK=8hlxw3ySCLQ(va%N$L?3^B^nQV|INJ#v4)$r2)ta8P5}owLzzV)i zc~KM@DZ}5#9ZXUf+9gXwgXB@vBl!VHD|=c5=xt7atR_n7K}kh)@m0>cZ~P7)^1`f!m?Kn?x)* zbhsM&lp?oZT+MMp*>!Q|V&1~rZnCO;$;cabt>$$K?H)GjYG^qLZyo(I33zmuLiZ*} zMStT&ES|+oTt^nrWT)NwKZOjm4Kr2hRF#F=g2!RjuA_x3{@ihth?KeP zo_^XG*?8ebFuQykU^rwsq-xjVKp168Hi0>;15IU_#Fc~=U{2rfT9tF+=N2WjVRS|* z#`9B)_V8i!@pwVXY?fBj(4C2%sLz<_p*Zl<*(m~z=Ph>|j;d^=WO{a@?MoBJ$+JuM zbw)b+nfcnq4?=C20sibQ^9ka;7IM)_&XSVSuTC_|+T7wL0UT9~oNf|=qW;@_S}Nqi zXN4{?lcZG@Yh*G`pmdbK>Tzt|arwDJtuJd8;brb(O{42Ra#k5)?yb-b)Xn$6l$&`1?f9^7 zu;vI&=qE#9IAYycEVsBdS08yjax=;9rJ_TzAuM5s5pax%=&&d7zf}g@N*B?ICcfF3g#aX`QK{CM`zk$C`Hfq~rN~ z)t|1!(A5QLtqe`5TUdO#pdpUM%t@;7iL1d$c5b24Q;sYv9V|Gnf~E~3kFHFa^vVpI zJ|-msvo)2W9R8E@a7jO#(4QVj2hBZm{&HSoEU1_@LR7`3dbQy*woQL7F;&W$Alg>a zIu*29YO(%&;%R?ce3ANVftM0#{|{cO**EewR8ruWaDS^aQK82>>vz}Y`CmE+kry^* zyV-|T(@Vjd3Jv+B&+g>!Rpg*xeO9k_PN?FJ>M330Tobt*K0GY?cZ=L5BDGl*$2)UI>x8dGLt^(#Kb6i$LwlB&MhdgY zwf8~SZRWZ+#lAs7p<~1OH(`dk_s9E38zkhm zfENuDWKEiA!$xqS~tLug_pZrJUK`Sg&oT6Ru_H_0oi%J178 zZUjSIJx})7xuz5H+99@ZIT7DAhSLq5U?3szlcmgBez~MVe3!JRf`QvXo50|z61gsB z$E}p|!N~9qUJA)Z^AA38~=9UPW>6c>X5K%L#Qzjic_VSo# z*c3}QvI=8h3v*99{%ZY$L$5gzQn>djo1_(}k}BX4nDfIsOnwI2^`3Fxy$nT@Mj`Hi|D_IvSg^ zxJ9N%f4M&4o0$$CYTDS~T82w!{yElVN6pSza%Vq6)gaR(gCH*wtHlczsTBEb{h4MB z!sbj=t7U02LZHh~A?i#0ehS}+k7}arpinyaZ{8-lDeU!oJ}Zx@Xv?3w6I@1;rDAkN zpfq=L##%m;7bk~Iwc2w2Bhz_}0YZd1I=J)ktNx2jGkPd`is+->GJb!4k}RFvS~mC5 zV2csAN&+9qg8~Utk^#d7W^{8h%~4RW@QjJtL+5N3E`f!y-!pZ5{b>srwoGQ}3W6Ow zdRKgi!hVRaovH#pH+o>PsCKO(F7$YFq~R#g)>J*rf}Gl)Q3;E zO*faUSdoXdzR&Wx;F6W@2lFo>p_GV1B1WV}OAQjHin;$xc9) z>SWIj%o=lrgL2WC@1u)p9`Q6|Cz%@ffgkwsx}NfTJ$ilB;npvUL<$3oqsUUNRtXm} z-gX%t2X|IIU5)#XEewCT%S-8+O1vF*pDiYQw-$XuM(jC64fc>@2T_R*WyMx;I1RN_ zI}7ZYM+4jj+63vCu*zVPLL)>U`EN%WOfcz#sCW2xvsruLPiS}DX)deU@7FT>lU?vy z`1guvaK$Qk=5RlzlW-#)N2?mW-}#HzCUQi z0;Ll=hgdAjg@%e8%IN1j9D13+fQV@$&qQ3bIPj)DyU7@m!C4Au*f0gmOvK5dhGo!x zRyG*ANAW)N5amxs>9Vi`V|kLK!MBHY1llcze0KNzl^EE)2!=s6Dig;ujz6!G&_S^Q z5jssnfm(CgG`Hm~B!qXMSbboS7A5!J144Tw?Sm+_%mE^xC10!uAF-UCn6oG z<){DAbPn8gbzK{d-PmZ16Wg|}#&*)!Zfx65W9x~nhKJT`qgTdvGczh2gJH!9 z6lR`T4o)vj?zZkHGhL?%H}A4nP03Y6{FC&W(msq}k-y=1j}KaP^q^WrvRclv?<#9P z`e;Q8_t~+ddg!1RR&!z@{Tl3LN-&I3EnF|Hj3ECWcF~G;q12VMgF5A%r;!&Hoo%fl zQoS5e#9eberZ85>V$W7LE912IzTV+3V zFQLSk2y*6$$qCX;cl#Q7m2TwV1<{CyL>B1w+7q?pBnpSip9H{S>4ur$&RdDMVqHr( z@Gm%Ow5F4i^;R43V6ze@l1dB1#64*aGc=^8jo!q6y%vUsg$B2aJSD9`b z`#zKDNj%!1HMFhhCN?PT8U_@D^^-1jWa6k~PDs5>zrQMzc$ST|3tt6G;f8^MI}x^F zINVf9dE1Y1kY$`#uN{pq94(r5)g?odh}eGp74us@2v%A9k9ES!??91mHmcehnADkAXI>^gK{!~O%Dr-?HxEO?c6v6V9IKY>(sz9PyF>Wo*{ z)3qkEX)5g!%-Vrxqo>+Wqtl^vOVW(q zRQb-}RrI(NcHxd9m4hzbaVlK-7Ud4rUrGBRB-#SVy}G68{aeYAnQV zSn#V?j9}Cszn5|;1x5cIP)jJ|KhwnUy_zRjqljU^E|nyptwI`a}S zJ{%)y4fu*!_L!CuRMPNPAf2+jM_EhGBq484DLDUYL@*yKgGo%Nd2`$s9(N82~ zQTLz0!&WW|K$FNhyXffc$d_Y+LuMjLeMs=xS01pDN|gK%=uHV3dkPtF$1rOVG}}Q0 zEb4|)NeNyVLu>X$U}Euub-3{CK8-0IZTbn^ori=Sn@ly@D6az5K`T>=YT+Rf!W7ie zMUf$!xllxNAzl_xKv90ckHGlyu(}ut*yo@Ew%7=hFA(46O7}ud*7uaKy@OZ3uz7Me zMBX~;GL+GgC`{0{&je&L$L*`bH%F&W*kz#3Iv^js^naV&Dm2f0Wwix2ONn*TW)N{7`oFAR^kIm636Pb zPc_L@BNk)sJaNL|t%2Iuqt&41lO zN>weQ?2}2PZ+4w);4H!cTs64rFmz#UU?x3F!wkZ^6wNZiIz!iPg!G(}%E+Kn9cus2 z?ZmS>MC=UTu}+2hr;)dizf!0)jvLl0qu=5g(g?$iF6j7s4|(fYf2N4y!caZ;3%95i z_SkUX*-daGmAMg0Er_s^+hS|}%QbKRdtvmpY<;U-bROWf9?C4wscB4A%N0<-~Ok}Ro%^Tba15ovnJn@xRIwUWu_e060zHzFwfX}h zG-B#T{lU7MPNZFvkxCdO>qxdW*`Q1gUyF*ZtkT4U%H%hUDJo+l4g*{x^AGjBq#7aY zcgH#x*r_&8GGU&(C4+sL1N+_j37Os2j@{~gzv?+@; z1vv)Ri;d^nQ*r6Vt)bPRvYQqHf$nE|t)%&UvVUcmVNRNsA}#B5O^c>EEO#>pR5%MU zn{!S5bW%(y7KrTUoe~?oRYt6Ut`fB)vQscQ{c-6YxzLbr|4e9bCX8)M1w9-+PX{g!U4}j9>O5#DNJo$Qyln`vbD$;sHYH);q~= z_SVOBNUVwf4Wnl4NF(0lTBoUn(*H88r@?}=;2B#n<6^gLRa67wj9 z9N(X^avMK;#>$n$rs?6~S3c#!qy6tuaWMIR9kNs>Fp`QAqm(2+_hrAa%tM;-pGwSp z%pzizAbLohSB>H@yY|F1xoW(D-6m5h&JBBYnzK0~9Rl+JwkH7-lhpB&1 zKd5bKy8ZcS`xd_h1+4z+r?B^Y(z-}KqfS1P?~yHvtq*oXGf2&-UoqS>BYoRsskK(f zsK0GPtj2nK1P*XOA-ao96+V3<@$7d*w*7J;Ev1QCS3s)Ch|zxr3I|0iQvq0<4A+sw zl{0531uUPbw^9o~nup4RfV@WRGzz{5iM#kWKJb(NQ z{B_iN|JH#05?UysOW}W1go7>qi++p`Db-Bi4$(wcVpMn$VsGp%E-R$nT+x9rbB3rz z^=4SUwQuBI(m76hofwQz7hS4@DQe-H*yxo`2IyX9b_<7)nn2fxYKS4923-#Wy`NBS z10o|wUXV0yO{nVig@;O9#ocZ=&$lNos9nNcY8rL59nB0K4JizQG!EAqhtrMtY^zSP z+Zfi3D8H<#KwU8l7vN~F=z7)-xWZg)}0_Wck z_bxY{7W@8Ds;m6ld2sIeAUI(WP$m3r+Vc_rv$DuV4wy7+dnG1WCG&G!#%g^g zBm}TYApU*c>0iy2=b345U?jgZ3A&iV8WBn5$j%8^SJ6ox;y8Q9$e?7bIDW9uW7)ef zE0bN`-lImHL(&=-b5qI-puyc%+5Jg~=rUPsTudMNF4-al?eC+fw~kVqO$ zN!F?J34N-Lx{=qk1{j(nU(9}ixwL|ju!Wt`srl^e$Ly)U@&|9YaA*HV>#fNmVfOj% ztS2xI*Cb$k!1rnHD@FJ`H`V$D)##DX-Uev&6{un@azUk36#y2H?*u7D$rC=U8-O~+>%WJUCJd-%pd;Tj zqWntUqrqSbL@XOxbv`*>lUa<>S7OfdmN)fQ-R)Bg8GMb&)JKJ(2`vPT1UrqY(Fzw} z(x%eV8p9ha0|5uz3nT^{OrdYu`2;zJI<_kJqJbUxk9~e?pNVP@pYZ~7-MXw;NhRplF&>=% zSQiVdHdL>_u#2S?9giMg95_tT;$(D{j`Ii=wG(vT5bp>iTYCR~)7QVaeDKwO8}E3M zjz;zm%kDU5j;`f+i2QGQikWRso7%;q`ZS`v3^o2z?7UKn`8l5@7;Chk^O;_~?LYk8 ziGA$6?=;XB_P*-sal&0lt?&FpPzXSU(t==FpEg$?w;_`wHx@by6{>JNuPIDb7TN%T z*X+{G`w%*pom)Qahn*z?*eO+dQkG@Dr+h5igTu1tn?da6I-H6Cn6gNRsw5yG*k}$8 z5G)$v6ap9Uf6HRM13aci$cZ~VclPZL@`=X;y>!!1AREg}?Thnck`(Cej^HrsmfK~?YUJu* zi~AxPvG~jL$>V?>Y>N!4@*JJYtB}=*yv!^0*@Smv^}w-OD2gpgZwfi=;u3?VD`Tbr zx_HN>02d+mW3D^m^HhwYhjaLwcpE_nq*taw3pr3vL_p_oCtwy6P3oAIPs-xZ&fey= z7;*}cma=LgYt~U?SoddcZU)p+W0-;WD7JX&W?Ds%!ZN!YpIAr< zplpOIG1nMSt7w!uuzZrHr9bl{Niykc`FgF**a9l;ym`NoHl^ENy`CacIdfJT9jIMx z^S`hlMnX@NQlZ52u zZEs@6MWNH?HW3S)-(u2S&&OQP$H9yG^pxqgmdb4v!bAeO~FC+Fp7p;Q)p`6M1)qP2`s8ddKU+stg%yFbbV10dQz+Y@9G@R z@MasEb{HIscF5`A_ny;Bu3G<}B#Lk&Y)9Svl$BJ^2J&V3y}#Tw)9~g|l7q}su7$2y zT)yb@ne5EMo#!^1V@pu{$t$;JA$;HM_r_sG)oC^EQ0`1mSRnt@JroDjZ|88s*xcje zPxGdzYB$*NXfo&nAoY(Dg^ZNoU=FF9VW5#p+q*pD$l-pbp{J~RRi&PR?V%##y`2B& zEjzPYI9@){u&inf*i9#NX!grQ&8&c z7wsSsfLyimd4K3g;Wej;@FpVx71DdpoWT`*ZNytdq=V>8%A^NPn#+3ADj(uerLPK= zGvmz--gdOD))Ke?L#d#O#CgHUwpH!r?&DgNrc#ptTd|QZtIQ8ycsYxt8sg?`Br3RU za0zjTR-SOSwyzwNJ9vA2f55rB+X!j+r^V4Qd|-@_W^kMe>uitWheoxS z)y6m9a-{D%78#zeB3#Jw@|H4U6yiNh$aBA5S{A|ko+XSBea;P$dw?6S#3z;ld-nXm ziYH}7$|Rf|W&M(s1X|hYLPQaecIk$G=67?UG}2dH@(CSpoZEL;YM7sI-XXir%`y~# zLo!eZqoZS+Bul`NQ&D_#mo~LNcs8xZ4KINoXGuGsHJafj+@&9Me2;SVV-eM#@O!=2<_KD{?jHf@pYfLo*-@*pd2ypCd^Br5iam=(^XUCxU^Md9bHz{I6ESYCc{87%Qqz z=pVPHlkZ3%_RU|*^w6r@+;Ky0`ViaYIyEeUyplVx-7lOW3{#8NI+VuT=p*C;V1G*N z>7#xw(sKMvrHz)0o)UW2-y5ObCw|*TJzR4qi_62a`$`ZUWSp}|KVD*65kb}}>_lOk zGYrGpK(8WstbLUNkJb%?##X?d#h8|z%F;{2=W~-(;XQgettJHb{MRt7fDS-cu(GNa zYu2#v^2*j|iVa86#8^p?PHQIj-M1eeWoKk=T(-|m zQ<`CzaSSW;0zO0RlNfr7$o|)@Qzb&vd$8%uBF({ciB*GO+0?=H1~YqwZ0JSVGdCZL z;O?v001IDljs1*{Qty{OjjJTij&Xws=nh`;t{IcpFewY=$}hFYstB?%@v&^2tgOU_)9NP4qh+I5B?z_Dig`Pyj{!d}->+bY zXaVjbRXJ5A-fGvdPv zzvLUv`_nP;3fi&A>&Q1p|33?WQ7nP76K&???uR0Db*J)MusfHPg-M|rC{3)D@8MjszvbD_MxC~$LJ2G9iHq6wq zv7=V3+;k~0Rt~RVB%-8M>~aOh<8NpN)B7WG6(YEr8phPws#vL>1+Y>(>I6!ab?qYR z+++k!3{6zW_0<L<2<|4~Q%K<~q5k;By_=LL9p<3%ZoWrNx@^#OLZ)r{4kTc5k}24Nr``Q)Bg_RkUH6O64`|Z8;EpaG-PP z)Yu;yK*K@ZmP2oQe?=}H&F{F$^ZWai`_7jVQ(e>L*2kkN$!QI*Uo?B>!QAss$*g80 zOOR1PjH3pTVSj$39f3>9s+9>GrE~V*_g(Y!MiYd|?&+KG-~ULMc`rv!y@B(2JOfDG zQ4Nt!vLf)?xBa-CxyUt&*}q?CNBW4`Hh<-vY`Pap+o}zDLj{iIrEj5RcWL0J1|pUw zn>3a<%3DJS?YvER3Hn`HdLE2RWoG0Uc|S6yrKSB-kNy&Mhp8ftrUlh!)$P8itD^(a zcgqh9+XG7Sz~yzidt&*OmwjmIf3vyqoVC2?^OZO1{4%lyOHj6%Hw5+JSjt9TgD!=( zw7U496!s&nL9C6m)@Pa$f@-x1K`Axr6}#R*Dg%w+-Uvr!=m@NqXuVn{01=$kx>rt%(KmwOOJH8JM$trR8yHx4d1V5E@fH>q0Azh1(Xaz$G;!nlCpq`LM1pG- zZiIY{!+M+mh_d!lg*F|aF%38onP4qkxNComd=|V-a)~H+xTZ-)RD1f;BqyGR(d|g0 z=@J@^UobdNjMzpmX)N}ZTM#9B^*I&3#M&cvcb|<6;0@yd!r?YvG2@XkfSADGg@6yU z4r%Goqu(CQ2(Cigdf~#kj?ppPA2_hNor#ryv%*ad?&SEP9TE7O0p6J zZ+(qZ-09v6WBzk~{^8WdH(-TibYcP_R5`23+bNld0cp&~g6g5>1yyjS1c_Rp+2igYMpGvaLH6P#|v z<3S07R!-mZy3RipLyKFWva&KwIuRf(I8mQ`M4N>sL z5j1h=c&4vjgi=FJ^0>q8wXn4Z{ow%_IgV@4D>OwBwy3T&r2r#||8eh@|L)JA>mZ}( zk<}4JH@*bRxn}h5RII;rZhPEinpMs_JKzrOyIAVJIJb*jOhLN|tJ`O734dCCl^oBr zmzqSS)swYyj-k&mEgTE6(2W(20MF-9YcX!yQh0VZf!vw8hoKJqC% zUT`RKfjYdk7{3O7Fv4OmI8L)E6g6plTn3q#cdGCQ>;x~@3?EW6=Nd$uMJc2T$wiFB}S&oZmvEnxJ^eQVR5aD0(V1? zygB}r(JC;J;&fuTQX!E6B3+xnIt+kLF`)Y3)sk)@drOA@mcqV}> zA+92gDIwlK7G=5@GAG?1v4m|^u@d|ROV@o6#W&A$4<0}bIuTyN1=1Bokk$HH)ttC@ z0emaXzjXXJ2gU5V3MH;f)d8{~z^C2+=B=8f16+-)NMxp;50CE?b4%YKzn2qzxI)mn ziAUmX)kHG}%)v!;iYyvVL!@OZl0XOT92?@<`l(C7(A}yr*)0*y^TWzC{}Lp|V4lFM>;BfeElr6z641f}ox=%YYLJ?C}a@!W~FF;gkl0!DJo@(8-4@d8CdlrpVC zs5rKsIHv~sD2qyUgsB1{-Rmq1?~K(DwwV~EfkL9K)uMrw?U4cP)b z*e={4v+ih~?*j-hu=XwRFr40|NVIY_)$>2OSa3&1MtK~sz}VQ>DvD7^vnFvKMUzar z|EoM8p+WOH{|r8)F`@JP;ZFcs7`3|_Nm4}^P3*9IxP@nx_P<^b7|^^b z!{au5>R?dSFk~A$gVKGgs#U|Z>0(gjFSn-El!S)g-uRseaTd+dBo4@?4;|b->K=Vh zggdBKT)K_ybavXcjyeaJOVnxSY}&luGN~hq9BX?ecUgN z0sP#o!LYudPlG4qx^nsJhXd6hi&2tpwY-F#wQuQBP8dg7-jDU1IjZy_0+TJyYC1}x zajq_>qssr>f<`GF2I4oi2X6Uoe%q9-Q75~z&pcKvpK^=NU${r6PQ+w%8snsP@|Nk~ zC%9#;e4Y&bnR3rD+oWAxp6A#6*`0`O4FU>C#)LO#E;I8sK+8XtENbirB*^Pk;PGm{ z!BiTgt*2*VY`hzM8i^XL)$=!%eu{~ik8l0)o&1q|<64ce&R;9Nqn!Wi8=>!U6WSc_ zP|@Wp5GU1G0t6g({4@qPeVk=Crk_W&ar^WPes@DGzjCqVYAZS2rzoZyQq%CT)+XTq|Etka=9%@`VgoRE3f)Q{ZtMFnw3t+>5A{H=j$YI1Sy z+6>+VtY#3#yzbVG1tF;8{Xy&Y2_yd2!|-i>_87*X?_#qnGbc}6x<7mS&cgq0Hhu{# zZn;Ha`NhQG{C5h3e6cRnY(I;ufE(7FrJ$qW z!wk}zkXKS-V`2GqGk+$rwe6al?q?hDHLxVqAN?EB7+I^kk@SYKc~;|kpY@uZuzEYe zkMLc?^@wNf@A(RwCbzX&WKKLAXG^{}&y2^4_#;x2P^GN3r(|HI91w7WjJ3A9CZ#DM z#$$k4RjBcZWKo_S zISI|XJu};*Cu-$rFcy}_VZlkd-@8&zYkTtyUrHaZ-&|&HrXbnoO9*kk@mUk_rhB&Dl`q>ewaRAss!C$Jl+Bo9 z$Uo`(?ls^Z?n%^<4Xpg`14~8OsV@k0bacL#KHH||=An_}@E4xvL{n$Eg$8vCC$5a0 zRrCR4+&&Izhri8#{+_6(E=nOg3v1S8ux%rO`mHlPk#`E$?Fi9|z>Q8)-12vyeO{^B zNbRyfiw4Nh%n=yCFOk?|625cJMbX50n+^9Zy7}1CJ5NHgY|qWd?T-k5@lMbWLSD}Z0Q3Lvmp@)knRKjqQn9RBbO`ypav*&kEv*mwTj=A+0jrhk z4r`B8>Kr+D%@SN7j_VP@Xu{>lzw7`9XO^oLI_2e%@bCtZ#m#s%qa3z#V`;=E67<9z3US$F3M#h`9P4#L(F#o}P??h2c} zO)5P9GWk+eAN;J&!bx*toH&Ba%9qH2S%@H2ED%LvlusQ;%`mg|Uy4)^Y;G`OE-Xoh z=)B;SxTcpNFXza_Uj!Eymmw!Tq+kDzmEY^*oL#F`tInBFeg1L2Pyer)popRfW&{ir ziXWKhQplHfYAn*{x4Flka1?*s+)tE%?dku4uRONgsHx-g%}ktwSDTvt`}?5v4~i7= zZ`YWfo}QUgaKz8B{jvxJNynCOlr+xt7sC|VFxo}^5}s*fQyFRabd?-SwWE5%*K<|M#Udr3`oZEExRepHt6jImhQ+VcrG6(o9zs_- zHPmxs{bM@jeiy^VGU4{@8m^e4=U9z49oY2Ol8pghZtGY8P8DYscN`j=a zIzP4rMF!l~eSRrbjpUB9W+zzGI!&Q7PfK6^tM+zv8;nCNn5i-CfnT2&BhhVeOknsK z_I^j766JpC2|wlb%nM(FIpM9)HV>s$F}szD+XvJ^ zB2x$c7zl*nf#G`Z*y66&1#|k5kk>qp^@4+TP*okzN{iEn*-Dk+==TnB*Q~OpkDy0y z7nFp$AHru)0xqu0kw){;kr)}*IiwgLu1G?R+&}2)swU4iIoRGjY!wKlT=|HAXot#1 z{ilYcq*O$nKmIaJ>yq|&rAS-t;t~NCjfkn*N^PmA715LsIm-lXX*o=o5mg=9xj`@i z>;Z)!$xb{Jx~#RgAzfXw&b*4;)xb17>{zVWV{agJ-{)?R`@sSuCA+7M2BH(HO)2{A zz@kai?^J?yI#H_BJXhdzk7t{zGVWm3^T%8pF+r8Z=i#jXUhnAW*J@T0xZ~0SAoWww zM4edDWHovH&%^finNZ8HHN)sLGfH4OC0+x5JPDUb}L=taR$F_>qPXgFy4#i%3WxNIS~v@cjy zxTP9PdG=paTpsSc+~#7}c-jz9U#KDd7G(n_&qKL}Ec96dcn6#&G%M9*_h`!W7>i>^ zT=Y{KH@Q?W=gwW>smfR;?!crbOepN@yqQCjmN&-=z6oWsv{%rS;^k+VwKT{U&uMF& zP2$p|LI}Rh8J4b}-{1sXZ!bka*mHhdp?o?HUP`HiOSgarUH%R`PKXBL7b0*%O@j?a z&+_A616xbH=4M6!Rb&IO6ojV#{Go~4zqu9q{MvIB%4CqTJW+sNRvj`kA2)+uMMZLzJ#QAyNP)Wi z%9j(W^Y*+;wVK~RlYloSZ{g)@C67kA8f6uVlQv{JqLL9%nz6e(6Rml^4V3c+7h z)^}TKlonLN+QEw~U{r4V(l>1M*Q~ugQ|3F>zNsmHz#g=wrq;6GyPBFBKfn>9r_Z5| zA_KtI7#J8+)ApNjywJ7~32~zX^LTlJ_tsf|@jAWH>`ly)lv$*IA?CZ(z;X+I@?QLR zNW8-f??o;@hp#m>dEjb}T4vb7mj81D;dbru?LYG0?mb&((|=s~n%5a*OO5n7DPpR} zi&YVpT>y8gPK%|O&lgJ^ihDvrWXZ-SI^u>@DCAufjWox{R1~2QV{Iy~)R(O1XOS;M zDt$sSPQfPbkC=LLFiFsE?{-V@7pW`O>918pN)id2V~KoJF}ea$4Jdt5dQ@bXWm*$a ziko|$RFl>zyhUD$Rxa--^+vJdhc}@g`Wf>gWt(b^a&0P4zz6@P8$WIcY7VzkFn}x! zuB-%s0e~D8KwJ`_F=9cG5*=Y1>=hP&2HozyH{X9Nan1a>A>PuQZ&M%NaAO=Y%f1*r zCH3g^x&N8Qtjbw#i%_pJG-+ChA!$_7??ecABXe`E!71bqMi6CeKM)15cDM`~3&=BfV}Hl-JeM&$DCsB8z<;yia7I34y_ZIJ-oTi$c*nlcUr z^hA<4vLbE>aLR2646IRG?O6VZu?2ivRT@b7(fZRny?6&q)?Vh`!f(1ST%)6-UVkgg z8BYx0Oc_WB&NcD`-Iyk?e{k1|_B7ZZCHivFw7 z>3*QU&6GY3m4+|$8*=)Nq=oQ=_`<+9w z4a~j5)q7w1M*u))$UZlrfcM?}MN>U>@q$Y{TbH+xfkbg^(ShQ18Np{@>Vq8A7R{y= zUWuGp?@wW=3B}SgL;I4EgCVo+S1vBD(YrhL+S3PpHB1RW`c#Ec z*R(b|b!rQQ+S1-W_V+K478kTw%uIcS*jD{imDSYLoYetxxkURv)$ODjbf^-;_u{)yIA<21P1VrZIbry=+}n3eSj*?TSvF$1R=UfLY-u@jbD*Y# zK0*q7q{cM}3vS2%Ql!6SXjXM!T(XUz(n;Wki95xhqC$ZK(Tz@x|=b9Wiv9(C#7|&Riu|DmHoi=ms z+PLnMSc**=&NVE}Mwp z8q|LFCi`vH;+Epzo3(HpFf?`dh5J`2Q$5J2{qg(7VPZJ3@l2k;KTzr6*tt|hDo3;T z-JF!yTjZ$MCDVWDCnqP>e%f&TPZd1$Pwx~@v3m0i7E^ixM?BcDXTF8N*|(DrjE|0<;&x% zhH&N_^&1Crwj6hxt^*Fs;_GJzf6A?v;)gpj+}TDZ50*=RZ!yDQh+&4q>s!r^0-Hh4h@tPEb~xms&AKWTi?9G-{U^|N5(5x$~O>`F`N=zx~O&b2X^hD z`FRF%!#}jJ@s%hqTJc4ccr-I3bS?ey6o%UJKKz)`s?PU;79MTtJY{dZj_tp$$K~6@ z<<&nhlkW~B@lNZy!~W&R#U;1j3p=0^^AG1k7;wU!|FQ`58i@|I{13J0uS8KLNu!T( zB8&d~%r=t+eT)lzQ2QQE8XCL1r+M_AZt`Ds!+Kt<9!KnF#QPqQyYlIO+^7Zo>!@CO zj`B6~<^qi#|64Bq_kiTcmjZNlsYU`NjYuI@7*y%Yr@R zbt-jUt-8sS`G! zVH+d*@v_xxVPXd{>hg~t=dtBwIdWqMy8@=I&8yV4Y2j+->RFyWFK#TJldr;>c=ItEeEGFL;XpS(b9?3 zwme!j*jt~av6Jy2MjmQ#XehK|zF_yswqN1vl6BjOWHbp$z4@VnN>w3~I$I04QXh zd;z5W(jXrHGj8Ce9fxrUY8?zEVd|H;ROm6@0*u38Hp`i-K1dWZ`RQ1$tud~i=h*6E z8-UC1`^vX{#1-()^}I4F*joJ9J!j{*NmtvX!#eI-sbLcn8w2owy{=$UoG$=EXv+^~ z^TuP<|AQ+c`O0Nm2AOl=+O-g~ptvX*V8nKLan zmMn&oJ1+VXw!K!aL%q!FV$lKzrVll26I?pk=6eY&z=f#5bh>_ZvoMiGUU_gexT(bX zVc&lNNocKc>rGp%#j8kUTWn%0TcRGr0#V8#f{H4ImUmpdm*HIuKF>&zstRI>#e*U` zjn1~mg3EvcV*mt(X{>uN`V?$qSz($b*DwAIJxZ9yh*G22%9pcY@Y>U#7N=Yst_*R0 z8R92mr2M=ABu(~afBvdj()!nb`0n{m(EePO?e#Hy{EAD<3O@V)vj7}5cN(i@T-D3~ z8|#gtsj2DPrgDqUAs|OW_m4AvFWDVG3^4zM28R}*0G{8nhWTGEq_f_qz38{!<(~*r zyw$a}=wYNDJr{}w9>=E{896%#k;&55YUv)m*AD)l`R{@#0yn6DKjs^Vv#IgA-TZ!3 zySy2C+99o_172e$C}BKA9?vh@t+MTS;Z+Ne%r^R^K6j;nK7(-nSUx$CL&rI`|2^>s zEdcP_Y+b4^eQaNKKp(!o^0Kgt;*P^|%8GNblj}WgkBN;#ZzJgL@CNTA#jp?Q5mV1n zQ+k1x-%hNIAmhYwE+BVvWRnMPIfwhrgHZRW%oIzy@N=wquRr!FYHrPGzL5^9_H+$1 zDljz_i#L}M828cavcGL^7;w_(Uv4`|QE<=Io4S_)Iq9YUPW_Eorrw&q%F10EUraqq zC0U6Lqk!4ABq7=0fHuq!!f6GagkMWw_i8H_jhLRE&T~Bv?|*dcAJ(zT6HKy`DD~CY z-68F@*H1{wL1^A%uXpWa^X{I3iOI!(m;WDGo`)*{nG{-1PL3Zq<~h7x2-~;UNhU{3 z0Vk9EpBuNnPh!M9^k4bXZ}Px%1bosG=g=N5x0P_io_b~gaHSU@1TZ7;PROh^A9IIo~Q5AcyH2WV>iFOa2`gmbb$*=+uDi*lEZ}p&%0#f6ja=> zF5aJpgVM2f*}i3KQAuQ$u-Li8vTu;E^WrCGdoXd#J35UI1!J<-=Mt#M-sUoI4T=J{ z-FMxy^Fz-fl}M|uwA!4KZ0fX%rWaTilZAz>(595N=q$HG0D`0A_HItWC8bUkO)~os@ z(=Pv;N4`TH|3y$=_P>XgI&(9#5P;FS_1XV;TlaApFg*I19?!K-`}G50cIRvZ zDhNj2-ko)UPXK1y(%JduXDK=gA$K1T#|}L`aewz+Ab1|47VN)#zqka(h#ogwP?);! z(19A{KjQgn+4UWplFP%{H^GO7c&BZ@$6c>24eS3Nf93mAgGt2^HVjA89>pzh^aF;l z_a@PB*YGX>GdSQb{u2%8)vWqHCx4zQJq-%IhzVXtDgos6)?7S=OqiM5r(KkQvHZ_$ zq2uJw!(`2VH97;|Yl)th)H>$_4k@55-#sgv$wKDR&|Xiv=f@*ehQwZew|OE5Z4x3$#2* z`Cd8;yd7z*Ynr^xi(f-~H~N!*Dbh#j5QMoIM-J_}br%v#g{>y*XQL}e(I8c(OiF`5 zsgtg2_PjE`R4X%R5GrGo%v+$=$E}cnrT7|)RE1>kq{(phLcO2$K6~!iM?Esk-J;Yw zduMx(UOS;eyKc+x*vFd0{b-c3ADHpEPblnsmgtwbp(ht67DveZ+pC&kB5?fxSltJh z4pJ;1tb1RpGk>I2ka=5FdRJe%PLOO{Kg99h#c4#2w>RYLy#Joh8OE`7Q9?mexQjXnDP^Wi&CkO$iT6EWbow*52j z8#9F|69%96%Z4-g@25gdw`}J~>;1O)m9h0c7F?>*J+9m7aK#CSrRD}6%cq`$r`rjo z-)kA~4Ez?bJr}AB~jOuSW2H!ujJZ?HuROQd}_R>H5nf5!r zQY+;QIT0Zf2@c&YHgi~P#H>|-pGa@rUwAkj=X#KZnqB5~>jiAy^FQtUs9w^_#Le%k zIL{shMptawmaxcKBgD)JTHk+}-^$!jMkwj+1C{g;N@Z-o@xeH#S z#9zVvgqT@$%41cGUhaK2n@#wb&YBje?>=NYK6skfRTk65sHkdAE2rbT?pVcOwjZt9 zbcbk1ob)F|ysYx9yG|&VZ~uho_SltEoq@uFYxy?eFBVO#l@2cXYR0&WUiJPvp`K(Vft)q<7hg!nn=0%aoC+EfsS>#-Zm>v-v~gtG{O6@t{`G;Ma@>^brmc^TLgtIdm z=G``0FNu|Js9w7%qdZr^3f}bOh^@<&Xs5e15=u0LPE*TX%}mO>)r@{FoH&U0nAJ3B z;^FBn58j@ESLx9f4^Cs1>N+)j{HN^y1yj_{=Wj&>F>x5Vz>yqjBdJ-x#P{W8Dh*2a zB(L?}mi9rILuMOC0iT!tZe@gMn;S?S5_=CMUE6#_zK2KMg)(ssWd#1^7I}H3b9Y26 z-4?;B{$1*O1irQ)-uXgK-htKO4mX8$cLzBvJO+HvumALCGIFx^R*x@t{#;9G|0R@C zfhE5>z+5QiaynRAcD{|RGjTTA`1p?n4rJ|y!`*cUnG#u-=~bv8&c8O`<{L~jt3hK@ zj?Ml@{ItBVwadq>-2ZddjUHhcmOYX%$UashfzZNtn;Om+AW7#QJ}cB9ee=0tp2;^; znw8v#gGION87w}FPB(m6ZEsW<9Jzb)%=`GVRqqZ{7 zXZEeqcA0Rfrh$T(aRH^vrc9W}0G&GKVlO-Mz|`B{)*_S0UzcK8o`Pl$?kHx60(PU| zcn?!`^hXc-dfov+kL=}*4{uE^O{+9sP{GFjbV;=~U8d@h0!E$ib$pSlpb_sX$ zQL_5bB2GabSHY29P;E=N`kH-y;|geVP$O4dKM-msQuzPypL;j=hrhj~)bF%rIOJEz zt;noNb-}a!YxS;ZN0$8wx?7Cm^A8v-#;Jl)j&?wz83}dh+bC-kaEndrB{?(BfVRqM z*7;H#542*waIgpwm`^J#L0;GLjkU-dZ(V9bCcf#3XO}Rbse3?`#OKtCZ+;`3A$KXoksZMH^thLO_4zo>S;Z+0Hz%`WeJg_fu@K&+F%jqk*_LZ(SabDi#T9G+3 zKK;o{UI}^AqZ`3QQ})eoh;PK+YH=TDJK{V^u1P*<;5RBr2f%V_ElThKm&v`4b+#Y-i-OvV!Ya3cXe6C(2{bf$J3;D zaD)-HsXOf?y8+^hbZkTg4mWbbHCmnHlQ&Jlzx%rONi8P7KqIi@8u4}3_KTCzEKDmW zG;n94GE1SpU{wlIZ?~ zcJ_-F3v~;kS|@9N{% zMhI!~FFy?h0W?CiOp3fOD|M1$h6@dl1M(eu#}8oSOa;HbP52*Ra9I2>B~cY>sOjyQ zo*b^x!YMnCxi825Aob;nR`3)V)5j=sisqB-+1c0&_5E=E;EC3Jd_?kwz8k4X`Y8^V z%x4DHRhN9TJAN$>iXpd&#dXGVydvzWTK34pRsbVLAj%-Z{~Mi$<5=aw*44}7IMsA`i(?B>{)@tiHG%Q%LsBSb32u~I7H-68Iw#y_x{+E}mLn+?_pIt1sB&3#;0fWO)XWSeH9V(TR4VrKqK8VrB7?c0&QUmu++ONeRadQOcncwtex_b_36~ z%{;q5Q1#vh&(q%06b4#H5H$3V4t^rb@9;$Uhzz2T$)bu5M7AB>#uhn%|tHV{?*s; zMgA!>Obu2U7LlguURUUC&9fQw!wMPJ&rp)Y)nLn<`i~2HKY-#t4*zvzpgx{wF}LkO z`<%v2F;WuEvF=(v;}GWq_j#1diI%`W4Bd}3?qSuXlir5ZUj?tp>kjJyJ)0(vGKNxx z{8Sk!vs$~s55+M}vJ`tO4c|Q4)el5_B#4~o?`3gQ_|IuIxhJBsG^(hjvZB&6i zlbUt}Vq}rV6(P}VCaDQYQx-O!0`^>5xDMC;Kum5yfj@vT=SD(K*>@=ca8!zBq}cK**-#1D zDqu<66kVrK)--0^3wJ*mm-Z@tEJcgB4Fe&AkJ?)!#?=z9NCuztM&*!+-P9;ApaX1? z7SY4(JE1+yc`vP!T!gJ9;RkrytR*#?be=J>$qx4DvIs-p?F4o0n{u)aE7GW%N>Ko3 zysfYC2luO(76H0mWG&>b#*w-eK0eO-a|_-kOzXAyFVVoN(}aBjA65*Sid~uJ^EU0b zC;)1yjx*o`a#QQ0B@jIQR&jn~7I#h&!t?d>J@e)eo$qPm3~r*#*`E*nom`FR6t(WO zZi8Rq6+~ZOZwFh)ZG;nlE)hkJUM%yBBMd%8^A42K#L%p@gsm3h*WKWfin>9Es|6Ht z^8a{jX6DZBGw9_nL;}Ksbc2L2r7t!3-wO7>w;3rfGHBDPAq-Jd)=}oHFRn4o-h2Oz zFJ5o}YP7_JSh!L2!3S63E}Gl{Z`;o|=W5AFRJ}XCFNGebBoU;_@tOK`GLbdrt@vOYib%>$B9` z0(oJ10D?{gfReAc{&<(K=v;JA7NjviC_irr^g@2JX>!)}a z@@(IoRtt#;T2cx6nm+p-ItR}12AgGlcL~|-~eeRqPK#4W(e{hTs@wI-?|9t$~*(pH2V&Utwi#7(5 z`dERYQV2ioD+UFlL0OQiaTY0mAkZjLf)4g=!PoAmvs6Vzbm>gy)T$>mG*u&Lo7&o9 z@+*B7Q@O1Rga+yJrIeXs-y{mImAf_LK29!#!P>#0A6lJ^`jfR0qzEFiu>2|s6dZvj zs9WWS*%q-;*I}LGD+lmjR(|@~F6meQ{Tbk3-IS5FWf~k_CnJ%^eY`!UV@3gR`jA(T z=egd;giglGd!lJ4*OOm5T5Q;+~@aHf>ZO8f(IiUr^j_dkvT~kgpQI2C!Mr zQciMcW0*G=2a8A9*gQm?0qYtZBn3r9dw#&KZ?>tY>4_=)i~gb^q}}$e$96WFK7cl| zcrc#jOddBwSlZWli;+@8`Bpn$d)lxlZA|p5oGCg%V)tFWw1Vgx51Qv0O2N78v-{8JPljNhK+Z>r6Pl_#FDeT#P32E);trDkgH%<+WKOc?r z^6+S3ZBrtA0=Q9)@i{K@@{Y2ATtQ2z(vmD*At86Hs&J4R#?gfjUH2nKrC3OK3yUA0C1qg!T8EyJH=}U?fG+ticEz4qS%e9a zjbB#Y7tM-bf6D*;agmG-*6&%V_E%wrkZA1N+f`oC~Eq#GnABU=#Jf8_KqDBbNXH0M%cZD`J*`NNcig z(5u&?emWFg*zTaH0yT*Z_FQ+W@d&o&h*J-7)DfuQ0t-%)_+#IB+6F|dzo|BGR&hqPW57Ot}|p{$7UBkc2&)%jM8Yt zu_?@$V09<~9$IRFfY8PkF>6pxrH2ym8IcUYky@o_q= zKI^>ijbnLF9X(30t$8gAuD7PZ57el2*YI|N}XCzXl6 ziyQ71PO-1pC6sVunr)7atrx%im9qRiqDPaWY!}yaX(GN>?-DiW(8g93)e9afb?!{bw7g$)d*$@Us-5 z)jCI(`T9epgwIWw<3qOrhcTU5_;zNKb~qvLBn@SZ<)_f(J1ToKRr%E!%TqhZ-QMV9 zviN3m-6+;0!gmeg*_6)@g=r7?y)VwGcqKYxqoY~Inuri(=dsIcX5EVE<7h_!0UMm> z?OP3k0bR-e%<`4Dm7))YbFy1xKmfn`esQiVoknKJ4d}OPm#RBM+yG5bjQ71_=`N*t{;b z5^Tmf$epd)`)e*ZzuZAGLkM&7P^Azw5DChT47xK3qsJZjAO)frVmRw`nyRd1-xB4N z21|V!-NH6^!u_Rtk^zm;t!Ui+A0=2%-QR%$XRIW37OOKAL@koVHqaa}HG@9AxAj5OLfXtUTKS)zcB^I5 zP`gS8U@2EtSDFW3!in9AQ}SpVPj))d#EgZSSM4qa*9S?$ln;exy~uzi-ql!|bupr5 zkD|1GTQ}}mg6D$j8kKYNt3+xmhKQF;mg3_?6^S_7czub2eSGw6wryt!qVZhO^nPL! z3R(yU8OOuu|H3&9v*{nH0dPQ`u=~mkS+w*_C~Z-?vhsC)l(`aqp9GhhnhA;ulmSj8 zQ2M0Z%Bxxy>cL6@Or6CNgE)jNdR^WKI?7=C$e|KBTQ3q1J3^c9KRv~bhhWfJR0TID z%(B!NJ{VsWzrwzXA!ZD~s-yK{)p3fI?&FqYbKDku`$MYHaG^;S>d>B8eQt{YG@8-@ z*!WOUB&ApbZ#^lQ@Rfk9%oXHy@)+|Zn(&mDwwQTd1so~ zZOr7Jn%n37>of=hV1aW}ro)!5);b|afKJUTs0UmZ^2TDL`|1j1w5hXzO)dh`8qjzP zoqjjA-ljgTV;R-AYfGz(G32QUNrBg@r5obfP1mp=!}{&a#huk z%1();s#KZapER!Cy`Db@TYT*uAWt<(nO2QUn07Hz94f4toKMwmpDtW+Al%QX;Et&` z`WF|<9>i`Y88b74*;S0@CZz*{!sXZG&Cyuh#o6RgL#{Nrs&aD?;7#7usZmIf8qp|W zC`QH&ROW^MnOH@7J>;fC5}|JRD(RVg$gO~Sen+8Sw3T-Jl6SK5DUFnW=gYrr`g+;( zGax7yAGfl0N-fO~%6=d4XjCb9P=*-MdmCWtd064SwDKN6ix!V>G_A<8xTSIkpIJ8- zMauzdA1pWlXp{AC(_{1<9AE%mJwvCemy!8t69) zlAaA$!Uq!187_7KgExr?I#6g4&?G8JN=i~isRzV#0M>Okm=qJqT*dowMmPo+RGiq) z+H`Dgd#78}SOTqHPY;m1Z2hsjr=qyf=_nLgEv5=sHr@sRhoOs0f^X*-=8)<7K0JSy zIOwMHs9-@cps@?p12pgd-XFO8wB(w+>EA#W!9%#eZDXm=n!}yJ&~5d!61{Klc*T>s z2T@u4&`JSn4AQsXqPbJO+YKviICl;yX;dJVuwOIYEdXzK2vEekK(GgjQ%Tq7qdi6j za{v28J#4LGvPKspYt&vSknp``oYZoC*XPYlEm_d{zD8X`NB_$Ej+}q?%8!!LV4%VP z&S&8S=Nc1ZiXmlNJhXuZww4xy5Cu}15Vhy>MBKYDypqt zS@p~QcM3YiTz@edOlokEQkqLOB%AE_F$({btvvH^%wl@WZ;C@M?O`r{hb`S4?8VzT7DW;_D!?)UI zZ6>dX6IfyMo$rKhgI>hgIk`RnPVDaM-H1T``VUn3{JGw7j`N?K{2yQD(DYXHA2~|$ zBI&d1C5O=E%=-ZBxyy)eH-v5iR%f&^E!j%(tD+7bi~p4-FE>j&Hafd1S|_9Kmrr9v zW+6MxCm{JOEH}osq!Z1Cy-o2_g>7b(i`cJeH~y?+p4AdW6IM`A=+XuXGnZx+7_@MD zUth5g!r(WR#+<-UGQoJMVc)puu}Hai{F;_W+C7;+HkCJnp)REzTJ9R?89kKm9Y@zp zW%1!dG6W_AM)uCn@cgE#s`?%H2ws5Nv*#0<$cJqZ)$>H8fwAf4LeV%t>WM|F*aVVI zL>(>`==}x2NNqIi^8|WwsE;?tYw5n+Dc@oo^7QfAnr;Ywoa04Wad`z!?Vw#EgT0mH6P$P*#5a zF5vRHd0i7Ep&@=vFAc6l1oW-0|02Dg5htn%RgI-hi+HHEHv&@b>}~^=ng66$9iYXQ z$NV)tGJcj`3cBV@}B zH6mgkm0^}s(Wbq`M+YGSI@5`@wSvU>JH}W~#fy7!43z0soA-OOy!{b*_(cL2baa4(F%y>(lfR7t7_Sg>ZmhSBe ztk!c&nVTbrg=cCP3IT)X)AP7FAZ5|9CBEQbJV06XMW3DX8*6kYMebz+&S)L*&e0$& zPu%*cLrJ4MczCHUfgc&(kn&pV2N*|-#e(UN_ucP}zXmms#RgUOC2hONInm|cP1o&m za9Iz3U+%#y-v0gHH<^aCG!Sl6U8+~_c@IwD*&m=P>H3lyde}A(I9US1g^wSFMs_~r z%!L>y4%7&$&dEuQC}Gm$v8EJ8Ehpj9IK4?aOtkH4M5dPV`7I36NN=r&hCue5DAuuEuL6g%$@^Ih~ ztp3=gw~>|-nch-|Ak0o!1TBilZ?x8YNnORNS$7R*VtV=$@Uk>=qmK|45DlO_52aRm zj;HE6wYoZD27xfbd%vO=2Aq!%cQ@LU+YW#K&?}9Itutbi8pEL96rP`N`o}?F;=i)6 zY0+=gc2*j;to#uv3G9D_@3~|n(tcIAt)eQ6a1vDo7|IStbeM`WFcqClDpE;YJk0%g zzC|<#oHfNhp2&fbhj%{Aclfv;4AOAS{@vj&!8E#1h+Nq$am$&N0wb4T>6Z7Kloiqx z+bMTUad+wpVgttB4j9#k*(J&>w!4p#;^VTNriw+AQotkd3%Ei8dYF8lT?4GE>pn~I z6z*{#Ky7;VNLdJC8G!c;h_s~~3dIW3}LZ@sd1&15%6%f$K%V})2ro?Dv@#y z+-al^32^RN+jUhE`@A-?I{|deZ)c{bFM$9Lp$2{TyLADc3vj%(aCLRn+B5$hL<=*| zr6WLsDu;!f>x5YZYl4^=)P_;2;_|>q%_o+pC!Gkv_3$yqRRC_00eWKc!0iht<#%^? zxrKxx&(GbS00j@9sqY5La=;KG;Qu`Fi)=V?<6HB3b#P9fQqJww7h}#((9rzV{Qr3D ztp5at@)CuIC>veJq8Bk&W$0t@TDJs$qHa9NIiud+^Oz_XXiJLs4EQ99qPK&mAaLRttAIUOs)s?Yr(Uk7MQsg< z>zDY?pD&M>n(07Dz-k;VHev$26?Jva6P~&QLIO9hMvIds=T`_wZ>2a3B2)2*;O1dj zR5MM$bO_sbwyx{xVmy3ev84rpWJ0UnbP*8|iQ{k}&*&h-LqwQQhz|(~1Z3tL56wBaTPNz1_j1~Ta179$FNx%>QbcPf(L{s`=fYaC$y z+4?`1=_EQu%_`kmceuK6!Y6n57=sA_DC9UD^`gUq!4}XeOR?AfYoAgvpcvC^!I|V0 zDOtQCf+43tE4MVK+h_eLFHw4C0fc}5{sqK&%6jvFu$g}uHC1=Mb4&DT-H0mU)K{5M zl?=*4N0vVN?)vE80XbQj-cVYTb8|K0@H>jg)V45Y3ImcOo=_GJk@=wd)vUe%14cGM zx-tBnS0-oA7e zNf^*7)jBT;ZeRKU6iGnkT%9C|tUP5wx}_{qId_H#=7u1UtY9UMamvVmQgt)4b9;}4 zR$>mDPJ5@<0*KxzjF|)W=}-uB`MU6HK^&LffR8JYg};q9W)BqdJ+(^pktqLbv2Ft* z%vzt5nFqUS>UbYcybIh{B}zujM7H$Nuol{0nk|agi@bk_s?WTuAy@Hr>sAqj$vg8c zf@$itrB-fSY5KRUW4A5L8wkOXRDs?P{|IP-lb0PMg|d-v#N9TL0cQOtfaRVm;*JWK zxbN-n{}W5_NJwB4?weMo53E5WWIKuA854 z^NE*Jo+}F&8Y<0nX>oLuz^0SkMqbOUZ_93@k65U7U>?#E@pY?34Hqo)y^QS~Wt2xPx38Y0W`z1LOb8~ZT77!x>VZF^Z zWyauPLK0-jF9J{02p~i_mQ41yv`m|D-XjtuWoHs;5=$>z)DU=4g-(z8DT43FO7Ne| zysQwofNA|n3#o2wBoOD%gV@mzIRu+GR}d>#a|F!G8J#H!X`_Ud z#aYc3ZGH+%F?fGz{RG+<8T*VXN9QF}XiuFy5x6srw!%D%de6t0lc zwDNoy7>Na$pPzm7N+;T{*sifdneL_+Fyz&#>|f1l%(hFjC7F5O=KgN(#^FcXVW=h<3%$^z?SS(DjDN);2ZePZFL`5Xt`1Y#TB+)* z?YDAN7u@t2fjyH`-?=A19{iV?X1o7m*JU2g=lFPMU{e4@*>-Mm@i;wG9~9uQ1V#+C z0IC>imVx_AIBo@eTS1yRd`fEX{(B2bK~@k~c&*t_ zl(i=3;~3E2oNy`qpZX*$XT%i6GPqaon%LPbTztK}@l!c9vCe+m0) z%*iyUU+NPJEwcXB;1JEuR#lj`Af%*YBE`E=gT>aoZCR-H0ryfJBkLxr!QXDd8RHZv zO0d^o{*m{+?tU^AJk0=wrXLQK1|b230Kmy5vmjwqTaSp0#Er1{>WAw` zFx5+)_mJJ3S{#;Rw{z#^R;_it-LjkF1YVz4lTa@#eP>hUfJF)-5O`5D0y6QQBJ zF(Dx#{Ynm}PY{r_WP#9|{`>(J+s6f(_OnX{;g7x4PxRz~o#x`iMhf92-k2|0}L%BF||a_m$oK&?k z%&KcH;B)i61^O9DkAp&8JwS2v&pTT!N6^CCTQ~`PD~{83Dhrz45il*A)(r$_<^;Rv zg930N$=*y11kxnkP0n`M{2i#wHjMTC|y}JH4zZQ5}64w&Sa?|WLxr%*qXug(Kn3CWMPO% zYl=Z;Z&^R;;r$2q?uvs`R|za1AlWi8CFdrVyjEQ9{vB4f)jH*QxFG-2HJZ<{-%^06 zY6BUeDB5ypAWcCp^mE`<5f`8wc0X-)etZE0b@xBFhCcrYaB(?_uo_ALqH0V8;8YzS z4|I1U0NMN$tdY`9KGxy^%Vov++yzAQMSzxes`3REC&QYRd~IT-qV!7Ur;VTXrb8Y- zAT(@+pRL|@5gRo*_3TfV*4O6J^vy_`I3htv53b1?W|jROy1FEX?cNlnhPt6b)Ltv@ z<*3gBarI7Noc~hntAEQ?2b6VN%43ntxvg8=NO2?I|ST~i4eGfX?EB99!SLQHWmO&a3FHKHvW`r|Lr=}1Hj{- z{b3esakV=5Bz0x}g0HK7jr}H@``W$CcB;`ft7G+z)De)rv3%sz@VQj)|f+Adj#agGj4 z_Uh&~A&nJQkHAkOhcCkqV??LRR`m3A@$x=+x_4&%c^YN1?siem5`Eo)nhITKcT~!< z*ctS?5O(Scvi8HZ(D`LziR#AV4_kQRAFddeC~mA|de6GD zWCqy?6`@|EPHM6Zlo*=X^KYdATlp4AEyO5W6v)U>CC%90%MQ5;I;`H3s4=p!H;`;o z*4jsR5n_7V5Fjll7|RpOz`(Xy1!AZ=Ejr6R;%AoquixW^6;t8mKa~kE@B5Ecl~S;n ztG*QfB(zFxBW7AG>C}BN=vbr1GEAP{0;@z|WjGAOrfDbkCH4~5jG9BlA?4Iz-8e|o z)UQj@O_Y*`Q?(Teqmzz0ExjQ8EWrICoZ#-ZNboKqk_LG7xeLPx;I*+m^xC9A^5r@} zs<2Kp)a2Zks5RXvEEEUDAp0-1f5nUiHWRC^lFGQGq=%zK17N5`zmT9wF- zWA&H!9N41MKpUjb%PB6GQl2wI5e5yJv-?spm6rO##Bh}=B`e=qj4*zA^&v2%{J|09 zlTTNqW?1aETMzn=`80iy!P5`Q6^T=Et;K62sAsMO7vZcl$QE{O-J(tL5laB4FSQo% z8K(vHZAW1Du4AaFl7(9$rrX%ios-q;@L9JIa9e)p@?X=y6E>NXmxN0xS{Op2l_}y4 zM^!9*D=8#y>OR&Uv%$h<$sjq!lisUG-k+_}i-7WaMBPV-^H0a`7KE?cJ55j9*T!*G zU)1hoHnr3{3NEmnm*ZtOijT?^zpVWf}rIL^4n>IR7-no$&$4ghmaR0VKsD>dU8O_ljBv zahg~nXWeB4Oj?xE*pzD_LVdv~J#?R@I~TigJ*W4ynGru#WFUVMDua5Z(cJ_ZN>f9f zm)4gdF5jxFIRRRxrY#v!xHQ68YxzqjlD{k@x+6v9q0?Ib?J(^$>FidEMO=t`0w6d8 zXVOmr_yIShP{7bo8i9-!Ys2pis4(8Lkiv9%Pl)49uaxlxL1y#gYyd9{4S`?{yKg|y zd)ud~k$^7(ZIn~{@#*6Yn8A(jWk22>Jup(laUqnk*|k&yFuw&)f=nTT3=l$6ET6FC zuloL^?RSxR#&Hl~l5VsxasXMgZkrOG>qv5hQ?0)b462Ok92@yc3LJJOP8DW8J7#dg z>qTeMjQIA9ON8C>k{5NfxymU1brpkP+G*GTMl4awoO2URz1;k0=oFcdmpcK6FHP6v zSB{zJFJvq1TNHN0QfAFzpR`0}gIS~Xt5AW;NqnuZSB6m9yx&Rq-FiC8D6d5t8;{Q) zM^F9qyd78T;Y14qcT_8^LIQK5NHEfjA>mR)6N7TT@>bKlBby9z2o9JxWpsyYaZv!P zZ-QBz^GEg<{MC-rkFy-kOko>pkCKz;PpdrUbmPjpCw?Ldk~DXpKkAC6bT*x*GE&Ay z#X2M>wP;MVF;Q5hY++;bgJ_hUeR9WfF$1(9$;h-U{qj~B6*6HYeG5ri`ng;xcWgj{ zJ}2lj8Zp2DMu=Bn&_dVAVlpX2AS$QxN1VQYjrQw-c4& zmW$weTW!{V)732X&DF%1yjS(OikRxFQBfY&a{$nCU7F@zU+vE&Jh|}V>?YZ=uT3zedbF-^Df7R#n z^dLd#Eo0MfMGDt*h<^$A_~vDZatAZNCJi*8%#u@_(XeWAD2m=wcO=5X&;U(@glb{f zO(Xx@BP{^XAT3Oih>GOV#fGd25WDz26R#f#V2BpvvMGms$Y?1S7we6h_P z&%ftuotan%Xdyn+`KwLNDcoe&U$}V@YzqsrvklX8LNqt&K3JRG{30HJzh8R}bUNXlnaxdUmM5MxsmVrwtjHw z;46v(;>^qcW~qf_@^P^;NKPoeyUqp2cS_94kH2qw^*A6&p3$4_ih({=U@{l>iO-7{ zY?18WOTst9+7!=C0Ft3XMmA&x%g}_|!&UbeMO`+b1^$vaV?HWOgTN_ltwaYG{!WPo zfC3-<@jj(VDlur8l#w;_3A}kdCJbUogl4X4LS>X{D}RRLLCt~@8ufM)^1{cvz*`eX~}&7p=14i;9{)Cw8xXCWRoHJuLEW2;Ucg3l`vum7|DX< z>xMwLNNh4Rb-%;TXd;Q6DYbB)^828U;EgMR$^d(DGELuq!Hu~*7wT_JU=ZGq-d&O0 zPGj0(atr{$fQCRu$vYp71sOP_nKJ5eVC#tVS$j*w5u*%mY8E_O`~SXMjhm6sXzTMd z_y%RDhDMX&J?s}xdLD0>r~df1p{N!IavBP8COyWS^W1PuQFd1J{1FKDaMEp9)P#iK z#X!q*(*~=B2J`z z#~lm<)Fc63BIR+yRyT2qRCR|c#Hy4^7i?+}()J~aU8b)m4GJ^E;3)3TZ`BOF+;Yx^ zG1U-;OIKsr{{@xHf>y-|jLB}W1-%@ML4)kS773OSZC$>ryXo;ks6w&w_$@m^S}k$M z1|hc_3Bc{vs2Mt36ek97SY80sWo7_ihcGZ$Ci6qRQsZYW+sy(<^?sc!DCG2!L`*0G z(i$gIm>Bc)lH!>=er^v*$C`}#;dp;ig!Pak*)Y~xm~{LfOx)|SulTTd`+>GZ&*UJjW12^FGp&Qjs6%B>Y!4>b(yQ#VA8*sbPM2fJ(2=J2-&ZYx z(Wi)W*X_IxwzOQR;k92EPL%-3y9wM_J&5#SN%K?_$6X;#6(@UV8(Dpd4u(2s25y39 zgj3tk?})ecF37{cX7*_skvg3GXc5jMzs_?>Q;O8b zxhUGro}RPE`bcLPgyC+;GJGQksZ;TV{0G8g{IDxOX!Zxaw`Uvo*j9vKqE;tW5mGn> z#NOMK&h4e&G;s!wj+(9X|G5C<$WRcFn8p2X-Q&utmqqEBiDHQT3wU0S*2VF_2tv8T zsO~`W%&(~=>MGY;4+W7R_8deq#``=a@So}opMS?>54azMvl8*vxjB#Zx+#T2d0S}~ zr(bn%UlnVBd_-nvflMYl*bb>GKA8f}`0*3MI+0@Mh5~ldaI(-J2US{W@R!8#B4f@U zyD+PNC~Lu&)UU>@W{K2%gXRV$0-aL;_wkiWX9A?v-*#!XaL20{3q*qnVG(9KvRqlc zuV+~-Hd>5rj&zuk+mdO+T6prt*21>5et;!L4B_*p>|T1jTK=8_VF|N{;s!~vgomQq z5HvZ{WsLUJIf20h7bq=V?@-^i3a9+g;U41-45Z*C0FHkksb5eU1-d(%t)Vf}C$ zzKQ=e>UP{s;0>~?l46-jovOW>F}n?ug)DptV>H1Lu~IIbm8lH|@?mGA^(KR>wA5&# zAt*B4?=h|!2ZPK4#iEVEni`x|;}Y8pn!bppU$b`YxtGP-PVZvD>sm_TycjTgq_xP? z$My8@`bh2&Q$k*&>$wmox=4v$bSct-WPRD_IRi z-&mqWXIxH43fj94_w=CcK-=691By6a=5jz7-^(3lvp_exGG42v4jOGz=v1KVAix>g z0Y}IATPuO&b$-*skQwL`q463T<4$pP`UvK^lz5O|NF-lUyEhf=MjIlSfWC-%Tqxdj z)2ip8oi{dE2KVD&ykBjw+{g(fZ#mb_u9jh8Y4b+|LqN+x5G(($EfWUrcsQs4{&4}c zLj8ZoSLlawGd&F^V3CIRR!tnT0JctX?2dgie#p6G83Zt;0-UE+$9<2OyS-B(_MoP>Mh>0>39z zX<3m`O`MZ!=o2^;e@NqtKJ(YoQux%|lX7#1#F_q$HpKo|B6 zS&QrHymF}y;GgLHG#*BccREMP|CgZs(Q3E`` z2mu9ApO$b}eL-4MOf}Lx3|Xx;O#ovTwy7yAt0oSk2B{kPlC@GhkA|j(#Ie78VTVoALyL zjE>1^#860QCtKW{Mz=FKEE2f~&6fa%LFg3;(X{drAGij}nLG1%8h<6evjdf!D_@Z7gH1k4kEbKk9D<>db)Ao3#z6-|qsh$aoGL3y(vH!~RixUe1zG~EKX zBiFE(>dx=Xg0NGxwKF<@W5UR`DbPHdtJ9|5SRIKYE_jE@Dj5J^DF%A;NpG!l7|ka@ zv?~|Ni@JsbY@~bR*MVSaFby;8OXY$RDp_#M`&*?3ROIZ;+w3&<@|(7DQzVXR8i-cS z9FLa^7J#Zso4x1SwS8ygL{b&fej*yI_~xEP{AQl`tRMd+DkKCEEW<4zkY*PP)O#BT zvXU8!8nAaiy|H2J${z3Hq(LEuRju7Z=X6fECAj_XvAl#zmrr0KVAmR`jav~o6LGy zjR%ynmgJwfv{YBHFmS@3*ll#2gnN6K#ZcG%WFnfgHt|!0$xvxzXx4=VN78sb{-Xo= z>&Nvtw|t2Uk(On{hBYS1etwxowvO)4@PPNJCwKn*$iMD`ef9oC(aelWJy*DPexyA0 z-=J1f@yob#TU7<2-S7vT$~YHWd_S)kUgHylLPu^T2n?S@M}j{O^&w_rn5wVtOSU z=Oq$nLze3Kv))sk#7#KYx{BF@3bHgPW%y*^Qo}7eqRXyf zTSxcx^+54XnI^Nk>mzBc96D82Rd1UJm1Y^&`6kCu=Q6>)X_hUGYcm{9tJ!~LJ_(V< zN9sROpJ6=3bbe?mj#8ZZBI29G8x!8@bF}DA2~dl~Of%mHUK&LoDVCNfW~d6&Lai_H zm@N#@jT%0<8X^}77Goq|0@ekpg1;_R9Xa}FKSh8E?lxbSXEe9MKp2S05vs{_rH}|TK59K_)4l|L=8oH3%p1`otrjxP$~Ft0cYba+*1W8& zZ2;5Qg4C*)(1IRbwOn>1;>%1j%3T}%_`BqNK9P3qN`UF(56t)(+*QkQn_eY9+u?c^ z0il@s?sGry)d$4^9uZxP@OO`AV9EQ)0_ErD#kFV3)tgx~HNV9F&Z?VhM4D`Rc8xXE zHB^A(UydZ9y}Ck>Vgmu8>W@!30Z_O?znrv{xRLX$;G)xj!lk-2!%iPdI^B;Pv=t6j z@KNlLm??2_q!i=VrINy+h8pztKQF1v@tqBb)CwEecPDZ(GSfcUDpOgK2na-^cIt0<;Y8Ypoui-Hr9%+dX0>IZ)Iqh1?)$Om z%B7~Y$=dB(jP;Li@0Eqq(|i`4@@aL z(@d43nTutl8WY6dlqW>7Ugz%Z`pI#{{3!X#K^>MUr-gmA+DV=Uffb24vwU@HMV4a? zaqg@cDy$De!u76j$aCgyOHvIJL!%1Qj8;J}obtX*r+B_7erIPm;+VFvsNny&BhnKR zh*@YT@##zZavHxgrhJR{W(mP^9dNh-_iO5`>!GJk1*R(n{HVV_tbHm#T~&SGUs8w= zxyQin_;j%=?}x|LUL8@=&M#$JEN*V@V2yx-6ju`*CuqaXCx>|ve5%>P8qIfZdOY~FNq*@RQ0E_?v^j}x+j&Nk2F-*!nr22{5>*@!J z;&{M0*~xFq%F3QfK$fxZ`P0$JSMofaQeSQ8Wc54g& z_H?;R;$>>G$O%St2qmi2#CSPbdlAFJx_Xrz3`LSbAIlfJ1-|UJkC$AV@Bd##R~gV$ z8-)=hrMp{7Lb_`pF*>9}x;v#~z>tOs(m4lcD9yykB;^N$Rv^Sb9%&EgpZwEp~{(G@K@Z;l6MH9kkeAmluhKMQ+@?HXm49zZY*mznI4aw zLnW8{#-p{X;Aa{TL=*h;LNaaJWf>!gF5QL!8}xSKgCQxU8H)C3iG&blF}^LK5{V3y z@0J?Y?XNBX<7=TY%AQw(Ovw+XkRuTs5d00ZxcI=;nZ_tuaSyz? z@MgTUx9cgJu76zkm>=HvhMtnyQ9#MTj?ajbREwK*cDLoCu>aP88q^YlMJ~}BN3eOg5fHu22TsZet76TJRfgvbNR?KPXh#jxRggYQ& za2c%NP+~ALCIr}Y_5u|kL@a^!CG^K=8wbhZpO%YHjTLSIj$tuw_j0;e;)EJw4VUiU zxFv!H%Qj9wovAml_c-FfoIl~MnGKXu^Y@)oN@y%H{R`>y8QH0zk@;zNP#}U0kuKs-rkDf7vZW|%J4(r7@&slFYqdHmES3N$OHBlPf#%jcN zHS|QYgY^tA4w1e3et}y*^Y#6~m%O}ay$U0?tuC+fd)oY*->_+|?2AadiTFQ3levDr zG~ymb$-XP~O-^qi5iHgnrdafkOHrg10uG}UJJr!2)0vr>p7guxLpbwC+JhSH zl#a>lgNvXAoYcj2gS10H@51Bt{r!jS{TRN zCnBwCrJbZ$c} zGI9a{)=^|EwLi2s2!I=tB+00AP(VsVp6V24M=wiqt?Qqc^UzZXk`ok#L=XebR@kIX z1%>g>A7S?dX$c#J4DZ=9`fK$ybX`UR8Vts|-ik_^9@U>ZH&0l|r@7t8o(42+6zSCz z8*pa+Nl-!>y9i!L#~Ez|inEFaN(k|H&Nr5JXKL2!q|+XaT;WBOx(;mi_!WgDsL+Ur zkJYj2D^QjeVoG45T|+A!j=p*q-28NR;BmVC^UW&LYZe;N-PbMOBD+yn<{k$9m6Z=q zT431CTAFLbo7Cxrz0VMUEO!CgN1F{-po2gUx(l7*~ngZ#0pe()X- z5szZgnDY0b_qa%nHd*8B@IqJ^3=2Xj`U0e^_)7Tk(YI$hBu^hK#Wy+p*;H}HDnjem z_!oS7Y@5+mQd6to=M}$7ImJXYpZVOwgJaPm!Nl1Wg$0Luszi6q?)p2w9e(wt!kSebD)N0mP9;}l>7zH45!(UbB@bTn8MPSmRY=+O?&?tF^ zbT(K~F`sdjAZHJ+ATK7E?YR9yJ?J8Pt?!m3ou+E;11}L6BkDVxb!@iLwQp_{yg71a zCuc+Z(okaC=r2_Yp4a#}LG`i+O{2@o++rJnVZvX?(I-%XSZ8`t;=%eA1W}C0F zs#p>_w8NA*hu3`+*$$f$(7T4Lv#ut5B~(0F^DF+r^~V2fXc~3U!;Jeg7=0yLoE?4$ z`wSK`!Q0d+E=zKNOV6KD{(mBRdL)|rWsA*TT98K=Q!lCt8Z>5ddndbtL)8e)5Vvv%<`4v-qlVQ+xQ zVnq!N9vBSC20t7LL3)0R9Pze$YfPZxA4dSk3O+cT0IPxm2^9_-*497sqTvmiC4P>G z)@CXHq_9Ck$eP1}69!tOv{TO;z!5&`r}0}2N92dnzIyd)kvX5CS1=;CSNyx(^*^m< zpIVzquEe0iFi(Bds8sgMTwqm!R2o1#^ucgW|7o2+w3!3*gViQcK(!Iga-+?tpSf6& z_2_!H%=7bAb*Rq;qVtBV4-XkFOo<)1h3aR3Zilp%P+Nf=HBK*~?^l7t%xA%B`Z=&1 zziqoBd!am$D@%%5GN=_Ixwo*gQywojd#3QWF9c+N(Xe~Jhd-*_!szit^Ic?e%ktHQ z_9R*8Jhk~@uAvD-lgKyXK(BNxq6XGuU+~t^?@cH68jUh-y8#1!=@g_K!vao5NQxi} zJOV%owDWL4NE2KJqyYY~BOI%*k$+|uvi-R(%H-+Rv-~DEbFqcDw!V9CfSDSoBA-T& zmZQ6jtGNI03QNa<;n-DzJ@oS287Q?F{@xeOIIoQ6c|AjjA3K7>pgoLlH;6$3_TG`Z z#2aCAn&tCsapxlS%2MztOx$uCcH9rD?3-(j~1{-SLiUSaa|U>T+_e!@^m&_ z))TXOzLOEy)^`7NW}bH#is;4jd9IA1TfLI*x)Ky;p#ihsgrhT{LTn_+ay;xE&((Gr z-XK^f7_l)$Y1KnP z2h2In)$g*B`y$-L;QhadeVtn+eD*KOX_EV^c(Rt`$O2~?C;P=%J-*oU@)}l4X|^Zz zFY)ea2E19cr`12)n9{P+2rx{ z^O3X>zl!@+TuhrjK@Fp7Y?Fu22(rT;rf+QZz~RP!a`2a<^*A{GA(!ZWZ56!K4bbEu zPFrPz$j@@UjBP|qFbx@#03eY5JF56_1;drtz+}OdP$Ymk72bBzv(P7!NG%mlkMUzs z1YosLHyth~odm8>{WSb`F(Xe6X4mJ~rP@{WGshEY`d`as#Y5K%ND-3ja;0w~CqwQ+ zzg>AK!y^uAmKT9!W8fx{o(>+Yx_@(jb;#cCdCrUzL66Cig|C9aj;dQfwEG(RUhHKG zZc?A?M-Ya+3VHw7G$d8&1ggNOT~E=Y?iQH^(Njoh%h$vL84{kexU3=K!}+i#MA&%a z>?C5c@o|Oo3vH#6DtSbl9QgzrGRMv`X96!WZ~Q6jlow(ff->aqdAm^AQ@;6&5Burd zX?XavSHCQrHnI}PH_&;G$by9%1jW_voTXeM$enJ@?po{VsEP$jb&)Vii19()*BxKU z45w0ch*+Ul-hKyu?MGFG_&xVazz9K?tuJNu_?VUB^LdkcQewPvIky2vcQqDvQ9h?q0tsQ*6aR7>z;`en zOL;Af3LnEy+a0jdilwlkes%GRd{ru5%~)uoFP4a$f@0Wq^M3@w`|}(BdASpLH$M$R zH0a|bOxt}KRBIrwVU8DYAE=t9INx8MR(3YCAqNzzSqJ<3cZ-p0k|MQBgF?d6fUE3d zw5d21Kfl*REfFi0cytrVv7|e_d6nMq?=e*s7M+}B0w}%(IRG&O1Xq~qHy@Iyd}ZsD z%6e901HM7V-0T#CMFLD{2m8Pj69MlBdT11R_TM`PR> zqUgt+I%*jITT6^622pI-#jclDhLtF*9Gf$`zd3$} zeZSL2ci-68V$UNjmgHk^2hQbD0_Y~I05I}Sa1x`a7T-liL(a1ZUkWH(J+Shp^j zJ&h+jH?YXkUNRB32WJYNrw$h4fOLk-T`+4rvi%9!H3kOUh}V_pxCx`GvpliI7|;~r zDsJ;&jEp1-D(}F>*%sBs@vBMINvYF*8R?>S@fHO&8XbH8YSQjqn;HD?Zckb@r0)N) zy}n#r&C7H1)gKAFGW;C@j>pO6=%P40*l zbo@{F!0QHXpK)6Ra9;Q%+)ob92JTlsEY&N%;wXw59D64UYa7|!KT@dGeTf9fvNnP9 z1uPHSpXht-)#1lwGTe^cnr)AXiSak6f^~M+K8VkAvzx5yXiRpKO9RUutjkjM2^b7R zpav|s?jUCb=_^qdMi=Wo{1p67I(m%9T}ePA$w172EDcS?N0ldM#6W>+(#K<{sG5K* zOdhnMeUwRDp07zt1oT=znaz(}_GzbVg&Vs63Z+U>O3NVg!xRRXm6)R1XUNssSt?V? z+;Rs}S#iNZ>af)0ik2^Ls_5k(0xtZs@lv1;@Mj@P39C9JBqA1Nd0E|>*v9MZnn5$x z#m0^u4}oX3xMqvkw}#@*gFmZ}mj9t#uT;9Ob(yQGs|AKW_eoFWiUwZ!Gno53e(yS= z!|H!%Qkcx8It!BS<|E0k{?wZPc<&lO)^sGzr4NR8u1b0P{VND9pffckNi$$(1`%Z8 z{%GJZX$sHwTZ4|HWYZVPejqIKaq7e~%#n4LvLi42M3nTmlUi$D8!lLq+AwIN*jVYM9O~P_RDPr)|RKeyz$` z_nk2ZYAMf`b_xo*e)`+F<~K8B&v#&&3t$eu`>)N{TL7y`8=Jj zkiJ;~d)K%rUB1emqLL|li)I57)xh$41%6rYh6b5*v9cpEHis>*kIt04gNSH?~a7B84|F|%Aco?-D){V9Gx`vV@;!*ghE6wpa9O6RK8-Zu6%Ve3d76lR8I&=?ACv6q~$G`XA#GG1oG+D*$Np?<_lx9_%uxMh3%W^u`%5oD9*3E)jA*dwQ9fVl?h!=Q2vUSD~AzJF;B{)7H>XRRcQHXmpwC znFf}Lth?g0A^0_ICn268hZ2Al;N=)L z5DBbVH4A9MrcWhacH%Wnzb#Csm&cDjIP57B9V{a~5>b=`w|uLug>j=Lh(RmUk4jWr z=Bw9UBB*b32rNgpJ%M4yis{O31#Ei$SEOePON1&(V0_jCDq-%7-ebwO>86iJfGlSHbVJU6XVK0Bh-m=i&uQ@_FSR-X zRCE!k-*p?$0`k@c1?qoKW%$dPt=7zD{F~i24i3m2YqMS?It-v3n)q+GbYHxN-0Sr8XW~EU&C&p1|SMcYd@&)v5*ntqBzmBUN z#>}CU#;cl@_I}?QdZ-fmxIO&O9Za)ait-pdF_q5M5npQxE`Lmj_8SG3k$dvGiSxH3 ziUpfW;FU@Ka^1a{9viWen;Q>%#t6h1JJF`s_pn4U?m$Qe;6lF$np9+aX)+(BO*y-S z+(Qq+X8>+hO)Nl^3lVVPkeG}iCIm$*pHzCUDmmx$Pi~%NZ*i7*3Ak?u)Ck03E2YL~ zDe-)V{XrHiq|x`4s(y#_vr<9<`Roo(dW@)8B6aUdx--8wH^a8%L9s$|7N z&G;)f@TbjA;XFDZvf0Aoh1W%0fUhg9*Tt*5)0E8$aSJNfWCPUb03)nemm^#u zwF<@y)GxQUA7OE?otOC_)t0CN)qrKFY1ppY3~>Z6NNAj>ya-dZjIWLePZ@R!n?!uK zS;lV-Xw&iormmR-mp}(UOG$}C2Ifc;pXroJdG*b3&!6eFa-*lVN)3+-gKA8C>e$k2 z%Yu?eO{KfGat&`?6IRR(e841uIQ1?7v69vwnfYzCN`~9Lk*#3#%0a-&VSPGUe+Iyox%jXlL{ ze2x{+>3di*8$_np4Zt5PY<WBXZ#UMVmk?pVIc)jxKh0UnRl3%g2zlrCK!Cz=G$pgS$%Vpf*ZEE5R)Gbd@z>@)( z;zxmA#CyF3Yq1e0Pi}X&lrwITDw3lOZJ&Pt49$Y^=||!S)^k`140`al+1#>$4NlbtvPJw>)e6C*EwKAJI-=I@PWVeh>sY(GAdRis1W=lO)(Aj%tCsr zsGyJ%1GacgusYv>x-jLc!AjNS1eY!q2>RA&>GE?{sZev%=8mz*W)i?wO+v(dWJPRg zauNgae4qM@C~jay)Ar<<=2cUsdjlWVkUrfO5g5LZ!H65lnW=Dbc;BpRiL34Du_sX| zl5MCggVJyL0`4hVE7UNTJlr>1x{xvSR4QDVDqZjTgP4Y7h-ikH+Ng;z?BWAyW!r0Cr0UO)xY*e4n#v}Y{|EO?;w$!jeEnXF$${6 zW-&Mobatb(%PNaY6f=zJ??~xrTL6a1fT`neTz%_Qu9n4#jQ2cAGT+>dW-?@=iM9uA zoE6QT%Tih`RS99*_=V-jfEg=VG>-%Z1)fiJ#)68LS z7Bxlz+3zwbGBU}UeauVKm|)$f3xwIE2=ySRl|RD3p=;%Gn}3f*kZ=sKlfu@h`Si7HsObpx!K&#>Aw@)eW`= z_XL5}!=7cx!=w4bPQ&bAt`f2gBFE2KL{gGV14!ediSxhqmwE=x3S3)XflTMiMrXG> z98IN7XJ`4@;Y=!er7*0tJ6HA8yB9Qa&S`EK^cW{biySv$_{M29>yn>}|Z>w!p`uD!Y?MIgO0hU+fEHcApSQ6H%K!rl~JDx42hl6O=Xf zw|-nvhqeag;F7ywB*k+gF7f@T1&yV_0R9sV$bYvZbT9>P_m4T|W7Jk;YXvRv*=9Yc zXbrl2GPJ4M`}9QSeOOlNGn--lF!M@r@Pf|&q>F0wrk|1Y%eWmID7?7Xkk-3u)9C%Y zySM+of4F#)o0UhseS<;6*E*azW1JZQb?;!~7du(F4L%HqI->kUmPegqPE%2NB#Ykg zqc4O9ve0eAx$kDyIyixaOwTpHKuw1D&d2!_YRW9k%+# zO=3DPs8>mno}nVqA~NXM5a8~K*ox^2c$}{Z0rlFAhWMW(CM7-Y)lH`JM)Mg4I0}gy zaV92dD6jIWTxYT5Vzp+Zsx#-7!tzqRm#ukUXUk#@r%syDIEznx%5{smGvnH4HO{@3 zXBEEQc!Sb+W%xHe>c-Yb8R0jrwl7mZ)^MrcJ#1DC>k2i-DF zO+?HWNiLeXM<#KIYwJ#_qS`GSCyUX?)zfi49WSyH?L&z#LJfFZis#>EJn3S0Y7Lr}X)7aTcN6(^L#E#z- z`U#@iqB&tFG{h_A8VwFOnp&7vX$k+^B>$8j`m~A&x!lZu+;V$PI)gEf{wQ&aBa*<7 z3O?}Vw6nor7_-Ef4h&V%&g9HB_>oyK*=H~o$0&8OyMvU6Vi<6u&it8gg^yox@LgJJ z+Tx#=JnUH%nEuMd-7xG3XoxnNOyi5Fk45R{ShzM}e{-nRD2+=k`EjXN(8$By!dDPp zP7ZG%V|m^dd5bRTD_Dd!-ty3EDaii3+%<$v4T+l~!puNCK&`1tEutKoPx)~iT~&vRGfZtX$lJx#$F zlP&AVX*Z4-yx!Vz*PSPc3%8dU?_!I893D-yS>|i0p`#ArSauDZ$Js#s%t9{XF#_g5 zky?_Ds?3epn9fKqg_LaAV!aQB8%VyXx%_kz&m@1#C^<3B-Nrj5924t}uH-(ZY45~0 ztUMeRgU%#96qp0^xtsqZfWJ6=*lH9af-NG|{itTo)<@DH!DJd%oRvKsd(WILm^&&= zuMnftfUB0^t$DmI#b&8v18zO1WjQ&=+L!B|xDZrjiP%P{?WSh=C}`!Lr3xykfj%1* zb0CLaazD%jKJOp6Jzh;VFS0cK;9MA{X!)9Yn_{hEJA{aR&pf2r$9LELgELXNm65bb zbw_CxlfggCFOD2b)^D^3x_YaV*1|~2Iy}QqHo9%6lP2ToO88owaTvyl5yoU{%fGvu zJhs(=!aN%7nvjXP#g|k#5;)IE8YfL4;g?8;r2VTz@%{U%T(2agZ&@rIii54y2iH2_ z&(}{9@ZTjc?t@l`xmjR^#4-)#H0ibT{u-ty!#K;UM8O7CbNLIe6WS@RvX7odugMCI z#hO22Yn=m$ zh!oV#-b2}D!c_C+ho`>rLZkGmxm$Nfe}%pziH;^{`7qA+ri#D|WC|z(h%>%FAEQr2 z5}B9!4wpOeQx-2iR?ig00#1>_g2BP}a1u3siX{Lp(-`*_#Hs6=u=>LhJml_t8Hlps zX~97M|HpeTKUFgQ6c6!-YNAD0x$|-0B=q`*r6@$AY4bLxcg>fr;Sg=fBFJLx=EAd~ z^^CXq1vTCHRjykH0OS_DQ6AfHm*0RE5E&qUfIhLoOW$v|U!Ywix+tf0@8;^9{zN$V z%CgRX%QABk81m`YW4`a_v&BMUi)FUVsD4Roim;HWjllsCzrXa!|A3@x-OU(AFoT_) z^%dj8oZJgO!kkyB%qdWOyU2CwrOkU?GSqR!kIF{goST}MNW4x-iab`PF`XxRki$0> zTePGR^CFTpKb7ox(thC8pE}Z}1ws?A^bNyB?62822xZ1o=o=mSb2UWx4yMUJr^=vy z$UP!8=BwI7ln6qwUWzY?+-u->6Mp#ng~+PZC|wTD_-iy5v!~w`O7=n!Uw?NKs!lU*$YE5R2FFh;C=gly9kdPk;pcl;5e#SA#x8 F{0Gp=uH^s# literal 0 HcmV?d00001 diff --git a/actionbarsherlock/website/resources/static/icon_tgz.png b/actionbarsherlock/website/resources/static/icon_tgz.png new file mode 100644 index 0000000000000000000000000000000000000000..b896b2767360582f810ab912b19c9606bbb62ca5 GIT binary patch literal 1519 zcmV<#ujib*cfD-yUD`yaIh{K*XU;kEoyW{7*LA^7DP=O5Obhi- zIF5s;M(fa8!?tbt&Sta7=kxI8_&g*dGkf;zIW)|L$tm*lM`2La+S=+4wk=(nc9+-J zN3M5ub-DZY?Q15vR+IruDu6(BOG``ltXZ?r{=<(@bV@~k0}+6nK9x#g_pY6|cI_Ho zd}%SVxf~oq;(`0`!`{7nv0%XhkP&EWYdbP;-n>Ujk?{5Epltucj>QloC9zl-#e_cE zv0aQwFRSbZ@ts{;ifS~D3O zJot^oM0IsFFY&)rP?rfafKRBkj!Z*C$~J9Sk61j8Rjb$H%9TDi+L9nTcm6ykO`0SW zk$SP4BVg&9(%Oaw;a%Ubj$(lPZ^#9>vi)iAaR=VMe@ma&G0 zfMI_s6>hO)fkAtFJK_`rUQF1?TX{s4a9sw0a2L=Cq72}CH*}(j6DLw{kfRD{2$6i= zA_`YBbQf4&7L<}GC%BKb9Yt;J?U*@phV;jd9F=*iP^1QsrH5t!L(G9#N<1I8btvpFl^Xx>3Pia*<2QgzR7QHfbT0yM;pMA z!I6Eorw3J3YPsjJD(q8bl!e8Di7LeiVfJeSFZGb(L?S7@&&uT(VZp1^;1Ey+1$Kl1 zerDV;ZY)9HO;@nSBuUn%AK|#Khl7X z-~QzQ-krp2Z146}Ql!k_vLHr5$icLm1oU6+!;;3Y zvE#MJdys8Hn$WkUt=&OxsKIx4D0;DvYg;JeHxB*&I=?GCmM_$g-F zmb|8oO;0W5RhC35DX-*Vx7MJ!F^yYptH!8t6U5JFPW&SL$%+)_uh@ys-+#hy-ycMr z3}Y8~Pw>GMq5uLicH|8%-*GyPUuA5qFy_t)n6YrBj6YvJU$SQA!sTMnp{5N;CQ|ZP z<=82eU;Zv2E<^XYPaYclRJY_=&TaZL%h37jaeTJo$wIv6aQ8!xqPFf{9B6z4T#u6U zD&~rAj1oC;hj15o2oP)z`Izo}aX~yGa2{@I!1U+W;JJ-0$o60L&>@r_e0-67KV84O zC?~UJF&SgZ)`s9Oqfy(I&h5Hqd@ZGuJfyt*rZnXAV&z=PINkDm>9~$xJ|!6WG2&9{ z@;0dzd=rw}I7m5mG`a2PKhGe&^@|$X)$QvwCGhtVQ>E0Ppif-?ca!pvaRUs2d2h}w zmS6AWD#+4T4uRp+-9-4(Mh7-qTYZ3cHu`u4F6y2C%QtE_4WQEzyJqV VFJ9vCs0;uA002ovPDHLkV1h9f>RJE* literal 0 HcmV?d00001 diff --git a/actionbarsherlock/website/resources/static/icon_web.png b/actionbarsherlock/website/resources/static/icon_web.png new file mode 100644 index 0000000000000000000000000000000000000000..e4eb1691db3bd0b50866eec89334e50a5070e547 GIT binary patch literal 90807 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 literal 0 HcmV?d00001 diff --git a/actionbarsherlock/website/resources/static/icon_zip.png b/actionbarsherlock/website/resources/static/icon_zip.png new file mode 100644 index 0000000000000000000000000000000000000000..3b1b54fd454c94cf15b416ed3698dccf5ada7d9a GIT binary patch literal 1473 zcmV;y1wQ(TP)P7UW=ziD)!B zO!MA!It{-;-@!SDuIuVKkw_qwO2O6R?jaq~mX?+S^qTb2li4pHoR{KQEM{$Xbar-F zN4mOvzt7IjS_1fNTf)l$86oG~_ZkW^cJf3Y4AaE1|plkSxoSB@O%E%3p>o;%u@`~`T0WB{Ax~8MIr$<%) ziPzu2%8EoF4Q^$fad`&T9VE4>BIH8zkDemsI!Aqdy>hbqwc`-F@ZKj;k-CJoH3Wpr zCu80ot6Ly2F);y?YQU}u9VsmZKMLo05b#a`Md0Uvyzhb{s;Q}=Ss+OaCMB`g?Kte1FF<0ceshjv_bQES$ z5ng<$UCrv9*7Kd)QVRS$R{5t$W!2Bk%_9;iQL}uP>xpCn@bBb>9dL7{aeoJ7Wys3@ zV}2gRM7463@60*J@)+}~1>r}<@Yw8fgZwm4h68~jHM?6S9mA`58QWwEn0;S$O~CRY zAvvn6s|or!`dz@WynI`|+c$*xfNwm>a`gK;z(mN2l;zD^XU8G$6tVo#y83+`2><*F zW{fiYaAn4c)}c{r{WqUnSE8B^bC9BaX-hrZ=h%AKmYw^DcUF=9*#apLVQ?dYqR5(~ zi1=L(Abj5r@*$CROLQzweV0{TDF`!yRuoq?3O`58jKq=f1?`x2It^T*0k>)O`8Vy%2#C>^k^01hc3= za0!*IR;I^V?~sLif#LQ7u3D@mWNt%vx5V;?VzkUHT5TM}2I^;gl zdpaQZ3B%1*nxIeOo^8!2uBgW^vHcV!@kAhuWIXOfYpb|^_E{>}Alam!=Vn0Nl3cx; z?ghF;KwUwCHC&DI+IF?RW8deQJ=cc!sM#PiH~V$h(9dSff!G!xn+q??+mMoTu! z)B>hQTIe;I*~Ey^%y0zL=blk3)93cX425Z3_}F4Lxv@gc2w3^?>aB1#UY2_`?f}st zo6H(>2rv(WGF$(K"),b.open=!0;f.each(function(){a.data(this,e,a.extend({},a.data(this,e)||d,b)),a(this).addClass(X)}),g=b.open,a.isFunction(g)&&(g=g.call(f)),g&&bc(f[0]);return f},W.init=function(){y=a(c),q=Y().attr({id:e,"class":m?f+(n?"IE6":"IE"):""}),p=Y("Overlay",n?"position:absolute":"").hide(),r=Y("Wrapper"),s=Y("Content").append(z=Y("LoadedContent","width:0; height:0; overflow:hidden"),B=Y("LoadingOverlay").add(Y("LoadingGraphic")),C=Y("Title"),D=Y("Current"),F=Y("Next"),G=Y("Previous"),E=Y("Slideshow").bind(g,bb),H=Y("Close")),r.append(Y().append(Y("TopLeft"),t=Y("TopCenter"),Y("TopRight")),Y(!1,"clear:left").append(u=Y("MiddleLeft"),s,v=Y("MiddleRight")),Y(!1,"clear:left").append(Y("BottomLeft"),w=Y("BottomCenter"),Y("BottomRight"))).children().children().css({"float":"left"}),A=Y(!1,"position:absolute; width:9999px; visibility:hidden; display:none"),a("body").prepend(p,q.append(r,A)),s.children().hover(function(){a(this).addClass("hover")},function(){a(this).removeClass("hover")}).addClass("hover"),K=t.height()+w.height()+s.outerHeight(!0)-s.height(),L=u.width()+v.width()+s.outerWidth(!0)-s.width(),M=z.outerHeight(!0),N=z.outerWidth(!0),q.css({"padding-bottom":K,"padding-right":L}).hide(),F.click(function(){W.next()}),G.click(function(){W.prev()}),H.click(function(){W.close()}),I=F.add(G).add(D).add(E),s.children().removeClass("hover"),p.click(function(){J.overlayClose&&W.close()}),a(b).bind("keydown."+f,function(a){var b=a.keyCode;R&&J.escKey&&b===27&&(a.preventDefault(),W.close()),R&&J.arrowKey&&x[1]&&(b===37?(a.preventDefault(),G.click()):b===39&&(a.preventDefault(),F.click()))})},W.remove=function(){q.add(p).remove(),a("."+X).removeData(e).removeClass(X)},W.position=function(a,c){function g(a){t[0].style.width=w[0].style.width=s[0].style.width=a.style.width,B[0].style.height=B[1].style.height=s[0].style.height=u[0].style.height=v[0].style.height=a.style.height}var d,e=0,f=0;q.hide(),J.fixed&&!n?q.css({position:"fixed"}):(e=y.scrollTop(),f=y.scrollLeft(),q.css({position:"absolute"})),J.right!==!1?f+=Math.max(y.width()-J.w-N-L-Z(J.right,"x"),0):J.left!==!1?f+=Z(J.left,"x"):f+=Math.max(y.width()-J.w-N-L,0)/2,J.bottom!==!1?e+=Math.max(b.documentElement.clientHeight-J.h-M-K-Z(J.bottom,"y"),0):J.top!==!1?e+=Z(J.top,"y"):e+=Math.max(b.documentElement.clientHeight-J.h-M-K,0)/2,q.show(),d=q.width()===J.w+N&&q.height()===J.h+M?0:a,r[0].style.width=r[0].style.height="9999px",q.dequeue().animate({width:J.w+N,height:J.h+M,top:e,left:f},{duration:d,complete:function(){g(this),S=!1,r[0].style.width=J.w+N+L+"px",r[0].style.height=J.h+M+K+"px",c&&c()},step:function(){g(this)}})},W.resize=function(a){if(R){a=a||{},a.width&&(J.w=Z(a.width,"x")-N-L),a.innerWidth&&(J.w=Z(a.innerWidth,"x")),z.css({width:J.w}),a.height&&(J.h=Z(a.height,"y")-M-K),a.innerHeight&&(J.h=Z(a.innerHeight,"y"));if(!a.innerHeight&&!a.height){var b=z.wrapInner("

").children();J.h=b.height(),b.replaceWith(b.children())}z.css({height:J.h}),W.position(J.transition==="none"?0:J.speed)}},W.prep=function(b){function h(b){W.position(b,function(){function o(){m&&q[0].style.removeAttribute("filter")}var b,d,g,h,j=x.length,k,n;!R||(n=function(){clearTimeout(V),B.hide(),ba(i,J.onComplete)},m&&Q&&z.fadeIn(100),C.html(J.title).add(z).show(),j>1?(typeof J.current=="string"&&D.html(J.current.replace(/\{current\}/,P+1).replace(/\{total\}/,j)).show(),F[J.loop||P")[0].src=h),$(d)&&(a("")[0].src=d))):I.hide(),J.iframe?(k=a(" + What API level should I target if I want to use the library? - The library itself must be built against Android 3.2 (API level 13). Your project should be built using the latest version of the SDK as possible (it is best to try and use the same version as the library). This is not a requirement, however, and you may build against any version of the SDK that is Android 3.0 (API level 11) or newer. + Both library itself as well as your application must be built using Android 3.2 (API level 13). You may set your targetSdkVersion in the manifest to any API 11 or higher. - Why do I have to target at least API level 11 or newer? - Targetting API level 11 or newer will cause Android to automatically add the native action bar when run on devices using Android 3.0+. Since you will be compiling against new APIs but your app will likely be run on devices with older versions of Android extra care must be taken to either avoid using or properly check and call any methods that were introduced after your minimum SDK version. + Why do I have to build with API level 13? + Building with API level 13 will allow the library to use the native action bar classes so that they will be used when your app is run on devices using Android 3.0+. Since you will be compiling against new APIs but your app will likely be run on devices with older versions of Android extra care must be taken to either avoid using or properly check and call any methods that were introduced after your minimum SDK version. Why do action modes not work on pre-3.0 devices? - Action mode support is still being worked on for pre-3.0 devices and will be released with a future version of the library. + Action mode support is still being worked on for pre-3.0 devices and will be released with version 4.0 of the library. Why doesn't the logo defined on the activity/application entry in the manifest get displayed? @@ -34,7 +40,7 @@ layout: default List and tab navigation hide the title on pre-3.0 devices. Can this be changed? - Due to the relatively small space to display items on phones, this cannot currently be changed. Future versions of the library will behave more like the native action bar on larger displays (e.g., Nook Color, Archos 101). + Due to the relatively small space to display items on phones, this cannot currently be changed. The forthcoming version 4.0 of the library will behave more like the native Ice Cream Sandwich action bar. Can you add functionality *X* to the action bar? @@ -42,29 +48,29 @@ layout: default Why is ActionBarSherlock a library project whereas the original compatibility library is only a .jar? - ActionBarWatson, the custom action bar implementation within ActionBarSherlock for pre-3.0 devices, relies on styles, themes, layouts, and drawables in order to display properly. Due to the limitations of Android and .jar files, it can not be accomplished any other way. + This library contains a custom action bar implementation for pre-3.0 devices which relies on styles, themes, layouts, and drawables in order to display properly. Due to the current limitations of Android and .jar files and the Android Developer Tools, it can not be accomplished any other way. This may change with future versions of the tools. I found a bug, what should I do? See the support page and create an issue on GitHub, post to the Google Group, or contact me directly. Or do all three! The worst thing you can do is to not report it. Please try to include as much information as possible in your report. - What causes the following error: Binary XML file line #8: You must supply a layout_height attribute? - You application or activity is not using a theme from the application. See the "Parent Themes" section of the theming page. + Help! The action bar refuses to display. + You application or activity is not using a theme from the library. See the "Parent Themes" section of the theming page. Do I need to include the .jar file for the Android compatability library when using ActionBarSherlock? No. ActionBarSherlock is built on top of the Android compatability library and comes bundled with its class files. Including the .jar will result in a very large number of compile-time errors. - I use progaurd. Are there any lines I should include to ensure functionality of the library? + I use Proguard. Are there any lines I should include to ensure functionality of the library?

Add the following lines:

 -keep class android.support.v4.app.** { *; }
 -keep interface android.support.v4.app.** { *; }
--keep class com.actionbarsherlock.internal.** { *; }
--keep interface com.actionbarsherlock.internal.** { *; }
+-keep class com.actionbarsherlock.** { *; }
+-keep interface com.actionbarsherlock.** { *; }
 					
diff --git a/actionbarsherlock/website/resources/index.html b/actionbarsherlock/website/resources/index.html index 0c996acef..e8bd649f7 100644 --- a/actionbarsherlock/website/resources/index.html +++ b/actionbarsherlock/website/resources/index.html @@ -128,11 +128,11 @@
- +
-

RateBeer

-

Mobile interface to the world's largest source for information on craft beer: RateBeer.

- +

CrossFit Travel

+

Stay in optimal CrossFit shape while on the road with this CrossFit Travel App. The first CrossFit Travel application!

+
@@ -146,11 +146,11 @@
- +
-

Folder Organizer

-

Group items according to labels and create fully customizable folders and widgets. You can organize apps, bookmarks, contacts and shortcuts.

- +

RateBeer

+

Mobile interface to the world's largest source for information on craft beer: RateBeer.

+
@@ -158,7 +158,7 @@

W^C9kdVk5JG%k_hVYvf6g?gA+%NsNRR;D~API`SFO_Cs`uw@P zO;0$GS3b*=tbU3TWLJ-kR$teY{VpTK#}|09<17HvQ+z%3<}?zMs)!f9-5gv`HL zT3roT1g*f3M>ahPif%W5tnBz6ng0wx42MNg)(mhz%Nmry+MZM;)wZ_+!bN&ry5)VC z)9NtD$pN2l66fh`%~s2D8U3QW@g9TA2bhc6^`iivhTK{#)Or*l^lSgDP%XwXcq4T~ zVwg&$MWzL8EErCCq0F1}qmN~}K!jwBhoRRXqGFNT^x2(MBLdHglzw*=WlSGP6YQZ6 z1SGB%_^HL%VRZBY|4ZRjpJieiF3|rL0_=;29#(=Zjp+0l)XomVch&#&Xln{&v1Qe` z{G$?-<>|hx_x_&k(E*zvpo{l|<8!?%ysLO$vA|`{JugI|-TwT**y?;hKnlwY*&Mwt z48iifQXwY#vsmWALu=Y;BfoyN_TfRh-Onx=FZ;P^{t)!8ulv_6^(q7PckT+hCC=Zg zi;U@JGCF7<)I_DA!4OI2ct8LsB-hC9q8 zVUw!w_I-ytFW-D`&XKkH4}KXBd#Y&~I(DJza96CrJ^=}9j$JkjGKGa(k8d{ze zunOkav?Qr1DRMyk185O)KHJ66i1&a9wD%DPu&$~^yU2D2z&DvH)ma2%DDdFKL@&56 z{1-*4Oym!wBw%J*s+;{@8L*mMC+4htx0d`bGmyT;O;4k8e}EI8N{a}* z7ggs#MI~XuodRTY7g62MNXRuR{(iqAI1ENMQ$WD@>Ewr4FF#+nNXOa*I^=3=;GA@m zCKe<^3frC$g{)9ik)2If&;XCr0)pKvS~bfhuZ?-m7aS6a219q77wUf%abD8TKf%ac^6 z@KL2uazKoUm)+CLenc(qI|wdXpqg~L*Uz07n=QQ70AN!2Z_ETZy>G70frOx~2HoUl zHC^Eag+lY51~R@MZJB>zCcF1>pR@zf8QlA5&gb&D-F0_i1`*Q+aFnTh#s*qmuf4F| zr+GCkCl42O*;pc~O;-cZ4?0Zh!-<_9>!&{Xb%?^pjh!s4(fe2$##Kg^Wa*@=u|VL9 zL3)8T7<>79{psbAe9+n7mez}(Fez_&DIrB#^7hlwz$XKNQo%sXhct>H-V*GCXAmA~<5(Ofn7Tw#bpXDjoU`-_?r$6*k zjU5uPa>wU&g&V}mZEB5_{p9E7_5eY!Db}ozFTl#1eogRvvlkz5n6E*SDzHXe9?!)9 z66FC{=l!<($LKj9kU#@u=I?EG=3DO5aL{`o3;Td@(aPLho5%@SUjj8j=!IuI477bn z`8br``fd5Z&w4&Wa1l9OHKuFwkGTtkq6eY|U^1EgiLuq0x^j=j&ABhEi$>08;nhe! zHJRV9`MQtX&yMzHT!u?^`ufzsO1#-?gWfAK*v9z<#^7m%lQ*z- z&zZw@z{nW>SYFqqhx%Q}l~WOI{F5RPR^S@H zS&SYp>H0V;H#QjXZymCpDa@;V&zRBeODABitVZUhLrQ!B>M+X3(N-fZI{ zsC(?P`X|^2fb<$!y9(tqu6oGB1Hx>=Y#zRPzb>7)X{z%9t7Ld-3@Q`;yNmVE7`cks z*;(}>eHD!2foao?6zX`a* z6ijj~R!VNWv)~UR7$WR{IsWQzV+REH{q4Xe0Q0jO2nNOQ%E3W2cOFx+Hb(^Iz8@{C z_x5j1oP2aEN;Ikj528~9Oanh@3E$IedJ-zV^O~9lcw!3+_`l5Fq6tTUBd9@x*ipZu zi2=~(#iMj~btGd74yJoy^EKqQeUzl6Eh2eJCqo+ccRg(Nf&7K9)Y2E<)s9!9#9EC? ziGNdvoE{YDX;^Y@Tr`8Jcc}~Y3aL}F#P=6?CH#6um{OZr9x*q20sii^P=07V>_A(71!JwVa{DyfE_A>E!96yjHKME_VBw0F<8kC9j z_}S|)k_%sjpMt#%+z4yRE1YZv?gEP$1@ogbDv|-X%V?k{k z80`0}HvbdkGZ=HC0p=T^-;iHm>@$DB@fzqnXlQIc5dvbp!%J22uFo2<_qSl+Z04&O z=hj91VU((iz9CUH>|T0UFaV)n*HGt3(k|{CezZ;7YtSm0^TT15m%)-5l=&W$>t1MO$tgxDZsEnza(bAX{SET!RKV zI>`7K%2tpEEjM;2nBp<(S&O!)-D`JuM@KmjFPp%;4AR{I7Q{xS5ftk~_&EJ7=9bU| z_tU+0`n7+R0X*ucW zjJSoIJq8(NU(XK>PC@hJE!BLJz;~+Lbv-TMd6@$D6a<24Y+r8dU%IUC&iusqIHktB zDM7iD+YIv_OiHb9Ea#4EJ1vb~%yyVH3w|&DsPV`byPpf53gFPdV`Ylz>#Q_cX*6pd zzO+(+Zoiru7wG|7Zz`3m{e+O$7Gt^#Dv^_Kc0EmxId_|h&ozk_`nD(-t|;98Snp1X zyN&K3!Jk}dT+5|w)c%?}a;=skL9K`sC4`XjSOHo;F`omYJ(v!A44qK$-|kyrm0e1=Tff#|4VMp}tSse}YzpH}#ay`IWggU!4pZu9<09>!A*}7W)C+}FGvDD6c zn$^2EdEJLgAp9J(HSxf2%#{kcN#=Z7)3JFkJioa3EYsn=e{51|Wa9KrrdG7E;?;h4 z7^oKR3R%j5vjmuK;71dka${;lY5W$Gg=)iFhGm_nHE+N_eX`f+`M z=A_{cD$Tm3z_c=Fa-roKF8)ctr2Y)ZRK(qv=3A_OfLbS7T|yJmedDi=yU+W)Zi>hn zAh9AMssVZh@N2$Et@?SbcC;fJfC@MlWce+%T=>bQX?(M*^LyOe0^mmy9xFj3+t0%( zA#46CLYF7siM(~DD0{%S3-a&)#s8>7o=(tyL^{wOr8aHy>gUu<0H27$(fH$!3fbNR zU5oeU?jQG;-y)R%?6?2xU&{G;z;_8_E1D&9l`C^@BGm;ImMZj-BKG_g*hWO0CX0dX zNA!y!5moA96eZ`YzUZu*>)QGDz`4vR2Tx(;PrK}(B}7x=y)+NQUi@Jn7Ihd!)PX$0 zb1#(6nRidUN17U2l0zP2n(4z7Q+i&Cud7KU$u>k<0%NZ&aunbTK=mvOJ@`#PN@p3k z>=P1lV=^o*!u8%pJ4fz(^evvuI=Ema5purUA1}+hS;n}VxBkus$}B;P`lGkEm~mND zAyjORO}HxfM9LW~%9NC#^_Hab_%Dq=RZms{4$HeRdHny}%!-{Zz>8%E^e$CZpB7r| z%257@hUg(J?o1H6OQ{!&L!|-?C-$%GK{DmVG2 zt6q*KCV$fNeB(}bvn$TeP(A5nlZlS{H)#9OObCyVOJ2^$cBd(>@F>c{=aqLsu?+x5 zqs6<{WJwz8{+H1sW|B|+z12Ay;Qp5j)n+oNk`icEDezlld#!-ykz60TFX_?mAGy)nqb#v9bk+aj=|2JG+hVgX1&b=LfQJ>3ZGM-Q^*{Kwzs@b3 zzbTMKC+^YVb}8xfGucD~zjA?+wHWjdVt>SXp|(#k*o}9jf=f+s#%`dQtgNpu1kYDZ zbb)7i;a6L5(~Ebr`!|era^eLb<`pIgEnc+b2s8j$o`R<)Yn^??Zvyh@4G^4%rXYPCqU@5 zt$ta5QtA%8arrfCOei2lc=tlUOkXFa&vqc5>0|eEy3;>(fpcT~eoQIp8dMK{A885; zx~(cOkvx!pa|Bdn@@=PA{{Q}6uKckzV9M4*SKAK`hWTDpCq|X<@GRj`vm9hg@HtQQ zzd?X{j-8cW2^=KA_{EkqA7ZU|DCZb(hST5bi)ryX9ov5yYg@%=?^70UCh3tBT6^{N zYtL+iY!fC?LZIJdQBsXyghXyMo=IkMew@e44k|oAkn@Ps4G7nksa06fAxIg2u(XKaGCiz8bH~sw%)jngG@a??_!@Gux+b?S%yL{ zafi!-rlQLO>&kX>J{FQI<8?9;(xEAw)WNalK^SgerWs7?uH{4g>&+FBV>l#SHIW!! z^d`$%yF#6)fZmHTR)kl9U9>hK@@E?4E>2>Mbyj*h@QlJe-(93Ot#i;2SG*S+NrakY zsmqVWa8oDmWaOmYC&@%SX3LchtkEqJ7m}JIi3o?x`G5uqN;sb zVqNP+bw~#s3qQ?ythmx0Ik z9Xsdy!^!O{nzWE{gURmFvT>sXIgOX9TLWcAaALbvysD$Vo93kHu|xKl>B~E!Ig-0P zh))#Ov6k@T=VNwfSfi6&#nybkd%Q_E!Pt=lEi zF07G79Q_NrY&iS43nRFilCXLuGTCfw*Lk-HC2|nAvI;u!e&a)MBAeFTV-_`J&>v;; z4@|maM-9x&Gt0+cPIIrkOKLg5TceL z(uu@Z?Unt?Z6WC-VU+6!%dKG zBz}+k8o|mYUC43w{U^sMQfXVVIFV$-^eF_cnG(sNU=oLB@pJ+Nq^ z6qE3@k+vaKC>a`=$UXThY(t+BH$9~i zl{C)bOCNq;n(-~lqF&&s_Sg@W`ux?rtSTZKuhF}AHwA1mlbFdrw7ZY}JtOOe#68Y7 z&~OY|_@ReW5H;pFO)h%6dPQ6cI`$d@pQqdv)1I})Hc51Fm~^;jt~o$ywVBeL#h-ae z$9C+;c?2C5J+QE{!hTe|rb+q~P49BN|LXmnNa7aGIzdP*FSPqiH~T!fzBJB>xkNID zS4lUs;6VxVvwOTgev(@@ruvf^ZG`qo2yNyvVoD!L<=5iAw6P8H@-bch6Ws7`_aNUQ z$z*1wKL!kp-=?3M9}O#x`Jyqg#A_Fw(D(}!l_VK0uTK5XP)<6k((!+lr)i)cesj=3a&KyizrJKr^Sx3enKB9{ym<5^ zZM4FvX{{!6uZJT(j78W=I=)Z~T5ptPJ=kc_fw^^kGd(@M^MlOJHNgI%CiUF$rtTK*&6 zXgAEb*rU>W`>NZq_|)l&h9uQDoKXv{S3Yw`O+$E{GGVTX#HZ(-lj($=EY#w255M57 z0*Q8_IKIO+cSeKt6m6h6px{`wFsgW67{#$N+mXff*{Cma^8`dd-@)}_uZiq_L8No* z?j98Ne1Tp)Op6v%(VF@$kjrbBEF5q*gBwI8H^xzVwr;I0cnK-L4#l z3sSvdP1$6s<7IHSCpRa1OYv+(`bEg*WCi<@ubb>CNQmt{18a;?KX z9kM&RG;zvKDY2Y^CXV!PxtuVG*#NhSh+0a zFKe(*DJt4LQYAsMSXRNH$1HT%Vk#Up_~R?ie+;m+>P04N`jTvXwLjbzEqdM*19jp0 zkCUD#YGLa`7h};OeeL(e}h8={?;)jI}=V*?=)!=~cd=0sWSDvR;Q?+|t|cIw=OHOYmnU=DZ{{bhwy|=l-pb|2kZJW>U&T zQtKX)Trtkvx~-b}`g{+5Nngm-{-4WMn$@|6$YwU-a+OW4=m%4sOli7dGC!Y=Gl_a_ zXmtHe=8vL}I=Z@o0^q+3gu-CyP!pAx87EmZkJGlvU6lG0twA}1C_-IoRTzn?x~!g- z81R}sbHUe$3VyGy?bJx(Q@Wm}HCrrdy{Q;#H^5wd?AE;UNL~#7m@C{4PWqrJoV#eV z160B-+TLgB3k(}AcVdT`97ei)S70bGx!D|2Aen2qRiUpjF4ai!?dX;6y~YBR^X)B) z5^C6%9WDeYY*JzFepL%UKSbh7i;1;k_S%P1+^3e5!f@`#2>53#GG#mFxZ7`vZWc-r zEi`2B8rli2Mi5?$Z=!|>GenIJ-G3Mb-12A=_PT%O?6b!gvX5#z-4U64`s-WyAnV%o zt-TPCk%MDsqco^nIhw=c48c0#WDKxp`F&UAO`Q_rBpL;ZY? zG^?9~5Tx&EFkI}qrp`rwh2>Uk^zKM;%FUS7Sj>{9)tn}2fyT?&!HP%ABMPZMYWAdaYOy18QnhX*qprgj zi`e64D{OXcL@#BMn*Q(0+$b(WgTZi7u|9l`>VN!DgNnIl?fqXMkO5e6GIlbZo_mg4 z^I)d-<~TLZXY`A1$!vW~ScEr|lGc`Vjf@5yCA*rN!NW*3v2zZ+MLC7`_<7r6XF!GN zS(JohuaHgVN&akfN~t!R%&rH1EDdpZf6iS7=c&iNhA&lkw=NZua&vMd6jVb8#j|sA zoSJ1zm&W{@%}W|L5$ty5;&Hz}srSan5D1|K3UEJ-(qAsjb#AsX)BQ^4jv*Mje-&%xt8SKEUD^^K*s6yn3 zr^aCrd|VmQ4m&1sU=oLhKESa?aKx|M>W8|dY{t1U5~Q>fX^-=0-8JUQ=VAH7{)!+e zm7g&*rBFJ`Yd9m>BD!au`WRD$7q=ridOnjTn@1iV z9*nXHa9>QN+Z;b@`KzZDMLe%9C=#{OA|kb%Dty+WXdon`Cz#cciz9|MBT=gX7(x{! z;Bkg?85lq>5+V5!lnAe>#Z+JBS+vjNVcWqB&R^0^u8eQ{^fPenRYN&SyqDuA*ht>x zuVQHaBwJ`DbKD^(c!e-i`3BSOqKqW9F}o|8VsI~tL1~1cA>2(Ap*r+mY&0Za#x4!0 zwn|dTi$2pGX-lxhuk%Eq9^P43Gk%EVT-+Sgq*;$7vzVh%(SE^&lS$cAY%;SQMBk@O z`Lai}X2O)q)XCkuhrU5t%2c|vj7g@MUsjX)ql#F6#OFdD$!}VVO^vg}NmE<&?-X%T zv`ToQ`G-YMGoO|*qSd<9l;5W%OP|OI#j~$pJ9GGs#0U)AM#7k~QI1;Qi5!W$lc@9y z4b{{ke*>3qtRYC{bT4-p@c&L43>gi-f9r@U^YJY1j7byt!T(%KR6hAmFMpjni){eMi0q^h zLjx7ngN3Cx@>Fo~_wEZA%O1OqLD?Wch`hH)%qw4p#uC z6kGTw9wg60$Mz@$Em}R-3ek_eyu2vx%cvATEja+%4q!8KI*7QwJPr9pb1Nme$>P(D zvrzj{;eOJ;-8Ap!Wa>JbpBrNAZ)r9wW6xm#2Ks4{%Y;SK5Y&^euy2JA1{12e3rxeU`8miYfU|Fa0Z6sS< z>?h=5eDEN^H36E_+1WW!G~ek1Q9H;()Y!9UI`BQOyugiAV@b&x9?k~=e+p)1+H&D1 zAX7yZb_K4QH~*+3D3l^LO!2HYul=L}XaSzN0Nek?wQaAsTTR{*6_7f5c{K6N_~D(RmZJ+s5A(Kw zJ2(Qv7nA87-kV36%YkoPs?*;HfK;D~(-k;{jM>YV(iea0Jf&$>`1yZO^nUIz4B5)F zx{AXdAv3oact1{l`v!Xd{x?f9)yFg;XTO^}54|amsDA!UVh5rYGg>u7!@@}u%71gI zpb@YJz_@am3mXDd4^mRK8!bQl7MZ%^2D$GBn0dUY;w}U$gMu*3Bls{IqGwSaeDSBO z*=6xK=TWG0qv?b5!P=`SMft}>Gsu=F%y3mA+2~$zcD10>YhTRue0!6HffguUg8$xJ zHh4Xs$`P~3T&lo$BSuxBg)`1n6Cj5(`2a9yzC8;*peeb7a+PMnZ~r-TagmUVrGhZY zU;Mp3UB<5G-DE&F_)2DCggTCp1EoR;#m?Z3Xi6rk`vWHJhocU;=ZgBYyMWRCZxugP z)dz9Bv$H2RM-h2@t{ClS&mJfS2c7Q8n>7j$j=M_e;634o3jGn_=MOqG3!#YSmwkGh zGD%5u>r2gq%VFEHa5TLgYV7*g$sz{Aal5z?oI!AOwUj10qOT9U8F|wC2voo@A0KG; zW@oj|!w`Xr0ho)_W5e1UmGJGLnbWp+UMz03CY1i;q_NWJ6Ms(HnAxUGPg|FBasnDn z;ah#_#mQ+<;CO!(5YW23C#_qyxV!KsinPN6vpg1zLDpaZ^`TPn&)CRwE5Ee})9QYD zFw~pBxjy|GyzNtQ)Qeryt3+Py`C^42*KKAVvS(f0fXH$h&>qlkDVToSKv+Z{`K49A zdbA~8%tUYi7Ic2VISTG*A9}~j2O7<)Q#UqH9jE*_RaI60^b}>Q0i={3oyW7vA%A;O zA%ilPzdNzTpR0_m;1Q&o=fU)9?ZF`cx&%}sLo>IPs*Jb_d0N3H#GmfW)-ThszsV?c zeF&I0Y-c|_f;MxnPZ8JWviQG!+pfF2@>TN!{u-tWS^z{bHgv`GTGSsZJERZo{cRfy zHg*A%sDf&z@#+^-;z*3CDR_K9QdNs?o4kyK&(#@w4LYl11Mk)zdskWK^?%yG7Zw%( zb=?z=ZXI3lRN5O7Y($UcH<%@>tvoUR}pi?#yj>0!( zI``<;K@#(+f0oEEPx>a=YIOD-zuC*CFK>38$1$)`1JBh#tk>pcN6IAiJCXRv8g!0~ zmnkpQWcK8wX@GTmZmGfE{j}QL)=pSTvw-`Q|VkyG_fUZ>VlgX$c-C}MX(Y&||(A}Vk zi|^QMmIh7LYJwt_DLuQzsDy;KGn6UGKCs#`K^WGR$1$gPi`1|bSIbp7_=PrY#HLCO z`e8LXE})j~n@z^xZy*AZ_FcOIFruK&8?<(Iei*+V zgR$gEb+th@F1%=%sCt2FoJFJ2J@w)fzkb=aEw=&!O^E@{yYurtQ@5uN2_oas_aw>K zE;@Wqc1*a!KUb+YAh*1^%1T2cy@H{37DS^m9^#Cqnv3<230MwKJcAtu0dEsEnb2ZY zZV{i@^+CryV)*{KDkfN(2{-g})$0=T%9(?MI?QEQHw1E*?rxwmP%HWmH}MY#VB1gO zW3?|T)d}ktcP)cX3-=d4&7pHqseDixJ0K6RC+9LV14{umD!cN?DaQJs9FPaI`A4?ux5y)C^UnC=o^9wqvtTP?S&+m@ZC(aV<2;`+9s4Pp(A zrqy$3oS!ozI;?(0NI%q$tZ9XCY*yUG5fB3|d0lfvG1!h{IAPyiTXRti?fm_r;*$4n zhgG||xq&bc2AX*L24uMucpHf;#PywVXcrr zb&3{^Dc@p!R&^6wPmi^K$EtfH3PlInn>jfaok1opDun#>b!=E_^N2G+|l#l!!?y8q9 z>StIicXV)qy6?1)g<*gw^tjtI@ii`$`CMFy_-$jR?n8OrlI{SV5;9`*xr))z=MSNC zK8+yLQ{cx~`Y?136d97KA_FiD8qvh4qc(+-)^tksB((pzN@U^Sp&Z*g5n`_+xMCS^ zA+k)&ud7Ovms51-I3TS1vt_Majc@EA{gkQCqxi|J(BkA8v_a`uUaG@w=XaY<^wKWl z7>S{W&HC9JpTTsJGS*4sDBvBg^iXX+q`BP5tYawj6Qi zkw_bpfg~IRH(x4o+fg?W%=R7xf-9z}s%&)mKqE8bhYHcKYuvKChwvY~E>Gzrcqfk) z;}LkZAPxQ{Vuq}2ukR0dSG&zLxtk!phI7pz`OEH7jJH*P#?GOSb9Qsi&(D!alagtc zKX{?&FYf~u(8tA@#zab#+)?O2!q1qC4pd;fCB@t2NcyQxH-dYuGQ$&24fh$I-WqZW zioJb_S1nPz;%mdj5pTLB9UW&_seA?D)ub+IoO~4B!=Xu*sl>;iW`p3!$SSC`p=T3S zO*9}c(&HTAD>cNe5)9@jZi(*vLc<5j&Hc z^!rhbFV=*=X*)63+Kc~d{pOorGpsYUWY3nd7yyW~!#<8_4U zoshp{MeOiG%Nx}TEh)cgl7;pYEKD;evN~zKq8_O0{w}d4Op*%IfBq<*&3-UEQmaxp zTEhu%H6T}!o-9^2de%u*Kva4iWSRN||~VB5^0x*!B4o`HO1> zHdPq-S+20)Rq-gEl3zTcgw$GFJY-LH^s0M#L={Xz$M?Kjm)$$*ScXSuOd0g;i?D8b zH5^feJpKPoYG-mhQWuRc_HRgiT*;n<(c|Dc zn7cSPF9tU=9)%^1fhhoauMPcsCVejA$406)^zT~Csy}jwn2Fl)#}`S*<0x|(d`vUA lmkZlI4`ZNOU!^C;K6t8<@$v>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_000=INklDyA_uZv#?Y;N(3}>ciI75o7hSZRhDBF@r6P9gR$WtC-z(Jxs1bN6qUJ@Wk z6a)y6*Z3h1iG#oovMdCG3(+bAf!S7P5=(10MGNW&f*X#ArMM{6RfP9 z0>D{!@+=`hN(nd)_IAN(n(a1G)W%`4#-OcbZ+DmRaD)?rYPEvahA{An;}mNxFcpCE zd7kHEticI~ClGw~x4(+cH9;6~{iBbNN--D?xN!agJG&3C#+K4gl|u@QvpDCF!r|~r z1rgvJ+FF#52*LCv!NIV9OvO_aMi7rD1VIJmRX|t-V2lC4my-Eb6ASbQL!2vxcewI- zl$Uk3l*c*L%F4=j0zY79Z-+np#vih=xxu&p=|96c$Cc-<(5TmWfL6Ojqtyflqv3#BqX`xqmR_%q(FTjfSBh4v zNwr#GFdS2&=Aora;iZ&Q`v_#e-)Hs0Dwi)^X8&Lxtqs?%U*qD%i)?Oe^6IOv;`=_h zsa1r)ScB2JR7Ofpj!A%>J{rV{5+Kk;PL^j(CNW7IW344iGpx}#A+Xk!7AXx+cR1$3 z?mqhmM_6m8RuD)jPb}haNF)M*P)a!=1xiY+oeCiwQYa85l%$Y20lw#v=LLC|BPA%M z2z(#q`6wk3O0h6M50t-2Awhr?k~p5wJM7S?RjJf#2ppZx5sRlzA!R_Gr)+F&ptZp| zhwmw@bEQnq;T#BA`Wpzu^gkXRqV$7+g@pyA^k_DkNF`}B8c0<_Xm)N6<#}9KU8T`z zqNJeNs?%!JX*C)&TP*@#v9P#=l5%=#Q}YOc(VAYbOPox|^OP*luv(L*86`q2Q=^^u z0+hi-NQo4sz)F>taMq!e!t?#oI#d7mz_D^_g|Ge2*BFgPOePbOB*FK6f-vCLty_da zz@o^#%)bEsQl(t08Z_`L_&*eYBNWYo_5*Ofd{` z9G8*E5AdbHYJ;@~Arzjc%KIJ$3n6gMmcqkH)GOW2A*3iFhQI;Vl_A~%p0S35g9Dr> zzmllW;+u0wRl;R!>pr92Ar8mh-T{T)Wqx5EtR*W7jClyDDXI_@d4{zH>nwp6(r#4o zJ&Bb*-OfIXi*qD#Op+GVYIQuNC=@`|&i0fg`SuCxZ|T=UmI`Vkk-pZ}cWeHKn1<_hWi z+`YX%~}M`ad3P@nx#a(PcoixcVml60JhM? z;|WROzwZ@#d>t}BJnQdpNygFf zF`eTcMPacTbe@psDK@B)Wtz)hc#_Re?_fm8(f)mEbC1wJ*uo2a0$-6O6CQo+F<$w- zud;Ff4jcE@5xOYhR5}ROTD%icKPR#H+`IjpBHP!0&17etN1k{doWbs_lP6;as-_k{TW6)6K&d51ypFc|IKy~c-kw>Ziq?W*MN);^!C zZ?V_w)0kUgb*9PfLqpgI5fY@Qu&w}8P&h~6OB|BkC}ri55Is8PgSUT0mK7{FA3-_~ zJsIKyT5CKZ$#Tusy}R6a|JOX&T4#JXAWdV0l>d*spD8lc?3cfOj}LENXEMrYG-sHb zn`3cqk;SD&?%laZ5!5k3i%TzDMK*2|F0XR!-M?e&sLL~_muW>+(m2DfD57eOtjGw% zHlFVjM0I>$G4DJU&#n^smzbMhqBrQWckO)+H|`>=rO{{*)gw}q6IDWby%F!e^B&b& z6{9^c0Vm}EWwP{~a0vIAIkxu?X&&~t_TF!}e>fr24v<{_(r@!jzQ>DCKFxDip2vj| zXOv3E%kEKcq{AY7kMYdWawbDG^el`~Xi%&;?mxh$<1n3BCft76*Gg*m=OYoL3 z_Bx0K4^tS7vFJSI{$ZyqVR#s|MA^mJqEuvIsfHhh)M_n%rH!Hx*K=68LyM2F$?qa^oD)1Bw;v?34Nb#uSYHLSb6L+ z(hEQe{CvXU)?GgO#Vy`m+vVBS)2!42*7{x6*YC3XV3%i}ew>B58gcK4SdUBbr)YA* z;hi}4)JMXaLP|%T=cKw|m`vF3_DHwZs9kDPpPA#Gx8LNqzWypI_W9L2pYpT!KH*PZ zy-FBXnCxtD|ImSw4LZ&-dwF|A^b0+dOgVEMG`8 zt1C;KTbQMj9&+Y%i*Bbw#W$$HaC)V|xTg5{1}G^oqO8q4DI~@irqv8f(OFK<&X8G0 zW-O`JRKt+&aKLx~6YFz)+~?c>_CHgYoS9lgs~$0##1Mf|g6E#P%y#PVYHg~g8)TUw zHG(XOsglx{f{GX7hY=M|@ziU7%s0gzufOqYo<6h8_U^GY7)^KsiRa4t&|#4Rftz+<0C85Ji;PU? z7_AXT6K;LXum1Pn@WzdMI3dWiBdmnH^6X_Uo?T?DE&WMB=qqNb6)M8f3=Gv`ACEme zrNKeq`-D+QEvlf6VQF!Jx%mZ7EuCW9g$SFGXJa;wj>$31F3&MD-@x|;)q2Rx+zi7r zU*<#a8G>nt4JGN}*=ha%FeJxmf^(pRBMdA2w?F$Y{MGk=z})N%%d<_KvvjqG81-q@ zB3^!CmG#b;?ZZB+roXrd{6i*GX?Y`sghd7h|tneh<%y%Ew`S`{Cs0)#3{_M!6_ zSy)@UPZat*etMCQbq%3BPAy*`^h1OZeE-IM#=|awCo!KZJG`>Yw@4|l#-WRx?(hJd zW^b#@fBzqU!Q~693@0(~ete4}p748LJjV~OA8^?1@{OxcaB;cKFFQT7Hb`L6#C+J> zA&msdn!v1|e4MS!t6;_vKsT3(^201^x zeVe2xkWwH_jMF)}7DTE7*pmvx15iSuZ5dV;<`;PX#_Oc1EUyh1_j19vrjxU`SF-Xq_pkAVqDbKi zhdAjf9ZGrXJ4#86DRKPu7q1czK4pFX6K;I4OBh5H#*(B7Qu!2FMv|ojUVss>*sk;8 zy=@*}Y|tMM%K}gN+&)?(Nk_yJO_qAJmrqlhX_0kDJT=qeKfQQ`mn$CfaF2PNvl3N^ zoZ=6@{vsdW-s0$B#PiFGOu9W@UA@3Ry80rG#td<@&DqtE-K|MUkWfZ159hEBJkO)Z zH7_?|e(n|i{hR-bKzVpxrR1TUMOcd$_-yX?IJeMZTnN^WViubXK3L!5=|@kKXt=la zfH*YdnZpY_mRgRg>LQbf=U;e+e_pGRZf&t$l)Xs>INNHn?*}Na$}@{AJhylnA3-Hh zr16AtJmhz0+g!PDiM3N_dH>CSjgkQdkj~+O1UIEZfvw$L-dnp(f7HPVg)TH%QMSL< zI($C>VcGBY=%teWz~N4{i4EMiw?l%$h&qi&YCPDFQJ$h`Sa#QL^QD*0^Cw^X2Jw%7 zz;H5VzFGwYh1OIn5n-Bh=fhhx1CRbFrCN``K|hNzPOy7$MARE_EMkg669i!iEkG$x zeursoZ;izS0iT+6jPy9%F&Lu}LSl-7LKkFNiq$1Mm==!0Nwh25-@S=tG9J^-1W~QR zC>bGDNReBzq##KTIps%$oi4kbW26v7)hb1ikpqMAgjyJKJdUaR9*eCOV+Y#6gIi5uA5YLl%C!gE_$Z7u z%+;F=CIe2@n{)<4-hA&}Dt?G{4k0B~vtW61K1!W86Lh9^C&vn3y_H8npVHyNqc^tD0A1yoT% z76rY@gg5W+Fjuc3mB&n@ft0XVsWBMGcuH}0c7eHOlkOzu#%_mxk|LaD#joQB0Zd8q zk^{z;t*9*f_6xUevc7(sOG_6J+7VT&2v?F}4+$}>#%WXbG)`cR#o^FegK-EYXh#wM z;#>cOfBEfyMV^C@9+jv~TQw<)9Ah1UQuskgmZxZ=aafGASZB$Lg0#q)BssIS2K_w7 zpb<_GOgZI;G@vN+i1>^bl<;4FbBF78$kp=!MI1Ap#HFC7Kskr_})){%IQ;!*w{k^KFRR`zrOJyNhON#JdgFw`^0gEa|UZHPd@b|N_iwn z%w#;7(mxtwEJ~^qY7}SDx?sxTolFm$Gg#}UEXou%N(yR$N3~kPS;t_KA}lBgND!0` zmSsg5@;raay*iwb2+wCci5ZV4D5VI)5K*Zjltd{XAtY&%AY92xF0GtK3V}5mofkM` z0auRMoWnYUa1u$G>%>DURXiN&m2J3`4$nD97=~n7N~=*rS&J_~D@73acz%F2hGwft zzt^WIQnYncqWY8xx1@1`lmagZXtZZ=&XL6v;v^6T>~ ze&Cbm8EKm1oFfPV3a!BvNGZ#KkhLh!!x)3HrNxXXW$--D=O29QTfFtw-|_O7Ut%;I zVyt2F{ua-zUSxK5mN-ce0tWp)jYgB5on2b(HrKCT=fb0pmV+Q1!@+=NqlxD!qR?j& z$21ysq*Qbc_L!YppwZaC^F7X=J4X-(Y;SL~xVS*G)nfa>175iL0$ca*Gcz+Y9d9TK zUC=!`;-il~;I-GjL6Rh_-M!1jOONr(U;Zt+aL8IM;?vu=xculv;v``_o}dv7Cka6i za(sM@(VDHTZ9G3@V`H6Ktx6b{mYScLA@n_*E|3CNR+gEaodF?u^wG;iQJwYmb)I_q zS?=H8qSb0LKQ~Xe+oN-^hv!KejT)oTfOs;X-|uqj)G5|C*4f+NBP$HmYJ*BtXJ&R0 ztqt*H!nyOSjD~#zKfqdt2m;SxE%OWW^p202ou5Yq0gDTZWNF4|JSrzgNQxq-KNt`M zAxDRYT)KRTgZ(|iN<@}s%+1YWoyC|b)guJPS_0pvTCH;JqmRHj%(RhEVSoo*ytqmd zC(JL*W2|E|8l8;S@*<~RuTvBSx+u`bpmjl!=fsl<#ujC3)oeH2qZcpo_+yWAZ*7hF z`2~zK%(Q3OKiH$$Xwn}HnV+9$YkP}4FNnel?U@#>R+}tM+1%XVi6_2*=Lfw0^Pls@ zD_2-vT4G~klXK_KA%&#dJuY#r6iSxUsUl0+*xF`cZk9o>$K}T#Crxv-E-==R#0k|} zmHqvFTFn;CW|Prq#Paefc6WE^bPm|s+9FF6JZmi0Sl)gAJ)9|>X*e9Rv3Vb(EtVZF zU%t#Zj+vR6i=0}uMjXd@en6It=ymqXZ3=6#PNJeZex*jQ zKcE_TbdQga>a#h%b*|(WPNvWDWUIn!H0oTua1jtJpIT;bZ;!dzIVO_{AAI-$VHk4$ z%xTgzC9JGat5$jYop*TgOV3jj1zDDqgL@~)@|1qB&*P6j&UiARR;`j3IlZvUnKO^z z`#$f#|2~&4UncYvgWfS8e)vAmK63@H5+S?_4tV>W_ju)ZUgp7rZPFxR5>IH<8!Rm? zaqr$eZr;3kGU!lB(P}hNQmXIF%*?R0y+u^1u(`3pa9Bd*=ISM?}?()?1KS*5TJFzU^pa668ilYcJf-LzAJIKJqT4;f zAPFiF+8B0r_85)&7-Kj-I;7ETu)DK^?|T$QL8sF>@u4V+Xt$b7CKE)hUUN}3q8e4% zy1zA@q?Vfq&1M7VU}<@gy`4Q)FJ9o|8y^#dK8<>lN6tRNjqBH$o14S)eLSTI!+<<5 z5K7{#B@9CXKVWuthQVOS&i!>(R!-B|f531!!AgN~9zp1nrYWsfoAG2qB@7u3hIqb0 z7v)BTn!-#e4=E&m;FD!(nek`mX54dEo?~uqp4qusKKbO6a(H?AOc^a_6eSdSk^OJ@TSpd1<-qBB!(O!@~}%=U4GOZ(3XmCgT`4%`XUvHX5x9f-oeF69&Tp zOG`_1yIo%S-BmJi=HW99T)ZdUdI?mk!RFub;gqs&cgEYBAw0=(kr(Vj4>=MED-oU##)w_mgx2S zJlNhwNr|y#G1zD{h~orfHH}7#G>OUc0<8;{7MD2g9+#UAs$83K0%}o2o)_hz*s>aa z*o1gWh_XtZYHOXN8db|qPpRp~fh3Bm6nQ}<3^7Jii6Y`jj5daPy>_w*lx7*$7&2Ez zl+IxXAq2Hr4Xq36VHINyQkAVht=24u|CI__Yg)}F4o9_GL&~y4ZPXj&d4@Kn&rMgf f=#Tm*>mC0WMAT_`X2qWE{(jeX4-O?d3bW4|jG}0X+QX<_AA`Q|dAaJ+e z_s?DH-dT$!A`a)A{p{!Y)h6Ptq7)7$2_^&r!I6=cP=P>D&cO#S^bz>V?l;LM@CS;k zij)|na)fjj{N;(0w6-e*g7xg*2MQ!3iwFXtgvdyUs(CK_?(oV|o6hF;9ci&W(A88w zI)8ICHjEoY2`veHDIsO*nYgy8y&0oAu~3K{VS<}k9#xABiHt;tLP#rwI2!*=C9MHM5b46ZL^D|1T4_j|vDKMOgk;5DPdfe- z;PaU)#_0tboO_l6SE|IjC2#}|!C()!}-rL3IL zYa$9&)-_O{He&g6e|tnB;Q2OX^Wo&yjfb>GD;o1l+*PF3=NSnq(d2nLg=XE)8ZwFZ zFQ0F7RF(%;Sg3kZRg|^n+hmlLAoEIUKbB~5CK8n*D?ZjUl(9TUi%H@PeWrzAj4a9? zl_N4m8Z&KpDwYegtw6-W&F5YJz6gP-|2f}&!6yzLoe-_6p<(B{gN2C+mDqKd7;RF7 z16?=E?{_}nD)Z^PySt|_vRfP2Ub59afAy)G1-p-@PMKY5B0G0}O*OzXLRMORS`NdB zjjmYJO#4#I*TeZC(>P78eKd+R0%k(Ag&*V0FvILd(}C$1Mrz50N<(gS9O!Ewo9yS);6d z8AUjFc!o| zDf-a_B5>fKRcC?I*WA$HZe_KTp)rn_+8D&3R4i$FTAEg?Tj{h-FVTMM zp%V`Y2?;VRZ1e?eFy;0B;UW3UmxGja+^fE4lS;y$%gP4KbUOX-_>bD3MfGZ>*jrg0 z-`>?|4LLM{ZI;XDzE^cYnNPpse|un1LP89NRyQvYaR1jb z$IHURBxsKT^7Z$89X~(6yM8XO>(=q{u_0R8*i~+7YLnG?zNUfKW|fJp%3Fu))6J+C z%tG5Ch`}5l=U+{ocdy|aRHuG?Yl>PB-j%HlzvpvV)J};^{X^}GK{(4?$^rT^2kNo+ zU29u+h{o4O5wAFxhU1-w6kTJ~%Qf`D)f|1fW$I{g-=A@R_wJpC$7m*Z90|d$8wupC zhK7c|eurs4ZtQwx^DoS#fqKi)oPe9+fW7^FtWePR(%CK1gS*`L6dn>}3n377b@l7( zYjAz&kY>Hg@~SU4cUP;qX=#ubiWdVDbV*P+VvvxKa6*4 z*S-RyX9D1EEx9t+PdqJNJQYI_4r+GZOoO@&Blm_vs$Di^n-&$a1Ixsgu5|c#P$gJdS*5XC zDtdYGhK#MBAhc`EwnwrviiXqK>4b#?`eVr!ynY@?ep)P3FaPo5M~>&O2=D@rB4AH7 zSGG_kpWc8kcrx`Xi#!i$QG66)aKLQBj%$)XZ#6Ri&#qFyjivCdHVwWu*c~&Ub@%u8 z-SsWCFOS!{)y`iK5<0AY>1b_jZEp4iKa`i37u=Mjq~uZO!~NcLxvq|mO6dn08I5xH zt)cYI%}t-HLmc$r>FMc@DT786T9cUcvx`kP%-Roy}#!9)|W6A zY;>`x*$u~I_1CPa8>5}&iJ8SMWehfz^u%-=E)ubZ^T4LxBcbz@XWiz+}s=z zSQT)$pOlmY>aEJ^1A=kB&h5*mV^4vyGMkKde~#DwwWv{{+us`-pDOp6zx?@?q$Jc5 z@Zc{Nju^D4<24;Nw_5ua%G_~2kuMnqff(LQq=GhOF_gA;b$fPp7I2!BTT-TDV4zq< zC8Gi!EhUV{^Y~-s{$MIIH}*P)@Spen>+|hi?0tW7?{{+#!BdZnjO0ITUccF|G6W0u zEfh-_|KsE})hWDqb>gsowO`Y~li?0dgjE&)&{h+TUbP2&ud}Q}=<4d;&Y8w3ujn;9tu=kQcwIcXd*VqMvU)Sq z1R%}7djy-l?XY#wj!U(E@9(S+oV&2K^(I-Il<{>v9YoF@^E*Qnv&vwf0mmo=yS>4d99E;+61cNf6BLUQ19%c1$%oopcy0tzT_v{sN9i` z>*M{;UZIoJfYdBwlD+?e^+u z*8T2Z&%z7%)4gBS>2G9Y)E7@O zs0IP>VCDYm?aEb&!iOip#{!OQ=|dK-;F7VJ+mA;d{*Hnx1oK%g1rgC}0_GKu-_1E4 ze3()$;OTCwVvSB@GCwJ9(f~n(1Qf1VoV4wwFqt^;i9T}jFbgz@xaepOZthj5ZX8hS z!uKa}C=l>OzCPE~JGotbxNn#>V0`_$FoHYp?aq4)@;@UUUrdSmKx;SfJ?TZoz^%}( zv*?X{&fNL;6cmlJfr0<&#sHWd$tfuS#Mm!2pMZNP9QvCO@1UdGFJ}xHgJh+}vR0Y7zTaxAt6%U`zW&^-fGqo-MhK zo(QbY%{ALEHlCiIKE@&(JF770SlGWHL9&ACw&GX-U1w_Qd@IvY==3`^b~ot!e{y^d z=fC*ff?bjuaDV;6(Dx)v`0pBMTmfg9tMv^H%U;{rpc(mHOrxTrf|iv?<4pPjH|&+6 zVXGTx_VP6NOsS0c5onLzo3XW+^hSc2B0}l3E9Xdr-tP?dH%ZLG!8=K1ss!kTuoV== zG^=aAv_n3x@!#+U00ML$@L)5!9fdrPe`Ai!sb&VF{_3PJX zTf+bXa%A|O?~JFUq<9J(y0ma8V4(+7Q&R_67x8p-93CDTv3TBF#G9wv6h-Z{?1r?( zqHLfTSCgnF68`t9{rYcdp~u|I${@PTI5NNS=;;42Wr=Ja!Jd5Tt7dxk4Q84#CeT1> z;JFsMu&|Jqm$$XG1@;BnBNR~>5i+j^OI>|&ana*op#h9^nMCq{zbBt{n=19&X6(2O z-KW*@g#R8h2VBc3OqP|Gf7U2pJSaM$3W@Jue??DUtpl*tn}Tuhes%!S8W~aAwpi}^ z*3Gg+t1(FaCkKXwqM{;S_DYSZ6jcI%fic4t>s~o~fo5!_WqWEP&V1RAA3tub%oXrD zEy{EtAt$e_stSW;3~zzW3N}PbLjxzMi9`9eWq|R>y*3i)ay+T0GI4`fc;Cdi_1=Z)}G`j==|bh+4pQ%v3Syq&E3PJ4l#K4_s^d{|C%f4BaW+I`~V_x zw6&e&uy=BD0;6EpZDG@8w{>NH{u;2aqlJd3?Q1Ctzw^@KoIUV5I_i{o+slG2smx_J zH@2{F1NwZXJnbGj4mS2*$!cu)r_Rn*i#lbg7~{09EejG205A&i6uHrHnh0LJpu>OC z%|gher=_huzp%i^#ntGxJJHqE1P47X9_XQ|nZ`ur)0hw#8VbDU%(st|HC-Om z8B^+h>we`e7zKB!4mzzApy>m8;6AeQlc%z-uCAcKbdO!JfV?Ooh-!o;?O6mGE6r=- z@g#cQEctr84Wihq+{1XfAJNj7{W>!B6cXM>C8<4q^3tdo6*k+*2rMit$Cgb(r16UP z{%4OBFH5jFaKqNmcPGi?wuAA6KE9oOkBR|>gFco(BQsf_>Cn0h#*3|u&ED>=cB9>V z&||EO%*<8K^_b1URDROf_5L_KTwD^Q^Tzk5RkOMV1}n3(O+Hr+GKpY??HY8zOcJ(! zQm5T2fxFG)FjJu&nGc$0gAOrrcV~w(goA^FfRHd_*y4vWol?&4y}b-fkF;Tn6!To~ zz0xE)CCnhFpI_gDXNDCtHa>oG*mgunK=2_oRn=mWW7wvl(xAh8Ao0J&CdZ?rBRurr zajU5{r}n$cMZzd^Fe5SW$OT+Bq$MSL0iG)TW@T&3AI58)xK!Wb0H6d|vCp4B1JtHU zU=An+0DAWJ_GM)%>0;x_pslr^{$QMfSC*FUg4e+T;3+(=Tk-(`!jPW;O(jV8utWo% zC7kfSq7j%jGjF1*7pmz4Zy41ZZ8j* zQf*h-y#Q}{qpGS3zHM-mgop?*7BfniR*lKy&+uk&4{>Dtji7K{%jS7w+hE;dP|J}l zZ55SoEb^kFU4O67_V@NyK-&ZpS&sXsRpZJ*)2acOVUfSuz0NL=R#z7mWG793o$&Bv zzM5KH?eskPm64GFXjolm=YwnRt)7oh+khD;gC=nEs=B)Tu3JOgE1uNM%vE44gNEOc zPY<4kZEaQ6s2x{aZ0ugE|IN8|iaFSvenP9?zkdg{kUzc?1O5{L(10&IH@p3=CJi-q za9|p&O{Dp+=q-W}E36xI^z_=jUE9QwhwnYkkG&o*2Ny)oJ5UlraADCr&uh!_r~*Gj zoFFC;6iU7^6%oZP?`&BH-gJ5SeeE$c>WrB90lthIJRLbU_n6%dl|tERYC*h)`K}M2 zI5NI|h!8eQ5wL9soeuko;^Bni&c8FCeoAY9XD7UW9nc*xmx)Yc*HucV*hdAP;fC$L z`=KT8h8kRlgUuFkOblUB#giOS+0t!&ZT%<8yL{?ynBNj3iIiciL)(gDX%fwsx*xy-(vOQLK1q9k%w-vqp zW7i2J^U{~ku~pBgi)YY8psx&-6f|>n?i5wii_Nv5dBYaLFi^o@auutTF1LBa#l)Bg zp2{ijZJYJ0zLirZ5QTviqmlX1UO)70{HhTUokhn^LGrjs$K9~>*-Tz9^wEKymECQ` zAOOJ!4YOb&T_5i6a&MQm$$fs;0Ag0kD6M%-bv5d|w9sH%US2+mSAvU;4d#PFig{fB zv$+1^mWP=lBF1d?e&$8VZ_e5G!r#`^Tc;ii$-l zlWHXs%UPlgMO1nen7{pb`VzYgtk95^n^T-0g)OzYp6T;Gq*d??PVoBM`upFLc`O;% zXjx^VL{?4&Q7aR;>j&Ij%qryw@FrWcTVVFSD2An)-0Gg*(MOmD%v{U0WO}uNYZTsbfUtY3Si!>I6P$ z-sEmYc{#uDpW{MI4`h?Kt1EG!SF9lu|MF9d@sN2&M2{_YFe4U2z!r_`BG>%}Gd zpIj=xl(KK%(bYedpl>^AVB=)HAM_|D6U4(o@)+Hx>>0W`=Q+c@fGj1Z)biHWj37r0 zT+(JUEu=pt3i?+{h?qz?1cDxo4uzzlieQ989zjr`5Ofr22&Kp{W*kEQQeN_DaCBY3 zmt6n!`oDr0nfF9h-+5Wa=`0!Vi*sj9YSc6}Czl6n?Oa{Y3R98)uZa8qmv))N=C9xU zlY2*!Fpq!XQ!#QgNfD2*L{A<}xMy>Q|G>}0ors4(+$F*lSwus|63s(kJ!wv)*=tc& zm;#SrqJ5NsB7ray=vy_;R9~NFe1S2rLk#D=-J88U}g90_SP_mHHA6VG#-JhPIK>*w>L*%UkY?1VXdJ!(c{!!Fs0_c z&lzazQ6=fvhmhJjYs3UePMEVx3xxTis7jE@hQhkBsh3;ZQurRU)*>%oub46iIlph82?ITBrroU~+V@{^KK@9r$>h#x`V z^0fG^#v%}G{kUEeQ|bbk*f&b;S;`;_QMLStQrOoi+T8jan+1#b^ryc)BfF%1A`h2Z z&XV31$@{!E&wyGKVVY$WOjP=(TgcZl_fN&9)jy>?uy9{n5Pk$vR=1xlQh5LM&%m?K zHCn!IZqn@aCnuDO#a;$uYGk58IM^sAL@7r48w&NEYc(0_ zn-{d+CJJpzqyl4QJIxj{CrG8wXIpJ7GOiV`A&5aPF+NTQLXhv3$A=DTYKB^vU z?HCp|ngBw2fzip^;=9%D;mlbuspjVX%;-9PHt1;m`0;1DWsWFxd__nN_ig29#n$Jh zl^Y;Y@3krl51r=@s2z-EaLT1@0yHfjz{;1InPX#v(LZRP%+4<`X%veoc!SQy=44Yh zAm2GqO6q)~5rN2}Qr#nYIRqg%exx!jDsp=8E~=Lt7j5XieL}k-e_(2I8NfGXeSN>p zWX;0`Aa%5rH&=V!-CTUO|Ln1P*L!_Ym#M47HR8bIe~JbPyk?)n0IkT~Jx<^h+VA{N zfl*Zwl$3gP|94v$a1DMjtM$GZ!`p?~{BbK?-9>Rc!5-(V0W%;1)?YLZTb$kAH30-Z zlFd(sDS0}z~CE+`HQGaKu zge@=C=^-0!Rjepkq!iLLfxhRJq|ELd3kz+TY>k_8J#bA}NQ2!WfrvpE>-pcHuf>xC zL+>Uy0Io1ttTF8eR0^wZUfxndqCmNuMMC-f+V>@w9T6$%CrtSi^Az*fgjo89Ndsne z^S@4-hb`oaCr><=%-GW9X&26OjfsG-aWSpwxY+nQSr(Kfprm1%fAx>v0~zh_-@l+l zf%gJqU}7RCCI-SrEG6{d;GoMW9`}-zn7FjE5`3AMgoFWsKrk}CBqM8BJXl^{j?7on z(8vK|yq+5R4g`ie_k8D(9W|R>h&-FL7!3|*_Ol9=sr&P!s(Q}2ok;d{7w2}*0o=f7=L{n(S||(&5yM7h*+@9@b)7#g*G|#x z^zSex0`jVh%Y;qCirb_D&@b@3a+nzyS`Qi*|1l%jkAVTOezgeIl;Xy4N~qh=D^3%b zn182XB8?a{+kUY2H>iX2jU=U7%YikglClih!r$-O%F4JhUlT@+r*Nijigs;>O+X=|NH?Oky_Kz$n&4}L!Glm9t z8QI!09`G;C&HV%Z|41_s@pym(R=E!tKPbh2>PqKna@9X3cD3wb2sR3kUw~NFjVBB& zfF5T(0|Nsd(l20B1DY?Cg6>0=Kp6t+icf})jt)bN$Fwi{Ej=2%qOuYthYth<1VAu>8Z#u9m6X6Foqc_M0hw|Ov!{8Q5D(z+C{o5&)Y( z8xH^k%VzXmAM479g&rC-yRSfl|E|ps+@YuE+^!o#q)CldyTQ@i+#KLuxTHKRz&!!I z6VwE7cs!y;x7o1^fHcU`Asws{xt*+aU!qU&#CfzUguAu|EsXMR5N1H#GRL4fV>zzpE)~hpKzIf?>ySNI3008f+^xHHDdf&f)4>W?NhKAQV z^?(3Z0j>_53r$16i^%7UKpdHynyU9Yv#6TIf&+0I!_~zF7FU}x=m3@w85Q+Z45)z_MZDP~z;o^Edqc87N=C++Ic!ihdvpb~ zjFDVnVf+YS?rZ>UeY+`Dl-M=)eYjL~LP}Wv__$}qho?kjjF9gq;py>RU+z~9$x}pY z2CM=ca~01Aq$M;tq6V-bJ64XfYSRhpD<_w_?=o>jtzh{ieQLT1+g?qJ_6<5wk&);a z81N9%e&uyF6-lnTTUIYP+C{hOX1G_rPB%$vueJ4Zn076c>2%NleeC5_2? zAf@!JpNLSt)zRT&WpzF=?s0!CsYx(gFOl@DLr^?;xogadEnV$-w@u^1@Y2%FFMe(V z{&Gsoi;75hIm^$w4b9)zC9H86k&lcr%xM&;iLlVB5#oX-PF(u2M(svjL5+=#?3N=# zxx$^FK7A@KwghfEa2dY<=K}2LT%SYU1qxrF{T9Z~xSS1hueuDr&L|Rm_=86pnI=8Bc6Y!@rB=yoVTnq=rD!fU}dyzgjfL2&aKT|M-4U^4n8& z3;aB9S6NwkcyuKE?)O~8GrBLpz7o3GDF6%rsNA5X0HwB@$VVXOU(v_J#6SXDT(@VY zr?n9&|7-vt6%_<)Ikp`%I`J$mF5WKKRy`*mm^--q=Y}Z>ob>$s`7`l9xvkOMP9QnR zB+AOlGA(9{prim@S&e}cD8XXk-D`oc*y!ku&CT(=K)3tV$qC}b}K_9J2$QDCb zQ_Ncc?np7`vneVl2wrcth8U!w7{SpHri}}GeuddVHG7Pona%rn#{dF2a+Nv6$t#%sFGg` zX@54D)$^9Q&(Yu{FJd<=@^|to_w(t2q|F3;SnvWmAn<7PT53Bx13<$BVEbIb zB>GiI_Bcj59DmzT@n^^g`@zwnf4>9Qc5^m+`45yp`{Gf6(QO6&ZK{jw+P}Bi@4H&Y zwiinxhbV_jCQe&onhZL-wg=XrCfL&0Ls&t$EFG}^YT`Afa1&G0^?%lRQqoy3vp;LL zBE}<>ZkCc;V$4vJ8Y1^sYU&3^M?elCi7A@2=KDp5AMw4G6dRpWA&F+dqy}i_z@m&Y z{PXPvEghX{O&X2NiKm|WbgH4h7x2v0#vVEt{Zq`v^T0@T<9QnT3iuQrz?29Idc?Qb z3cTvV!p*YsN&qL_%%4R_@MRaRe|j}>XT0X{_8uMWYn>MYO#~tj^VWjLL45dY^!Mmx$ z?|* zx3AFbXnL86o*oGYheP0K&y(@Llb4qtt14L-Bu$bnq_1Wd5I_vFjh+z;+?>`g$;rv> zPF(y8~TPIdOodn+3#q zVtumx`OO1)vw!yI{0&tnAo%D?@+J2vzQnYb8aqA_8K%~6CP`&8Nl}>uRW|m^3W{`2={9 z=YQ7Yd^%Qga>&b~@FPOH*F0}_i@^>w>^%O4)wKL>5vW{n=(o`T;B(%e7uO=<{wG0m z4&JZrYQ={Fm}_z6W)!5P6402~*jhxJ?JN^S#MPBOhDTZIC0wG#+{r24I4#w{`w5%? ziUwpnao*y>!ce3w@a;N=th*i;wbEz2kr+{r&!uebtG$+#)cmX^NEq#cEiAOKI_XU* zID?XWyl0Lh-Tx{`Rb?Xj{P6t>BjJb=?c~8hwzz4qwE``oTa@sbxGJX;*AJ7rc^Vm= z2Ak)QpAmF9ESbZR`ES`bKsm3rd%3cuf2vzEts#PcDlG*LwL;UXKftJ<{{n1Bv<@IH z6hx#BcXsGszs?r)X)G%Prr&(C^ZM(iB^40wAbJC6iKJxcvO}@M?rOuKu;($Q*bXol z)a0^xoFBo@yD%t>qWk;$pm4{I3&LbvQ&Uq8e*h$(wEoJ@&JKwOR3NIAIpBUt1o;Mr zq(Z&p@=?K5!o>)FdDI$n#xOoIE=@y)FCoG=`)yNgo4`kpKkl&-F0HB7xEGmG?U|Be zmDU}^SQYIP+#WZUGI)-=v9obEB@-CvqLRw~54WqTb=3F~BGA%gE+HXY$j86|FnGL2 z1+SWy4}s~Yg?J;*?A8k&KuEkvOYZfMrO?CmsBH!zHu{U#Iv->UcSOcPIw98E|6kky z^f&s*U%&%q;p4-ENB6H2WOUjEyJB~{0nGdEonlM{aOBq3j8n`}-+yhiU*w79fA^ax zYKCK4AH&$cJS z%@icSJb6@Q%h%1~M#2m?1LpN`24`^azl_TCbh4_Yt>E!j)PIv?w*`a%c1H6hf z{^KiDHM=-IF1o%8yk`=s+GLEG*1VC>NxBC@Ap4x&d4Gj&z07}d;WBrB(Ps6W2oVhZv^1m88!1H@T((i4s%-POpA@)x3?Wr$U zf)s#rLlvxSDKGqqnw}K0cas81qA~N(Mwk>p=hu zz^t3|U4S`8tg{rDMf@r;$UT3a^iy=6FMTW>>7D9fjxUT`pm5XQ(fE#SUew~2-acU+ za9gU-lx4jyO_PWYCuPRW$AMXKKS{n;B-nrbF6d!*B>xr$@!aI(jMJAIqw-zj9EO3Jf}P`*&Bj$3b zL=6v1DPP{f@!BLNYfbwOv&ZXZFN5`qsFb1WLyT-u?58~&qkr(e7qvcE&V0z1Pq$v* zKC`23xyDZq{ZF;M;eI5iuXP?`nvFsPLyAiGKg)a4<2<1C&7$tVB$*x-(!nB?SKTc1 ze0^uWY!~qVp1>bJVS0X?@71Q7hng{yo%}nMDA!m!Wt~S|{jq2uEJL1FT^$}0L|IbC z$4Ph7-N>Ja|Kyv9#s)D?d2I!14;8I7&26jHX^(`c`G0sg|CN%Uk483@$RZ2y5A9ya zi_xciQ0bfdBDgj_?ygyRzUk?M?p>h5K`XcM?J8ZFm$*Tq<7=FA{9mARVL+fkBGe%L zIA_O|G$3KG-nJ~n%6jtD@@u^J@9=67x?Q!N>~2&^#Y@FK)95lMR*g52A7w=nIFaj- zgR=SKV-Z_9c`#zl30w{FxBGq%PC2>4gIj+PA94#H%$h^ZwIL$P%HvbY3#t)&r^M_Q zz;M@};1x#u#_;3MT-xN3G4{7-A4O54q7lVf!y<^65q(cWG?YI)Pd6uuU4K@};mD>S zo7lbEqZP)oP6D&}r6dUAYoYn{V54q_+hq>FdHw>2%6x8R*Da@0O4z!Nka^tY%2NP~ z5aGFCDBvB#DyBWDzBnd+N7c(Rzp`_Ulf^9mx$mv z_|T_vl&D1CsU`nIU_FsQbX&i{6b}|BWeptO>LYSOyvTv7EXBbBVQ7K!4SgV1g3}#u z-cns%-Q3*V*0#8P28c2scjkjBV0?dDKN(Yt^b`={;+mP8A6=h}fc0z7DV^c28t_s!=tys;8NXj%0Nx8u?t2!#$ z?ESMV_vki-xnZm)J*@5j!Q+My19i=R*9aEp7hlK~c^ORM3`4L-&kAH@c>jv3YhSk` z`#Sn@l{s=>pmnaUg6YZr5r7ULoLNVgH#QQ&!I0h>$!-G?NUUXp6s8S`vRp}d`QWab z%AI}Pe3l}e`?9Z)Ar1aDOI*37TsqN@WHb?MEo?WWs!wc=Kx?PFjQ+B&Zk*c{au!jh z)BOE*hH?3zfMkn>AU zKn)T3^n)%63JM+`9$>!#-Ialn(JSZb+PD78u3inx^cDsLR6_Pe2K=+LCPAn%kz|VL zxThN%$cdCOAS+)YE3I_|$m1lakd<`!D(F9X4F$J1Hn4GV-xMeV^8EMD$<2*737KM{ z3P=5~3-7kpRx63eroUZU=&M~pY7D4aK$^9^WaGTj{sBvl2EnLoMZizh7^WvCemU`2 zX`Kc=n}I_D$9|#mzJ4YqpZ}506x-yck1n-R$52(ct(GT1(Jx}wdesL&7`@ua6c5pJhbyNy>@hj)0yAvM4P1Ca?u#gVUH14p+_iMFOnRY8;v zq`v`&1F}xBVs-`>$A`kGXZ_AWly2|dxsYzVv{=0XjToStySqD(tJTs@to!ri&0DEx zyFfI8h7+e_HC0=lv`8bOH%a^%xP234Ya2-d@;l+2yu`|g((iTiKb=_2A?QwG+ds7& z#c10jAfAM_{r&+Cj*fB5#>`AiBLf4kn3xD9S;@g}oSK{zcjc~ggNFgG!1}yZ%hYY1e=3{Hf|ZPN6@?uF)Q3xQ9O0M z(L6%081w0A*Fhoxj_-*AH>=Z~h$qtFdq#n}UAT3Ab)~7U4ytB6qa3WnnHgJ+k-GYG zNo9i2vWkC8(*%W=szs()j6qdqe((qA0t7da^&NzlwNrq+)&_I{$UocQ>sJwag4Qvm zf^jRV9H%x{m5BNe(NTykMCC-;JY6f2Yxs2p-LH2EB`yo!Tnf4q(4Oc@H0Ha#>5Z-( zez>no1sOFr+swRuDCBERWJM9xT4^ga5jF^$aB*=lL?%kp3|Z8TZWmk|0O`3Dco2Nq zfVgWr-ZAStNGeMxS5#FUf#^ReDR^ME_V$9#za$uvCpbO>X|h}J-EnRqU#J2w9w`GU zQ=TZ}B#z`NpMUkBu<~>CS$J|Ta=yi1B|~oil7fs_E{0bNcORSi)#DbS_(*-9X}d={ zKD26Ii6SFElVU-A8lUk%(7W@bJX z{kZSBHAI{`*bwk=9~2aHa^l>yILs2=y~g8xUP2?o@dd0I?cGCs$TLnBJZpKdP5N@(J3b$o!u56Dy7%wRQmk0c`0Y zi;Xk}jzDg%p^D1H%uLF2w8@*@*2+o5krhXVG!4+StTr_%Va*>~&`=;_n=V-Gu&6!| z!S7~)^(DE8v2p}QU%1znsU;pgQIP+{8PE1}$4qZio;8^mDle<@>xa4KNCu~^ude{X z6IR3^)fl3<=U^_=2jXAIi%9L5eGKo>`Y!j+pi4%1S0tn1ph@&gVoLUb}Y&u==zRoGf`7 z7gs?WK4UIjm{^*TOd`+92;28DcS&Wfl)_z)$o#B=LThHI7&NBTLWRLvQ+O|Pl29{| z#ypYosaTg03rWlb->tlZW6C{)#z*={(ry_Q6;*ZQ3z`^c5bQ~;aSuKH^6t~h3CXZ! zP6854*|mszA)?9Q9IB)N|6giSjz>lc3e$IncMDzO7zSRulHVy4o^@>mXr+PoPC_ar zy9tmNj|%m!l=!w^E z`3F5D`;dklJ>`D|Cjy2e311QjzO&z0FzUnzw``b=4^Sl;MhzySX< zn=k+!BE|mUGGwIdv?OkIetvp!F{}nYXdOstLeweD%*@@?+WLmOdfvvE2f5i?JHeJZ z*jtMjjY8{w-vwX5(PC#Y;qCGL{`%u9)pWFX8RbfxqJ6A+Z%C(MMzVcE2Uy>o_1;DO zy}yZT)p@u!IO5H2TCvq)&M-A_?2-*2gPBA$(?jS2~)u^-cF|-|jcls2r1vJ}0 z@KM*{>bp}@4*I)OD$At&rLWcz&-kbR+O$7NXzKoPquV1>MiVzqmI+Iv|8DxYE{`Nq z)QFPnRb6dWG})6JSsGM}Bx$Q`Oq4Vuk#Rj}3E$`^VY9hw;rF6`8>~ZNoAN0|Vdf4% zkyT?b_h^+IG3J{8jjJjf<9>l1N$4R!BBzKHOHwwg`R@aL_fu4-yMyc&Ax9NO?I8lxmNqo-|R1|zx1c4^3cK%Z=pt$ihx@zqeyZ$nJc5I!>&#J-8mK8C5QAJDK zLAF3vw5|_|gGf<%DkZ4=&QOACcChmVXNrx@E-B`l=lM0He9PW!!rW3nd1NAMu=nH@krH1;&n|qIWwPGmgDJKoYQ=zw(RWHDEZA79^GV)PVuut`kY~KUpvtB% zT2;!sDL0WOdo$0N64{G1;vA;W5$zTrGR++Yxh!ce`9a%WI(B-%QA%t%b$2d2(wlvh$$I(P@+_;yVQ0-eqh9`mCsW4fg!6+D* z|A?4+{h7H;_4ZF8qyw})#uUMWgKuo@i!d?|Il0eCc&`|yUhRE4gss6bZD))U|GEMm zivAy`y2el6wb0M&!OKEbmR-r3i*kGaC1b~h)%v=pCl!&v0zElOZOW#%ehT6yEkDDI z)wNHl8GjmU>ehEFs`Pf&Tyhe79EBxP=1FYW?PW(lRy$&lD-#DlO);WBmg36Ob%gKn z{O{C3s4w+7UKhk9Ts=O#2J$qYwg9zV218mZi#RW6?NX$quH5U2<w)@6uv(CD?>o?AEZ$)gMKoqjaIaf%x7`HpO8Cfsj^JRn?a- zVCP(dkTWYyZq{McQj56)_6Xd1pH`_1k}!iAAyDBZf-;r%fn{ zONGX{{FVSMV%RuJf|gU97OiJJDFl*lTD6+l(8Vk_kIV8Nf-eRQgzS_F%vd-Iwt5!YRUM)GlA#>x$ep&pzj3lZ4L(oP2P^|zpnvT-9kWbqiKQaS+ zHrF~9dL+WlAtrDZO2`e)Y?bYT2j%FIFt~q@FK1+Yk;NSye!!aqVzgpj9{0Z>AxO$! zgJWZmK%kU@0FXZ>E)L|+_d)31 z`+74KWUc=l>i`GeGT0BUZl8()jS6U_;FVAB0FH71|3n|0;S?(Y0d$iZa9TC4V)@P! z)59&r^BIk7Mcds+wt0O+U9Kr-Um5)avZf{a^3$#297k)17USV*``5RIe-5h1+pls0 z0ybWDuZ@pfHVW{|$Ha*=d30s9*f@0kG@CGKu;krm3o}2(I+Y5edt#xk{=TA%jWYWK zDVM8KfM#sJvCATdLRT7w^foUSDYo{|BmC4|iG`?nfq(Qq0F1Zm##TvPwRMT@_!)ubk^*Cemb z93}?H0+3znaTB)OfK0Fi!qFfBe(otCFp3Is({Gx$LkvzJFD&ZP-?2E@*kGaubF3>S zegX$3)YR2cAa-0YaR!Nz#%$@JXz`SN3DEej=S9Rec7j z>{1B=fyG+M!Uz$pq%qa*YaI&pxvL<_d3m@?-Z*a;ney9S*qAlyDcVz(zBf{oXfRtF zK2a_FRF37ZTI2S#b;gj`XU`?!XeeKaw74Vm8n0)~ZCjp+{fi|Avf4sOHQ_Vb->G^~ zdhkO{E9BWKh|APPH}-H`@eY31Z0k;j&_|~sr8%|!%WE5!_i)VjQ`sW*n%<)IMi=meGvSvfd9<` z++I49Y8o0cNB#mwK7jiO!U=ieVKg!Tbhm;0Jaq!}z@)?X`qYW19i*3m`v;D+s}?H~ zBb9Y@0N7n!TFR290on_op(Tw_^k9%YZ(Uhfh-8g@QvlQi-9|fYTibH_$N@7KPtUYV zk%x`%S9rz+!al!QhsSJQz6g(;akXkHK_AL`*J@fK(3zjl6IX}n$U)}qzI{I|?B9c? z)+yX{w{vp(gP7q1#;wmnT&_;*hIeLX347W8iVM}TW9R7-^TSb+_Eu}wZmX?>Uc;{& z!J`AbFknP>V@K|_mc2}S5u(QMxvVvBpG28BL8+W%hPb$Q*j1j2SLQ#Y@y^sNHVQS;UBq90qF`m}Q|Aw&@5CbkCZX}iE#<Gf_|eIm^=CCaz7Znexsu!OzSz5l0>|0P!>#BUOtxzfvT8r!;qzf3+6vtGFc^YdF^G$_br}CkoHFj#9?;_p70#Xef;!BMdD`RNOxobY0n4N;4uV3fGUQD z?bO(DHudH#T|T)~FtXIGNS*mSq_tAjS-vZ!v{{Vy8dH9tny*-zin@*cAx($tLgoyi zjcrYZKtbcscz6K6{K8kSH<{VLY|o*Cc`v24FvUzJ1uBDS3!$_%Lmd7$w{+m zubL&MUS*nHriY}407uWh_UYDtB7ta78Tn||IlGm358bx^8m4SYb@%)_bf=Hv68Rrt zvom)OO3B>(T^n^T2aZ3VyJGgH&xkfvhJ|37c}DTtxM-NIH|Yp+TYzxioO>Cck;szz zRj=V~vZKK9y{-dO@+qAZGOE7XUjY=tVe1Krps~R9ueJAG_gC$=8m{j+o(UN~|17CE zIbI@WN2q;rEjXTDbKLW3cE2z>{R3O~Pxhf^y(bdYyr1*wcaY%hhIIz1r-*`T{9`Iu zpH}JHz{igh)O8SFc*UVa;(<>gqKV7j2&keo>{LX#Ejc!eZ+*5ooL3 z&?(`_6WZ1GGDz!`LZ^mGH(TmsiA=)NDc`!~Junuu>pn4^I;fN>o{T;@GF`$i{&3?f zv=Ua<*qD;4eJbniU~(qY**=z`w4Ov`Z5%hpaF_Dq?i)JGf9R=hOsrVE<6}{>PQkr& zUXQv5J^QTo`c~1$Sl%-wWMA!CJ zz(%a@!|A9nS$6FGMpr=9k87%8J0@;HK^$yay8fqZ`ih$7zuB5PVPfs!1g5{;S|K6? zl0w<(QA}dt%CgX>Xrk<8+2Vv`tRfJqK$QPO(^-c_xxHV1NJmPVkp>az4n;Z?5u`)9 zmF^Ox1f-EJkt5wm3rI;fN=r$D2uMi^znkxSz5M0nIl?gWJkQ?yUTb|89t%cz8zO;q zOY2GRibAZ8Nu@b8b)QO5K$w|~*GH+)=)YxuPD9#RaYHNnBIAmlno3W`)r%t9{goaO z(bEnZ-Dig3NJJeQI2<9ssl-8^{^7&Wsxzo_$M={2OZE|Od36M_t4$cXKz0m#Bw$g^ zAB8|!UwW*3T*sTu@vP1(Q%Qo8PhxoQ(o#9{Oj+gFh;2Ojo}Yh}e{pqq&TVwwd9`PP zRz2Td{x?&+*!XuP%WliRrc^~OrkDM>+Tt#MT%Qz%4dtCZYu=ABI@!J29y-3*=)N`Q zKG{uh9L3){e%G*?2`8{9X*Bil&mT#y6obEA*ZrmDnp!b1qKBp{!I6enRw5 zudf2`jNVqRg!|5^I5a>_b2Qa_kjI2Ylf(MJ=P?ELXU@p<_F($YbN1!M#V+@$AuzwZ z2ZR!4X1sP}ury@1Y^3YUOqmv%X>YQ1I4Swzt79{ zb`Gq4?d@wP>@~v`75?+N(&s1U@)6Eah_-)z|A(vgq1jPI+Ig%sqRX)nmK6 zXBHNwcvbvQDs$Ur;d5Q7)pTa_Rr|f+$Z!I`u-oINNu7!fCJ?6C{@r^i&48=;VnCjm zSSvk48)M(n{5l%_47uki3Ic5wJ)`6oRXj7rQNibNWW{pAcszItMZXP$`ZCb7Lea7# z84-+Wrh~=YnS2H6Nln&Ies5E~$RgXsGkKloFLB;Na4|i&<$9jdIk17ZsiSDk^IlPz zOyl+Cd(WqgL1SZMDhl;jt#c1Y1+b)kz8O0GUD|hka4On$KXcf-$*_35uWoimk-p&j z6&aCa>r5w+@zwUf$v0MGUex!lhDi>`a+rGpho9Qd=MbJw?Wr&BO&98f^iKGEEFg=h z+i56i>dj13+MV&!&*0Q=a^EgWq%k_#@;2O|G0%!e2K_p9uK&^Ir8*k7R{OzCY}Hge zKGn|7CcINUi>bGAz>ZfM*_Ogbjw5&-Tz7mq!h>fpsxB4nq>c_CJ5pBXZOVVT!EJrOlT3IWxb=nu*v7=8)ch zIb!z1vNn!hnN>_}Y`ml=43%ZJX3N!N;zM-Vn}q0xwdq_$EC)~K zFUv1GG?`ixstfDpYc(IAeN)FMKT;mDRA6i)X80$Qz4)=MEP5iBO1SA{pO-T>VlB_F z{yZ_e`z?n%cW$JywRPurI`xX(T_YWA%n=02$r864W;1IO6 zIq&PEstiHY0( zeg2FgJmRNc`^ibn@^d|>E1L(VX~?t4o#Xs(GZsnp_f*THOS4pG37Tj}XHfb$AKU-_ zw3S+^Nh-xSARsH1gG6Xn6-K1+pav4i5<=x(STa7UHSUb=%4;oddMn#$!Q*;TGl?01 zQ1$0yln+u%o=okxxT}IB;-!B=h_Vo*Ew|sOs^WJ*=4)B;KHoW@AWdmg3B#$cq#Vx8 zXbbVa+;P}#+BIzb9ulQTDHC;1nfl@3_x`-R#<^#4+_hW=B0N(N#a8M{@^GWs60=VU zVN$5jDbeA`vOct{(Ayz1dHhc4g?CzVrr!k_uGy=~pN@@_um3#4Pv^qeOd~+5wx;Dh zub6JCJa92O>A*PutM9u>?rre;IoDG>n>;Supd_VI*)VBL)snK^rMuz&mH7QXlv~_; z7C*Vyz5?LFxkJ6(S`6sFwnocQ$e*@jgwX%^`_ZE=!jwl9u%uujFawk@Z}7Gpo+@*> zh}`oYt|{9n&{L(*eXh5E=fTE6g<5Kol66{$YN>?Lh4jL2C(c_UwI#MMZK~&7m&s_8 zSMSh$uHq3M{atIn@sg|S>yhuwSjW5eKp$G~k#(+|QNv_0l;fl)4M}`6eiRe>9mQt2Mkk#a37uYS|P>BQ+%?wY4#=bd})1%fHx5R22^?Exe z7PMn@R?Sb3NUC!z?(d$OVLsTtk*iA;=WgIE8W1~WgepqKrByVpL$o{>-GdCakj zFj!O?^^}qks=}n+V617|O#GC0kY0qH3`eWDgo;wG@=2Se3ro155S6xI29YeU zSpr*N(ajSYg?jxg|9;Bx!b19wt%fh& zn#i*78?~s<|HL((=ke!#R7`u8RkNTNi85}@WByeC@*8!En{}Qp7c&_Hb1Ms}(Kd~h zvv9Hij(l7Iw$BhnG>!M)!HHZGiS#V=ZNU9t!!bYh~fk!*o1j2s9x z%x`ucIR3IhH|f#k8PVIm+#$oj8~-%0BsT6A8#v@2SRf@Dr)*I$_ls4B8Y9acr#Gx^ zai-Qt3O_xXjKo!)Fm}*or=z~XxN5<`DEe9S2XXGFjB2i(%n^Cfeb^{$ayet>z3dTQ$D3#$o~gEmw^d5q{GWFCviRNhQbAAY>NH zqb!oUV!@7XLq}Q16NILbs(nmP_*gaFlnCWGa3UEbv6l~sZfi($AsL>;?FWlWhoWH! zEPOy`2qH2?nqXFoV0nD2)I$)WvG_*^s5zqjNq9ws#)8CS-a5!{xe4w;|7e8bPfE#0 zm{bQ=0vHHfdC5pM9!29&<40DS_1tT%c-TQiOKzJe$(EmQsuoU`G10K+1zj&KB0XC# zzupc&Qy(#w!q{Qsv|Qyf9$=A66xzbQ-|Tp{Eyujr9M(b>t^K?OHLWz_qqO(M2Lrpq zKd_Y$oyW5t9RrX>MCb>BD_0?@7Y=yHbiWL~f~*|h%<2oh;Ymq{I47;uEjmQ^!tXB4 z&0Ep^vjk@Tiu4FXAd(cV6M=k(BYy|s-0qF6F0W3qS-6?F`2}E zzv^!3#G{B*ZSq!12#>;Gh%}Ud6p4Xp?3}|SP>74@_k%R*_K118M z^`~rGehwXO;?!@*o$Y)>`l(iLbF#!pQpkSMj7pEEUsU#mK&^3aoRNupBxSuGKGFh$413_-Mh`RT}w zY%_yUa29U9aJeZD8ZRa~2AV(mOA1kU4XmgC#MwL~(di>m7(7JTD1QdHhcL_o;diF@ zXCy?tVjzzp$6hV2MtQ|Znztgh{0ZraB#r!S(kE9A=);3UXutY@L)RSg*JM|xsC#FI zK$Cotf+mMVF7Dq9MbE+;w%HYKcuDHdAc^!}X2g8Qqk@QMv_!W&@De`An(#^VHA;Ah z?b_!4;vkfjo-u_qB@FTB;!zt+?qpKl&JN53k82v{yr)1r@iaqk_YIfX^???z3ylNAyQarz9J z^0wX@T~e{5f6{6FH4@5J`nhbst>vP)<>Hr^Q7PA6mc9Vf_>L zU{Piwa#e{)lVtj@KtrIQFoKw^*qT|BZDq>*3$^mr-EoctMa>(79bQUGmC|h^N~*6+ zuP$+|Qi`07NM#X`}r73*e>ET5C*VTacb>_@w|Op=ux z=#?r6WPrN@#@Mmu{SAY9OR2wa8K(O*J7fhJ;E{fPms6ZY^ptM?9`hREh6P*rWGvx--Ah6vm-A%?@5pmAFbm1QVBKTxMFU*aXrbw<1f?_ifC*pRVZLl zS#umHQt+7RV){#5^x&@M=+p5dgX#{#gxd+BMX>@>&-3RPb?LRgtK3w_co&8h@QX5P z(46uY#+~Im?v3~)#r8?9EPVw?%sa8hIL7|}6$+v|^$^$m@MJ10nxsfvwMR#w2T8ub zXQCjxqVF~xqdT#M|kgDb(PjZTfDSJ)5tSJLu z5~lKiJ%eVWj0%5;FaTN z6{hE2285W+{ug3CbF!-Dk$cD5hU*c%5+D__DUD)dVno<_)W|60z=@i>h?Q!N$NDY0)8jlwhSAy!-nn8X$8+mG3tT!d*Wbypezc^O!DyL=O2?%QRy(^UGQtNt2k6Jg zkGlZ@2;Pj1Jx{!L$NSWk91&SB>t=2;5WKzfzql8`awhA8vOO#!c?27-F&PySU;6FB#a3lKkoSoy7yCQ(gq?G2Oj9}_%$Cp zq@ z2qBev8Vd;E-Q#mWij7;BmX`zCR(~JTN28l#ZcVkd6P8tgaRd=ag{1@KB9gIiI^+Sb zo*oGqHhm=*i@h;*Wk`ppDnP-YmPGE` zwmW~SeH|;Zr-x3!6`L=cRO7sJ+*wWRXFts25FSYvPhi)WqvVHnsm)(Ex zt^(ANUd3B1_rK=F%_s&{#l3z1Cnh??qZ`8W*@ayW}BzrX)&ZcYp^xqN(# z;ih(W+hb!1EUS5W$64v2b;H3@9E=b@exdXKlB9|0rJ_Dg#va^7!H>&88e zvnLm@UCGrLC=^)1Was_#MDY<o_-fMtl&N_9|Wd4KC;-u{s?S03e`~BPi9EEV) zE~I?HPO%u{cd-l)rIm4Qqknzu<+A`L6G|`D;kZtfU;dbEcK(#4QU<#)p=x%MjHpr+Kl1eZGW`XGm z@EAxtfxD{0GB!Kw^LvU{Jn&+h!vn!&;wLTnsB-wW1Vftog#NUbK-$I5aH8cxb>QJv zZPtlrJURPh%^~N_if>cjGv(l(SF7Yk(muX!RWmZ4FWk0T(wiTsyu($t^p6=~^ zPdHsE1`nSqhU>H5M$;q8D&Wu-UX z#l@wPL*n1zDEy&+FC?@W0mq-~j(}wDtJ!sN;EH;TDhUe;32_-UUqGtY&B(|Icy}*f zPJt=9r$?TN_%;gld9RBKo)N&G{srr#(@ZUdq#@{jmK`H*eT_IMpV@}c3EnSY$-)9~4axqfQjnW#0SM1ox;}G0ZGER;dL%3b z1lVu%>g)~bomY=0jfR_gAuL@D%*c6x)HXFo+g|%5o zT@A{EicTEv1%bhuR@?`)6g`e4@IQcG0sB1JOpAy<5{-xP*{zyBeA%j;JC)Klq+X}r z^H#S5y0Bj;5AT1#XP?ooc6Y52tS(0i2pD*6CVA{mxo%dTjSE(i@Y<5+bOcF0?J*@I zeK^I5X9lM&bj(0{Vj_%Ia8OK?8F*iV6!h!&;Z9iqs~1pTS`IRHec*QZ@czB%tHTW# zUS3BN0mnJ)v&N5FmZbj!Io08zp)t4j=-t}Sf)$U8J*4!a^Sc1Bg2XQOZQ1l zj|Kvo>POMjxjE$_QkVfR$k)sOMTfKt{E!L1B~hoxwK!@0>T!CG(9 z_>3|ADK-)u?_V?@H|+vwbA3@r!Ag`CoVj|2Su8(nYjKQDW4K9i#KgpApZ>cOR(~f5 z76fnab0BVe=|kRRqoJ&bEvAk#1k!Nuyapp$!%Klz(-z4zBCb7)j@Qfk#<%Q9-gcf7 z6@cnOJa^oBwQaCYx5<{-!Qn{#CMz4iRRA%Y?oBgeH8p{O_}4@-a>X-getQQ^bY8oE zjny->I0y|WY0`)kJj=MZ-Pk*2-E9RZxp8P{3@NI_e80rJS>*Zp-lLKOHXT3^UQqp_jQBFc3NIxQQto&DZ*>+so38sGsq<%KUP#!fQ@{6s$$t2s3C8~ z4;g%i7=jpMdw_)h@8_Fa5M$go;uRD72YWGJclYZhB919F&kBVda{x0!WZ;}V07M>o z>|DUYyO&t*6HK_jOm~Gsz)ro^e(vmBjPD^Nct0_q-tDIt$e3?if118>d5NtPq}8R^EjlX>1JC^)6IhCpS$}2Lq zrBt8GEE1ld_4>^PmgOwR3uEtja4hF^>l#H*^mnI*jk>b#KBj+encXXYCV-Efe40k7 z95vKAcrjhEuUI)Uhib6XYk!+uF5}{|es22n_y)DR9H|@8Ar{qd$oYW%{F>(t`Xa_H zQOE^@nW@thF)}&n0YSE+BFc!)y!?DBN=otl*qAS{9f4KPoH@Q8SUJ}n3lbrp@U#cl zhcoGDX~{7c0hddGxd@3E)G|D|4)7xLtl-iSXkiW#Jza_Sxea7L&z?*8siF@KmV%#; zsS2GUnxM6Rh^^QQY4>2eS5RMXl^%2wztE$*u`AkTCtzC zTFc|C?Zwe#gXrMpV!-F7XZq7W@NbD?7$Y#cbcE99AcG`0sZSF1$nVb^y6Y8SWOPXU`aez{(Hb2V_pR#PCPi z4P}sR0@kI0bMM_wQzvKVxT`Wx(II7sw-%ohFU3BD2^#Ne8#8IL0zh#Nblp# zDTX**9@_!6fjc*G@!r@M#UZpBO|@yZ4cJY++P-b>7bH=Z(d44%$0bvpG`F$w{Q7YMfqOonn*w`* zmzN=YiEbFrP#UPLJ%9c0zmoL7%77}+|=-V%3^^h05L*^_ujb{?TAt zpmOM`;Y#>}m6pM)$xdaRN2*Ncd72x$T#irky3l5Pzio5c=(pFnscD;0%d0Ks5mX=Z zjl6Dktg7tdgRXwz5)Y(rBhS6@$eh9B*;Dai%?|Rd7vjg$4zpL~xGk`K#Wxcb5zz(e zy_necp6BQM>9H|5B`A#o&Kr)4@I^vG0`RL?dAO1w*YS_&Ys&n)+eWBlBa~GkW(nKW z&1MWXR9vusxUk&HMlx(b%DVC>S7jOM?VhXKrCW$bV`GPu*VnGURo-sAy0=VFe7bk# z?v2l0^6TYESGKqKzrvZj{AKrN4jy#L`)ac_~}z=b&J({5JdAYb0Qj{s~3fP)@9xQ&OM{f))U z7LX$e-vMzpy#A(*o`H!n3Qn%hGKp6O0Npd^>z#w(4zvk8ecC@etIrq3TGNRKI{vEU#n4n-A3})?zX|R!> zwsn8?>dYf-qk!i%gJRZqxu*R|9L7+it2|3AjE{j~__B8c1%G@}y!d`hle+P5aHFt% zVY&6!+PICwe2t0w%KKO|yf7N73H7(ykI4gaBf^4oxQaIqUvezk>(!j68a=K&rK)w? zEj2hAO!a?0CfD@e>vM{BzdJIVxLIM?Br7#Vpd&jbg0 z6I7UNR#TH$=J4a}Z?G4M&gb=Q>3Dw-``CzGGCTNwS$K-}CtimU42Su5U#Ye_ZpXdD ze{1bN_l=JT=kk^1N%+$S@miD7g-gGc%X7N3HT4+xhr#SZ4w<)cb}!c=LYMf<2hvE| z9Z$Oww;5L4;IiKcN=0Gv%=;v~m+<>w1o$w7Jaha-3*^uekC}*pNQ{OM{qm=~aC(95 z-M*!YS#Wn^X{%EZ+3!th#qsp*`_u1mDg{JDCO&7GEo@BHa8e!9h;S(+i4D`(;GW9t zRCqT08D6;RohVCU=U(uvuDjCr%W)~J^s!pczxsWU!HyxXZ!|+Melg(U@%!^?>I>i6 zTsJI77N)L&oG@9wSb44Hat$_o0s`koXJcao!bg1JU|2#zP_T2k2l)}aT$gL%@y(77 zipt6d5wWqc!7V{_cnHEU+0QM*El31hgg`j!z-Ff_402`5ToN8OUqh2fjDoG{+4=dY z+iGn~KmDRys-cvQ(~vVg&H5!3BEb>u*ARjSEBsT)x9@AK>(4H$B}ALX*z7(pSrWf9 z^!lA|tovKYW_v$6M5U+0z3SbqeB3+vXXc|R3i)Nz?sFabB`toI-AS76jftV*%&NHV zFOe9x^3XRzc<T_a^rI_dH){V?<>mRz|92C{I45pUxSNoRe& z;d{jz!gjH+6(`E7A+{b{P+6!vOhkiz!*V)yC?Ty-TXoD)f1fhB;Cm# z$%WcMs$ar?S6a35^2jg{<%Z?ocTN35vkF)gKC1jYb^YLL5(z^nwZfdDUvdQQ9sU9B z0yiyno2g4~`uZ)Dk5UqJ@Ap5X=BA-MpW&WA+S6l55^TPhYP$?_FY;SyE5EWp8)+!6 zllVJDYb(qtG~D)Pbk}RRYq70Iy*B$bfA7co`cs+q9EYpcAVO7A7=ienjb<_id5Q$Q z9b@k#)I7WOgj6oFqHK%ct;}e(^v9pBBAS|TpmeZfH&w0dBHm20ph>eNC9~?Z&~82( zxMD>OY1C3v(XjPwSjWFA72NbW>{*OoKf8y~Oc^mJLXtjLZE+rPes$E^-}E%s`$!8o#+xid8Xsc94=V}q^Uv<5X%a6NWtZNBlF2|Zj4Vq?MwRV?W0BH+q zLF)E6iVidPenUqGtPj^KoQU-ljBMB@s6&`svv#DE3Qe6T_xtYUnO_z z^IKjFRW|?T%FhW{e}zV98HsKjDMqUduvaEx7^C2x+SJY91_$=9E)Av9BSoiRd^T^} zrs>f+qr!uNROIyu5&8klDs;p%lPw<5#<;xL;B?2GLRuBMWO{EB6l< zZ2Zlc=L$G6MP_x2)fpIg!U-Mxm{#`oT`1*e&x8a7P$8-?>+3Y-K>^+c1~Fo<&#F63 zZw5=dH#UKyu5i~dw{6+@>SliiqoSf<^3c8I!H@K+C6pxZYYY|MwZ4-Nwe}B?tkexu ziqg{JtFmO-ct{tP5FT7F`<0602Q|6>q}vtDD?LOqP|Na65JDB?;UUBcwzRZ_QWDr6 zazpjo2V~KA2Px72czJjnd+#PEDBS&E$DP~{c9*)kIyC~13Rhf=7Jfoi7qgof$3~?; zlrIh|3J+MrgMOx2oW+edFk9SvoQ(ON{HEc3@x!I*UVe|)94?;6eT5g+Yp+)?ygqqm z&=xC`_dg!O?mt`I5^5(Y-}_*a#R4TD%8H5!{i_gQk!2(*9%p+JmuD3q`Cna~$8@E| zmjo-ojl=XVL9J!Mh=Ux?VBs!4>1xGq5)lZLwSK1@EJ1sbshM3 zehRj8sa8j%$*~yuJy|DvDE#(D^jg=@4~u^d{lfKM2;^9pLT-FVR&K6Ten`ALd#5`P z)cxrDo}+mDj`d9e*HTZz{i#xgSW7A5^_D2K?2#(VrqDfVgi+{A~M4-U8Cb#+Zm(oPuRAD;t#2oBg#!-f%n@YAc%(Qk0w92rr8<{H>0LLVB} zbpk(%9tkNZhcP?~!AmTX{oV&v@2tvj`N9>781BCp8QJ?5`?mQgW7al~atvXKE0Ck~ zl_RM^B<7`MRmJoN!MQ#8!@=!Eupj#QwTxTa+1n>sJRrq+5|_|x4lH{3(yM3CJR2sI zs5m(F5lTOL)da)Op4dC0yx>h-pqvaq7%%^Fd!AiTKq>xkr#BfRN{QgN65g{1I{Lzo zrM|lSoIQ3fA7vwx63vu5;H})Y;ug}%}F`PUCV&;hZewSY+w^l=kaeP}8 z9GIUc9h_c3=}13}siAHI-p%RhX*igDu&>v-k9VSC8)2KPGwVA(u5C~|sJ%rjXST8O zahzr+QE5o1oGf>}mBYO6c9b+P|I9Cnq|Z@DG&Ke9btdM&)Mig-gE0-o+^?#D-~Kb@7=8^@zd7Hq=z-$h=SSD`3!;w5la>3ZwC;5ZrU+9PbaJd(2nsO;@^Oc)g3gRZr4w56-N8o_X8)R9lTtXtMkCaI|mTb1Q&?DQ0aj zm8x&Lp2a=oB9g06VVT-?Z=4%iZBb}3&|ywhG>y!M6CD+mrltWvwYmqOU67QVscb>< zUwMYKH3N&kk<86e4ePB2Zap=m@&mjHN^2I%ePKU0Pe;>S=zg>{maw^u89UVuXRfV|c@Bo0gzP5K}R;4M(u_L8!k%Vedvu zvvMZ)Q)|7fn#Ku6AI5anuGV04b9H?${<@)Wp^njz_g$~~=bIA3!om+8fPWmUm0D6< zju}taW1NkVJUqpkv9eC?k6JpGRRYe^)3)?}2q-yNJN$Pyijp}yu#QXM0}Ib1b5-U_ zHI4+*2&H$4y7^zsm4NVIl8+>&bb*P;8VaXui|kHWCo--%4exLZTiw zw|pQR^!SFX938Qw0Xw+N2C7|M^NtZ;X7DK{&#XmPY!i5F8X#o?az= zPFk6y##EDvc@N!#+Y&bTV|iV<)hvm(Ia5zYV%3ktTb4eN-pg^$>vC0oNF9d^A2JWH zC}npPz#y;zh^Rg?g;u zmm%TLKZ%O%d25Ztf5M;YaOavSkw zIIx^e}yNk;3Ict#suLkw&}7-uVz`F8*}Rn_A^db_2Q5Yd&dJ z?uCRexuOa5n(+DeWHah4bzOgOC}fnq!1PWs#zv|05MkkA{9E6D^gxsd8ynEIi3&}y z%tThe=~qjA)j=5sg2ZoeoV4+{B*X59e3BM@G1RUP)nK1D#JIC&HM3U;Q{;r_=5?hi zRErb)D#QGdIdS_3NRC!sJF;+m~u5HoM zAUsb1ud4B=|*n5uGcrkayyMY zmy##v=I;2jnuZiaBl)G|$p;fuT`BUyQ-b+Ce>ZxI>^6ME8C&%TF?+>FmfpgPK=9$+ zp^V!9!5%%ox>06Y(L>}N^v*||`-vK3>`%W{vdG8^XwCYBt6?$zaQS5TR)>rbA!{~2 zf!t4v&4f}wXnMp})Z*O0N{p+c` zY%J`{TTjTtm7Mv*yVm-D3RMvmIe*ec@{JliySWI4st=z(=RZ7eCB z(DB#pSofrR^stt^PWK;5w{(`Wbv8R31UdZYQA^hQuwVhVeuX6Ff`uq7C(rDjp~x5V z(?GcjRrfI-Hl`&UE_QT&O&W$rtb(`G`jc-w3UPj8Ml5H6!QPPa@Kx>KjnB>N^4%qi zF=TQGL>`)oP)x1i#=AYS)?yydext~WJS(5qaO#{JRl^(ph0lii~j= zrOD@Dm*np6bpBXU)PX{6L=eQR=Es?amFP5dJ>%eySI_r0dMGiXJw$P6>%^FLF>cdd zPN0Z`iSn0}eWIgd?XhTs(A1rD)(3v-#N|D?-*x2c9x8Gdi!2^pDH$8X;+OJKb6oe| z-wu*ZzY$Qfc3{aMCpf6Cek0OEeYCI0L=7LAwB2A%WP^_X@vQ1GLCUn%*OVb18P7#K z)?5H;KJd8bW&naVV3=*KtlCfjC!Sc|gMz$iTi};(fE2T{^Y{GUr~i=Zq;kGapj~M0 zd~sTSgxL7~dqs)+f$Peks+G=2l_Fsfhz-|D12l!;XhwC)H!GSaE}kK&hhv$5L6@Bfp*_+ zZ^=*5W#n#7e~FD8?TDl#vAOG*+M$4X69cv)e=R1e98u=$@A4Y0UY8}<^9mcAi- zt~1T?0*4Wy%TxB|hTaMGPfnws(g#kygSQaAzc3InJqIy=B8s@L2%M?WcpfQP6Pv4< z8r5&TaaLbfG#5?n<%^l5MdrEanv|u8OFVS{#LcTNKe$R1udA2bXm@E|@~$u6Xd_dL zQp6$_8HfmyN3xxhnlTZY*m-zFP3k@P(qy;`yYky+;aRrRmBA7DKEt?qC1N)mOfM`%24^m-|_+)4Y*UG%r_ zlkYwpZ*U6>k@S0w_V0Qq2A_!IeOpu)>^Wf~&Mz+R+YN9|KuN=iW7<|IeGtSESZ1Ko z%vPuogpTWCGYz(XAl2evqC?Uevh^3<^9Qs9*|s(|W|1(&EHi4k1Y9G0gphxLQM@Q9 ztYus9?G_!UwvJ%S)XwuPL!<@_G}58N>wtIEfs>6n-?bJC6|^8dvgSgC@|Wy+&~o9D zQONxcLKG~;-NOu#dm!_NcP_==d0f`?_XoUR*Oj&gyRRnqSNmIzN*xSb1_eV*Y-c~K z5(edG`kr-BIk+~0aec?5RLh2i^jgD))~8Fr0`L9Z%2n&V?kn?bnTB2}w($MKQRVAK z!CbY?P70%ojmHvaFb8e=h<tP;gM`4nAF0ZyS=%)BD5YB|V;XgMjs!H99nWk~&IMpYV%A^U4p&n58+<+vdRUn_O z?}G&|$FG8tbw2diBrZF3b+06a2uzcr=cQWQQkSp%3_k5l#hUdPUj5jM&piKiHL;bP zH$aRYKu9E$tBa!=KmEJ*tm~bYMx#~ui%b@y!;c@1YobuOFtg1*5Pmm zK@j$#vw$)9BB%mTd1zaOJv(ifEWoqT0}#1~Uh6@^`b>fAP5Zhe`+>&fn0yAo^zuh$ z`l#uW3Ci;Gfp2g2{`{HhZNJlWqiPyYkX5EbcIwyBW}y80+FZNRJC9>1H%ZY(zB#O% zgN*G1eG+lKD*$Wu}C|P#tk3J^Cd)rP;*YskT7WkJ{(;VbaU%ze| zw1hn@thj)(1k1uweKs`Y&b!ap!DMUF(3?}ZSLWjgd;!UMW*a8qFdmF$>fJiRMh^h! zGcRvjyf<8ci3){94Gs(9P`m)_2Vh2T&p>99JqIIoJ zgQN)Acf_9rdb&cVixVdhua91JcX!A4G6~DU4~1K4Zz+PCF$lD11SJ2!#{^>je|dRb zTSp*%H~f#F3V*m3x9hy9XlXAq61Jq3Pz#^U1fK>*{(9DF= zn>O>(;iJ^nPHtcPFX5Sz(%{e#%n;z=1kWC6n*wHj5_JVMvwS_cJ<}Q@ zed>2d42d+p`tnofsIY*H)>KvH0!|xv9BjG*tgGyKRmkKwExt|tY?va!HKHIMMY!bN z2*V!5Q5b#r+*kdm0<-C$ckoaI8Yw&^6>@>MdeZ2Cduz4XCrY>CUT7|Lw^ z^#{ELYB|H3%zvc+0ChL5?rt0E7C!zp*&dgh>+`|TLuieL@EKdimlL$sx}U%}gl-kX z&+oi04a_rn^j|&n^oFrqai-bW;(rZa`_BZ@`?Cn?hLB0A#?KHYB;UwRj+S1XdxG2rTBJux~` z=9S)2#y+Y;NXVRr6i^~WRNV<7M5JeScMu}7OPZT~EiFTm=Q*l1Tn%1CI%PaXwxN>y zEu#JGtgYiLQiX-f@n)9k0Gb^m_BW+{QAP6z$RU7r2cY+wOoZoU$gpQoqycx&$Q*If zkVj~0_9O3LLtiCD9G4vH(9mHF9;Z>=PH=KGwTQq%EFbKXS#N+QbX>8*21qv`52`A- z)KkCk5}<^kMeWQs1OmTM7zBv#Yy(A*dQ}W04FQ2_sCDkr zVT^^R?JVKO))pLxmusTGj2^>Ns%%R%1uiN9C1?j#(-b5QJNf4e5uH*W2zISHgF6YN z589ZSZTII%psO6ydTP%**AIwAf@cAsahug(o^(k7Dt0?+*<)EDlOhqy`2aqv$lSlW zKQN#O zA4*bI9?2vry|%J8KU?u@LUb~9cpjSTP%OS;zemhM3=jGbi`BTPDVvSdyQ( zAG(SjFR_EE<}?3DWXSs)msF35urU#6Xg5N>#(I3|9}cr8P=MyKU(1IT84IzZQZfC- zHk1J@gi&%cKd}1WqcUrie&W`AP<+{*KHuBPs7XbEr;DxM>#m^rlz;oz=vAP?bM*U2 z-mDSq9NjV~S_YXMFetV{HfhWl2M?m#KfQL78J-exGXVJl_PTqXfYTR6;Z;V}n4s$Q zqj{G=_yKVqj!=h(hk#EDta7Fe$s?27gKbhn84L_PML)pjw}j^KqI%q?&q%)TU_~r5 zF(T|JotsSLT`p7_P_vDif?pjLJsCiN%J; z5_FdBGwWe^YGcsY<9cpiaOD7Za*7W7C&c0ASKaMs!X(pNtU^Y=g|oe;Rw7RRWBE>PJJUL>6|_a5p;VF zQ@V(p&b5TO*J9YRXUX5h>(pgk8nEU~WL0_l<*d&}t@`!KK2=Dq?T4~J)j7W&^!TX{ zy(>7_Ll>*(i(|Yua1hhPYn%i!{)pTot|>RKJKC$y|JY=VyI-y!^x8gett}J(?Jwo@ z>vz7}Xd7u%0QdYF+0YACzv-bq4X?+zbsZeh*$EU6uo#FCI0Xy{Q&iWRW50uk3$Ony zMF=Z>puL&^dn44f%Y{C~)x8n8RB9QqtaPquxIj7_ zt^28Bu9Z@INGdBn%g3pC%2hvW)-G-&?|OjtO@hg-E||0&{c?ZUq2ai#J3cj#qt`w_ zPwYzx|I)Tqm{gs_4}N+V_d?LTP1JKr;M3{`6``mbkX2Tk*>rbZ6B zt-dc|pj$pNQkU*j?(IxEMd_f$*v?*XkL5%rh2&;Vs0b1f{_Wqwm))z`1B*GHOrMMH zaozFlzkYv|?JXRr5VEX9b4t0UeOpIDUOt@~YxvdWKxxe!=C>>sITn!aS>6MZJw)G! zhMrBZ$GOQF=l-hE1@I=Iivu~=Y(L$7vj3_HBoAKSt7qTbDor}&faK4W?!1alCP(G< za7N?-d-Bt+nIGAHhx1gn1(HmJ-F=Ghvvf$XbPBZaJJpLfJL_E^U&)ioStpXVy)^!Y zL<~zyvcCLDF+BWQgehT+T9FqoP1gM|`rXt5d2g70seZL0KFK}W7(M1s`*(-f{~jLM z>pxgYh)XiCi#ZK5>-LFT$;&EDveW(kNfMDu`k{s{K$8CFs$Kh#C7+ve^n=MjdRfL; z4Yp27=6mr^*7#uuMLuwN{!ermq%7zQkp9@35*yx`WrE6LY0&3-o|=kI+fY6x+S?t`}YS zP2_l3qC1AkOHr6#r8=GNdlZ(KdUR|j3p+H^SNhb4E8f(4h!H2QB`NZju#>~&@l7X5 z2Zse)C$8DqoSw>s-4_`d`0ZdV29G~nP%zOlHuk@pl;YHls;jQ1hZjPZjRgfv_H}x3 zOwW_>+f_8(U@JO0Itul~5lH42Ep6J9vp!W>wq9+3X2`)apoid~JJqxjLila&E|uGqfKy!Nsg zRQiED@)Hqh0Ol-nw@j$Pn2@8zQW975!HTcxdj;yb8Pb;rH~zin*egt93~%0X)Q%S( zBfWF8T~our@G87Bxzy0(`4|IIFU#JL>ZWIrOAtzbP&PUp10f%c^nCiL@WeG&?Yg9R zVb`e6p2nt9p0(7)Knf|SWXAdJ`SOS){k!4y+j{S_Sgu*b-{Ae#@{$nKMJ9PiY*IC9zwf@n5C>;?I zDUnX4q@+Q*ySuxQ?(S|7kW}E%-Q5k+F?33ofb@O%-_Lz}-+4Gk&dlt+pZUdF-vxr( z#mJw>KJHisU!_E-lre>sXTTZ}ImilTLQr7e_=7UsN(MaHVEJnM_`v#-<3Tj6Xm7!4 zC9lC%hC!;iM15IDmow|NFpvd5NZHEDj&}*8*`e0C5(<${fW~B1@a^l+GA)msBR%9G z!+zOdGX5|{hCE-qj`?&C98967+moMq+2jwmczTv{6ObndtN&IR@6u%1Qxi2t=&@IAz9Zu@;R z`FxWR7C*cYzGM@en6MwO=br(Lm?tBBpOacxIX)qw_if>B=G~1V1vJADts}fRHLIX5YPoy zkaQ`AH79<2YyZwRtpr7%xiz-1wumP`bQDCPfxY0k@m<;I=v#Omn4SI2{d~_}QT}dv4S}^+2=7)v4_+0ahr1Rl2gS^t)_Az^Yf``*0JoFKFI{|VsQLIU3{m( z^lrOJK4`CXTNqRdN7bMH{u!Bn<>1*Qer|*s9Rwoj_Nv^>W*zlRJ>Gs$T^{xr9w)GF z+o7fxQe3_F9!H`PC34Gmn@TeljQHA=Bq6h#b;qIPfC`TRtCBG?hYXy(cDg35+D(3NI9Lx2wnQTMB>>*nn?&KV*pAEke+03V4TL`n+4ww(kK ze5+{>Ry>|=z-;7k<9)m9B@2wzrp5QDnpgl|1c$6KFRDT2Pm}!9hZltXI7FO|q3a1n zGt}&o99@r2Jb8D(JT|u2JHuNzV*!E8CcG8+_riT7_}lTT0ISQl?9|IvDB6(}?qI3w+coaV zP(Wd*fI}kQNjYvk!}X~RY!KKfG`tZq7<^eyzjQsnl)2er0xYi0LHGmP7y2 zxZDxKAGy;;k2Y^JYHJ7oZL|$EtF-7skWUVAGao1Ho>r>O-!qmjuB~_RJPq&>fLj4l zc#u30_}ke^x>T*G@PiVPL7(5$-aSX@V0i%d!;Dxy=aG`&V}=4wRkY~}*_2EazfiHP2i#0n zsgN+`^$=wEobe#h+EX-1JNc}O3-~%M#O8BLbg~qw3pd-gr~>W0_~uQn88ns>oqB7I z>c0n`yzKJ1{rB&jKsgX?Bi+ZPr;! zqPf;<-b@!9-~ZI)sra_u1%|^Sn8K)bbmA&PsR>_yzvtme;YuAWu}Qv&NaXV~1J;u00vnfKbY+woH&G5cvYFm?xb5%q;E-1KOz z%B%6mV;TI7(PJ~suxnba?{{;Tr2jKF zbPOheM-QdUfe0wpzj*nA=VCz?DZo1rG4nlK9)8U8KPC@v15|Cl9kD+?7QP>;KgovA z?Kw^S;Ur3HoF11f5_|_)xgqM1R_NwmjaL`kd~yY9&W$A+wd0%Jfj!LC;rPRqO0OFL zCl7JZn`onObu%NPpKQX6GX)GlX-$|C0}fI?KTQ05T6C@5H8ctiG9`u!6yWpagUzDM zc{fC4{aC*Ad5fs>mpSQ3g7l$C#qQeKqTqrXyXtJozoPlq0i86rm!6M_$#E`$&)?}! zZ6mz*RtF(AP=R_gjO=fKK{$R7k(^}NYGFKXpTAwJwNxq7Y(+;$p#*dmU&?GWNcpD< zlTi&7oM6U$OnBc{BynOOE~0{75I_QOL#qB9+ zo{l8PVz%GR+G1|n-sBKe`;RXxtSNFdYKwosT3wfeif9^aPiT(1TN5xa9uN?$t*xOX ze0zl$pL9Lr-=~#7bYPE-c7zt*=U@EXIB9SyD>V;%L@Mq@}J{EH;POE{c$b=Sm{9h0=bZE+->6 zhWB(73H7f4E+RlGu8t%yeiXM|6T9h689&dHLncQ2&M2h-f%~_b_0)Au=x%1U0bn^< z{h3@SNXzf!1Jn2khRDKRvYu1=ZW?vGN2W**2q)%XiV2N^{^+V3Y-FGL<`5hIW%?be zGnx=-f8&x(cNJ5k)#gm*I1{Mv*8b>MtCU4czevX(M}Jcj z^VBIGyL2Q3ode!F6@#U~Y{w{Eh@Xzi|H!T}7Ss74t%h@lpB zQeS_+YKa=-YC|==A7`;(#?!%@V1NHF@gycSfN06 zG2&P&QfTlIC6t3M>qP}cLzKnQGOQdA@2ffoi_Vla6fGoH5MLg1UHu9zdXurQMdF}7nMOxIi(ibuV6$sX&Qw@jJc0btRKaJ@}!Bbkss$n~e zEzr2W`likhQklPp)&N0*!b#{GCU`&Mx(Gmvu|0mSXZFu4^SX9twR`eVrwo_8Q`mgS zT;*~q!o|iEmRG_@^cB`Z^<#|>UHh+YBmx@_OYa;KHU3edDVPABHbM+PH@4CwbD{p7 zKVu(agsla|eC)+gRo2-|MKq#9Vwk^~HSGkf5`gi^sfgZ)eC2$r6qQi%OFsl1YE6hX z;2^|C6^I=FW&#O6REhLIHN?=xK=_V%V_bXi`l2_>+8=Ml$n8=4@3k0Hb#F1?5#e~6 zzc_#hqbwkE>k{F-ystg%5aClIPod<(Ch_I$aE6vCS;pr=xlINA;c5w%B^wa#uJ@Rb zA;jV>R1Q5|{>1FjWZ|SgCwJa;nZokGHBoW(1D`XtBN=^-R@|&#JpPb{MMEt?`t%Fm zMI1DXG{mzOGJF3hf;Z{032yxFxMMe|ven?|P~mzsx!2sHH_`f{eJ zu`g+(Wf7`0fqp3C+w9(i_&47WcD+}MxCBDOfAmBUhP+2B;J3g?P#{#y3=rEvBQ;6F znJ0nTp^`%;D&|a+-bncg6Ocm#1wM$^86%kKhrh~Wt;0LHYC(sC;Dtg?NtJ{VmHzM_ z%Lvgz-jIGn3x|G#YQ`cYhNEv`jlsj)qmkk$M8f5v<^;lnaB_U4Kw>Glyzc@iaQ*6i z_*F%i5O`NUL^w6)pI>ip43^9@PC^R!)`i%xxZEf@B&!O|q3lpimAsxaCi}+FK(p(d4-0{J2^RdysHnCpSSd+%axr%E$fi}Q?x>p{!!njP0X-=fN!NU zeH8N{T4w`gsw2tb6&VWT9S4pz^5;e)aaMvDS*e4%8B7%I>b&=Q@<&>s31&u1PPEcxbm4mkcc>&SDWDgBl2|5=hsz|KxtsoWmC%=dt2vz;( zOS+HuBCW}b`A^vB&bJ}*G(qaLybsCdX491w>J*5HPTidyRo1ZSdy}*2FV_owlt|co zn2-SGzYq6}$EKT1Xb5n8Y-nV}_{0jn-)#0zStok3;eC-9U)_a@GsCH~)c(eGl7Fva zoyv|$8J~Chs-HCp`z3nj6kLg%7(@v|$)a<1Lxl)IF^l~->sa!6#F#~r#Wmd_HjQS8 z$A~?NcggNxmS&|>d2@T3)@7kjs8&o{A)$b3i(qV5wzl@=(>eX)eK*mAZo-r>|6eix zVJ4Q4$!c!FHypY>aA*);U!->(h-YG_G}CdF5GvQZCNx?wh2v)a`XfZq8$WKrgEj~hm+U($|WBpZvz3qkb>)D~ed zkhc9eKo;X$J>wFI`--HeEsrwXSiNMqZj-&_CtY5mHorXPY)%{+X*lV@O@CQ;n(Kp1 z;N}=@!y#1%w~9>kCUIb7^gF{5sLnn&?_uXcFDACgfa6l0Z)tYNx|(xQ%L7;rX0q7g5HDgP=-y0LIXIAZZ5hXsE_GECA2 z)VC~dx2m5%H=o1k-Oi18vOsubi6C9S9hi;+vs!KKviIE)*zmtY%=!6KaL&nu0BCm9 ze2&0!o#)?Lz;ljkGy&JMe-qfPv~B7=fR{MrEz!ro3R4iHIpdVUvP~Mu4Z@p&i1`5^ z~DC=dh+~joTdQV1lBSxKc zOW?d}axj%E9FaTm9|)d(Hlyd~f0UjwQrBs;&$EUlD#Y|x17V7NBk%`#cz9UWrWvb) z0MOP}fbBH_OmyJi)UCBp&QsuUiC}_4;B^Q|0Y7}Za>39t`OVT*<@NH_p6us+t^23r zhuOE@{{oDQgV_b8W2AY`J6seNrZ*^t>D$h{is@T^Z`%1hHNO?gwZ=p)`1nz}|C`lt z%^Tl}BIR+{H{4ID zl*zX2I0YmIKwABMVS|0_$QcX-L0ad<&3vHATqP|H8nhzwhi$Xi>pX}rh&%%d)LAnf zc}xK@O3XP%1XFFa13BRu6gfNI1{Qmv>8ao}hQ2>3!qIUJahZUdI z+7E{KVL~7sV-V%tg*uinKa?XHBcfMCLAt6>0f)IHX`JhqY79}hT+^!wdFS;^m@7Thz%;QtDdIFcv!JL@b0vKKwY}Q;b-h{-WO|GtH$rP|igOU$KokDZ8=srQafNt#jB8XC# z`ZxuH;YIXOZq41WFgNc0kTf?5;CD0~M?fnJlCqMA7C?u1Osu!Lk zKXN1J0Ck|``V3fQFI0UlRe^g8H|lu4lI&SVvhWO#0)ckm8Z?!i%vb(YqSpS_i3EgR z&6)1|h0jQcrZUrNTlyDnJDu{++k^N)Bk=HlOwccb1Xh66Lc-wvIU9rJf59B@{j@B9 z-OU<%pd(q!9lfy>EwGF2dVZXNHRlS9o@Q6JZfo}M0%G!Cp?)Ja1`PiI6Y ztL;yj9>@Gp@D_NVE_ijTjKryvKrAg-3j^`we7)@|xSkFA-N9{bZD1cf{i@HW{m7$K z1p$H?(K|La=E&J z;CBFzGrew`*4(9^pC2&Kvt4J1;6or#bO=MToh%cMfh)IWRnBc82M1pZTh+JJh@lL5lTm-a>l(xSV<#WyU z+Y*otpw|M>j#Qp!GjrC{{jOjRn&v7)AAr3RkOhL~IO}M!))JW2v+kC5Q3<&lfUa`2 z5&mSkd2aWjRHu~_2j$kYO^a@qJ(?I=Ae)66BmiU=`R0ptqn<17zlNDdmz!Nwi)X;f zX=NpIe7956i6$Qn!eD1)zxyzLeET?zr(%5{!0UCL<$3Cps37hl_FanTht#2NqlJ8k zX33b8^v7M9C>fva=w|PKwI>fVpTHta*6XIw)Va0B$49;Vd$J#;$Pf8#SIKWApyPqW zzS{t49{|Jg04PY3@qjS&3V`W=54jUO)Iy|ot6tY&BPo!>2fYDD*;Q@1S1CAC!HUVu%nWc5j`r#~$|gs6 zZ+iQUgm$`%aC)b1wx(IcUn@lwwJ9$<<>D^k=(w@4;FzZEUxh-3&7KA7Upn$Cp_~{0 zy@3Q`S}oK(4t~nS2b+W&Pd`4s_+J3$0?jd2zh3ou0#a8NZtfP4ummjS$o}8J!Fse% zU7%11@I2rx0mheKy-nG}9kajFaCdGTG>4D)_ryf!;jf~iPqLXnTbiDlYKI>p%<_5I z;7mU31y8H_Ig@OFi$=w`#X31^(~hIYkoz zak5Tgqxld{2xJRQ!cn^&d>56sKe|g4g4zJ&FiKEqSLk&W^F_cjUI2(|<+bN%l7?VkcA^g* z{Kqm)n8=A>P;GU1GZ#YGdi_KfQ}@QzkVF&34$f}~!Uti@M}3hfSLHEx0V`VsX>yDL zp|GPX_f{#!gU%2jZoRsK+4`*cy_}CcI(d!}f95TLUD}YR>_683%Jn$MJei>DfIT<4 z=UA#j19HrAkU%A*Sx1{N2ohsCqpQK>4#ZgkWMI~~DU5aeB1~xG8H5MEnSo`j5>WXs zmXKxOAhGDk41ojz5hkLa2(~Rf{z7SzP44NA<{)Q@wrqmEA3DH0AQ9HWCa2H(*-IBmM>js$YP9hBAs0pT;; z;U~E`(e3XLP>wybOupy40VOa1Q1G1fV2lXA2@*H~0&r$&F7JC+Q&ZDr*3|r)9t_!$ z(NRz;fMp?A#%1n;lZm14%vB35@Hyxld^!L<0}ASwkZ0jFkWnuK6AWOmNlke^|1xl} z*)CLVPh~y+Rc$*@0$)hiExTW{{`GunyPYWqyetFog&rrimA-nv1I~AVtnt}h^Z+KK zn+xBC28-HT@c*C2kOS&I9N2zzOiXps;puue?O6lhiQQVu;+CkcnA4WUoR#qq^ewqtTj3+s`a$%H6SVVUITiM z2T)>yn$z7Qmw5h9`_-c5p)4zGq2Xku^{%uF7mZ)yKXdgwi_tpfn7lqS)+d1<@F^JP zcK=OJ&Mr+K@1K*rX;j3gPv6$CDOz~jl%_Rv|F>(ltl%(`jo9(c)gjjduDlS!Z{l$h z_xv|_c^y?&e!IXE^<2LKq?YY+ld^mwNWZ0$CP#_Z#$N&XoGs$FHeK?9+Rg2J4~+NQFa0}^BsGIMN&EZ4bvdacWedX!4f*B* ztKL}N)$S`j)PvPHM>L>y@Pli@`ZsmTLA^kM z{>u3+T?$Q{Sc6uX7=AXd8Z)V18xR8%ZEhXeugjrI(Av5Mmp55**jKK4s|Mo|{n%Q*J@mIp`K=M;rurvVc5t!YmQZ0Onk)VJxl$ z@m&Q7%?A+9+(>41LI(x>rexzvhZU6%iS8vkZ#eHvu*yU~jyad*>*;W{un9)8Lm=6q zFA>S+^6Kvw{#n)im`Dg)N;B>z(Ecpi*Jq%8)M!akzP%m=9Ced1oGA~I2WP^4HL7$b_l5Uw5G~goKeyuQs z)eUb~<(s2*nP$2LrzTzWH_XZBn4%k*TC)Wt&fpQvVm;3NP=WY?(stHb&5~ry@lc!B z=eX0yO@iWh!IMMtbNj!c16Hi^)_r@2vTvs|f_#_?2?-%@TiPm0OQQlTVVa!mtyA4B zH$4f}Uqr);V7;*9%(7XCFFu&5=NE6=e=r>Jw*q7lkbw!fH=y45%`B}vb2F%;J$LZI zX9un#2XtCEhTRM}LLHh?1a46O8eynlR!XKC`d??Ep?g>X1qZ*%$Bcd=e=TlE?W z4-fH$zTz%FHQS!l|DtMbkK{Y9IiQNk&p4_fmG7rE97E`1#j4GhgA`o=dtG!Of;|Mq zOQs0FANdm}K}Vr77+*K0VISSkTJ`Q_QdZl&MCWfcXtII=wJNYhOi3s!e;A8W7~;_{ z8p=lu_*l&cbZLiDzhiZ&;>j764QNOmG*^*1hU_46zCwJIiBW&heaQ1+X@13pBUYNG z2anw^MU&~4AF54-0^#9KW>U1)Fe2wr59uvsr1NSmZ20A5OygN=WXJ3yW}_p=x9n&9 z4K?twvXgp5)?NN193f`%xtd!&o*~28owoyTiqTCSPdhK#0O)SKX z(ap@}c4qsMQ$zWKPV76Ct=FB~*=8qM64)x&-g3@F(Y(~*=7@qLJzWCR$ytEDbUs